Merge pull request #5300 from apache/php82-support

PHP 8.2 Support
diff --git a/.asf.yaml b/.asf.yaml
index 5a795c4..acf7b7b 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -14,6 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# doc: https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features
+
 github:
   description: "Apache NetBeans"
   homepage: https://netbeans.apache.org/
@@ -31,6 +33,10 @@
     squash:  true
     merge:   true
     rebase:  true
+  protected_branches:
+    # no force push to master
+    master: {}
+
 notifications:
     commits:      commits@netbeans.apache.org
     issues:       notifications@netbeans.apache.org
diff --git a/.github/ISSUE_TEMPLATE/netbeans_bug_report.yml b/.github/ISSUE_TEMPLATE/netbeans_bug_report.yml
index 014c734..8a41811 100644
--- a/.github/ISSUE_TEMPLATE/netbeans_bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/netbeans_bug_report.yml
@@ -27,8 +27,7 @@
         Latest releases are always available from https://netbeans.apache.org/download/
       multiple: false
       options:
-        - "Apache NetBeans 15"
-        - "Apache NetBeans 16 release candidate"
+        - "Apache NetBeans 16"
         - "Apache NetBeans latest daily build"
     validations:
       required: true
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
deleted file mode 100644
index 63592bd..0000000
--- a/.github/release-drafter.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-categories:
-  - title: 'API Changes'
-    labels:
-      - 'API Change'
-  - title: 'UI Changes'
-    labels:
-      - 'UI'
-  - title: 'Gradle'
-    labels:
-      - 'Gradle'
-  - title: 'Maven'
-    labels:
-      - 'Maven'    
-template: |
-  ## What’s Changed
-
-  $CHANGES
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000..91e1ce8
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,116 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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
+
+# doc: https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuration-options
+changelog:
+
+  exclude:
+
+    labels:
+      - 'Release process'
+      - 'ci:no-build'
+  
+  # order matters since this works like a filter, a PR will show up only once.
+  # try to keep similar categories together since this is also the rendering order.
+  categories:
+
+    - title: 'Gradle'
+      labels:
+        - 'Gradle'
+
+    - title: 'Maven'
+      labels:
+        - 'Maven'
+
+    - title: 'Ant'
+      labels:
+        - 'Ant'
+
+    - title: 'Java'
+      labels:
+        - 'Java'
+        - 'JavaDoc'
+
+    - title: 'JavaFX'
+      labels:
+        - 'JavaFX'
+
+    - title: 'Groovy'
+      labels:
+        - 'Groovy'
+
+    - title: 'PHP'
+      labels:
+        - 'PHP'
+
+    - title: 'C/C++'
+      labels:
+        - 'C/C++'
+
+    - title: 'Enterprise'
+      labels:
+        - 'enterprise'
+        - 'Java EE/Jakarta EE'
+        - 'Micronaut'
+        - 'Payara'
+
+    - title: 'Web'
+      labels:
+        - 'JavaScript'
+        - 'TypeScript'
+        - 'HTML'
+        - 'CSS'
+        - 'CSL'
+
+    - title: 'Versioning'
+      labels:
+        - 'git'
+        - 'subversion'
+        - 'mercurial'
+
+    - title: 'Editor'
+      labels:
+        - 'Editor'
+        - 'ANTLR'
+        - 'Docker'
+
+    - title: 'UI Changes'
+      labels:
+        - 'UI'
+        - 'Look and Feel'
+
+    - title: 'Platform'
+      labels:
+        - 'Platform'
+
+    - title: 'Language Server Protocol'
+      labels:
+        - 'LSP'
+
+    - title: 'VSCode Extension'
+      labels:
+        - 'VSCode Extension'
+
+    - title: 'Maintanance'
+      labels:
+        - 'Code cleanup'
+        - 'Upgrade Library'
+        - 'dependencies'
+        - 'CI'
+
+    - title: Other Changes
+      labels:
+        - "*"
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a3c1737..9ea0743 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -31,7 +31,8 @@
 
 env:
 
-  OPTS: >
+  # note to self: don't remove the minus again
+  OPTS: >-
     -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
     -Dtest-unit-sys-prop.ignore.random.failures=true
 
@@ -48,15 +49,36 @@
   # 'PHP' label
   test_php: ${{ contains(github.event.pull_request.labels.*.name, 'PHP') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
 
+  # 'Groovy' label
+  test_groovy: ${{ contains(github.event.pull_request.labels.*.name, 'Groovy') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+
   # 'Platform' label
   test_platform: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
 
+  # 'tests' label for building all tests
+  test_tests: ${{ contains(github.event.pull_request.labels.*.name, 'tests') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+
+  # 'LSP' label for enabling Language Server Protocol tests
+  test_lsp: ${{ contains(github.event.pull_request.labels.*.name, 'LSP') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+
+  # 'GraalVM' label for tests requirering GraalVM
+  test_graalvm: ${{ contains(github.event.pull_request.labels.*.name, 'GraalVM') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+
+  # 'VSCode Extension' label for building and testing the VSCode Extension
+  test_vscode_extension: ${{ contains(github.event.pull_request.labels.*.name, 'VSCode Extension') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+
   # 'Ant', 'Gradle', 'Maven' and 'MX' labels trigger build-tools job
   # see job condition (env vars don't work for job conditions https://github.com/actions/runner/issues/1189 )
 
   # special commands:
   # 'ci:all-tests' enables everything
   # 'ci:no-build' disables the build job (and test jobs too)
+  # 'ci:dev-build' produces an artifact containing a runnable NetBeans zip distribution
+  
+  # default java distribution used by the setup-java action
+  # see https://github.com/actions/setup-java#supported-distributions
+  default_java_distribution: 'zulu'
+
 
 jobs:
 
@@ -66,9 +88,10 @@
     name: Build Clusters on JDK ${{ matrix.java }}
     if: contains(github.event.pull_request.labels.*.name, 'ci:no-build') == false
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
-        java: [ '11', '17' ]
+        java: [ '11', '17', '20-ea' ]
       fail-fast: false
     steps:
         
@@ -76,7 +99,13 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
+          
+      - name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
+        uses: actions/checkout@v3
+        with:
+          persist-credentials: false
+          submodules: false
 
       - name: Caching dependencies
         uses: actions/cache@v3
@@ -84,12 +113,13 @@
           path: ~/.hgexternalcache
           key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
           restore-keys: ${{ runner.os }}-
-          
-      - name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
-        uses: actions/checkout@v3
-        with:
-          persist-credentials: false
-          submodules: false
+
+      - name: Setup Gradle Daemon to run on JDK 11
+        if: ${{ matrix.java == '20-ea' }}
+        run: |
+          mkdir -p ~/.gradle
+          #uses a preinstalled JDK 11 from the runner
+          echo "org.gradle.java.home=$JAVA_HOME_11_X64" >> ~/.gradle/gradle.properties
 
       - name: Build NetBeans
         run: ant -quiet -Dcluster.config=release build-nozip
@@ -98,13 +128,26 @@
         if: ${{ matrix.java == '11' }}
         run: tar -I 'zstd -9 -T0' -cf /tmp/build.tar.zst --exclude ".git" .
 
-      - name: Upload Build
+      - name: Upload Workspace
         if: ${{ (matrix.java == '11') && success() }}
         uses: actions/upload-artifact@v3
         with:
           name: build
           path: /tmp/build.tar.zst
-          retention-days: 1
+          retention-days: 2
+          if-no-files-found: error
+          
+      - name: Create Dev Build
+        if: ${{ matrix.java == '11' && contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && success() }}
+        run: ant -quiet zip-cluster-config -Dcluster.config=release
+
+      - name: Upload Dev Build
+        if: ${{ matrix.java == '11' && contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && success() }}
+        uses: actions/upload-artifact@v3
+        with:
+          name: dev-build
+          path: nbbuild/NetBeans-*.zip
+          retention-days: 7
           if-no-files-found: error
 
 
@@ -113,9 +156,10 @@
     name: Commit Validation on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
-        java: [ '8', '11', '17', '19' ]
+        java: [ '8', '11', '17', '20-ea' ]
       fail-fast: false
     steps:
 
@@ -123,10 +167,9 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
-        if: ${{ matrix.java != '20-ea' }}  # see #4299
         run: |
           echo "DISPLAY=:99.0" >> $GITHUB_ENV
           Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
@@ -159,10 +202,13 @@
           retention-days: 1
 
 
+  # commit related checks - some steps run even when the build is dissabled
   paperwork:
     name: Check Paperwork on Linux/JDK ${{ matrix.java }}
     needs: base-build
+    if: always()
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     env:
       ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
     strategy:
@@ -174,9 +220,10 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
+        if: ${{ !cancelled() }}
         uses: actions/checkout@v3
         with:
           persist-credentials: false
@@ -184,11 +231,11 @@
           fetch-depth: 10
 
       - name: Print last 10 Commits
-        if: github.event_name == 'pull_request'
+        if: ${{ github.event_name == 'pull_request' && !cancelled() }}
         run: git log --oneline -n10 --pretty=format:'%h %an [%ae] %s'
 
       - name: Check line endings and verify RAT report
-        if: success() || failure()
+        if: ${{ !cancelled() }}
         run: |
           nbbuild/travis/check-line-endings.sh
           ant -quiet build-source-config
@@ -197,29 +244,29 @@
           ant $OPTS -quiet rat -Drat-report.haltonfailure=true
 
       - name: Clean Workspace
-        if: success() || failure()
+        if: ${{ !cancelled() }}
         run: cd ..; rm -Rf netbeans; mkdir netbeans
 
       - name: Download Build
-        if: success() || failure()
+        if: ${{ needs.base-build.result == 'success' && !cancelled() }}
         uses: actions/download-artifact@v3
         with:
           name: build
 
       - name: Extract
-        if: success() || failure()
+        if: ${{ needs.base-build.result == 'success' && !cancelled() }}
         run: tar --zstd -xf build.tar.zst
 
       - name: Verify libs and licenses
-        if: success() || failure()
+        if: ${{ needs.base-build.result == 'success' && !cancelled() }}
         run: ant $OPTS verify-libs-and-licenses -Dverify-libs-and-licenses.haltonfailure=true
 
       - name: Run check-sigtests-release
-        if: success() || failure()
+        if: ${{ needs.base-build.result == 'success' && !cancelled() }}
         run: ant $OPTS -quiet check-sigtests-release -Dfail.on.error=true
 
       - name: Run gen-sigtests-release
-        if: success() || failure()
+        if: ${{ needs.base-build.result == 'success' && !cancelled() }}
         run: ant $OPTS -quiet gen-sigtests-release
 
 
@@ -227,6 +274,7 @@
     name: Build-System Test on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '11' ]
@@ -236,7 +284,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Download Build
         uses: actions/download-artifact@v3
@@ -249,11 +297,17 @@
       - name: Test Netbeans Build System
         run: ant $OPTS -Dcluster.config=release localtest
 
+      - name: Build all Tests
+        # runs only in PRs if requested, nowhere else (~18 min)
+        if: env.test_tests == 'true' && github.event_name == 'pull_request' && success()
+        run: ant -quiet -Dcluster.config=release test -Dtest.includes=NoTestsJustBuild
+
 
   build-nbms:
     name: Build NBMs, Source zips and Javadoc on JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 90
     strategy:
       matrix:
         java: [ '11' ]
@@ -263,7 +317,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Download Build
         uses: actions/download-artifact@v3
@@ -288,16 +342,17 @@
     name: IDE Modules on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
-        java: [ '8' ]
+        java: [ '11' ]
     steps:
 
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -426,8 +481,8 @@
       - name: ide/html.custom
         run: ant $OPTS -f ide/html.custom test
 
-#      - name: ide/html.editor
-#        run: ant $OPTS -f ide/html.editor test
+      - name: ide/html.editor
+        run: ant $OPTS -f ide/html.editor test
 
 #      - name: ide/html.lexer
 #        run: ant $OPTS -f ide/html.lexer test
@@ -468,6 +523,9 @@
       - name: ide/lexer
         run: ant $OPTS -f ide/lexer test
 
+      - name: ide/lexer.antlr4
+        run: ant $OPTS -f ide/lexer.antlr4 test
+
       - name: ide/lib.terminalemulator
         run: ant $OPTS -f ide/lib.terminalemulator test
 
@@ -495,6 +553,9 @@
       - name: ide/o.openidex.util
         run: ant $OPTS -f ide/o.openidex.util test
 
+      - name: ide/options.editor
+        run: .github/retry.sh ant $OPTS -f ide/options.editor test
+
 #      - name: ide/parsing.api
 #        run: ant $OPTS -f ide/parsing.api test
 
@@ -628,16 +689,17 @@
     if: ${{ contains(github.event.pull_request.labels.*.name, 'Ant') || contains(github.event.pull_request.labels.*.name, 'Gradle') || contains(github.event.pull_request.labels.*.name, 'Maven') || contains(github.event.pull_request.labels.*.name, 'MX') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
-        java: [ '8' ]
+        java: [ '11' ]
     steps:
 
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -654,7 +716,7 @@
 
       # run unreliable steps first to fail early
       - name: java/java.mx.project
-        continue-on-error: true
+        continue-on-error: ${{ github.event_name != 'pull_request' }}
         run: .github/retry.sh ant $OPTS -f java/java.mx.project test
         
       - name: java/gradle.java
@@ -672,8 +734,8 @@
       - name: java/maven.grammar
         run: ant $OPTS -f java/maven.grammar test
 
-#      - name: java/maven.hints
-#        run: ant $OPTS -f java/maven.hints test
+      - name: java/maven.hints
+        run: ant $OPTS -f java/maven.hints test
 
 #      - name: java/maven.htmlui
 #        run: ant $OPTS -f java/maven.htmlui test
@@ -730,16 +792,23 @@
     if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '8' ]
     steps:
 
+      - name: Set up JDK 11
+        uses: actions/setup-java@v3
+        with:
+          java-version: 11
+          distribution: ${{ env.default_java_distribution }}
+
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -821,7 +890,7 @@
         run: ant $OPTS -Dvanilla.javac.exists=true -f platform/core.output2 test
 
       - name: platform/core.startup
-        run: ant $OPTS -Dvanilla.javac.exists=true -f platform/core.startup test
+        run: .github/retry.sh ant $OPTS -Dvanilla.javac.exists=true -f platform/core.startup test
 
       - name: platform/core.startup.base
         run: ant $OPTS -Dvanilla.javac.exists=true -f platform/core.startup.base test
@@ -874,6 +943,32 @@
       - name: platform/o.n.swing.tabcontrol
         run: ant $OPTS -Dvanilla.javac.exists=true -f platform/o.n.swing.tabcontrol test
 
+      - name: Set up JDK 11
+        uses: actions/setup-java@v3
+        with:
+          java-version: 11
+          distribution: ${{ env.default_java_distribution }}
+
+      # use cache so that the platform build doesn't have to download dependencies again
+      - name: Caching dependencies
+        uses: actions/cache@v3
+        with:
+          path: ~/.hgexternalcache
+          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
+          restore-keys: ${{ runner.os }}-
+
+      - name: platform build from platform-src zip
+        run: |
+          ant -quiet build-source-config -Dcluster.config=platform
+          mkdir tmpplatform && cd tmpplatform && unzip -qq ../nbbuild/build/platform-src*
+          ant build -Dcluster.config=platform
+
+      - name: Set up JDK ${{ matrix.java }}
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: ${{ env.default_java_distribution }}
+
       # required by netbinox tests
       - name: isolate platform build
         run: |
@@ -900,16 +995,23 @@
     if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 90
     strategy:
       matrix:
         java: [ '8' ]
     steps:
 
+      - name: Set up JDK 11
+        uses: actions/setup-java@v3
+        with:
+          java-version: 11
+          distribution: ${{ env.default_java_distribution }}
+
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1030,7 +1132,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: 11
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
         
       - name: platform/o.n.bootstrap on 11
         run: ant $OPTS -Dvanilla.javac.exists=true -f platform/o.n.bootstrap test
@@ -1042,20 +1144,89 @@
           paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
-  java-modules-test:
-    name: Java Modules on Linux/JDK ${{ matrix.java }} (some on 11)
+  harness-modules-test:
+    name: Harness, NB and Ergonomics on Linux/JDK ${{ matrix.java }}
+    # equals env.test_platform == 'true'
+    if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '8' ]
     steps:
 
+      - name: Set up JDK ${{ matrix.java }}
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+
+      - name: harness/o.n.insane
+        run: ant $OPTS -Dvanilla.javac.exists=true -f harness/o.n.insane test
+
+      - name: harness/apisupport.harness
+        run: ant $OPTS -Dvanilla.javac.exists=true -f harness/apisupport.harness test
+
+      - name: harness/harness/nbjunit
+        run: ant $OPTS -Dvanilla.javac.exists=true -f harness/nbjunit test
+
+      - name: harness/jellytools.platform
+        run: ant $OPTS -Dvanilla.javac.exists=true -f harness/jellytools.platform test -Dtest.config=stable
+
+      - name: ergonomics/ide.ergonomics
+        run: ant $OPTS -f ergonomics/ide.ergonomics test -Dtest.config=commit
+
+      - name: nb/deadlock.detector
+        run: ant $OPTS -f nb/deadlock.detector test
+
+      - name: nb/ide.branding
+        run: ant $OPTS -f nb/ide.branding test
+
+      - name: nb/o.n.upgrader
+        run: ant $OPTS -f nb/o.n.upgrader test
+
+#      - name: nb/updatecenters
+#        run: ant $OPTS -f nb/updatecenters test
+
+      - name: nb/welcome
+        run: ant $OPTS -f nb/welcome test
+        
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  java-modules-test:
+    name: Java Modules on Linux/JDK ${{ matrix.java }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 100
+    strategy:
+      matrix:
+        java: [ '11' ]
+    steps:
+
       - name: Set up JDK ${{ matrix.java }} 
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1106,22 +1277,20 @@
       - name: editor.htmlui
         run: ant $OPTS -f java/editor.htmlui test
 
-#      - name: java/form
-#        run: ant $OPTS -f java/form test
-
       - name: java.completion
         if: env.test_java == 'true' && success()
         run: ant $OPTS -f java/java.completion test
 
+      - name: java.editor
+        if: env.test_java == 'true' && success()
+        run: .github/retry.sh ant $OPTS -f java/java.editor test-unit
+
       - name: java.freeform
         run: ant $OPTS -f java/java.freeform test
 
 #      - name: java.kit
 #        run: ant $OPTS -f java/java.kit test
 
-#      - name: java.lexer
-#        run: ant $OPTS -f java/java.lexer test
-
 #      - name: java.metrics
 #        run: ant $OPTS -f java/java.metrics test
 
@@ -1165,8 +1334,9 @@
       - name: java.source.queriesimpl
         run: ant $OPTS -f java/java.source.queriesimpl test
 
-#      - name: java.sourceui
-#        run: ant $OPTS -f java/java.sourceui test
+      - name: java.sourceui
+        if: env.test_java == 'true' && success()
+        run: ant $OPTS -f java/java.sourceui test
 
       - name: java.testrunner
         run: ant $OPTS -f java/java.testrunner test
@@ -1174,9 +1344,6 @@
       - name: java.testrunner.ant
         run: ant $OPTS -f java/java.testrunner.ant test
 
-#      - name: javadoc
-#        run: ant $OPTS -f java/javadoc test
-
 #      - name: javawebstart
 #        run: ant $OPTS -f java/javawebstart test
 
@@ -1186,8 +1353,8 @@
 #      - name: jshell.support
 #        run: ant $OPTS -f java/jshell.support test
 
-#      - name: junit
-#        run: ant $OPTS -f java/junit test
+      - name: junit
+        run: ant $OPTS -f java/junit test-unit
 
       - name: junit.ant.ui
         run: ant $OPTS -f java/junit.ant.ui test
@@ -1204,15 +1371,9 @@
 #      - name: projectimport.eclipse.core
 #        run: ant $OPTS -f java/projectimport.eclipse.core test
 
-#      - name: refactoring.java
-#        run: ant $OPTS -f refactoring.java test
-
       - name: spellchecker.bindings.java
         run: ant $OPTS -f java/spellchecker.bindings.java test
 
-#      - name: spi.java.hints
-#        run: ant $OPTS -f java/spi.java.hints test
-
       - name: spring.beans
         run: ant $OPTS -f java/spring.beans test
 
@@ -1231,25 +1392,20 @@
       - name: xml.jaxb
         run: ant $OPTS -f java/xml.jaxb test
 
-      - name: Set up JDK 11
-        uses: actions/setup-java@v3
-        with:
-          java-version: 11
-          distribution: 'zulu'
+      - name: java.lexer
+        run: ant $OPTS -f java/java.lexer test
 
-      - name: Set up opts
-        run: echo "OPTS_11=-Dtest.run.args=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming -Dtest.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true" >> $GITHUB_ENV
-
-      - name: java/java.completion
+      - name: refactoring.java
         if: env.test_java == 'true' && success()
-        run: ant $OPTS $OPTS_11 -f java/java.completion test
+        run: ant $OPTS -f java/refactoring.java test-unit
 
-      - name: java/java.source
-        run: ant $OPTS $OPTS_11 -f java/java.source test-unit
-
-      - name: java/java.source.base
+      - name: form
         if: env.test_java == 'true' && success()
-        run: .github/retry.sh ant $OPTS $OPTS_11 -f java/java.source.base test
+        run: ant $OPTS -f java/form test-unit
+        
+      - name: javadoc
+        if: env.test_javadoc == 'true' && success()
+        run: ant $OPTS -f java/javadoc test
 
       - name: Create Test Summary
         uses: test-summary/action@v1
@@ -1262,6 +1418,7 @@
     name: APISupport Modules on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '8' ]
@@ -1271,7 +1428,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1308,7 +1465,7 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
   java-hints-test:
@@ -1317,17 +1474,19 @@
     if: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '11' ]
         config: [ 'batch1', 'batch2' ]
+      fail-fast: false
     steps:
 
       - name: Set up JDK ${{ matrix.java }} 
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1349,17 +1508,22 @@
         if: ${{ (matrix.config == 'batch2') && success() }}
         run: ant $OPTS -f java/java.hints.declarative test
 
+      - name: spi.java.hints
+        if: ${{ (matrix.config == 'batch2') && success() }}
+        run: ant $OPTS -f java/spi.java.hints test
+
       - name: Create Test Summary
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
   profiler-test:
     name: Profiler on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '11' ]
@@ -1369,7 +1533,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1394,23 +1558,24 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
   webcommon-test:
     name: Webcommon Modules on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
-        java: [ '8' ]
+        java: [ '11' ]
     steps:
 
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1529,13 +1694,14 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
   macos:
     name: Tests on MacOS/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: macos-11
+    timeout-minutes: 90
     strategy:
       matrix:
         java: [ '11' ]
@@ -1545,13 +1711,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
-
-      - uses: actions/cache@v3
-        with:
-          path: ~/Library/Caches/Homebrew
-          key: ${{ runner.os }}-homebrew
-          restore-keys: ${{ runner.os }}-homebrew
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Download Build
         uses: actions/download-artifact@v3
@@ -1562,8 +1722,6 @@
       - name: Extract
         run: unzstd -c build.tar.zst | tar -x
 
-      - run: brew install ant
-
       - name: Test platform/masterfs.macosx
         run: ant $OPTS -f platform/masterfs.macosx test
 
@@ -1578,7 +1736,7 @@
         if: failure()
         with:
           paths: |
-            "./*/*/build/test/*/results/*.xml"
+            "./*/*/build/test/*/results/TEST-*.xml"
             "./nbbuild/build/test/commit-validation/results/*.xml"
 
 
@@ -1586,6 +1744,7 @@
     name: JavaFX on Linux/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '11' ]
@@ -1595,7 +1754,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1620,13 +1779,16 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
-  enterprise-test:
-    name: Enterprise on Linux/JDK ${{ matrix.java }}
+  groovy-test:
+    name: Groovy on Linux/JDK ${{ matrix.java }}
+    # equals env.test_groovy == 'true'
+    if: ${{ contains(github.event.pull_request.labels.*.name, 'Groovy') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
     needs: base-build
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     strategy:
       matrix:
         java: [ '8' ]
@@ -1636,7 +1798,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       - name: Setup Xvfb
         run: |
@@ -1651,12 +1813,69 @@
       - name: Extract
         run: tar --zstd -xf build.tar.zst
 
-      - name: micronaut
-        run: ant $OPTS -f enterprise/micronaut test
+      - name: groovy/groovy.editor
+        run: ant $OPTS -f groovy/groovy.editor test
+
+      - name: groovy/groovy.gsp
+        run: ant $OPTS -f groovy/groovy.gsp test
+
+      - name: groovy/groovy.support
+        run: ant $OPTS -f groovy/groovy.support test
+
+#      - name: groovy/groovy
+#        run: ant $OPTS -f groovy/groovy test
+
+#      - name: groovy/groovy.java
+#        run: ant $OPTS -f groovy/groovy.java test
+
+#      - name: groovy/groovy.kit
+#        run: ant $OPTS -f groovy/groovy.kit test
+
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  enterprise-test:
+    name: Enterprise on Linux/JDK ${{ matrix.java }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        java: [ '8' ]
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+
+      - name: enterprise/micronaut
+        run: .github/retry.sh ant $OPTS -f enterprise/micronaut test
 
       - name: spring.webmvc
         run: ant $OPTS -f enterprise/spring.webmvc test
 
+      - name: tomcat5
+        run: ant $OPTS -f enterprise/tomcat5 test
+
       - name: websvc.editor.hints
         run: ant $OPTS -f enterprise/websvc.editor.hints test
 
@@ -1670,13 +1889,136 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  versioning-test:
+    name: Versioning Modules on Linux/JDK ${{ matrix.java }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        java: [ '11' ]
+
+    steps:
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+        
+      - name: Setup Env
+        run: echo "GIT_TEST_REPO=$HOME/git_test_repo" >> $GITHUB_ENV
+
+      - name: ide/versioning.core
+        run: ant $OPTS -f ide/versioning.core test-unit
+
+      - name: ide/versioning
+        run: ant $OPTS -f ide/versioning test-unit
+
+      - name: ide/versioning.core test-qa-functional
+        run: |
+          #Prepare git repo for tests
+          git init $GIT_TEST_REPO
+          # Prepare config file for ide/versioning.core module
+          touch ide/versioning.core/test/qa-functional/data/tck.properties
+          echo "test.root = $GIT_TEST_REPO" > ide/versioning.core/test/qa-functional/data/tck.properties
+          echo "test.vcs = org.netbeans.modules.versioning.DelegatingVCS" >> ide/versioning.core/test/qa-functional/data/tck.properties
+          # Run functional tests for ide/versioning.core module
+          ant $OPTS -f ide/versioning.core test-qa-functional
+        
+      - name: ide/versioning test-qa-functional
+        run: |
+          # Prepare config file for ide/versioning module
+          touch ide/versioning/test/qa-functional/data/tck.properties
+          echo "test.root = $GIT_TEST_REPO" > ide/versioning/test/qa-functional/data/tck.properties
+          echo "test.vcs = org.netbeans.modules.git.GitVCS" >> ide/versioning/test/qa-functional/data/tck.properties
+          # Run functional tests for ide/versioning module
+          ant $OPTS -f ide/versioning test-qa-functional
+
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  mysql-db-test:
+    name: DB Tests with MySQL on Linux/JDK ${{ matrix.java }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        java: [ '11' ]
+
+    services:
+      mysql:
+        image: mysql:5.7
+        env:
+          MYSQL_ROOT_PASSWORD: test
+          MYSQL_DATABASE: test
+        ports:
+          - 3306:3306
+        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+    steps:
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+        
+      - name: Setup Env
+        run: |
+          echo "OPTS_TEST=-Dtest-unit-sys-prop.mysql.user=root -Dtest-unit-sys-prop.mysql.password=test -Dtest-unit-sys-prop.mysql.host=127.0.0.1" >> $GITHUB_ENV
+          echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';\nFLUSH PRIVILEGES;\n" | mysql -h 127.0.0.1 --port 3306 -u root -ptest
+
+      - name: ide/db.metadata.model
+        run: .github/retry.sh ant $OPTS $OPTS_TEST -f ide/db.metadata.model test
+
+      - name: ide/db.mysql
+        run: .github/retry.sh ant $OPTS $OPTS_TEST -f ide/db.mysql test
+
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
 
 
   php:
     name: PHP on ${{ matrix.os }}/JDK ${{ matrix.java }}
     needs: base-build
     runs-on: ${{ matrix.os }}
+    timeout-minutes: 120
     defaults:
       run:
         shell: bash
@@ -1693,7 +2035,7 @@
         uses: actions/setup-java@v3
         with:
           java-version: ${{ matrix.java }} 
-          distribution: 'zulu'
+          distribution: ${{ env.default_java_distribution }}
 
       # linux specific setup
       - name: Setup PHP
@@ -1813,7 +2155,162 @@
         uses: test-summary/action@v1
         if: failure()
         with:
-          paths: "./*/*/build/test/*/results/*.xml"
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  lsp-test:
+    name: LSP tests on Linux/JDK ${{ matrix.java }}
+    # equals env.test_lsp == 'true'
+    if: ${{ contains(github.event.pull_request.labels.*.name, 'LSP') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        java: [ '8' ]
+
+    steps:
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+
+      - name: java/java.lsp.server
+        run: .github/retry.sh ant $OPTS -f java/java.lsp.server test
+
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  graalvm-test:
+    name: GraalVM ${{ matrix.graal }} Tests
+    # equals env.test_graalvm == 'true'
+    if: ${{ contains(github.event.pull_request.labels.*.name, 'GraalVM') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        graal: [ '20.3.0', '21.1.0' ]
+      fail-fast: false
+
+    steps:
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+
+      - name: Setup GraalVM
+        run: |
+          URL=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${{ matrix.graal }}/graalvm-ce-java8-linux-amd64-${{ matrix.graal }}.tar.gz
+          curl -L $URL | tar -xz
+          GRAALVM=`pwd`/graalvm-ce-java8-${{ matrix.graal }}
+          echo "JAVA_HOME=$GRAALVM" >> $GITHUB_ENV
+
+      - name: Setup GraalVM Languages
+        run: |
+          $JAVA_HOME/bin/gu install python
+          $JAVA_HOME/bin/gu install R
+          $JAVA_HOME/bin/gu install ruby
+
+      - name: platform/core.network
+        run: ant $OPTS -f platform/core.network test
+
+      - name: platform/api.scripting
+        run: ant $OPTS -f platform/api.scripting test
+
+      - name: ide/libs.graalsdk
+        run: ant $OPTS -f ide/libs.graalsdk test
+
+      - name: webcommon/libs.graaljs
+        run: ant $OPTS -f webcommon/libs.graaljs test
+
+      - name: profiler/profiler.oql
+        run: ant $OPTS -f profiler/profiler.oql test
+
+      - name: java/nashorn.execution
+        run: ant $OPTS -f java/nashorn.execution test
+
+      - name: java/debugger.jpda.truffle
+        run: .github/retry.sh ant $OPTS -f java/debugger.jpda.truffle test
+
+      - name: Create Test Summary
+        uses: test-summary/action@v1
+        if: failure()
+        with:
+          paths: "./*/*/build/test/*/results/TEST-*.xml"
+
+
+  vscode-extension-test:
+    name: VSCode Extension Tests on JDK ${{ matrix.java }}
+    # equals env.test_vscode_extension == 'true'
+    if: ${{ contains(github.event.pull_request.labels.*.name, 'VSCode Extension') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
+    needs: base-build
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    strategy:
+      matrix:
+        java: [ '8' ]
+
+    steps:
+      - name: Set up JDK ${{ matrix.java }}
+        uses: actions/setup-java@v3
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: ${{ env.default_java_distribution }}
+
+      - name: Set up node
+        uses: actions/setup-node@v3
+        with:
+          node-version: 16.13.2
+
+      - name: Setup Xvfb
+        run: |
+          echo "DISPLAY=:99.0" >> $GITHUB_ENV
+          Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar --zstd -xf build.tar.zst
+
+      - name: build-vscode-ext
+        run: |
+          cd java/java.lsp.server
+          ant build-vscode-ext -D3rdparty.modules=.*externalcodeformatter.*
+
+      - name: test-vscode-ext
+        run: |
+          cd java/java.lsp.server
+          ant test-vscode-ext
  
 
 # last job depends on everything so that it is forced to run last even if a long job fails early
@@ -1828,6 +2325,7 @@
       - ide-modules-test
       - platform-modules-test1
       - platform-modules-test2
+      - harness-modules-test
       - java-modules-test
       - java-hints-test
       - profiler-test
@@ -1837,11 +2335,20 @@
       - macos
       - php
       - javafx-test
+      - groovy-test
       - enterprise-test
+      - versioning-test
+      - lsp-test
+      - mysql-db-test
+      - graalvm-test
+      - vscode-extension-test
 
-    # don't cleanup on failure() or always(), because someone might want to restart an unreliable secondary job
-    if: ${{ always() && contains(needs.*.result, 'success') && !(contains(needs.*.result, 'failure')) }}
+    # cleanup if the primary build job succeeded and
+    #  * nothing else failed (allows manual restarts)
+    #  * the workflow got cancelled
+    if: ${{ always() && needs.base-build.result == 'success' && (!contains(needs.*.result, 'failure') || cancelled()) }}
     runs-on: ubuntu-latest
+    timeout-minutes: 60
     steps:
 
       - name: Checkout
@@ -1850,8 +2357,15 @@
           persist-credentials: false
           submodules: true
 
-      - name: Delete build Artifact
+      - name: Delete Workspace Artifact
         uses: ./.github/actions/delete-artifact/
         with:
           name: build
           failOnError: true
+
+      - name: Delete Dev Build Artifact
+        uses: ./.github/actions/delete-artifact/
+        if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && cancelled() }}
+        with:
+          name: dev-build
+          failOnError: true
diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml
deleted file mode 100644
index 3e6e043..0000000
--- a/.github/workflows/release-drafter.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-name: Release Drafter
-on:
-#  push:
-#    branches:
-#      - master
-#      - 'release*'
-  # manual trigger via github workflow UI
-  workflow_dispatch:
-
-jobs:
-  update_release_draft:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: release-drafter/release-drafter@v5
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index ce62816..23afeae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -109,6 +109,14 @@
 /extide/gradle/release/modules/gradle/daemon-loader/.gradle/
 /nbbuild/misc/prepare-bundles/target/
 
+# Gradle Unittest Data
+/extide/gradle/test/unit/data/**/build/
+/extide/gradle/test/unit/data/**/.gradle/
+/java/gradle.java/test/unit/data/**/build/
+/java/gradle.java/test/unit/data/**/.gradle/
+/enterprise/micronaut/test/unit/data/**/build/
+/enterprise/micronaut/test/unit/data/**/.gradle/
+
 # ANTLR v4 Grammar
 ##################################
 /java/languages.antlr/external/*.g4
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b0881f5..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,250 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-language: java
-dist: bionic
-addons:
-  apt:
-    packages:
-      - ant
-      - ant-optional
-      - xvfb
-      - openjfx
-      - libgfortran3
-      - libxml2-utils
-
-install:
-  - export PATH="$PATH:$TRAVIS_BUILD_DIR/nbbuild/travis"
-  - export DISPLAY=:99.0
-  - Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
-  - sleep 3
-
-cache:
-  directories:
-  - $HOME/.hgexternalcache
-
-git:
-  quiet: true
-  depth: 50
-
-matrix:
-    include:
-        - name: Pristine platform build
-          jdk: openjdk8
-          env:
-            - ANT_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-          script:
-            - nbbuild/travis/ant.sh -quiet build-source-config -Dcluster.config=platform
-            - mkdir tmpplatform
-            - cd tmpplatform
-            - unzip -qq ../nbbuild/build/platform-src*
-            - chmod a+x nbbuild/travis/ant.sh
-            - nbbuild/travis/ant.sh build -Dcluster.config=platform
-
-        - name: Compile all modules & tests
-          jdk: openjdk8
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=full -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-          script:
-            - nbbuild/travis/ant.sh $OPTS build
-            - nbbuild/travis/ant.sh $OPTS test -Dtest.includes=NoTestsJustBuild
-
-        - name: Test harness modules
-          jdk: openjdk8
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=platform -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true -Dvanilla.javac.exists=true"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - ant $OPTS -f harness/o.n.insane test
-            - ant $OPTS -f harness/apisupport.harness test
-            - ant $OPTS -f harness/nbjunit test
-            - ant $OPTS -f harness/jellytools.platform test -Dtest.config=stable
-
-        - name: Test nb modules
-          jdk: openjdk8
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=minimal -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - ant $OPTS -f nb/deadlock.detector test
-            - ant $OPTS -f nb/ide.branding test
-            - ant $OPTS -f nb/o.n.upgrader test
-            #- ant $OPTS -f nb/updatecenters test
-            - ant $OPTS -f nb/welcome test
-
-        - name: Test ergonomics modules
-          jdk: openjdk8
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - ant $OPTS -f ergonomics/ide.ergonomics test -Dtest.config=commit
-
-        - name: "Versioning modules (ide/versioning and ide/versioning.core) tests"
-          jdk: openjdk8
-          env:
-              - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=minimal -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-              - OPTS_TEST="-Dtest-unit-sys-prop.ignore.random.failures=true -Dvanilla.javac.exists=true"
-              - GIT_TEST_REPO="$HOME/git_test_repo"
-          script:
-              # Build sources
-              - nbbuild/travis/ant.sh $OPTS clean
-              - nbbuild/travis/ant.sh $OPTS build
-              # Run unit tests
-              - ant $OPTS $OPTS_TEST -f ide/versioning.core test-unit
-              - ant $OPTS $OPTS_TEST -f ide/versioning test-unit
-              #Prepare git repo for tests
-              - git init $GIT_TEST_REPO
-              # Prepare config file for ide/versioning.core module
-              - touch ide/versioning.core/test/qa-functional/data/tck.properties
-              - echo "test.root = $GIT_TEST_REPO" > ide/versioning.core/test/qa-functional/data/tck.properties
-              - echo "test.vcs = org.netbeans.modules.versioning.DelegatingVCS" >> ide/versioning.core/test/qa-functional/data/tck.properties
-              # Run functional tests for ide/versioning.core module
-              - ant $OPTS $OPTS_TEST -f ide/versioning.core test-qa-functional
-              # Prepare config file for ide/versioning module
-              - touch ide/versioning/test/qa-functional/data/tck.properties
-              - echo "test.root = $GIT_TEST_REPO" > ide/versioning/test/qa-functional/data/tck.properties
-              - echo "test.vcs = org.netbeans.modules.git.GitVCS" >> ide/versioning/test/qa-functional/data/tck.properties
-              # Run functional tests for ide/versioning module
-              - ant $OPTS $OPTS_TEST -f ide/versioning test-qa-functional
-
-        - name: "Tests with mysql database"
-          jdk: openjdk8
-          services:
-            - mysql
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -Dcluster.config=minimal -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-            - OPTS_TEST="-Dtest-unit-sys-prop.ignore.random.failures=true -Dvanilla.javac.exists=true -Dtest-unit-sys-prop.mysql.user=root -Dtest-unit-sys-prop.mysql.password=password"
-          before_script:
-            - echo "ALTER USER root@'localhost' IDENTIFIED BY 'password';\nFLUSH PRIVILEGES;\n" | mysql -u root
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - travis_retry ant $OPTS $OPTS_TEST -f ide/db.metadata.model test
-            - travis_retry ant $OPTS $OPTS_TEST -f ide/db.mysql test
-
-        - name: Test groovy modules on Java 8
-          jdk: openjdk8
-          env:
-            - BUILD_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-            - TEST_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $BUILD_OPTS clean
-            - nbbuild/travis/ant.sh $BUILD_OPTS build
-          script:
-            #- ant $TEST_OPTS -f groovy/groovy test
-            #- ant $TEST_OPTS -f groovy/groovy.java test
-            - ant $TEST_OPTS -f groovy/groovy.editor test
-            - ant $TEST_OPTS -f groovy/groovy.gsp test
-            #- ant $TEST_OPTS -f groovy/groovy.kit test
-            - ant $TEST_OPTS -f groovy/groovy.support test
-
-        - name: Test groovy modules on Java 11
-          jdk: openjdk8
-          env:
-            - BUILD_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-            - TEST_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $BUILD_OPTS clean
-            - nbbuild/travis/ant.sh $BUILD_OPTS build
-            - wget https://cdn.azul.com/zulu/bin/zulu11.58.23-ca-jdk11.0.16.1-linux_x64.tar.gz
-            - tar --extract --gzip --directory $HOME -f zulu11.58.23-ca-jdk11.0.16.1-linux_x64.tar.gz
-            - TEST_JDK=$HOME/zulu11.58.23-ca-jdk11.0.16.1-linux_x64
-            - export OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json $OPTS  -Dtest.nbjdk.home=$TEST_JDK -Dtest.run.args=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming -Dtest.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true"
-          script:
-            #- ant $TEST_OPTS -f groovy/groovy test
-            #- ant $TEST_OPTS -f groovy/groovy.java test
-            - ant $TEST_OPTS -f groovy/groovy.editor test
-            - ant $TEST_OPTS -f groovy/groovy.gsp test
-            #- ant $TEST_OPTS -f groovy/groovy.kit test
-            - ant $TEST_OPTS -f groovy/groovy.support test
-
-        - name: Test groovy modules on Java 17
-          jdk: openjdk8
-          env:
-            - BUILD_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-            - TEST_OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -Dcluster.config=groovy -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $BUILD_OPTS clean
-            - nbbuild/travis/ant.sh $BUILD_OPTS build
-            - wget https://raw.githubusercontent.com/sormuras/bach/master/install-jdk.sh
-            - export TEST_JDK=`bash install-jdk.sh --feature 17 --license GPL --emit-java-home --silent | tail -1`
-            - export OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json $OPTS  -Dtest.nbjdk.home=$TEST_JDK -Dtest.run.args=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming -Dtest.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true"
-          script:
-            #- ant $TEST_OPTS -f groovy/groovy test
-            #- ant $TEST_OPTS -f groovy/groovy.java test
-            - ant $TEST_OPTS -f groovy/groovy.editor test
-            - ant $TEST_OPTS -f groovy/groovy.gsp test
-            #- ant $TEST_OPTS -f groovy/groovy.kit test
-            - ant $TEST_OPTS -f groovy/groovy.support test
-
-        - name: Build the Visual Studio Code extension for Java
-          jdk: openjdk8
-          before_install:
-            - nvm install 16.13.2
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - (cd java/java.lsp.server; ant build-vscode-ext -D3rdparty.modules=.*externalcodeformatter.*)
-            - (cd java/java.lsp.server; ant test-vscode-ext)
-
-        - name: "GraalVM Tests (latest)"
-          jdk: openjdk8
-          env:
-            - GRAAL_VERSION="21.1.0"
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - travis_wait nbbuild/travis/scripting.sh
-
-        - name: "GraalVM Tests (LTS)"
-          jdk: openjdk8
-          env:
-            - GRAAL_VERSION="20.3.0"
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - travis_wait nbbuild/travis/scripting.sh
-
-#   exile: for tests which don't behave. Job should be kept short to be easily restartable
-        - name: Test unreliable tests on Java 8
-          jdk: openjdk8
-          env:
-            - OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json -quiet -Dcluster.config=java -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - travis_retry ant $OPTS -f java/java.lsp.server test
-
-after_failure:
-  - nbbuild/travis/print-junit-report.sh
-  - sleep 3
diff --git a/NOTICE b/NOTICE
index a7a9e51..9de85ba 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache NetBeans
-Copyright 2017-2022 The Apache Software Foundation
+Copyright 2017-2023 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.md b/README.md
index d4571a0..0e4b0dc 100644
--- a/README.md
+++ b/README.md
@@ -29,8 +29,6 @@
    * GitHub actions
      * [![Build Status](https://github.com/apache/netbeans/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/apache/netbeans/actions/workflows/main.yml)
      * [![Profiler Lib Native Binaries](https://github.com/apache/netbeans/actions/workflows/native-binary-build-lib.profiler.yml/badge.svg?branch=master)](https://github.com/apache/netbeans/actions/workflows/native-binary-build-lib.profiler.yml)
-   * TravisCI:
-     * [![Build Status](https://app.travis-ci.com/apache/netbeans.svg?branch=master)](https://app.travis-ci.com/apache/netbeans)
    * Apache Jenkins:
      * Linux: [![Build Status](https://ci-builds.apache.org/job/Netbeans/job/netbeans-linux/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-linux/)
      * Windows: [![Build Status](https://ci-builds.apache.org/job/Netbeans/job/netbeans-windows/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-windows) 
@@ -54,11 +52,11 @@
 ```
 $ ant
 ```
-Build the basic project (mainly, JavaSE features):
+Build the basic project (mainly Java features):
 ```
 $ ant -Dcluster.config=basic
 ```
-Build the full project (including Groovy, PHP, JavaEE/JakartaEE, and JavaScript features):
+Build the full project (including Groovy, PHP, JavaEE/JakartaEE and JavaScript features):
 ```
 $ ant -Dcluster.config=full
 ```
@@ -66,9 +64,14 @@
 ```
 $ ant -Dcluster.config=platform
 ```
+Cleanup:
+```
+$ ant -q clean
+```
 
 #### Notes:
 * You can also use `php`, `enterprise`, etc. See the [cluster.properties](https://github.com/apache/netbeans/blob/master/nbbuild/cluster.properties) file.
+* once built, you can simply open individual modules of interest with NetBeans and run/rebuild/debug them like any other project
 
 #### Generating Javadoc
 
@@ -102,7 +105,7 @@
 
 ### Reporting Bugs
 
-Bugs should be reported to https://github.com/apache/netbeans/issues
+[How to report bugs](https://netbeans.apache.org/participate/report-issue.html)
 
 ### Log, Config and Cache Locations
 
diff --git a/apisupport/apisupport.ant/nbproject/org-netbeans-modules-apisupport-ant.sig b/apisupport/apisupport.ant/nbproject/org-netbeans-modules-apisupport-ant.sig
index 55f7719..b0c33eb 100644
--- a/apisupport/apisupport.ant/nbproject/org-netbeans-modules-apisupport-ant.sig
+++ b/apisupport/apisupport.ant/nbproject/org-netbeans-modules-apisupport-ant.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.89
+#Version 2.90
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/Evaluator.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/Evaluator.java
index e8d17eb..ca6e5e1 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/Evaluator.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/Evaluator.java
@@ -42,6 +42,8 @@
 import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.swing.event.ChangeListener;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.platform.JavaPlatform;
@@ -90,6 +92,7 @@
     static final String NBJDK_HOME = "nbjdk.home"; // NOI18N
     public static final String RUN_CP = "run.cp";
     private static final SpecificationVersion JDK9 = new SpecificationVersion("9"); //NOI18N
+    private static final String JAVACAPI_CNB = "org.netbeans.libs.javacapi";
     
     private final NbModuleProject project;
     private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
@@ -423,9 +426,22 @@
             buildDefaults.put(CP, "${module.classpath}:${cp.extra}"); // NOI18N
             buildDefaults.put(RUN_CP, "${module.run.classpath}:${cp.extra}:${build.classes.dir}"); // NOI18N
             if (type == NbModuleType.NETBEANS_ORG && "true".equals(projectProperties.getProperties().get("requires.nb.javac"))) {
-                ModuleEntry javacapi = ml.getEntry("org.netbeans.libs.javacapi");
-                if (javacapi != null) {
-                    buildDefaults.put(ClassPathProviderImpl.BOOTCLASSPATH_PREPEND, javacapi.getClassPathExtensions());
+                ModuleEntry javacLibrary = ml.getEntry(JAVACAPI_CNB);
+                if (javacLibrary != null) {
+                    boolean implDependencyOnJavac =
+                        projectDependencies().filter(dep -> JAVACAPI_CNB.equals(dependencyCNB(dep)))
+                                             .map(dep -> XMLUtil.findElement(dep, "run-dependency", NbModuleProject.NAMESPACE_SHARED)) // NOI18N
+                                             .filter(runDep -> runDep != null)
+                                             .anyMatch(runDep -> XMLUtil.findElement(runDep, "implementation-version", NbModuleProject.NAMESPACE_SHARED) != null); // NOI18N
+                    String bootcpPrepend;
+                    if (implDependencyOnJavac) {
+                        bootcpPrepend = javacLibrary.getClassPathExtensions();
+                    } else {
+                        bootcpPrepend = Stream.of(javacLibrary.getClassPathExtensions().split(Pattern.quote(File.pathSeparator)))
+                                              .filter(ext -> ext.endsWith("-api.jar"))
+                                              .collect(Collectors.joining(File.pathSeparator));
+                    }
+                    buildDefaults.put(ClassPathProviderImpl.BOOTCLASSPATH_PREPEND, bootcpPrepend);
                 }
             }
             
@@ -604,27 +620,16 @@
         
     }
     
-    /**
-     * Should be similar to impl in ParseProjectXml.
-     */
     private String computeModuleClasspath(ModuleList ml) {
-        Element data = project.getPrimaryConfigurationData();
-        Element moduleDependencies = XMLUtil.findElement(data,
-            "module-dependencies", NbModuleProject.NAMESPACE_SHARED); // NOI18N
-        assert moduleDependencies != null : "Malformed metadata in " + project;
         StringBuilder cp = new StringBuilder();
-        for (Element dep : XMLUtil.findSubElements(moduleDependencies)) {
-            if (XMLUtil.findElement(dep, "compile-dependency", // NOI18N
-                    NbModuleProject.NAMESPACE_SHARED) == null) {
-                continue;
-            }
-            Element cnbEl = XMLUtil.findElement(dep, "code-name-base", // NOI18N
-                NbModuleProject.NAMESPACE_SHARED);
-            String cnb = XMLUtil.findText(cnbEl);
+        projectDependencies()
+                .filter(dep -> XMLUtil.findElement(dep, "compile-dependency", NbModuleProject.NAMESPACE_SHARED) != null) // NOI18N
+                .map(this::dependencyCNB)
+                .forEach(cnb -> {
             ModuleEntry module = ml.getEntry(cnb);
             if (module == null) {
                 Util.err.log(ErrorManager.WARNING, "Warning - could not find dependent module " + cnb + " for " + FileUtil.getFileDisplayName(project.getProjectDirectory()));
-                continue;
+                return ;
             }
             File moduleJar = module.getJarLocation();
             if (cp.length() > 0) {
@@ -632,11 +637,25 @@
             }
             cp.append(moduleJar.getAbsolutePath());
             cp.append(module.getClassPathExtensions());
-        }
+        });
         appendMyOwnClassPathExtensions(cp);
         return cp.toString();
     }
-    
+
+    private Stream<Element> projectDependencies() {
+        Element data = project.getPrimaryConfigurationData();
+        Element moduleDependencies = XMLUtil.findElement(data,
+            "module-dependencies", NbModuleProject.NAMESPACE_SHARED); // NOI18N
+        assert moduleDependencies != null : "Malformed metadata in " + project;
+        return XMLUtil.findSubElements(moduleDependencies).stream();
+    }
+
+    private String dependencyCNB(Element dependency) {
+        Element cnbEl = XMLUtil.findElement(dependency, "code-name-base", // NOI18N
+            NbModuleProject.NAMESPACE_SHARED);
+        return XMLUtil.findText(cnbEl);
+    }
+
     /**
      * Follows transitive runtime dependencies.
      * @see "issue #70206"
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java
index a8178d7..2130fdf 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java
@@ -112,6 +112,7 @@
                     @Override
                     public ClassPath run() {
                         if (boot == null) {
+                            ClassPathImplementation prependCP = createPathFromProperty(BOOTCLASSPATH_PREPEND);
                             final String loc = project.evaluator().getProperty(Evaluator.NBJDK_BOOTCLASSPATH_MODULAR);
                             if(loc != null) {
                                 final File locf = new File(loc);
@@ -122,13 +123,15 @@
                                             .findFirst()
                                             .orElse(null);
                                     if (locf.equals(jpLocf)) {
-                                        boot = jp.getBootstrapLibraries();
+                                        boot = ClassPathSupport.createProxyClassPath(
+                                                ClassPathFactory.createClassPath(prependCP),
+                                                jp.getBootstrapLibraries());
                                         break;
                                     }
                                 }
                             } else {
                                 boot = ClassPathFactory.createClassPath(ClassPathSupport.createProxyClassPathImplementation(
-                                        createPathFromProperty(BOOTCLASSPATH_PREPEND),
+                                        prependCP,
                                         createPathFromProperty(Evaluator.NBJDK_BOOTCLASSPATH),
                                         createFxPath()));
                             }
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/suite/SuiteSubprojectProviderImpl.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/suite/SuiteSubprojectProviderImpl.java
index 29b71bc..d9dcd95 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/suite/SuiteSubprojectProviderImpl.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/suite/SuiteSubprojectProviderImpl.java
@@ -89,7 +89,7 @@
                 if (dir != null) {
                     try {
                         Project subp = ProjectManager.getDefault().findProject(dir);
-                        if (subp != null && subp instanceof NbModuleProject) {
+                        if (subp instanceof NbModuleProject) {
                             newProjects.add((NbModuleProject) subp);
                         }
                     } catch (IOException e) {
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/customizer/BasicCustomizer.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/customizer/BasicCustomizer.java
index 182197c..2802a24 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/customizer/BasicCustomizer.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/customizer/BasicCustomizer.java
@@ -142,7 +142,7 @@
     }
     
     private String findLastSelectedCategory() {
-        if (dialog != null && dialog instanceof JDialog) {
+        if (dialog instanceof JDialog) {
             return (String)((JDialog)dialog).getRootPane().getClientProperty(BasicCustomizer.LAST_SELECTED_PANEL);
         }
         return null;
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/platform/NbPlatformCustomizer.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/platform/NbPlatformCustomizer.java
index 8b0bfe9..f5a1037 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/platform/NbPlatformCustomizer.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/platform/NbPlatformCustomizer.java
@@ -136,7 +136,7 @@
             detailPane.addTab(CTL_JavadocTab(), javadocTab);
             detailPane.addTab(CTL_HarnessTab(), harnessTab);
             Container window = this.getTopLevelAncestor();
-            if (window != null && window instanceof Window) {
+            if (window instanceof Window) {
                 ((Window) window).pack();
             }
         }
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/TypeChooserPanelImpl.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/TypeChooserPanelImpl.java
index bd70bd3..f0fb32b 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/TypeChooserPanelImpl.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/TypeChooserPanelImpl.java
@@ -636,7 +636,7 @@
         static File getProjectFolder( WizardDescriptor settings) {
             if (settings != null) {
                 Object value = settings.getProperty(PROJECT_FOLDER);
-                if (value != null && value instanceof File) {
+                if (value instanceof File) {
                     return (File) value;
                 }
             }
diff --git a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/spi/ModuleTypePanel.java b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/spi/ModuleTypePanel.java
index 7d9e844..0b3a7cb 100644
--- a/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/spi/ModuleTypePanel.java
+++ b/apisupport/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/wizard/spi/ModuleTypePanel.java
@@ -214,21 +214,21 @@
     
     private static NbPlatform getActiveNbPlatform(WizardDescriptor wizard){
         Object value = wizard.getProperty(ACTIVE_NB_PLATFORM);
-        if (value != null && value instanceof NbPlatform){
+        if (value instanceof NbPlatform){
             return (NbPlatform)value;
         }
         return null;
     }
     
     private static boolean extractBoolean(Object value, boolean defaultValue){
-        if (value != null && value instanceof Boolean){
+        if (value instanceof Boolean){
             return (Boolean)value;
         }
         return defaultValue;
     }
     
     private static String extractString(Object value, String defaultValue){
-        if (value != null && value instanceof String){
+        if (value instanceof String){
             return (String)value;
         }
         return defaultValue;
diff --git a/apisupport/apisupport.installer.maven/nbproject/project.properties b/apisupport/apisupport.installer.maven/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/apisupport/apisupport.installer.maven/nbproject/project.properties
+++ b/apisupport/apisupport.installer.maven/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/apisupport/apisupport.installer/nbproject/org-netbeans-modules-apisupport-installer.sig b/apisupport/apisupport.installer/nbproject/org-netbeans-modules-apisupport-installer.sig
index e5c8324..85f646c 100644
--- a/apisupport/apisupport.installer/nbproject/org-netbeans-modules-apisupport-installer.sig
+++ b/apisupport/apisupport.installer/nbproject/org-netbeans-modules-apisupport-installer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.40
+#Version 1.41
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/apisupport/apisupport.installer/nbproject/project.properties b/apisupport/apisupport.installer/nbproject/project.properties
index 1e89898..11ef658 100644
--- a/apisupport/apisupport.installer/nbproject/project.properties
+++ b/apisupport/apisupport.installer/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 nbm.module.author=Dmitry Lipin
diff --git a/apisupport/apisupport.kit/nbproject/project.properties b/apisupport/apisupport.kit/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/apisupport/apisupport.kit/nbproject/project.properties
+++ b/apisupport/apisupport.kit/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/apisupport/apisupport.project/nbproject/org-netbeans-modules-apisupport-project.sig b/apisupport/apisupport.project/nbproject/org-netbeans-modules-apisupport-project.sig
index fb69420..5a15f77 100644
--- a/apisupport/apisupport.project/nbproject/org-netbeans-modules-apisupport-project.sig
+++ b/apisupport/apisupport.project/nbproject/org-netbeans-modules-apisupport-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.93
+#Version 1.94
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/apisupport/apisupport.project/src/org/netbeans/modules/apisupport/project/layers/BadgingSupport.java b/apisupport/apisupport.project/src/org/netbeans/modules/apisupport/project/layers/BadgingSupport.java
index 6fe89d0..747354d 100644
--- a/apisupport/apisupport.project/src/org/netbeans/modules/apisupport/project/layers/BadgingSupport.java
+++ b/apisupport/apisupport.project/src/org/netbeans/modules/apisupport/project/layers/BadgingSupport.java
@@ -212,7 +212,7 @@
             }
             if (fo.hasExt("shadow")) { // NOI18N
                 Object originalFile = fo.getAttribute("originalFile"); // NOI18N
-                if (originalFile != null && originalFile instanceof String) {
+                if (originalFile instanceof String) {
                     FileObject orig;
                     try {
                         orig = fo.getFileSystem().findResource((String) originalFile);
diff --git a/apisupport/apisupport.refactoring/nbproject/project.properties b/apisupport/apisupport.refactoring/nbproject/project.properties
index 2c26da9..6fe2c03 100644
--- a/apisupport/apisupport.refactoring/nbproject/project.properties
+++ b/apisupport/apisupport.refactoring/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 requires.nb.javac=true
diff --git a/apisupport/apisupport.refactoring/src/org/netbeans/modules/apisupport/refactoring/AbstractRefactoringElement.java b/apisupport/apisupport.refactoring/src/org/netbeans/modules/apisupport/refactoring/AbstractRefactoringElement.java
index 914bd27..d137788 100644
--- a/apisupport/apisupport.refactoring/src/org/netbeans/modules/apisupport/refactoring/AbstractRefactoringElement.java
+++ b/apisupport/apisupport.refactoring/src/org/netbeans/modules/apisupport/refactoring/AbstractRefactoringElement.java
@@ -76,7 +76,7 @@
             DataObject dobj = DataObject.find(getParentFile());
             if (dobj != null) {
                 EditorCookie.Observable obs = (EditorCookie.Observable)dobj.getCookie(EditorCookie.Observable.class);
-                if (obs != null && obs instanceof CloneableEditorSupport) {
+                if (obs instanceof CloneableEditorSupport) {
                     CloneableEditorSupport supp = (CloneableEditorSupport)obs;
 
                     if (loc == null) {
diff --git a/apisupport/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/BasicWizardIterator.java b/apisupport/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/BasicWizardIterator.java
index d8db729..6a1389c 100644
--- a/apisupport/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/BasicWizardIterator.java
+++ b/apisupport/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/BasicWizardIterator.java
@@ -247,7 +247,7 @@
         // mkleint: copied from the NewJavaFileWizardIterator.. there must be something painfully wrong..
         String[] beforeSteps = null;
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         position = 0;
diff --git a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/MavenPackageModifierImpl.java b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/MavenPackageModifierImpl.java
index cbd70f4..9eaa006 100644
--- a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/MavenPackageModifierImpl.java
+++ b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/MavenPackageModifierImpl.java
@@ -135,7 +135,7 @@
                         @Override
                         public void run() {
                             TopComponent projecttc = WindowManager.getDefault().findTopComponent(ID_LOGICAL);
-                            if (projecttc != null && projecttc instanceof ExplorerManager.Provider) {
+                            if (projecttc instanceof ExplorerManager.Provider) {
                                 ExplorerManager.Provider em = (ExplorerManager.Provider) projecttc;
                                 Node root = em.getExplorerManager().getRootContext();
                                 toRet[0] = root;
diff --git a/contrib/cordova.platforms.ios/nbproject/project.properties b/contrib/cordova.platforms.ios/nbproject/project.properties
index 0c7fce5..76fd281 100644
--- a/contrib/cordova.platforms.ios/nbproject/project.properties
+++ b/contrib/cordova.platforms.ios/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 release.external/ios-sim=bin/ios-sim
 release.external/libiDeviceNativeBinding.dylib=bin/libiDeviceNativeBinding.dylib
diff --git a/contrib/form.j2ee/nbproject/project.properties b/contrib/form.j2ee/nbproject/project.properties
index fb8f298..ae7627b 100644
--- a/contrib/form.j2ee/nbproject/project.properties
+++ b/contrib/form.j2ee/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 spec.version.base=0.36.0
 requires.nb.javac=true
diff --git a/contrib/groovy.grails/nbproject/project.properties b/contrib/groovy.grails/nbproject/project.properties
index ec71387..95b039d 100644
--- a/contrib/groovy.grails/nbproject/project.properties
+++ b/contrib/groovy.grails/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 nbm.homepage=http://wiki.netbeans.org/groovy
 nbm.module.author=Martin Adamek, Petr Hejl, Matthias Schmidt
 
diff --git a/contrib/groovy.grailsproject/src/org/netbeans/modules/groovy/grailsproject/ui/wizards/GrailsArtifactWizardIterator.java b/contrib/groovy.grailsproject/src/org/netbeans/modules/groovy/grailsproject/ui/wizards/GrailsArtifactWizardIterator.java
index 645a96f..1655794 100644
--- a/contrib/groovy.grailsproject/src/org/netbeans/modules/groovy/grailsproject/ui/wizards/GrailsArtifactWizardIterator.java
+++ b/contrib/groovy.grailsproject/src/org/netbeans/modules/groovy/grailsproject/ui/wizards/GrailsArtifactWizardIterator.java
@@ -250,7 +250,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/contrib/hibernateweb/nbproject/project.properties b/contrib/hibernateweb/nbproject/project.properties
index e139269..35a75bf 100644
--- a/contrib/hibernateweb/nbproject/project.properties
+++ b/contrib/hibernateweb/nbproject/project.properties
@@ -18,6 +18,6 @@
 build.compiler.deprecation=false
 is.eager=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 
diff --git a/contrib/j2ee.jboss4/nbproject/project.properties b/contrib/j2ee.jboss4/nbproject/project.properties
index 66b98b0..c56d0ef 100644
--- a/contrib/j2ee.jboss4/nbproject/project.properties
+++ b/contrib/j2ee.jboss4/nbproject/project.properties
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 #javac.compilerargs=-Xlint:unchecked
 
 
diff --git a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossDataSourceRefModifier.java b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossDataSourceRefModifier.java
index ca39a72..c020928 100644
--- a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossDataSourceRefModifier.java
+++ b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossDataSourceRefModifier.java
@@ -188,6 +188,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String resRefName, Map beans, String jndiName) {
 
         assert(beans.size() > 0);
@@ -209,6 +210,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvResReference(Jboss modifiedJboss, String resRefName, Map beans, String jndiName) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossEjbRefModifier.java b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossEjbRefModifier.java
index 302cc65..fa20ff8 100644
--- a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossEjbRefModifier.java
+++ b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossEjbRefModifier.java
@@ -189,6 +189,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String ejbRefName, Map beans) {
 
         assert(beans.size() > 0);
@@ -209,6 +210,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvEjbReference(Jboss modifiedJboss, String ejbRefName, Map beans) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossMsgDestRefModifier.java b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossMsgDestRefModifier.java
index ca03a18..beebda9 100644
--- a/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossMsgDestRefModifier.java
+++ b/contrib/j2ee.jboss4/src/org/netbeans/modules/j2ee/jboss4/config/JBossMsgDestRefModifier.java
@@ -195,6 +195,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String msgDestRefName, Map beans, String destPrefix) {
 
         assert(beans.size() > 0);
@@ -215,6 +216,7 @@
      * 
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvMsgDestReference(Jboss modifiedJboss, String msgDestRefName, Map beans, String destPrefix) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties b/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
index 95e1861..86d30a5 100644
--- a/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
+++ b/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties b/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
index dc6f9da..ab4da2d 100644
--- a/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
+++ b/contrib/j2ee.jboss4/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/contrib/j2ee.jboss4/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties b/contrib/j2ee.jboss4/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
index 2086957..bfb0bb0 100644
--- a/contrib/j2ee.jboss4/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
+++ b/contrib/j2ee.jboss4/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/contrib/j2ee.weblogic9/nbproject/project.properties b/contrib/j2ee.weblogic9/nbproject/project.properties
index 87805d2..60a158d 100644
--- a/contrib/j2ee.weblogic9/nbproject/project.properties
+++ b/contrib/j2ee.weblogic9/nbproject/project.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-javac.source=1.6
+javac.source=1.8
 spec.version.base=1.45.0
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/contrib/libs.svnClientAdapter.svnkit/nbproject/project.properties b/contrib/libs.svnClientAdapter.svnkit/nbproject/project.properties
index acd3513..2ac3377 100644
--- a/contrib/libs.svnClientAdapter.svnkit/nbproject/project.properties
+++ b/contrib/libs.svnClientAdapter.svnkit/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 release.external/svnClientAdapter-svnkit-1.10.12.jar=modules/ext/svnClientAdapter-svnkit.jar
 release.external/org.tmatesoft.svnkit_1.8.12.r10533_v20160129_0158.jar=modules/ext/svnkit.jar
 release.external/sqljet-1.1.10.jar=modules/ext/sqljet.jar
diff --git a/contrib/websvc.metro.model/nbproject/project.properties b/contrib/websvc.metro.model/nbproject/project.properties
index 9d0f68d..1763b5c 100644
--- a/contrib/websvc.metro.model/nbproject/project.properties
+++ b/contrib/websvc.metro.model/nbproject/project.properties
@@ -18,7 +18,7 @@
 auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80
 auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=default
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javadoc.title=Configuration model for metro.xml config file
 javadoc.overview=${basedir}/overview.html
 javadoc.arch=${basedir}/../arch/arch-websvc-metro-model.xml
diff --git a/contrib/websvc.wsitconf/nbproject/project.properties b/contrib/websvc.wsitconf/nbproject/project.properties
index dd6b12a..ab18b1d 100644
--- a/contrib/websvc.wsitconf/nbproject/project.properties
+++ b/contrib/websvc.wsitconf/nbproject/project.properties
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javadoc.title=Web Services Interoperability Technologies Configuration Module
 javadoc.overview=${basedir}/overview.html
 javadoc.arch=${basedir}/../arch/arch-websvc-wsitconf.xml
diff --git a/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/ui/service/subpanels/TargetsPanel.java b/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/ui/service/subpanels/TargetsPanel.java
index 483070f..14a1d68 100644
--- a/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/ui/service/subpanels/TargetsPanel.java
+++ b/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/ui/service/subpanels/TargetsPanel.java
@@ -65,7 +65,7 @@
         while (!(b instanceof Binding) && (b != null)) {
             b = b.getParent();
         }
-        if ((b != null) && (b instanceof Binding)) {
+        if (b instanceof Binding) {
             binding = (Binding) b;
         }
         
diff --git a/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/wizard/STSWizard.java b/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/wizard/STSWizard.java
index 0dd617a..7d9a9f3 100644
--- a/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/wizard/STSWizard.java
+++ b/contrib/websvc.wsitconf/src/org/netbeans/modules/websvc/wsitconf/wizard/STSWizard.java
@@ -346,7 +346,7 @@
         // Creating steps.
         Object prop = this.wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/contrib/websvc.wsitmodelext/nbproject/project.properties b/contrib/websvc.wsitmodelext/nbproject/project.properties
index 03ecbe8..cc45fcd 100644
--- a/contrib/websvc.wsitmodelext/nbproject/project.properties
+++ b/contrib/websvc.wsitmodelext/nbproject/project.properties
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.title=Web Services Interoperability Technologies WSDL Extensions Module
 javadoc.overview=${basedir}/overview.html
 javadoc.arch=${basedir}/../arch/arch-websvc-wsitmodelext.xml
diff --git a/cpplite/cpplite.debugger/nbproject/org-netbeans-modules-cpplite-debugger.sig b/cpplite/cpplite.debugger/nbproject/org-netbeans-modules-cpplite-debugger.sig
index 290f3d6..5821e92 100644
--- a/cpplite/cpplite.debugger/nbproject/org-netbeans-modules-cpplite-debugger.sig
+++ b/cpplite/cpplite.debugger/nbproject/org-netbeans-modules-cpplite-debugger.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.9
+#Version 1.10
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/cpplite/cpplite.editor/nbproject/org-netbeans-modules-cpplite-editor.sig b/cpplite/cpplite.editor/nbproject/org-netbeans-modules-cpplite-editor.sig
index b0c688c..d21d467 100644
--- a/cpplite/cpplite.editor/nbproject/org-netbeans-modules-cpplite-editor.sig
+++ b/cpplite/cpplite.editor/nbproject/org-netbeans-modules-cpplite-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.8
+#Version 1.9
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/cpplite/cpplite.kit/nbproject/project.properties b/cpplite/cpplite.kit/nbproject/project.properties
index 7c940c4..5137752 100644
--- a/cpplite/cpplite.kit/nbproject/project.properties
+++ b/cpplite/cpplite.kit/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/api.web.webmodule/nbproject/org-netbeans-api-web-webmodule.sig b/enterprise/api.web.webmodule/nbproject/org-netbeans-api-web-webmodule.sig
index 3c0b4ca..7e0d6e4 100644
--- a/enterprise/api.web.webmodule/nbproject/org-netbeans-api-web-webmodule.sig
+++ b/enterprise/api.web.webmodule/nbproject/org-netbeans-api-web-webmodule.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.55
+#Version 1.56
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/enterprise/api.web.webmodule/nbproject/project.properties b/enterprise/api.web.webmodule/nbproject/project.properties
index 2336b2a..0c919e9 100644
--- a/enterprise/api.web.webmodule/nbproject/project.properties
+++ b/enterprise/api.web.webmodule/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 is.autoload=true
diff --git a/enterprise/cloud.common/nbproject/org-netbeans-modules-cloud-common.sig b/enterprise/cloud.common/nbproject/org-netbeans-modules-cloud-common.sig
index 98ce135..4ef7941 100644
--- a/enterprise/cloud.common/nbproject/org-netbeans-modules-cloud-common.sig
+++ b/enterprise/cloud.common/nbproject/org-netbeans-modules-cloud-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.28
+#Version 1.29
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/cloud.oracle/manifest.mf b/enterprise/cloud.oracle/manifest.mf
index 5015a16..2fb6b79 100644
--- a/enterprise/cloud.oracle/manifest.mf
+++ b/enterprise/cloud.oracle/manifest.mf
@@ -4,6 +4,6 @@
 OpenIDE-Module-Layer: org/netbeans/modules/cloud/oracle/resources/layer.xml
 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/cloud/oracle/Bundle.properties
 OpenIDE-Module-Provides: org.netbeans.modules.serverplugins.javaee
-OpenIDE-Module-Specification-Version: 1.4
+OpenIDE-Module-Specification-Version: 1.5
 OpenIDE-Module-Display-Category: Cloud
 
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/BrokenProfileNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/BrokenProfileNode.java
new file mode 100644
index 0000000..d9c18de
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/BrokenProfileNode.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle;
+
+import java.awt.Image;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.Action;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Children;
+import org.openide.util.ImageUtilities;
+import org.openide.util.lookup.Lookups;
+
+/**
+ * Represents a profile that can't connect to its tenancy. 
+ */
+public class BrokenProfileNode extends AbstractNode {
+    
+    private static final String ORCL_ICON = "org/netbeans/modules/cloud/oracle/resources/tenancy.svg"; // NOI18N
+    private static final String BADGE_ICON = "org/netbeans/modules/cloud/oracle/resources/error-badge.svg"; // NOI18N
+    
+    private final TenancyInstance instance;
+    
+    public BrokenProfileNode(TenancyInstance instance) {
+        super(Children.LEAF, Lookups.fixed(instance.profile));
+        this.instance = instance;
+        setName(instance.profile.getId()); 
+        setDisplayName(instance.getDisplayName());
+        setIconBaseWithExtension(ORCL_ICON);
+    }
+
+    @Override
+    public Action[] getActions(boolean context) {
+        List<? extends Action> commonActions = OCINode.actionsForPath(
+                "Cloud/Oracle/BrokenProfile/Actions", getLookup());
+        List<Action> result = new ArrayList<>();
+        for (Action commonAction : commonActions) {
+            if (commonAction.isEnabled()) {
+                result.add(commonAction);
+            }
+        }
+        return result.toArray(new Action[result.size()]);
+    }
+    
+    @Override
+    public Image getIcon(int type) {
+        return badgeIcon(super.getIcon(type));
+    }
+    
+    @Override
+    public Image getOpenedIcon(int type) {
+        return badgeIcon(super.getOpenedIcon(type));
+    }
+    
+    private Image badgeIcon(Image origImg) {
+        return ImageUtilities.mergeImages(origImg, ImageUtilities.loadImage(BADGE_ICON), 8, 8);
+    }
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/Bundle.properties b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/Bundle.properties
index 432eae0..f5a54ab 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/Bundle.properties
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/Bundle.properties
@@ -17,3 +17,11 @@
 
 OpenIDE-Module-Name=Oracle Cloud Infrastructure
 DownloadWalletDialog.jLabelInfo.text=Database connections to your Autonomous Database use a secure connection. The wallet file will be required to configure your database clients and tools to access Autonomous Database.\nPlease create a password for this wallet. Some database clients will require that you provide both the wallet and password to connect to your database (other clients will auto-login using the wallet without a password).
+ConnectProfilePanel.lblProfiles.text=Profiles:
+ConnectProfilePanel.lblConfig.text=Configuration file: 
+ConnectProfilePanel.txConfigPath.text=(default configuration)
+ConnectProfilePanel.lblMessageIcon.text=\ 
+ConnectProfilePanel.textMessage.text=Checking Oracle Cloud setup...
+
+# Branding API
+OCIManager_Autoload_DefaultConfig=false
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ChildrenProvider.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ChildrenProvider.java
index c7d9a90..b1a8588 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ChildrenProvider.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ChildrenProvider.java
@@ -25,9 +25,28 @@
  *
  * @author Jan Horvath
  */
-@FunctionalInterface
 public interface ChildrenProvider<T extends OCIItem, U extends OCIItem> {
 
     public List<U> apply(T t);
     
+    /**
+     * Session / profile-aware child factory. Accepts the active session (profile) as a parameter to
+     * find child items. 
+     * @param <T>
+     * @param <U> 
+     */
+    public interface SessionAware<T extends OCIItem, U extends OCIItem> extends ChildrenProvider<T, U> {
+        public default List<U> apply(T t) {
+            return apply(t, OCIManager.getDefault().getActiveSession());
+        }
+        
+        /**
+         * Finds children of item t. Use `session' to initialize BMC clients that communicate
+         * with OCI.
+         * @param t parent item
+         * @param session authenticator factory
+         * @return list of children.
+         */
+        public List<U> apply(T t, OCISessionInitiator session);
+    }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/CloudChildFactory.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/CloudChildFactory.java
index d7cdb55..d9b5280 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/CloudChildFactory.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/CloudChildFactory.java
@@ -19,6 +19,8 @@
 package org.netbeans.modules.cloud.oracle;
 
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.netbeans.modules.cloud.oracle.items.OCIItem;
 import org.openide.nodes.ChildFactory;
 import org.openide.nodes.Node;
@@ -30,22 +32,45 @@
  * @author Jan Horvath
  */
 public class CloudChildFactory extends ChildFactory<OCIItem> {
-
+    private static final Logger LOG = Logger.getLogger(CloudChildFactory.class.getName());
+    
     private final OCIItem parent;
+    private final OCISessionInitiator session;
+    
+    public CloudChildFactory(OCISessionInitiator session, OCIItem parent) {
+        this.parent = parent;
+        this.session = session;
+    }
 
     public CloudChildFactory(OCIItem parent) {
-        this.parent = parent;
+        this(OCIManager.getDefault().getActiveSession(), parent);
     }
 
     @Override
     protected boolean createKeys(List<OCIItem> toPopulate) {
-        Lookup.Result<ChildrenProvider> lkpResult = Lookups.forPath(
-                String.format("Cloud/Oracle/%s/Nodes", parent.getKey().getPath()))
-                .lookupResult(ChildrenProvider.class);
-        lkpResult.allInstances()
-                .parallelStream()
-                .forEach(kp -> toPopulate.addAll(kp.apply(parent)));
-        return true;
+        return OCIManager.usingSession(session, () -> {
+            Lookup.Result<ChildrenProvider> lkpResult = Lookups.forPath(
+                    String.format("Cloud/Oracle/%s/Nodes", parent.getKey().getPath()))
+                    .lookupResult(ChildrenProvider.class);
+            lkpResult.allItems()
+                    .parallelStream()
+                    .forEach(it -> {
+                        try {
+                            ChildrenProvider kp = it.getInstance();
+                            if (kp instanceof ChildrenProvider.SessionAware) {
+                                toPopulate.addAll(((ChildrenProvider.SessionAware)kp).apply(parent, session));
+                            } else {
+                                OCIManager.usingSession(session, () -> 
+                                    toPopulate.addAll(kp.apply(parent))
+                                );
+                            }
+                        } catch (RuntimeException ex) {
+                            // log
+                            LOG.log(Level.WARNING, "Error fetching children for {0}/{1}", new Object[] { parent.getKey(), it.getId() });
+                        }
+            });
+            return true;
+        });
     }
     
     @Override
@@ -53,7 +78,13 @@
         NodeProvider nodeProvider = Lookups.forPath(
                 String.format("Cloud/Oracle/%s/Nodes", key.getKey().getPath()))
                 .lookup(NodeProvider.class);
-        return new Node[]{nodeProvider.apply(key)};
+        if (nodeProvider instanceof NodeProvider.SessionAware) {
+            return new Node[]{((NodeProvider.SessionAware)nodeProvider).apply(key, session)};
+        } else {
+            return OCIManager.usingSession(session, () -> 
+                new Node[]{nodeProvider.apply(key)}
+            );
+        }
     }
     
     public void refreshKeys() {
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.form b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.form
new file mode 100644
index 0000000..d880dc7
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.form
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+
+<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="cards" max="32767" attributes="0"/>
+                  <Group type="102" attributes="0">
+                      <Component id="lblConfig" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="txConfigPath" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="txConfigPath" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lblConfig" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
+              <Component id="cards" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JTextField" name="txConfigPath">
+      <Properties>
+        <Property name="editable" type="boolean" value="false"/>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/cloud/oracle/Bundle.properties" key="ConnectProfilePanel.txConfigPath.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblConfig">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/cloud/oracle/Bundle.properties" key="ConnectProfilePanel.lblConfig.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JPanel" name="cards">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignCardLayout"/>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="profilesSelection">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
+              <CardConstraints cardName="profiles"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblProfiles" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="61" max="-2" attributes="0"/>
+                      <Component id="scrProfiles" pref="292" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="scrProfiles" pref="125" max="32767" attributes="0"/>
+                          <Group type="102" attributes="0">
+                              <Component id="lblProfiles" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="lblProfiles">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="org/netbeans/modules/cloud/oracle/Bundle.properties" key="ConnectProfilePanel.lblProfiles.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Container class="javax.swing.JScrollPane" name="scrProfiles">
+              <AuxValues>
+                <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+              </AuxValues>
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JList" name="lstProfiles">
+                  <Events>
+                    <EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="lstProfilesValueChanged"/>
+                  </Events>
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;OCIProfile&gt;"/>
+                  </AuxValues>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="message">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
+              <CardConstraints cardName="msg"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="-2" pref="97" max="-2" attributes="0"/>
+                      <Component id="lblMessageIcon" min="-2" pref="16" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jScrollPane1" min="-2" pref="291" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" attributes="0">
+                              <Component id="lblMessageIcon" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace pref="112" max="32767" attributes="0"/>
+                          </Group>
+                          <Component id="jScrollPane1" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="lblMessageIcon">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="org/netbeans/modules/cloud/oracle/Bundle.properties" key="ConnectProfilePanel.lblMessageIcon.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+              <Properties>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder/>
+                  </Border>
+                </Property>
+              </Properties>
+              <AuxValues>
+                <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+              </AuxValues>
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JTextPane" name="textMessage">
+                  <Properties>
+                    <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                      <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                        <EmptyBorder/>
+                      </Border>
+                    </Property>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/cloud/oracle/Bundle.properties" key="ConnectProfilePanel.textMessage.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.java
new file mode 100644
index 0000000..daaa3db
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/ConnectProfilePanel.java
@@ -0,0 +1,277 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle;
+
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Desktop;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.DefaultListModel;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import org.openide.util.ImageUtilities;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author sdedic
+ */
+public class ConnectProfilePanel extends javax.swing.JPanel{
+    private List<OCIProfile> allProfiles;
+    
+    private DefaultListModel<OCIProfile> model = new DefaultListModel<>();
+    /**
+     * Creates new form AddProfilePanel
+     */
+    public ConnectProfilePanel() {
+        initComponents();
+        ((CardLayout)cards.getLayout()).show(cards, "msg");
+        lblMessageIcon.setIcon(ImageUtilities.loadImageIcon("org/netbeans/modules/cloud/oracle/resources/info.png", false));
+        lstProfiles.setCellRenderer(new R());
+
+        textMessage.setEditable(false);
+        textMessage.addHyperlinkListener(new HyperlinkListener() {
+             @Override
+             public void hyperlinkUpdate(HyperlinkEvent hle) {
+                 if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
+                     Desktop desktop = Desktop.getDesktop();
+                     try {
+                         desktop.browse(hle.getURL().toURI());
+                     } catch (Exception ex) {
+                         ex.printStackTrace();
+                     }
+                 }
+             }
+         });
+    }
+    
+    public void setProfiles(List<OCIProfile> profiles) {
+        DefaultListModel mdl = new DefaultListModel();
+        for (OCIProfile p : profiles) {
+            mdl.addElement(p);
+        }
+        lstProfiles.setModel(mdl);
+        model = mdl;
+        
+        // switch the card:
+        ((CardLayout)cards.getLayout()).show(cards, "profiles");
+    }
+    
+    public void showErrorMessage(String msg) {
+        lblMessageIcon.setIcon(ImageUtilities.loadImageIcon("org/netbeans/modules/cloud/oracle/resources/error.png", false));
+        textMessage.setContentType("text/html");
+        textMessage.setText(msg);
+        ((CardLayout)cards.getLayout()).show(cards, "msg");
+    }
+    
+    public void setSelectedProfiles(List<OCIProfile> profiles) {
+        lstProfiles.clearSelection();
+        for (OCIProfile p : profiles) {
+            int index = model.indexOf(p);
+            if (index >= 0) {
+                lstProfiles.getSelectionModel().addSelectionInterval(index, index);
+            }
+        }
+    }
+    
+    public boolean isContentValid() {
+        return !lstProfiles.getSelectedValuesList().isEmpty();
+    }
+    
+    public List<OCIProfile> getSelectedProfiles() {
+        return new ArrayList<>(lstProfiles.getSelectedValuesList());
+    }
+
+    @NbBundle.Messages({
+        "# {0} tenancy name",
+        "# {1} profile name",
+        "LBL_DefaultConfigProfile={0} ({1})",
+        "# {0} tenancy name",
+        "# {1} profile",
+        "# {2} custom config filename",
+        "LBL_CustomConfigProfile={2}: {0} ({1})"
+    })
+    static class R extends DefaultListCellRenderer {
+
+        @Override
+        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+            OCIProfile p = (OCIProfile)value;
+            Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+            if (!(c instanceof JLabel)) {
+                return c;
+            }
+            JLabel l = (JLabel)c;
+            l.setIcon(ImageUtilities.loadImageIcon("org/netbeans/modules/cloud/oracle/resources/tenancy.svg", false));
+            // note: the tenancy data should have been fetched before setProfiles() is called to validate
+            // tenancy presence
+            if (p.isDefaultConfig()) {
+                l.setText(Bundle.LBL_DefaultConfigProfile(p.getTenancyData().getName(), p.getId()));
+            } else {
+                l.setText(Bundle.LBL_CustomConfigProfile(p.getTenancyData().getName(), p.getId(), p.getConfigPath().getFileName().toString()));
+                l.setToolTipText(p.getConfigPath().toString());
+            }
+            l.setToolTipText(p.getTenancy().get().getDescription());
+            return c;
+        }
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        txConfigPath = new javax.swing.JTextField();
+        lblConfig = new javax.swing.JLabel();
+        cards = new javax.swing.JPanel();
+        profilesSelection = new javax.swing.JPanel();
+        lblProfiles = new javax.swing.JLabel();
+        scrProfiles = new javax.swing.JScrollPane();
+        lstProfiles = new javax.swing.JList<>();
+        message = new javax.swing.JPanel();
+        lblMessageIcon = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        textMessage = new javax.swing.JTextPane();
+
+        txConfigPath.setEditable(false);
+        txConfigPath.setText(org.openide.util.NbBundle.getMessage(ConnectProfilePanel.class, "ConnectProfilePanel.txConfigPath.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(lblConfig, org.openide.util.NbBundle.getMessage(ConnectProfilePanel.class, "ConnectProfilePanel.lblConfig.text")); // NOI18N
+
+        cards.setLayout(new java.awt.CardLayout());
+
+        org.openide.awt.Mnemonics.setLocalizedText(lblProfiles, org.openide.util.NbBundle.getMessage(ConnectProfilePanel.class, "ConnectProfilePanel.lblProfiles.text")); // NOI18N
+
+        lstProfiles.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
+                lstProfilesValueChanged(evt);
+            }
+        });
+        scrProfiles.setViewportView(lstProfiles);
+
+        javax.swing.GroupLayout profilesSelectionLayout = new javax.swing.GroupLayout(profilesSelection);
+        profilesSelection.setLayout(profilesSelectionLayout);
+        profilesSelectionLayout.setHorizontalGroup(
+            profilesSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(profilesSelectionLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(lblProfiles)
+                .addGap(61, 61, 61)
+                .addComponent(scrProfiles, javax.swing.GroupLayout.DEFAULT_SIZE, 292, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        profilesSelectionLayout.setVerticalGroup(
+            profilesSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(profilesSelectionLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(profilesSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(scrProfiles, javax.swing.GroupLayout.DEFAULT_SIZE, 125, Short.MAX_VALUE)
+                    .addGroup(profilesSelectionLayout.createSequentialGroup()
+                        .addComponent(lblProfiles)
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+
+        cards.add(profilesSelection, "profiles");
+
+        org.openide.awt.Mnemonics.setLocalizedText(lblMessageIcon, org.openide.util.NbBundle.getMessage(ConnectProfilePanel.class, "ConnectProfilePanel.lblMessageIcon.text")); // NOI18N
+
+        jScrollPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+        textMessage.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        textMessage.setText(org.openide.util.NbBundle.getMessage(ConnectProfilePanel.class, "ConnectProfilePanel.textMessage.text")); // NOI18N
+        jScrollPane1.setViewportView(textMessage);
+
+        javax.swing.GroupLayout messageLayout = new javax.swing.GroupLayout(message);
+        message.setLayout(messageLayout);
+        messageLayout.setHorizontalGroup(
+            messageLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(messageLayout.createSequentialGroup()
+                .addGap(97, 97, 97)
+                .addComponent(lblMessageIcon, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 291, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+        );
+        messageLayout.setVerticalGroup(
+            messageLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(messageLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(messageLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(messageLayout.createSequentialGroup()
+                        .addComponent(lblMessageIcon)
+                        .addContainerGap(112, Short.MAX_VALUE))
+                    .addComponent(jScrollPane1)))
+        );
+
+        cards.add(message, "msg");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(cards, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblConfig)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(txConfigPath)
+                        .addContainerGap())))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(txConfigPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lblConfig))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(cards, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void lstProfilesValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstProfilesValueChanged
+        firePropertyChange("contentValid", null, null);
+    }//GEN-LAST:event_lstProfilesValueChanged
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JPanel cards;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JLabel lblConfig;
+    private javax.swing.JLabel lblMessageIcon;
+    private javax.swing.JLabel lblProfiles;
+    private javax.swing.JList<OCIProfile> lstProfiles;
+    private javax.swing.JPanel message;
+    private javax.swing.JPanel profilesSelection;
+    private javax.swing.JScrollPane scrProfiles;
+    private javax.swing.JTextPane textMessage;
+    private javax.swing.JTextField txConfigPath;
+    // End of variables declaration//GEN-END:variables
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/NodeProvider.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/NodeProvider.java
index 9fa80fc..bd503c4 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/NodeProvider.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/NodeProvider.java
@@ -30,4 +30,11 @@
     
     public Node apply(T t);
     
+    public interface SessionAware<T extends OCIItem> extends NodeProvider<T> {
+        public default Node apply(T t) {
+            return apply(t, OCIManager.getDefault().getActiveSession());
+        }
+
+        public Node apply(T t, OCISessionInitiator session);
+    }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIChildFactory.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIChildFactory.java
index adda017..2f5ecb3 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIChildFactory.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIChildFactory.java
@@ -19,6 +19,8 @@
 package org.netbeans.modules.cloud.oracle;
 
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.netbeans.modules.cloud.oracle.items.OCIItem;
 import org.openide.nodes.ChildFactory;
 import org.openide.nodes.Node;
@@ -30,11 +32,19 @@
  * @author Jan Horvath
  */
 public class OCIChildFactory extends ChildFactory<OCIItem> {
-
+    private static final Logger LOG = Logger.getLogger(OCIChildFactory.class.getName());
+    
     private final OCIItem parent;
-
+    private final OCISessionInitiator session;
+    
     public OCIChildFactory(OCIItem parent) {
         this.parent = parent;
+        this.session = OCIManager.getDefault().getActiveSession();
+    }
+
+    public OCIChildFactory(OCIItem parent, OCISessionInitiator session) {
+        this.parent = parent;
+        this.session = session;
     }
 
     @Override
@@ -42,9 +52,21 @@
         Lookup.Result<ChildrenProvider> lkpResult = Lookups.forPath(
                 String.format("Cloud/Oracle/%s/Nodes", parent.getKey().getPath()))
                 .lookupResult(ChildrenProvider.class);
-        lkpResult.allInstances()
+        lkpResult.allItems()
                 .parallelStream()
-                .forEach(kp -> toPopulate.addAll(kp.apply(parent)));
+                .forEach(it -> {
+                    try {
+                        ChildrenProvider kp = it.getInstance();
+                        if (kp instanceof ChildrenProvider.SessionAware) {
+                            toPopulate.addAll(((ChildrenProvider.SessionAware)kp).apply(parent, session));
+                        } else {
+                            toPopulate.addAll(kp.apply(parent));
+                        }
+                    } catch (RuntimeException ex) {
+                        // log
+                        LOG.log(Level.WARNING, "Error fetching children for {0}/{1}", new Object[] { parent.getKey(), it.getId() });
+                    }
+        });
         return true;
     }
     
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIManager.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIManager.java
index 2f0a6fe..016fc67 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIManager.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIManager.java
@@ -20,73 +20,555 @@
 
 import org.netbeans.modules.cloud.oracle.items.OCIItem;
 import com.oracle.bmc.ConfigFileReader;
+import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
 import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
-import com.oracle.bmc.database.DatabaseClient;
-import com.oracle.bmc.database.model.CreateAutonomousDatabaseBase;
-import com.oracle.bmc.database.model.CreateAutonomousDatabaseDetails;
-import com.oracle.bmc.database.model.GenerateAutonomousDatabaseWalletDetails;
-import com.oracle.bmc.database.requests.CreateAutonomousDatabaseRequest;
-import com.oracle.bmc.database.requests.GenerateAutonomousDatabaseWalletRequest;
-import com.oracle.bmc.database.responses.CreateAutonomousDatabaseResponse;
-import com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
-import com.oracle.bmc.identity.Identity;
-import com.oracle.bmc.identity.IdentityClient;
-import com.oracle.bmc.identity.model.Tenancy;
-import com.oracle.bmc.identity.requests.GetTenancyRequest;
-import com.oracle.bmc.identity.responses.GetTenancyResponse;
-import com.oracle.bmc.model.BmcException;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+import java.util.stream.Collectors;
+import org.netbeans.api.server.properties.InstanceProperties;
+import org.netbeans.api.server.properties.InstancePropertiesManager;
 import org.netbeans.modules.cloud.oracle.items.TenancyItem;
+import org.openide.filesystems.FileChangeAdapter;
+import org.openide.filesystems.FileChangeListener;
+import org.openide.filesystems.FileEvent;
+import org.openide.filesystems.FileUtil;
 import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
-import org.netbeans.modules.cloud.oracle.items.OCID;
+import org.openide.util.NbPreferences;
+import org.openide.util.lookup.Lookups;
+import org.openide.util.lookup.ProxyLookup;
 
 /**
  * Manages access to Oracle Cloud Resources
  *
  * @author Jan Horvath
  */
-@NbBundle.Messages({
-    "LBL_HomeRegion=Home Region: {0}"
-})
 public final class OCIManager {
+    private static final Logger LOG = Logger.getLogger(OCIManager.class.getName());
+    
+    public static final String PROP_ACTIVE_PROFILE = "activeProfile"; // NOI18N
+    public static final String PROP_CONNECTED_PROFILES = "connectedProfiles"; // NOI18N
+    
+    /**
+     * Maps all created profiles.
+     */
+    private static final Map<OCIConfig, OCIProfile> profiles = new HashMap<>();
+    
+    // @GuardedBy(this)
+    /**
+     * Implicit profiles inferred at runtime. Unitialized initially, will auto-populate
+     * to the default config on first reference, if OCIManager_Autoload_DefaultConfig=true.
+     */
+    private Map<String, List<OCIProfile>> implicitProfiles = new HashMap<>();
+    
+    // @GuardedBy(this)
+    /**
+     * Not read, but used to keep the listern from GC.
+     */
+    private FileChangeListener defaultProfileListener;
+    
+    /**
+     * Configuration for the OCI manager
+     */
+    public static final class OCIConfig {
+        
+        /**
+         * Configuration file location, or {@code null} for the default location.
+         */
+        private final Path configPath;
+        
+        /**
+         * The profile ID, or {@code null} for the default profile.
+         */
+        private final String profile;
+        
+        private long timestamp;
 
-    private ConfigFileReader.ConfigFile configFile;
-    private ConfigFileAuthenticationDetailsProvider provider;
-    private ConfigFileAuthenticationDetailsProvider configProvider;
+        public OCIConfig(Path configFile, String profile) {
+            this.configPath = configFile;
+            this.profile = profile;
+        }
 
-    private static OCIManager instance;
+        public Path getConfigFile() {
+            return configPath;
+        }
 
-    private OCIManager() {
-        init();
-    }
+        public String getProfile() {
+            return profile;
+        }
 
-    private void init() {
-        try {
-            configFile = ConfigFileReader.parseDefault();
-            provider = new ConfigFileAuthenticationDetailsProvider(configFile);
-            configProvider = new ConfigFileAuthenticationDetailsProvider(configFile);
-        } catch (Throwable ex) {
-            Exceptions.printStackTrace(ex);
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            return hash;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final OCIConfig other = (OCIConfig) obj;
+            if (!Objects.equals(this.configPath, other.configPath)) {
+                return false;
+            }
+            return Objects.equals(this.profile, other.profile);
         }
     }
     
-    public boolean isValid() {
-        return configProvider != null;
+    private static Path defaultConfigPath;
+    
+    static Path getDefaultConfigPath() {
+        if (defaultConfigPath != null) {
+            return defaultConfigPath;
+        }
+        String filename = System.getenv(ConfigFileReader.OCI_CONFIG_FILE_PATH_ENV_VAR_NAME);
+        if (filename == null) {
+            filename = ConfigFileReader.DEFAULT_FILE_PATH;
+        }
+        // the BMC library uses / as filename separator, assuming the env variable does the same
+        String replacedFile = filename.replace("~", new File(System.getProperty("user.home")).getAbsolutePath());
+        try {
+            try {
+                defaultConfigPath = Paths.get(new URI("file://" + replacedFile));
+            } catch (URISyntaxException ex) {
+                LOG.log(Level.WARNING, "Unable to parse default config path {0} as a file:// URI", replacedFile);
+                defaultConfigPath = Paths.get(replacedFile);
+            }
+        } catch (IllegalArgumentException ex) {
+            // illegal path - what to do ?!? use a fallback
+            LOG.log(Level.WARNING, "Unable to parse default config path {0} even as a path", replacedFile);
+            defaultConfigPath = Paths.get(System.getProperty("user.home"), ".oci", "config"); // NOI18N
+        }
+        return defaultConfigPath;
+    }
+    
+    private PropertyChangeSupport listeners;
+    
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+        synchronized (this) {
+            if (listeners == null) {
+                listeners = new PropertyChangeSupport(this);
+            }
+            listeners.addPropertyChangeListener(listener);
+        }
+    }
+    
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        synchronized (this) {
+            if (listeners == null) {
+                return;
+            }
+            listeners.removePropertyChangeListener(listener);
+        }
     }
 
-    public static synchronized OCIManager getDefault() {
-        if (instance == null) {
-            instance = new OCIManager();
+    /**
+     * Checks that the manager is still valid. Note that even invalid managers may succeed in 
+     * performing tasks like creating database or downloading a wallet, provided that different
+     * parts of OCI config changed.
+     * @return manager is valid
+     */
+    public boolean isValid() {
+        return getActiveProfile().isValid();
+    }
+    
+    /**
+     * Creates (or obtains) a manager instance for the default config and a specific
+     * profile. Use {@code null} profile to select the default profile. The method
+     * returns {@code null} if the requested profile does not exist.
+     * 
+     * @param profile profile ID or {@code null} for the default profile.
+     * @return manager instance.
+     */
+    public static synchronized OCIProfile forProfile(String profile) {
+        return forConfig(null, profile);
+    }
+    
+    
+    /**
+     * Lists profiles from the given config file. Profiles are listed in the order of appearance,
+     * with only a minimal information.
+     * 
+     * @param configPath path to the config file, or {@code null} for the default config.
+     * @return 
+     */
+    public List<OCIProfile> listProfiles(Path configPath) throws IOException {
+        Path p = configPath != null ? configPath : getDefaultConfigPath();
+        
+        return Files.readAllLines(p).stream().filter(s -> s.startsWith("[")).map(s -> {
+            String n = s.substring(1).trim();
+            if (n.endsWith("]")) {
+                n = n.substring(0, n.length() - 1).trim();
+            }
+            return n;
+        }).map(n -> forConfig(configPath, n)).collect(Collectors.toList());
+    }
+    
+    public static synchronized OCIProfile forConfig(Path configPath, String profile) {
+        OCIProfile prof;
+        if (configPath == null) {
+            configPath = getDefaultConfigPath();
         }
-        return instance;
+        if (profile == null) {
+            profile = OCIProfile.DEFAULT_ID;
+        }
+        OCIConfig c = new OCIConfig(configPath, profile);
+        synchronized (profiles) {
+            prof = profiles.get(c);
+            if (prof != null && prof.isValid()) {
+                return prof;
+            }
+        }
+        OCIProfile newProf = new OCIProfile(getDefaultConfigPath(), c.getProfile());
+        synchronized (profiles) {
+            OCIProfile check;
+            if (prof == null) {
+                check = profiles.putIfAbsent(c, newProf);
+                return check != null ? check : newProf;
+            } else {
+                check = profiles.get(c);
+                if (check == null || !check.isValid()) {
+                    profiles.put(c, newProf);
+                }
+                return newProf;
+            }
+        }
+    }
+    
+    private List<OCIProfile> list() {
+        return Collections.emptyList();
+    }
+    
+    private static OCIManager INSTANCE = new OCIManager();
+    
+    private OCIProfile activeProfile;
+    
+    private static final String KEY_CONFIG_PATH = "configPath";
+    private static final String KEY_PROFILE_ID = "profile";
+    
+    public void setImplicitProfiles(String key, List<OCIProfile> profiles) {
+        
+        List<OCIProfile> current  = getConnectedProfiles();
+        
+        boolean changes = false;
+        OCIProfile active;
+        synchronized (this) {
+             current = new ArrayList<>(implicitProfiles.getOrDefault(key, Collections.emptyList()));
+             for (Iterator<OCIProfile> it = current.iterator(); it.hasNext(); ) {
+                 OCIProfile p = it.next();
+                 if (!p.isValid()) {
+                     it.remove();
+                     changes = true;
+                 }
+             }
+             changes |= !(current.size() == profiles.size() && current.containsAll(profiles));
+             if (!changes) {
+                 return;
+             }
+             current.addAll(profiles);
+             implicitProfiles.put(key, profiles);
+             active = activeProfile;
+        }
+        listeners.firePropertyChange(PROP_CONNECTED_PROFILES, null, null);
+        synchronized (this) {
+            if ((active != null || profiles.isEmpty()) && !current.contains(active)) {
+                return;
+            }
+            activeProfile = null;
+        }
+        listeners.firePropertyChange(PROP_ACTIVE_PROFILE, null, null);
+    }
+    
+    static boolean loadDefaultConfigProfiles() {
+        return Boolean.valueOf(NbBundle.getMessage(OCIManager.class, "OCIManager_Autoload_DefaultConfig"));
+    }
+    
+    private Map<String, List<OCIProfile>> initImplicitProfiles() {
+        if (!loadDefaultConfigProfiles()) {
+            return implicitProfiles;
+        }
+        Path path = getDefaultConfigPath();
+        String s = path.toString();
+        synchronized (this) {
+            if (implicitProfiles.get(s) != null) {
+                return implicitProfiles;
+            }
+            try {
+                implicitProfiles.put(s, listProfiles(null));
+            } catch (IOException ex) {
+                // TODO: report inability to load profiles.
+                Exceptions.printStackTrace(ex);
+            }
+            FileUtil.addFileChangeListener(defaultProfileListener = new FileChangeAdapter() {
+                @Override
+                public void fileDeleted(FileEvent fe) {
+                    refresh();
+                }
+
+                @Override
+                public void fileChanged(FileEvent fe) {
+                    refresh();
+                }
+
+                @Override
+                public void fileDataCreated(FileEvent fe) {
+                    refresh();
+                }
+                
+                private void refresh() {
+                    try {
+                        setImplicitProfiles(s, listProfiles(null));
+                    } catch (IOException ex) {
+                        // TODO: display some lightweight unobtrusive message, or status line item
+                        Exceptions.printStackTrace(ex);
+                    }
+                }
+                
+            }, path.toFile());
+        }
+        return implicitProfiles;
+    }
+    
+    public void addConnectedProfile(OCIProfile profile) {
+        if (profile.getTenantId() == null) {
+            throw new IllegalArgumentException("Broken profiles are not supported.");
+        }
+        List<OCIProfile> current = getConnectedProfiles();
+        // PENDING: maybe add hashcode + equals to a profile.
+        if (current.contains(profile)) {
+            return;
+        }
+        boolean fireActive = current.isEmpty();
+        InstanceProperties p = InstancePropertiesManager.getInstance().createProperties("cloud.oracle.com.ociprofiles");
+        if (!getDefaultConfigPath().equals(profile.getConfigPath())) {
+            p.putString(KEY_CONFIG_PATH, profile.getConfigPath().toString());
+        }
+        // always store ID, at least something has to be stored for the properties to materialize.
+        p.putString(KEY_PROFILE_ID, profile.getId());
+        listeners.firePropertyChange(PROP_CONNECTED_PROFILES, null, null);
+        synchronized (this) {
+            if (activeProfile != null && activeProfile != profile) {
+                return;
+            }
+        }
+        listeners.firePropertyChange(PROP_ACTIVE_PROFILE, null, null);
+    }
+    
+    public boolean isConfiguredProfile(OCIProfile profile) {
+        return findProfileProperties(profile) != null;
+    }
+    
+    private InstanceProperties findProfileProperties(OCIProfile profile) {
+        List<InstanceProperties> props = InstancePropertiesManager.getInstance().getProperties("cloud.oracle.com.ociprofiles");
+        for (InstanceProperties p : props) {
+            String cfgPath = p.getString(KEY_CONFIG_PATH, null);
+            String profName = p.getString(KEY_PROFILE_ID, null);
+            if (cfgPath == null) {
+                cfgPath = getDefaultConfigPath().toString();
+            }
+            if (!profile.getConfigPath().toString().equals(cfgPath)) {
+                continue;
+            }
+            if (profName == null) {
+                profName = OCIProfile.DEFAULT_ID;
+            }
+            if (profName.equals(profile.getId())) {
+                return p;
+            }
+        }
+        return null;
+    }
+    
+    public void removeConnectedProfile(OCIProfile profile) {
+        String profName = profile.getId();
+        InstanceProperties p = findProfileProperties(profile);
+        if (p == null) {
+            return;
+        }
+        OCIProfile resetToProfile = null;
+
+        synchronized (this) {
+            OCIConfig cfg = new OCIConfig(profile.getConfigPath(), OCIProfile.DEFAULT_ID.equals(profile.getId()) ? null : profile.getId());
+            if (profiles.remove(cfg) == null) {
+                return;
+            }
+            if (profile == getActiveProfile()) {
+                OCIProfile def = forConfig(defaultConfigPath, profName);
+                if (profiles.values().contains(def) || profiles.isEmpty()) {
+                    resetToProfile = def;
+                } else {
+                    resetToProfile = profiles.values().iterator().next();
+                }
+            }
+        }
+        p.remove();
+        if (resetToProfile != null) {
+            setActiveProfile(resetToProfile);
+        }
+        listeners.firePropertyChange("connectedProfiles", null, null);
+    }
+    
+    /**
+     * Returns OCI profiles connected to the IDE
+     * @return list of OCI profiles.
+     */
+    public List<OCIProfile> getConnectedProfiles() {
+        Set<OCIProfile> toReturn = new LinkedHashSet<>();
+        
+        Path defConfigPath = getDefaultConfigPath();
+        List<InstanceProperties> props = InstancePropertiesManager.getInstance().getProperties("cloud.oracle.com.ociprofiles");
+        for (InstanceProperties p : props) {
+            String cfgPath = p.getString(KEY_CONFIG_PATH, null);
+            String profName = p.getString(KEY_PROFILE_ID, null);
+            if (OCIProfile.DEFAULT_ID.equals(profName)) {
+                profName = null;
+            }
+            if (cfgPath != null) {
+                try {
+                    Path check = Paths.get(cfgPath);
+                    if (defConfigPath.equals(check)) {
+                        cfgPath = null;
+                    }
+                } catch (IllegalArgumentException ex) {
+                    // TODO: handle malformed fs path
+                }
+            }
+            toReturn.add(forConfig(defConfigPath, profName));
+        }
+        
+        initImplicitProfiles().values().stream().flatMap(l -> l.stream()).forEach(toReturn::add);
+        
+        return new ArrayList<>(toReturn);
+    }
+    
+    /**
+     * Returns the active profile. 
+     * @return 
+     */
+    public OCIProfile getActiveProfile() {
+        OCIProfile p = Lookup.getDefault().lookup(OCIProfile.class);
+        if (p != null) {
+            return p;
+        }
+        OCIProfile active;
+        synchronized (this) {
+            active = activeProfile;
+        }
+        if (activeProfile == null) {
+            Preferences prefs = NbPreferences.forModule(OCIManager.class);
+            String confPath = prefs.get("activeProfilePath", null);
+            String id = null;
+            
+            Path path = null;
+            if (confPath != null) {
+                try {
+                    path = Paths.get(confPath);
+                } catch (IllegalArgumentException ex) {
+                    LOG.log(Level.WARNING, "Invalid active OCI profile path: {0}", confPath);
+                }
+            }
+            id = prefs.get("activeProfileId", null);
+            p = forConfig(path, id);
+            synchronized (this) {
+                if (activeProfile == null) {
+                    activeProfile = p;
+                } else {
+                    p = activeProfile;
+                }
+            }
+        }
+        return activeProfile;
+    }
+    
+    private String nonDefaultProfilePath(Path p) {
+        if (getDefaultConfigPath().equals(p)) {
+            return null;
+        } else {
+            return p.toString();
+        }
+    }
+    
+    private String nonDefaultProfileId(String id) {
+        return OCIProfile.DEFAULT_ID.equals(id) ? null : id;
+    }
+    
+    public void setActiveProfile(OCIProfile profile) {
+        if (profile == null) {
+            return;
+        }
+        OCIProfile oldProfile;
+        synchronized (this) {
+            if (profile == null) {
+                if (activeProfile == null) {
+                    return;
+                }
+                profile = forProfile(null);
+            }
+            if (profile == activeProfile) {
+                return;
+            }
+            oldProfile = activeProfile;
+            this.activeProfile = profile;
+            if (listeners == null) {
+                return;
+            }
+        }
+        if (oldProfile == null) {
+            oldProfile = forProfile(null);
+        }
+        Preferences prefs = NbPreferences.forModule(OCIManager.class);
+        if (getDefaultConfigPath().equals(profile.getConfigPath())) {
+            prefs.remove("activeProfilePath");
+        } else {
+            prefs.put("activeProfilePath", profile.getConfigPath().toString());
+        }
+        if (OCIProfile.DEFAULT_ID.equals(profile.getId())) {
+            prefs.remove("activeProfileId");
+        } else {
+            prefs.put("activeProfileId", profile.getId());
+        }
+        try {
+            prefs.flush();
+        } catch (BackingStoreException ex) {
+            // TODO perhaps log only
+            Exceptions.printStackTrace(ex);
+        }
+        listeners.firePropertyChange(PROP_ACTIVE_PROFILE, oldProfile, profile);
+    }
+    
+    public static synchronized OCIManager getDefault() {
+        return INSTANCE;
     }
 
     /**
@@ -96,25 +578,26 @@
      * Optional.empty() OCI configuration was not found
      */
     public Optional<TenancyItem> getTenancy() {
-        if (provider == null) {
-            return Optional.empty();
-        }
-        try (Identity identityClient = new IdentityClient(provider)) {
-            identityClient.setRegion(configProvider.getRegion());
-            GetTenancyRequest gtr = GetTenancyRequest.builder().tenancyId(provider.getTenantId()).build();
-            GetTenancyResponse response = identityClient.getTenancy(gtr);
-            Tenancy tenancy = response.getTenancy();
-            TenancyItem item = new TenancyItem(OCID.of(tenancy.getId(), "Tenancy"), tenancy.getName());
-            item.setDescription(Bundle.LBL_HomeRegion(tenancy.getHomeRegionKey()));
-            return Optional.of(item);
-        } catch (Throwable t) {
-            Exceptions.printStackTrace(t);
-        }
-        return Optional.empty();
+        return getActiveProfile().getTenancy();
+    }
+    
+    
+    /**
+     * Returns a factory that provides a {@link BasicAuthenticationDetailsProvider} that can
+     * initialize 
+     * @return 
+     */
+    public OCISessionInitiator getActiveSession() {
+        return getActiveProfile();
     }
 
+    /**
+     * @return
+     * @deprecated use either {@link #getActiveProfile()} or {@link #getActiveSession()}.
+     */
+    @Deprecated
     public ConfigFileAuthenticationDetailsProvider getConfigProvider() {
-        return configProvider;
+        return getActiveProfile().getConfigProvider();
     }
 
     /**
@@ -126,25 +609,7 @@
      * @return true if DB was created
      */
     public Optional<String> createAutonomousDatabase(String compartmentId, String dbName, char[] password) {
-        try (DatabaseClient client = new DatabaseClient(configProvider)) {
-            CreateAutonomousDatabaseBase createAutonomousDatabaseBase = CreateAutonomousDatabaseDetails.builder()
-                    .compartmentId(compartmentId)
-                    .dbName(dbName)
-                    .adminPassword(new String(password))
-                    .cpuCoreCount(1)
-                    .dataStorageSizeInTBs(1)
-                    .build();
-
-            CreateAutonomousDatabaseRequest createAutonomousDatabaseRequest = CreateAutonomousDatabaseRequest.builder()
-                    .createAutonomousDatabaseDetails(createAutonomousDatabaseBase).build();
-
-            try {
-                CreateAutonomousDatabaseResponse response = client.createAutonomousDatabase(createAutonomousDatabaseRequest);
-            } catch (BmcException e) {
-                return Optional.of(e.getMessage());
-            }
-            return Optional.empty();
-        }
+        return getActiveProfile().createAutonomousDatabase(compartmentId, dbName, password);
     }
 
     /**
@@ -159,35 +624,57 @@
      * @throws IOException
      */
     public Path downloadWallet(OCIItem dbInstance, String password, String parentPath) throws FileNotFoundException, IOException {
-        try (DatabaseClient client = new DatabaseClient(configProvider)) {
-            GenerateAutonomousDatabaseWalletDetails details
-                    = GenerateAutonomousDatabaseWalletDetails.builder().password(password).build();
-            GenerateAutonomousDatabaseWalletRequest generateAutonomousDatabaseWalletRequest
-                    = GenerateAutonomousDatabaseWalletRequest.builder()
-                            .autonomousDatabaseId(dbInstance.getKey().getValue())
-                            .generateAutonomousDatabaseWalletDetails(details)
-                            .build();
-            GenerateAutonomousDatabaseWalletResponse response
-                    = client.generateAutonomousDatabaseWallet(generateAutonomousDatabaseWalletRequest);
+        return getActiveProfile().downloadWallet(dbInstance, password, parentPath);
+    }
+    
+    @FunctionalInterface
+    public interface OCIOperation<V,E extends Exception> {
+        /**
+         * Performs the project operation, returning a value. The method may throw one
+         * checked exception.
+         * 
+         * @return the operation's result
+         * @throws E on failure.
+         */
+        public V call() throws E;
+    }
 
-            Path walletPath = null;
-            int i = 1;
-            do {
-                if (walletPath == null) {
-                    walletPath = Paths.get(parentPath, dbInstance.getName());
-                } else {
-                    walletPath = Paths.get(parentPath, dbInstance.getName() + "_" + i++); //NOI18N
+    private static <E extends Throwable> void sneakyThrow(Throwable e) throws E {
+        throw (E) e;
+    }
+    
+    /**
+     * Allows to execute OCI calls using a specific profile. During the callback, or tasks initiated
+     * by the callback, the {@link #getActiveProfile()} will return the profile `p' passed as a parameter.
+     * @param <V>
+     * @param <E>
+     * @param p
+     * @param toExecute
+     * @return 
+     */
+    public static <V, E extends Exception> V usingSession(OCISessionInitiator p, OCIOperation<V, E> toExecute) throws E{
+        Lookup localDefLookup = new ProxyLookup(Lookups.singleton(p), Lookup.getDefault());
+        Object[] res = new Object[1];
+        Exception[] t = new Exception[1];
+        if (OCIManager.getDefault().getActiveSession() != p) {
+            Lookups.executeWith(localDefLookup, () -> {
+                try {
+                    res[0] = toExecute.call();
+                } catch (Error | RuntimeException td) {
+                    throw td;
+                } catch (Exception ex) {
+                    t[0] = ex;
                 }
-            } while (Files.exists(walletPath));
-
-            Files.createDirectory(walletPath);
-            ZipInputStream zin = new ZipInputStream(response.getInputStream());
-            ZipEntry entry;
-            while ((entry = zin.getNextEntry()) != null) {
-                Path entryPath = walletPath.resolve(entry.getName());
-                Files.copy(zin, entryPath);
-            }
-            return walletPath;
+            });
+        } else {
+            return toExecute.call();
+        }
+        if (t[0] != null) {
+            sneakyThrow(t[0]);
+            // never reached
+            return null;
+        } else {
+            return (V)res[0];
         }
     }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCINode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCINode.java
index eff0d7b..d16043b 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCINode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCINode.java
@@ -18,6 +18,7 @@
  */
 package org.netbeans.modules.cloud.oracle;
 
+import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
 import java.util.ArrayList;
 import java.util.List;
 import javax.swing.Action;
@@ -27,6 +28,7 @@
 import org.openide.nodes.AbstractNode;
 import org.openide.nodes.Children;
 import org.openide.nodes.Node;
+import org.openide.util.ContextAwareAction;
 import org.openide.util.Lookup;
 import org.openide.util.Utilities;
 import org.openide.util.lookup.Lookups;
@@ -40,52 +42,74 @@
 
     private final OCIItem item;
     private final CloudChildFactory factory;
+    private final OCISessionInitiator session;
 
     public OCINode(OCIItem item) {
-        this(new CloudChildFactory(item), item, Lookups.fixed(item));
+        this(new CloudChildFactory(item), item, OCIManager.getDefault().getActiveSession(), Lookups.fixed(item));
     }
     
-    private OCINode(CloudChildFactory factory, OCIItem item, Lookup lookup) {
+    public OCINode(OCIItem item, OCISessionInitiator session) {
+        this(new CloudChildFactory(session, item), item, session, Lookups.fixed(item, session));
+    }
+    
+    private OCINode(CloudChildFactory factory, OCIItem item, OCISessionInitiator session, Lookup lookup) {
         super(Children.create(factory, true), lookup);
         setName(item.getName());
         this.item = item;
         this.factory = factory;
+        this.session = session;
         refreshListener = new RefreshListener();
         item.addChangeListener(refreshListener);
     }
     
     public OCINode(OCIItem item, Children children) {
-        super(children, Lookups.fixed(item));
+        super(children, Lookups.fixed(item, OCIManager.getDefault().getActiveSession()));
         setName(item.getName());
         this.item = item;
         this.factory = null;
+        this.session = OCIManager.getDefault().getActiveSession();
         refreshListener = new RefreshListener();
         item.addChangeListener(refreshListener);
     }
+    
+    protected BasicAuthenticationDetailsProvider getAuthProvider() {
+        return session.getAuthenticationProvider();
+    }
 
     @Override
     public Action[] getActions(boolean context) {
         List<Action> result = new ArrayList<>();
         
-        String path = item.getKey().getPath();
-        String provider = path.substring(0, path.indexOf("/"));
-        
-        
-        List<? extends Action> commonActions = Utilities.actionsForPath(
-                String.format("Cloud/%s/Common/Actions", provider));
+        List<? extends Action> commonActions = actionsForPath(
+                "Cloud/Oracle/Common/Actions", getLookup());
         for (Action commonAction : commonActions) {
             if (commonAction.isEnabled()) {
                 result.add(commonAction);
             }
         }
         
-        result.addAll(Utilities.actionsForPath(
-                String.format("Cloud/%s/Actions",
-                        item.getKey().getPath())));
+        result.addAll(actionsForPath(
+                String.format("Cloud/Oracle/%s/Actions",
+                        item.getKey().getPath()), getLookup()));
 
         return result.toArray(new Action[0]); // NOI18N
     }
     
+    public static final List<? extends Action> actionsForPath(String path, Lookup lkp) {
+        List<? extends Action> actions = Utilities.actionsForPath(path);
+        List<Action> ret = new ArrayList<>(actions.size());
+        for (Action a : actions) {
+            if (a instanceof ContextAwareAction) {
+                a = ((ContextAwareAction)a).createContextAwareInstance(lkp);
+                if (a == null) {
+                    continue;
+                }
+            }
+            ret.add(a);
+        }
+        return ret;
+    }
+    
     public void refresh() {
         factory.refreshKeys();
     }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIProfile.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIProfile.java
new file mode 100644
index 0000000..10bed71
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCIProfile.java
@@ -0,0 +1,324 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle;
+
+import com.oracle.bmc.ConfigFileReader;
+import com.oracle.bmc.Region;
+import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
+import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
+import com.oracle.bmc.database.DatabaseClient;
+import com.oracle.bmc.database.model.CreateAutonomousDatabaseBase;
+import com.oracle.bmc.database.model.CreateAutonomousDatabaseDetails;
+import com.oracle.bmc.database.model.GenerateAutonomousDatabaseWalletDetails;
+import com.oracle.bmc.database.requests.CreateAutonomousDatabaseRequest;
+import com.oracle.bmc.database.requests.GenerateAutonomousDatabaseWalletRequest;
+import com.oracle.bmc.database.responses.CreateAutonomousDatabaseResponse;
+import com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
+import com.oracle.bmc.identity.Identity;
+import com.oracle.bmc.identity.IdentityClient;
+import com.oracle.bmc.identity.model.Tenancy;
+import com.oracle.bmc.identity.requests.GetTenancyRequest;
+import com.oracle.bmc.identity.responses.GetTenancyResponse;
+import com.oracle.bmc.model.BmcException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import org.netbeans.modules.cloud.oracle.items.OCID;
+import org.netbeans.modules.cloud.oracle.items.OCIItem;
+import org.netbeans.modules.cloud.oracle.items.TenancyItem;
+import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
+import org.openide.util.NbBundle;
+import org.openide.util.lookup.Lookups;
+
+/**
+ * Represents an OCI profile. A profile has a user, tenancy and region
+ * assigned.
+ */
+public final class OCIProfile implements OCISessionInitiator {
+
+    /**
+     * ID of the default profile.
+     */
+    public static final String DEFAULT_ID = "DEFAULT"; // NOI18N
+    /**
+     * Profile ID.
+     */
+    private final String id;
+    /**
+     * Path to the profile's config file.
+     */
+    private final Path configPath;
+    /**
+     * Timestamp of the config file at the time the profile has been initialized.
+     */
+    private long fileStamp;
+    private ConfigFileAuthenticationDetailsProvider configProvider;
+    private IOException initError;
+    private Tenancy tenancyOpt;
+
+    OCIProfile(Path configPath, String id) {
+        this(configPath, id, true);
+        init();
+    }
+    
+    OCIProfile(Path configPath, String id, boolean internal) {
+        if (id == null) {
+            id = DEFAULT_ID;
+        }
+        if (configPath == null) {
+            configPath = OCIManager.getDefaultConfigPath();
+        }
+        this.id = id;
+        this.configPath = configPath;
+    }
+    
+    /**
+     * Determines if the profile is defined by the default configuration file.
+     * @return true, if the profile comes from the default OCI configuration, false otherwise.
+     */
+    public boolean isDefaultConfig() {
+        return configPath.equals(OCIManager.getDefaultConfigPath());
+    }
+
+    private void init() {
+        try {
+            if (!Files.exists(configPath)) {
+                return;
+            }
+            long stamp = Files.getLastModifiedTime(configPath).toMillis();
+            String stringPath = configPath.toAbsolutePath().toString();
+            ConfigFileReader.ConfigFile configFile = id == null ? ConfigFileReader.parse(stringPath) : ConfigFileReader.parse(stringPath, id);
+            configProvider = new ConfigFileAuthenticationDetailsProvider(configFile);
+            fileStamp = stamp;
+        } catch (IOException ex) {
+            initError = ex;
+        } catch (Throwable ex) {
+            initError = new IOException(ex);
+        }
+    }
+
+    public Path getConfigPath() {
+        return configPath;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public boolean isValid() {
+        return configProvider != null && fileStamp == configPath.toFile().lastModified(); // avoid IOE
+    }
+
+    @Override
+    public BasicAuthenticationDetailsProvider getAuthenticationProvider() {
+        return configProvider;
+    }
+    
+    @Override
+    public Region getRegion() {
+        return configProvider.getRegion();
+    }
+
+    @Override
+    public String getTenantId() {
+        return configProvider == null ? null : configProvider.getTenantId();
+    }
+    
+    public Tenancy getTenancyData() {
+        if (configProvider == null) {
+            return null;
+        }
+        synchronized (this) {
+            if (tenancyOpt != null || initError != null) {
+                return tenancyOpt;
+            }
+        }
+        try (final Identity identityClient = new IdentityClient(configProvider)) {
+            identityClient.setRegion(configProvider.getRegion());
+            GetTenancyRequest gtr = GetTenancyRequest.builder().tenancyId(configProvider.getTenantId()).build();
+            GetTenancyResponse response = identityClient.getTenancy(gtr);
+            Tenancy tenancy = response.getTenancy();
+            synchronized (this) {
+                return tenancyOpt = tenancy;
+            }
+        } catch (Throwable t) {
+            initError = new IOException(t);
+        }
+        return null;
+    }
+    
+    /**
+     * Retrieves information about Tenancy configured in ~/.oci
+     *
+     * @return Optional {@code OCIItem} describing the Tenancy. If
+     * Optional.empty() OCI configuration was not found
+     */
+    @NbBundle.Messages({
+        "LBL_HomeRegion=Home Region: {0}"
+    })
+    public Optional<TenancyItem> getTenancy() {
+        if (configProvider == null) {
+            return Optional.empty();
+        }
+        synchronized (this) {
+            if (initError != null) {
+                return Optional.empty();
+            } else if (tenancyOpt != null) {
+                return Optional.of(createTenancyItem(tenancyOpt));
+            }
+            Tenancy t = getTenancyData();
+            return t == null ? Optional.empty() : Optional.of(createTenancyItem(t));
+        }
+    }
+    
+    /**
+     * Creates and initializes a new client. The client is authenticated by {@link #getAuthenticationProvider()} and
+     * its region is set from {@link #getRegion()}. Throws IllegalArgumentException when the client cannot be configured.
+     * 
+     * @param <T> client type
+     * @param clientClass client class
+     * @return client instance.
+     */
+    public <T> T newClient(Class<T> clientClass) {
+        try {
+            T client = clientClass.getConstructor(BasicAuthenticationDetailsProvider.class).newInstance(configProvider);
+            Method setRegion = clientClass.getMethod("setRegion", Region.class);
+            setRegion.invoke(client, configProvider.getRegion());
+            return client;
+        } catch (ReflectiveOperationException ex) {
+            throw new IllegalArgumentException("Could not initialize client: " + clientClass);
+        }
+    }
+    
+    private TenancyItem createTenancyItem(Tenancy tenancy) {
+        TenancyItem item = new TenancyItem(OCID.of(tenancy.getId(), "Tenancy"), tenancy.getName());
+        item.setDescription(Bundle.LBL_HomeRegion(tenancy.getHomeRegionKey()));
+        return item;
+    }
+    
+    private final Lookup lkp = Lookups.fixed(this);
+
+    @Override
+    public Lookup getLookup() {
+        return lkp;
+    }
+
+    public ConfigFileAuthenticationDetailsProvider getConfigProvider() {
+        return configProvider;
+    }
+
+    /**
+     * Creates and downloads a wallet for the specified Autonomous Database.
+     *
+     * @param dbInstance Database identification
+     * @param password The password to encrypt the keys inside the wallet. The
+     * password must be at least 8 characters long and must include at least 1
+     * letter and either 1 numeric character or 1 special character.
+     * @param parentPath Path where Database Wallet Directory will be created.
+     * @throws FileNotFoundException
+     * @throws IOException
+     */
+    public Path downloadWallet(OCIItem dbInstance, String password, String parentPath) throws FileNotFoundException, IOException {
+        if (configProvider == null) {
+            return null;
+        }
+        try (final DatabaseClient client = new DatabaseClient(configProvider)) {
+            GenerateAutonomousDatabaseWalletDetails details = GenerateAutonomousDatabaseWalletDetails.builder().password(password).build();
+            GenerateAutonomousDatabaseWalletRequest generateAutonomousDatabaseWalletRequest = GenerateAutonomousDatabaseWalletRequest.builder().autonomousDatabaseId(dbInstance.getKey().getValue()).generateAutonomousDatabaseWalletDetails(details).build();
+            GenerateAutonomousDatabaseWalletResponse response = client.generateAutonomousDatabaseWallet(generateAutonomousDatabaseWalletRequest);
+            Path walletPath = null;
+            int i = 1;
+            do {
+                if (walletPath == null) {
+                    walletPath = Paths.get(parentPath, dbInstance.getName());
+                } else {
+                    walletPath = Paths.get(parentPath, dbInstance.getName() + "_" + i++); //NOI18N
+                }
+            } while (Files.exists(walletPath));
+            Files.createDirectory(walletPath);
+            ZipInputStream zin = new ZipInputStream(response.getInputStream());
+            ZipEntry entry;
+            while ((entry = zin.getNextEntry()) != null) {
+                Path entryPath = walletPath.resolve(entry.getName());
+                Files.copy(zin, entryPath);
+            }
+            return walletPath;
+        }
+    }
+
+    /**
+     * Creates a new Autonomous Oracle Database.
+     *
+     * @param compartmentId Id of Compartment where the Database will be created
+     * @param dbName Name of Database
+     * @param password Password of ADMIN user
+     * @return true if DB was created
+     */
+    public Optional<String> createAutonomousDatabase(String compartmentId, String dbName, char[] password) {
+        if (configProvider == null) {
+            return Optional.empty();
+        }
+        try (final DatabaseClient client = new DatabaseClient(configProvider)) {
+            CreateAutonomousDatabaseBase createAutonomousDatabaseBase = CreateAutonomousDatabaseDetails.builder().compartmentId(compartmentId).dbName(dbName).adminPassword(new String(password)).cpuCoreCount(1).dataStorageSizeInTBs(1).build();
+            CreateAutonomousDatabaseRequest createAutonomousDatabaseRequest = CreateAutonomousDatabaseRequest.builder().createAutonomousDatabaseDetails(createAutonomousDatabaseBase).build();
+            try {
+                CreateAutonomousDatabaseResponse response = client.createAutonomousDatabase(createAutonomousDatabaseRequest);
+            } catch (BmcException e) {
+                return Optional.of(e.getMessage());
+            }
+            return Optional.empty();
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 19 * hash + Objects.hashCode(this.id);
+        hash = 19 * hash + Objects.hashCode(this.configPath);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final OCIProfile other = (OCIProfile) obj;
+        if (!Objects.equals(this.id, other.id)) {
+            return false;
+        }
+        return Objects.equals(this.configPath, other.configPath);
+    }
+    
+    
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCISessionInitiator.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCISessionInitiator.java
new file mode 100644
index 0000000..78215aa
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCISessionInitiator.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle;
+
+import com.oracle.bmc.Region;
+import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
+import org.openide.util.Lookup;
+
+/**
+ * An abstract interface that allows to initialize the BMC client. Currently
+ * implemented by {@link OCIProfile}s, but could be suitable for different
+ * authentication schemes.
+ * 
+ * @author sdedic
+ */
+public interface OCISessionInitiator extends Lookup.Provider {
+    public BasicAuthenticationDetailsProvider getAuthenticationProvider();
+    public <T> T newClient(Class<T> clientClass);
+    public String getTenantId();
+    public Region getRegion();
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCITenancyProvider.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCITenancyProvider.java
index 26532f1..2451634 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCITenancyProvider.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OCITenancyProvider.java
@@ -18,31 +18,43 @@
  */
 package org.netbeans.modules.cloud.oracle;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import org.netbeans.api.server.ServerInstance;
 import org.netbeans.spi.server.ServerInstanceFactory;
 import org.netbeans.spi.server.ServerInstanceProvider;
 import org.openide.util.ChangeSupport;
+import org.openide.util.RequestProcessor;
+import org.openide.util.WeakListeners;
 
 /**
  *
  * @author Jan Horvath
  */
 
-public class OCITenancyProvider implements ServerInstanceProvider, ChangeListener {
-
+public class OCITenancyProvider implements ServerInstanceProvider, ChangeListener, PropertyChangeListener {
+    private static final String PROPERTY_PROFILE_ID_PREFIX = "profile.id."; // NOI18N
+    private static final String PROPERTY_PROFILE_CONFIG_PREFIX = "profile.config."; // NOI18N
+    private static final RequestProcessor RP = new RequestProcessor(OCITenancyProvider.class);
+    
     private final ChangeSupport listeners;
-    private final List<ServerInstance> instances;
+    private Map<ProfileKey, ServerInstance> instances;
     private static OCITenancyProvider instance;
 
     private OCITenancyProvider() {
         listeners = new ChangeSupport(this);
-        instances = new ArrayList<> ();
-        refresh();
+        instances = new HashMap<> ();
+        OCIManager.getDefault().addPropertyChangeListener(WeakListeners.propertyChange(this, OCIManager.getDefault()));
+        RP.post(() -> refresh());
     }
 
     public static synchronized OCITenancyProvider getProvider() {
@@ -54,15 +66,89 @@
     
     @Override
     public List<ServerInstance> getInstances() {
-        return Collections.unmodifiableList(instances);
+        synchronized (this) {
+            return new ArrayList<>(instances.values());
+        }
+    }
+
+    @Override
+    public void propertyChange(PropertyChangeEvent evt) {
+        if (OCIManager.PROP_CONNECTED_PROFILES.equals(evt.getPropertyName())) {
+            refresh();
+        }
+    }
+    
+    private static class ProfileKey {
+        final Path path;
+        final String id;
+        final String tenancyId;
+
+        public ProfileKey(Path path, String id, String tenancyId) {
+            this.path = path;
+            this.id = id;
+            this.tenancyId = tenancyId;
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 5;
+            hash = 29 * hash + Objects.hashCode(this.path);
+            hash = 29 * hash + Objects.hashCode(this.id);
+            hash = 29 * hash + Objects.hashCode(this.tenancyId);
+            return hash;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final ProfileKey other = (ProfileKey) obj;
+            if (!Objects.equals(this.id, other.id)) {
+                return false;
+            }
+            if (!Objects.equals(this.tenancyId, other.tenancyId)) {
+                return false;
+            }
+            return Objects.equals(this.path, other.path);
+        }
     }
     
     private void refresh() {
-        OCIManager.getDefault().getTenancy().ifPresent(tenancy -> {
-            ServerInstance si = ServerInstanceFactory.createServerInstance(new TenancyInstance(tenancy));
-            instances.add(si);
-            listeners.fireChange();
-        });
+        Map<ProfileKey, ServerInstance> newInstances;
+        
+        synchronized (this) {
+            newInstances = new HashMap<>(instances);
+        }
+        List<ProfileKey> currentKeys = new ArrayList<>();
+        for (OCIProfile p : OCIManager.getDefault().getConnectedProfiles()) {
+            ProfileKey k = new ProfileKey(p.getConfigPath(), p.getId(), p.getTenantId());
+            ServerInstance prev = newInstances.get(k);
+            if (prev != null) {
+                OCIProfile prevProf = prev.getLookup().lookup(OCIProfile.class);
+                if (prevProf == null || (prevProf.isValid() != p.isValid())) {
+                    continue;
+                }
+            }
+            ServerInstance si = ServerInstanceFactory.createServerInstance(new TenancyInstance(
+                    p.getTenancy().orElse(null), p));
+            newInstances.put(k, si);
+            currentKeys.add(k);
+        }
+        newInstances.keySet().retainAll(currentKeys);
+        synchronized (this) {
+            if (this.instances.keySet().equals(newInstances.keySet())) {
+                return;
+            }
+            this.instances = newInstances;
+        }
+        listeners.fireChange();
     }
 
     @Override
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardIterator.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardIterator.java
index 8b761aa..671dae7 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardIterator.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardIterator.java
@@ -18,26 +18,22 @@
  */
 package org.netbeans.modules.cloud.oracle;
 
-import org.netbeans.modules.cloud.oracle.items.OCIItem;
-import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.Desktop;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Optional;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-import javax.swing.JPanel;
-import javax.swing.JTextPane;
+import javax.swing.SwingUtilities;
 import javax.swing.event.ChangeListener;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
 import org.openide.WizardDescriptor;
-import org.openide.WizardValidationException;
 import org.openide.util.ChangeSupport;
 import org.openide.util.HelpCtx;
 import org.openide.util.NbBundle;
+import org.openide.util.RequestProcessor;
 
 /**
  *
@@ -51,32 +47,58 @@
     "MSG_TenancyFound=Found a tenancy <br/><b>{0}</b>"
 })
 public class OracleCloudWizardIterator implements WizardDescriptor.AsynchronousInstantiatingIterator {
-
+    private static final RequestProcessor RP = new RequestProcessor(OracleCloudWizardIterator.class);
     private static final String TENANCY = "TENANCY";
     private Panel panel;
 
+    // @GuardedBy(this)
+    private CompletableFuture<List<OCIProfile>> profiles = new CompletableFuture<>();
+    
     public OracleCloudWizardIterator() {
     }
 
     @Override
     public Set instantiate() throws IOException {
+        for (OCIProfile p : panel.ui.getSelectedProfiles()) {
+            OCIManager.getDefault().addConnectedProfile(p);
+        }
         return Collections.emptySet();
     }
 
     @Override
     public void initialize(WizardDescriptor wizard) {
-        wizard.putProperty(TENANCY, 
-                CompletableFuture.supplyAsync(() -> OCIManager.getDefault().getTenancy()));
+        RP.post(() -> {
+            List<OCIProfile> list = new ArrayList<>();
+            try {
+                for (OCIProfile p : OCIManager.getDefault().listProfiles(null)) {
+                    if (p.getTenancy().isPresent()) {
+                        list.add(p);
+                    }
+                }
+            } catch (IOException ex) {
+                profiles.completeExceptionally(ex);
+                return;
+            }
+            list.removeAll(OCIManager.getDefault().getConnectedProfiles());
+            profiles.complete(list);
+        });
     }
 
     @Override
     public void uninitialize(WizardDescriptor wizard) {
     }
-
+    
     @Override
     public WizardDescriptor.Panel current() {
         if (panel == null) {
             panel = new Panel();
+            profiles.thenAccept((l) -> {
+                // doh: no Swing EDT executor available...
+                SwingUtilities.invokeLater(() -> updateProfilesUI(l));
+            }).exceptionally(ex -> {
+                panel.ui.showErrorMessage(ex.getLocalizedMessage());
+                return null;
+            });
         }
         return panel;
     }
@@ -111,97 +133,70 @@
     @Override
     public void removeChangeListener(ChangeListener l) {
     }
-
-    private class Panel implements WizardDescriptor.AsynchronousValidatingPanel<WizardDescriptor> {
-
-        private JTextPane text;
-        private boolean valid = false;
-        private final JPanel panel;
-        private final ChangeSupport changeSupport;
-
-        public Panel() {
-            text = new JTextPane();
-            text.setContentType("text/html"); //NOI18N
-            text.setText(Bundle.MSG_CheckingSetup());
-            panel = new JPanel(new BorderLayout());
-            text.setEditable(false);
-            text.addHyperlinkListener(new HyperlinkListener() {
-                @Override
-                public void hyperlinkUpdate(HyperlinkEvent hle) {
-                    if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
-                        Desktop desktop = Desktop.getDesktop();
-                        try {
-                            desktop.browse(hle.getURL().toURI());
-                        } catch (Exception ex) {
-                            ex.printStackTrace();
-                        }
-                    }
-                }
-            });
-            panel.add(text, BorderLayout.CENTER);
-            panel.setName(Bundle.LBL_OC());
-            panel.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, new String[]{Bundle.LBL_OC()});
-            panel.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, 0);
-            text.setText(Bundle.MSG_CheckingSetup());
-            changeSupport = new ChangeSupport(this);
+    
+    private void updateProfilesUI(List<OCIProfile> profiles) {
+        if (panel == null) {
+            return;
         }
+        if (profiles.isEmpty()) {
+            panel.ui.showErrorMessage(Bundle.MSG_OCI_Setup(Bundle.URL_OCI_Setup()));
+        } else {
+            panel.ui.setProfiles(profiles);
+            // select by default
+            panel.ui.setSelectedProfiles(profiles);
+        }
+    }
 
+    static class Panel implements WizardDescriptor.Panel, PropertyChangeListener {
+        private ChangeSupport changeSupport;
+        private ConnectProfilePanel ui = new ConnectProfilePanel();
+        
         @Override
         public Component getComponent() {
-            return panel;
+            return ui;
         }
 
         @Override
         public HelpCtx getHelp() {
-            return null;
+            return HelpCtx.DEFAULT_HELP;
         }
 
         @Override
-        public void readSettings(WizardDescriptor settings) {
-            Object o = settings.getProperty(TENANCY);
-            if (o == null) {
-                return;
-            }
-            CompletionStage<Optional<OCIItem>> cs = (CompletionStage<Optional<OCIItem>>) o;
-            cs.thenAccept(t -> {
-                if (t.isPresent()) {
-                    if (!valid) {
-                        valid = true;
-                        changeSupport.fireChange();
-                    }
-                    text.setText(Bundle.MSG_TenancyFound(t.get().getName()));
-                } else {
-                    text.setText(Bundle.MSG_OCI_Setup(Bundle.URL_OCI_Setup()));
-                }
-            });
+        public void readSettings(Object settings) {
         }
 
         @Override
-        public void storeSettings(WizardDescriptor settings) {
-        }
-
-        @Override
-        public boolean isValid() {
-            return valid;
+        public void storeSettings(Object settings) {
         }
 
         @Override
         public void addChangeListener(ChangeListener l) {
+            if (changeSupport == null) {
+                changeSupport = new ChangeSupport(this);
+                ui.addPropertyChangeListener(this);
+            }
             changeSupport.addChangeListener(l);
         }
 
         @Override
         public void removeChangeListener(ChangeListener l) {
-            changeSupport.removeChangeListener(l);
+            if (changeSupport != null) {
+                changeSupport.removeChangeListener(l);
+            }
         }
 
         @Override
-        public void prepareValidation() {
+        public boolean isValid() {
+            return ui.isContentValid();
         }
 
         @Override
-        public void validate() throws WizardValidationException {
+        public void propertyChange(PropertyChangeEvent evt) {
+            if ("contentValid".equals(evt.getPropertyName())) {
+                if (changeSupport != null) {
+                    changeSupport.fireChange();
+                }
+            }
         }
     }
-
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardProvider.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardProvider.java
index 3c9bef3..c35e870 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardProvider.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleCloudWizardProvider.java
@@ -18,6 +18,10 @@
  */
 package org.netbeans.modules.cloud.oracle;
 
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Set;
+import javax.swing.event.ChangeListener;
 import org.netbeans.spi.server.ServerWizardProvider;
 import org.openide.WizardDescriptor;
 import org.openide.util.NbBundle;
@@ -38,7 +42,62 @@
 
     @Override
     public WizardDescriptor.InstantiatingIterator getInstantiatingIterator() {
-        return new OracleCloudWizardIterator();
+        return OCIManager.loadDefaultConfigProfiles() ? 
+                new SimpleIterator() :
+                new OracleCloudWizardIterator();
     }
     
+    private static class SimpleIterator implements WizardDescriptor.InstantiatingIterator {
+
+        @Override
+        public Set instantiate() throws IOException {
+            // force profiles collection
+            OCIManager.getDefault().getConnectedProfiles();
+            return Collections.emptySet();
+        }
+
+        @Override
+        public void initialize(WizardDescriptor wizard) {
+        }
+
+        @Override
+        public void uninitialize(WizardDescriptor wizard) {
+        }
+
+        @Override
+        public WizardDescriptor.Panel current() {
+            return null;
+        }
+
+        @Override
+        public String name() {
+            return Bundle.LBL_OC();
+        }
+
+        @Override
+        public boolean hasNext() {
+            return false;
+        }
+
+        @Override
+        public boolean hasPrevious() {
+            return false;
+        }
+
+        @Override
+        public void nextPanel() {
+        }
+
+        @Override
+        public void previousPanel() {
+        }
+
+        @Override
+        public void addChangeListener(ChangeListener l) {
+        }
+
+        @Override
+        public void removeChangeListener(ChangeListener l) {
+        }
+    }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyInstance.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyInstance.java
index 1a82512..50d0565 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyInstance.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyInstance.java
@@ -22,27 +22,59 @@
 import javax.swing.JComponent;
 import org.netbeans.spi.server.ServerInstanceImplementation;
 import org.openide.nodes.Node;
+import org.openide.util.Lookup;
+import org.openide.util.NbBundle;
+import org.openide.util.lookup.Lookups;
 
 /**
  *
  * @author Jan Horvath
  */
-public class TenancyInstance implements ServerInstanceImplementation {
+public class TenancyInstance implements ServerInstanceImplementation, Lookup.Provider {
 
     private final OCIItem tenancy;
-
-    public TenancyInstance(OCIItem tenancy) {
+    private final Lookup lkp;
+    final OCIProfile profile;
+    
+    public TenancyInstance(OCIItem tenancy, OCIProfile profile) {
         this.tenancy = tenancy;
+        this.profile = profile;
+        lkp = tenancy != null ? Lookups.fixed(profile, tenancy) : Lookups.fixed(profile);
     }
     
+    @NbBundle.Messages({
+        "# {0} - tenancy ID",
+        "# {1} - profile ID",
+        "MSG_TenancyDesc={0} ({1})",
+        "# {0} - tenancy ID",
+        "# {1} - profile ID",
+        "MSG_BrokenTenancy=Unavailable tenancy {0}",
+        "# {0} - profile ID",
+        "MSG_BrokenProfile=Broken profile {0}",
+    })
     @Override
     public String getDisplayName() {
-        return tenancy.getName();
+        if (tenancy != null) {
+            return Bundle.MSG_TenancyDesc(tenancy.getName(), profile.getId());
+        } else if (profile.getTenantId() != null) {
+            return Bundle.MSG_BrokenTenancy(profile.getTenantId(), profile.getId());
+        } else {
+            return Bundle.MSG_BrokenProfile(profile.getId());
+        }
+    }
+
+    @Override
+    public Lookup getLookup() {
+        return lkp;
     }
 
     @Override
     public String getServerDisplayName() {
-        return tenancy.getKey().getValue();
+        return profile.getTenantId() != null ? profile.getTenantId() : Bundle.MSG_BrokenProfile(profile);
+    }
+    
+    public OCIProfile getProfile() {
+        return profile;
     }
 
     @Override
@@ -52,7 +84,7 @@
 
     @Override
     public Node getBasicNode() {
-        return new TenancyNode(tenancy);
+        return tenancy == null ? new BrokenProfileNode(this) : new TenancyNode(tenancy, getDisplayName(), profile);
     }
 
     @Override
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyNode.java
index 999d661..5742b05 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyNode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/TenancyNode.java
@@ -20,22 +20,50 @@
 
 import org.netbeans.modules.cloud.oracle.items.OCIItem;
 import java.awt.Image;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.IOException;
+import org.openide.util.NbBundle;
+import org.openide.util.WeakListeners;
 
 /**
  *
  * @author Jan Horvath
  */
-public class TenancyNode extends OCINode {
+public class TenancyNode extends OCINode implements PropertyChangeListener {
     
     private static final String ORCL_ICON = "org/netbeans/modules/cloud/oracle/resources/tenancy.svg"; // NOI18N
     
-    public TenancyNode(OCIItem tenancy) {
-        super(tenancy);
-//        super(Children.create(new TenancyChildFactory(tenancy), true), Lookups.fixed(tenancy));
+    private final OCISessionInitiator session;
+    
+    public TenancyNode(OCIItem tenancy, String disp, OCISessionInitiator session) {
+        super(tenancy, session);
+        this.session = session;
         setName(tenancy.getName()); 
-        setDisplayName(tenancy.getName());
+        setDisplayName(disp);
         setIconBaseWithExtension(ORCL_ICON);
+        // home region will be set as a description
         setShortDescription(tenancy.getDescription());
+        OCIManager.getDefault().addPropertyChangeListener(WeakListeners.propertyChange(this, OCIManager.getDefault()));
+    }
+
+    @Override
+    public void propertyChange(PropertyChangeEvent e) {
+        if (OCIManager.PROP_ACTIVE_PROFILE.equals(e.getPropertyName())) {
+            fireDisplayNameChange(null, null);
+        }
+    }
+
+    @NbBundle.Messages({
+        "HTML_EmphasizeName=<b>{0}</b>"
+    })
+    @Override
+    public String getHtmlDisplayName() {
+        if (OCIManager.getDefault().getActiveProfile() == session) {
+            return Bundle.HTML_EmphasizeName(getDisplayName());
+        } else {
+            return null;
+        }
     }
     
     @Override
@@ -51,5 +79,14 @@
     private Image badgeIcon(Image origImg) {
         return origImg;
     }
-    
+
+    @Override
+    public boolean canDestroy() {
+        return OCIManager.getDefault().isConfiguredProfile((OCIProfile)session);
+    }
+
+    @Override
+    public void destroy() throws IOException {
+        OCIManager.getDefault().removeConnectedProfile((OCIProfile)session);
+    }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
new file mode 100644
index 0000000..beb96cc
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle.actions;
+
+import com.oracle.bmc.model.BmcException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
+import org.netbeans.modules.cloud.oracle.compartment.CompartmentItem;
+import org.netbeans.modules.cloud.oracle.compartment.CompartmentNode;
+import org.netbeans.modules.cloud.oracle.database.DatabaseItem;
+import org.netbeans.modules.cloud.oracle.database.DatabaseNode;
+import org.netbeans.modules.cloud.oracle.items.OCIItem;
+import org.netbeans.modules.cloud.oracle.items.TenancyItem;
+import org.openide.DialogDescriptor;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.NotifyDescriptor.QuickPick.Item;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.awt.ActionRegistration;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author Jan Horvath
+ */
+@ActionID(
+        category = "Tools",
+        id = "org.netbeans.modules.cloud.oracle.actions.AddADBAction"
+)
+@ActionRegistration( 
+        displayName = "#AddADB", 
+        asynchronous = true
+)
+
+@ActionReferences(value = {
+    @ActionReference(path = "Cloud/Oracle/Common/Actions", position = 260)
+})
+@NbBundle.Messages({
+    "AddADB=Add Oracle Autonomous DB",
+    "SelectTenancy=Select Tenancy",
+    "SelectCompartment=Select Compartment",
+    "SelectDatabase=Select Database"
+})
+public class AddADBAction implements ActionListener {
+    private static final Logger LOGGER = Logger.getLogger(AddADBAction.class.getName());
+    
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        List<TenancyItem> tenancies = new ArrayList<>();
+        for (OCIProfile p : OCIManager.getDefault().getConnectedProfiles()) {
+           p.getTenancy().ifPresent(tenancies::add);
+        }
+        Optional<TenancyItem> selectedTenancy = chooseOneItem(tenancies, Bundle.SelectTenancy());
+        
+        Optional<CompartmentItem> selectedCompartment = Optional.empty();
+                
+        if (!selectedTenancy.isPresent()) {
+            return;
+        }
+        
+        List<CompartmentItem> compartments = CompartmentNode.getCompartments().apply(selectedTenancy.get());
+        selectedCompartment = chooseOneItem(compartments, Bundle.SelectCompartment());
+        DatabaseItem selectedDatabase = null;
+        
+        if (selectedCompartment.isPresent()) {
+            while(selectedDatabase == null) {
+                OCIItem item = chooseCopartmentOrDb(selectedCompartment.get());
+                if (item == null) {
+                    return;
+                }
+                if (item instanceof DatabaseItem) {
+                    selectedDatabase = (DatabaseItem) item;
+                }
+                if (item instanceof CompartmentItem) {
+                    selectedCompartment = Optional.of((CompartmentItem) item);
+                }
+            }
+        }
+        if (selectedDatabase != null) {
+            DownloadWalletAction action = new DownloadWalletAction(selectedDatabase);
+            action.actionPerformed(null);
+        }
+    }
+    
+    private <T extends OCIItem> Optional<T> chooseOneItem(List<T> ociItems, String title) {
+        Optional<T> result = Optional.empty();
+        if (ociItems.size() == 1) {
+            result = Optional.of(ociItems.get(0));
+        } else if (ociItems.size() > 0) {
+            List<Item> items = ociItems.stream()
+                    .map(tenancy -> new Item(tenancy.getName(), tenancy.getDescription()))
+                    .collect(Collectors.toList());
+            NotifyDescriptor.QuickPick qp = new NotifyDescriptor.QuickPick(title, title, items, false);
+            if (DialogDescriptor.OK_OPTION == DialogDisplayer.getDefault().notify(qp)) {
+                Optional<String> selected = qp.getItems().stream().filter(item -> item.isSelected()).map(item -> item.getLabel()).findFirst();
+                if (selected.isPresent()) {
+                    result = ociItems.stream().filter(t -> t.getName().equals(selected.get())).findFirst();
+                }
+                
+            }
+        } 
+        return result;
+    }
+    
+    
+    private OCIItem chooseCopartmentOrDb(CompartmentItem compartment) {
+        List<OCIItem> items = new ArrayList<> ();
+        try {
+            items.addAll(DatabaseNode.getDatabases().apply(compartment));
+        } catch (BmcException e) {
+            LOGGER.log(Level.SEVERE, "Unable to load compartment list", e); // NOI18N
+        }
+        items.addAll(CompartmentNode.getCompartments().apply(compartment));
+        return chooseOneItem(items, Bundle.SelectDatabase()).orElseGet(() -> null);
+    }
+    
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/CreateAutonomousDBAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/CreateAutonomousDBAction.java
index b7e456e..4309ee8 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/CreateAutonomousDBAction.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/CreateAutonomousDBAction.java
@@ -19,11 +19,11 @@
 package org.netbeans.modules.cloud.oracle.actions;
 
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Collection;
 import java.util.Optional;
-import org.netbeans.modules.cloud.oracle.compartment.CompartmentNode;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
 import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
 import org.netbeans.modules.cloud.oracle.compartment.CompartmentItem;
 import org.openide.DialogDisplayer;
 import org.openide.NotifyDescriptor;
@@ -31,6 +31,7 @@
 import org.openide.awt.ActionReference;
 import org.openide.awt.ActionReferences;
 import org.openide.awt.ActionRegistration;
+import org.openide.util.ContextAwareAction;
 import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
 import org.openide.util.Pair;
@@ -46,7 +47,8 @@
 )
 @ActionRegistration(
         displayName = "#CTL_CreateAutonomousDBAction",
-        asynchronous = true
+        asynchronous = true,
+        lazy = true
 )
 
 @ActionReferences(value = {
@@ -58,12 +60,25 @@
     "MSG_DBNotCreated=Autonomous Database {0} failed to create: {1}"
 
 })
-public class CreateAutonomousDBAction implements ActionListener {
+public class CreateAutonomousDBAction extends AbstractAction implements ContextAwareAction {
 
     private final CompartmentItem context;
+    private OCIProfile session;
 
     public CreateAutonomousDBAction(CompartmentItem context) {
         this.context = context;
+        this.session = OCIManager.getDefault().getActiveProfile();
+    }
+
+    CreateAutonomousDBAction(OCIProfile session, CompartmentItem context) {
+        this.context = context;
+        this.session = session;
+    }
+
+    @Override
+    public Action createContextAwareInstance(Lookup actionContext) {
+        OCIProfile session = actionContext.lookup(OCIProfile.class);
+        return new CreateAutonomousDBAction(session, context);
     }
 
     @Override
@@ -71,7 +86,7 @@
         Optional<Pair<String, char[]>> result = CreateAutonomousDBDialog.showDialog(context);
         result.ifPresent((p) -> {
             RequestProcessor.getDefault().execute(() -> {
-                Optional<String> message = OCIManager.getDefault().createAutonomousDatabase(context.getKey().getValue(), p.first(), p.second());
+                Optional<String> message = session.createAutonomousDatabase(context.getKey().getValue(), p.first(), p.second());
                 if (!message.isPresent()) {
                     context.refresh();
                     DialogDisplayer.getDefault().notifyLater(
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
index f96777f..2e625f5 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
@@ -28,12 +28,15 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
 import org.netbeans.api.db.explorer.ConnectionManager;
 import org.netbeans.api.db.explorer.DatabaseConnection;
 import org.netbeans.api.db.explorer.DatabaseException;
 import org.netbeans.api.db.explorer.JDBCDriver;
 import org.netbeans.api.db.explorer.JDBCDriverManager;
 import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
 import org.netbeans.modules.cloud.oracle.database.DatabaseItem;
 import org.openide.DialogDisplayer;
 import org.openide.NotifyDescriptor;
@@ -42,7 +45,9 @@
 import org.openide.awt.ActionReferences;
 import org.openide.awt.ActionRegistration;
 import org.openide.awt.StatusDisplayer;
+import org.openide.util.ContextAwareAction;
 import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
 
 /**
@@ -55,7 +60,8 @@
 )
 @ActionRegistration( 
         displayName = "#CTL_DownloadWalletAction", 
-        asynchronous = true
+        asynchronous = true,
+        lazy = true
 )
 
 @ActionReferences(value = {
@@ -68,13 +74,26 @@
     "MSG_WalletDownloadedPassword=Database Wallet was downloaded. \nGenerated wallet password is: {0}",
     "MSG_WalletNoConnection=Wallet doesn't contain any connection"
 })
-public class DownloadWalletAction implements ActionListener {
+public class DownloadWalletAction extends AbstractAction implements ContextAwareAction {
     
     private static final String URL_TEMPLATE = "jdbc:oracle:thin:@{0}?TNS_ADMIN=\"{1}\""; //NOI18N
     private final DatabaseItem context;
+    private OCIProfile session;
 
     public DownloadWalletAction(DatabaseItem context) {
         this.context = context;
+        this.session = OCIManager.getDefault().getActiveProfile();
+    }
+
+    DownloadWalletAction(OCIProfile session, DatabaseItem context) {
+        this.context = context;
+        this.session = session;
+    }
+
+    @Override
+    public Action createContextAwareInstance(Lookup actionContext) {
+        OCIProfile session = actionContext.lookup(OCIProfile.class);
+        return new DownloadWalletAction(session, context);
     }
 
     @Override
@@ -82,7 +101,7 @@
         Optional<DownloadWalletDialog.WalletInfo> result = DownloadWalletDialog.showDialog(context);
         result.ifPresent((p) -> {
             try {
-                Path walletPath = OCIManager.getDefault().downloadWallet(context, new String(p.getWalletPassword()), p.getPath());
+                Path walletPath = session.downloadWallet(context, new String(p.getWalletPassword()), p.getPath());
                 if (p.getDbUser() != null && p.getDbPassword() != null) {
                     
                     JDBCDriver[] drivers = JDBCDriverManager.getDefault().getDrivers("oracle.jdbc.OracleDriver"); //NOI18N
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/RemoveProfileAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/RemoveProfileAction.java
new file mode 100644
index 0000000..91db6bf
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/RemoveProfileAction.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle.actions;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.awt.ActionRegistration;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author Jan Horvath
+ */
+@ActionID(
+        category = "Tools",
+        id = "org.netbeans.modules.cloud.oracle.actions.RemoveProfileAction"
+)
+@ActionRegistration( 
+        displayName = "#RemoveProfileAction", 
+        asynchronous = true
+)
+
+@ActionReferences(value = {
+    @ActionReference(path = "Cloud/Oracle/Tenancy/Actions", position = 230),
+    @ActionReference(path = "Cloud/Oracle/BrokenProfile/Actions", position = 230)
+})
+@NbBundle.Messages({
+    "RemoveProfileAction=Remove Profile"
+})
+public class RemoveProfileAction implements ActionListener {
+
+    private final OCIProfile context;
+
+    public RemoveProfileAction(OCIProfile context) {
+        this.context = context;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        OCIManager.getDefault().removeConnectedProfile(context);
+    }
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/SetDefaultProfileAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/SetDefaultProfileAction.java
new file mode 100644
index 0000000..53bc7c7
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/SetDefaultProfileAction.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.awt.ActionRegistration;
+import org.openide.awt.ActionState;
+import org.openide.util.NbBundle;
+
+/**
+ * 
+ * @author sdedic
+ */
+@ActionID(
+        category = "Tools",
+        id = "org.netbeans.modules.cloud.oracle.actions.SetDefaultTenancyAction"
+)
+@ActionRegistration(
+        displayName = "#CTL_SetDefaultProfileAction",
+        asynchronous = true,
+        enabledOn = @ActionState(type = OCIProfile.class, useActionInstance = true)
+)
+
+@ActionReferences(value = {
+    @ActionReference(path = "Cloud/Oracle/Tenancy/Actions", position = 200)
+})
+@NbBundle.Messages({
+    "CTL_SetDefaultProfileAction=Set As Default",
+
+})
+public class SetDefaultProfileAction extends AbstractAction {
+    private final OCIProfile profile;
+
+    public SetDefaultProfileAction(OCIProfile tenancy) {
+        this.profile = tenancy;
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        OCIManager.getDefault().setActiveProfile(profile);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return OCIManager.getDefault().getActiveProfile() != profile;
+    }
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/AuditOptions.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/AuditOptions.java
new file mode 100644
index 0000000..dec0bea
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/AuditOptions.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.cloud.oracle.adm;
+
+import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCISessionInitiator;
+
+/**
+ *
+ * @author sdedic
+ */
+public class AuditOptions {
+    private boolean forceAuditExecution;
+    private boolean runIfNotExists;
+    private String auditName;
+    private OCISessionInitiator session;
+    
+    public static AuditOptions makeNewAudit() {
+        return new AuditOptions().setForceAuditExecution(true).setRunIfNotExists(true);
+    }
+
+    public boolean isForceAuditExecution() {
+        return forceAuditExecution;
+    }
+
+    public AuditOptions setForceAuditExecution(boolean forceAuditExecution) {
+        this.forceAuditExecution = forceAuditExecution;
+        return this;
+    }
+
+    public boolean isRunIfNotExists() {
+        return runIfNotExists;
+    }
+
+    public AuditOptions setRunIfNotExists(boolean runIfNotExists) {
+        this.runIfNotExists = runIfNotExists;
+        return this;
+    }
+
+    public String getAuditName() {
+        return auditName;
+    }
+
+    public AuditOptions setAuditName(String auditName) {
+        this.auditName = auditName;
+        return this;
+    }
+    
+    public AuditOptions useSession(OCISessionInitiator session) {
+        this.session = session;
+        return this;
+    }
+
+    public OCISessionInitiator getSession() {
+        return session != null ? session : OCIManager.getDefault().getActiveSession();
+    }
+}
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseItem.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseItem.java
index 04005a5..1dffd5c 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseItem.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseItem.java
@@ -51,6 +51,10 @@
         registerItem();
     }
     
+    public String getCompartmentId() {
+        return compartmentId;
+    }
+    
     void registerItem() {
         synchronized (KnowledgeBaseItem.class) {
             itemInstances.computeIfAbsent(getKey(), x -> new ArrayList<>()).add(new WeakReference<>(this));
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseNode.java
index 1e2d5af..637f292 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseNode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/KnowledgeBaseNode.java
@@ -26,7 +26,6 @@
 import java.util.stream.Collectors;
 import org.netbeans.modules.cloud.oracle.ChildrenProvider;
 import org.netbeans.modules.cloud.oracle.NodeProvider;
-import org.netbeans.modules.cloud.oracle.OCIManager;
 import org.netbeans.modules.cloud.oracle.OCINode;
 import org.netbeans.modules.cloud.oracle.compartment.CompartmentItem;
 import org.netbeans.modules.cloud.oracle.items.OCID;
@@ -78,10 +77,10 @@
 //    }
     
 //    @ChildrenProvider.Registration(parentPath = "Oracle/Compartment")
-    public static ChildrenProvider<CompartmentItem, KnowledgeBaseItem> listKnowledgeBases() {
-        return compartment -> {
+    public static ChildrenProvider.SessionAware<CompartmentItem, KnowledgeBaseItem> listKnowledgeBases() {
+        return (compartment, session) -> {
             try ( ApplicationDependencyManagementClient client 
-                    = new ApplicationDependencyManagementClient(OCIManager.getDefault().getConfigProvider())) {
+                    = session.newClient(ApplicationDependencyManagementClient.class)) {
                 
                 ListKnowledgeBasesRequest request = ListKnowledgeBasesRequest.builder()
                         .compartmentId(compartment.getKey().getValue()).build();
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
index 3b9829b..be2401c 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
@@ -23,13 +23,16 @@
 import com.oracle.bmc.adm.requests.GetKnowledgeBaseRequest;
 import com.oracle.bmc.adm.responses.GetKnowledgeBaseResponse;
 import com.oracle.bmc.model.BmcException;
+import java.nio.file.Paths;
 import java.util.Collection;
 import java.util.Date;
 import java.util.concurrent.CompletableFuture;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectUtils;
 import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
 import org.netbeans.modules.cloud.oracle.items.OCID;
+import org.netbeans.spi.project.AuxiliaryProperties;
 import org.netbeans.spi.project.LookupProvider.Registration.ProjectType;
 import org.netbeans.spi.project.ProjectServiceProvider;
 import org.openide.util.NbBundle;
@@ -49,11 +52,17 @@
 public final class ProjectVulnerability {
     private final RequestProcessor AUDIT_PROCESSOR = new RequestProcessor(ProjectVulnerability.class.getName(), 4);
     private final RequestProcessor CALL_PROCESSOR = new RequestProcessor(ProjectVulnerability.class);
+    private static final String PROJECT_PROPERTY_PROFILE_ID = "cloud.oracle.adm.kb.profilePath"; // NOI18N
+    private static final String PROJECT_PROPERTY_PROFILE_PATH = "cloud.oracle.adm.kb.profileId"; // NOI18N
+    private static final String PROJECT_PROPERTY_KB_OCID = "cloud.oracle.adm.kb.ocid"; // NOI18N
     
     private final Project project;
     
     // @GuardedBy(this)
     private KnowledgeBaseItem knowledgeBaseItem = null;
+    
+    // @GuardedBy(this)
+    private OCIProfile lastProfile;
 
     public ProjectVulnerability(Project project) {
         this.project = project;
@@ -61,22 +70,71 @@
     
     public KnowledgeBaseItem getProjectKnowledgeBase() {
         synchronized (this) {
-            return knowledgeBaseItem;
+            if (knowledgeBaseItem != null) {
+                return knowledgeBaseItem;
+            }
         }
+        AuxiliaryProperties props = project.getLookup().lookup(AuxiliaryProperties.class);
+        if (props == null) {
+            return null;
+        }
+        OCIProfile active = OCIManager.getDefault().getActiveProfile();
+        
+        String ocid = props.get(PROJECT_PROPERTY_KB_OCID, false);
+        if (ocid == null) {
+            return null;
+        }
+        String profId = props.get(PROJECT_PROPERTY_PROFILE_ID, false);
+        String profPath = props.get(PROJECT_PROPERTY_PROFILE_PATH, false);
+        
+        KnowledgeBaseItem item;
+        OCIProfile profile;
+        
+        try {
+            profile = OCIManager.forConfig(Paths.get(profPath), profId);
+            if (!profile.getTenancy().isPresent()) {
+                profile = active;
+            }
+        } catch (IllegalArgumentException ex) {
+            profile = active;
+        }
+        try (ApplicationDependencyManagementClient admClient
+                = profile.newClient(ApplicationDependencyManagementClient.class)) {
+            GetKnowledgeBaseRequest req = GetKnowledgeBaseRequest.builder()
+                    .knowledgeBaseId(ocid).build();
+            GetKnowledgeBaseResponse resp = admClient.getKnowledgeBase(req);
+            KnowledgeBase p = resp.getKnowledgeBase();
+
+            item = new KnowledgeBaseItem(
+                    OCID.of(p.getId(), "KnowledgeBase"), // NOI18N 
+                    p.getCompartmentId(),
+                    p.getDisplayName(), p.getTimeUpdated()
+                );
+        } catch (IllegalArgumentException | BmcException ex) {
+            item = knowledgeBaseItem;
+            profile = this.lastProfile;
+        }
+        synchronized (this) {
+            if (knowledgeBaseItem == null) {
+                lastProfile = profile;
+                knowledgeBaseItem = item;
+            }
+        }
+        return item;
     }
     
     @NbBundle.Messages({
         "# {0} - project name",
         "MSG_CreatingAuditFailed=Creating Vulnerablity audit for project {0} failed.",
     })
-    public CompletableFuture<String> runProjectAudit(KnowledgeBaseItem item, boolean force, boolean runIfNoReport) {
+    public CompletableFuture<String> runProjectAudit(KnowledgeBaseItem item, AuditOptions options) {
         if (item != null) {
             setProjectKnowledgeBase(item);
         }
         CompletableFuture<String> result = new CompletableFuture<>();
         AUDIT_PROCESSOR.post(() -> {
             try {
-                result.complete(VulnerabilityWorker.getInstance().findVulnerability(project, force, runIfNoReport));
+                result.complete(VulnerabilityWorker.getInstance().findVulnerability(project, options));
             } catch (ThreadDeath x) {
                 throw x;
             } catch (AuditException ex) {
@@ -91,11 +149,11 @@
         return result;
     }
     
-    public CompletableFuture<KnowledgeBaseItem> findKnowledgeBase(String compartmentId, String knowledgeBaseId) {
+    public CompletableFuture<KnowledgeBaseItem> findKnowledgeBase(String knowledgeBaseId) {
         CompletableFuture<KnowledgeBaseItem> result = new CompletableFuture<>();
         CALL_PROCESSOR.post(() -> {
             try ( ApplicationDependencyManagementClient client 
-                    = new ApplicationDependencyManagementClient(OCIManager.getDefault().getConfigProvider())) {
+                    = OCIManager.getDefault().getActiveSession().newClient(ApplicationDependencyManagementClient.class)) {
 
                 GetKnowledgeBaseRequest request = GetKnowledgeBaseRequest.builder()
                         .knowledgeBaseId(knowledgeBaseId).
@@ -145,7 +203,21 @@
     }
     
     public KnowledgeBaseItem setProjectKnowledgeBase(KnowledgeBaseItem item) {
+        setProjectKnowledgeBase0(item);
+        AuxiliaryProperties props = project.getLookup().lookup(AuxiliaryProperties.class);
+        if (props != null) {
+            OCID kbOcid = item.getKey();
+            OCIProfile profile = OCIManager.getDefault().getActiveProfile();
+            props.put(PROJECT_PROPERTY_KB_OCID, kbOcid.toPersistentForm(), false);
+            props.put(PROJECT_PROPERTY_PROFILE_ID, profile.getId(), false);
+            props.put(PROJECT_PROPERTY_PROFILE_PATH, profile.getConfigPath().toString(), false);
+        }
+        return item;
+    }
+    
+    public KnowledgeBaseItem setProjectKnowledgeBase0(KnowledgeBaseItem item) {
         synchronized (this) {
+            lastProfile = OCIManager.getDefault().getActiveProfile();
             return knowledgeBaseItem = item;
         }
     }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/RunFileADMAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/RunFileADMAction.java
index 742425c..457c514 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/RunFileADMAction.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/RunFileADMAction.java
@@ -77,12 +77,12 @@
         final String projectDisplayName = ProjectUtils.getInformation(project).getDisplayName();
         if (kbItem != null) {
             try {
-                VulnerabilityWorker.getInstance().findVulnerability(project, true, true);
+                VulnerabilityWorker.getInstance().findVulnerability(project, AuditOptions.makeNewAudit());
             } catch (AuditException exc) {
                 ErrorUtils.processError(exc, Bundle.MSG_CreatingAuditFailed(projectDisplayName));
             }
         } else {
-            if (OCIManager.getDefault().getConfigProvider() == null
+            if (OCIManager.getDefault().getActiveSession()== null
                     || OCIManager.getDefault().getTenancy().equals(Optional.empty())) {
                 DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message(Bundle.MSG_ProjectAuditInfo()));
             } else {
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
index 8d86259..5e36f3e 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
@@ -371,8 +371,11 @@
      * @param forceAudit
      * @return Returns the audit ID, or {@code null} if no audit is present.
      */
-    public String findVulnerability(Project project, boolean forceAudit, boolean runIfNoReport) throws AuditException {
-        LOG.log(Level.FINER, "Trying to obtain audit for project {0}, force:{1}", new Object[] { project, forceAudit });
+    public String findVulnerability(Project project, AuditOptions auditOptions) throws AuditException {
+        if (auditOptions == null) {
+            auditOptions = new AuditOptions();
+        }
+        LOG.log(Level.FINER, "Trying to obtain audit for project {0}, force:{1}", new Object[] { project, auditOptions.isForceAuditExecution() });
         final String projectDisplayName = ProjectUtils.getInformation(project).getDisplayName();
         KnowledgeBaseItem kbItem = getKnowledgeBaseForProject(project);
         if (kbItem == null) {
@@ -382,9 +385,12 @@
         // remove from the cache old values
         ProgressHandle progressHandle = ProgressHandle.createHandle(Bundle.MSG_AuditIsRunning(projectDisplayName));
         AtomicBoolean remoteCall = new AtomicBoolean(false);
+        if (auditOptions.getAuditName() == null) {
+            auditOptions.setAuditName(projectDisplayName);
+        }
         try {
             return doFindVulnerability(project, kbItem.compartmentId, kbItem.getKey().getValue(), 
-                    projectDisplayName, progressHandle, forceAudit, runIfNoReport, remoteCall);
+                    projectDisplayName, auditOptions, progressHandle, remoteCall);
         } finally {
             if (remoteCall.get()) {
                 progressHandle.close();
@@ -393,55 +399,56 @@
         }
     }
 
-    private String doFindVulnerability(Project project, String compartmentId, String knowledgeBaseId, String projectDisplayName,
-            ProgressHandle progressHandle, boolean forceAudit, boolean runIfNoReport, AtomicBoolean remoteCall) throws AuditException {
-        DependencyResult dr = null;
+    private String doFindVulnerability(Project project, String compartmentId, String knowledgeBaseId, String projectDisplayName, AuditOptions auditOptions,
+            ProgressHandle progressHandle, AtomicBoolean remoteCall) throws AuditException {
         List<ApplicationDependency> result = new ArrayList();
         
         CacheItem cacheItem = null;
         VulnerabilityReport savedAudit = null;
         
-        if (!forceAudit) {
+        boolean auditDone = false;
+
+        DependencyResult dr = null;
+        
+        if (!auditOptions.isForceAuditExecution()) {
             try {
                 savedAudit = AuditCache.getInstance().loadAudit(knowledgeBaseId);
             } catch (IOException ex) {
-                LOG.log(Level.WARNING, "Could not load cached audit data", ex);
-            }
-        }
-        
-        boolean auditDone = false;
-        
-        if (!forceAudit && savedAudit == null) {
-            // attempt to find an active most recent audit:
-            remoteCall.set(true);
-            progressHandle.start();
-            progressHandle.progress(Bundle.MSG_SearchingAuditReport());
-            try (ApplicationDependencyManagementClient admClient
-                    = new ApplicationDependencyManagementClient(OCIManager.getDefault().getConfigProvider())) {
-                ListVulnerabilityAuditsRequest request = ListVulnerabilityAuditsRequest
-                        .builder()
-                        .compartmentId(compartmentId)
-                        .knowledgeBaseId(knowledgeBaseId)
-                        .lifecycleState(LifecycleState.Active)
-                        .sortBy(ListVulnerabilityAuditsRequest.SortBy.TimeCreated)
-                        .sortOrder(SortOrder.Desc).build();
-                ListVulnerabilityAuditsResponse response = admClient.listVulnerabilityAudits(request);
-                if (!response.getVulnerabilityAuditCollection().getItems().isEmpty()) {
-                    VulnerabilityAuditSummary summary = response.getVulnerabilityAuditCollection().getItems().get(0);
-                    progressHandle.progress(Bundle.MSG_AuditCollectDependencies());
-                    dr = ProjectDependencies.findDependencies(project, ProjectDependencies.newQuery(Scopes.RUNTIME));
-                    convert(dr.getRoot(), new HashMap<>(), result);
-                    cacheItem = fetchVulnerabilityItems(project, admClient, dr, summary, projectDisplayName);
-                    savedAudit = new VulnerabilityReport(cacheItem.getAudit(), cacheItem.getVulnerabilities());
+                LOG.log(Level.WARNING, "Could not load cached audit data", ex); 
+           }
+
+            if (savedAudit == null) {
+                // attempt to find an active most recent audit:
+                remoteCall.set(true);
+                progressHandle.start();
+                progressHandle.progress(Bundle.MSG_SearchingAuditReport());
+                try (ApplicationDependencyManagementClient admClient
+                        = new ApplicationDependencyManagementClient(OCIManager.getDefault().getConfigProvider())) {
+                    ListVulnerabilityAuditsRequest request = ListVulnerabilityAuditsRequest
+                            .builder()
+                            .compartmentId(compartmentId)
+                            .knowledgeBaseId(knowledgeBaseId)
+                            .lifecycleState(LifecycleState.Active)
+                            .sortBy(ListVulnerabilityAuditsRequest.SortBy.TimeCreated)
+                            .sortOrder(SortOrder.Desc).build();
+                    ListVulnerabilityAuditsResponse response = admClient.listVulnerabilityAudits(request);
+                    if (!response.getVulnerabilityAuditCollection().getItems().isEmpty()) {
+                        VulnerabilityAuditSummary summary = response.getVulnerabilityAuditCollection().getItems().get(0);
+                        progressHandle.progress(Bundle.MSG_AuditCollectDependencies());
+                        dr = ProjectDependencies.findDependencies(project, ProjectDependencies.newQuery(Scopes.RUNTIME));
+                        convert(dr.getRoot(), new HashMap<>(), result);
+                        cacheItem = fetchVulnerabilityItems(project, admClient, dr, summary, projectDisplayName);
+                        savedAudit = new VulnerabilityReport(cacheItem.getAudit(), cacheItem.getVulnerabilities());
+                    }
+                } catch (BmcException ex) {
+                    LOG.log(Level.FINE, "Unable to list newest audit for knowledgebase {0}, compartment {1}", new Object[] {
+                        knowledgeBaseId, compartmentId
+                    });
                 }
-            } catch (BmcException ex) {
-                LOG.log(Level.FINE, "Unable to list newest audit for knowledgebase {0}, compartment {1}", new Object[] {
-                    knowledgeBaseId, compartmentId
-                });
             }
         }
         
-        if (savedAudit == null && (runIfNoReport || forceAudit)) {
+        if (savedAudit == null && (auditOptions.isRunIfNotExists() || auditOptions.isForceAuditExecution())) {
             if (remoteCall.compareAndSet(false, true)) {
                 progressHandle.start();
             }
@@ -462,7 +469,7 @@
                         .builder()
                         .compartmentId(compartmentId)
                         .knowledgeBaseId(knowledgeBaseId)
-                        .displayName(projectDisplayName.replaceAll("[^A-Za-z0-9-_]", "_")) // remove offending characters
+                        .displayName(auditOptions.getAuditName().replaceAll("[^A-Za-z0-9-_]", "_")) // remove offending characters
                         .buildType(VulnerabilityAudit.BuildType.Maven)
                         .configuration(auditConfiguration)
                         .applicationDependencies(result)
@@ -483,7 +490,12 @@
             } finally {
                 progressHandle.finish();
             }
-        } else if (savedAudit != null) {
+        } else if (savedAudit != null && cacheItem == null) {
+            if (dr == null) {
+                progressHandle.progress(Bundle.MSG_AuditCollectDependencies());
+                dr = ProjectDependencies.findDependencies(project, ProjectDependencies.newQuery(Scopes.RUNTIME));
+                convert(dr.getRoot(), new HashMap<>(), result);
+            }
             cacheItem = new CacheItem(project, dr, savedAudit);
         }
 
@@ -506,7 +518,7 @@
             }
             if (auditDone) {
                 DialogDisplayer.getDefault().notifyLater(
-                                new NotifyDescriptor.Message(message));
+                                new NotifyDescriptor.Message(message, cacheItem.getAudit().getIsSuccess() ? NotifyDescriptor.INFORMATION_MESSAGE : NotifyDescriptor.WARNING_MESSAGE));
             }
             Diagnostic.ReporterControl reporter = Diagnostic.findReporterControl(Lookup.getDefault(), project.getProjectDirectory());
             reporter.diagnosticChanged(problematicFiles, null);
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/compartment/CompartmentNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/compartment/CompartmentNode.java
index 85e4c7a..6000728 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/compartment/CompartmentNode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/compartment/CompartmentNode.java
@@ -31,6 +31,7 @@
 import org.netbeans.modules.cloud.oracle.ChildrenProvider;
 import org.netbeans.modules.cloud.oracle.NodeProvider;
 import org.netbeans.modules.cloud.oracle.OCINode;
+import org.netbeans.modules.cloud.oracle.OCISessionInitiator;
 
 /**
  *
@@ -46,6 +47,12 @@
         setIconBaseWithExtension(COMPARTMENT_ICON);
     }
 
+    public CompartmentNode(OCISessionInitiator session, CompartmentItem compartment) {
+        super(compartment, session);
+        setDisplayName(compartment.getName());
+        setIconBaseWithExtension(COMPARTMENT_ICON);
+    }
+
     public static NodeProvider<CompartmentItem> createNode() {
         return CompartmentNode::new;
     }
@@ -56,10 +63,9 @@
      * @param tenancyId OCID of the Tenancy
      * @return List of {@code OCIItem} describing tenancy Compartments
      */
-    public static ChildrenProvider<OCIItem, CompartmentItem> getCompartments() {
-        return parent -> {
-            Identity identityClient = new IdentityClient(getDefault().getConfigProvider());
-            identityClient.setRegion(getDefault().getConfigProvider().getRegion());
+    public static ChildrenProvider.SessionAware<OCIItem, CompartmentItem> getCompartments() {
+        return (parent, session) -> {
+            Identity identityClient = session.newClient(IdentityClient.class);
 
             List<CompartmentItem> compartments = new ArrayList<>();
 
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/BuildPipelineNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/BuildPipelineNode.java
index 8c1fe49..827279e 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/BuildPipelineNode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/BuildPipelineNode.java
@@ -53,9 +53,9 @@
         return BuildPipelineNode::new;
     }
 
-    public static ChildrenProvider<DevopsProjectItem, BuildPipelineItem.BuildPipelineFolder> listDevopsPipelines() {
-        return project -> {
-            try ( DevopsClient client = new DevopsClient(OCIManager.getDefault().getConfigProvider())) {
+    public static ChildrenProvider.SessionAware<DevopsProjectItem, BuildPipelineItem.BuildPipelineFolder> listDevopsPipelines() {
+        return (project, session) -> {
+            try ( DevopsClient client = session.newClient(DevopsClient.class)) {
                 ListBuildPipelinesRequest request = ListBuildPipelinesRequest.builder().projectId(project.getKey().getValue()).build();
                 ListBuildPipelinesResponse response = client.listBuildPipelines(request);
                 List<BuildPipelineSummary> projects = response.getBuildPipelineCollection().getItems();
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/CreateBuildRunAction.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/CreateBuildRunAction.java
index 8a59938..6d08eab 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/CreateBuildRunAction.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/CreateBuildRunAction.java
@@ -26,12 +26,17 @@
 import com.oracle.bmc.model.BmcException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
 import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCISessionInitiator;
 import org.openide.awt.ActionID;
 import org.openide.awt.ActionReference;
 import org.openide.awt.ActionReferences;
 import org.openide.awt.ActionRegistration;
+import org.openide.util.ContextAwareAction;
 import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
 
 /**
@@ -44,7 +49,8 @@
 )
 @ActionRegistration(
         displayName = "#CreateBuildRunAction",
-        asynchronous = true
+        asynchronous = true,
+        lazy = true
 )
 
 @ActionReferences(value = {
@@ -52,17 +58,30 @@
 })
 @NbBundle.Messages({
     "CreateBuildRunAction=Run Build",})
-public class CreateBuildRunAction implements ActionListener {
+public class CreateBuildRunAction extends AbstractAction implements ContextAwareAction {
 
     private final BuildPipelineItem pipeline;
-
+    private final OCISessionInitiator session;
+            
     public CreateBuildRunAction(BuildPipelineItem pipeline) {
         this.pipeline = pipeline;
+        this.session = OCIManager.getDefault().getActiveSession();
+    }
+
+    CreateBuildRunAction(OCISessionInitiator session, BuildPipelineItem pipeline) {
+        this.session = session;
+        this.pipeline = pipeline;
     }
 
     @Override
+    public Action createContextAwareInstance(Lookup actionContext) {
+        OCISessionInitiator session = actionContext.lookup(OCISessionInitiator.class);
+        return new CreateBuildRunAction(session, pipeline);
+    }
+
+    @Override
     public void actionPerformed(ActionEvent e) {
-        try ( DevopsClient client = new DevopsClient(OCIManager.getDefault().getConfigProvider())) {
+        try ( DevopsClient client = session.newClient(DevopsClient.class)) {
             CreateBuildRunDetails createBuildRunDetails = CreateBuildRunDetails.builder()
                     .buildPipelineId(pipeline.getKey().getValue()).build();
 
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/DevopsProjectNode.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/DevopsProjectNode.java
index 835c5b4..5bdea3d 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/DevopsProjectNode.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/devops/DevopsProjectNode.java
@@ -56,7 +56,6 @@
    
     public static ChildrenProvider<CompartmentItem, DevopsProjectItem> listDevopsProjects() {
         return compartmentId -> {
-            System.out.println("COMPARTMENT " + compartmentId.getKey().getValue());
             try (
                 DevopsClient client = new DevopsClient(OCIManager.getDefault().getConfigProvider());
             ) {
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/items/OCID.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/items/OCID.java
index 7728ed9..894e57d 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/items/OCID.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/items/OCID.java
@@ -75,4 +75,8 @@
         return Objects.equals(this.path, other.path);
     }
 
+    @Override
+    public String toString() {
+        return "OCID{ path=" + path  + ", value=" + value + '}';
+    }
 }
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error-badge.svg b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error-badge.svg
new file mode 100644
index 0000000..ea13744
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error-badge.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 159.61 159.61" width="8" height="8" version="1.0">
+  <defs id="defs2048">
+    <linearGradient id="linearGradient2109" x1="264.58" gradientUnits="userSpaceOnUse" y1="296.37" gradientTransform="matrix(.31227 0 0 .32049 127.55 434.38)" x2="380.68" y2="553.74">
+      <stop id="stop5192" stop-color="#fff" offset="0"/>
+      <stop id="stop5194" stop-color="#f00" offset="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2107" x1="249.48" gradientUnits="userSpaceOnUse" y1="262.87" gradientTransform="matrix(-.30163 .080822 -.082949 -.30957 402.86 730.11)" x2="272.03" y2="427.54">
+      <stop id="stop5199" stop-color="#fff" offset="0"/>
+      <stop id="stop5201" stop-color="#f00" offset="1"/>
+    </linearGradient>
+  </defs>
+  <g id="layer1" transform="translate(-311.62 -429.7)">
+    <g id="g2100" transform="matrix(.9 0 0 .9 170.44 -31.113)">
+      <path id="path2174" d="m634.29 559.51a250 250 0 1 1 -500 0 250 250 0 1 1 500 0z" fill-rule="evenodd" transform="matrix(.30686 0 0 .30686 127.62 429)" stroke="#cb0000" stroke-width="20.128" fill="red"/>
+      <path id="path2540" fill-rule="evenodd" fill="url(#linearGradient2107)" d="m264.19 668.93c19.05-5.1 34.17-17.66 43.23-33.82 14.71-34.82-40.17 46.7-85.49 31.89 13.17 4.83 27.81 5.8 42.26 1.93z"/>
+      <path id="path2197" fill-rule="evenodd" fill="url(#linearGradient2109)" d="m245.66 529.36c-39.44 0-71.44 32.85-71.44 73.32 0 5.48 0.6 10.81 1.71 15.94 39.21-75.47 81.45-27.96 135.91-43.55-10.64-26.8-36.26-45.71-66.18-45.71z"/>
+      <path id="text2705" opacity=".73529" fill="#fff" d="m267.42 640.04l-21.68-21.68-21.88 21.88-17.87-17.87 21.88-21.89-21.68-21.68 17.4-17.4 21.68 21.68 21.95-21.95 17.88 17.88-21.96 21.95 21.68 21.68-17.4 17.4"/>
+      <path id="text2713" d="m267.3 637.01l-21.59-21.59-21.76 21.76-14.9-14.91 21.76-21.75-21.59-21.59 14.51-14.51 21.58 21.59 21.82-21.81 14.9 14.9-21.81 21.81 21.58 21.59-14.5 14.51" fill="#fff"/>
+    </g>
+  </g>
+</svg>
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error.png b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error.png
new file mode 100644
index 0000000..aceb9d8
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/error.png
Binary files differ
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/info.png b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/info.png
new file mode 100644
index 0000000..6213c0c
--- /dev/null
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/resources/info.png
Binary files differ
diff --git a/enterprise/el.lexer/nbproject/org-netbeans-modules-el-lexer.sig b/enterprise/el.lexer/nbproject/org-netbeans-modules-el-lexer.sig
index 2c9a15a..fd7f15a 100644
--- a/enterprise/el.lexer/nbproject/org-netbeans-modules-el-lexer.sig
+++ b/enterprise/el.lexer/nbproject/org-netbeans-modules-el-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.44
+#Version 1.45
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/el.lexer/nbproject/project.properties b/enterprise/el.lexer/nbproject/project.properties
index 62043ec..4f264b8 100644
--- a/enterprise/el.lexer/nbproject/project.properties
+++ b/enterprise/el.lexer/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 #javadoc.arch=${basedir}/arch.xml
 #javadoc.apichanges=${basedir}/apichanges.xml
 javadoc.title=Expression Language Lexer API
diff --git a/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig b/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
index 1338c31..5a62e07 100644
--- a/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
+++ b/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.91
+#Version 1.92
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstance.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstance.java
index 9f8ca43..a1a4df3 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstance.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstance.java
@@ -721,7 +721,7 @@
     private transient Lookup full;
     private final transient Lookup.Result<GlassfishModuleFactory>
             lookupResult = Lookups.forPath(Util.GF_LOOKUP_PATH).lookupResult(
-            GlassfishModuleFactory.class);;
+            GlassfishModuleFactory.class);
     private transient Collection<? extends GlassfishModuleFactory>
             currentFactories = Collections.emptyList();
     
diff --git a/enterprise/glassfish.eecommon/nbproject/org-netbeans-modules-glassfish-eecommon.sig b/enterprise/glassfish.eecommon/nbproject/org-netbeans-modules-glassfish-eecommon.sig
index 7f29466..0da22bd 100644
--- a/enterprise/glassfish.eecommon/nbproject/org-netbeans-modules-glassfish-eecommon.sig
+++ b/enterprise/glassfish.eecommon/nbproject/org-netbeans-modules-glassfish-eecommon.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54.0
+#Version 1.55.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/glassfish.javaee/nbproject/org-netbeans-modules-glassfish-javaee.sig b/enterprise/glassfish.javaee/nbproject/org-netbeans-modules-glassfish-javaee.sig
index 9900fdf..9503f7b 100644
--- a/enterprise/glassfish.javaee/nbproject/org-netbeans-modules-glassfish-javaee.sig
+++ b/enterprise/glassfish.javaee/nbproject/org-netbeans-modules-glassfish-javaee.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.58
+#Version 1.59
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1073,7 +1073,7 @@
 meth public java.lang.Object createModule(org.openide.util.Lookup)
 meth public static org.netbeans.modules.glassfish.spi.GlassfishModuleFactory getDefault()
 supr java.lang.Object
-hfds CLASSPATH_VOLUME,CLASS_LIBRARY_TYPE,COMET_JAR_2_MATCHER,COMET_JAR_MATCHER,COMET_LIB,COMET_LIB_2,ECLIPSE_LINK_LIB,ECLIPSE_LINK_LIB_2,EL_CORE_JAR_MATCHER,GRIZZLY_OPTIONAL_JAR_MATCHER,JAVADOC_VOLUME,JAVA_EE_5_LIB,JAVA_EE_6_LIB,JAVA_EE_JAVADOC,JAXRS_LIBRARIES,JAXRS_LIBRARIES_31,JERSEY_GF_SERVER,PERSISTENCE_API_JAR_MATCHER_1,PERSISTENCE_API_JAR_MATCHER_2,PERSISTENCE_JAVADOC,RP,SOURCE_VOLUME,singleton
+hfds CLASSPATH_VOLUME,CLASS_LIBRARY_TYPE,COMET_JAR_2_MATCHER,COMET_JAR_MATCHER,COMET_LIB,COMET_LIB_2,ECLIPSE_LINK_LIB,ECLIPSE_LINK_LIB_2,EL_CORE_JAR_MATCHER,GRIZZLY_OPTIONAL_JAR_MATCHER,JAKARTA_EE_8_JAVADOC,JAKARTA_EE_9_JAVADOC,JAVADOC_VOLUME,JAVA_EE_5_LIB,JAVA_EE_6_LIB,JAVA_EE_JAVADOC,JAXRS_LIBRARIES,JAXRS_LIBRARIES_31,JERSEY_GF_SERVER,LOG,PERSISTENCE_API_JAR_MATCHER_1,PERSISTENCE_API_JAR_MATCHER_2,PERSISTENCE_JAVADOC,RP,SOURCE_VOLUME,singleton
 hcls InitializeLibrary
 
 CLSS public org.netbeans.modules.glassfish.javaee.ModuleConfigurationImpl
@@ -1141,23 +1141,66 @@
 cons public init()
 fld public final static java.lang.String APPCLIENT_1_4_ID = "SCHEMA:http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd"
 fld public final static java.lang.String APPCLIENT_5_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/application-client_5.xsd"
+fld public final static java.lang.String APPCLIENT_6_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/application-client_6.xsd"
+fld public final static java.lang.String APPCLIENT_7_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/application-client_7.xsd"
+fld public final static java.lang.String APPCLIENT_8_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/application-client_8.xsd"
+fld public final static java.lang.String APPCLIENT_9_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/application-client_9.xsd"
 fld public final static java.lang.String APP_1_4_ID = "SCHEMA:http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"
 fld public final static java.lang.String APP_5_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/application_5.xsd"
+fld public final static java.lang.String APP_6_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/application_6.xsd"
+fld public final static java.lang.String APP_7_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
+fld public final static java.lang.String APP_8_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd"
+fld public final static java.lang.String APP_9_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/application_9.xsd"
 fld public final static java.lang.String EJBJAR_2_1_ID = "SCHEMA:http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
 fld public final static java.lang.String EJBJAR_3_0_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+fld public final static java.lang.String EJBJAR_3_1_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+fld public final static java.lang.String EJBJAR_3_2_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd"
+fld public final static java.lang.String EJBJAR_4_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/ejb-jar_4_0.xsd"
 fld public final static java.lang.String IBM_J2EE_NS = "http://www.ibm.com/webservices/xsd"
 fld public final static java.lang.String J2EE_NS = "http://java.sun.com/xml/ns/j2ee"
+fld public final static java.lang.String JAKARTAEE_NS = "https://jakarta.ee/xml/ns/jakartaee"
+fld public final static java.lang.String JAKARTA_PERSISTENCEORM_NS = "https://jakarta.ee/xml/ns/persistence/orm"
+fld public final static java.lang.String JAKARTA_PERSISTENCE_NS = "https://jakarta.ee/xml/ns/persistence"
 fld public final static java.lang.String JAVAEE_NS = "http://java.sun.com/xml/ns/javaee"
+fld public final static java.lang.String NEW_JAVAEE_NS = "http://xmlns.jcp.org/xml/ns/javaee"
+fld public final static java.lang.String NEW_PERSISTENCEORM_NS = "http://xmlns.jcp.org/xml/ns/persistence/orm"
+fld public final static java.lang.String NEW_PERSISTENCE_NS = "http://xmlns.jcp.org/xml/ns/persistence"
+fld public final static java.lang.String PERSISTENCEORM_2_0_ID = "SCHEMA:http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
+fld public final static java.lang.String PERSISTENCEORM_2_1_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/persistence/orm/orm_2_1.xsd"
+fld public final static java.lang.String PERSISTENCEORM_2_2_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/persistence/orm/orm_2_2.xsd"
+fld public final static java.lang.String PERSISTENCEORM_3_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/persistence/orm/orm_3_0.xsd"
 fld public final static java.lang.String PERSISTENCEORM_ID = "SCHEMA:http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
 fld public final static java.lang.String PERSISTENCEORM_NS = "http://java.sun.com/xml/ns/persistence/orm"
+fld public final static java.lang.String PERSISTENCE_2_0_ID = "SCHEMA:http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+fld public final static java.lang.String PERSISTENCE_2_1_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
+fld public final static java.lang.String PERSISTENCE_2_2_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
+fld public final static java.lang.String PERSISTENCE_3_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
 fld public final static java.lang.String PERSISTENCE_ID = "SCHEMA:http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
 fld public final static java.lang.String PERSISTENCE_NS = "http://java.sun.com/xml/ns/persistence"
 fld public final static java.lang.String RI_CONFIG_NS = "http://java.sun.com/xml/ns/jax-rpc/ri/config"
 fld public final static java.lang.String WEBAPP_2_5_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+fld public final static java.lang.String WEBAPP_3_0_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+fld public final static java.lang.String WEBAPP_3_1_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+fld public final static java.lang.String WEBAPP_4_0_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+fld public final static java.lang.String WEBAPP_5_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
+fld public final static java.lang.String WEBCOMMON_3_0_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd"
+fld public final static java.lang.String WEBCOMMON_3_1_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-common_3_1.xsd"
+fld public final static java.lang.String WEBCOMMON_4_0_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-common_4_0.xsd"
+fld public final static java.lang.String WEBCOMMON_5_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/web-common_5_0.xsd"
+fld public final static java.lang.String WEBFRAGMENT_3_0_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
+fld public final static java.lang.String WEBFRAGMENT_3_1_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd"
+fld public final static java.lang.String WEBFRAGMENT_4_0_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/web-fragment_4_0.xsd"
+fld public final static java.lang.String WEBFRAGMENT_5_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/web-fragment_5_0.xsd"
 fld public final static java.lang.String WEBSERVICES_1_1_ID = "SCHEMA:http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
 fld public final static java.lang.String WEBSERVICES_1_2_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd"
+fld public final static java.lang.String WEBSERVICES_1_3_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/javaee_web_services_1_3.xsd"
+fld public final static java.lang.String WEBSERVICES_1_4_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/javaee_web_services_1_4.xsd"
+fld public final static java.lang.String WEBSERVICES_2_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/jakartaee_web_services_2_0.xsd"
 fld public final static java.lang.String WEBSERVICES_CLIENT_1_1_ID = "SCHEMA:http://java.sun.com/xml/ns/j2ee/j2ee_web_services_client_1_1.xsd"
 fld public final static java.lang.String WEBSERVICES_CLIENT_1_2_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/javaee_web_services_client_1_2.xsd"
+fld public final static java.lang.String WEBSERVICES_CLIENT_1_3_ID = "SCHEMA:http://java.sun.com/xml/ns/javaee/javaee_web_services_client_1_3.xsd"
+fld public final static java.lang.String WEBSERVICES_CLIENT_1_4_ID = "SCHEMA:http://xmlns.jcp.org/xml/ns/javaee/javaee_web_services_client_1_4.xsd"
+fld public final static java.lang.String WEBSERVICES_CLIENT_2_0_ID = "SCHEMA:https://jakarta.ee/xml/ns/jakartaee/jakartaee_web_services_client_2_0.xsd"
 intf org.netbeans.modules.xml.catalog.spi.CatalogDescriptor2
 intf org.netbeans.modules.xml.catalog.spi.CatalogReader
 intf org.xml.sax.EntityResolver
@@ -1184,7 +1227,7 @@
 meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
 meth public void setInstanceProvider(org.netbeans.spi.server.ServerInstanceProvider)
 supr org.netbeans.modules.xml.api.model.GrammarQueryManager
-hfds APPCLIENT_1_4,APPCLIENT_1_4_XSD,APPCLIENT_5,APPCLIENT_5_XSD,APPCLIENT_TAG,APP_1_4,APP_1_4_XSD,APP_5,APP_5_XSD,APP_TAG,EJBJAR_2_1,EJBJAR_2_1_XSD,EJBJAR_3_0,EJBJAR_3_0_XSD,EJB_JAR_TAG,JavaEE6SchemaToURLMap,JavaEE6TypeToURLMap,PERSISTENCE,PERSISTENCEORM,PERSISTENCEORM_TAG,PERSISTENCEORM_XSD,PERSISTENCE_TAG,PERSISTENCE_XSD,SCHEMASLOCATION,SchemaToURLMap,TypeToURLMap,WEBAPP_2_5,WEBAPP_2_5_XSD,WEBAPP_3_0_XSD,WEBAPP_TAG,WEBCOMMON_3_0_XSD,WEBFRAGMENT_3_0_XSD,WEBSERVICES_1_1,WEBSERVICES_1_1_XSD,WEBSERVICES_1_2,WEBSERVICES_1_2_XSD,WEBSERVICES_CLIENT_1_1,WEBSERVICES_CLIENT_1_1_XSD,WEBSERVICES_CLIENT_1_2,WEBSERVICES_CLIENT_1_2_XSD,WEBSERVICES_TAG,XMLNS_ATTR,XML_XSD,XML_XSD_DEF,catalogListeners,ddCatalogMap,displayNameKey,hasAdditionalMap,javaEE6DDCatalog,platformRootDir,shortDescriptionKey
+hfds APPCLIENT_1_4,APPCLIENT_1_4_XSD,APPCLIENT_5,APPCLIENT_5_XSD,APPCLIENT_6,APPCLIENT_6_XSD,APPCLIENT_7,APPCLIENT_7_XSD,APPCLIENT_8,APPCLIENT_8_XSD,APPCLIENT_9,APPCLIENT_9_XSD,APPCLIENT_TAG,APP_1_4,APP_1_4_XSD,APP_5,APP_5_XSD,APP_6,APP_6_XSD,APP_7,APP_7_XSD,APP_8,APP_8_XSD,APP_9,APP_9_XSD,APP_TAG,EJBJAR_2_1,EJBJAR_2_1_XSD,EJBJAR_3_0,EJBJAR_3_0_XSD,EJBJAR_3_1,EJBJAR_3_1_XSD,EJBJAR_3_2,EJBJAR_3_2_XSD,EJBJAR_4_0,EJBJAR_4_0_XSD,EJB_JAR_TAG,JavaEE6SchemaToURLMap,JavaEE6TypeToURLMap,PERSISTENCE,PERSISTENCEORM,PERSISTENCEORM_2_0,PERSISTENCEORM_2_0_XSD,PERSISTENCEORM_2_1,PERSISTENCEORM_2_1_XSD,PERSISTENCEORM_2_2,PERSISTENCEORM_2_2_XSD,PERSISTENCEORM_3_0,PERSISTENCEORM_3_0_XSD,PERSISTENCEORM_TAG,PERSISTENCEORM_XSD,PERSISTENCE_2_0,PERSISTENCE_2_0_XSD,PERSISTENCE_2_1,PERSISTENCE_2_1_XSD,PERSISTENCE_2_2,PERSISTENCE_2_2_XSD,PERSISTENCE_3_0,PERSISTENCE_3_0_XSD,PERSISTENCE_TAG,PERSISTENCE_XSD,SCHEMASLOCATION,SchemaToURLMap,TypeToURLMap,WEBAPP_2_5,WEBAPP_2_5_XSD,WEBAPP_3_0,WEBAPP_3_0_XSD,WEBAPP_3_1,WEBAPP_3_1_XSD,WEBAPP_4_0,WEBAPP_4_0_XSD,WEBAPP_5_0,WEBAPP_5_0_XSD,WEBAPP_TAG,WEBCOMMON_3_0,WEBCOMMON_3_0_XSD,WEBCOMMON_3_1,WEBCOMMON_3_1_XSD,WEBCOMMON_4_0,WEBCOMMON_4_0_XSD,WEBCOMMON_5_0,WEBCOMMON_5_0_XSD,WEBFRAGMENT_3_0,WEBFRAGMENT_3_0_XSD,WEBFRAGMENT_3_1,WEBFRAGMENT_3_1_XSD,WEBFRAGMENT_4_0,WEBFRAGMENT_4_0_XSD,WEBFRAGMENT_5_0,WEBFRAGMENT_5_0_XSD,WEBSERVICES_1_1,WEBSERVICES_1_1_XSD,WEBSERVICES_1_2,WEBSERVICES_1_2_XSD,WEBSERVICES_1_3,WEBSERVICES_1_3_XSD,WEBSERVICES_1_4,WEBSERVICES_1_4_XSD,WEBSERVICES_2_0,WEBSERVICES_2_0_XSD,WEBSERVICES_CLIENT_1_1,WEBSERVICES_CLIENT_1_1_XSD,WEBSERVICES_CLIENT_1_2,WEBSERVICES_CLIENT_1_2_XSD,WEBSERVICES_CLIENT_1_3,WEBSERVICES_CLIENT_1_3_XSD,WEBSERVICES_CLIENT_1_4,WEBSERVICES_CLIENT_1_4_XSD,WEBSERVICES_CLIENT_2_0,WEBSERVICES_CLIENT_2_0_XSD,WEBSERVICES_TAG,XMLNS_ATTR,XML_XSD,XML_XSD_DEF,catalogListeners,ddCatalogMap,displayNameKey,hasAdditionalMap,javaEE6DDCatalog,platformRootDir,shortDescriptionKey
 
 CLSS public org.netbeans.modules.glassfish.javaee.SunMessageDestination
 cons public init(java.lang.String,org.netbeans.modules.j2ee.deployment.common.api.MessageDestination$Type)
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/templates/WebLogicDDWizardIterator.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/templates/WebLogicDDWizardIterator.java
index eebd0a4..5764a20 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/templates/WebLogicDDWizardIterator.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/templates/WebLogicDDWizardIterator.java
@@ -223,7 +223,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         
diff --git a/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig b/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
index 9931849..1586854 100644
--- a/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
+++ b/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.24
+#Version 1.25
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/enterprise/j2ee.api.ejbmodule/nbproject/org-netbeans-modules-j2ee-api-ejbmodule.sig b/enterprise/j2ee.api.ejbmodule/nbproject/org-netbeans-modules-j2ee-api-ejbmodule.sig
index 264d9be..bf8614a 100644
--- a/enterprise/j2ee.api.ejbmodule/nbproject/org-netbeans-modules-j2ee-api-ejbmodule.sig
+++ b/enterprise/j2ee.api.ejbmodule/nbproject/org-netbeans-modules-j2ee-api-ejbmodule.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54
+#Version 1.55
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/j2ee.clientproject/nbproject/org-netbeans-modules-j2ee-clientproject.sig b/enterprise/j2ee.clientproject/nbproject/org-netbeans-modules-j2ee-clientproject.sig
index f4e9134..463f4fd 100644
--- a/enterprise/j2ee.clientproject/nbproject/org-netbeans-modules-j2ee-clientproject.sig
+++ b/enterprise/j2ee.clientproject/nbproject/org-netbeans-modules-j2ee-clientproject.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.63.0
+#Version 1.64.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/ProjectAppClientProvider.java b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/ProjectAppClientProvider.java
index 76fbd2d..8adbee9 100644
--- a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/ProjectAppClientProvider.java
+++ b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/ProjectAppClientProvider.java
@@ -36,7 +36,7 @@
     
     public Car findCar (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof AppClientProject) {
+        if (project instanceof AppClientProject) {
             return ((AppClientProject) project).getAPICar();
         }
         return null;
diff --git a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectWebServicesSupportProvider.java b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectWebServicesSupportProvider.java
index 9394e4d..6d62a37 100644
--- a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectWebServicesSupportProvider.java
+++ b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectWebServicesSupportProvider.java
@@ -40,7 +40,7 @@
 
     public WebServicesClientSupport findWebServicesClientSupport (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof AppClientProject) {
+        if (project instanceof AppClientProject) {
             return ((AppClientProject) project).getAPIWebServicesClientSupport();
         }
         return null;
@@ -48,7 +48,7 @@
         
     public JAXWSClientSupport findJAXWSClientSupport(FileObject file) {
         Project project = FileOwnerQuery.getOwner(file);
-        if (project != null && project instanceof AppClientProject) {
+        if (project instanceof AppClientProject) {
             return ((AppClientProject) project).getAPIJAXWSClientSupport();
         }
         return null;
diff --git a/enterprise/j2ee.clientproject/test/unit/data/projects/ApplicationClient1/nbproject/project.properties b/enterprise/j2ee.clientproject/test/unit/data/projects/ApplicationClient1/nbproject/project.properties
index 435ab2c..4421da0 100644
--- a/enterprise/j2ee.clientproject/test/unit/data/projects/ApplicationClient1/nbproject/project.properties
+++ b/enterprise/j2ee.clientproject/test/unit/data/projects/ApplicationClient1/nbproject/project.properties
@@ -30,7 +30,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.common/nbproject/org-netbeans-modules-j2ee-common.sig b/enterprise/j2ee.common/nbproject/org-netbeans-modules-j2ee-common.sig
index 7056e63..3c413b7 100644
--- a/enterprise/j2ee.common/nbproject/org-netbeans-modules-j2ee-common.sig
+++ b/enterprise/j2ee.common/nbproject/org-netbeans-modules-j2ee-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.120
+#Version 1.121
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -638,11 +638,14 @@
 meth public boolean isCdi10Supported()
 meth public boolean isCdi11Supported()
 meth public boolean isCdi20Supported()
+meth public boolean isCdi30Supported()
 meth public boolean isEjb30Supported()
 meth public boolean isEjb31LiteSupported()
 meth public boolean isEjb31Supported()
 meth public boolean isEjb32LiteSupported()
 meth public boolean isEjb32Supported()
+meth public boolean isEjb40LiteSupported()
+meth public boolean isEjb40Supported()
 meth public boolean isEjbLiteIncluded()
  anno 0 java.lang.Deprecated()
 meth public static org.netbeans.modules.j2ee.common.J2eeProjectCapabilities forProject(org.netbeans.api.project.Project)
diff --git a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/ui/NoSelectedServerWarning.java b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/ui/NoSelectedServerWarning.java
index a7e7993..9890ff0 100644
--- a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/ui/NoSelectedServerWarning.java
+++ b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/ui/NoSelectedServerWarning.java
@@ -119,7 +119,7 @@
                 public void propertyChange(PropertyChangeEvent evt) {
                     if (evt.getPropertyName().equals(NoSelectedServerWarning.OK_ENABLED)) {
                         Object newvalue = evt.getNewValue();
-                        if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                        if (newvalue instanceof Boolean) {
                             desc.setValid(((Boolean)newvalue));
                         }
                     }
diff --git a/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig b/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
index 5ad5560..71e2d41 100644
--- a/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
+++ b/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/j2ee.dd.webservice/nbproject/org-netbeans-modules-j2ee-dd-webservice.sig b/enterprise/j2ee.dd.webservice/nbproject/org-netbeans-modules-j2ee-dd-webservice.sig
index e97314e..3ab480a 100644
--- a/enterprise/j2ee.dd.webservice/nbproject/org-netbeans-modules-j2ee-dd-webservice.sig
+++ b/enterprise/j2ee.dd.webservice/nbproject/org-netbeans-modules-j2ee-dd-webservice.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/commonws/EnclosingBean.java b/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/commonws/EnclosingBean.java
index d7e2df2..9bbd47a 100644
--- a/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/commonws/EnclosingBean.java
+++ b/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/commonws/EnclosingBean.java
@@ -80,7 +80,7 @@
                         break;
                     }
                 }
-            if (keyValue!=null && keyValue instanceof String) {
+            if (keyValue instanceof String) {
                 if (findBeanByName(beanName, keyProperty,(String)keyValue)!=null) {
                     throw new NameAlreadyUsedException(beanName,  keyProperty, (String)keyValue);
                 }   
diff --git a/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/webservices/WebServicesProxy.java b/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/webservices/WebServicesProxy.java
index 2aed73c..5ba39fb 100644
--- a/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/webservices/WebServicesProxy.java
+++ b/enterprise/j2ee.dd.webservice/src/org/netbeans/modules/j2ee/dd/impl/webservices/WebServicesProxy.java
@@ -405,7 +405,7 @@
             } catch (org.openide.filesystems.FileAlreadyLockedException ex) {
                 // trying to use OutputProvider for writing changes
                 org.openide.loaders.DataObject dobj = org.openide.loaders.DataObject.find(fo);
-                if (dobj != null && dobj instanceof WebServicesProxy.OutputProvider)
+                if (dobj instanceof OutputProvider)
                     ((WebServicesProxy.OutputProvider)dobj).write(this);
                 else 
                     throw ex;
diff --git a/enterprise/j2ee.dd/nbproject/org-netbeans-modules-j2ee-dd.sig b/enterprise/j2ee.dd/nbproject/org-netbeans-modules-j2ee-dd.sig
index fadf1c3..642b9c5 100644
--- a/enterprise/j2ee.dd/nbproject/org-netbeans-modules-j2ee-dd.sig
+++ b/enterprise/j2ee.dd/nbproject/org-netbeans-modules-j2ee-dd.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57.0
+#Version 1.58.0
 
 CLSS public abstract interface java.io.Serializable
 
@@ -93,6 +93,7 @@
 fld public final static java.lang.String VERSION_6 = "6"
 fld public final static java.lang.String VERSION_7 = "7"
 fld public final static java.lang.String VERSION_8 = "8"
+fld public final static java.lang.String VERSION_9 = "9"
 intf org.netbeans.modules.j2ee.dd.api.common.RootInterface
 meth public abstract int addIcon(org.netbeans.modules.j2ee.dd.api.common.Icon) throws org.netbeans.modules.j2ee.dd.api.common.VersionNotSupportedException
 meth public abstract int addModule(org.netbeans.modules.j2ee.dd.api.application.Module)
@@ -832,7 +833,7 @@
 meth public org.netbeans.modules.schema2beans.BaseBean getBaseBean(org.netbeans.modules.j2ee.dd.api.common.CommonDDBean)
 meth public static org.netbeans.modules.j2ee.dd.api.ejb.DDProvider getDefault()
 supr java.lang.Object
-hfds EJB_21_DOCTYPE,EJB_30_DOCTYPE,EJB_31_DOCTYPE,EJB_32_DOCTYPE,ddMap,ddProvider
+hfds EJB_21_DOCTYPE,EJB_30_DOCTYPE,EJB_31_DOCTYPE,EJB_32_DOCTYPE,EJB_40_DOCTYPE,ddMap,ddProvider
 hcls DDFileChangeListener,DDResolver,ErrorHandler
 
 CLSS public abstract interface org.netbeans.modules.j2ee.dd.api.ejb.Ejb
diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/application/ApplicationProxy.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/application/ApplicationProxy.java
index 228dfdf..77e98bc 100644
--- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/application/ApplicationProxy.java
+++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/application/ApplicationProxy.java
@@ -399,7 +399,7 @@
             } catch (org.openide.filesystems.FileAlreadyLockedException ex) {
                 // trying to use OutputProvider for writing changes
                 org.openide.loaders.DataObject dobj = org.openide.loaders.DataObject.find(fo);
-                if (dobj!=null && dobj instanceof ApplicationProxy.OutputProvider)
+                if (dobj instanceof OutputProvider)
                     ((ApplicationProxy.OutputProvider)dobj).write(this);
                 else throw ex;
             }
diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/client/AppClientProxy.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/client/AppClientProxy.java
index 81beefd..aae05d0 100644
--- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/client/AppClientProxy.java
+++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/client/AppClientProxy.java
@@ -364,7 +364,7 @@
             } catch (FileAlreadyLockedException ex) {
                 // trying to use OutputProvider for writing changes
                 org.openide.loaders.DataObject dobj = org.openide.loaders.DataObject.find(fo);
-                if (dobj!=null && dobj instanceof AppClientProxy.OutputProvider)
+                if (dobj instanceof OutputProvider)
                     ((AppClientProxy.OutputProvider)dobj).write(this);
                 else throw ex;
             }
diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/EnclosingBean.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/EnclosingBean.java
index 7daf863..c6c084a 100644
--- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/EnclosingBean.java
+++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/EnclosingBean.java
@@ -95,7 +95,7 @@
                         break;
                     }
                 }
-            if (keyValue!=null && keyValue instanceof String) {
+            if (keyValue instanceof String) {
                 if (findBeanByName(beanName, keyProperty,(String)keyValue)!=null) {
                     throw new NameAlreadyUsedException(beanName,  keyProperty, (String)keyValue);
                 }
diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/jakartaee_9.xsd b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/jakartaee_9.xsd
index 16136f9..dd48fd6 100644
--- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/jakartaee_9.xsd
+++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/jakartaee_9.xsd
@@ -49,7 +49,7 @@
   </xsd:annotation>
 
   <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
-              schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+              schemaLocation="xml.xsd"/>
 
   <xsd:include schemaLocation="jakartaee_web_services_client_2_0.xsd"/>
 
diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/xml.xsd b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/xml.xsd
index 3468e84..4a8ac25 100644
--- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/xml.xsd
+++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/resources/xml.xsd
@@ -1,15 +1,15 @@
 <?xml version='1.0'?>
-<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
 <!--
 
 W3C Software and Document Notice and License
 
-This work is being provided by the copyright holders under the following license.
+This work is being provided by the copyright holders under the following
+license.
 
 License
 
-By obtaining and/or copying this work, you (the licensee) agree that you have
-read, understood, and will comply with the following terms and conditions.
+By obtaining and/or copying this work, you (the licensee) agree that you
+have read, understood, and will comply with the following terms and conditions.
 
 Permission to copy, modify, and distribute this work, with or without
 modification, for any purpose and without fee or royalty is hereby granted,
@@ -18,18 +18,18 @@
 
 - The full text of this NOTICE in a location viewable to users of the
   redistributed or derivative work.
-- Any pre-existing intellectual property disclaimers, notices, or terms and
-  conditions. If none exist, the W3C Software and Document Short Notice should
-  be included.
-- Notice of any changes or modifications, through a copyright statement on the
-  new code or document such as "This software or document includes material
-  copied from or derived from [title and URI of the W3C document].
+- Any pre-existing intellectual property disclaimers, notices, or terms
+  and conditions. If none exist, the W3C Software and Document Short Notice
+  should be included.
+- Notice of any changes or modifications, through a copyright statement
+  on the new code or document such as "This software or document includes
+  material copied from or derived from [title and URI of the W3C document].
   Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)."
 
 Disclaimers
 
-THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
+THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS
+OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
 MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE
 SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
 TRADEMARKS OR OTHER RIGHTS.
@@ -37,68 +37,114 @@
 COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
 CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
 
-The name and trademarks of copyright holders may NOT be used in advertising or
-publicity pertaining to the work without specific, written prior permission.
-Title to copyright in this work will at all times remain with copyright
-holders.
+The name and trademarks of copyright holders may NOT be used in advertising
+or publicity pertaining to the work without specific, written prior
+permission. Title to copyright in this work will at all times remain with
+copyright holders.
+
 -->
-<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns   ="http://www.w3.org/1999/xhtml"
+  xml:lang="en">
 
  <xs:annotation>
   <xs:documentation>
-   See http://www.w3.org/XML/1998/namespace.html and
-   http://www.w3.org/TR/REC-xml for information about this namespace.
+   <div>
+    <h1>About the XML namespace</h1>
+
+    <div class="bodytext">
+     <p>
+      This schema document describes the XML namespace, in a form
+      suitable for import by other schema documents.
+     </p>
+     <p>
+      See <a href="http://www.w3.org/XML/1998/namespace.html">
+      http://www.w3.org/XML/1998/namespace.html</a> and
+      <a href="http://www.w3.org/TR/REC-xml">
+      http://www.w3.org/TR/REC-xml</a> for information
+      about this namespace.
+     </p>
+     <p>
+      Note that local names in this namespace are intended to be
+      defined only by the World Wide Web Consortium or its subgroups.
+      The names currently defined in this namespace are listed below.
+      They should not be used with conflicting semantics by any Working
+      Group, specification, or document instance.
+     </p>
+     <p>
+      See further below in this document for more information about <a
+      href="#usage">how to refer to this schema document from your own
+      XSD schema documents</a> and about <a href="#nsversioning">the
+      namespace-versioning policy governing this schema document</a>.
+     </p>
+    </div>
+   </div>
   </xs:documentation>
  </xs:annotation>
 
- <xs:annotation>
-  <xs:documentation>This schema defines attributes and an attribute group
-        suitable for use by
-        schemas wishing to allow xml:base, xml:lang or xml:space attributes
-        on elements they define.
-
-        To enable this, such a schema must import this schema
-        for the XML namespace, e.g. as follows:
-        &lt;schema . . .>
-         . . .
-         &lt;import namespace="http://www.w3.org/XML/1998/namespace"
-                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
-
-        Subsequently, qualified reference to any of the attributes
-        or the group defined below will have the desired effect, e.g.
-
-        &lt;type . . .>
-         . . .
-         &lt;attributeGroup ref="xml:specialAttrs"/>
-
-         will define a type which will schema-validate an instance
-         element with any of those attributes</xs:documentation>
- </xs:annotation>
-
- <xs:annotation>
-  <xs:documentation>In keeping with the XML Schema WG's standard versioning
-   policy, this schema document will persist at
-   http://www.w3.org/2001/03/xml.xsd.
-   At the date of issue it can also be found at
-   http://www.w3.org/2001/xml.xsd.
-   The schema document at that URI may however change in the future,
-   in order to remain compatible with the latest version of XML Schema
-   itself.  In other words, if the XML Schema namespace changes, the version
-   of this document at
-   http://www.w3.org/2001/xml.xsd will change
-   accordingly; the version at
-   http://www.w3.org/2001/03/xml.xsd will not change.
-  </xs:documentation>
- </xs:annotation>
-
- <xs:attribute name="lang" type="xs:language">
+ <xs:attribute name="lang">
   <xs:annotation>
-   <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
-         codes as the enumerated possible values . . .</xs:documentation>
+   <xs:documentation>
+    <div>
+
+      <h3>lang (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       is a language code for the natural language of the content of
+       any element; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML specification.</p>
+
+    </div>
+    <div>
+     <h4>Notes</h4>
+     <p>
+      Attempting to install the relevant ISO 2- and 3-letter
+      codes as the enumerated possible values is probably never
+      going to be a realistic possibility.
+     </p>
+     <p>
+      See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
+       http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
+      and the IANA language subtag registry at
+      <a href="http://www.iana.org/assignments/language-subtag-registry">
+       http://www.iana.org/assignments/language-subtag-registry</a>
+      for further information.
+     </p>
+     <p>
+      The union allows for the 'un-declaration' of xml:lang with
+      the empty string.
+     </p>
+    </div>
+   </xs:documentation>
   </xs:annotation>
+  <xs:simpleType>
+   <xs:union memberTypes="xs:language">
+    <xs:simpleType>
+     <xs:restriction base="xs:string">
+      <xs:enumeration value=""/>
+     </xs:restriction>
+    </xs:simpleType>
+   </xs:union>
+  </xs:simpleType>
  </xs:attribute>
 
- <xs:attribute name="space" default="preserve">
+ <xs:attribute name="space">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+
+      <h3>space (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose
+       value is a keyword indicating what whitespace processing
+       discipline is intended for the content of the element; its
+       value is inherited.  This name is reserved by virtue of its
+       definition in the XML specification.</p>
+
+    </div>
+   </xs:documentation>
+  </xs:annotation>
   <xs:simpleType>
    <xs:restriction base="xs:NCName">
     <xs:enumeration value="default"/>
@@ -107,10 +153,47 @@
   </xs:simpleType>
  </xs:attribute>
 
- <xs:attribute name="base" type="xs:anyURI">
+ <xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
+   <xs:documentation>
+    <div>
+
+      <h3>base (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       provides a URI to be used as the base for interpreting any
+       relative URIs in the scope of the element on which it
+       appears; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML Base specification.</p>
+
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
+      for information about this attribute.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="id" type="xs:ID">
   <xs:annotation>
-   <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
-                     information about this attribute.</xs:documentation>
+   <xs:documentation>
+    <div>
+
+      <h3>id (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       should be interpreted as if declared to be of type ID.
+       This name is reserved by virtue of its definition in the
+       xml:id specification.</p>
+
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
+      for information about this attribute.
+     </p>
+    </div>
+   </xs:documentation>
   </xs:annotation>
  </xs:attribute>
 
@@ -118,6 +201,129 @@
   <xs:attribute ref="xml:base"/>
   <xs:attribute ref="xml:lang"/>
   <xs:attribute ref="xml:space"/>
+  <xs:attribute ref="xml:id"/>
  </xs:attributeGroup>
 
+ <xs:annotation>
+  <xs:documentation>
+   <div>
+
+    <h3>Father (in any context at all)</h3>
+
+    <div class="bodytext">
+     <p>
+      denotes Jon Bosak, the chair of
+      the original XML Working Group.  This name is reserved by
+      the following decision of the W3C XML Plenary and
+      XML Coordination groups:
+     </p>
+     <blockquote>
+       <p>
+	In appreciation for his vision, leadership and
+	dedication the W3C XML Plenary on this 10th day of
+	February, 2000, reserves for Jon Bosak in perpetuity
+	the XML name "xml:Father".
+       </p>
+     </blockquote>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div xml:id="usage" id="usage">
+    <h2><a name="usage">About this schema document</a></h2>
+
+    <div class="bodytext">
+     <p>
+      This schema defines attributes and an attribute group suitable
+      for use by schemas wishing to allow <code>xml:base</code>,
+      <code>xml:lang</code>, <code>xml:space</code> or
+      <code>xml:id</code> attributes on elements they define.
+     </p>
+     <p>
+      To enable this, such a schema must import this schema for
+      the XML namespace, e.g. as follows:
+     </p>
+     <pre>
+          &lt;schema . . .>
+           . . .
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+     </pre>
+     <p>
+      or
+     </p>
+     <pre>
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+     </pre>
+     <p>
+      Subsequently, qualified reference to any of the attributes or the
+      group defined below will have the desired effect, e.g.
+     </p>
+     <pre>
+          &lt;type . . .>
+           . . .
+           &lt;attributeGroup ref="xml:specialAttrs"/>
+     </pre>
+     <p>
+      will define a type which will schema-validate an instance element
+      with any of those attributes.
+     </p>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div id="nsversioning" xml:id="nsversioning">
+    <h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
+    <div class="bodytext">
+     <p>
+      In keeping with the XML Schema WG's standard versioning
+      policy, this schema document will persist at
+      <a href="http://www.w3.org/2009/01/xml.xsd">
+       http://www.w3.org/2009/01/xml.xsd</a>.
+     </p>
+     <p>
+      At the date of issue it can also be found at
+      <a href="http://www.w3.org/2001/xml.xsd">
+       http://www.w3.org/2001/xml.xsd</a>.
+     </p>
+     <p>
+      The schema document at that URI may however change in the future,
+      in order to remain compatible with the latest version of XML
+      Schema itself, or with the XML namespace itself.  In other words,
+      if the XML Schema or XML namespaces change, the version of this
+      document at <a href="http://www.w3.org/2001/xml.xsd">
+       http://www.w3.org/2001/xml.xsd
+      </a>
+      will change accordingly; the version at
+      <a href="http://www.w3.org/2009/01/xml.xsd">
+       http://www.w3.org/2009/01/xml.xsd
+      </a>
+      will not change.
+     </p>
+     <p>
+      Previous dated (and unchanging) versions of this schema
+      document are at:
+     </p>
+     <ul>
+      <li><a href="http://www.w3.org/2009/01/xml.xsd">
+	http://www.w3.org/2009/01/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2007/08/xml.xsd">
+	http://www.w3.org/2007/08/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2004/10/xml.xsd">
+	http://www.w3.org/2004/10/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2001/03/xml.xsd">
+	http://www.w3.org/2001/03/xml.xsd</a></li>
+     </ul>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
 </xs:schema>
diff --git a/enterprise/j2ee.ddloaders/src/org/netbeans/modules/j2ee/ddloaders/common/xmlutils/XMLJ2eeUtils.java b/enterprise/j2ee.ddloaders/src/org/netbeans/modules/j2ee/ddloaders/common/xmlutils/XMLJ2eeUtils.java
index e3abd42..b3743a4 100644
--- a/enterprise/j2ee.ddloaders/src/org/netbeans/modules/j2ee/ddloaders/common/xmlutils/XMLJ2eeUtils.java
+++ b/enterprise/j2ee.ddloaders/src/org/netbeans/modules/j2ee/ddloaders/common/xmlutils/XMLJ2eeUtils.java
@@ -444,7 +444,7 @@
         // removing the next text element (only if this element was the last non text element in parent)
         if (firstElement) {
             Node next = element.getNextSibling();
-            if (next!=null && next instanceof CharacterData && next.getNextSibling()==null)
+            if (next instanceof CharacterData && next.getNextSibling() == null)
                      parent.removeChild(next);        
         }
      
@@ -535,11 +535,11 @@
                 Node previous = lastInList.getPreviousSibling();
                 Node next = lastInList.getNextSibling();
                 if (next != null) {
-                    if (previous!=null && previous instanceof CharacterData)
+                    if (previous instanceof CharacterData)
                         element.insertBefore(previous.cloneNode(false),next);
                     element.insertBefore(newElement,next);
                 } else {
-                    if (previous!=null && previous instanceof CharacterData)
+                    if (previous instanceof CharacterData)
                         element.appendChild(previous.cloneNode(false));
                     element.appendChild(newElement);
                 }
@@ -611,11 +611,11 @@
                 Node previous = lastInList.getPreviousSibling();
                 Node next = lastInList.getNextSibling();
                 if (next != null) {
-                    if (previous!=null && previous instanceof CharacterData)
+                    if (previous instanceof CharacterData)
                         element.insertBefore(previous.cloneNode(false),next);
                     element.insertBefore(newElement,next);
                 } else {
-                    if (previous!=null && previous instanceof CharacterData)
+                    if (previous instanceof CharacterData)
                         element.appendChild(previous.cloneNode(false));
                     element.appendChild(newElement);
                 }
@@ -675,13 +675,13 @@
         // removing the next text element (only if this element was the last non text element in parent)
         if (firstElement) {
             Node next = list.item(list.getLength()-1).getNextSibling();
-            if (next!=null && next instanceof CharacterData && next.getNextSibling()==null)
+            if (next instanceof CharacterData && next.getNextSibling() == null)
                      element.removeChild(next);        
         }
         for(int i=list.getLength()-1;i>=0;i--){
             Node item = list.item(i);
             Node previous = item.getPreviousSibling();
-            if (previous!=null && previous instanceof CharacterData)
+            if (previous instanceof CharacterData)
                 element.removeChild(previous);
             element.removeChild(item);
         }
diff --git a/enterprise/j2ee.ddloaders/test/unit/data/projects/webapp/nbproject/project.properties b/enterprise/j2ee.ddloaders/test/unit/data/projects/webapp/nbproject/project.properties
index e6eedc8..e5f5369 100644
--- a/enterprise/j2ee.ddloaders/test/unit/data/projects/webapp/nbproject/project.properties
+++ b/enterprise/j2ee.ddloaders/test/unit/data/projects/webapp/nbproject/project.properties
@@ -45,7 +45,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=${default.javac.target}
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ProjectEarProvider.java b/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ProjectEarProvider.java
index 2d4a35b..0a4e936 100644
--- a/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ProjectEarProvider.java
+++ b/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ProjectEarProvider.java
@@ -30,7 +30,7 @@
     
     public Ear findEar (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof EarProject) {
+        if (project instanceof EarProject) {
             EarProject ep = (EarProject) project;
             FileObject prjdir = ep.getProjectDirectory();
             if (prjdir != null && (prjdir.equals (file) || FileUtil.isParentOf(prjdir, file))) {
diff --git a/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ui/customizer/CustomizerRun.java b/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ui/customizer/CustomizerRun.java
index a971b96..d9bbb18 100644
--- a/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ui/customizer/CustomizerRun.java
+++ b/enterprise/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/ui/customizer/CustomizerRun.java
@@ -570,7 +570,7 @@
 
         @Override
         public boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof ClientModuleItem)) {
+            if (!(obj instanceof ClientModuleItem)) {
                 return false;
             }
             return uri.equals(((ClientModuleItem)obj).uri);
@@ -582,7 +582,7 @@
         }
 
         public int compareTo(Object obj) {
-            if (obj == null || !(obj instanceof ClientModuleItem)) {
+            if (!(obj instanceof ClientModuleItem)) {
                 return -1;
             }
             return uri.compareTo(((ClientModuleItem)obj).uri);
diff --git a/enterprise/j2ee.ejbcore/nbproject/org-netbeans-modules-j2ee-ejbcore.sig b/enterprise/j2ee.ejbcore/nbproject/org-netbeans-modules-j2ee-ejbcore.sig
index fa34a0d..4b29810 100644
--- a/enterprise/j2ee.ejbcore/nbproject/org-netbeans-modules-j2ee-ejbcore.sig
+++ b/enterprise/j2ee.ejbcore/nbproject/org-netbeans-modules-j2ee-ejbcore.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.68
+#Version 1.69
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/api/methodcontroller/AbstractMethodController.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/api/methodcontroller/AbstractMethodController.java
index 2a4cfbd..0cf9d23 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/api/methodcontroller/AbstractMethodController.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/api/methodcontroller/AbstractMethodController.java
@@ -419,7 +419,7 @@
                         if (typeElement != null) {
                             TypeMirror superCls = typeElement.getSuperclass();
                             TypeMirror objectCls = controller.getElements().getTypeElement("java.lang.Object").asType(); //NOI18N
-                            while ((superCls != null) && (superCls instanceof DeclaredType) && !types.isSameType(superCls, objectCls)) {
+                            while ((superCls instanceof DeclaredType) && !types.isSameType(superCls, objectCls)) {
                                 TypeElement superElem = (TypeElement) ((DeclaredType) superCls).asElement();
                                 result.add(superElem.getQualifiedName().toString());
                                 superCls = superElem.getSuperclass();
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
index 77bc966..fae1fa7 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
@@ -190,7 +190,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java
index fa5d1e9..6bd0d21 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java
@@ -180,7 +180,7 @@
                 new PropertyChangeListener() {
                     public void propertyChange(PropertyChangeEvent evt) {
                         Object newvalue = evt.getNewValue();
-                        if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                        if (newvalue instanceof Boolean) {
                             dialogDescriptor.setValid(((Boolean) newvalue));
                         }
                     }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/CallEjbDialog.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/CallEjbDialog.java
index a3429d2..a9119a0 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/CallEjbDialog.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/CallEjbDialog.java
@@ -105,7 +105,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(CallEjbPanel.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         dialogDescriptor.setValid(((Boolean)newvalue));
                     }
                 }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SelectDatabasePanel.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SelectDatabasePanel.java
index a486e00..23be6ec 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SelectDatabasePanel.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SelectDatabasePanel.java
@@ -205,7 +205,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (DataSourceReferencePanel.IS_VALID.equals(evt.getPropertyName())) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         dialogDescriptor.setValid(((Boolean) newvalue));
                     }
                 }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendEmailCodeGenerator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendEmailCodeGenerator.java
index 868e7f5..2fcaf86 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendEmailCodeGenerator.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendEmailCodeGenerator.java
@@ -139,7 +139,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(SendEmailPanel.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         boolean isValid = ((Boolean) newvalue);
                         dialogDescriptor.setValid(isValid);
                         if (isValid) {
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJMSMessageCodeGenerator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJMSMessageCodeGenerator.java
index c3d1261..9279664 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJMSMessageCodeGenerator.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJMSMessageCodeGenerator.java
@@ -146,7 +146,7 @@
                         @Override
                         public void propertyChange(PropertyChangeEvent evt) {
                             Object newvalue = evt.getNewValue();
-                            if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                            if (newvalue instanceof Boolean) {
                                 boolean isValid = ((Boolean) newvalue);
                                 dialogDescriptor.setValid(isValid);
                                 if (isValid) {
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJmsMessagePanel.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJmsMessagePanel.java
index 12385c9..ff8e231 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJmsMessagePanel.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/SendJmsMessagePanel.java
@@ -317,7 +317,7 @@
             @Override
                     public void propertyChange(PropertyChangeEvent evt) {
                         Object newvalue = evt.getNewValue();
-                        if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                        if (newvalue instanceof Boolean) {
                             boolean isServiceLocatorOk = ((Boolean) newvalue);
                             if (isServiceLocatorOk) {
                                 verifyAndFire();
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/UseDatabaseCodeGenerator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/UseDatabaseCodeGenerator.java
index 54ba394..8663c9c 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/UseDatabaseCodeGenerator.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entries/UseDatabaseCodeGenerator.java
@@ -156,7 +156,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(SelectDatabasePanel.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         Boolean booleanValue = (Boolean) newvalue;
                         if (booleanValue) {
                             dialogDescriptor.setValid(true);
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_1_4/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_1_4/nbproject/project.properties
index da7a689..6f0064e 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_1_4/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_1_4/nbproject/project.properties
@@ -26,7 +26,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_5_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_5_0/nbproject/project.properties
index fac2142..20a7f95 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_5_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/ApplicationClient_5_0/nbproject/project.properties
@@ -26,7 +26,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule2_1_4/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule2_1_4/nbproject/project.properties
index 0a06740..1c753b3 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule2_1_4/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule2_1_4/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_1_4/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_1_4/nbproject/project.properties
index 3b52287..547ad80 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_1_4/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_1_4/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_5_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_5_0/nbproject/project.properties
index 38eb16c..7ca756d 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_5_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_5_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_6_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_6_0/nbproject/project.properties
index de5a47f..fc4cb72 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_6_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_6_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_7_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_7_0/nbproject/project.properties
index 755dbea..753a4b8 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_7_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EJBModule_7_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_1_4/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_1_4/nbproject/project.properties
index 11fb8b0..7cefff1 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_1_4/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_1_4/nbproject/project.properties
@@ -20,7 +20,7 @@
 jar.name=EnterpriseApplication_1_4.ear
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 meta.inf=src/conf
 no.dependencies=false
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_5_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_5_0/nbproject/project.properties
index 1a6c3cc..cf512db 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_5_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/EnterpriseApplication_5_0/nbproject/project.properties
@@ -20,7 +20,7 @@
 jar.name=EnterpriseApplication_5_0.ear
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 meta.inf=src/conf
 no.dependencies=false
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_1_4/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_1_4/nbproject/project.properties
index 0920257..899c5d8 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_1_4/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_1_4/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_5_0/nbproject/project.properties b/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_5_0/nbproject/project.properties
index de6467c..19750d8 100644
--- a/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_5_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbcore/test/unit/data/WebApplication_5_0/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbjarproject/nbproject/org-netbeans-modules-j2ee-ejbjarproject.sig b/enterprise/j2ee.ejbjarproject/nbproject/org-netbeans-modules-j2ee-ejbjarproject.sig
index a82c000..471a6f5 100644
--- a/enterprise/j2ee.ejbjarproject/nbproject/org-netbeans-modules-j2ee-ejbjarproject.sig
+++ b/enterprise/j2ee.ejbjarproject/nbproject/org-netbeans-modules-j2ee-ejbjarproject.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.70
+#Version 1.71
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/j2ee.ejbjarproject/src/org/netbeans/modules/j2ee/ejbjarproject/ProjectWebServicesSupportProvider.java b/enterprise/j2ee.ejbjarproject/src/org/netbeans/modules/j2ee/ejbjarproject/ProjectWebServicesSupportProvider.java
index f2563ae..e0e4566 100644
--- a/enterprise/j2ee.ejbjarproject/src/org/netbeans/modules/j2ee/ejbjarproject/ProjectWebServicesSupportProvider.java
+++ b/enterprise/j2ee.ejbjarproject/src/org/netbeans/modules/j2ee/ejbjarproject/ProjectWebServicesSupportProvider.java
@@ -45,7 +45,7 @@
 
     public WebServicesSupport findWebServicesSupport (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof EjbJarProject) {
+        if (project instanceof EjbJarProject) {
             return ((EjbJarProject) project).getAPIWebServicesSupport();
         }
         return null;
@@ -53,7 +53,7 @@
 
     public WebServicesClientSupport findWebServicesClientSupport (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof EjbJarProject) {
+        if (project instanceof EjbJarProject) {
             return ((EjbJarProject) project).getAPIWebServicesClientSupport();
         }
         return null;
@@ -61,7 +61,7 @@
     
     public JAXWSSupport findJAXWSSupport(FileObject file) {
         Project project = FileOwnerQuery.getOwner(file);
-        if (project != null && project instanceof EjbJarProject) {
+        if (project instanceof EjbJarProject) {
             return ((EjbJarProject) project).getAPIJAXWSSupport();
         }
         return null;
@@ -69,7 +69,7 @@
 
     public JAXWSClientSupport findJAXWSClientSupport(FileObject file) {
         Project project = FileOwnerQuery.getOwner(file);
-        if (project != null && project instanceof EjbJarProject) {
+        if (project instanceof EjbJarProject) {
             return ((EjbJarProject) project).getAPIJAXWSClientSupport();
         }
         return null;
diff --git a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/BrokenEJBModule1/nbproject/project.properties b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/BrokenEJBModule1/nbproject/project.properties
index b7ebe73..929b9b6 100644
--- a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/BrokenEJBModule1/nbproject/project.properties
+++ b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/BrokenEJBModule1/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule1/nbproject/project.properties b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule1/nbproject/project.properties
index 98a9a94..8df1c6e 100644
--- a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule1/nbproject/project.properties
+++ b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule1/nbproject/project.properties
@@ -22,7 +22,7 @@
 javac.classpath=${file.reference.jar0.jar}
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule_6_0/nbproject/project.properties b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule_6_0/nbproject/project.properties
index de5a47f..fc4cb72 100644
--- a/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule_6_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbjarproject/test/unit/data/projects/EJBModule_6_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbrefactoring/src/org/netbeans/modules/j2ee/ejbrefactoring/EjbRefactoringPlugin.java b/enterprise/j2ee.ejbrefactoring/src/org/netbeans/modules/j2ee/ejbrefactoring/EjbRefactoringPlugin.java
index 7c3588a..569b26a 100644
--- a/enterprise/j2ee.ejbrefactoring/src/org/netbeans/modules/j2ee/ejbrefactoring/EjbRefactoringPlugin.java
+++ b/enterprise/j2ee.ejbrefactoring/src/org/netbeans/modules/j2ee/ejbrefactoring/EjbRefactoringPlugin.java
@@ -254,7 +254,7 @@
                 //mkleint: see subprojectprovider for official contract, maybe classpath should be checked instead? see #210465
                 //in this case J2eeApplicationprovider might provide the same results though.
                 Object obj = project.getLookup().lookup(SubprojectProvider.class);
-                if ((obj != null) && (obj instanceof SubprojectProvider)) {
+                if (obj instanceof SubprojectProvider) {
                     Set<? extends Project> subprojects = ((SubprojectProvider) obj).getSubprojects();
                     if (subprojects.contains(affectedProject)) {
                         org.netbeans.modules.j2ee.api.ejbjar.EjbJar em = org.netbeans.modules.j2ee.api.ejbjar.EjbJar
diff --git a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_5_0/nbproject/project.properties b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_5_0/nbproject/project.properties
index 38eb16c..7ca756d 100644
--- a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_5_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_5_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_6_0/nbproject/project.properties b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_6_0/nbproject/project.properties
index de5a47f..fc4cb72 100644
--- a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_6_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_6_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_7_0/nbproject/project.properties b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_7_0/nbproject/project.properties
index 755dbea..753a4b8 100644
--- a/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_7_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbverification/test/unit/data/EJBModule_7_0/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbverification/test/unit/data/WebModule_6_0/nbproject/project.properties b/enterprise/j2ee.ejbverification/test/unit/data/WebModule_6_0/nbproject/project.properties
index b12f66c..6591103 100644
--- a/enterprise/j2ee.ejbverification/test/unit/data/WebModule_6_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbverification/test/unit/data/WebModule_6_0/nbproject/project.properties
@@ -46,7 +46,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.ejbverification/test/unit/data/WebModule_7_0/nbproject/project.properties b/enterprise/j2ee.ejbverification/test/unit/data/WebModule_7_0/nbproject/project.properties
index 5ff6fe4..d05e913 100644
--- a/enterprise/j2ee.ejbverification/test/unit/data/WebModule_7_0/nbproject/project.properties
+++ b/enterprise/j2ee.ejbverification/test/unit/data/WebModule_7_0/nbproject/project.properties
@@ -46,7 +46,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-ejb/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-ejb/nbproject/project.properties
index 8eadbe1..c85347a 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-ejb/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-ejb/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-war/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-war/nbproject/project.properties
index d27abfc..7968235 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-war/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/TestingEntApp-war/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/nbproject/project.properties
index 999166d..e113e1e 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/TestingEntApp/nbproject/project.properties
@@ -28,7 +28,7 @@
 jar.name=TestingEntApp.ear
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javadoc.author=false
 javadoc.encoding=
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsApp/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsApp/nbproject/project.properties
index d28ed5c..a1f1766 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsApp/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsApp/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsEJB/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsEJB/nbproject/project.properties
index 29b9404..5fe076f 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsEJB/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/EntityHintsEJB/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootEjb/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootEjb/nbproject/project.properties
index 08e328e..4270c2f 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootEjb/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootEjb/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootWar/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootWar/nbproject/project.properties
index 29c7e5d..6988f68 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootWar/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/MultiSrcRootWar/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestEJB1.4/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestEJB1.4/nbproject/project.properties
index e75ae74..06ff9ff 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestEJB1.4/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestEJB1.4/nbproject/project.properties
@@ -36,7 +36,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestWeb1.4/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestWeb1.4/nbproject/project.properties
index 1d52e70..197ec07 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestWeb1.4/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/NewFileWizardsTestWeb1.4/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMP/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMP/nbproject/project.properties
index 52572ee..25700e5 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMP/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMP/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMPRelationships/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMPRelationships/nbproject/project.properties
index e550630..43e0a41 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMPRelationships/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestCMPRelationships/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestGenerateEntity/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestGenerateEntity/nbproject/project.properties
index 224f392..f3f7107 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestGenerateEntity/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestGenerateEntity/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestPersistence/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestPersistence/nbproject/project.properties
index 1d9ae56..660027f 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestPersistence/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestPersistence/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestWebApp/nbproject/project.properties b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestWebApp/nbproject/project.properties
index 9316a1b..f0652aa 100644
--- a/enterprise/j2ee.kit/test/qa-functional/data/projects/TestWebApp/nbproject/project.properties
+++ b/enterprise/j2ee.kit/test/qa-functional/data/projects/TestWebApp/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/j2ee.sun.appsrv/nbproject/org-netbeans-modules-j2ee-sun-appsrv.sig b/enterprise/j2ee.sun.appsrv/nbproject/org-netbeans-modules-j2ee-sun-appsrv.sig
index 7a61056..ad34c58 100644
--- a/enterprise/j2ee.sun.appsrv/nbproject/org-netbeans-modules-j2ee-sun-appsrv.sig
+++ b/enterprise/j2ee.sun.appsrv/nbproject/org-netbeans-modules-j2ee-sun-appsrv.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.52.0
+#Version 1.53.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/j2ee.sun.appsrv/nbproject/project.properties b/enterprise/j2ee.sun.appsrv/nbproject/project.properties
index c45ee72..262f8c6 100644
--- a/enterprise/j2ee.sun.appsrv/nbproject/project.properties
+++ b/enterprise/j2ee.sun.appsrv/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 spec.version.base=1.54.0
 
diff --git a/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/api/restricted/ResourceUtils.java b/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/api/restricted/ResourceUtils.java
index b4faba2..696e6e7 100644
--- a/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/api/restricted/ResourceUtils.java
+++ b/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/api/restricted/ResourceUtils.java
@@ -1285,7 +1285,7 @@
 
     public static void createSampleDataSource(J2eeModuleProvider provider){
         DeploymentManager dm = getDeploymentManager(provider);
-        if ((dm != null) && (dm instanceof SunDeploymentManagerInterface)) {
+        if (dm instanceof SunDeploymentManagerInterface) {
             SunDeploymentManagerInterface eightDM = (SunDeploymentManagerInterface) dm;
             try {
                 ObjectName configObjName = new ObjectName(MAP_RESOURCES);
@@ -1833,6 +1833,7 @@
      * @param baseName     Resources file base name.
      * @deprecated Use {@link #createFile(ResourceConfigData, Resources, String)}
      */
+    @Deprecated
     public static void createFile(
             final File targetFolder, final Resources res, final String baseName
     ) {
@@ -1847,6 +1848,7 @@
      * @param baseName     Resources file base name.
      * @deprecated Use {@link #createFile(ResourceConfigData, Resources, String)}
      */
+    @Deprecated
     public static void createFile (
             final FileObject targetFolder, final Resources res, final String baseName
     ) {
diff --git a/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/ide/editors/ui/DDTablePanel.java b/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/ide/editors/ui/DDTablePanel.java
index c5bd57a..aee363d 100644
--- a/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/ide/editors/ui/DDTablePanel.java
+++ b/enterprise/j2ee.sun.appsrv/src/org/netbeans/modules/j2ee/sun/ide/editors/ui/DDTablePanel.java
@@ -272,8 +272,8 @@
 	    Component comp = cellR.getTableCellRendererComponent 
 				        (tab, c.getHeaderValue (), false, 
 					 false, -1, i);
-	    if ((comp != null) && (comp instanceof JComponent) 
-		 && i<toolTips.length) {
+	    if (comp instanceof JComponent
+			&& i < toolTips.length) {
     		JComponent jComp = (JComponent) comp;
     		jComp.setToolTipText (toolTips [i]);
 	    } 
diff --git a/enterprise/j2ee.sun.dd/nbproject/org-netbeans-modules-j2ee-sun-dd.sig b/enterprise/j2ee.sun.dd/nbproject/org-netbeans-modules-j2ee-sun-dd.sig
index 217ba67..8f95c48 100644
--- a/enterprise/j2ee.sun.dd/nbproject/org-netbeans-modules-j2ee-sun-dd.sig
+++ b/enterprise/j2ee.sun.dd/nbproject/org-netbeans-modules-j2ee-sun-dd.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50.0
+#Version 1.51.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/j2ee.sun.dd/nbproject/project.properties b/enterprise/j2ee.sun.dd/nbproject/project.properties
index 3a0cd1b..5b89fc0 100644
--- a/enterprise/j2ee.sun.dd/nbproject/project.properties
+++ b/enterprise/j2ee.sun.dd/nbproject/project.properties
@@ -18,6 +18,6 @@
 is.autoload=true
 spec.version.base=1.52.0
 
-javac.source=1.6
+javac.source=1.8
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/enterprise/j2ee.sun.dd/src/org/netbeans/modules/j2ee/sun/dd/api/DDProvider.java b/enterprise/j2ee.sun.dd/src/org/netbeans/modules/j2ee/sun/dd/api/DDProvider.java
index df652b1..1d44520 100644
--- a/enterprise/j2ee.sun.dd/src/org/netbeans/modules/j2ee/sun/dd/api/DDProvider.java
+++ b/enterprise/j2ee.sun.dd/src/org/netbeans/modules/j2ee/sun/dd/api/DDProvider.java
@@ -745,6 +745,7 @@
      * @return ASDDVersion for the current graph or null if it cannot be determined.
      * @deprecated
      */
+    @Deprecated
     public static ASDDVersion getASDDVersion(RootInterface rootDD) {
         return getASDDVersion(rootDD, null);
     }
diff --git a/enterprise/j2ee.sun.ddui/nbproject/org-netbeans-modules-j2ee-sun-ddui.sig b/enterprise/j2ee.sun.ddui/nbproject/org-netbeans-modules-j2ee-sun-ddui.sig
index a7ccc91..3778a3a 100644
--- a/enterprise/j2ee.sun.ddui/nbproject/org-netbeans-modules-j2ee-sun-ddui.sig
+++ b/enterprise/j2ee.sun.ddui/nbproject/org-netbeans-modules-j2ee-sun-ddui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.53.0
+#Version 1.54.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/j2ee.sun.ddui/nbproject/project.properties b/enterprise/j2ee.sun.ddui/nbproject/project.properties
index 8e43f67..883b22d 100644
--- a/enterprise/j2ee.sun.ddui/nbproject/project.properties
+++ b/enterprise/j2ee.sun.ddui/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 ###is.autoload=true
 javadoc.arch=${basedir}/arch.xml
 
diff --git a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/CharsetMapping.java b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/CharsetMapping.java
index 587edd2..f6bd7e9 100644
--- a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/CharsetMapping.java
+++ b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/CharsetMapping.java
@@ -331,7 +331,7 @@
 	public static final Integer CHARSET_ALIAS_SELECTION = 2;
 
 	private static Integer displayOption = CHARSET_ALIAS_ASIDE;
-	private static java.beans.PropertyChangeSupport propSupport = new PropertyChangeSupport(CharsetMapping.class);;
+	private static java.beans.PropertyChangeSupport propSupport = new PropertyChangeSupport(CharsetMapping.class);
 	
 	public static void addPropertyChangeListener(PropertyChangeListener listener) {
 		propSupport.addPropertyChangeListener(listener);
diff --git a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/SunONEDeploymentConfiguration.java b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/SunONEDeploymentConfiguration.java
index 01ca3cc..aa3c32c 100644
--- a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/SunONEDeploymentConfiguration.java
+++ b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/SunONEDeploymentConfiguration.java
@@ -119,15 +119,16 @@
         super(module, J2eeModuleHelper.getWsModuleHelper(webServerDDName), version);
     }
 
-   /**
-     * Create an instance of SunONEDeploymentConfiguration for GF V2
-     * and earlier servers.
-     *
-     * @param module  J2eeModule instance for the project represented by this config.
-     * @param mySdmi  Sun deployment manager.
-     * @deprecated Use constructor with {@link GlassFishVersion}.
-     * @throws org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException
-     */
+    /**
+      * Create an instance of SunONEDeploymentConfiguration for GF V2
+      * and earlier servers.
+      *
+      * @param module  J2eeModule instance for the project represented by this config.
+      * @param mySdmi  Sun deployment manager.
+      * @deprecated Use constructor with {@link GlassFishVersion}.
+      * @throws org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException
+      */
+    @Deprecated
     public SunONEDeploymentConfiguration(
             final J2eeModule module, final SunDeploymentManagerInterface mySdmi
     ) throws ConfigurationException {
@@ -143,6 +144,7 @@
      * @deprecated Use constructor with {@link GlassFishVersion}.
      * @throws org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException
      */
+    @Deprecated
     public SunONEDeploymentConfiguration(
             final J2eeModule module, final String webServerDDName
     ) throws ConfigurationException {
diff --git a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/templates/SunDDWizardIterator.java b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/templates/SunDDWizardIterator.java
index d5489fd..0db2bf3 100644
--- a/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/templates/SunDDWizardIterator.java
+++ b/enterprise/j2ee.sun.ddui/src/org/netbeans/modules/j2ee/sun/share/configbean/templates/SunDDWizardIterator.java
@@ -240,7 +240,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         
diff --git a/enterprise/j2eeapis/nbproject/org-netbeans-modules-j2eeapis.sig b/enterprise/j2eeapis/nbproject/org-netbeans-modules-j2eeapis.sig
index ec414ff..d5ccada 100644
--- a/enterprise/j2eeapis/nbproject/org-netbeans-modules-j2eeapis.sig
+++ b/enterprise/j2eeapis/nbproject/org-netbeans-modules-j2eeapis.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
diff --git a/enterprise/j2eeserver/nbproject/org-netbeans-modules-j2eeserver.sig b/enterprise/j2eeserver/nbproject/org-netbeans-modules-j2eeserver.sig
index 53bea7a..d5cc466 100644
--- a/enterprise/j2eeserver/nbproject/org-netbeans-modules-j2eeserver.sig
+++ b/enterprise/j2eeserver/nbproject/org-netbeans-modules-j2eeserver.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.128.0
+#Version 1.129.0
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeApplicationAccessor.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeApplicationAccessor.java
index 3eabae8..ae8d0fd 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeApplicationAccessor.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeApplicationAccessor.java
@@ -63,6 +63,7 @@
      * @return J2eeApplication
      * @deprecated use {@link #createJ2eeApplication(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationImplementation2)}
      */
+    @Deprecated
     public abstract J2eeApplication createJ2eeApplication(J2eeApplicationImplementation impl);
 
     /**
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeModuleAccessor.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeModuleAccessor.java
index c319be7..4aa4edb 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeModuleAccessor.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/config/J2eeModuleAccessor.java
@@ -65,6 +65,7 @@
      * @return J2eeModule for the J2eeModuleImplementation.
      * @deprecated use {@link #createJ2eeModule(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleImplementation2)}
      */
+    @Deprecated
     public abstract J2eeModule createJ2eeModule(J2eeModuleImplementation impl);
 
     /**
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/Deployment.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/Deployment.java
index b995e07..2e21fd5 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/Deployment.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/Deployment.java
@@ -91,6 +91,7 @@
      * @return complete URL to be displayed in browser (server part plus the client module and/or client part provided as a parameter)
      * @deprecated Should use {@link Deployment#deploy(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider, org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.Mode, java.lang.String, java.lang.String, boolean) } instead
      */
+    @Deprecated
     public String deploy (J2eeModuleProvider jmp, boolean debug, String clientModuleUrl, String clientUrlPart, boolean forceRedeploy) throws DeploymentException {
         return deploy(jmp, debug ? Mode.DEBUG : Mode.RUN, clientModuleUrl, clientUrlPart, forceRedeploy, null);
     }
@@ -110,6 +111,7 @@
     /**
      * @deprecated Should use {@link Deployment#deploy(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider, org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.Mode, java.lang.String, java.lang.String, boolean, org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.Logger) } instead
      */
+    @Deprecated
     public String deploy (J2eeModuleProvider jmp, boolean debug, String clientModuleUrl, String clientUrlPart, boolean forceRedeploy, Logger logger) throws DeploymentException {
         return deploy(jmp, debug ? Mode.DEBUG : Mode.RUN, clientModuleUrl, clientUrlPart, forceRedeploy, logger);
     }
@@ -379,6 +381,7 @@
      * @since 1.6
      * @deprecated {@link #getServerInstanceIDs(java.util.Collection)}
      */
+    @Deprecated
     public String[] getServerInstanceIDs(Object[] moduleTypes) {
         return getServerInstanceIDs(moduleTypes, (String) null, null);
     }
@@ -409,6 +412,7 @@
      * @since 1.6
      * @deprecated use {@link #getServerInstanceIDs(java.util.Collection, org.netbeans.modules.j2ee.deployment.devmodules.api.Profile)}
      */
+    @Deprecated
     public String[] getServerInstanceIDs(Object[] moduleTypes, String specVersion) {
         return getServerInstanceIDs(moduleTypes, specVersion, null);
     }
@@ -440,6 +444,7 @@
      * @since 1.6
      * @deprecated use {@link #getServerInstanceIDs(java.util.Collection, org.netbeans.modules.j2ee.deployment.capabilities.Profile, java.lang.String[]) }
      */
+    @Deprecated
     public String[] getServerInstanceIDs(Object[] moduleTypes, String specVersion, String[] tools) {
         Profile profile = specVersion != null ? Profile.fromPropertiesString(specVersion) : null;
         if (profile == null && specVersion != null) {
@@ -516,6 +521,7 @@
      *             instance does not exist or not defined
      * @deprecated use <code>getServerInstance(serverInstanceID).getDisplayName()</code>
      */
+    @Deprecated
     public String getServerInstanceDisplayName (String id) {
         ServerInstance si = ServerRegistry.getInstance().getServerInstance(id);
         if (si != null) {
@@ -533,6 +539,7 @@
      *             instance does not exist
      * @deprecated use <code>getServerInstance(serverInstanceID).getServerID()</code>
      */
+    @Deprecated
     public String getServerID (String instanceId) {
         ServerInstance si = ServerRegistry.getInstance().getServerInstance(instanceId);
         if (si != null) {
@@ -555,6 +562,7 @@
      *             of appropriate server instance. Method will be removed in
      *             near future. See issue 83934.
      */
+    @Deprecated
     public String getDefaultServerInstanceID () {
         return null;
     }
@@ -628,6 +636,7 @@
      * @since 1.5
      * @deprecated use <code>getServerInstance(serverInstanceID).getJ2eePlatform()</code>
      */
+    @Deprecated
     public J2eePlatform getJ2eePlatform(String serverInstanceID) {
         ServerInstance serInst = ServerRegistry.getInstance().getServerInstance(serverInstanceID);
         if (serInst == null) return null;
@@ -669,6 +678,7 @@
      * @since 1.32
      * @deprecated use <code>getServerInstance(serverInstanceID).isRunning()</code>
      */
+    @Deprecated
     public boolean isRunning(String serverInstanceID) {
         Parameters.notNull("serverInstanceID", serverInstanceID); // NOI18N
         ServerInstance serverInstance = ServerRegistry.getInstance().getServerInstance(serverInstanceID);
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eeModule.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eeModule.java
index 0fea83f..aff9693 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eeModule.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eeModule.java
@@ -58,30 +58,35 @@
      * The module is an EAR archive.
      * @deprecated use {@link Type#EAR}
      */
+    @Deprecated
     public static final Object EAR = ModuleType.EAR;
     
     /**
      * The module is an Web Application archive.
      * @deprecated use {@link Type#WAR}
      */
+    @Deprecated
     public static final Object WAR = ModuleType.WAR;
 
     /**
      * The module is an Enterprise Java Bean archive.
      * @deprecated use {@link Type#EJB}
      */
+    @Deprecated
     public static final Object EJB = ModuleType.EJB;
 
     /**
      * The module is an Connector archive.
      * @deprecated use {@link Type#RAR}
      */
+    @Deprecated
     public static final Object CONN = ModuleType.RAR;
 
     /**
      * The module is an Client Application archive.
      * @deprecated use {@link Type#CAR}
      */
+    @Deprecated
     public static final Object CLIENT = ModuleType.CAR;
     
     /**
@@ -89,12 +94,14 @@
      * @since 1.5
      * @deprecated use {@link Profile#J2EE_13}
      */
+    @Deprecated
     public static final String J2EE_13 = "1.3"; //NOI18N
     /**
      * J2EE specification version 1.4
      * @since 1.5
      * @deprecated use {@link Profile#J2EE_14}
      */
+    @Deprecated
     public static final String J2EE_14 = "1.4"; //NOI18N
     /**
      *
@@ -103,6 +110,7 @@
      * @since 1.6
      * @deprecated use {@link Profile#JAVA_EE_5}
      */
+    @Deprecated
     public static final String JAVA_EE_5 = "1.5"; // NOI18N
     
     public static final String APP_XML = "META-INF/application.xml";
@@ -181,6 +189,7 @@
      * @deprecated use {@link #getType()}
      */
     @NonNull
+    @Deprecated
     public Object getModuleType() {
         if (impl instanceof J2eeModuleImplementation2) {
             return ((J2eeModuleImplementation2) impl).getModuleType().getJsrType();
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eePlatform.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eePlatform.java
index 9d23e22..a4037a5 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eePlatform.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/J2eePlatform.java
@@ -335,6 +335,7 @@
      * @since 1.16
      * @deprecated {@link #getLookup()} should be used to obtain tool specifics
      */
+    @Deprecated
     public String getToolProperty(String toolName, String propertyName) {
         return impl.getToolProperty(toolName, propertyName);
     }
@@ -348,6 +349,7 @@
      *         <code>false</code> otherwise.
      * @deprecated {@link #getLookup()} should be used to obtain tool specifics
      */
+    @Deprecated
     public boolean isToolSupported(String toolName) {
         return impl.isToolSupported(toolName);
     }
@@ -390,6 +392,7 @@
      * @deprecated use {@link #getServerHome()} or {@link #getDomainHome()}
      *             or {@link #getMiddlewareHome()}
      */
+    @Deprecated
     public File[] getPlatformRoots() {
         return impl.getPlatformRoots();
     }
@@ -457,6 +460,7 @@
      * @return list of supported J2EE specification versions.
      * @deprecated use {@link #getSupportedProfiles()}
      */
+    @Deprecated
     public Set/*<String>*/ getSupportedSpecVersions() {
         boolean assertsEnabled = false;
         assert assertsEnabled = true;
@@ -477,6 +481,7 @@
      * @return list of supported J2EE specification versions.
      * @deprecated use {@link #getSupportedProfiles(java.lang.Object)}
      */
+    @Deprecated
     public Set<String> getSupportedSpecVersions(Object moduleType) {
         boolean assertsEnabled = false;
         assert assertsEnabled = true;
@@ -531,6 +536,7 @@
      * @return list of supported J2EE module types.
      * @deprecated use {@link #getSupportedTypes()}
      */
+    @Deprecated
     public Set getSupportedModuleTypes() {
         boolean assertsEnabled = false;
         assert assertsEnabled = true;
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/ServerManager.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/ServerManager.java
index 1fdc80f..bf7594b 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/ServerManager.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/ServerManager.java
@@ -54,6 +54,7 @@
      *         event dispatch thread.
      * @deprecated use {@link org.netbeans.api.server.CommonServerUIs#showCustomizer} instead
      */
+    @Deprecated
     public static void showCustomizer(String serverInstanceID) {
         // bridge to new infrastructure (common server)
         ServerInstance bridgingInstance = CommonServerBridge.getCommonInstance(serverInstanceID);
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeApplicationImplementation.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeApplicationImplementation.java
index 3e2c113..4f8c425 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeApplicationImplementation.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeApplicationImplementation.java
@@ -33,6 +33,7 @@
  * @since 1.23
  * @deprecated implement {@link J2eeApplicationImplementation2}
  */
+@Deprecated
 public interface J2eeApplicationImplementation extends J2eeModuleImplementation {
 
     /**
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleFactory.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleFactory.java
index 786459d..4d400e1 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleFactory.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleFactory.java
@@ -48,6 +48,7 @@
      * @return J2eeModule API instance.
      * @deprecated use {@link #createJ2eeApplication(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationImplementation2)}
      */
+    @Deprecated
     public static J2eeModule createJ2eeModule(J2eeModuleImplementation impl) {
         if (impl == null) {
             throw new NullPointerException();
@@ -77,6 +78,7 @@
      * @return J2eJ2eeApplicationI instance.
      * @deprecated use {@link #createJ2eeApplication(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationImplementation2)}
      */
+    @Deprecated
     public static J2eeApplication createJ2eeApplication(J2eeApplicationImplementation impl) {
         if (impl == null) {
             throw new NullPointerException();
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleImplementation.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleImplementation.java
index 7c7d535..5b1a62c 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleImplementation.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleImplementation.java
@@ -30,6 +30,7 @@
  * @since 1.23
  * @deprecated implement {@link J2eeModuleImplementation2}
  */
+@Deprecated
 public interface J2eeModuleImplementation extends J2eeModuleBase {
     
     /** 
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleProvider.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleProvider.java
index c527b37..ab72ebb 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleProvider.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/spi/J2eeModuleProvider.java
@@ -198,6 +198,7 @@
      * @deprecated use {@link ConfigSupport#getDatasources()}
      *             on {@link #getConfigSupport()} result
      */
+    @Deprecated
     public Set<Datasource> getModuleDatasources() throws ConfigurationException {
         Set<Datasource> projectDS = getConfigSupport().getDatasources();
         return projectDS;
@@ -264,6 +265,7 @@
      * @since 1.15
      * @deprecated Nobody should use this method. Being an API is a mistake.
      */
+    @Deprecated
     public void deployDatasources() throws ConfigurationException, DatasourceAlreadyExistsException {
         ServerInstance si = ServerRegistry.getInstance ().getServerInstance (getServerInstanceID ());
         if (si != null) {
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/ServerFileDistributor.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/ServerFileDistributor.java
index 65db22f..d2acb2a 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/ServerFileDistributor.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/ServerFileDistributor.java
@@ -594,6 +594,7 @@
          * @param relativePath
          * @deprecated use {@link #record(java.io.File, java.lang.String)}
          */
+        @Deprecated
         private void record(String relativePath) {
             record(null, relativePath);
         }
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/api/InstanceProperties.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/api/InstanceProperties.java
index dec5fa0..523bbed 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/api/InstanceProperties.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/api/InstanceProperties.java
@@ -145,7 +145,8 @@
      *            registered.
      *
      * @deprecated use the factory method with displayName parameter.
-     */    
+     */
+    @Deprecated
     public static InstanceProperties createInstanceProperties(
             String url, String username, String password) throws InstanceCreationException {
         return createInstanceProperties(url, username, password, null);
@@ -337,6 +338,7 @@
      * @deprecated without replacement - this method should not be used as there
      * is no api use case for it
      */
+    @Deprecated
     public abstract DeploymentManager getDeploymentManager();
     
     /**
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/J2eePlatformImpl.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/J2eePlatformImpl.java
index 7887051..90f7ca8 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/J2eePlatformImpl.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/J2eePlatformImpl.java
@@ -122,6 +122,7 @@
      *         <code>false</code> otherwise.
      * @deprecated {@link #getLookup()} should be used to obtain tool specifics
      */
+    @Deprecated
     public abstract boolean isToolSupported(String toolName);
     
     /**
@@ -132,6 +133,7 @@
      * @return list of supported J2EE specification versions.
      * @deprecated override {@link #getSupportedProfiles()} and {@link #getSupportedProfiles(java.lang.Object)}
      */
+    @Deprecated
     public Set<String> getSupportedSpecVersions() {
         return Collections.emptySet();
     }
@@ -151,6 +153,7 @@
      * @return list of supported J2EE specification versions.
      * @deprecated override {@link #getSupportedProfiles()} and {@link #getSupportedProfiles(java.lang.Object)}
      */
+    @Deprecated
     public Set <String> getSupportedSpecVersions(Object moduleType) {
         return getSupportedSpecVersions();
     }
@@ -209,6 +212,7 @@
      * @return list of supported J2EE module types.
      * @deprecated override {@link #getSupportedTypes()}
      */
+    @Deprecated
     public Set getSupportedModuleTypes() {
         return Collections.emptySet();
     }
@@ -304,6 +308,7 @@
      * @since 1.16
      * @deprecated {@link #getLookup()} should be used to obtain tool specifics
      */
+    @Deprecated
     public String getToolProperty(String toolName, String propertyName) {
         return null;
     }
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/RegistryNodeFactory.java b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/RegistryNodeFactory.java
index e807b3b..922a97e 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/RegistryNodeFactory.java
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/plugins/spi/RegistryNodeFactory.java
@@ -41,6 +41,7 @@
  * @author  George Finklang
  * @deprecated use the Common Server SPI for registering nodes
  */
+@Deprecated
 public interface RegistryNodeFactory {
 
      /**
diff --git a/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/AbstractIterator.java b/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/AbstractIterator.java
index 281347c..0f1b522 100644
--- a/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/AbstractIterator.java
+++ b/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/AbstractIterator.java
@@ -77,7 +77,7 @@
         // Creating steps.
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/ConstraintIterator.java b/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/ConstraintIterator.java
index 3e5a6d2..5a0b4a1 100644
--- a/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/ConstraintIterator.java
+++ b/enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/ConstraintIterator.java
@@ -110,7 +110,7 @@
         // Creating steps.
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/javaee.project/nbproject/org-netbeans-modules-javaee-project.sig b/enterprise/javaee.project/nbproject/org-netbeans-modules-javaee-project.sig
index f23cf2c..c2f58c2 100644
--- a/enterprise/javaee.project/nbproject/org-netbeans-modules-javaee-project.sig
+++ b/enterprise/javaee.project/nbproject/org-netbeans-modules-javaee-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.36
+#Version 1.37
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/dd/ear/ApplicationXmlWizardIterator.java b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/dd/ear/ApplicationXmlWizardIterator.java
index 26ba476..b9d4e4a 100644
--- a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/dd/ear/ApplicationXmlWizardIterator.java
+++ b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/dd/ear/ApplicationXmlWizardIterator.java
@@ -168,7 +168,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/javaee.resources/nbproject/org-netbeans-modules-javaee-resources.sig b/enterprise/javaee.resources/nbproject/org-netbeans-modules-javaee-resources.sig
index 095aa68..e2f9a85 100644
--- a/enterprise/javaee.resources/nbproject/org-netbeans-modules-javaee-resources.sig
+++ b/enterprise/javaee.resources/nbproject/org-netbeans-modules-javaee-resources.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/javaee.resources/nbproject/project.properties b/enterprise/javaee.resources/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/enterprise/javaee.resources/nbproject/project.properties
+++ b/enterprise/javaee.resources/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/javaee.resources/test/unit/data/projects/EJBModule53/nbproject/project.properties b/enterprise/javaee.resources/test/unit/data/projects/EJBModule53/nbproject/project.properties
index 58a2058..7afddb8 100644
--- a/enterprise/javaee.resources/test/unit/data/projects/EJBModule53/nbproject/project.properties
+++ b/enterprise/javaee.resources/test/unit/data/projects/EJBModule53/nbproject/project.properties
@@ -41,7 +41,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/javaee.specs.support/nbproject/org-netbeans-modules-javaee-specs-support.sig b/enterprise/javaee.specs.support/nbproject/org-netbeans-modules-javaee-specs-support.sig
index 0f50f1b..a8b9562 100644
--- a/enterprise/javaee.specs.support/nbproject/org-netbeans-modules-javaee-specs-support.sig
+++ b/enterprise/javaee.specs.support/nbproject/org-netbeans-modules-javaee-specs-support.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/javaee.specs.support/nbproject/project.properties b/enterprise/javaee.specs.support/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/enterprise/javaee.specs.support/nbproject/project.properties
+++ b/enterprise/javaee.specs.support/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossDataSourceRefModifier.java b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossDataSourceRefModifier.java
index cbccb1e..1f7bfe4 100644
--- a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossDataSourceRefModifier.java
+++ b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossDataSourceRefModifier.java
@@ -188,6 +188,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String resRefName, Map beans, String jndiName) {
 
         assert(beans.size() > 0);
@@ -209,6 +210,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvResReference(Jboss modifiedJboss, String resRefName, Map beans, String jndiName) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossEjbRefModifier.java b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossEjbRefModifier.java
index 5386824..ac748e5 100644
--- a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossEjbRefModifier.java
+++ b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossEjbRefModifier.java
@@ -189,6 +189,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String ejbRefName, Map beans) {
 
         assert(beans.size() > 0);
@@ -209,6 +210,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvEjbReference(Jboss modifiedJboss, String ejbRefName, Map beans) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossMsgDestRefModifier.java b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossMsgDestRefModifier.java
index 95ce220..1c54b83 100644
--- a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossMsgDestRefModifier.java
+++ b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/config/JBossMsgDestRefModifier.java
@@ -195,6 +195,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     static void modifyMsgDrv(Jboss modifiedJboss, String msgDestRefName, Map beans, String destPrefix) {
 
         assert(beans.size() > 0);
@@ -215,6 +216,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     private static void addMsgDrvMsgDestReference(Jboss modifiedJboss, String msgDestRefName, Map beans, String destPrefix) {
 
         List/*<Entity>*/ msgdrvsWithoutReference = new LinkedList();
diff --git a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/ide/WildflyKiller.java b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/ide/WildflyKiller.java
index 63b176c..b22acc4 100644
--- a/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/ide/WildflyKiller.java
+++ b/enterprise/javaee.wildfly/src/org/netbeans/modules/javaee/wildfly/ide/WildflyKiller.java
@@ -72,14 +72,14 @@
 
     private boolean killLinux(Runtime rt) {
         try {
-            String getPidCommand = getJps() + " | egrep -i \"jboss-modules\" | awk '{ print $1; }'";
+            String getPidCommand = getJps() + " | grep -i \"jboss-modules\" | awk '{ print $1; }'";
             //get a jstack of all the processes
             Process process = rt.exec(new String[]{"/bin/sh", "-c", getPidCommand});
             InputStream in = process.getInputStream();
             String processTable = readString(in);
             readString(process.getErrorStream());
             if (!processTable.isEmpty()) {
-                readString(rt.exec(new String[]{"/bin/sh", "-c", getJps() + " | egrep -i \"jboss-modules\" | awk '{ print $1; }' | xargs --no-run-if-empty kill -9"}).getInputStream());
+                readString(rt.exec(new String[]{"/bin/sh", "-c", getJps() + " | grep -i \"jboss-modules\" | awk '{ print $1; }' | xargs --no-run-if-empty kill -9"}).getInputStream());
                 errorProcessTable = processTable;
             }
             long end = System.currentTimeMillis() + 5000;
diff --git a/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties b/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
index 95e1861..86d30a5 100644
--- a/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
+++ b/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4EjbTest/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties b/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
index f65acc9..86680bc 100644
--- a/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
+++ b/enterprise/javaee.wildfly/test/qa-functional/data/JBoss4WebTest/nbproject/project.properties
@@ -37,7 +37,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/javaee.wildfly/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties b/enterprise/javaee.wildfly/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
index 2086957..bfb0bb0 100644
--- a/enterprise/javaee.wildfly/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
+++ b/enterprise/javaee.wildfly/test/qa-functional/data/TestDeployDebugWebApp/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/javaee7.api/nbproject/project.properties b/enterprise/javaee7.api/nbproject/project.properties
index 177bedf..71b7d28 100644
--- a/enterprise/javaee7.api/nbproject/project.properties
+++ b/enterprise/javaee7.api/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 release.external/javaee-api-7.0.jar=modules/ext/javaee-api-7.0.jar
 release.external/javaee-web-api-7.0.jar=modules/ext/javaee-web-api-7.0.jar
 release.external/javax.annotation-api-1.2.jar=modules/ext/javaee7-endorsed/javax.annotation-api.jar
diff --git a/enterprise/jellytools.enterprise/nbproject/org-netbeans-modules-jellytools-enterprise.sig b/enterprise/jellytools.enterprise/nbproject/org-netbeans-modules-jellytools-enterprise.sig
index e2ed558..74982cf 100644
--- a/enterprise/jellytools.enterprise/nbproject/org-netbeans-modules-jellytools-enterprise.sig
+++ b/enterprise/jellytools.enterprise/nbproject/org-netbeans-modules-jellytools-enterprise.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.43
+#Version 3.44
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/jellytools.enterprise/nbproject/project.properties b/enterprise/jellytools.enterprise/nbproject/project.properties
index 6856613..10b7b2b 100644
--- a/enterprise/jellytools.enterprise/nbproject/project.properties
+++ b/enterprise/jellytools.enterprise/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stable.includes=\
diff --git a/enterprise/jsp.lexer/nbproject/org-netbeans-modules-jsp-lexer.sig b/enterprise/jsp.lexer/nbproject/org-netbeans-modules-jsp-lexer.sig
index 2bb50eb..0a683ce 100644
--- a/enterprise/jsp.lexer/nbproject/org-netbeans-modules-jsp-lexer.sig
+++ b/enterprise/jsp.lexer/nbproject/org-netbeans-modules-jsp-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/jsp.lexer/nbproject/project.properties b/enterprise/jsp.lexer/nbproject/project.properties
index 33ce789..2f08fe4 100644
--- a/enterprise/jsp.lexer/nbproject/project.properties
+++ b/enterprise/jsp.lexer/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 test.unit.cp.extra=\
 ${nb_all}/lexer/build/test/unit/classes\
diff --git a/enterprise/libs.amazon/nbproject/org-netbeans-libs-amazon.sig b/enterprise/libs.amazon/nbproject/org-netbeans-libs-amazon.sig
index 61754fe..d34843d 100644
--- a/enterprise/libs.amazon/nbproject/org-netbeans-libs-amazon.sig
+++ b/enterprise/libs.amazon/nbproject/org-netbeans-libs-amazon.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public com.amazonaws.AbortedException
 cons public init()
diff --git a/enterprise/libs.amazon/nbproject/project.properties b/enterprise/libs.amazon/nbproject/project.properties
index 44c2cd1..c4a420c 100644
--- a/enterprise/libs.amazon/nbproject/project.properties
+++ b/enterprise/libs.amazon/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 sigtest.gen.fail.on.error=false
 release.external/joda-time-2.8.1.jar=modules/ext/aws-sdk/joda-time-2.8.1.jar
 release.external/aws-java-sdk-elasticbeanstalk-1.11.569.jar=modules/ext/aws-sdk/aws-java-sdk-elasticbeanstalk-1.11.569.jar
diff --git a/enterprise/libs.elimpl/nbproject/org-netbeans-libs-elimpl.sig b/enterprise/libs.elimpl/nbproject/org-netbeans-libs-elimpl.sig
index ba2237d..5bdad63 100644
--- a/enterprise/libs.elimpl/nbproject/org-netbeans-libs-elimpl.sig
+++ b/enterprise/libs.elimpl/nbproject/org-netbeans-libs-elimpl.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.36.0
+#Version 1.37.0
 
 CLSS public com.sun.el.ExpressionFactoryImpl
 cons public init()
diff --git a/enterprise/libs.elimpl/nbproject/project.properties b/enterprise/libs.elimpl/nbproject/project.properties
index 16d5921..6a07c2d 100644
--- a/enterprise/libs.elimpl/nbproject/project.properties
+++ b/enterprise/libs.elimpl/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 release.external/el-impl-3.0-b07.jar=modules/ext/el-impl.jar
 spec.version.base=1.38.0
diff --git a/enterprise/libs.glassfish_logging/nbproject/org-netbeans-libs-glassfish_logging.sig b/enterprise/libs.glassfish_logging/nbproject/org-netbeans-libs-glassfish_logging.sig
index 903e4dd..5600d3d 100644
--- a/enterprise/libs.glassfish_logging/nbproject/org-netbeans-libs-glassfish_logging.sig
+++ b/enterprise/libs.glassfish_logging/nbproject/org-netbeans-libs-glassfish_logging.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42.0
+#Version 1.43.0
 
 CLSS public abstract interface com.sun.org.apache.commons.logging.Log
 meth public abstract boolean isDebugEnabled()
diff --git a/enterprise/libs.glassfish_logging/nbproject/project.properties b/enterprise/libs.glassfish_logging/nbproject/project.properties
index c28891d..e85a1f2 100644
--- a/enterprise/libs.glassfish_logging/nbproject/project.properties
+++ b/enterprise/libs.glassfish_logging/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 release.external/logging-api-1.0.4.jar=modules/ext/logging-api-1.0.4.jar
 
 spec.version.base=1.44.0
diff --git a/enterprise/libs.jackson/nbproject/org-netbeans-libs-jackson.sig b/enterprise/libs.jackson/nbproject/org-netbeans-libs-jackson.sig
index a401f9f..1951280 100644
--- a/enterprise/libs.jackson/nbproject/org-netbeans-libs-jackson.sig
+++ b/enterprise/libs.jackson/nbproject/org-netbeans-libs-jackson.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.14
+#Version 2.15
 
 CLSS public abstract interface !annotation com.fasterxml.jackson.annotation.JacksonAnnotation
  anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
diff --git a/enterprise/libs.jackson/nbproject/project.properties b/enterprise/libs.jackson/nbproject/project.properties
index 23a3dcf..af976b1 100644
--- a/enterprise/libs.jackson/nbproject/project.properties
+++ b/enterprise/libs.jackson/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 sigtest.gen.fail.on.error=false
 release.external/jackson-annotations-2.12.0.jar=modules/ext/jackson/jackson-annotations-2.12.0.jar
 release.external/jackson-core-2.12.0.jar=modules/ext/jackson/jackson-core-2.12.0.jar
diff --git a/enterprise/libs.jstl/nbproject/project.properties b/enterprise/libs.jstl/nbproject/project.properties
index 703605b..919da1f 100644
--- a/enterprise/libs.jstl/nbproject/project.properties
+++ b/enterprise/libs.jstl/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 release.external/javax.servlet.jsp.jstl-api-1.2.1.jar=modules/ext/jstl-api.jar
 release.external/javax.servlet.jsp.jstl-1.2.2.jar=modules/ext/jstl-impl.jar
 
diff --git a/enterprise/maven.j2ee/nbproject/org-netbeans-modules-maven-j2ee.sig b/enterprise/maven.j2ee/nbproject/org-netbeans-modules-maven-j2ee.sig
index 49eb5b3..645a59a 100644
--- a/enterprise/maven.j2ee/nbproject/org-netbeans-modules-maven-j2ee.sig
+++ b/enterprise/maven.j2ee/nbproject/org-netbeans-modules-maven-j2ee.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.78
+#Version 1.79
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ear/EarImpl.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ear/EarImpl.java
index 7caf1a5..0d6a9db 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ear/EarImpl.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ear/EarImpl.java
@@ -388,6 +388,10 @@
         List<Dependency> deps = mp.getRuntimeDependencies();
         String fileNameMapping = PluginPropertyUtils.getPluginProperty(project, Constants.GROUP_APACHE_PLUGINS, Constants.PLUGIN_EAR, "fileNameMapping", "ear", null); //NOI18N
         if (fileNameMapping == null) {
+            // EAR maven plugin property was renamed from fileNameMapping to outputFileNameMapping in version 3.0.0
+            fileNameMapping = PluginPropertyUtils.getPluginProperty(project, Constants.GROUP_APACHE_PLUGINS, Constants.PLUGIN_EAR, "outputFileNameMapping", "ear", null); //NOI18N
+        }
+        if (fileNameMapping == null) {
             fileNameMapping = "standard"; //NOI18N
         }
 
@@ -719,7 +723,7 @@
 
     private MavenModule[] checkConfiguration(MavenProject prj, Object conf) {
         List<MavenModule> toRet = new ArrayList<MavenModule>();
-        if (conf != null && conf instanceof Xpp3Dom) {
+        if (conf instanceof Xpp3Dom) {
             ExpressionEvaluator eval = PluginPropertyUtils.createEvaluator(project);
             Xpp3Dom dom = (Xpp3Dom) conf;
             Xpp3Dom modules = dom.getChild("modules"); //NOI18N
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebCopyOnSave.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebCopyOnSave.java
index 001e48c..9d98ee4 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebCopyOnSave.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebCopyOnSave.java
@@ -95,7 +95,7 @@
 
     private WebModule getWebModule() {
         final J2eeModuleProvider moduleProvider = getJ2eeModuleProvider();
-        if (moduleProvider != null && moduleProvider instanceof WebModuleProviderImpl) {
+        if (moduleProvider instanceof WebModuleProviderImpl) {
             return ((WebModuleProviderImpl) moduleProvider).findWebModule(getProject().getProjectDirectory());
         }
         return null;
diff --git a/enterprise/maven.jaxws/nbproject/project.properties b/enterprise/maven.jaxws/nbproject/project.properties
index 545a6b9..d9eb0f6 100644
--- a/enterprise/maven.jaxws/nbproject/project.properties
+++ b/enterprise/maven.jaxws/nbproject/project.properties
@@ -17,4 +17,4 @@
 
 is.eager=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
diff --git a/enterprise/micronaut/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImpl.java b/enterprise/micronaut/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImpl.java
index c8f3ea4..629141e 100644
--- a/enterprise/micronaut/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImpl.java
+++ b/enterprise/micronaut/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImpl.java
@@ -55,7 +55,12 @@
  *
  * @author sdedic
  */
-@ProjectServiceProvider(projectType = NbGradleProject.GRADLE_PLUGIN_TYPE + "/io.micronaut.application", service=ProjectArtifactsImplementation.class)
+@ProjectServiceProvider(service=ProjectArtifactsImplementation.class,
+        projectType = {
+            NbGradleProject.GRADLE_PLUGIN_TYPE + "/io.micronaut.application",
+            NbGradleProject.GRADLE_PLUGIN_TYPE + "/org.graalvm.buildtools.native"
+        }
+)
 public class MicronautGradleArtifactsImpl implements ProjectArtifactsImplementation<MicronautGradleArtifactsImpl.R>{
     private static final String EXTENSION_GRAAL_VM_NATIVE = "graalVmNative";
     private static final String TASK_NATIVE_COMPILE = "nativeCompile";
diff --git a/enterprise/micronaut/src/org/netbeans/modules/micronaut/refactor/MicronautRefactoringFactory.java b/enterprise/micronaut/src/org/netbeans/modules/micronaut/refactor/MicronautRefactoringFactory.java
index 9bb887a..66be3ae 100644
--- a/enterprise/micronaut/src/org/netbeans/modules/micronaut/refactor/MicronautRefactoringFactory.java
+++ b/enterprise/micronaut/src/org/netbeans/modules/micronaut/refactor/MicronautRefactoringFactory.java
@@ -258,7 +258,7 @@
                 DataObject dobj = DataObject.find(getParentFile());
                 if (dobj != null) {
                     EditorCookie.Observable obs = dobj.getCookie(EditorCookie.Observable.class);
-                    if (obs != null && obs instanceof CloneableEditorSupport) {
+                    if (obs instanceof CloneableEditorSupport) {
                         CloneableEditorSupport supp = (CloneableEditorSupport)obs;
                         return new PositionBounds(supp.createPositionRef(startOffset, Position.Bias.Forward), supp.createPositionRef(Math.max(startOffset, endOffset), Position.Bias.Forward));
                     }
diff --git a/enterprise/micronaut/src/org/netbeans/modules/micronaut/resources/layer.xml b/enterprise/micronaut/src/org/netbeans/modules/micronaut/resources/layer.xml
index 667c8e2..6c86425 100644
--- a/enterprise/micronaut/src/org/netbeans/modules/micronaut/resources/layer.xml
+++ b/enterprise/micronaut/src/org/netbeans/modules/micronaut/resources/layer.xml
@@ -49,6 +49,13 @@
             <folder name="Plugins">
                 <folder name="io.micronaut.application">
                     <folder name="Lookup">
+                        <file name="micronaut-project-actions.shadow">
+                            <attr name="originalFile" stringvalue="Projects/org-netbeans-modules-gradle/Plugins/org.graalvm.buildtools.native/Lookup/micronaut-project-actions.instance"/>
+                        </file>
+                    </folder>
+                </folder>
+                <folder name="org.graalvm.buildtools.native">
+                    <folder name="Lookup">
                         <file name="micronaut-project-actions.instance">
                             <attr name="instanceOf" stringvalue="org.netbeans.spi.project.LookupProvider"/>
                             <attr name="instanceCreate" methodvalue="org.netbeans.modules.gradle.spi.actions.DefaultGradleActionsProvider.forProjectLayer"/>
diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/enterprise/payara.common/nbproject/org-netbeans-modules-payara-common.sig b/enterprise/payara.common/nbproject/org-netbeans-modules-payara-common.sig
index e52ca75..1afd5fb 100644
--- a/enterprise/payara.common/nbproject/org-netbeans-modules-payara-common.sig
+++ b/enterprise/payara.common/nbproject/org-netbeans-modules-payara-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.12
+#Version 2.13
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/payara.eecommon/nbproject/org-netbeans-modules-payara-eecommon.sig b/enterprise/payara.eecommon/nbproject/org-netbeans-modules-payara-eecommon.sig
index 4de754c..f1607b6 100644
--- a/enterprise/payara.eecommon/nbproject/org-netbeans-modules-payara-eecommon.sig
+++ b/enterprise/payara.eecommon/nbproject/org-netbeans-modules-payara-eecommon.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.13.0
+#Version 2.14.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -763,7 +763,7 @@
 CLSS public org.netbeans.modules.payara.eecommon.api.JDBCDriverDeployHelper
 cons public init()
 meth public static java.util.List<java.net.URL> getMissingDrivers(java.io.File[],java.util.Set<org.netbeans.modules.j2ee.deployment.common.api.Datasource>)
-meth public static javax.enterprise.deploy.spi.status.ProgressObject getProgressObject(java.io.File,java.util.List)
+meth public static javax.enterprise.deploy.spi.status.ProgressObject getProgressObject(java.io.File,java.util.List<java.net.URL>)
 supr java.lang.Object
 hcls JDBCDriversProgressObject
 
@@ -1138,6 +1138,8 @@
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion J2EE_1_3
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion J2EE_1_4
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAKARTAEE_8_0
+fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAKARTAEE_9_0
+fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAKARTAEE_9_1
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAVAEE_5_0
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAVAEE_6_0
 fld public final static org.netbeans.modules.payara.eecommon.api.config.J2EEVersion JAVAEE_7_0
diff --git a/enterprise/payara.eecommon/src/org/netbeans/modules/payara/eecommon/dd/wizard/PayaraDDWizardIterator.java b/enterprise/payara.eecommon/src/org/netbeans/modules/payara/eecommon/dd/wizard/PayaraDDWizardIterator.java
index 5d72463..1555c53 100644
--- a/enterprise/payara.eecommon/src/org/netbeans/modules/payara/eecommon/dd/wizard/PayaraDDWizardIterator.java
+++ b/enterprise/payara.eecommon/src/org/netbeans/modules/payara/eecommon/dd/wizard/PayaraDDWizardIterator.java
@@ -229,7 +229,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         
diff --git a/enterprise/payara.micro/nbproject/org-netbeans-modules-payara-micro.sig b/enterprise/payara.micro/nbproject/org-netbeans-modules-payara-micro.sig
index 39259c1..00cdac4 100644
--- a/enterprise/payara.micro/nbproject/org-netbeans-modules-payara-micro.sig
+++ b/enterprise/payara.micro/nbproject/org-netbeans-modules-payara-micro.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.12
+#Version 2.13
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
index 56bf238..29e4f93 100644
--- a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
+++ b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.12
+#Version 2.13
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/IdeContext.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/IdeContext.java
index 2382e18..c23c05f 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/IdeContext.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/IdeContext.java
@@ -24,6 +24,7 @@
  * @author Tomas Kraus, Peter Benedikovic
  * @deprecated IDE context support was removed. DO NOT USE!
  */
+@Deprecated
 public class IdeContext {
 
     ////////////////////////////////////////////////////////////////////////////
diff --git a/enterprise/performance.javaee/nbproject/project.properties b/enterprise/performance.javaee/nbproject/project.properties
index 2d1ff67..b2fba65 100644
--- a/enterprise/performance.javaee/nbproject/project.properties
+++ b/enterprise/performance.javaee/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 
 test.config.perf.includes=\
     **/MeasureJ2EEActionsTest.class,\
diff --git a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-ejb/nbproject/project.properties b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-ejb/nbproject/project.properties
index 93c8063..d36a5ee 100644
--- a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-ejb/nbproject/project.properties
+++ b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-ejb/nbproject/project.properties
@@ -36,7 +36,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-war/nbproject/project.properties b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-war/nbproject/project.properties
index 2e78e5f..d3c4f52 100644
--- a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-war/nbproject/project.properties
+++ b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/TestApplication-war/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/nbproject/project.properties b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/nbproject/project.properties
index 9480173..8909b0e 100644
--- a/enterprise/performance.javaee/test/qa-functional/data/TestApplication/nbproject/project.properties
+++ b/enterprise/performance.javaee/test/qa-functional/data/TestApplication/nbproject/project.properties
@@ -25,7 +25,7 @@
 jar.name=TestApplication.ear
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 meta.inf=src/conf
 no.dependencies=false
diff --git a/enterprise/performance.scripting/nbproject/project.properties b/enterprise/performance.scripting/nbproject/project.properties
index 41bcf99..05ebf7e 100644
--- a/enterprise/performance.scripting/nbproject/project.properties
+++ b/enterprise/performance.scripting/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.perf.includes=\
diff --git a/enterprise/performance.scripting/test/qa-functional/data/ScriptingPerfTest/nbproject/project.properties b/enterprise/performance.scripting/test/qa-functional/data/ScriptingPerfTest/nbproject/project.properties
index 328109a..9a096dc 100644
--- a/enterprise/performance.scripting/test/qa-functional/data/ScriptingPerfTest/nbproject/project.properties
+++ b/enterprise/performance.scripting/test/qa-functional/data/ScriptingPerfTest/nbproject/project.properties
@@ -51,7 +51,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/performance.web/nbproject/project.properties b/enterprise/performance.web/nbproject/project.properties
index f936088..1e11e9e 100644
--- a/enterprise/performance.web/nbproject/project.properties
+++ b/enterprise/performance.web/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 
 test.config.perf.includes=\
     **/MeasureWebActionsTest.class,\
diff --git a/enterprise/performance.web/test/qa-functional/data/PerformanceTestFolderWebApp/nbproject/project.properties b/enterprise/performance.web/test/qa-functional/data/PerformanceTestFolderWebApp/nbproject/project.properties
index 8505192..6379554 100644
--- a/enterprise/performance.web/test/qa-functional/data/PerformanceTestFolderWebApp/nbproject/project.properties
+++ b/enterprise/performance.web/test/qa-functional/data/PerformanceTestFolderWebApp/nbproject/project.properties
@@ -48,7 +48,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/performance.web/test/qa-functional/data/TestWebProject/nbproject/project.properties b/enterprise/performance.web/test/qa-functional/data/TestWebProject/nbproject/project.properties
index 0c900d2..fc55440 100644
--- a/enterprise/performance.web/test/qa-functional/data/TestWebProject/nbproject/project.properties
+++ b/enterprise/performance.web/test/qa-functional/data/TestWebProject/nbproject/project.properties
@@ -48,7 +48,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/performance.web/test/unit/data/TestWebProject/nbproject/project.properties b/enterprise/performance.web/test/unit/data/TestWebProject/nbproject/project.properties
index bced366..8a01174 100644
--- a/enterprise/performance.web/test/unit/data/TestWebProject/nbproject/project.properties
+++ b/enterprise/performance.web/test/unit/data/TestWebProject/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/profiler.j2ee/test/unit/data/EjbApp/nbproject/project.properties b/enterprise/profiler.j2ee/test/unit/data/EjbApp/nbproject/project.properties
index db486af..440212d 100644
--- a/enterprise/profiler.j2ee/test/unit/data/EjbApp/nbproject/project.properties
+++ b/enterprise/profiler.j2ee/test/unit/data/EjbApp/nbproject/project.properties
@@ -29,7 +29,7 @@
     ${file.reference.j2ee.jar}
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/profiler.j2ee/test/unit/data/WebApp/nbproject/project.properties b/enterprise/profiler.j2ee/test/unit/data/WebApp/nbproject/project.properties
index 1d17f17..6ab2198 100644
--- a/enterprise/profiler.j2ee/test/unit/data/WebApp/nbproject/project.properties
+++ b/enterprise/profiler.j2ee/test/unit/data/WebApp/nbproject/project.properties
@@ -45,7 +45,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/servletjspapi/nbproject/org-netbeans-modules-servletjspapi.sig b/enterprise/servletjspapi/nbproject/org-netbeans-modules-servletjspapi.sig
index b5fc047..86ea16b 100644
--- a/enterprise/servletjspapi/nbproject/org-netbeans-modules-servletjspapi.sig
+++ b/enterprise/servletjspapi/nbproject/org-netbeans-modules-servletjspapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47.0
+#Version 1.48.0
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/enterprise/servletjspapi/nbproject/project.properties b/enterprise/servletjspapi/nbproject/project.properties
index 34294a6..0466bf0 100644
--- a/enterprise/servletjspapi/nbproject/project.properties
+++ b/enterprise/servletjspapi/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 spec.version.base=1.49.0
 
 release.external/generated-servlet-jsp-api-3.1_2.3.jar=modules/ext/servlet3.1-jsp2.3-api.jar
diff --git a/enterprise/tomcat5/nbproject/project.properties b/enterprise/tomcat5/nbproject/project.properties
index af2c857..1452041 100644
--- a/enterprise/tomcat5/nbproject/project.properties
+++ b/enterprise/tomcat5/nbproject/project.properties
@@ -17,7 +17,6 @@
 
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
-bootclasspath.prepend=${build.dir}/disable-release
 javahelp.base=org/netbeans/modules/tomcat5/docs
 javahelp.hs=tomcat.hs
 
diff --git a/enterprise/tomcat5/nbproject/project.xml b/enterprise/tomcat5/nbproject/project.xml
index c57fd4a..c0da62f 100644
--- a/enterprise/tomcat5/nbproject/project.xml
+++ b/enterprise/tomcat5/nbproject/project.xml
@@ -96,6 +96,15 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.libs.xerces</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.57</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.db</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -313,7 +322,9 @@
                     <code-name-base>org.openide.loaders</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
-                    <run-dependency><specification-version>7.61</specification-version></run-dependency>
+                    <run-dependency>
+                        <specification-version>7.61</specification-version>
+                    </run-dependency>
                 </dependency>
                 <dependency>
                     <code-name-base>org.openide.modules</code-name-base>
@@ -340,14 +351,6 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
-                    <code-name-base>org.openide.util.ui</code-name-base>
-                    <build-prerequisite/>
-                    <compile-dependency/>
-                    <run-dependency>
-                        <specification-version>9.3</specification-version>
-                    </run-dependency>
-                </dependency>
-                <dependency>
                     <code-name-base>org.openide.util</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -364,6 +367,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.openide.util.ui</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>9.3</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.openide.windows</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
index 57c71c3..8ec3fa1 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
@@ -39,7 +39,7 @@
     
     private final TomcatManager tm;
     
-    private static final Logger LOGGER = Logger.getLogger("org.netbeans.modules.tomcat5"); // NOI18N
+    private static final Logger LOGGER = Logger.getLogger(AntDeploymentProviderImpl.class.getName()); // NOI18N
     
     public AntDeploymentProviderImpl(DeploymentManager dm) {
         tm = (TomcatManager)dm;
@@ -49,6 +49,11 @@
     public void writeDeploymentScript(OutputStream os, Object moduleType) throws IOException {
         String name = null;
         switch (tm.getTomcatVersion()) {
+            case TOMCAT_110:
+            case TOMCAT_101:
+            case TOMCAT_100:
+            case TOMCAT_90:
+            case TOMCAT_80:
             case TOMCAT_70:
                 name = "resources/tomcat-ant-deploy70.xml";
                 break;
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
index d159961..6aa05e7 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
@@ -21,10 +21,7 @@
 
 import org.netbeans.modules.tomcat5.deploy.TomcatManager;
 import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -50,12 +47,13 @@
 import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomEEVersion;
 import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomcatVersion;
 import org.openide.util.NbBundle;
+import org.openide.util.Utilities;
 
 /** 
- * Factory capable to create DeploymentManager that can deploy to Tomcat 5 and 6.
+ * Factory capable to create DeploymentManager that can deploy to Tomcat and TomEE.
  *
  * Tomcat URI has following format:
- * <PRE><CODE>tomcat[55|60]:[home=&lt;home_path&gt;:[base=&lt;base_path&gt;:]]&lt;manager_app_url&gt;</CODE></PRE>
+ * <PRE><CODE>tomcat[90|100]:[home=&lt;home_path&gt;:[base=&lt;base_path&gt;:]]&lt;manager_app_url&gt;</CODE></PRE>
  * for example
  * <PRE><CODE>tomcat:http://localhost:8080/manager/</CODE></PRE>
  * where paths values will be used as CATALINA_HOME and CATALINA_BASE properties and manager_app_url
@@ -70,6 +68,9 @@
     public static final String SERVER_ID_70 = "Tomcat70";   // NOI18N
     public static final String SERVER_ID_80 = "Tomcat80";   // NOI18N
     public static final String SERVER_ID_90 = "Tomcat90";   // NOI18N
+    public static final String SERVER_ID_100 = "Tomcat100";   // NOI18N
+    public static final String SERVER_ID_101 = "Tomcat101";   // NOI18N
+    public static final String SERVER_ID_110 = "Tomcat110";   // NOI18N
     
     public static final String TOMCAT_URI_PREFIX_50 = "tomcat:";    // NOI18N
     public static final String TOMCAT_URI_PREFIX_55 = "tomcat55:";  // NOI18N
@@ -77,16 +78,25 @@
     public static final String TOMCAT_URI_PREFIX_70 = "tomcat70:";  // NOI18N
     public static final String TOMCAT_URI_PREFIX_80 = "tomcat80:";  // NOI18N
     public static final String TOMCAT_URI_PREFIX_90 = "tomcat90:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_100 = "tomcat100:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_101 = "tomcat101:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_110 = "tomcat110:";  // NOI18N
     
     public static final String TOMCAT_URI_HOME_PREFIX = "home=";    // NOI18N
     public static final String TOMCAT_URI_BASE_PREFIX = ":base=";   // NOI18N
 
-    private static final Pattern TOMEE_JAR_PATTERN = Pattern.compile("tomee-common-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
-    private static final Pattern TOMEE_JAXRS_JAR_PATTERN = Pattern.compile("tomee-jaxrs-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
-    private static final Pattern TOMEE_GERONIMO_JAR_PATTERN = Pattern.compile("geronimo-connector-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
+    static final Pattern TOMEE_JAR_PATTERN = Pattern.compile("tomee-common-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_WEBPROFILE_JAR_PATTERN = Pattern.compile("openejb-api-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_JAXRS_JAR_PATTERN = Pattern.compile("jettison-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_MICROPROFILE_JAR_PATTERN = Pattern.compile("microprofile-config-api-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_PLUS_JAR_PATTERN = Pattern.compile("activemq-protobuf-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_PLUME_JAR_PATTERN = Pattern.compile("eclipselink-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
     private static final String GENERIC_DISCONNECTED_URI_PREFIX = "tomcat-any:"; // NOI18N
     private static final String GENERIC_DISCONNECTED_URI =
             GENERIC_DISCONNECTED_URI_PREFIX + "jakarta-tomcat-generic"; // NOI18N
@@ -96,19 +106,23 @@
     private static final String DISCONNECTED_URI_70 = TOMCAT_URI_PREFIX_70 + "apache-tomcat-7.0.x";   // NOI18N
     private static final String DISCONNECTED_URI_80 = TOMCAT_URI_PREFIX_80 + "apache-tomcat-8.0.x";   // NOI18N
     private static final String DISCONNECTED_URI_90 = TOMCAT_URI_PREFIX_90 + "apache-tomcat-9.0.x";   // NOI18N
+    private static final String DISCONNECTED_URI_100 = TOMCAT_URI_PREFIX_100 + "apache-tomcat-10.0.x";   // NOI18N
+    private static final String DISCONNECTED_URI_101 = TOMCAT_URI_PREFIX_101 + "apache-tomcat-10.1.x";   // NOI18N
+    private static final String DISCONNECTED_URI_110 = TOMCAT_URI_PREFIX_110 + "apache-tomcat-11.0.x";   // NOI18N
     
     private static final Set<String> DISCONNECTED_URIS = new HashSet<>();
     static {
         Collections.addAll(DISCONNECTED_URIS, DISCONNECTED_URI_50,
                 DISCONNECTED_URI_55, DISCONNECTED_URI_60, DISCONNECTED_URI_70,
-                DISCONNECTED_URI_80, DISCONNECTED_URI_90, GENERIC_DISCONNECTED_URI);
+                DISCONNECTED_URI_80, DISCONNECTED_URI_90, DISCONNECTED_URI_100,
+                DISCONNECTED_URI_101, DISCONNECTED_URI_110, GENERIC_DISCONNECTED_URI);
     }
     
     private static TomcatFactory instance;
     
     private static final WeakHashMap managerCache = new WeakHashMap();
     
-    private static final Logger LOGGER = Logger.getLogger("org.netbeans.modules.tomcat5");  // NOI18N
+    private static final Logger LOGGER = Logger.getLogger(TomcatFactory.class.getName());  // NOI18N
     
     private TomcatFactory() {
         super();
@@ -193,24 +207,30 @@
                 || str.startsWith(TOMCAT_URI_PREFIX_60)
                 || str.startsWith(TOMCAT_URI_PREFIX_70)
                 || str.startsWith(TOMCAT_URI_PREFIX_80)
-                || str.startsWith(TOMCAT_URI_PREFIX_90));
+                || str.startsWith(TOMCAT_URI_PREFIX_90)
+                || str.startsWith(TOMCAT_URI_PREFIX_100)
+                || str.startsWith(TOMCAT_URI_PREFIX_101)
+                || str.startsWith(TOMCAT_URI_PREFIX_110));
     }
     
     /** 
-     * Retrieve the tomcat version e.g. '6.0.10'
+     * Retrieve the tomcat version e.g. '9.0.70'
      * 
      * @throws IllegalStateException if the version information cannot be retrieved 
      */
     public static String getTomcatVersionString(File catalinaHome) throws IllegalStateException {
         File catalinaJar = new File(catalinaHome, "lib/catalina.jar"); // NOI18N
-        if (!catalinaJar.exists()) {
-            catalinaJar = new File(catalinaHome, "server/lib/catalina.jar"); // NOI18N
-        }
         File coyoteJar = new File(catalinaHome, "lib/tomcat-coyote.jar"); // NOI18N
+        if (!catalinaJar.exists()) {
+            // For Tomcat 5/5.5
+            catalinaJar = new File(catalinaHome, "server/lib/catalina.jar"); // NOI18N
+            coyoteJar = new File(catalinaHome, "server/lib/tomcat-coyote.jar"); // NOI18N
+        }
 
         try {
             URLClassLoader loader = new URLClassLoader(new URL[] {
-                catalinaJar.toURI().toURL(), coyoteJar.toURI().toURL() });
+                Utilities.toURI(catalinaJar).toURL(), Utilities.toURI(coyoteJar).toURL() });
+            
             Class serverInfo = loader.loadClass("org.apache.catalina.util.ServerInfo"); // NOI18N
             try {
                 Method method = serverInfo.getMethod("getServerNumber", new Class[] {}); // NOI18N
@@ -242,7 +262,7 @@
             LOGGER.log(Level.INFO, null, ex);
             return getTomcatVersionFallback(catalinaHome);
         }
-        return getTomcatVersion(version, TomcatVersion.TOMCAT_50);
+        return getTomcatVersion(version, TomcatVersion.TOMCAT_80);
     }
 
     private static TomcatVersion getTomcatVersionFallback(File catalinaHome) throws IllegalStateException {
@@ -280,7 +300,9 @@
     }
 
     private static TomcatVersion getTomcatVersion(String version, TomcatVersion defaultVersion) throws IllegalStateException {
-        if (version.startsWith("5.5.")) { // NOI18N
+        if (version.startsWith("5.0.")) { // NOI18N
+            return TomcatVersion.TOMCAT_50;
+        } else if (version.startsWith("5.5.")) { // NOI18N
             return TomcatVersion.TOMCAT_55;
         } else if (version.startsWith("6.")) { // NOI18N
             return TomcatVersion.TOMCAT_60;
@@ -290,6 +312,12 @@
             return TomcatVersion.TOMCAT_80;
         } else if (version.startsWith("9.")) { // NOI18N
             return TomcatVersion.TOMCAT_90;
+        } else if (version.startsWith("10.0")) { // NOI18N
+            return TomcatVersion.TOMCAT_100;
+        } else if (version.startsWith("10.1")) { // NOI18N
+            return TomcatVersion.TOMCAT_101;
+        } else if (version.startsWith("11.")) { // NOI18N
+            return TomcatVersion.TOMCAT_110;
         }
         int dotIndex = version.indexOf('.');
         if (dotIndex > 0) {
@@ -307,7 +335,13 @@
     }
 
     private static TomcatVersion getTomcatVersion(String uri) throws IllegalStateException {
-        if (uri.startsWith(TOMCAT_URI_PREFIX_90)) {
+        if (uri.startsWith(TOMCAT_URI_PREFIX_110)) {
+            return TomcatVersion.TOMCAT_110;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_101)) {
+            return TomcatVersion.TOMCAT_101;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_100)) {
+            return TomcatVersion.TOMCAT_100;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_90)) {
             return TomcatVersion.TOMCAT_90;
         } else if (uri.startsWith(TOMCAT_URI_PREFIX_80)) {
             return TomcatVersion.TOMCAT_80;
@@ -336,16 +370,28 @@
     @NonNull
     public static TomEEType getTomEEType(@NonNull File libFolder) {
         File[] children = libFolder.listFiles();
-        TomEEType type = TomEEType.TOMEE_WEB;
+        TomEEType type = TomEEType.TOMEE_OPENEJB;
         if (children != null) {
             for (File file : children) {
-                if (TOMEE_JAXRS_JAR_PATTERN.matcher(file.getName()).matches()) {
-                    if (type.ordinal() < TomEEType.TOMEE_JAXRS.ordinal()) {
+                if (TOMEE_PLUME_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_PLUME.ordinal()) {
+                        return TomEEType.TOMEE_PLUME;
+                    }
+                } else if (TOMEE_PLUS_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_PLUS.ordinal()) {
+                        type = TomEEType.TOMEE_PLUS;
+                    }
+                } else if (TOMEE_MICROPROFILE_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_MICROPROFILE.ordinal()) {
+                        type = TomEEType.TOMEE_MICROPROFILE;
+                    }
+                } else if (TOMEE_JAXRS_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_JAXRS.ordinal()) {
                         type = TomEEType.TOMEE_JAXRS;
                     }
-                } else if (TOMEE_GERONIMO_JAR_PATTERN.matcher(file.getName()).matches()) {
-                    if (type.ordinal() < TomEEType.TOMEE_PLUS.ordinal()) {
-                        type = TomEEType.TOMEE_PLUS;
+                } else if (TOMEE_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_WEBPROFILE.ordinal()) {
+                        type = TomEEType.TOMEE_WEBPROFILE;
                     }
                 }
             }
@@ -411,6 +457,14 @@
             return TomcatManager.TomEEVersion.TOMEE_16;
         } else if (version.startsWith("1.7.")) { // NOI18N
             return TomcatManager.TomEEVersion.TOMEE_17;
+        } else if (version.startsWith("7.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_70;
+        } else if (version.startsWith("7.1.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_71;
+        } else if (version.startsWith("8.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_80;
+        } else if (version.startsWith("9.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_90;
         }
         return defaultVersion;
     }
@@ -420,6 +474,12 @@
             return uri.substring(GENERIC_DISCONNECTED_URI_PREFIX.length());
         }
         switch (tomcatVersion) {
+            case TOMCAT_110:
+                return uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_110.length());
+            case TOMCAT_101:
+                return uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_101.length());
+            case TOMCAT_100:
+                return uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_100.length());
             case TOMCAT_90:
                 return uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_90.length());
             case TOMCAT_80:
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
index 546353c..1bd15ab 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
@@ -91,7 +91,7 @@
     
     private static final String ATTR_PATH = "path"; // NOI18N
     
-    private static final Logger LOGGER = Logger.getLogger("org.netbeans.modules.tomcat5"); // NOI18N
+    private static final Logger LOGGER = Logger.getLogger(TomcatModuleConfiguration.class.getName()); // NOI18N
     
     /** Creates a new instance of TomcatModuleConfiguration */
     public TomcatModuleConfiguration(J2eeModule j2eeModule, TomcatVersion tomcatVersion, TomEEVersion tomeeVersion) {
@@ -224,7 +224,7 @@
         Context context = getContext();
         Set<Datasource> result = new HashSet<>();
         int length = context.getResource().length;
-        if (tomcatVersion != TomcatVersion.TOMCAT_50) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_55)) {
             // Tomcat 5.5.x or Tomcat 6.0.x
             for (int i = 0; i < length; i++) {
                 String type = context.getResourceType(i);
@@ -292,7 +292,7 @@
         if (conflictingDS.size() > 0) {
             throw new DatasourceAlreadyExistsException(conflictingDS);
         }
-        if (tomcatVersion != TomcatVersion.TOMCAT_50) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_55)) {
             if (tomeeVersion != null) {
                 // we need to store it to resources.xml
                 TomeeResources resources = getResources(true);
@@ -744,7 +744,7 @@
 
         // create a resource link to the global resource
         modifyContext( (Context ctx) -> {
-            int idx = context.addResourceLink(true);
+            int idx = ctx.addResourceLink(true);
             ctx.setResourceLinkName(idx, referenceName);
             ctx.setResourceLinkGlobal(idx, jndiName);
             ctx.setResourceLinkType(idx, "javax.sql.DataSource"); // NOI18N
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
index 2306c44..04036a3 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
@@ -21,7 +21,9 @@
 
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.logging.Level;
 import javax.swing.ButtonGroup;
 import javax.swing.ButtonModel;
 import javax.swing.DefaultComboBoxModel;
@@ -39,6 +41,7 @@
 import org.netbeans.api.java.platform.JavaPlatformManager;
 import org.netbeans.api.java.platform.Specification;
 import org.netbeans.modules.tomcat5.deploy.TomcatManager;
+import org.netbeans.modules.tomcat5.j2ee.TomcatPlatformImpl;
 import org.netbeans.modules.tomcat5.util.TomcatProperties;
 import org.openide.util.Exceptions;
 
@@ -372,32 +375,54 @@
     public void loadJvmModel() {
         JavaPlatformManager jpm = JavaPlatformManager.getDefault();
         JavaPlatformAdapter curJvm = (JavaPlatformAdapter)jvmModel.getSelectedItem();
-        String curPlatformName = null;
+        final String curPlatformName;
         if (curJvm != null) {
             curPlatformName = curJvm.getName();
         } else {
             curPlatformName = (String)tp.getJavaPlatform().getProperties().get(TomcatProperties.PLAT_PROP_ANT_NAME);
         }
-
         jvmModel.removeAllElements();
         
-        // feed the combo with sorted platform list
+        // Supported jvm platforms for this version of Tomcat or TomEE
+        TomcatPlatformImpl tomcatPlatformImpl = new TomcatPlatformImpl(tm);
+        Set<String> tomcatPlatforms = tomcatPlatformImpl.getSupportedJavaPlatformVersions();
+        
+        // jvm platforms registered in NetBeans
         JavaPlatform[] j2sePlatforms = jpm.getPlatforms(null, new Specification("J2SE", null)); // NOI18N
-        JavaPlatformAdapter[] platformAdapters = new JavaPlatformAdapter[j2sePlatforms.length];
-        for (int i = 0; i < platformAdapters.length; i++) {
-            platformAdapters[i] = new JavaPlatformAdapter(j2sePlatforms[i]);
+        
+        Set<JavaPlatformAdapter> platformAdapters = new TreeSet<>();
+        
+        // Only add the jvm platforms that are supported from the registered set
+        for (JavaPlatform jp : j2sePlatforms) {
+            if (tomcatPlatforms.contains(jp.getSpecification().getVersion().toString())) {
+                platformAdapters.add(new JavaPlatformAdapter(jp));
+            }
         }
-        Arrays.sort(platformAdapters);
-        for (int i = 0; i < platformAdapters.length; i++) {
-            JavaPlatformAdapter platformAdapter = platformAdapters[i];
-            jvmModel.addElement(platformAdapter);
-            // try to set selected item
+        
+        if (platformAdapters.isEmpty()) {
+            jvmModel.setSelectedItem(null);
+            return;
+        } else {
+            for (JavaPlatformAdapter platformAdapter : platformAdapters) {
+                jvmModel.addElement(platformAdapter);
+            }
+        }
+        
+        // try to set selected item
+        for (JavaPlatformAdapter j2sePlatform : platformAdapters) {
             if (curPlatformName != null) {
-                if (curPlatformName.equals(platformAdapter.getName())) {
-                    jvmModel.setSelectedItem(platformAdapter);
+                if (curPlatformName.equals(j2sePlatform.getName())) {
+                    jvmModel.setSelectedItem(j2sePlatform);
+                    // if we do not change the flag the jvm will not change
+                    jvmModelFlag = true;
+                    break;
+                } else {
+                    jvmModel.setSelectedItem(j2sePlatform);
+                    jvmModelFlag = true;
                 }
-            }   
+            } 
         }
+   
     }
     
     // model getters ----------------------------------------------------------
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
index 2df1518..ef7b908 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
@@ -25,7 +25,6 @@
 import javax.swing.JSpinner;
 import javax.accessibility.AccessibleContext;
 import java.awt.Font;
-import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomcatVersion;
 
 /**
  * Customizer general (connection) tab.
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
index adc97d6..c1d7fa0 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
@@ -71,11 +71,44 @@
  */
 public class TomcatManager implements DeploymentManager {
 
-    public enum TomcatVersion {TOMCAT_50, TOMCAT_55, TOMCAT_60, TOMCAT_70, TOMCAT_80, TOMCAT_90};
+    public enum TomcatVersion {
+        TOMCAT_50(50), TOMCAT_55(55), TOMCAT_60(60), TOMCAT_70(70), 
+        TOMCAT_80(80), TOMCAT_90(90), TOMCAT_100(100), TOMCAT_101(101),
+        TOMCAT_110(110);
+        
+        TomcatVersion(int version) { this.version = version; }
+        private final int version;
+        public int version() { return version; }
+        /**
+         * 
+         * @param tv TomcatVersion
+         * @return true if the version is equal or greater, false otherwise
+         */
+        public boolean isAtLeast(TomcatVersion tv) {
+            int comparisonResult = this.compareTo(tv);
+            return (comparisonResult >= 0);
+        }
+    }
 
-    public enum TomEEVersion {TOMEE_15, TOMEE_16, TOMEE_17};
+    public enum TomEEVersion {
+        TOMEE_15(15), TOMEE_16(16), TOMEE_17(17), TOMEE_70(70), 
+        TOMEE_71(71), TOMEE_80(80), TOMEE_90(90);
+        
+        TomEEVersion(int version) { this.version = version; }
+        private final int version;
+        public int version() { return version; }
+        /**
+         * 
+         * @param tv TomEEVersion
+         * @return true if the version is equal or greater, false otherwise
+         */
+        public boolean isAtLeast(TomEEVersion teev) {
+            int comparisonResult = this.compareTo(teev);
+            return (comparisonResult >= 0);
+        }
+    };
 
-    public enum TomEEType {TOMEE_WEB, TOMEE_JAXRS, TOMEE_PLUS};
+    public enum TomEEType {TOMEE_OPENEJB, TOMEE_WEBPROFILE, TOMEE_JAXRS, TOMEE_MICROPROFILE, TOMEE_PLUS, TOMEE_PLUME};
 
     public static final String KEY_UUID = "NB_EXEC_TOMCAT_START_PROCESS_UUID"; //NOI18N
 
@@ -227,6 +260,12 @@
      */
     public String getUri () {
         switch (tomcatVersion) {
+            case TOMCAT_110:
+                return TomcatFactory.TOMCAT_URI_PREFIX_110 + uri;
+            case TOMCAT_101:
+                return TomcatFactory.TOMCAT_URI_PREFIX_101 + uri;
+            case TOMCAT_100:
+                return TomcatFactory.TOMCAT_URI_PREFIX_100 + uri;
             case TOMCAT_90:
                 return TomcatFactory.TOMCAT_URI_PREFIX_90 + uri;
             case TOMCAT_80:
@@ -247,7 +286,7 @@
      * @return URI without home and base specification
      */
     public String getPlainUri () {
-        if (isAboveTomcat70()) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_70)) {
             return "http://" + tp.getHost() + ":" + getCurrentServerPort() + "/manager/text/"; //NOI18N
         }
         return "http://" + tp.getHost() + ":" + getCurrentServerPort() + "/manager/"; //NOI18N
@@ -401,11 +440,21 @@
 
         return false;
     }
-
+   
     public boolean isAboveTomcat70() {
-        return tomcatVersion == TomcatVersion.TOMCAT_70
-                || tomcatVersion == TomcatVersion.TOMCAT_80
-                || tomcatVersion == TomcatVersion.TOMCAT_90;
+        return tomcatVersion .isAtLeast(TomcatVersion.TOMCAT_70);
+    }
+    
+    public boolean isTomcat110() {
+        return tomcatVersion == TomcatVersion.TOMCAT_110;
+    }
+    
+    public boolean isTomcat101() {
+        return tomcatVersion == TomcatVersion.TOMCAT_101;
+    }
+    
+    public boolean isTomcat100() {
+        return tomcatVersion == TomcatVersion.TOMCAT_100;
     }
     
     public boolean isTomcat90() {
@@ -438,14 +487,22 @@
     }
 
     public synchronized boolean isTomEEJaxRS() {
-        loadTomEEInfo();
-        return TomEEType.TOMEE_JAXRS.equals(tomEEType) || TomEEType.TOMEE_PLUS.equals(tomEEType);
+        switch (tomEEType) {
+            case TOMEE_PLUME:
+            case TOMEE_PLUS:
+            case TOMEE_MICROPROFILE:
+            case TOMEE_WEBPROFILE:
+            case TOMEE_JAXRS:
+                return true;
+            default:
+                return false;
+        }
     }
 
-    /** Returns Tomcat lib folder: "lib" for  Tomcat 6.0 and "common/lib" for Tomcat 5.x */
+    /** Returns Tomcat lib folder: "lib" for  Tomcat 6.0 or greater and "common/lib" for Tomcat 5.x or less*/
     public String libFolder() {
         // Tomcat 5.x and 6.0 uses different lib folder
-        return isTomcat50() || isTomcat55() ? "common/lib" : "lib"; // NOI18N
+        return tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_60) ? "lib" : "common/lib"; // NOI18N
     }
 
     public TomcatVersion getTomcatVersion() {
@@ -456,6 +513,11 @@
         loadTomEEInfo();
         return tomEEVersion;
     }
+    
+    public synchronized TomEEType getTomEEType() {
+        loadTomEEInfo();
+        return tomEEType;
+    }
 
     public void loadTomEEInfo() {
         boolean fireListener = false;
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManagerImpl.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManagerImpl.java
index 294c934..3b5a697 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManagerImpl.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManagerImpl.java
@@ -333,10 +333,10 @@
             }
             StringBuilder result = new StringBuilder();
             while (st.hasMoreTokens()) {
-                result.append("/").append(URLEncoder.encode(st.nextToken(), StandardCharsets.UTF_8)); // NOI18N
+                result.append("/").append(URLEncoder.encode(st.nextToken(), StandardCharsets.UTF_8.name()));
             }
             return result.toString();
-        } catch (Exception e) {
+        } catch (UnsupportedEncodingException e) {
             throw new RuntimeException(e); // this should never happen
         }
     }
@@ -358,7 +358,7 @@
         }
         // http://www.netbeans.org/issues/show_bug.cgi?id=167139
         URL url = tmpContextXml.toURI().toURL();
-        String ret = URLEncoder.encode(url.toString(), StandardCharsets.UTF_8); // NOI18N
+        String ret = URLEncoder.encode(url.toString(), StandardCharsets.UTF_8.name());
         return ret;
     }
     
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
index ee83e97..6ef6276 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
@@ -37,6 +37,7 @@
 public class JaxRsStackSupportImpl implements JaxRsStackSupportImplementation {
 
     private static final String JAX_RS_APPLICATION_CLASS = "javax.ws.rs.core.Application"; //NOI18N
+    private static final String JAX_RS_APPLICATION_CLASS_JAKARTAEE = "jakarta.ws.rs.core.Application"; //NOI18N
 
     private final TomcatPlatformImpl j2eePlatform;
 
@@ -47,14 +48,14 @@
     @Override
     public boolean addJsr311Api(Project project) {
         // return true (behaves like added) when JAX-RS is on classpath
-        return isBundled(JAX_RS_APPLICATION_CLASS);
+        return isBundled(JAX_RS_APPLICATION_CLASS) || isBundled(JAX_RS_APPLICATION_CLASS_JAKARTAEE);
     }
 
     @Override
     public boolean extendsJerseyProjectClasspath(Project project) {
         // declared as extended when JAX-RS is on classpath
         // suppose that TomEE has its own implementation of JAX-RS
-        return isBundled(JAX_RS_APPLICATION_CLASS);
+        return isBundled(JAX_RS_APPLICATION_CLASS) || isBundled(JAX_RS_APPLICATION_CLASS_JAKARTAEE);
     }
 
     @Override
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
index c4581f4..25a2d71 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
@@ -26,6 +26,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import org.netbeans.api.j2ee.core.Profile;
 import org.netbeans.api.java.platform.JavaPlatform;
 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
@@ -456,43 +458,148 @@
 
     @Override
     public Set<Profile> getSupportedProfiles() {
-        Set<Profile> profiles = new HashSet<>(5);
-        //if (!manager.isTomEE()) {
-            // TomEE is new and it actually does not support older specs (classloading separation etc).
-            // we will see if that's a problem for anybody
-            profiles.add(Profile.J2EE_13);
-            profiles.add(Profile.J2EE_14);
-            if (manager.isTomcat60() || manager.isAboveTomcat70()) {
-                profiles.add(Profile.JAVA_EE_5);
+        Set<Profile> profiles = new HashSet<>(10);
+
+        if (manager.isTomEE()) {
+            // Only TomEE versions 8/9 of type Plus/PluME support full profile
+            if (manager.getTomEEType().ordinal() >= 3 ) {
+                switch (manager.getTomEEVersion()) {
+                    case TOMEE_90:
+                        profiles.add(Profile.JAKARTA_EE_9_1_FULL);
+                        break;
+                    case TOMEE_80:
+                        profiles.add(Profile.JAKARTA_EE_8_FULL);
+                        profiles.add(Profile.JAVA_EE_8_FULL);
+                        profiles.add(Profile.JAVA_EE_7_FULL);
+                        profiles.add(Profile.JAVA_EE_6_FULL);
+                        break;
+                    default:
+                        break;
+                }
             }
-        //}
-        if (manager.isAboveTomcat70()) {
-            profiles.add(Profile.JAVA_EE_6_WEB);
-        }
-        if (manager.isTomcat80() || manager.isTomcat90()) {
-            profiles.add(Profile.JAVA_EE_7_WEB);
+            switch (manager.getTomEEVersion()) {
+                case TOMEE_90:
+                    profiles.add(Profile.JAKARTA_EE_9_1_WEB);
+                    break;
+                case TOMEE_80:
+                    profiles.add(Profile.JAKARTA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMEE_71:
+                case TOMEE_70:
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMEE_17:
+                case TOMEE_16:
+                case TOMEE_15:
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                default:
+                    break;
+            }
+        } else {
+            switch (manager.getTomcatVersion()) {
+//                case TOMCAT_110:
+//                    TODO: Add suport for Jakarta EE 10
+//                    profiles.add(Profile.JAKARTA_EE_10_WEB);
+//                    break;
+//                case TOMCAT_101:
+//                    TODO: Add suport for Jakarta EE 10
+//                    profiles.add(Profile.JAKARTA_EE_10_WEB);
+//                    break;
+                case TOMCAT_100:
+                    profiles.add(Profile.JAKARTA_EE_9_1_WEB);
+                    profiles.add(Profile.JAKARTA_EE_9_WEB);
+                    break;
+                case TOMCAT_90:
+                    profiles.add(Profile.JAKARTA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                case TOMCAT_80:
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_70:
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_60:
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_55:
+                case TOMCAT_50:
+                    profiles.add(Profile.J2EE_14);
+                    break;
+                default:
+                    break;
+            }
         }
         return profiles;
     }
     
     @Override
     public Set<String> getSupportedJavaPlatformVersions() {
-        Set<String> versions = new HashSet<>(6);
+        Set<String> versions = new HashSet<>(16);
 
-        if (!manager.isTomcat90()) {
-            if (!manager.isTomcat80()) {
-                if (!manager.isTomcat70()) {
-                    if (!manager.isTomcat60()) {
-                        versions.add("1.4"); // NOI18N
-                        versions.add("1.5"); // NOI18N
-                    }
-                    versions.add("1.5"); // NOI18N
-                }
-                versions.add("1.6"); // NOI18N
+        // TomEE has different supported Java versions
+        if (manager.isTomEE()) {
+            switch (manager.getTomEEVersion()) {
+                case TOMEE_90:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMEE_80:
+                    versions = versionRange(8, 21);
+                    break;
+                case TOMEE_71:
+                case TOMEE_70:
+                    versions = versionRange(7, 8);
+                    break;
+                case TOMEE_17:
+                case TOMEE_16:
+                case TOMEE_15:
+                    versions = versionRange(6, 8);
+                    break;
+                default:
+                    break;
             }
-            versions.add("1.7"); // NOI18N
+        } else {
+            switch (manager.getTomcatVersion()) {
+                case TOMCAT_110:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMCAT_101:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMCAT_100:
+                case TOMCAT_90:
+                    versions = versionRange(8, 21);
+                    break;
+                case TOMCAT_80:
+                    versions = versionRange(7, 21);
+                    break;
+                case TOMCAT_70:
+                    versions = versionRange(6, 21);
+                    break;
+                case TOMCAT_60:
+                    versions = versionRange(5, 8);
+                    break;
+                case TOMCAT_55:
+                case TOMCAT_50:
+                    versions = versionRange(4, 8);
+                    break;
+                default:
+                    break;
+            }
         }
-        versions.add("1.8"); // NOI18N
         return versions;
     }
     
@@ -510,9 +617,9 @@
                 new EjbSupportImpl(manager), wsStack);
         if (manager.isTomEE()) {
             content.add(new JpaSupportImpl());
-        }
-        if (manager.isTomEEJaxRS()) {
-            content.add(new JaxRsStackSupportImpl(this));
+            if (manager.isTomEEJaxRS()) {
+                content.add(new JaxRsStackSupportImpl(this));
+            }
         }
 
         Lookup baseLookup = Lookups.fixed(content.toArray());
@@ -527,4 +634,21 @@
         lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_JAVADOC, tp.getJavadocs());
         lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_SRC, tp.getSources());        
     }
+    
+    /**
+     * Create Set containing desired java versions. e.g.
+     * <pre>{@code
+     *  Set<String> versions = versionRange(8, 11)
+     * }</pre>
+     * This Set will contain ["1.8", "9", "10", "11"]
+     * @param min minimum Java version {@code inclusive}
+     * @param max maximum Java version {@code inclusive}
+     * @return {@code Set<String>} of desired Java versions
+     */
+    private static Set<String> versionRange(int min, int max) {
+        return IntStream.range(min, max+1)
+                    .mapToObj((int v) ->  v > 8 ? Integer.toString(v) : "1." + v)
+                    .collect(Collectors.toSet());
+    }
+    
 }
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/optional/StartTomcat.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/optional/StartTomcat.java
index 5df9133..1b18039 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/optional/StartTomcat.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/optional/StartTomcat.java
@@ -929,8 +929,8 @@
         private static final long serialVersionUID = 992972967554321415L;
         
         public TomcatFormat(File startupScript, File homeDir) {
-            super(new java.util.HashMap ());
-            java.util.Map map = getMap ();
+            super(new HashMap());
+            Map<String, String> map = getMap();
             String scriptPath = startupScript.getAbsolutePath();
             map.put(TAG_EXEC_CMD,       scriptPath);
             map.put(TAG_EXEC_STARTUP,   "run");         // NOI18N
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
index ca74d33..fbf6673 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
@@ -143,6 +143,10 @@
             urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_80);
         } else if (version.startsWith("9.")) { // NOI18N
             urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_90);
+        } else if (version.startsWith("10.")) { // NOI18N
+            urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_100);
+        } else if (version.startsWith("10.1")) { // NOI18N
+            urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_101);
         } else {
             LOGGER.log(Level.INFO, "Cannot register the default Tomcat server.  The version {0} is not supported.", version); // NOI18N
             return 5;
@@ -192,6 +196,8 @@
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_70) // NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_80) // NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_90) // NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_100) // NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_101) // NOI18N
                 + ")" + Pattern.quote(TomcatFactory.TOMCAT_URI_HOME_PREFIX) // NOI18N
                 + Pattern.quote(catalinaHomeValue)
                 + "(" + Pattern.quote(TomcatFactory.TOMCAT_URI_BASE_PREFIX) + ".+)?$"); // NOI18N
@@ -233,6 +239,8 @@
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_70)  // NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_80)  // NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_90)  // NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_100)  // NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_101)  // NOI18N
                 + ")" + Pattern.quote(TomcatFactory.TOMCAT_URI_HOME_PREFIX)  // NOI18N
                 + "(.+)$"); // NOI18N
 
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
index 19a8c29..bf90d95 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
@@ -19,7 +19,7 @@
 
 # Module manifest localization
 OpenIDE-Module-Name=Tomcat (TomEE)
-OpenIDE-Module-Display-Category=Java Web and EE
+OpenIDE-Module-Display-Category=Java/Jakarta Web and EE
 OpenIDE-Module-Short-Description=Tomcat or TomEE server integration
 OpenIDE-Module-Long-Description=\
     Plugin that allows developing and executing web applications with a Apache Tomcat or TomEE server.
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
index 1db3099..94c4fa8 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
@@ -28,6 +28,9 @@
 <!ELEMENT Resource (#PCDATA) >
 <!ATTLIST Resource id CDATA #REQUIRED>
 <!ATTLIST Resource type CDATA #REQUIRED>
+<!ATTLIST Resource class-name CDATA #REQUIRED>
+<!ATTLIST Resource constructor CDATA #REQUIRED>
+<!ATTLIST Resource factory-name CDATA #REQUIRED>
 
 <!ELEMENT Container (#PCDATA) >
 <!ATTLIST Container id CDATA #REQUIRED>
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
index 11d94a1..76d8fc7 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
@@ -354,6 +354,15 @@
     public String getUrl() {
         String url;
         switch (getTomcatVersion()) {
+            case TOMCAT_110:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_110;
+                break;
+            case TOMCAT_101:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_101;
+                break;
+            case TOMCAT_100:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_100;
+                break;
             case TOMCAT_90:
                 url = TomcatFactory.TOMCAT_URI_PREFIX_90;
                 break;
@@ -574,9 +583,7 @@
                     infoMessage = true;
                 } else if (!TomcatUsers.hasManagerRole(getTomcatVersion(), tomcatUsersXml, jTextFieldUsername.getText())) {
                     errorMessage = NbBundle.getMessage(InstallPanelVisual.class, "MSG_UserHasNotManagerRole",
-                            TomcatVersion.TOMCAT_70.equals(getTomcatVersion())
-                                    || TomcatVersion.TOMCAT_80.equals(getTomcatVersion())
-                                    || TomcatVersion.TOMCAT_90.equals(getTomcatVersion())
+                            getTomcatVersion().isAtLeast(TomcatVersion.TOMCAT_70)
                                 ? "manager-script"
                                 : "manager");
                     infoMessage = true;
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogManager.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogManager.java
index 612d194..7965d70 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogManager.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogManager.java
@@ -45,8 +45,8 @@
     private ServerLog serverLog;    
     private LogViewer sharedContextLogViewer;
     private LogViewer juliLogViewer;
-    private Map/*<TomcatModule, TomcatModuleConfig>*/ tomcatModuleConfigs = Collections.synchronizedMap(new WeakHashMap());
-    private Map/*<String, LogViewer>*/ contextLogViewers = Collections.synchronizedMap(new HashMap());
+    private Map<TomcatModule, TomcatModuleConfig> tomcatModuleConfigs = Collections.synchronizedMap(new WeakHashMap());
+    private Map<String, LogViewer> contextLogViewers = Collections.synchronizedMap(new HashMap());
     private TomcatManager manager;
     
     private final Object serverLogLock = new Object();
@@ -253,7 +253,7 @@
     public void openContextLog(TomcatModule module) {
         final String moduleID = module.getModuleID();
         Object o = tomcatModuleConfigs.get(module);
-        TomcatModuleConfig moduleConfig = null;
+        TomcatModuleConfig  moduleConfig = null;
         LogViewer contextLog = null;
         if (o == null) {
             moduleConfig = new TomcatModuleConfig(
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
index afbd472..ebfcb05 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
@@ -44,7 +44,7 @@
  * @author  Stepan Herold
  */
 public class LogSupport {
-    private Map/*<Link, Link>*/ links = Collections.synchronizedMap(new HashMap());
+    private Map<Link, Link> links = Collections.synchronizedMap(new HashMap());
     private Annotation errAnnot;
     
     /**
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
index 1bdb05d..a427587 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
@@ -76,7 +76,7 @@
     /**
      * List of listeners which are notified when the log viewer is stoped.
      */
-    private List/*<LogViewerStopListener>*/ stopListeners = Collections.synchronizedList(new LinkedList());
+    private List<LogViewerStopListener> stopListeners = Collections.synchronizedList(new LinkedList());
 
     private String displayName;
     
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatInstallUtil.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatInstallUtil.java
index 853b260..72df3a8 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatInstallUtil.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatInstallUtil.java
@@ -25,12 +25,12 @@
 
 package org.netbeans.modules.tomcat5.util;
 
-import com.sun.org.apache.xml.internal.serialize.OutputFormat;
-import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
 import java.io.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.text.BadLocationException;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
 import org.netbeans.modules.tomcat5.config.gen.Engine;
 import org.netbeans.modules.tomcat5.config.gen.Host;
 import org.netbeans.modules.tomcat5.config.gen.Server;
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
index e1adffb..bac8169 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
@@ -261,6 +261,18 @@
         String prefix;
         String serverID;
         switch (tm.getTomcatVersion()) {
+            case TOMCAT_110:
+                prefix = "tomcat110"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_110;
+                break;
+            case TOMCAT_101:
+                prefix = "tomcat101"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_101;
+                break;
+            case TOMCAT_100:
+                prefix = "tomcat100"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_100;
+                break;
             case TOMCAT_90:
                 prefix = "tomcat90"; // NIO18N
                 serverID = TomcatFactory.SERVER_ID_90;
@@ -663,7 +675,7 @@
             }
         }
 
-        if (tm.isTomcat60()) {
+        if (tm.getTomcatVersion().isAtLeast(TomcatVersion.TOMCAT_60)) {
             try {
                 retValue.add(new File(homeDir, "bin/tomcat-juli.jar").toURI().toURL()); // NOI18N
             } catch (MalformedURLException e) {
@@ -722,7 +734,23 @@
                     addFileToList(list, jspApiDoc);
                     addFileToList(list, servletApiDoc);
                 } else {
-                    File j2eeDoc = InstalledFileLocator.getDefault().locate("docs/javaee-doc-api.jar", null, false); // NOI18N
+                    String eeDocs;
+                    switch (tm.getTomcatVersion()) {
+//                      TODO: Add support for Jakarta EE 10
+//                      case TOMCAT_110:
+//                      case TOMCAT_101:
+//                           eeDocs = "docs/jakartaee10-doc-api.jar";
+//                           break;
+                        case TOMCAT_100:
+                            eeDocs = "docs/jakartaee9-doc-api.jar";
+                            break;
+                        case TOMCAT_90:
+                            eeDocs = "docs/jakartaee8-doc-api.jar";
+                            break;
+                        default:
+                            eeDocs = "docs/javaee-doc-api.jar";
+                    }
+                    File j2eeDoc = InstalledFileLocator.getDefault().locate(eeDocs, null, false); // NOI18N
                     if (j2eeDoc != null) {
                         addFileToList(list, j2eeDoc);
                     }
diff --git a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
index a11033e..4e25059 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
@@ -79,9 +79,7 @@
             roles = ""; // NOI18N
         }
         StringBuilder newRoles = new StringBuilder(roles.trim());
-        if (TomcatVersion.TOMCAT_70.equals(version)
-                || TomcatVersion.TOMCAT_80.equals(version)
-                || TomcatVersion.TOMCAT_90.equals(version)) {
+        if (version.isAtLeast(TomcatVersion.TOMCAT_70)) {
             if (!hasRole(roles, "manager-script")) { // NOI18N
                 if (newRoles.length() > 0 && !newRoles.toString().endsWith(",")) { // NOI18N
                     newRoles.append(',');
@@ -139,9 +137,7 @@
             }
             if (username.equals(name)) { // NOI18N
                 String roles = user.getAttribute("roles"); // NOI18N
-                if (TomcatVersion.TOMCAT_70.equals(version)
-                        || TomcatVersion.TOMCAT_80.equals(version)
-                        || TomcatVersion.TOMCAT_90.equals(version)) {
+                if (version.isAtLeast(TomcatVersion.TOMCAT_70)) {
                     if (hasRole(roles, "manager-script")) { // NOI18N
                         return true;
                     }                    
diff --git a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
index e313421..3450d1e 100644
--- a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
+++ b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
@@ -19,6 +19,7 @@
 package org.netbeans.modules.tomcat5;
 
 import org.netbeans.junit.NbTestCase;
+import org.netbeans.modules.tomcat5.deploy.TomcatManager;
 
 /**
  *
@@ -33,4 +34,27 @@
     public void testOldCreate50MethodForAutoupdateModule() {
         assertNotNull(TomcatFactory.create50());
     }
+    
+    public void testTomEEtype() {
+
+        TomcatManager.TomEEType type = TomcatManager.TomEEType.TOMEE_WEBPROFILE;
+        String file = "activemq-protobuf-1.1.jar";
+        
+        if (TomcatFactory.TOMEE_PLUME_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_PLUME;
+        } else if (TomcatFactory.TOMEE_PLUS_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_PLUS;
+        } else if (TomcatFactory.TOMEE_MICROPROFILE_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_MICROPROFILE;
+        } else if (TomcatFactory.TOMEE_WEBPROFILE_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_WEBPROFILE;
+        } else if (TomcatFactory.TOMEE_JAXRS_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_JAXRS;
+        }
+        
+        assertEquals(TomcatManager.TomEEType.TOMEE_PLUS, type);
+        assertNotSame(TomcatManager.TomEEType.TOMEE_MICROPROFILE, type);
+        
+    }
+    
 }
diff --git a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
index eb3a0eb..9736b20 100644
--- a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
+++ b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
@@ -75,4 +75,31 @@
         TestRunner.run(suite());
     }
     
+    public void testIsHigherThanTomcat70() {
+        TomcatManager.TomcatVersion tomcatVersion = TomcatManager.TomcatVersion.TOMCAT_70;
+        
+        assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_110));
+        assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_101));
+        assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_100));
+        assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_90));
+        assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_80));
+        assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_60));
+        assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_55));
+        assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_50));
+        
+    }
+    
+    public void testIsHigherThanTomee70() {
+        TomcatManager.TomEEVersion tomEEVersion = TomcatManager.TomEEVersion.TOMEE_70;
+        
+        assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_90));
+        assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_80));
+        assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_71));
+        assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_70));
+        assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_17));
+        assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_16));
+        assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_15));
+        
+    }
+    
 }
diff --git a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
index 1a5191c..51fb444 100644
--- a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
+++ b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
@@ -66,6 +66,11 @@
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_70, file, "tomcat6"));
         assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_70, file, "tomcat7"));
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, "tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_80, file, "tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_90, file, "tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_100, file, "tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, "tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_110, file, "tomcat7"));
     }
     
     public void testCreateUser() throws Exception {
@@ -84,6 +89,15 @@
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, "nonexisting"));
         TomcatUsers.createUser(file, "new", "tomcat", TomcatVersion.TOMCAT_60);
         assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, "new"));
+        
+        file = createTomcatUsersXml("tomcat-users3.xml", CONTENT3);
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_110, file, "ide"));
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, "ide"));
+        TomcatUsers.createUser(file, "tomcat6", "tomcat", TomcatVersion.TOMCAT_101);
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, "tomcat7"));
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, "nonexisting"));
+        TomcatUsers.createUser(file, "new", "tomcat", TomcatVersion.TOMCAT_101);
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, "new"));
     }
     
     public void testUserExists() throws Exception {
diff --git a/enterprise/web.beans/nbproject/org-netbeans-modules-web-beans.sig b/enterprise/web.beans/nbproject/org-netbeans-modules-web-beans.sig
index 1679976..2349855 100644
--- a/enterprise/web.beans/nbproject/org-netbeans-modules-web-beans.sig
+++ b/enterprise/web.beans/nbproject/org-netbeans-modules-web-beans.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.36
+#Version 2.37
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/wizard/BeansXmlIterator.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/wizard/BeansXmlIterator.java
index 99f44dd..3e04bb6 100644
--- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/wizard/BeansXmlIterator.java
+++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/wizard/BeansXmlIterator.java
@@ -137,7 +137,7 @@
         // Creating steps.
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansComponentImpl.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansComponentImpl.java
index cebdb87..a2e0fdc 100644
--- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansComponentImpl.java
+++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansComponentImpl.java
@@ -57,7 +57,7 @@
     
     protected static Element createNewElement(String name, WebBeansModelImpl model){
         String ns = WebBeansComponent.WEB_BEANS_NAMESPACE;
-        if( model.getRootComponent()!=null && model.getRootComponent() instanceof AbstractDocumentComponent) {
+        if(model.getRootComponent() instanceof AbstractDocumentComponent) {
             ns = ((AbstractDocumentComponent)model.getRootComponent()).getQName().getNamespaceURI();
         }
         return model.getDocument().createElementNS( ns, name );
diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansElements.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansElements.java
index 0961418..a733bb5 100644
--- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansElements.java
+++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/xml/impl/WebBeansElements.java
@@ -57,7 +57,7 @@
 
     public QName getQName(WebBeansModelImpl model) {
         String ns = WebBeansComponent.WEB_BEANS_NAMESPACE;
-        if( model.getRootComponent()!=null && model.getRootComponent() instanceof AbstractDocumentComponent) {
+        if( model.getRootComponent() instanceof AbstractDocumentComponent) {
             ns = ((AbstractDocumentComponent)model.getRootComponent()).getQName().getNamespaceURI();
         }
         return new QName( ns, getName() );
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JSPELPlugin.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JSPELPlugin.java
index 954cae6..58969af 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JSPELPlugin.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JSPELPlugin.java
@@ -137,7 +137,7 @@
     public List<Function> getFunctions(FileObject file) {
         List<Function> functions =  new ArrayList<Function>();
         Document document = getDocumentForFile(file);
-        if (document == null || !(document instanceof BaseDocument)) {
+        if (!(document instanceof BaseDocument)) {
             return functions;
         }
 
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JspSyntaxSupport.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JspSyntaxSupport.java
index b965fc3..a76cee0 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JspSyntaxSupport.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/JspSyntaxSupport.java
@@ -375,7 +375,7 @@
                     try {
                         //check if the cursor is behind an open tag
                         SyntaxElement se = getElementChain(tracking.getOffset());
-                        if(se != null && (se instanceof SyntaxElement.Tag)) {
+                        if(se instanceof SyntaxElement.Tag) {
                             return COMPLETION_POPUP;
                         }
                     }catch(BadLocationException e) {
@@ -1752,7 +1752,7 @@
     public CompletionItem getAutocompletedEndTag(int offset) {
         try {
             SyntaxElement elem = getElementChain( offset - 1);
-            if(elem != null && elem instanceof SyntaxElement.Tag) {
+            if(elem instanceof SyntaxElement.Tag) {
                 String tagName = ((SyntaxElement.Tag)elem).getName();
                 return HtmlCompletionItem.createAutocompleteEndTag(tagName, offset);
             }
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/SimplifiedJspServlet.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/SimplifiedJspServlet.java
index f7a8530..fff6954 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/SimplifiedJspServlet.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/SimplifiedJspServlet.java
@@ -95,7 +95,7 @@
     List<Embedding> beanDeclarations = new LinkedList<Embedding>();
     Embedding pageExtends = null;
     
-    private List<Embedding> implicitImports = new LinkedList<Embedding>();;
+    private List<Embedding> implicitImports = new LinkedList<Embedding>();
     private int expressionIndex = 1;
     
 
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/completion/AttrSupports.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/completion/AttrSupports.java
index b2ced6b..58aa16a 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/completion/AttrSupports.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/completion/AttrSupports.java
@@ -278,7 +278,7 @@
                         //do nothing
                     } finally {
                         // avoids JAR locking
-                        if (cld != null && (cld instanceof Closeable)) {
+                        if (cld instanceof Closeable) {
                             try {
                                 ((Closeable) cld).close();
                             } catch (IOException ex) {
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELLayerTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELLayerTokenContext.java
index fbde3a9..45e02a1 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELLayerTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELLayerTokenContext.java
@@ -31,7 +31,7 @@
 * @author Petr Pisl
 * @deprecated Will be replaced by Semantic Coloring
 */
-
+@Deprecated
 public class ELLayerTokenContext extends TokenContext {
 
     // Token category-ids
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELSyntax.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELSyntax.java
index e6f64b6..b320df5 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELSyntax.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELSyntax.java
@@ -30,7 +30,7 @@
 * 
 * @author Petr Pisl
 */
-
+@Deprecated
 public class ELSyntax extends Syntax {
 
     /* Internal states used internally by analyzer. There
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELTokenContext.java
index 72448b4..104f579 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/ELTokenContext.java
@@ -32,7 +32,7 @@
 * @version 1.00
 * @deprecated Use {@link ELLexer} instead.
 */
-
+@Deprecated
 public class ELTokenContext extends TokenContext {
 
     // Token category-ids
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlSyntax.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlSyntax.java
index 0880c4f..5fa08ce 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlSyntax.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlSyntax.java
@@ -31,7 +31,7 @@
 *
 * @deprecated Use Lexer API instead. See {@link HTMLLexer} and {@link HTMLTokenId}.
 */
-
+@Deprecated
 public class HtmlSyntax extends Syntax {
 
     /** Internal state of the lexical analyzer before entering subanalyzer of
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlTokenContext.java
index e02502b..ec11224 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/HtmlTokenContext.java
@@ -36,7 +36,7 @@
 *
 * @deprecated Use Lexer API instead. See {@link HTMLTokenId}.
 */
-
+@Deprecated
 public class HtmlTokenContext extends TokenContext {
 
     // Numeric-ids for token-ids
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/Jsp11Syntax.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/Jsp11Syntax.java
index 2b4b7d5..33c4994 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/Jsp11Syntax.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/Jsp11Syntax.java
@@ -40,6 +40,7 @@
  * @deprecated Use {@link JspLexer} instead.
  *
  */
+@Deprecated
 public class Jsp11Syntax extends JspMultiSyntax {
 
     /** Creates new Jsp11Syntax */
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspDirectiveTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspDirectiveTokenContext.java
index f0ef3ee..8e81818 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspDirectiveTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspDirectiveTokenContext.java
@@ -34,7 +34,7 @@
 * @author Marek Fukala
 * @deprecated Use Jsp Lexer instead.
 */
-
+@Deprecated
 public class JspDirectiveTokenContext extends JspTagTokenContext {
 
     //token ids - are inherited from superclass
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaFakeTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaFakeTokenContext.java
index bf7895f..5c7a415 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaFakeTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaFakeTokenContext.java
@@ -32,7 +32,7 @@
  * @version 1.00
  * @deprecated Use JSP lexer instead
  */
-
+@Deprecated
 public class JspJavaFakeTokenContext {
 
     public static class JavaScriptletTokenContext extends TokenContext {
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaLayerTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaLayerTokenContext.java
index 7361491..77e8964 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaLayerTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspJavaLayerTokenContext.java
@@ -29,7 +29,7 @@
 * @author Petr Jiricka
 * @deprecated Will be replaced by Semantic Coloring
 */
-
+@Deprecated
 public class JspJavaLayerTokenContext extends TokenContext {
 
     private JspJavaLayerTokenContext() {
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiSyntax.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiSyntax.java
index 46bbba8..8fb4107 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiSyntax.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiSyntax.java
@@ -37,7 +37,7 @@
 * @version 1.00
 * @deprecated Use JSP Lexer instead
 */
-
+@Deprecated
 public class JspMultiSyntax extends Syntax {
 
     //<editor-fold defaultstate="collapsed" desc="class & instance members">
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiTokenContext.java
index 122e45e..734728a 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspMultiTokenContext.java
@@ -32,7 +32,7 @@
 * @author Miloslav Metelka
 * @deprecated Use JSP Lexer instead
 */
-
+@Deprecated
 public class JspMultiTokenContext extends TokenContext {
 
     // Jsp token numericIDs
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagSyntax.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagSyntax.java
index d9d187b..108a750 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagSyntax.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagSyntax.java
@@ -35,7 +35,7 @@
 * @version 1.00
 * @deprecated Use JSP Lexer instead
 */
-
+@Deprecated
 public class JspTagSyntax extends Syntax {
 
     // Internal states
diff --git a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagTokenContext.java b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagTokenContext.java
index f538555..a8e7b14 100644
--- a/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagTokenContext.java
+++ b/enterprise/web.core.syntax/src/org/netbeans/modules/web/core/syntax/deprecated/JspTagTokenContext.java
@@ -35,7 +35,7 @@
 * @author Petr Jiricka
 * @deprecated Use JSP Lexer instead
 */
-
+@Deprecated
 public class JspTagTokenContext extends TokenContext {
 
     //there is not any token category for jsp tags
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/AnnTestProject/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/AnnTestProject/nbproject/project.properties
index 0858f1d..a45d4ee 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/AnnTestProject/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/AnnTestProject/nbproject/project.properties
@@ -28,7 +28,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/AutoCompletionTestProjects/AutoCompletionProject/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/AutoCompletionTestProjects/AutoCompletionProject/nbproject/project.properties
index a934681..d7e4f5f 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/AutoCompletionTestProjects/AutoCompletionProject/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/AutoCompletionTestProjects/AutoCompletionProject/nbproject/project.properties
@@ -41,7 +41,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CSSCompletionTestProjects/CSSCompletionTest/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CSSCompletionTestProjects/CSSCompletionTest/nbproject/project.properties
index aeeff75..560a8c3 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CSSCompletionTestProjects/CSSCompletionTest/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CSSCompletionTestProjects/CSSCompletionTest/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CommentTestProject/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CommentTestProject/nbproject/project.properties
index eec12f4..4b05139 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CommentTestProject/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CommentTestProject/nbproject/project.properties
@@ -29,7 +29,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JS/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JS/nbproject/project.properties
index 1de0e3e..52da2e1 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JS/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JS/nbproject/project.properties
@@ -42,7 +42,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JSF/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JSF/nbproject/project.properties
index 3cba208..6832269 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JSF/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JSF/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JavaEE6/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JavaEE6/nbproject/project.properties
index 9cc996d..a73dedc 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JavaEE6/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/JavaEE6/nbproject/project.properties
@@ -46,7 +46,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/Jsp/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/Jsp/nbproject/project.properties
index b6366ff..066ef4d 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/Jsp/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/CompletionTestProjects/Jsp/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/IndentationTestProjects/IndentationTest/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/IndentationTestProjects/IndentationTest/nbproject/project.properties
index cc8f2bb..4191934 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/IndentationTestProjects/IndentationTest/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/IndentationTestProjects/IndentationTest/nbproject/project.properties
@@ -38,7 +38,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/OpenFileProj/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/OpenFileProj/nbproject/project.properties
index 382625c..5203f4a 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/OpenFileProj/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/OpenFileProj/nbproject/project.properties
@@ -22,7 +22,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core.syntax/test/qa-functional/data/sampleJSP/nbproject/project.properties b/enterprise/web.core.syntax/test/qa-functional/data/sampleJSP/nbproject/project.properties
index ebadd13..9670d6e 100644
--- a/enterprise/web.core.syntax/test/qa-functional/data/sampleJSP/nbproject/project.properties
+++ b/enterprise/web.core.syntax/test/qa-functional/data/sampleJSP/nbproject/project.properties
@@ -46,7 +46,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.core/nbproject/org-netbeans-modules-web-core.sig b/enterprise/web.core/nbproject/org-netbeans-modules-web-core.sig
index e635d28..91a666f 100644
--- a/enterprise/web.core/nbproject/org-netbeans-modules-web-core.sig
+++ b/enterprise/web.core/nbproject/org-netbeans-modules-web-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.49.0
+#Version 2.50.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/web.core/nbproject/project.properties b/enterprise/web.core/nbproject/project.properties
index 8b14c2d..f56b76c 100644
--- a/enterprise/web.core/nbproject/project.properties
+++ b/enterprise/web.core/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 spec.version.base=2.51.0
 requires.nb.javac=true
 
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java b/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java
index 88fe3eb..81ea6f5 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java
@@ -47,7 +47,7 @@
     private Map taglibs;
     
     /** Prefix -> Taglib id */
-    private Map prefixMapper;
+    private Map<String, String> prefixMapper;
     
     private boolean elIgnored = false;
     
@@ -118,9 +118,9 @@
     /** Incorporates new parse data from the parser, possibly firing a change about coloring.
      * @param newTaglibs the new map of (uri -> TagLibraryInfo)
      * @param newPrefixMapper the new map of (prefix, uri)
-     * @param parseSuccessful wherher parsing was successful. If false, then the new information is partial only
+     * @param parseSuccessful whether parsing was successful. If false, then the new information is partial only
      */
-    public void applyParsedData(Map newTaglibs, Map newPrefixMapper, boolean newELIgnored, boolean newXMLSyntax, boolean parseSuccessful) {
+    public void applyParsedData(Map newTaglibs, Map<String, String> newPrefixMapper, boolean newELIgnored, boolean newXMLSyntax, boolean parseSuccessful) {
 
         initialized = true;
 
@@ -159,11 +159,11 @@
         }
         else {
             // merge
-            Iterator it = newPrefixMapper.keySet().iterator();
+            Iterator<String> it = newPrefixMapper.keySet().iterator();
             while (it.hasNext()) {
-                Object prefix = it.next();
-                Object uri = newPrefixMapper.get(prefix);
-                Object uriOld = prefixMapper.get(prefix);
+                String prefix = it.next();
+                String uri = newPrefixMapper.get(prefix);
+                String uriOld = prefixMapper.get(prefix);
                 if ((uriOld == null) || !uri.equals(uriOld)) {
                     Object newTaglib = newTaglibs.get(uri);
                     if (newTaglib != null) {
@@ -180,7 +180,9 @@
         }
     }
 
-    private static boolean equalsColoringInformation(Map taglibs1, Map prefixMapper1, Map taglibs2, Map prefixMapper2) {
+    private static boolean equalsColoringInformation(Map taglibs1, Map<String, String> prefixMapper1,
+            Map taglibs2, Map<String, String> prefixMapper2) {
+
         if ((taglibs1 == null) != (taglibs2 == null)) {
             return false;
         }
@@ -191,14 +193,16 @@
             return false;
         }
         else {
-            Iterator it = prefixMapper1.keySet().iterator();
+            Iterator<String> it = prefixMapper1.keySet().iterator();
             while (it.hasNext()) {
-                Object prefix = it.next();
-                Object key1 = prefixMapper1.get(prefix);
-                Object key2 = prefixMapper2.get(prefix);
+                String prefix = it.next();
+                String key1 = prefixMapper1.get(prefix);
+                String key2 = prefixMapper2.get(prefix);
+
                 if ((key1 == null) || (key2 == null)) {
                     return false;
                 }
+
                 TagLibraryInfo tli1 = (TagLibraryInfo)taglibs1.get(key1);
                 TagLibraryInfo tli2 = (TagLibraryInfo)taglibs2.get(key2);
                 if ((tli1 == null) || (tli2 == null)) {
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/BaseJspEditorSupport.java b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/BaseJspEditorSupport.java
index e000c85..a132758 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/BaseJspEditorSupport.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/BaseJspEditorSupport.java
@@ -92,7 +92,7 @@
     public BaseJspEditorSupport(JspDataObject obj) {
         super(obj, null, new BaseJspEnv(obj));
         DataObject data = getDataObject();
-        if ((data != null) && (data instanceof JspDataObject)) {
+        if (data instanceof JspDataObject) {
             setMIMEType(JspLoader.getMimeType((JspDataObject) data));
         }
 
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspLoader.java b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspLoader.java
index a225de6..f5b09df 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspLoader.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspLoader.java
@@ -57,7 +57,7 @@
     public static final String TAG_MIME_TYPE  = "text/x-tag"; // NOI18N
     
     public static String getMimeType(JspDataObject data) {
-        if ((data == null) || !(data instanceof JspDataObject)) {
+        if (!(data instanceof JspDataObject)) {
             return "";          // NOI18N
         }
         String ext = data.getPrimaryFile().getExt();
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspServletDataObject.java b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspServletDataObject.java
index 1d0c27c..fbbf857 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspServletDataObject.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/JspServletDataObject.java
@@ -125,10 +125,10 @@
             EditorCookie newCurrent = computeCurrentEditorCookie();
             if (currentEditor != newCurrent) {
                 // re-register a property change listener to the new editor
-                if ((currentEditor != null) && (currentEditor instanceof EditorCookie.Observable)) {
+                if (currentEditor instanceof EditorCookie.Observable) {
                     ((EditorCookie.Observable)currentEditor).removePropertyChangeListener(this);
                 }
-                if ((newCurrent != null) && (newCurrent instanceof EditorCookie.Observable)) {
+                if (newCurrent instanceof EditorCookie.Observable) {
                     ((EditorCookie.Observable)newCurrent).addPropertyChangeListener(this);
                 }
                 // remember the new editor
@@ -139,7 +139,7 @@
         
         private EditorCookie computeCurrentEditorCookie() {
             DataObject jsp = servlet.getSourceJspPage();
-            if ((jsp != null) && (jsp instanceof JspDataObject)) {
+            if (jsp instanceof JspDataObject) {
                 if (((JspDataObject)jsp).getServletDataObject() == servlet) {
                     EditorCookie newCookie = ((JspDataObject) jsp).getServletEditor();
                     if (newCookie != null)
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/TagLibParseSupport.java b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/TagLibParseSupport.java
index dcf84a4..cb9440c 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/TagLibParseSupport.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/jsploader/TagLibParseSupport.java
@@ -390,7 +390,7 @@
                     //Map prefixMapper = (pageInfo.getXMLPrefixMapper().size() > 0) ?
                     //    pageInfo.getApproxXmlPrefixMapper() : pageInfo.getJspPrefixMapper();
                     //Map prefixMapper = pageInfo.getJspPrefixMapper();
-                    Map prefixMapper = null;
+                    Map<String, String> prefixMapper = null;
                     if (pageInfo.getXMLPrefixMapper().size() > 0) {
                         prefixMapper = pageInfo.getApproxXmlPrefixMapper();
                         if (prefixMapper.size() == 0){
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java
index 176088b..320844b 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java
@@ -64,7 +64,7 @@
 
     public static void insert(String s, JTextComponent target, boolean reformat) throws BadLocationException {
         Document _doc = target.getDocument();
-        if (_doc == null || !(_doc instanceof BaseDocument)) {
+        if (!(_doc instanceof BaseDocument)) {
             return;
         }
 
@@ -270,7 +270,7 @@
     /**************************************************************************/
     private static void insertTagLibRef(JTextComponent target, String prefix, String uri) {
         Document doc = target.getDocument();
-        if (doc != null && doc instanceof BaseDocument) {
+        if (doc instanceof BaseDocument) {
             BaseDocument baseDoc = (BaseDocument)doc;
             baseDoc.atomicLock();
             try {
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/jspcompiler/SmapResolver.java b/enterprise/web.core/src/org/netbeans/modules/web/jspcompiler/SmapResolver.java
index d99a472..c319784 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/jspcompiler/SmapResolver.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/jspcompiler/SmapResolver.java
@@ -82,7 +82,7 @@
     
     /** contains hashmap of fileid's & filenames in the jsp
      */
-    private Hashtable fsection = new Hashtable(3);
+    private Map<String, String> fsection = new Hashtable<>(3);
     
     /** contains jsp -> servlet line mappings
      */
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerIterator.java
index 86ea25f..ad4b629 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerIterator.java
@@ -243,7 +243,7 @@
         // Creating steps.
         Object prop = wiz.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = Utilities.createSteps (beforeSteps, panels);
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/PageIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/PageIterator.java
index 0db36cf..d79dccc 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/PageIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/PageIterator.java
@@ -361,7 +361,7 @@
         // Creating steps.
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = Utilities.createSteps(beforeSteps, panels);
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ServletIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ServletIterator.java
index 62d2a00..62d5663 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ServletIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ServletIterator.java
@@ -129,7 +129,7 @@
         // Creating steps.
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = Utilities.createSteps(beforeSteps, panels);
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/TagHandlerIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/TagHandlerIterator.java
index 9d23277..1a2cb78 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/TagHandlerIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/TagHandlerIterator.java
@@ -229,7 +229,7 @@
         // Creating steps.
         Object prop = wiz.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = Utilities.createSteps (beforeSteps, panels);
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebFragmentXmlWizardIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebFragmentXmlWizardIterator.java
index 86e6941..bc3066a 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebFragmentXmlWizardIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebFragmentXmlWizardIterator.java
@@ -149,7 +149,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebXmlWizardIterator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebXmlWizardIterator.java
index 2324371..15c106d 100644
--- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebXmlWizardIterator.java
+++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/dd/WebXmlWizardIterator.java
@@ -148,7 +148,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/web.debug/nbproject/project.properties b/enterprise/web.debug/nbproject/project.properties
index ae32e2c..19c6bbf 100644
--- a/enterprise/web.debug/nbproject/project.properties
+++ b/enterprise/web.debug/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 test.config.stable.includes=\
diff --git a/enterprise/web.debug/test/qa-functional/data/MainTestApplication/nbproject/project.properties b/enterprise/web.debug/test/qa-functional/data/MainTestApplication/nbproject/project.properties
index 24af7ab..f447e31 100644
--- a/enterprise/web.debug/test/qa-functional/data/MainTestApplication/nbproject/project.properties
+++ b/enterprise/web.debug/test/qa-functional/data/MainTestApplication/nbproject/project.properties
@@ -56,7 +56,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.debug/test/qa-functional/data/TestLibrary/nbproject/project.properties b/enterprise/web.debug/test/qa-functional/data/TestLibrary/nbproject/project.properties
index 4206deb..5d59c82 100644
--- a/enterprise/web.debug/test/qa-functional/data/TestLibrary/nbproject/project.properties
+++ b/enterprise/web.debug/test/qa-functional/data/TestLibrary/nbproject/project.properties
@@ -32,7 +32,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.debug/test/qa-functional/data/TestTagLibrary/nbproject/project.properties b/enterprise/web.debug/test/qa-functional/data/TestTagLibrary/nbproject/project.properties
index 9481a74..6a80370 100644
--- a/enterprise/web.debug/test/qa-functional/data/TestTagLibrary/nbproject/project.properties
+++ b/enterprise/web.debug/test/qa-functional/data/TestTagLibrary/nbproject/project.properties
@@ -9,7 +9,7 @@
 includes=**
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 mkdist.disabled=false
 # Set relative path to dependent projects to be able to open them on any platform
diff --git a/enterprise/web.el/nbproject/org-netbeans-modules-web-el.sig b/enterprise/web.el/nbproject/org-netbeans-modules-web-el.sig
index bf70386..ea0c2f6 100644
--- a/enterprise/web.el/nbproject/org-netbeans-modules-web-el.sig
+++ b/enterprise/web.el/nbproject/org-netbeans-modules-web-el.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.69
+#Version 1.70
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/web.el/nbproject/project.properties b/enterprise/web.el/nbproject/project.properties
index 62f1882..9543723 100644
--- a/enterprise/web.el/nbproject/project.properties
+++ b/enterprise/web.el/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test-unit-sys-prop.web.project.jars=\
diff --git a/enterprise/web.el/test/unit/data/projects/testWebProject/nbproject/project.properties b/enterprise/web.el/test/unit/data/projects/testWebProject/nbproject/project.properties
index db9eb7b..c74ba0b 100644
--- a/enterprise/web.el/test/unit/data/projects/testWebProject/nbproject/project.properties
+++ b/enterprise/web.el/test/unit/data/projects/testWebProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.editor/src/org/netbeans/modules/web/jsf/editor/facelets/FaceletsLibraryMetadata.java b/enterprise/web.jsf.editor/src/org/netbeans/modules/web/jsf/editor/facelets/FaceletsLibraryMetadata.java
index 1590457..d74b2b5 100644
--- a/enterprise/web.jsf.editor/src/org/netbeans/modules/web/jsf/editor/facelets/FaceletsLibraryMetadata.java
+++ b/enterprise/web.jsf.editor/src/org/netbeans/modules/web/jsf/editor/facelets/FaceletsLibraryMetadata.java
@@ -35,6 +35,7 @@
  * @todo remove this class along with the **.libdefs.* package content
  * since DefaultFaceletLibraries provides basically the same info
  */
+@Deprecated
 public class FaceletsLibraryMetadata {
     private static Map<String, LibraryMetadata> libMap = new TreeMap<>();
 
diff --git a/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF/nbproject/project.properties b/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF/nbproject/project.properties
index f99308a..76e4b62 100644
--- a/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF/nbproject/project.properties
+++ b/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF/nbproject/project.properties
@@ -47,7 +47,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF22/nbproject/project.properties b/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF22/nbproject/project.properties
index 6d34ca8..1ccf39e 100644
--- a/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF22/nbproject/project.properties
+++ b/enterprise/web.jsf.editor/test/qa-functional/data/sampleJSF22/nbproject/project.properties
@@ -47,7 +47,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.editor/test/unit/data/testJavaJSFLibrary/nbproject/project.properties b/enterprise/web.jsf.editor/test/unit/data/testJavaJSFLibrary/nbproject/project.properties
index ff6e19f..5ffd43c 100644
--- a/enterprise/web.jsf.editor/test/unit/data/testJavaJSFLibrary/nbproject/project.properties
+++ b/enterprise/web.jsf.editor/test/unit/data/testJavaJSFLibrary/nbproject/project.properties
@@ -35,7 +35,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.editor/test/unit/data/testWebProject/nbproject/project.properties b/enterprise/web.jsf.editor/test/unit/data/testWebProject/nbproject/project.properties
index db9eb7b..c74ba0b 100644
--- a/enterprise/web.jsf.editor/test/unit/data/testWebProject/nbproject/project.properties
+++ b/enterprise/web.jsf.editor/test/unit/data/testWebProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.icefaces/nbproject/project.properties b/enterprise/web.jsf.icefaces/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/enterprise/web.jsf.icefaces/nbproject/project.properties
+++ b/enterprise/web.jsf.icefaces/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/web.jsf.kit/nbproject/project.properties b/enterprise/web.jsf.kit/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/enterprise/web.jsf.kit/nbproject/project.properties
+++ b/enterprise/web.jsf.kit/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/enterprise/web.jsf.navigation/nbproject/org-netbeans-modules-web-jsf-navigation.sig b/enterprise/web.jsf.navigation/nbproject/org-netbeans-modules-web-jsf-navigation.sig
index e4f59a1..aefdc23 100644
--- a/enterprise/web.jsf.navigation/nbproject/org-netbeans-modules-web-jsf-navigation.sig
+++ b/enterprise/web.jsf.navigation/nbproject/org-netbeans-modules-web-jsf-navigation.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.43
+#Version 2.44
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/web.jsf.navigation/src/org/netbeans/modules/web/jsf/navigation/graph/actions/MapActionUtility.java b/enterprise/web.jsf.navigation/src/org/netbeans/modules/web/jsf/navigation/graph/actions/MapActionUtility.java
index 33ba78a..a2341d8 100644
--- a/enterprise/web.jsf.navigation/src/org/netbeans/modules/web/jsf/navigation/graph/actions/MapActionUtility.java
+++ b/enterprise/web.jsf.navigation/src/org/netbeans/modules/web/jsf/navigation/graph/actions/MapActionUtility.java
@@ -511,7 +511,7 @@
             PageFlowSceneElement selElement = getSelectedPageFlowSceneElement(scene);
             Widget selectedWidget;
             Point popupPoint;
-            if (selElement != null && selElement instanceof PageFlowSceneElement) {
+            if (selElement instanceof PageFlowSceneElement) {
                 selectedWidget = scene.findWidget(selElement);
                 assert selectedWidget != null;
 
@@ -601,7 +601,7 @@
         assert scene != null;
 
         PageFlowSceneElement element = getSelectedPageFlowSceneElement(scene);
-        if (element != null && element instanceof Page) {
+        if (element instanceof Page) {
             return (Page) element;
         }
         return null;
diff --git a/enterprise/web.jsf.navigation/test/unit/src/org/netbeans/modules/web/jsf/navigation/TestJSFApp/nbproject/project.properties b/enterprise/web.jsf.navigation/test/unit/src/org/netbeans/modules/web/jsf/navigation/TestJSFApp/nbproject/project.properties
index f132402..98a5f10 100644
--- a/enterprise/web.jsf.navigation/test/unit/src/org/netbeans/modules/web/jsf/navigation/TestJSFApp/nbproject/project.properties
+++ b/enterprise/web.jsf.navigation/test/unit/src/org/netbeans/modules/web/jsf/navigation/TestJSFApp/nbproject/project.properties
@@ -43,7 +43,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf.richfaces/nbproject/project.properties b/enterprise/web.jsf.richfaces/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/enterprise/web.jsf.richfaces/nbproject/project.properties
+++ b/enterprise/web.jsf.richfaces/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/web.jsf/nbproject/org-netbeans-modules-web-jsf.sig b/enterprise/web.jsf/nbproject/org-netbeans-modules-web-jsf.sig
index 26b743f..16a8d64 100644
--- a/enterprise/web.jsf/nbproject/org-netbeans-modules-web-jsf.sig
+++ b/enterprise/web.jsf/nbproject/org-netbeans-modules-web-jsf.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.86.0
+#Version 1.87.0
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JsfTemplateUtils.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JsfTemplateUtils.java
index cec90ef..0127a98 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JsfTemplateUtils.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JsfTemplateUtils.java
@@ -85,7 +85,7 @@
         while (children.hasMoreElements()) {
             FileObject folder = children.nextElement();
             Object position = folder.getAttribute("position");
-            if (position == null || !(position instanceof Integer)) {
+            if (!(position instanceof Integer)) {
                 result.add(new Template(folder.getName(), getLocalizedName(folder)));
             } else {
                 result.add(new Template(folder.getName(), getLocalizedName(folder), (Integer) position));
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java
index af791bb..149e640 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java
@@ -216,7 +216,7 @@
         }
         
         final ParserResult parserResult = completionContext.getParserResult();
-        if (parserResult == null || !(parserResult instanceof ELParserResult)) {
+        if (!(parserResult instanceof ELParserResult)) {
             return null;
         }
         
@@ -238,7 +238,7 @@
         }
         
         Parser.Result result = results[0];
-        if (result == null || !(result instanceof HtmlParserResult)) {
+        if (!(result instanceof HtmlParserResult)) {
             // unexpected instance of Result
             return null;
         }
@@ -258,7 +258,7 @@
         CharSequence htmlParserResultText = htmlParserSnapshot.getText();
 
         Element element = htmlParserResult.findByPhysicalRange(elementAtCaretEmbeddedOffset, true);
-        if (element == null || !(element instanceof OpenTag)) {
+        if (!(element instanceof OpenTag)) {
             return null;
         }
         
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/JSFPaletteUtilities.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/JSFPaletteUtilities.java
index 7f92d03..d6b56e7 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/JSFPaletteUtilities.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/JSFPaletteUtilities.java
@@ -135,7 +135,7 @@
 
     public static void insert(String s, final JTextComponent target) throws BadLocationException {
         Document doc = target.getDocument();
-        if (doc != null && doc instanceof BaseDocument) {
+        if (doc instanceof BaseDocument) {
             final String str = (s == null) ? "" : s;
 
             final BaseDocument baseDoc = (BaseDocument) doc;
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardIterator.java
index d48a622..e4e9cc3 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardIterator.java
@@ -119,7 +119,7 @@
 
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = Utilities.createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java
index 5db3485..fbc658d 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java
@@ -99,7 +99,7 @@
         // Creating steps.
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
index 4275b1d..e828434 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
@@ -260,7 +260,7 @@
         // Creating steps.
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = Utilities.createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java
index 3420213..0fec46e 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java
@@ -121,7 +121,7 @@
         // Creating steps.
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ResourceLibraryIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ResourceLibraryIterator.java
index 8711a57..9f54e80 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ResourceLibraryIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ResourceLibraryIterator.java
@@ -216,7 +216,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = descriptor.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateClientIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateClientIterator.java
index 7318b90..a54a6d2 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateClientIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateClientIterator.java
@@ -138,7 +138,7 @@
         // Creating steps.
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateIterator.java
index e64f1fc..27e8def 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/TemplateIterator.java
@@ -159,7 +159,7 @@
         // Creating steps.
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/web.jsf/test/unit/data/testWebProject/nbproject/project.properties b/enterprise/web.jsf/test/unit/data/testWebProject/nbproject/project.properties
index db9eb7b..c74ba0b 100644
--- a/enterprise/web.jsf/test/unit/data/testWebProject/nbproject/project.properties
+++ b/enterprise/web.jsf/test/unit/data/testWebProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.debug=true
 javac.deprecation=false
 javac.processorpath=${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.jsf12/nbproject/org-netbeans-modules-web-jsf12.sig b/enterprise/web.jsf12/nbproject/org-netbeans-modules-web-jsf12.sig
index 329a5b4..f04f4a7 100644
--- a/enterprise/web.jsf12/nbproject/org-netbeans-modules-web-jsf12.sig
+++ b/enterprise/web.jsf12/nbproject/org-netbeans-modules-web-jsf12.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41.0
+#Version 1.42.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/web.jsf12ri/nbproject/org-netbeans-modules-web-jsf12ri.sig b/enterprise/web.jsf12ri/nbproject/org-netbeans-modules-web-jsf12ri.sig
index 46c1ee8..1d79cd9 100644
--- a/enterprise/web.jsf12ri/nbproject/org-netbeans-modules-web-jsf12ri.sig
+++ b/enterprise/web.jsf12ri/nbproject/org-netbeans-modules-web-jsf12ri.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41.0
+#Version 1.42.0
 
 CLSS public com.sun.faces.RIConstants
 fld public final static java.lang.Class[] EMPTY_CLASS_ARGS
diff --git a/enterprise/web.jsf20/nbproject/org-netbeans-modules-web-jsf20.sig b/enterprise/web.jsf20/nbproject/org-netbeans-modules-web-jsf20.sig
index 135a87e..56a182b 100644
--- a/enterprise/web.jsf20/nbproject/org-netbeans-modules-web-jsf20.sig
+++ b/enterprise/web.jsf20/nbproject/org-netbeans-modules-web-jsf20.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50.0
+#Version 1.51.0
 
 CLSS public com.sun.faces.RIConstants
 fld public final static int FLOW_DEFINITION_ID_SUFFIX_LENGTH
diff --git a/enterprise/web.jsf20/nbproject/project.properties b/enterprise/web.jsf20/nbproject/project.properties
index 6534f36..f96c5d4 100644
--- a/enterprise/web.jsf20/nbproject/project.properties
+++ b/enterprise/web.jsf20/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 release.external/javax.faces-2.3.9.jar=modules/ext/jsf-2_2/javax.faces.jar
 release.external/javax.faces-2.3.9-license.txt=modules/ext/jsf-2_2/license.txt
 spec.version.base=1.52.0
diff --git a/enterprise/web.jsfapi/nbproject/org-netbeans-modules-web-jsfapi.sig b/enterprise/web.jsfapi/nbproject/org-netbeans-modules-web-jsfapi.sig
index d0c9778..783da38 100644
--- a/enterprise/web.jsfapi/nbproject/org-netbeans-modules-web-jsfapi.sig
+++ b/enterprise/web.jsfapi/nbproject/org-netbeans-modules-web-jsfapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51
+#Version 1.52
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/web.jsfapi/nbproject/project.properties b/enterprise/web.jsfapi/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/enterprise/web.jsfapi/nbproject/project.properties
+++ b/enterprise/web.jsfapi/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/web.jspparser/nbproject/org-netbeans-modules-web-jspparser.sig b/enterprise/web.jspparser/nbproject/org-netbeans-modules-web-jspparser.sig
index f9dd753..04ac75e 100644
--- a/enterprise/web.jspparser/nbproject/org-netbeans-modules-web-jspparser.sig
+++ b/enterprise/web.jspparser/nbproject/org-netbeans-modules-web-jspparser.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.46
+#Version 3.47
 
 CLSS public abstract interface java.io.Serializable
 
@@ -766,9 +766,9 @@
 meth public java.util.List<java.lang.String> getDependants()
 meth public java.util.List<java.lang.String> getImports()
 meth public java.util.Map getApproxXmlPrefixMapper()
-meth public java.util.Map getTagLibraries()
 meth public java.util.Map getXMLPrefixMapper()
 meth public java.util.Map<java.lang.String,java.lang.String> getJspPrefixMapper()
+meth public java.util.Map<java.lang.String,javax.servlet.jsp.tagext.TagLibraryInfo> getTagLibraries()
 meth public javax.servlet.jsp.tagext.TagInfo getTagInfo()
 meth public javax.servlet.jsp.tagext.TagLibraryInfo getTaglib(java.lang.String)
 meth public org.netbeans.modules.web.jsps.parserapi.PageInfo$BeanData[] getBeans()
diff --git a/enterprise/web.jspparser/nbproject/project.properties b/enterprise/web.jspparser/nbproject/project.properties
index 1799908..74730e6 100644
--- a/enterprise/web.jspparser/nbproject/project.properties
+++ b/enterprise/web.jspparser/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 extsrc.cp.extra=external/generated-glassfish-jspparser-4.0.jar
 
diff --git a/enterprise/web.jspparser/src/org/netbeans/modules/web/jspparser/ParserServletContext.java b/enterprise/web.jspparser/src/org/netbeans/modules/web/jspparser/ParserServletContext.java
index b026d33..9370f26 100644
--- a/enterprise/web.jspparser/src/org/netbeans/modules/web/jspparser/ParserServletContext.java
+++ b/enterprise/web.jspparser/src/org/netbeans/modules/web/jspparser/ParserServletContext.java
@@ -462,7 +462,7 @@
         } catch (DataObjectNotFoundException e) {
             LOGGER.log(Level.INFO, null, e);
         }
-        if (ec != null && (ec instanceof CloneableEditorSupport)) {
+        if ((ec instanceof CloneableEditorSupport)) {
             try {
                 result = ((CloneableEditorSupport) ec).getInputStream();
             } catch (IOException e) {
@@ -520,6 +520,7 @@
      *
      * @deprecated This method has been deprecated with no replacement
      */
+    @Deprecated
     public Servlet getServlet(String name) throws ServletException {
         
         return (null);
@@ -542,6 +543,7 @@
      *
      * @deprecated This method has been deprecated with no replacement
      */
+    @Deprecated
     public Enumeration getServletNames() {
         
         return (new Vector().elements());
@@ -554,6 +556,7 @@
      *
      * @deprecated This method has been deprecated with no replacement
      */
+    @Deprecated
     public Enumeration getServlets() {
         
         return (new Vector().elements());
@@ -579,6 +582,7 @@
      *
      * @deprecated Use log(String,Throwable) instead
      */
+    @Deprecated
     public void log(Exception exception, String message) {
         
         log(message, exception);
diff --git a/enterprise/web.jspparser/test/unit/data/emptyWebProject/nbproject/project.properties b/enterprise/web.jspparser/test/unit/data/emptyWebProject/nbproject/project.properties
index 29c16ed..b0b72b0 100644
--- a/enterprise/web.jspparser/test/unit/data/emptyWebProject/nbproject/project.properties
+++ b/enterprise/web.jspparser/test/unit/data/emptyWebProject/nbproject/project.properties
@@ -28,7 +28,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.kit/nbproject/project.properties b/enterprise/web.kit/nbproject/project.properties
index 75b22af..083b5d5 100644
--- a/enterprise/web.kit/nbproject/project.properties
+++ b/enterprise/web.kit/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 test.config.stable.includes=**/WebProjectSuite.class
diff --git a/enterprise/web.kit/test/qa-functional/data/WebApplication1.4/nbproject/project.properties b/enterprise/web.kit/test/qa-functional/data/WebApplication1.4/nbproject/project.properties
index e9dd221..d9e85f7 100644
--- a/enterprise/web.kit/test/qa-functional/data/WebApplication1.4/nbproject/project.properties
+++ b/enterprise/web.kit/test/qa-functional/data/WebApplication1.4/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.monitor/serversrc/org/netbeans/modules/web/monitor/server/MonitorFilter.java b/enterprise/web.monitor/serversrc/org/netbeans/modules/web/monitor/server/MonitorFilter.java
index e5e1c35..66ec4d7 100644
--- a/enterprise/web.monitor/serversrc/org/netbeans/modules/web/monitor/server/MonitorFilter.java
+++ b/enterprise/web.monitor/serversrc/org/netbeans/modules/web/monitor/server/MonitorFilter.java
@@ -634,7 +634,7 @@
 	if(debug) log ("handleDispatchBefore: start");//NOI18N
 
 	Object w  = req.getAttribute(attNameRequest); 
-	if(w == null || !(w instanceof MonitorRequestWrapper)) { 
+	if(!(w instanceof MonitorRequestWrapper)) {
 	    return; 
 	} 
 	// get the dispatch data 
@@ -668,7 +668,7 @@
 	if(debug) log ("handleDispatchedAfter()");//NOI18N
 
 	Object w  = req.getAttribute(attNameRequest); 
-	if(w == null || !(w instanceof MonitorRequestWrapper)) { 
+	if(!(w instanceof MonitorRequestWrapper)) {
 	    return; 
 	} 
 
diff --git a/enterprise/web.monitor/src/org/netbeans/modules/web/monitor/data/RequestAttributesOut.java b/enterprise/web.monitor/src/org/netbeans/modules/web/monitor/data/RequestAttributesOut.java
index ec4ee4b..89b3dc0 100644
--- a/enterprise/web.monitor/src/org/netbeans/modules/web/monitor/data/RequestAttributesOut.java
+++ b/enterprise/web.monitor/src/org/netbeans/modules/web/monitor/data/RequestAttributesOut.java
@@ -32,6 +32,7 @@
 
 import java.beans.PropertyChangeListener;
 import java.util.Hashtable;
+import java.util.Map;
 import java.util.Vector;
 
 import org.netbeans.modules.schema2beans.AttrProp;
@@ -91,11 +92,11 @@
 	return (Param[])this.getValues(PARAM);
     }
 
-    public Hashtable getHashtable() {
+    public Map<String, String> getHashtable() {
 
 	Param[] attributes =  (Param[])this.getValues(PARAM);
 	int numAttributes = attributes.length;
-	Hashtable ht = new Hashtable(numAttributes);
+	Map<String, String> ht = new Hashtable<>(numAttributes);
 	
 	for(int i=0; i<numAttributes; ++i) {
 	    String name =  attributes[i].getAttributeValue("name");  // NOI18N
diff --git a/enterprise/web.primefaces/nbproject/project.properties b/enterprise/web.primefaces/nbproject/project.properties
index b15eff4..f58bb44 100644
--- a/enterprise/web.primefaces/nbproject/project.properties
+++ b/enterprise/web.primefaces/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 release.external/primefaces-5.0.jar=modules/ext/primefaces/primefaces-5.0.jar
diff --git a/enterprise/web.primefaces/src/org/netbeans/modules/web/primefaces/ui/PrimefacesCustomizerPanel.java b/enterprise/web.primefaces/src/org/netbeans/modules/web/primefaces/ui/PrimefacesCustomizerPanel.java
index 4d727fb..2f6f6d1 100644
--- a/enterprise/web.primefaces/src/org/netbeans/modules/web/primefaces/ui/PrimefacesCustomizerPanel.java
+++ b/enterprise/web.primefaces/src/org/netbeans/modules/web/primefaces/ui/PrimefacesCustomizerPanel.java
@@ -120,7 +120,7 @@
      */
     public Library getPrimefacesLibrary() {
         Object selectedItem = primefacesLibrariesComboBox.getSelectedItem();
-        if (selectedItem != null && selectedItem instanceof Library) {
+        if (selectedItem instanceof Library) {
             return (Library) selectedItem;
         }
         return null;
diff --git a/enterprise/web.project/nbproject/org-netbeans-modules-web-project.sig b/enterprise/web.project/nbproject/org-netbeans-modules-web-project.sig
index 129619d..2b2c129 100644
--- a/enterprise/web.project/nbproject/org-netbeans-modules-web-project.sig
+++ b/enterprise/web.project/nbproject/org-netbeans-modules-web-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.91.0
+#Version 1.92.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModuleProvider.java b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModuleProvider.java
index 931c744..af36099 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModuleProvider.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModuleProvider.java
@@ -32,7 +32,7 @@
 
     public WebModule findWebModule (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof WebProject) {
+        if (project instanceof WebProject) {
             return ((WebProject) project).getAPIWebModule();
         }
         return null;
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebServicesSupportProvider.java b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebServicesSupportProvider.java
index c49ed5c..a8bcafd 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebServicesSupportProvider.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebServicesSupportProvider.java
@@ -44,7 +44,7 @@
 
     public WebServicesSupport findWebServicesSupport (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof WebProject) {
+        if (project instanceof WebProject) {
             return ((WebProject) project).getAPIWebServicesSupport();
         }
         return null;
@@ -52,7 +52,7 @@
 
     public WebServicesClientSupport findWebServicesClientSupport (FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof WebProject) {
+        if (project instanceof WebProject) {
             return ((WebProject) project).getAPIWebServicesClientSupport();
         }
         return null;
@@ -60,7 +60,7 @@
 
     public JAXWSSupport findJAXWSSupport(FileObject file) {
         Project project = FileOwnerQuery.getOwner (file);
-        if (project != null && project instanceof WebProject) {
+        if (project instanceof WebProject) {
             return ((WebProject) project).getAPIJAXWSSupport();
         }
         return null;
@@ -68,7 +68,7 @@
     
     public JAXWSClientSupport findJAXWSClientSupport(FileObject file) {
         Project project = FileOwnerQuery.getOwner(file);
-        if (project != null && project instanceof WebProject) {
+        if (project instanceof WebProject) {
             return ((WebProject) project).getAPIJAXWSClientSupport();
         }
         return null;
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/api/WebProjectCreateData.java b/enterprise/web.project/src/org/netbeans/modules/web/project/api/WebProjectCreateData.java
index 3573ef6..d18f9d7 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/api/WebProjectCreateData.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/api/WebProjectCreateData.java
@@ -128,7 +128,8 @@
      * Gets Java EE version
      * @return Java EE version
      * @deprecated
-     */    
+     */
+    @Deprecated
     public String getJavaEEVersion() {
         return getJavaEEProfile().toPropertiesString();
     }
@@ -137,7 +138,8 @@
      * Sets Java EE version
      * @param javaEEVersion Java EE version. Cannot be null.
      * @deprecated
-     */    
+     */
+    @Deprecated
     public void setJavaEEVersion(String javaEEVersion) {
         setJavaEEProfile(Profile.fromPropertiesString(javaEEVersion));
     }
diff --git a/enterprise/web.project/test/unit/data/projects/WebApplication59055/nbproject/project.properties b/enterprise/web.project/test/unit/data/projects/WebApplication59055/nbproject/project.properties
index 60260c3..460f314 100644
--- a/enterprise/web.project/test/unit/data/projects/WebApplication59055/nbproject/project.properties
+++ b/enterprise/web.project/test/unit/data/projects/WebApplication59055/nbproject/project.properties
@@ -27,7 +27,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/web.refactoring/nbproject/project.properties b/enterprise/web.refactoring/nbproject/project.properties
index 3e08cc0..38e1ab7 100644
--- a/enterprise/web.refactoring/nbproject/project.properties
+++ b/enterprise/web.refactoring/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 spec.version.base=1.45.0
diff --git a/enterprise/web.struts/nbproject/project.properties b/enterprise/web.struts/nbproject/project.properties
index 82fed8e..1e1f252 100644
--- a/enterprise/web.struts/nbproject/project.properties
+++ b/enterprise/web.struts/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 spec.version.base=1.52.0
 
 extra.module.files=\
diff --git a/enterprise/web.struts/src/org/netbeans/modules/web/struts/StrutsConfigUtilities.java b/enterprise/web.struts/src/org/netbeans/modules/web/struts/StrutsConfigUtilities.java
index e5ed52d..a92fca5 100644
--- a/enterprise/web.struts/src/org/netbeans/modules/web/struts/StrutsConfigUtilities.java
+++ b/enterprise/web.struts/src/org/netbeans/modules/web/struts/StrutsConfigUtilities.java
@@ -111,7 +111,7 @@
                         } catch (DataObjectNotFoundException e){
                             dOb = null;
                         }
-                        if (dOb !=null && dOb instanceof StrutsConfigDataObject){
+                        if (dOb instanceof StrutsConfigDataObject){
                             StrutsConfigDataObject con = (StrutsConfigDataObject)dOb;
                             // the conf file is not in any module (is not declared in the web.xml)
                             try{
@@ -449,7 +449,7 @@
         try {
             while (resource == null && index < files.length){
                 configDO = DataObject.find(files[index]);
-                if (configDO != null && configDO instanceof StrutsConfigDataObject){
+                if (configDO instanceof StrutsConfigDataObject){
                     StrutsConfig strutsConfig = ((StrutsConfigDataObject)configDO).getStrutsConfig();
                     // we need to chech, whether the config is parseable
                     if (strutsConfig != null){
diff --git a/enterprise/web.struts/src/org/netbeans/modules/web/struts/editor/StrutsConfigHyperlinkProvider.java b/enterprise/web.struts/src/org/netbeans/modules/web/struts/editor/StrutsConfigHyperlinkProvider.java
index f258e09..34c593b 100644
--- a/enterprise/web.struts/src/org/netbeans/modules/web/struts/editor/StrutsConfigHyperlinkProvider.java
+++ b/enterprise/web.struts/src/org/netbeans/modules/web/struts/editor/StrutsConfigHyperlinkProvider.java
@@ -21,7 +21,9 @@
 import java.awt.Toolkit;
 import java.io.IOException;
 import java.util.Hashtable;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.lang.model.element.TypeElement;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.JTextComponent;
@@ -55,14 +57,14 @@
 public class StrutsConfigHyperlinkProvider implements HyperlinkProvider {
     
     private static boolean debug = false;
-    private static Hashtable hyperlinkTable;
+    private static Map<String, Integer> hyperlinkTable;
     
     private final int JAVA_CLASS = 0;
     private final int FORM_NAME = 1;
     private final int RESOURCE_PATH = 2;
     
     {
-        hyperlinkTable = new Hashtable();
+        hyperlinkTable = new Hashtable<>();
         hyperlinkTable.put("data-source#className", new Integer(JAVA_CLASS));   //NOI18N
         hyperlinkTable.put("data-source#type", new Integer(JAVA_CLASS));        //NOI18N
         hyperlinkTable.put("form-beans#type", new Integer(JAVA_CLASS));         //NOI18N
diff --git a/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/ActionIterator.java b/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/ActionIterator.java
index d60dc8c..84785ca 100644
--- a/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/ActionIterator.java
+++ b/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/ActionIterator.java
@@ -98,7 +98,7 @@
         // Creating steps.
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps (beforeSteps, panels);
diff --git a/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/FormBeanIterator.java b/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/FormBeanIterator.java
index b58992d..042ac76 100644
--- a/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/FormBeanIterator.java
+++ b/enterprise/web.struts/src/org/netbeans/modules/web/struts/wizards/FormBeanIterator.java
@@ -103,7 +103,7 @@
         // Creating steps.
         Object prop = wizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps (beforeSteps, panels);
diff --git a/enterprise/weblogic.common/nbproject/org-netbeans-modules-weblogic-common.sig b/enterprise/weblogic.common/nbproject/org-netbeans-modules-weblogic-common.sig
index c4252b9..0cd5124 100644
--- a/enterprise/weblogic.common/nbproject/org-netbeans-modules-weblogic-common.sig
+++ b/enterprise/weblogic.common/nbproject/org-netbeans-modules-weblogic-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.31
+#Version 1.32
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/weblogic.common/nbproject/project.properties b/enterprise/weblogic.common/nbproject/project.properties
index 495dbbf..e12549d 100644
--- a/enterprise/weblogic.common/nbproject/project.properties
+++ b/enterprise/weblogic.common/nbproject/project.properties
@@ -17,5 +17,5 @@
 
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/websocket/nbproject/project.properties b/enterprise/websocket/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/enterprise/websocket/nbproject/project.properties
+++ b/enterprise/websocket/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig b/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
index 724fe5a..79da787 100644
--- a/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
+++ b/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public java.lang.Object
 cons public init()
@@ -119,8 +119,8 @@
 meth public java.lang.String getNewFeatures()
 meth public java.lang.String getServiceName()
 meth public java.lang.String toString()
-meth public java.util.List getAvailableFeatures()
-meth public java.util.List getImportantFeatures()
+meth public java.util.List<java.lang.String> getAvailableFeatures()
+meth public java.util.List<java.lang.String> getImportantFeatures()
 meth public org.netbeans.modules.websvc.api.client.ClientStubDescriptor getClientStubDescriptor()
 meth public void setNewFeatures(java.lang.String)
 meth public void setOptions(boolean[])
@@ -192,7 +192,7 @@
 meth public abstract java.lang.String addServiceClient(java.lang.String,java.lang.String,java.lang.String,boolean)
 meth public abstract java.lang.String getServiceRefName(org.openide.nodes.Node)
 meth public abstract java.net.URL getCatalog()
-meth public abstract java.util.List getServiceClients()
+meth public abstract java.util.List<org.netbeans.modules.websvc.api.jaxws.project.config.Client> getServiceClients()
 meth public abstract org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
 meth public abstract org.openide.filesystems.FileObject getBindingsFolderForClient(java.lang.String,boolean)
 meth public abstract org.openide.filesystems.FileObject getLocalWsdlFolderForClient(java.lang.String,boolean)
@@ -229,7 +229,7 @@
 meth public java.lang.String getServiceRefName(org.openide.nodes.Node)
 meth public java.lang.String getWsdlUrl(java.lang.String)
 meth public java.net.URL getCatalog()
-meth public java.util.List getServiceClients()
+meth public java.util.List<org.netbeans.modules.websvc.api.jaxws.project.config.Client> getServiceClients()
 meth public org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
 meth public org.openide.filesystems.FileObject getBindingsFolderForClient(java.lang.String,boolean)
 meth public org.openide.filesystems.FileObject getLocalWsdlFolderForClient(java.lang.String,boolean)
diff --git a/enterprise/websvc.core/nbproject/org-netbeans-modules-websvc-core.sig b/enterprise/websvc.core/nbproject/org-netbeans-modules-websvc-core.sig
index 770e9c5..e208ae4 100644
--- a/enterprise/websvc.core/nbproject/org-netbeans-modules-websvc-core.sig
+++ b/enterprise/websvc.core/nbproject/org-netbeans-modules-websvc-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61.0
+#Version 1.62.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/client/wizard/WebServiceClientWizardIterator.java b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/client/wizard/WebServiceClientWizardIterator.java
index 9421269..c098238 100644
--- a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/client/wizard/WebServiceClientWizardIterator.java
+++ b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/client/wizard/WebServiceClientWizardIterator.java
@@ -73,7 +73,7 @@
 
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = JaxWsUtils.createSteps (beforeSteps, panels);
diff --git a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceFromWSDLWizardIterator.java b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceFromWSDLWizardIterator.java
index ed0ce15..13af581 100644
--- a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceFromWSDLWizardIterator.java
+++ b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceFromWSDLWizardIterator.java
@@ -123,7 +123,7 @@
         // Creating steps.
         Object prop = this.wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceWizardIterator.java b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceWizardIterator.java
index d1b7b02..1b6d5ad 100644
--- a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceWizardIterator.java
+++ b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/NewWebServiceWizardIterator.java
@@ -125,7 +125,7 @@
         // Creating steps.
         Object prop = this.wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceFromWSDLPanel.java b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceFromWSDLPanel.java
index 0500fd2..693fdf9 100644
--- a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceFromWSDLPanel.java
+++ b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceFromWSDLPanel.java
@@ -331,7 +331,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(PortChooser.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         dd.setValid(((Boolean) newvalue));
                     }
                 }
diff --git a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceTypePanel.java b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceTypePanel.java
index feb6c42..4a61b07 100644
--- a/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceTypePanel.java
+++ b/enterprise/websvc.core/src/org/netbeans/modules/websvc/core/dev/wizard/WebServiceTypePanel.java
@@ -254,7 +254,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(EjbChooser.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         dd.setValid(((Boolean) newvalue));
                     }
                 }
diff --git a/enterprise/websvc.core/test/unit/data/projects/J2SE_16/nbproject/project.properties b/enterprise/websvc.core/test/unit/data/projects/J2SE_16/nbproject/project.properties
index 60c4ab4..196f335 100644
--- a/enterprise/websvc.core/test/unit/data/projects/J2SE_16/nbproject/project.properties
+++ b/enterprise/websvc.core/test/unit/data/projects/J2SE_16/nbproject/project.properties
@@ -20,7 +20,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.customization/nbproject/project.properties b/enterprise/websvc.customization/nbproject/project.properties
index c3a5006..dbb5b58 100644
--- a/enterprise/websvc.customization/nbproject/project.properties
+++ b/enterprise/websvc.customization/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 spec.version.base=1.45.0
diff --git a/enterprise/websvc.design/nbproject/org-netbeans-modules-websvc-design.sig b/enterprise/websvc.design/nbproject/org-netbeans-modules-websvc-design.sig
index 88430ec..061c9c4 100644
--- a/enterprise/websvc.design/nbproject/org-netbeans-modules-websvc-design.sig
+++ b/enterprise/websvc.design/nbproject/org-netbeans-modules-websvc-design.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/websvc.jaxws.lightapi/nbproject/org-netbeans-modules-websvc-jaxws-lightapi.sig b/enterprise/websvc.jaxws.lightapi/nbproject/org-netbeans-modules-websvc-jaxws-lightapi.sig
index 55a5330..f74db39 100644
--- a/enterprise/websvc.jaxws.lightapi/nbproject/org-netbeans-modules-websvc-jaxws-lightapi.sig
+++ b/enterprise/websvc.jaxws.lightapi/nbproject/org-netbeans-modules-websvc-jaxws-lightapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39
+#Version 1.40
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/enterprise/websvc.jaxws.lightapi/nbproject/project.properties b/enterprise/websvc.jaxws.lightapi/nbproject/project.properties
index 4a1d8ec..c1be571 100644
--- a/enterprise/websvc.jaxws.lightapi/nbproject/project.properties
+++ b/enterprise/websvc.jaxws.lightapi/nbproject/project.properties
@@ -17,4 +17,4 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
diff --git a/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig b/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
index 47341fe..bbc9be0 100644
--- a/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
+++ b/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.43
+#Version 1.44
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/enterprise/websvc.jaxwsmodel/nbproject/org-netbeans-modules-websvc-jaxwsmodel.sig b/enterprise/websvc.jaxwsmodel/nbproject/org-netbeans-modules-websvc-jaxwsmodel.sig
index 291e606..6f3b662 100644
--- a/enterprise/websvc.jaxwsmodel/nbproject/org-netbeans-modules-websvc-jaxwsmodel.sig
+++ b/enterprise/websvc.jaxwsmodel/nbproject/org-netbeans-modules-websvc-jaxwsmodel.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/websvc.kit/nbproject/project.properties b/enterprise/websvc.kit/nbproject/project.properties
index 5d5ba3c..6bd1ade 100644
--- a/enterprise/websvc.kit/nbproject/project.properties
+++ b/enterprise/websvc.kit/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 test.timeout=2400000
 
diff --git a/enterprise/websvc.kit/test/qa-functional/data/projects/60_webapp/nbproject/project.properties b/enterprise/websvc.kit/test/qa-functional/data/projects/60_webapp/nbproject/project.properties
index a05c559..36dd390 100644
--- a/enterprise/websvc.kit/test/qa-functional/data/projects/60_webapp/nbproject/project.properties
+++ b/enterprise/websvc.kit/test/qa-functional/data/projects/60_webapp/nbproject/project.properties
@@ -25,7 +25,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.kit/test/qa-functional/data/projects/65_ejbmodule/nbproject/project.properties b/enterprise/websvc.kit/test/qa-functional/data/projects/65_ejbmodule/nbproject/project.properties
index aab00e5..18a1563 100644
--- a/enterprise/websvc.kit/test/qa-functional/data/projects/65_ejbmodule/nbproject/project.properties
+++ b/enterprise/websvc.kit/test/qa-functional/data/projects/65_ejbmodule/nbproject/project.properties
@@ -22,7 +22,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.kit/test/qa-functional/data/projects/Sample/nbproject/project.properties b/enterprise/websvc.kit/test/qa-functional/data/projects/Sample/nbproject/project.properties
index e74b330..e66a21f 100644
--- a/enterprise/websvc.kit/test/qa-functional/data/projects/Sample/nbproject/project.properties
+++ b/enterprise/websvc.kit/test/qa-functional/data/projects/Sample/nbproject/project.properties
@@ -23,7 +23,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.manager/nbproject/org-netbeans-modules-websvc-manager.sig b/enterprise/websvc.manager/nbproject/org-netbeans-modules-websvc-manager.sig
index 333249e..7f3053f 100644
--- a/enterprise/websvc.manager/nbproject/org-netbeans-modules-websvc-manager.sig
+++ b/enterprise/websvc.manager/nbproject/org-netbeans-modules-websvc-manager.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.45
+#Version 1.46
 
 CLSS public abstract interface java.awt.datatransfer.Transferable
 meth public abstract boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor)
diff --git a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ArrayTypeTreeNode.java b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ArrayTypeTreeNode.java
index dc870f4..e040253 100644
--- a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ArrayTypeTreeNode.java
+++ b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ArrayTypeTreeNode.java
@@ -58,7 +58,7 @@
         
         // Update the parent node
         DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) this.getParent();
-        if (parentNode != null && parentNode instanceof ParameterTreeNode) {
+        if (parentNode instanceof ParameterTreeNode) {
             ((ParameterTreeNode)parentNode).updateValueFromChildren(data);
         }
     }
diff --git a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ListTypeTreeNode.java b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ListTypeTreeNode.java
index 20aac34..ac8afd5 100644
--- a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ListTypeTreeNode.java
+++ b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/ListTypeTreeNode.java
@@ -60,7 +60,7 @@
         }
         
         DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) this.getParent();
-        if (parentNode != null && parentNode instanceof ParameterTreeNode) {
+        if (parentNode instanceof ParameterTreeNode) {
             ((ParameterTreeNode)parentNode).updateValueFromChildren(data);
         }
     }
diff --git a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/StructureTypeTreeNode.java b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/StructureTypeTreeNode.java
index 036b47f..090adab 100644
--- a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/StructureTypeTreeNode.java
+++ b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/StructureTypeTreeNode.java
@@ -62,7 +62,7 @@
          * If this node is a member of a structure type, update it's parent.
          */
         DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) this.getParent();
-        if (parentNode != null && parentNode instanceof ParameterTreeNode) {
+        if (parentNode instanceof ParameterTreeNode) {
             ((ParameterTreeNode)parentNode).updateValueFromChildren(data);
             
         }
diff --git a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/TypeRowModel.java b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/TypeRowModel.java
index 4d209d3..b785473 100644
--- a/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/TypeRowModel.java
+++ b/enterprise/websvc.manager/src/org/netbeans/modules/websvc/manager/ui/TypeRowModel.java
@@ -123,14 +123,14 @@
          */
 
         DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) node.getParent();
-        if(null != parentNode && parentNode instanceof ListTypeTreeNode) {
+        if(parentNode instanceof ListTypeTreeNode) {
             ((ListTypeTreeNode)parentNode).updateValueFromChildren(data);
-        } else if(null != parentNode && parentNode instanceof StructureTypeTreeNode) {
+        } else if(parentNode instanceof StructureTypeTreeNode) {
             /**
              * This type should be a JavaStructureMember
              */
             ((StructureTypeTreeNode)parentNode).updateValueFromChildren(data);
-        } else if(null != parentNode && parentNode instanceof HolderTypeTreeNode) {
+        } else if(parentNode instanceof HolderTypeTreeNode) {
 
             ((HolderTypeTreeNode)parentNode).updateValueFromChildren(data);
         }
diff --git a/enterprise/websvc.owsm/nbproject/project.properties b/enterprise/websvc.owsm/nbproject/project.properties
index f159f61..67d7817 100644
--- a/enterprise/websvc.owsm/nbproject/project.properties
+++ b/enterprise/websvc.owsm/nbproject/project.properties
@@ -16,4 +16,4 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/enterprise/websvc.projectapi/nbproject/org-netbeans-modules-websvc-projectapi.sig b/enterprise/websvc.projectapi/nbproject/org-netbeans-modules-websvc-projectapi.sig
index aa7410a..7f87e8b 100644
--- a/enterprise/websvc.projectapi/nbproject/org-netbeans-modules-websvc-projectapi.sig
+++ b/enterprise/websvc.projectapi/nbproject/org-netbeans-modules-websvc-projectapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39
+#Version 1.40
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/enterprise/websvc.projectapi/nbproject/project.properties b/enterprise/websvc.projectapi/nbproject/project.properties
index 9d16890..cc4f166 100644
--- a/enterprise/websvc.projectapi/nbproject/project.properties
+++ b/enterprise/websvc.projectapi/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 javadoc.arch=${basedir}/arch.xml
 
diff --git a/enterprise/websvc.rest/nbproject/org-netbeans-modules-websvc-rest.sig b/enterprise/websvc.rest/nbproject/org-netbeans-modules-websvc-rest.sig
index 2a5f554..ec52069 100644
--- a/enterprise/websvc.rest/nbproject/org-netbeans-modules-websvc-rest.sig
+++ b/enterprise/websvc.rest/nbproject/org-netbeans-modules-websvc-rest.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JerseyClientWizardIterator.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JerseyClientWizardIterator.java
index cf4ab62..847cd0f 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JerseyClientWizardIterator.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JerseyClientWizardIterator.java
@@ -185,7 +185,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty("WizardPanel_contentData");
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
index 46d9bf5..9958867 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
@@ -117,7 +117,7 @@
         }
 
         Element enclosingElement = element.getEnclosingElement();
-        if ( enclosingElement== null || !(enclosingElement instanceof TypeElement)){
+        if (!(enclosingElement instanceof TypeElement)){
             return false;
         }
         return true;
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/DatabaseResourceWizardIterator.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/DatabaseResourceWizardIterator.java
index 935a438..8ab2e49 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/DatabaseResourceWizardIterator.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/DatabaseResourceWizardIterator.java
@@ -577,7 +577,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig b/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
index 61ed5a0..597a7a4 100644
--- a/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
+++ b/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.53
+#Version 1.54
 
 CLSS public abstract interface java.io.Serializable
 
@@ -330,6 +330,7 @@
 meth public boolean isEESpecWithJaxRS()
 meth public boolean isJakartaEE8()
 meth public boolean isJakartaEE9()
+meth public boolean isJakartaEE91()
 meth public boolean isRestSupportOn()
 meth public boolean isServerGFV2()
 meth public boolean isServerGFV3()
diff --git a/enterprise/websvc.restkit/nbproject/project.properties b/enterprise/websvc.restkit/nbproject/project.properties
index e671129..f750ab9 100644
--- a/enterprise/websvc.restkit/nbproject/project.properties
+++ b/enterprise/websvc.restkit/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 test.timeout=2400000
 
diff --git a/enterprise/websvc.restkit/test/qa-functional/data/projects/NodesSample/nbproject/project.properties b/enterprise/websvc.restkit/test/qa-functional/data/projects/NodesSample/nbproject/project.properties
index c189e0f..1c7b511 100644
--- a/enterprise/websvc.restkit/test/qa-functional/data/projects/NodesSample/nbproject/project.properties
+++ b/enterprise/websvc.restkit/test/qa-functional/data/projects/NodesSample/nbproject/project.properties
@@ -46,7 +46,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.restkit/test/qa-functional/data/projects/TestClientTestApp/nbproject/project.properties b/enterprise/websvc.restkit/test/qa-functional/data/projects/TestClientTestApp/nbproject/project.properties
index 6d017a4..4bef389 100644
--- a/enterprise/websvc.restkit/test/qa-functional/data/projects/TestClientTestApp/nbproject/project.properties
+++ b/enterprise/websvc.restkit/test/qa-functional/data/projects/TestClientTestApp/nbproject/project.properties
@@ -34,7 +34,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.restkit/test/qa-functional/src/org/netbeans/modules/ws/qaf/rest/JComponentByLabelFinder.java b/enterprise/websvc.restkit/test/qa-functional/src/org/netbeans/modules/ws/qaf/rest/JComponentByLabelFinder.java
index 18dfd28..9ea4c13 100644
--- a/enterprise/websvc.restkit/test/qa-functional/src/org/netbeans/modules/ws/qaf/rest/JComponentByLabelFinder.java
+++ b/enterprise/websvc.restkit/test/qa-functional/src/org/netbeans/modules/ws/qaf/rest/JComponentByLabelFinder.java
@@ -42,7 +42,7 @@
         if (c instanceof JComponent) {
             JComponent jc = (JComponent) c;
             Object o = jc.getClientProperty("labeledBy"); //NOI18N
-            if (o != null && o instanceof JLabel) {
+            if (o instanceof JLabel) {
                 JLabel lbl = (JLabel) o;
                 return label.equals(lbl.getText().trim());
             }
diff --git a/enterprise/websvc.restlib/nbproject/org-netbeans-modules-websvc-restlib.sig b/enterprise/websvc.restlib/nbproject/org-netbeans-modules-websvc-restlib.sig
index c5d263b..ed8cfe8 100644
--- a/enterprise/websvc.restlib/nbproject/org-netbeans-modules-websvc-restlib.sig
+++ b/enterprise/websvc.restlib/nbproject/org-netbeans-modules-websvc-restlib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.25
+#Version 2.26
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/enterprise/websvc.saas.codegen.j2ee/nbproject/project.properties b/enterprise/websvc.saas.codegen.j2ee/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/enterprise/websvc.saas.codegen.j2ee/nbproject/project.properties
+++ b/enterprise/websvc.saas.codegen.j2ee/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/websvc.utilities/nbproject/org-netbeans-modules-websvc-utilities.sig b/enterprise/websvc.utilities/nbproject/org-netbeans-modules-websvc-utilities.sig
index 82be414..e1fda9d 100644
--- a/enterprise/websvc.utilities/nbproject/org-netbeans-modules-websvc-utilities.sig
+++ b/enterprise/websvc.utilities/nbproject/org-netbeans-modules-websvc-utilities.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/enterprise/websvc.utilities/nbproject/project.properties b/enterprise/websvc.utilities/nbproject/project.properties
index f8de6a0..e184a52 100644
--- a/enterprise/websvc.utilities/nbproject/project.properties
+++ b/enterprise/websvc.utilities/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 
 is.autoload=true
diff --git a/enterprise/websvc.utilities/test/unit/data/JavaApp/nbproject/project.properties b/enterprise/websvc.utilities/test/unit/data/JavaApp/nbproject/project.properties
index 106bd33..ef0beca 100644
--- a/enterprise/websvc.utilities/test/unit/data/JavaApp/nbproject/project.properties
+++ b/enterprise/websvc.utilities/test/unit/data/JavaApp/nbproject/project.properties
@@ -22,7 +22,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/enterprise/websvc.websvcapi/nbproject/org-netbeans-modules-websvc-websvcapi.sig b/enterprise/websvc.websvcapi/nbproject/org-netbeans-modules-websvc-websvcapi.sig
index ea8227a..8403141 100644
--- a/enterprise/websvc.websvcapi/nbproject/org-netbeans-modules-websvc-websvcapi.sig
+++ b/enterprise/websvc.websvcapi/nbproject/org-netbeans-modules-websvc-websvcapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public java.lang.Object
 cons public init()
@@ -31,7 +31,7 @@
 meth public java.lang.String generateImplementationBean(java.lang.String,org.openide.filesystems.FileObject,org.netbeans.api.project.Project,java.lang.String) throws java.io.IOException
 meth public java.lang.String getArchiveDDFolderName()
 meth public java.lang.String getImplementationBean(java.lang.String)
-meth public java.util.List getServices()
+meth public java.util.List<org.netbeans.modules.websvc.api.webservices.WsCompileEditorSupport$ServiceSettings> getServices()
 meth public org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
 meth public org.netbeans.spi.project.support.ant.ReferenceHelper getReferenceHelper()
 meth public org.openide.filesystems.FileObject getWebservicesDD()
@@ -127,7 +127,7 @@
 meth public abstract java.lang.String generateImplementationBean(java.lang.String,org.openide.filesystems.FileObject,org.netbeans.api.project.Project,java.lang.String) throws java.io.IOException
 meth public abstract java.lang.String getArchiveDDFolderName()
 meth public abstract java.lang.String getImplementationBean(java.lang.String)
-meth public abstract java.util.List getServices()
+meth public abstract java.util.List<org.netbeans.modules.websvc.api.webservices.WsCompileEditorSupport$ServiceSettings> getServices()
 meth public abstract org.netbeans.api.java.classpath.ClassPath getClassPath()
 meth public abstract org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
 meth public abstract org.netbeans.spi.project.support.ant.ReferenceHelper getReferenceHelper()
diff --git a/enterprise/websvc.wsstackapi/nbproject/org-netbeans-modules-websvc-wsstackapi.sig b/enterprise/websvc.wsstackapi/nbproject/org-netbeans-modules-websvc-wsstackapi.sig
index fc57079..7f0ca95 100644
--- a/enterprise/websvc.wsstackapi/nbproject/org-netbeans-modules-websvc-wsstackapi.sig
+++ b/enterprise/websvc.wsstackapi/nbproject/org-netbeans-modules-websvc-wsstackapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.40
+#Version 1.41
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/DescriptionStep.java b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/DescriptionStep.java
index c0a25a1..5c8d21c 100644
--- a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/DescriptionStep.java
+++ b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/DescriptionStep.java
@@ -193,7 +193,7 @@
     public void readSettings (WizardDescriptor settings) {
         wd = settings;
         Object o = settings.getProperty (FeatureOnDemandWizardIterator.CHOSEN_TEMPLATE);
-        assert o != null && o instanceof FileObject : o + " is not null and instanceof FileObject.";
+        assert o instanceof FileObject : o + " is not null and instanceof FileObject.";
         FileObject fileObject = (FileObject) o;
         info = FoDLayersProvider.getInstance ().whichProvides(fileObject);
         assert info != null : "No info for " + fileObject;
@@ -214,7 +214,7 @@
 
     private void waitForDelegateWizard (final boolean fire) {
         Object o = wd.getProperty (FeatureOnDemandWizardIterator.CHOSEN_TEMPLATE);
-        assert o != null && o instanceof FileObject :
+        assert o instanceof FileObject :
             o + " is not null and instanceof FileObject";
         String templateResource = ((FileObject) o).getPath ();
         FileObject fo = null;
@@ -383,7 +383,7 @@
             };
         }
 
-        assert o != null && o instanceof WizardDescriptor.InstantiatingIterator :
+        assert o instanceof InstantiatingIterator :
             o + " is not null and instanceof WizardDescriptor.InstantiatingIterator";
         return (WizardDescriptor.InstantiatingIterator<?>)o;
     }
diff --git a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/EnableStep.java b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/EnableStep.java
index 9464af2..1dd7a9c 100644
--- a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/EnableStep.java
+++ b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/EnableStep.java
@@ -126,7 +126,7 @@
             o + " is instanceof Collection<UpdateElement> or null.";
         forEnable = ((Collection<UpdateElement>) o);
         Object templateO = settings.getProperty (FeatureOnDemandWizardIterator.CHOSEN_TEMPLATE);
-        assert templateO != null && templateO instanceof FileObject : templateO + " is not null and instanceof FileObject.";
+        assert templateO instanceof FileObject : templateO + " is not null and instanceof FileObject.";
         FileObject templateFO = (FileObject) templateO;
         FeatureInfo info = FoDLayersProvider.getInstance().whichProvides(templateFO);
         RequestProcessor.Task t = FeatureManager.getInstance().create(doEnable(info));
@@ -222,7 +222,7 @@
     
     private void waitForDelegateWizard () {
         Object o = wd.getProperty (FeatureOnDemandWizardIterator.CHOSEN_TEMPLATE);
-        assert o != null && o instanceof FileObject :
+        assert o instanceof FileObject :
             o + " is not null and instanceof FileObject";
         final String templateResource = ((FileObject) o).getPath ();
         fo = null;
diff --git a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/FeatureOnDemandWizardIterator.java b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/FeatureOnDemandWizardIterator.java
index e4fedd9..75ec80e 100644
--- a/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/FeatureOnDemandWizardIterator.java
+++ b/ergonomics/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/newproject/FeatureOnDemandWizardIterator.java
@@ -85,7 +85,7 @@
             if (o == null) {
                 o = fo.getAttribute ("templateWizardIterator");
             }
-            assert o != null && o instanceof WizardDescriptor.InstantiatingIterator :
+            assert o instanceof InstantiatingIterator :
                 o + " is not null and instanceof WizardDescriptor.InstantiatingIterator";
             WizardDescriptor.InstantiatingIterator iterator = (WizardDescriptor.InstantiatingIterator) o;
             if (! FeatureOnDemandWizardIterator.class.equals (o.getClass ())) {
diff --git a/ergonomics/performance.ergonomics/nbproject/project.properties b/ergonomics/performance.ergonomics/nbproject/project.properties
index 4d99ea9..2511027 100644
--- a/ergonomics/performance.ergonomics/nbproject/project.properties
+++ b/ergonomics/performance.ergonomics/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 
 test.config.perf.includes=\
diff --git a/extide/gradle.dists/nbproject/project.properties b/extide/gradle.dists/nbproject/project.properties
index 0c0bc24..a3c1531 100644
--- a/extide/gradle.dists/nbproject/project.properties
+++ b/extide/gradle.dists/nbproject/project.properties
@@ -15,7 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-is.eager=true
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
diff --git a/extide/gradle.editor/nbproject/project.properties b/extide/gradle.editor/nbproject/project.properties
index 0c0bc24..a3c1531 100644
--- a/extide/gradle.editor/nbproject/project.properties
+++ b/extide/gradle.editor/nbproject/project.properties
@@ -15,7 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-is.eager=true
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
diff --git a/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliCompletionProvider.java b/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliCompletionProvider.java
index c9dde04..12b544c 100644
--- a/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliCompletionProvider.java
+++ b/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliCompletionProvider.java
@@ -68,6 +68,9 @@
     private static final Pattern PROP_INPUT = Pattern.compile("\\$\\{([\\w.]*)$"); //NOI18N
     private static final String INPUT_TOKEN = "input:"; //NOI18N
     private static final Set<GradleCommandLine.GradleOptionItem> GRADLE_OPTIONS;
+
+    //TODO: Move this one to GradleCommandLine in NetBeans 17
+    public static final String GRADLE_PROJECT_PROPERTY = "gradle-project"; //NOI18N
     
     static {
         Set<GradleCommandLine.GradleOptionItem> all = new HashSet<>();
@@ -105,8 +108,8 @@
                 }
 
                 Project project = null;
-                Object prop = doc.getProperty(Document.StreamDescriptionProperty);
-                if (prop != null && prop instanceof Project) {
+                Object prop = doc.getProperty(GRADLE_PROJECT_PROPERTY);
+                if (prop instanceof Project) {
                     project = (Project) prop;
                 }
                 Matcher tokenMatcher = PROP_INPUT.matcher(filter);
diff --git a/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliEditorKit.java b/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliEditorKit.java
index 88fe888..646ba95 100644
--- a/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliEditorKit.java
+++ b/extide/gradle.editor/src/org/netbeans/modules/gradle/editor/cli/GradleCliEditorKit.java
@@ -19,13 +19,15 @@
 
 package org.netbeans.modules.gradle.editor.cli;
 
+import javax.swing.text.EditorKit;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
 import org.netbeans.modules.editor.NbEditorKit;
 
 /**
  *
  * @author lkishalmi
  */
-
+@MimeRegistration(mimeType = GradleCliEditorKit.MIME_TYPE, service = EditorKit.class)
 public class GradleCliEditorKit extends NbEditorKit {
 
     public static final String MIME_TYPE = "text/x-gradle-cli"; //NOI18N
diff --git a/extide/gradle/apichanges.xml b/extide/gradle/apichanges.xml
index 47013fa..87efe77 100644
--- a/extide/gradle/apichanges.xml
+++ b/extide/gradle/apichanges.xml
@@ -83,6 +83,31 @@
     <!-- ACTUAL CHANGES BEGIN HERE: -->
 
     <changes>
+        <change id="java-runtime-manager">
+            <api name="general"/>
+            <summary>Adding JavaRuntimeManager abstracting the Gradle Runtime from Java Platform</summary>
+            <version major="2" minor="32"/>
+            <date day="13" month="1" year="2023"/>
+            <author login="lkishalmi"/>
+            <compatibility semantic="compatible" addition="yes"/>
+            <description>
+                <p>
+                Introduced a <code><a href="@TOP@/org/netbeans/modules/gradle/spi/execute/JavaRuntimeManager.html">JavaRuntimeManager</a></code> to
+                create abstraction between the necessary runtime that Gradle needs (just a Java home) and the actual JavaPlatform which is provided by
+                the modules in the Java cluster.
+                </p>
+                <p>
+                    JavaRuntime is bound to be the root project of a project tree from now. The ID of the active rintime is stored in the <code>gradle.properties</code>
+                    of the root project under the property name <code>netbeans.hint.jdkPlatform</code>.
+                </p>
+                <p>
+                    There are two new methods provided in <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html">RunUtils</a></code> to get and set the
+                    active runtime of a project.
+                </p>
+            </description>
+            <class package="org.netbeans.modules.gradle.spi.execute" name="JavaRuntimeManager"/>
+            <class package="org.netbeans.modules.gradle.api.execute" name="RunUtils"/>
+        </change>
         <change id="external-tasks">
             <api name="general"/>
             <summary>Representing external tasks</summary>
@@ -91,7 +116,7 @@
             <author login="sdedic"/>
             <compatibility semantic="compatible" addition="yes"/>
             <description>
-                Tasks declared by other projects are marked as 'external'. Tasjs can report their declaring project's path.
+                Tasks declared by other projects are marked as 'external'. Tasks can report their declaring project's path.
             </description>
             <class package="org.netbeans.modules.gradle.api" name="GradleTask"/>
         </change>
diff --git a/extide/gradle/arch.xml b/extide/gradle/arch.xml
index 78d3e8f..c303d76 100644
--- a/extide/gradle/arch.xml
+++ b/extide/gradle/arch.xml
@@ -130,6 +130,13 @@
 
 
  <answer id="exec-property">
+     <api category="devel" group="branding" name="org.netbeans.modules.gradle.api.execute.NetworkProxySettings.allowOverride" type="export">
+         Brand the <code>org.netbeans.modules.gradle.api.execute.NetworkProxySettings.allowOverride</code> key in a 
+         <code>org.netbeans.modules.gradle.api.execute.Bundle</code> file
+         with one of the values <code>true</code> or <code>false</code> to specify whether to offer override of proxies
+         when running Gradle daemon. With <code>false</code>, the user is only given an option to upgrade gradle's configuration files.
+         Since 
+     </api>
      <api category="devel" group="branding" name="org.netbeans.modules.gradle.spi.DEFAULT_REUSE_OUTPUT" type="export">
          Brand the <code>DEFAULT_REUSE_OUTPUT</code> key in a 
          <code>org.netbeans.modules.gradle.spi.Bundle</code> file
diff --git a/extide/gradle/manifest.mf b/extide/gradle/manifest.mf
index 197c9fd..0f214ef 100644
--- a/extide/gradle/manifest.mf
+++ b/extide/gradle/manifest.mf
@@ -1,6 +1,6 @@
 Manifest-Version: 1.0
-AutoUpdate-Show-In-Client: false
+AutoUpdate-Show-In-Client: true
 OpenIDE-Module: org.netbeans.modules.gradle/2
 OpenIDE-Module-Layer: org/netbeans/modules/gradle/layer.xml
 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/gradle/Bundle.properties
-OpenIDE-Module-Specification-Version: 2.30
+OpenIDE-Module-Specification-Version: 2.32
diff --git a/extide/gradle/nbproject/org-netbeans-modules-gradle.sig b/extide/gradle/nbproject/org-netbeans-modules-gradle.sig
index b295ee4..4ed6c48 100644
--- a/extide/gradle/nbproject/org-netbeans-modules-gradle.sig
+++ b/extide/gradle/nbproject/org-netbeans-modules-gradle.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.25
+#Version 2.29
 
 CLSS public abstract interface java.io.Serializable
 
@@ -72,6 +72,48 @@
 intf java.lang.annotation.Annotation
 meth public abstract java.lang.annotation.ElementType[] value()
 
+CLSS public final org.netbeans.modules.gradle.api.BuildPropertiesSupport
+fld public final static java.lang.String EXTENSION = "extension"
+fld public final static java.lang.String TASK = "task"
+innr public final static !enum PropertyKind
+innr public final static Property
+meth public java.lang.Iterable<org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property> items(org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property,java.lang.String)
+meth public java.util.Collection<java.lang.String> keys(org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property)
+meth public org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property findExtensionProperty(java.lang.String,java.lang.String)
+meth public org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property findTaskProperty(java.lang.String,java.lang.String)
+meth public org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property get(org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property,java.lang.String,java.lang.String)
+meth public static org.netbeans.modules.gradle.api.BuildPropertiesSupport get(org.netbeans.api.project.Project)
+supr java.lang.Object
+hfds impls
+
+CLSS public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$Property
+ outer org.netbeans.modules.gradle.api.BuildPropertiesSupport
+cons public init(java.lang.Object,java.lang.String,java.lang.String,org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind,java.lang.String,java.lang.String)
+meth public boolean isList()
+meth public boolean isMap()
+meth public java.lang.Object getId()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public java.lang.String getName()
+meth public java.lang.String getScope()
+meth public java.lang.String getStringValue()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+meth public java.lang.String getType()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+meth public org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind getKind()
+supr java.lang.Object
+hfds id,kind,name,scope,type,value
+
+CLSS public final static !enum org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind
+ outer org.netbeans.modules.gradle.api.BuildPropertiesSupport
+fld public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind EXISTS
+fld public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind LIST
+fld public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind MAP
+fld public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind PRIMITIVE
+fld public final static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind STRUCTURE
+meth public static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind valueOf(java.lang.String)
+meth public static org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind[] values()
+supr java.lang.Enum<org.netbeans.modules.gradle.api.BuildPropertiesSupport$PropertyKind>
+
 CLSS public final org.netbeans.modules.gradle.api.GradleBaseProject
 fld public final static java.lang.String PRIVATE_TASK_GROUP = "<private>"
 intf java.io.Serializable
@@ -81,9 +123,13 @@
 meth public boolean isRoot()
 meth public boolean isRootOf(org.netbeans.modules.gradle.api.GradleBaseProject)
 meth public boolean isSibling(org.netbeans.modules.gradle.api.GradleBaseProject)
+meth public boolean isTaskInstanceOf(java.lang.String,java.lang.String)
+meth public boolean isVersionSpecified()
 meth public java.io.File getBuildDir()
 meth public java.io.File getProjectDir()
 meth public java.io.File getRootDir()
+meth public java.lang.String findProjectGav(java.lang.String)
+ anno 1 org.netbeans.api.annotations.common.NonNull()
 meth public java.lang.String getDescription()
 meth public java.lang.String getDisplayName()
 meth public java.lang.String getGroup()
@@ -95,6 +141,7 @@
 meth public java.lang.String getStatus()
 meth public java.lang.String getVersion()
 meth public java.lang.String toString()
+meth public java.util.List<org.netbeans.modules.gradle.api.GradleTask> getTaskPredecessors(org.netbeans.modules.gradle.api.GradleTask,boolean)
 meth public java.util.List<org.netbeans.modules.gradle.api.GradleTask> getTasks()
 meth public java.util.List<org.netbeans.modules.gradle.api.GradleTask> getTasks(java.lang.String)
 meth public java.util.Map<java.lang.String,java.io.File> getIncludedBuilds()
@@ -109,15 +156,17 @@
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ModuleDependency> findModules(java.lang.String)
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ModuleDependency> findModules(java.lang.String,java.lang.String,java.lang.String)
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ProjectDependency> getProjectDependencies()
+meth public java.util.Set<org.netbeans.modules.gradle.api.GradleReport> getProblems()
 meth public org.netbeans.modules.gradle.api.GradleTask getTaskByName(java.lang.String)
 meth public static org.netbeans.modules.gradle.api.GradleBaseProject get(org.netbeans.api.project.Project)
 supr java.lang.Object
-hfds buildClassPath,buildDir,componentsByFile,configurations,description,displayName,gradleClassPath,group,includedBuilds,license,name,netBeansProperties,outputPaths,parentName,path,plugins,projectDir,resolved,rootDir,status,subProjects,tasksByGroup,tasksByName,version
+hfds buildClassPath,buildDir,componentsByFile,configurations,description,displayName,gradleClassPath,group,includedBuilds,license,name,netBeansProperties,outputPaths,parentName,path,plugins,problems,projectDependencyNode,projectDir,projectIds,resolved,rootDir,status,subProjects,taskDeepDependencies,taskDependencies,taskTypes,tasksByGroup,tasksByName,version
 
 CLSS public final org.netbeans.modules.gradle.api.GradleConfiguration
 intf java.io.Serializable
 intf java.lang.Comparable<org.netbeans.modules.gradle.api.GradleConfiguration>
 intf org.netbeans.modules.gradle.api.ModuleSearchSupport
+meth public !varargs java.util.Collection<org.netbeans.modules.gradle.api.GradleDependency> getDependenciesOf(org.netbeans.modules.gradle.api.GradleDependency[])
 meth public boolean isCanBeConsumed()
 meth public boolean isCanBeResolved()
 meth public boolean isEmpty()
@@ -127,6 +176,8 @@
 meth public java.lang.String getDescription()
 meth public java.lang.String getName()
 meth public java.lang.String toString()
+meth public java.util.Collection<? extends org.netbeans.modules.gradle.api.GradleDependency> getConfiguredDependencies()
+meth public java.util.Collection<org.netbeans.modules.gradle.api.GradleDependency> getDependencies()
 meth public java.util.Map<java.lang.String,java.lang.String> getAttributes()
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleConfiguration> getAllParents()
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleConfiguration> getExtendsFrom()
@@ -135,9 +186,10 @@
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ModuleDependency> getModules()
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ProjectDependency> getProjects()
 meth public java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$UnresolvedDependency> getUnresolved()
+meth public org.netbeans.modules.gradle.api.GradleConfiguration getDependencyOrigin(org.netbeans.modules.gradle.api.GradleDependency)
 meth public org.netbeans.modules.gradle.api.GradleDependency$FileCollectionDependency getFiles()
 supr java.lang.Object
-hfds attributes,canBeConsumed,canBeResolved,description,extendsFrom,files,modules,name,projects,transitive,unresolved
+hfds SELF_DEPENDENCY,attributes,canBeConsumed,canBeResolved,dependencyMap,description,directChildren,extendsFrom,files,modules,name,projects,transitive,unresolved
 
 CLSS public abstract org.netbeans.modules.gradle.api.GradleDependency
 innr public final static !enum Type
@@ -155,6 +207,8 @@
 
 CLSS public final static org.netbeans.modules.gradle.api.GradleDependency$FileCollectionDependency
  outer org.netbeans.modules.gradle.api.GradleDependency
+meth public boolean equals(java.lang.Object)
+meth public int hashCode()
 meth public java.util.Set<java.io.File> getFiles()
 meth public org.netbeans.modules.gradle.api.GradleDependency$Type getType()
 supr org.netbeans.modules.gradle.api.GradleDependency
@@ -219,16 +273,34 @@
 meth public static java.util.Map<java.lang.String,org.netbeans.api.project.Project> openedSiblings(org.netbeans.api.project.Project)
 supr java.lang.Object
 
+CLSS public final org.netbeans.modules.gradle.api.GradleReport
+meth public boolean equals(java.lang.Object)
+meth public int getLine()
+meth public int hashCode()
+meth public java.lang.String formatReportForHintOrProblem(boolean,org.openide.filesystems.FileObject)
+meth public java.lang.String getErrorClass()
+meth public java.lang.String getLocation()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+meth public java.lang.String getMessage()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public java.lang.String toString()
+meth public org.netbeans.modules.gradle.api.GradleReport getCause()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+supr java.lang.Object
+hfds causedBy,errorClass,line,location,message
+
 CLSS public final org.netbeans.modules.gradle.api.GradleTask
 intf java.io.Serializable
+meth public boolean isExternal()
 meth public boolean isPrivate()
 meth public boolean matches(java.lang.String)
 meth public java.lang.String getDescription()
 meth public java.lang.String getGroup()
 meth public java.lang.String getName()
 meth public java.lang.String getPath()
+meth public java.lang.String getProjectPath()
 supr java.lang.Object
-hfds CAMLE_CASE_SPLITTER,description,group,name,path
+hfds CAMLE_CASE_SPLITTER,description,external,group,name,path
 
 CLSS public abstract interface org.netbeans.modules.gradle.api.ModuleSearchSupport
 meth public abstract java.util.Set<org.netbeans.modules.gradle.api.GradleDependency$ModuleDependency> findModules(java.lang.String)
@@ -254,6 +326,7 @@
 meth public org.netbeans.modules.gradle.api.NbGradleProject$Quality getAimedQuality()
 meth public org.netbeans.modules.gradle.api.NbGradleProject$Quality getQuality()
 meth public org.netbeans.modules.gradle.spi.GradleFiles getGradleFiles()
+meth public org.openide.util.Lookup refreshableProjectLookup()
 meth public static java.util.prefs.Preferences getPreferences(org.netbeans.api.project.Project,boolean)
 meth public static javax.swing.ImageIcon getIcon()
 meth public static org.netbeans.modules.gradle.api.NbGradleProject get(org.netbeans.api.project.Project)
@@ -263,7 +336,7 @@
 meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
 supr java.lang.Object
-hfds FCHSL,GRADLE_ICON,WARNING_BADGE,privatePrefs,project,resources,sharedPrefs,support,warningIcon
+hfds FCHSL,GRADLE_ICON,LOG,WARNING_BADGE,lookupProxy,privatePrefs,project,resources,sharedPrefs,support,warningIcon
 hcls AccessorImpl
 
 CLSS public final static !enum org.netbeans.modules.gradle.api.NbGradleProject$Quality
@@ -357,7 +430,7 @@
 meth public void setStackTrace(org.netbeans.modules.gradle.api.execute.GradleCommandLine$StackTrace)
 meth public void setTasks(java.util.Collection<java.lang.String>)
 supr java.lang.Object
-hfds LOGGER,PARSERS,PROP_JVMARGS,arguments,dist,gradleHomeProvider,tasks
+hfds GRADLE_PROJECT_PROPERTY,LOGGER,PARSERS,PROP_JVMARGS,arguments,dist,gradleHomeProvider,tasks
 hcls Argument,ArgumentParser,FlagArgument,ParameterParser,ParametricArgument,PropertyArgument,PropertyParser
 
 CLSS public final static !enum org.netbeans.modules.gradle.api.execute.GradleCommandLine$Flag
@@ -573,6 +646,7 @@
 fld public final static java.lang.String PROP_JDK_PLATFORM = "jdkPlatform"
 meth public !varargs static org.netbeans.modules.gradle.api.execute.RunConfig createRunConfig(org.netbeans.api.project.Project,java.lang.String,java.lang.String,java.util.Set<org.netbeans.modules.gradle.api.execute.RunConfig$ExecFlag>,java.lang.String[])
 meth public !varargs static org.netbeans.modules.gradle.api.execute.RunConfig createRunConfig(org.netbeans.api.project.Project,java.lang.String,java.lang.String,org.openide.util.Lookup,org.netbeans.modules.gradle.api.execute.GradleExecConfiguration,java.util.Set<org.netbeans.modules.gradle.api.execute.RunConfig$ExecFlag>,java.lang.String[])
+meth public !varargs static org.netbeans.modules.gradle.api.execute.RunConfig createRunConfigForAction(org.netbeans.api.project.Project,java.lang.String,java.lang.String,org.openide.util.Lookup,org.netbeans.modules.gradle.api.execute.GradleExecConfiguration,java.util.Set<org.netbeans.modules.gradle.api.execute.RunConfig$ExecFlag>,boolean,java.lang.String[])
 meth public static boolean cancelGradle(org.netbeans.modules.gradle.api.execute.RunConfig)
 meth public static boolean isAugmentedBuildEnabled(org.netbeans.api.project.Project)
 meth public static boolean isCompileOnSaveEnabled(org.netbeans.api.project.Project)
@@ -582,6 +656,7 @@
 meth public static java.io.File evaluateGradleDistribution(org.netbeans.api.project.Project,boolean)
  anno 0 java.lang.Deprecated()
 meth public static java.lang.String[] evaluateActionArgs(org.netbeans.api.project.Project,java.lang.String,java.lang.String,org.openide.util.Lookup)
+meth public static org.netbeans.modules.gradle.api.execute.ActionMapping findActionMapping(org.netbeans.api.project.Project,java.lang.String,org.netbeans.modules.gradle.api.execute.GradleExecConfiguration)
 meth public static org.netbeans.modules.gradle.api.execute.GradleCommandLine getDefaultCommandLine(org.netbeans.api.project.Project)
 meth public static org.netbeans.modules.gradle.api.execute.GradleDistributionManager$GradleDistribution getCompatibleGradleDistribution(org.netbeans.api.project.Project)
 meth public static org.netbeans.modules.gradle.api.execute.RunConfig createRunConfig(org.netbeans.api.project.Project,java.lang.String,java.lang.String,java.lang.String[])
diff --git a/extide/gradle/nbproject/project.properties b/extide/gradle/nbproject/project.properties
index ea39a75..54dab68 100644
--- a/extide/gradle/nbproject/project.properties
+++ b/extide/gradle/nbproject/project.properties
@@ -28,6 +28,9 @@
 test-unit-sys-prop.test.netbeans.dest.dir=${netbeans.dest.dir}
 test-unit-sys-prop.java.awt.headless=true
 
+# Enable Gradle execution exception logging during tests
+#test-unit-sys-prop.org.netbeans.modules.gradle.level=FINE
+
 release.build/tooling/netbeans-gradle-tooling.jar=modules/gradle/netbeans-gradle-tooling.jar
 release.build/tooling/nb-tooling.gradle=modules/gradle/nb-tooling.gradle
 
diff --git a/extide/gradle/nbproject/project.xml b/extide/gradle/nbproject/project.xml
index acec092..47e0d7e 100644
--- a/extide/gradle/nbproject/project.xml
+++ b/extide/gradle/nbproject/project.xml
@@ -99,8 +99,8 @@
                     <code-name-base>org.netbeans.modules.libs.gradle</code-name-base>
                     <compile-dependency/>
                     <run-dependency>
-                        <release-version>7</release-version>
-                        <specification-version>7.4.1</specification-version>
+                        <release-version>8</release-version>
+                        <specification-version>8.0.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java
new file mode 100644
index 0000000..632321d
--- /dev/null
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.tooling;
+
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Supplier;
+import org.gradle.api.NamedDomainObjectContainer;
+import org.gradle.api.Project;
+import org.gradle.api.internal.plugins.PluginManagerInternal;
+import org.gradle.api.internal.plugins.PluginRegistry;
+import org.gradle.api.internal.project.ProjectInternal;
+import org.gradle.api.internal.provider.PropertyInternal;
+import org.gradle.api.internal.provider.ProviderInternal;
+import org.gradle.api.internal.provider.ValueSupplier;
+import org.gradle.api.logging.LogLevel;
+import org.gradle.api.logging.Logger;
+import org.gradle.api.logging.Logging;
+import org.gradle.api.reflect.HasPublicType;
+import org.gradle.plugin.use.PluginId;
+import org.gradle.util.VersionNumber;
+import org.netbeans.modules.gradle.tooling.NbProjectInfoBuilder.ExceptionCallable;
+import org.netbeans.modules.gradle.tooling.NbProjectInfoBuilder.ValueAndType;
+
+/**
+ * Adapts to various Gradle implementations. As *.internal.* interfaces may change between
+ * releases, operations on them may be customized by this Adapter. The adapter should be compiled
+ * against the Gradle distribution shipped with NetBeans, but should use reflection to access 
+ * the relevant data if the internal API changes between versions.
+ * 
+ * @author sdedic
+ */
+public class GradleInternalAdapter {
+    private static final Logger LOG =  Logging.getLogger(NbProjectInfoBuilder.class);
+
+    private final Project project;
+    private final VersionNumber gradleVersion;
+    /**
+     * Accummulates error messages, so that just one problem is logger a given type of error.
+     */
+    private Set<String> reportedIncompatibilities = new HashSet<>();
+    
+    protected NbProjectInfoModel model;
+    
+    /**
+     * Guards {@link #pluginManager} and {@link #registry} initialization
+     */
+    protected boolean pluginsInitialized;
+    protected PluginManagerInternal pluginManager;
+    protected PluginRegistry registry;
+
+    public GradleInternalAdapter(Project project) {
+        this.project = project;
+        this.gradleVersion = VersionNumber.parse(project.getGradle().getGradleVersion());
+    }
+    
+    boolean initPlugins() {
+        if (!pluginsInitialized) {
+            if (project.getPluginManager() instanceof PluginManagerInternal) {
+                pluginManager = (PluginManagerInternal)project.getPluginManager();
+            }
+            if (project instanceof ProjectInternal) {
+                registry = safeCall(() -> ((ProjectInternal)project).getServices().get(PluginRegistry.class), "plugin registry").orElse(null);
+            } else {
+                registry = null;
+            }
+        }
+        return pluginManager != null;
+    }
+    
+    public void setModel(NbProjectInfoModel model) {
+        this.model = model;
+    }
+    
+    protected boolean isFixedValue(String description, ValueSupplier.ExecutionTimeValue etv) {
+        return etv.isFixedValue();
+    }
+    
+    public boolean isMutableType(Object potentialValue) {
+        if (potentialValue instanceof PropertyInternal) {
+            return true;
+        } else if ((potentialValue instanceof NamedDomainObjectContainer) && (potentialValue instanceof HasPublicType)) {
+            return true;
+        } else if (potentialValue instanceof Iterable || potentialValue instanceof Map) {
+            return true;
+        }
+        return false;
+    }
+    
+    public boolean hasPluginManager() {
+        return initPlugins();
+    }
+    
+    public ValueAndType findPropertyValueInternal(String propName, Object val) {
+        return sinceGradleOrDefault("6.4",() -> safeCall(() -> {
+            if (val instanceof ProviderInternal) {
+                ProviderInternal provided = (ProviderInternal)val;
+                ValueSupplier.ExecutionTimeValue etv;
+                try {
+                    etv = provided.calculateExecutionTimeValue();
+                } catch (RuntimeException ex) {
+                    // probably expected, ignore
+                    return new ValueAndType(provided.getType());
+                }
+                if (isFixedValue("property " + propName, etv)) {
+                    return new ValueAndType(provided.getType(), etv.getFixedValue());
+                } else {
+                    return new ValueAndType(provided.getType());
+                }
+            } else {
+                return new ValueAndType(val != null ? val.getClass() : null, val);
+            }
+        }, "property " + propName).orElse(null), null);
+    }
+    
+    @SuppressWarnings("unchecked")
+    private static <T extends Throwable> void sneakyThrow(Throwable exception) throws T {
+            throw (T) exception;
+    }        
+    
+    private <T, E extends Throwable> T sinceGradleOrDefault(String version, NbProjectInfoBuilder.ExceptionCallable<T, E> c, Supplier<T> def) {
+        if (gradleVersion.compareTo(VersionNumber.parse(version)) >= 0) {
+            try {
+                return c.call();
+            } catch (RuntimeException | Error e) {
+                throw e;
+            } catch (Throwable t) {
+                sneakyThrow(t);
+                return null;
+            }
+        } else {
+            return def.get();
+        }
+    }
+
+    public Optional<PluginId> findPluginId(Class fc) {
+        if (!initPlugins()) {
+            return Optional.empty();
+        }
+        // with Gradle 7.1+, plugins can be better enumerated. Prior to 7.1 I can only get IDs for registry-supplied plugins.
+        Optional<PluginId> id = sinceGradleOrDefault("7.1", () -> safeCall(() -> (PluginId)pluginManager.findPluginIdForClass(fc).orElse(null), "plugins"), Optional::empty); // NOI18N
+        if (id.isPresent() || registry == null) {
+            return id;
+        }
+        return safeCall(() -> registry.findPluginForClass(fc).orElse(null), "plugin class " + fc.getName());
+    }
+    
+    private void noteAndLogError(Throwable ex, String description) {
+        String msg = "Error inspecting " + (description == null ? "project" : description);
+        model.noteProblem(msg + ": " + ex.toString());
+        LOG.log(LogLevel.LIFECYCLE, msg, ex);
+    }
+    
+    protected <T, E extends Throwable> Optional<T> safeCall(ExceptionCallable<T, E> sup, String description) {
+        try {
+            return Optional.ofNullable(sup.call());
+        } catch (RuntimeException ex) {
+            noteAndLogError(ex, description);
+            return Optional.empty();
+        } catch (Error ex) {
+            if (reportedIncompatibilities.add(ex.toString())) {
+                noteAndLogError(ex, description);
+            }
+            return Optional.empty();
+        } catch (Throwable t) {
+            sneakyThrow(t);
+            return null;
+        }
+    }
+
+    public static class Gradle76 extends GradleInternalAdapter {
+        private static Optional<Method> refHasValue;
+
+        public Gradle76(Project project) {
+            super(project);
+        }
+        
+        @Override
+        protected boolean isFixedValue(String description, ValueSupplier.ExecutionTimeValue etv) {
+            if (refHasValue == null) {
+                refHasValue = safeCall(() -> ValueSupplier.ExecutionTimeValue.class.getMethod("hasFixedValue"), "Gradle 7.6+ ExecutionTimeValue");
+            }
+            if (refHasValue.isPresent()) {
+                return safeCall(() -> (Boolean)refHasValue.get().invoke(etv), description).orElse(false);
+            } else {
+                return false;
+            }
+        }
+    }
+}
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
index 39fb118..65dbd72 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
@@ -85,18 +85,12 @@
 import org.gradle.api.file.ConfigurableFileCollection;
 import org.gradle.api.file.DirectoryProperty;
 import org.gradle.api.initialization.IncludedBuild;
-import org.gradle.api.internal.plugins.PluginManagerInternal;
-import org.gradle.api.internal.plugins.PluginRegistry;
-import org.gradle.api.internal.project.ProjectInternal;
-import org.gradle.api.internal.provider.PropertyInternal;
 import org.gradle.api.internal.provider.ProviderInternal;
-import org.gradle.api.internal.provider.ValueSupplier.ExecutionTimeValue;
 import org.gradle.api.logging.Logger;
 import org.gradle.api.logging.Logging;
 import org.gradle.api.plugins.ExtensionAware;
 import org.gradle.api.plugins.ExtensionContainer;
 import org.gradle.api.plugins.ExtensionsSchema.ExtensionSchema;
-import org.gradle.api.plugins.JavaPlatformPlugin;
 import org.gradle.api.provider.Provider;
 import org.gradle.api.reflect.HasPublicType;
 import org.gradle.api.reflect.TypeOf;
@@ -110,7 +104,7 @@
 import org.gradle.language.base.artifact.SourcesArtifact;
 import org.gradle.language.java.artifact.JavadocArtifact;
 import org.gradle.plugin.use.PluginId;
-import org.gradle.util.VersionNumber;
+import org.gradle.util.GradleVersion;
 import org.netbeans.modules.gradle.tooling.internal.NbProjectInfo;
 
 /**
@@ -181,16 +175,35 @@
         "war"
     }));
 
+    private static final GradleVersion GRADLE_VERSION = GradleVersion.current().getBaseVersion();
+
     final Project project;
-    final VersionNumber gradleVersion;
+    final GradleInternalAdapter adapter;
+
+    public static final class ValueAndType {
+        final Class type;
+        final Optional<Object> value;
+
+        public ValueAndType(Class type, Object value) {
+            this.type = type;
+            this.value = Optional.ofNullable(value);
+        }
+
+        public ValueAndType(Class type) {
+            this.type = type;
+            this.value = Optional.empty();
+        }
+    }
 
     NbProjectInfoBuilder(Project project) {
         this.project = project;
-        this.gradleVersion = VersionNumber.parse(project.getGradle().getGradleVersion());
+        this.adapter = sinceGradleOrDefault("7.6", () -> new GradleInternalAdapter.Gradle76(project), () -> new GradleInternalAdapter(project));
     }
+    
+    private NbProjectInfoModel model = new NbProjectInfoModel();
 
     public NbProjectInfo buildAll() {
-        NbProjectInfoModel model = new NbProjectInfoModel();
+        adapter.setModel(model);
         runAndRegisterPerf(model, "meta", this::detectProjectMetadata);
         detectProps(model);
         detectLicense(model);
@@ -200,15 +213,24 @@
         runAndRegisterPerf(model, "dependencies", this::detectDependencies);
         runAndRegisterPerf(model, "artifacts", this::detectArtifacts);
         detectDistributions(model);
-        runAndRegisterPerf(model, "detectExtensions", this::detectExtensions);
-        runAndRegisterPerf(model, "detectPlugins2", this::detectAdditionalPlugins);
-        runAndRegisterPerf(model, "taskDependencies", this::detectTaskDependencies);
+        
+        // introspection is only allowed for gradle 7.4 and above.
+        // TODO: investigate if some of the instrospection could be done for earlier Gradles.
+        sinceGradle("7.0", () -> {
+            runAndRegisterPerf(model, "detectExtensions", this::detectExtensions);
+        });
+        sinceGradle("7.0", () -> {
+            runAndRegisterPerf(model, "detectPlugins2", this::detectAdditionalPlugins);
+        });
+        sinceGradle("7.0", () -> {
+            runAndRegisterPerf(model, "taskDependencies", this::detectTaskDependencies);
+        });
         runAndRegisterPerf(model, "taskProperties", this::detectTaskProperties);
         runAndRegisterPerf(model, "artifacts", this::detectConfigurationArtifacts);
         storeGlobalTypes(model);
         return model;
     }
-
+    
     @SuppressWarnings("null")
     private void detectDistributions(NbProjectInfoModel model) {
         if (project.getPlugins().hasPlugin("distribution")) {
@@ -268,7 +290,7 @@
         Map<String, Object> taskProperties = new HashMap<>();
         Map<String, String> taskPropertyTypes = new HashMap<>();
         
-        Map<String, Task> taskList = project.getTasks().getAsMap();
+        Map<String, Task> taskList = new HashMap<>(project.getTasks().getAsMap());
         for (String s : taskList.keySet()) {
             Task task = taskList.get(s);
             Class taskClass = task.getClass();
@@ -285,7 +307,7 @@
     private void detectTaskDependencies(NbProjectInfoModel model) {
         Map<String, Object> tasks = new HashMap<>();
         
-        Map<String, Task> taskList = project.getTasks().getAsMap();
+        Map<String, Task> taskList = new HashMap<>(project.getTasks().getAsMap());
         for (String s : taskList.keySet()) {
             Task task = taskList.get(s);
             Map<String, String> taskInfo = new HashMap<>();
@@ -308,11 +330,16 @@
     }
     
     private String dependenciesAsString(Task t, TaskDependency td) {
-        Set<? extends Task> deps = td.getDependencies(t);
-        if (deps.isEmpty()) {
+        try {
+            Set<? extends Task> deps = td.getDependencies(t);
+            if (deps.isEmpty()) {
+                return "";
+            }
+            return deps.stream().map(Task::getPath).collect(Collectors.joining(","));
+        } catch (LinkageError | RuntimeException ex) {
+            LOG.warn("Error getting dependencies for task {}: {}", t.getName(), ex.getLocalizedMessage(), ex);
             return "";
         }
-        return deps.stream().map(Task::getPath).collect(Collectors.joining(","));
     }
     
     private void detectConfigurationArtifacts(NbProjectInfoModel model) {
@@ -351,30 +378,20 @@
         model.getInfo().put("configurationArtifacts", data); // NOI18N
     }
     
+    /**
+     * Relies on PluginManagerInternal.findPluginIdForClass (gradle 7.1) and PluginRegistry.findPluginForClass (gradle 7.0)
+     * @param model 
+     */
     private void detectAdditionalPlugins(NbProjectInfoModel model) {
-        final PluginManagerInternal pmi;
-        PluginRegistry reg;
-        if (project.getPluginManager() instanceof PluginManagerInternal) {
-            pmi = (PluginManagerInternal)project.getPluginManager();
-        } else {
+        if (!adapter.hasPluginManager()) {
             return;
         }
-        if (project instanceof ProjectInternal) {
-            reg = ((ProjectInternal)project).getServices().get(PluginRegistry.class);
-        } else {
-            reg = null;
-        }
         LOG.lifecycle("Detecting additional plugins");
         final Set<String> plugins = new LinkedHashSet<>();
         
         project.getPlugins().matching((Plugin p) -> {
             for (Class c = p.getClass(); c != null && c != Object.class; c = c.getSuperclass()) {
-                Class fc = c;
-                // with Gradle 7.1+, plugins can be better enumerated. Prior to 7.1 I can only get IDs for registry-supplied plugins.
-                Optional<PluginId> id = sinceGradleOrDefault("7.1", () -> pmi.findPluginIdForClass(fc), Optional::empty); // NOI18N
-                if (!id.isPresent() && reg != null) {
-                    id = reg.findPluginForClass(c);
-                }
+                Optional<PluginId> id = adapter.findPluginId(c);
                 if (id.isPresent()) {
                     LOG.info("Plugin: {} -> {}", id.get(), p);
                     plugins.add(id.get().getId());
@@ -491,13 +508,7 @@
             return false;
         }
         String n = c.getName();
-        if (n.indexOf('.') == -1) {
-            return true;
-        } else if (n.startsWith("java.lang.")) {
-            return true;
-        }
-        
-        return false;
+        return c.isPrimitive() || n.startsWith("java.lang.");
     }
     
     /**
@@ -524,14 +535,7 @@
     }
     
     private boolean isMutableType(Object potentialValue) {
-        if (potentialValue instanceof PropertyInternal) {
-            return true;
-        } else if ((potentialValue instanceof NamedDomainObjectContainer) && (potentialValue instanceof HasPublicType)) {
-            return true;
-        } else if (potentialValue instanceof Iterable || potentialValue instanceof Map) {
-            return true;
-        }
-        return false;
+        return adapter.isMutableType(potentialValue);
     }
     
     private void inspectObjectAndValues0(Class clazz, Object object, String prefix, Map<String, Map<String, String>> globalTypes, Map<String, String> propertyTypes, Map<String, Object> defaultValues, Set<String> excludes, boolean type) {
@@ -627,24 +631,15 @@
                 // Provider must NOT be asked for a value, otherwise it might run a Task in order to compute
                 // the value.
                 try {
+                    value = mclazz.getProperty(object, propName);
                     if (Provider.class.isAssignableFrom(t)) {
-                        Object potentialValue = mclazz.getProperty(object, propName);
-                        if (potentialValue instanceof ProviderInternal) {
-                            ProviderInternal provided = (ProviderInternal) potentialValue;
-                            t = provided.getType();
-                            ExecutionTimeValue etv;
-                            etv = provided.calculateExecutionTimeValue();
-                            if (etv.isFixedValue()) {
-                                value = etv.getFixedValue();
-                            }
-                        } else {
-                            value = potentialValue;
-                            if (value != null) {
-                                t = value.getClass();
+                        ValueAndType vt = adapter.findPropertyValueInternal(propName, value);
+                        if (vt != null) {
+                            t = vt.type;
+                            if (vt.value.isPresent()) {
+                                value = vt.value.get();
                             }
                         }
-                    } else {
-                        value = mclazz.getProperty(object, propName);
                     }
                 } catch (RuntimeException ex) {
                     // just ignore - the property value cannot be obtained
@@ -689,7 +684,7 @@
                     }
 
                     NamedDomainObjectContainer nc = (NamedDomainObjectContainer)value;
-                    Map<String, ?> m = nc.getAsMap();
+                    Map<String, ?> m = new HashMap<>(nc.getAsMap());
                     List<String> ss = new ArrayList<>(m.keySet());
                     propertyTypes.put(prefix + propName + COLLECTION_KEYS_MARKER, String.join(";;", ss));
                     for (String k : m.keySet()) {
@@ -854,6 +849,7 @@
         model.getInfo().put("project_rootDir", project.getRootDir());
         model.getInfo().put("gradle_user_home", project.getGradle().getGradleUserHomeDir());
         model.getInfo().put("gradle_home", project.getGradle().getGradleHomeDir());
+        model.getInfo().put("gradle_version", project.getGradle().getGradleVersion());
 
         Set<Configuration> visibleConfigurations = configurationsToSave();
         model.getInfo().put("configurations", visibleConfigurations.stream().map(conf->conf.getName()).collect(Collectors.toCollection(HashSet::new )));
@@ -865,7 +861,7 @@
         model.getInfo().put("project_subProjects", sp);
         
         Map<String, File> ib = new HashMap<>();
-        LOG.lifecycle("Gradle Version: {}", gradleVersion);
+        LOG.lifecycle("Gradle Version: {}", GradleVersion.current());
         sinceGradle("3.1", () -> {
             for(IncludedBuild p: project.getGradle().getIncludedBuilds()) {
                 LOG.lifecycle("Include Build: {}", p.getName());
@@ -1004,49 +1000,55 @@
 
                             List<String> compilerArgs;
 
-                            try {
-                                compilerArgs = (List<String>) getProperty(compileTask, "options", "allCompilerArgs");
-                            } catch (Throwable ex) {
-                                try {
-                                    compilerArgs = (List<String>) getProperty(compileTask, "options", "compilerArgs");
-                                } catch (Throwable ex2) {
-                                    compilerArgs = (List<String>) getProperty(compileTask, "kotlinOptions", "freeCompilerArgs");
-                                }
+                            compilerArgs = (List<String>) getProperty(compileTask, "options", "allCompilerArgs");
+                            if (compilerArgs == null) {
+                                compilerArgs = (List<String>) getProperty(compileTask, "options", "compilerArgs");
+                            }
+                            if (compilerArgs == null) {
+                                compilerArgs = (List<String>) getProperty(compileTask, "kotlinOptions", "freeCompilerArgs");
                             }
                             model.getInfo().put(propBase + lang + "_compiler_args", new ArrayList<>(compilerArgs));
                         }
                         if (Boolean.TRUE.equals(available.get(langId))) {
                             model.getInfo().put(propBase + lang, storeSet(getProperty(sourceSet, langId, "srcDirs")));
-                            DirectoryProperty dirProp = (DirectoryProperty)getProperty(sourceSet, langId, "classesDirectory");
-                            if (dirProp != null) {
-                                File outDir;
-                                
-                                if (dirProp.isPresent()) {
-                                    outDir = dirProp.get().getAsFile();
-                                } else {
-                                    // kotlin plugin uses some weird late binding, so it has the output item, but it cannot be resolved to a 
-                                    // concrete file path at this time. Let's make an approximation from 
-                                    Path candidate = null;
-                                    if (base != null) {
-                                        Path prefix = base.resolve(langId);
-                                        // assume the language has just one output dir in the source set:
-                                        for (int i = 0; i < outPaths.size(); i++) {
-                                            Path p = outPaths.get(i);
-                                            if (p.startsWith(prefix)) {
-                                                if (candidate != null) {
-                                                    candidate = null;
-                                                    break;
-                                                } else {
-                                                    candidate = p;
+                            asGradle("4.0", "6.1", () -> {
+                                File outDir = (File) getProperty(sourceSet, langId, "outputDir");
+                                model.getInfo().put(propBase + lang + "_output_classes", outDir);
+                            });
+                            sinceGradle("6.1", () -> {
+                                DirectoryProperty dirProp = (DirectoryProperty)getProperty(sourceSet, langId, "classesDirectory");
+                                if (dirProp != null) {
+                                    File outDir;
+
+                                    if (dirProp.isPresent()) {
+                                        outDir = dirProp.get().getAsFile();
+                                    } else {
+                                        // kotlin plugin uses some weird late binding, so it has the output item, but it cannot be resolved to a
+                                        // concrete file path at this time. Let's make an approximation from
+                                        Path candidate = null;
+                                        if (base != null) {
+                                            Path prefix = base.resolve(langId);
+                                            // assume the language has just one output dir in the source set:
+                                            for (int i = 0; i < outPaths.size(); i++) {
+                                                Path p = outPaths.get(i);
+                                                if (p.startsWith(prefix)) {
+                                                    if (candidate != null) {
+                                                        candidate = null;
+                                                        break;
+                                                    } else {
+                                                        candidate = p;
+                                                    }
                                                 }
                                             }
                                         }
+                                        outDir = candidate != null ? candidate.toFile() : new File("");
                                     }
-                                    outDir = candidate != null ? candidate.toFile() : new File("");
+
+                                    model.getInfo().put(propBase + lang + "_output_classes", outDir);
                                 }
-                                
-                                model.getInfo().put(propBase + lang + "_output_classes", outDir);
-                            }
+                            });
+
+
                         }
                     }
    
@@ -1117,8 +1119,17 @@
             }
         }
         Map<String, Object> archives = new HashMap<>();
-        project.getTasks().withType(Jar.class).forEach(jar -> {
-            archives.put(jar.getClassifier(), jar.getArchivePath());
+        beforeGradle("5.2", () -> {
+            // The jar.getCassifier() and jar.getArchievePath() are deprecated since 5.2
+            // These methods got removed in 8.0
+            project.getTasks().withType(Jar.class).forEach(jar -> {
+                archives.put(jar.getClassifier(), jar.getArchivePath());
+            });
+        });
+        sinceGradle("5.2", () -> {
+            project.getTasks().withType(Jar.class).forEach(jar -> {
+                archives.put(jar.getArchiveClassifier().get(), jar.getDestinationDirectory().file(jar.getArchiveFileName().get()).get().getAsFile());
+            });
         });
         model.getInfo().put("archives", archives);
     }
@@ -1296,7 +1307,7 @@
 
         // NETBEANS-5846: if this project uses javaPlatform plugin with dependencies enabled, 
         // do not report unresolved problems
-        boolean ignoreUnresolvable = (project.getPlugins().hasPlugin(JavaPlatformPlugin.class) && 
+        boolean ignoreUnresolvable = (project.getPlugins().hasPlugin("java-platform") &&
             Boolean.TRUE.equals(getProperty(project, "javaPlatform", "allowDependencies")));
 
         visibleConfigurations.forEach(it -> {
@@ -1597,7 +1608,7 @@
                 .collect(Collectors.toSet());
     }
     
-    private interface ExceptionCallable<T, E extends Throwable> {
+    interface ExceptionCallable<T, E extends Throwable> {
         public T call() throws E;
     }
 
@@ -1607,7 +1618,7 @@
     }        
     
     private <T, E extends Throwable> T sinceGradleOrDefault(String version, ExceptionCallable<T, E> c, Supplier<T> def) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) >= 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) >= 0) {
             try {
                 return c.call();
             } catch (RuntimeException | Error e) {
@@ -1616,8 +1627,10 @@
                 sneakyThrow(t);
                 return null;
             }
-        } else {
+        } else if (def != null) {
             return def.get();
+        } else {
+            return null;
         }
     }
     
@@ -1626,23 +1639,34 @@
     }
     
     private void sinceGradle(String version, Runnable r) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) >= 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) >= 0) {
             r.run();
         }
     }
 
     private void beforeGradle(String version, Runnable r) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) < 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) < 0) {
+            r.run();
+        }
+    }
+
+    private void asGradle(String fromVersion, String toVersion, Runnable r) {
+        if ((GRADLE_VERSION.compareTo(GradleVersion.version(fromVersion)) >= 0)
+                && (GRADLE_VERSION.compareTo(GradleVersion.version(toVersion)) < 0)) {
             r.run();
         }
     }
 
     private static Object getProperty(Object obj, String... propPath) {
         Object currentObject = obj;
-        for(String prop: propPath) {
-            currentObject = InvokerHelper.getPropertySafe(currentObject, prop);
+        try {
+            for(String prop: propPath) {
+                currentObject = InvokerHelper.getPropertySafe(currentObject, prop);
+            }
+            return currentObject;
+        } catch (MissingPropertyException ex) {
+            return null;
         }
-        return currentObject;
     }
 }
 
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
index 2ca9b43..13cc06e 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
@@ -28,11 +28,13 @@
 import org.gradle.api.tasks.JavaExec;
 import org.gradle.api.tasks.SourceSetContainer;
 import org.gradle.process.CommandLineArgumentProvider;
+import org.gradle.util.GradleVersion;
 /**
  *
  * @author Laszlo Kishalmi
  */
 class NetBeansRunSinglePlugin implements Plugin<Project> {
+    private static final GradleVersion GRADLE_VERSION = GradleVersion.current().getBaseVersion();
     private static final Logger LOG = Logging.getLogger(NetBeansRunSinglePlugin.class);
 
     private static final String RUN_SINGLE_TASK = "runSingle";
@@ -81,8 +83,13 @@
         SourceSetContainer sourceSets = project.getExtensions().findByType(SourceSetContainer.class);
 
         project.getTasks().register(RUN_SINGLE_TASK, JavaExec.class, (je) -> {
-            // Using setMain to keep the backward compatibility
-            je.setMain(project.property(RUN_SINGLE_MAIN).toString());
+            String mainClass = project.property(RUN_SINGLE_MAIN).toString();
+            if (GRADLE_VERSION.compareTo(GradleVersion.version("6.4")) < 0) {
+                // Using setMain to keep the backward compatibility before Gradle 6.4
+                je.setMain(mainClass);
+            } else {
+                je.getMainClass().set(mainClass);
+            }
             je.setClasspath(sourceSets.findByName("main").getRuntimeClasspath());
             if (project.hasProperty(RUN_SINGLE_ARGS)) {
                 je.setArgs(asList(project.property(RUN_SINGLE_ARGS).toString().split(" ")));
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/GradleBaseProjectInternal.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleBaseProjectInternal.java
new file mode 100644
index 0000000..ff97e6d
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleBaseProjectInternal.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+import org.netbeans.modules.gradle.spi.GradleFiles;
+import org.netbeans.modules.gradle.spi.ProjectInfoExtractor;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * Values that could be eventually exposed through GradleBaseProject or other APIs,
+ * but are currently not, but they are useful for e.g. tests.
+ * @author sdedic
+ */
+public class GradleBaseProjectInternal {
+    /**
+     * Gradle version for fallback info, or when the version info was not reported (assuming some error).
+     * The version should be old enough to fail all reasonable later-than checks.
+     */
+    public static final String VERSION_UNKNOWN = "1.0"; // NOI18N
+    
+    /**
+     * Gradle version that actually loaded the project.
+     */
+    private final String gradleVersion;
+    
+    /**
+     * Gradle home directory
+     */
+    private final File gradleHome;
+
+    /**
+     * Returns version of Gradle that has loaded the project information. Returns 
+     * @return 
+     */
+    public String getGradleVersion() {
+        return gradleVersion;
+    }
+
+    /**
+     * Returns the gradle home directory. May return {@code null}.
+     * @return gradle home directory, or {@code null}.
+     */
+    public File getGradleHome() {
+        return gradleHome;
+    }
+
+    GradleBaseProjectInternal(String gradleVersion, File gradleHome) {
+        this.gradleVersion = gradleVersion;
+        this.gradleHome = gradleHome;
+    }
+    
+    @ServiceProvider(service = ProjectInfoExtractor.class)
+    public static class Extractor implements ProjectInfoExtractor {
+
+        @Override
+        public Result fallback(GradleFiles files) {
+            return new DefaultResult(new GradleBaseProjectInternal(VERSION_UNKNOWN, null), Collections.emptySet());
+        }
+
+        @Override
+        public Result extract(Map<String, Object> props, Map<Class, Object> otherInfo) {
+            String ver = (String)props.getOrDefault("gradle_version", VERSION_UNKNOWN);
+            File home = (File)props.get("gradle_home");
+            return new DefaultResult(new GradleBaseProjectInternal(ver, home), Collections.emptySet());
+        }
+    }
+}
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaProjectProblemProvider.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleBrokenRuntimeProblemProvider.java
similarity index 72%
rename from java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaProjectProblemProvider.java
rename to extide/gradle/src/org/netbeans/modules/gradle/GradleBrokenRuntimeProblemProvider.java
index 231a00a..3a993f5 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaProjectProblemProvider.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleBrokenRuntimeProblemProvider.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.gradle.java;
+package org.netbeans.modules.gradle;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.gradle.api.NbGradleProject;
-import org.netbeans.modules.gradle.java.execute.JavaRunUtils;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
+import org.netbeans.spi.project.ProjectServiceProvider;
 import org.netbeans.spi.project.ui.ProjectProblemsProvider;
 import static org.netbeans.spi.project.ui.ProjectProblemsProvider.PROP_PROBLEMS;
 import org.openide.util.NbBundle;
@@ -35,12 +35,13 @@
  *
  * @author lkishalmi
  */
-public class GradleJavaProjectProblemProvider implements ProjectProblemsProvider {
+@ProjectServiceProvider(service = ProjectProblemsProvider.class, projectType = NbGradleProject.GRADLE_PROJECT_TYPE)
+public class GradleBrokenRuntimeProblemProvider implements ProjectProblemsProvider {
     private final Project project;
     private final PropertyChangeListener listener;
     private final PropertyChangeSupport support = new PropertyChangeSupport(this);
 
-    public GradleJavaProjectProblemProvider(Project project) {
+    public GradleBrokenRuntimeProblemProvider(Project project) {
         this.project = project;
         listener = (PropertyChangeEvent evt) -> {
             if (NbGradleProject.PROP_PROJECT_INFO.equals(evt.getPropertyName())) {
@@ -54,12 +55,10 @@
     @NbBundle.Messages({
         "LBL_BrokenPlatform=Broken Platform.",
     })
-    public Collection<? extends ProjectProblem> getProblems() {
-        List<ProjectProblem> ret = new ArrayList<>();
-        if (JavaRunUtils.getActivePlatform(project) == null) {
-            ret.add(ProjectProblem.createWarning(Bundle.LBL_BrokenPlatform(), Bundle.LBL_BrokenPlatform()));
-        }
-        return ret;
+    public Collection<? extends ProjectProblemsProvider.ProjectProblem> getProblems() {
+        return RunUtils.getActiveRuntime(project).isBroken()
+                ? Collections.singleton(ProjectProblemsProvider.ProjectProblem.createWarning(Bundle.LBL_BrokenPlatform(), Bundle.LBL_BrokenPlatform()))
+                : Collections.emptySet();
     }
 
     @Override
@@ -71,4 +70,5 @@
     public void removePropertyChangeListener(PropertyChangeListener listener) {
         support.removePropertyChangeListener(listener);
     }
+
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/GradleJavaCompatProblemsProvider.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleJavaCompatProblemsProvider.java
index 52c7d2e..b1108a8 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/GradleJavaCompatProblemsProvider.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleJavaCompatProblemsProvider.java
@@ -21,17 +21,23 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Properties;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.gradle.api.NbGradleProject;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
 import org.netbeans.modules.gradle.spi.execute.GradleDistributionProvider;
+import org.netbeans.modules.gradle.spi.execute.GradleJavaPlatformProvider;
 import org.netbeans.spi.project.ProjectServiceProvider;
 import org.netbeans.spi.project.ui.ProjectProblemsProvider;
 import static org.netbeans.spi.project.ui.ProjectProblemsProvider.PROP_PROBLEMS;
-import org.openide.util.NbBundle;
 import org.openide.util.NbBundle.Messages;
 
 /**
@@ -71,26 +77,87 @@
         "# {1} - Supported Java Version",
         "# {2} - Required Gradle Version",
         "# {3} - Forced Gradle Version",
-        "TXT_JavaVersionMismatch=The IDE is running on Java {0} that is not supported by Gradle {2}.\n"
-                + "The IDE will attempt to use Gradle {3} to gather the project information.\n\n"
-                + "Either upgrade your Gradle version on your project or run the IDE on "
-                + "Java {1} to avoid this problem!"
+        "TXT_JavaVersionMismatch=<html>The Java version: {0}, that is seletced for the project "
+                + "is not supported by Gradle {2}."
+                + "The IDE will attempt to use Gradle {3} to gather the project information.<p>"
+                + "Possible solutions:"
+                + "<ul><li>Upgrade your Gradle version on your project"
+                + "<li>Select Java Runtime {1} (or below), on Build&nbsp;>&nbsp;Gradle&nbsp;Execution settings, to avoid this problem!"
+                + "</ul>"
     })
     @Override
     public Collection<? extends ProjectProblem> getProblems() {
-        GradleDistributionProvider pvd = project.getLookup().lookup(GradleDistributionProvider.class);
-        if (pvd != null) {
-            GradleDistribution dist = pvd.getGradleDistribution();
-            if ((dist != null) && !dist.isCompatibleWithSystemJava()) {
-                String javaVersion = System.getProperty("java.specification.version", System.getProperty("java.version")); //NOI18N
-                GradleDistribution compatDist = GradleDistributionManager.get(dist.getGradleUserHome()).defaultDistribution();
-                ProjectProblem problem = ProjectProblem.createWarning(
-                        Bundle.LBL_JavaVersionMismatch(), 
-                        Bundle.TXT_JavaVersionMismatch(javaVersion, dist.lastSupportedJava(),dist.getVersion(), compatDist.getVersion()));
-                return Collections.singleton(problem);
-            }
+        GradleDistribution dist = getGradleDistribution();
+        int javaVersion = getJavaVersion();
+        if (!dist.isCompatibleWithJava(javaVersion)) {
+            GradleDistribution compatDist = GradleDistributionManager.get(dist.getGradleUserHome()).defaultDistribution();
+            ProjectProblem problem = ProjectProblem.createWarning(
+                    Bundle.LBL_JavaVersionMismatch(), 
+                    Bundle.TXT_JavaVersionMismatch(javaVersion, dist.lastSupportedJava(),dist.getVersion(), compatDist.getVersion()));
+            return Collections.singleton(problem);
         }
         return Collections.emptySet();
     }
 
+    private GradleDistribution getGradleDistribution() {
+        GradleDistribution dist = null;
+        GradleDistributionProvider pvd = project.getLookup().lookup(GradleDistributionProvider.class);
+        if (pvd != null) {
+            dist = pvd.getGradleDistribution();
+        }
+        return dist != null ? dist : GradleDistributionManager.get().defaultDistribution();
+    }
+
+    private int getJavaVersion() {
+        File javaHome = null;
+        GradleJavaPlatformProvider pvd = project.getLookup().lookup(GradleJavaPlatformProvider.class);
+        try {
+            javaHome = pvd != null ? pvd.getJavaHome() : null;
+        } catch (FileNotFoundException ex) {
+            // That's a broken Java Home, other Problem Provider should pick that up
+        }
+
+        if (javaHome == null) {
+            String javaVersion = System.getProperty("java.specification.version");
+            int dot = javaVersion.indexOf('.');
+            if (dot > 0) {
+                javaVersion = javaVersion.substring(0, dot);
+            }
+            return Integer.parseInt(javaVersion);
+        } else {
+            return getJavaMajorVersion(javaHome);
+        }
+    }
+
+    private static int getJavaMajorVersion(File javaHome) {
+        // If anything goes wrong just assume Java 8
+        int ret = 8;
+
+        // The release file was introduced in JDK 9 and provided ever since
+        File release = new File(javaHome, "release"); //NOI18N
+        if (release.isFile()) {
+            Properties releasePros = new Properties();
+            try (InputStream is = new FileInputStream(release)) {
+                releasePros.load(is);
+            } catch (IOException ex) {
+
+            }
+            String javaVersion = releasePros.getProperty("JAVA_VERSION"); //NOI18N
+            // This should look like "17" or "17.0.9"
+            //TODO: Use Runtime.Version (when we move to Java 11)
+            if ((javaVersion != null) && javaVersion.startsWith("\"") && javaVersion.endsWith("\"")) {
+                int dot = javaVersion.indexOf('.');
+                javaVersion = dot > 0
+                        ? javaVersion.substring(1, javaVersion.indexOf('.'))
+                        : javaVersion.substring(1, javaVersion.length() - 1);
+                try {
+                    ret = Integer.parseInt(javaVersion);
+                } catch (NumberFormatException ex) {
+                    // Do nothing return empty
+                }
+            }
+        }
+        return ret;
+    }
+
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
index b0a40c6..d74535d 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
@@ -19,13 +19,17 @@
 package org.netbeans.modules.gradle;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.nio.file.Path;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import org.gradle.tooling.BuildAction;
 import org.gradle.tooling.BuildActionExecuter;
 import org.gradle.tooling.BuildLauncher;
+import org.gradle.tooling.ConfigurableLauncher;
 import org.gradle.tooling.GradleConnectionException;
 import org.gradle.tooling.GradleConnector;
 import org.gradle.tooling.ModelBuilder;
@@ -37,6 +41,7 @@
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
 import org.netbeans.modules.gradle.spi.execute.GradleDistributionProvider;
+import org.netbeans.modules.gradle.spi.execute.GradleJavaPlatformProvider;
 import org.netbeans.spi.project.ProjectServiceProvider;
 import org.openide.filesystems.FileUtil;
 import org.openide.util.WeakListeners;
@@ -48,9 +53,11 @@
 @ProjectServiceProvider(service = ProjectConnection.class, projectType = NbGradleProject.GRADLE_PROJECT_TYPE)
 public final class GradleProjectConnection implements ProjectConnection {
 
+    private static final Logger LOG = Logger.getLogger(GradleProjectConnection.class.getName());
+
     final Project project;
     ProjectConnection conn;
-    ProjectConnection compatConn;
+
     final ChangeListener listener = (ChangeEvent e) -> {
         close();
     };
@@ -61,42 +68,42 @@
     
     @Override
     public <T> T getModel(Class<T> type) throws GradleConnectionException, IllegalStateException {
-        return getConnection(true).getModel(type);
+        return getConnection().getModel(type);
     }
 
     @Override
     public <T> void getModel(Class<T> type, ResultHandler<? super T> rh) throws IllegalStateException {
-        getConnection(true).getModel(type, rh);
+        getConnection().getModel(type, rh);
     }
 
     @Override
     public BuildLauncher newBuild() {
-        return getConnection(false).newBuild();
+        return setJavaHome(getConnection().newBuild());
     }
 
     @Override
     public TestLauncher newTestLauncher() {
-        return getConnection(false).newTestLauncher();
+        return setJavaHome(getConnection().newTestLauncher());
     }
 
     @Override
     public <T> ModelBuilder<T> model(Class<T> type) {
-        return getConnection(true).model(type);
+        return setJavaHome(getConnection().model(type));
     }
 
     @Override
     public <T> BuildActionExecuter<T> action(BuildAction<T> action) {
-        return getConnection(true).action(action);
+        return setJavaHome(getConnection().action(action));
     }
 
     @Override
     public BuildActionExecuter.Builder action() {
-        return getConnection(true).action();
+        return getConnection().action();
     }
 
     @Override
     public void notifyDaemonsAboutChangedPaths(List<Path> list) {
-        getConnection(false).notifyDaemonsAboutChangedPaths(list);
+        getConnection().notifyDaemonsAboutChangedPaths(list);
     }
 
     @Override
@@ -104,41 +111,44 @@
         if (conn != null) {
             conn.close();
         }
-        if (conn != compatConn) {
-            compatConn.close();
-        }
         conn = null;
-        compatConn = null;
     }
 
     synchronized boolean hasConnection() {
-        return conn != null || compatConn != null;
+        return conn != null;
     }
     
-    private synchronized ProjectConnection getConnection(boolean compatible) {
+    private synchronized ProjectConnection getConnection() {
         if (conn == null) {
             File projectDir = FileUtil.toFile(project.getProjectDirectory());
-            GradleConnector gconn = GradleConnector.newConnector();
             GradleDistributionProvider pvd = project.getLookup().lookup(GradleDistributionProvider.class);
+
             if (pvd != null) {
                 pvd.addChangeListener(WeakListeners.change(listener, pvd));
                 GradleDistribution dist = pvd.getGradleDistribution();
                 if (dist != null) {
                     conn = createConnection(dist, projectDir);
-                    if (dist.isCompatibleWithSystemJava()) {
-                        compatConn = conn;
-                    } else {
-                        GradleDistribution compatDist = GradleDistributionManager.get(dist.getGradleUserHome()).defaultDistribution();
-                        compatConn = createConnection(compatDist, projectDir);
-                    }
                 }
             }
             if (conn == null) {
-                conn = gconn.forProjectDirectory(projectDir).connect();
-                compatConn = conn;
+                conn = createConnection(GradleDistributionManager.get().defaultDistribution(), projectDir);
             }
         }
-        return compatible ? compatConn : conn;
+        return conn;
+    }
+
+    private <T extends ConfigurableLauncher<?>> T setJavaHome(T launcher) {
+        GradleJavaPlatformProvider pvd = project.getLookup().lookup(GradleJavaPlatformProvider.class);
+        if (pvd != null) {
+            try {
+                File javaHome = pvd.getJavaHome();
+                launcher.setJavaHome(javaHome);
+                LOG.log(Level.FINE, "Using JAVA_HOME=''{0}'' for project info load for: {1}", new Object[]{javaHome, project});
+            } catch (FileNotFoundException ex) {
+                LOG.log(Level.WARNING, "JAVA_HOME for project " + project + " not found.", ex);
+            }
+        }
+        return launcher;
     }
 
     private static ProjectConnection createConnection(GradleDistribution dist, File projectDir) {
@@ -151,4 +161,5 @@
         }
         return gconn.forProjectDirectory(projectDir).connect();
     }
+
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
index 0b98521..d299a47 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
@@ -154,7 +154,7 @@
         if (sourceSetNames != null) {
             for (String name : sourceSetNames) {
                 Set<File> dirs = (Set<File>) info.get("sourceset_" + name + "_output_classes");
-                sourceSetOutputs.addAll(dirs);
+                sourceSetOutputs.addAll(dirs != null ? dirs : Collections.emptySet());
                 sourceSetOutputs.add((File) info.get("sourceset_" + name + "_output_resources"));
             }
         }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/NbGradleProject.java b/extide/gradle/src/org/netbeans/modules/gradle/api/NbGradleProject.java
index e13b008..ae4ebeb 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/NbGradleProject.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/NbGradleProject.java
@@ -396,7 +396,7 @@
      * @param l
      */
     public static void addPropertyChangeListener(Project project, PropertyChangeListener l) {
-        if (project != null && project instanceof NbGradleProjectImpl) {
+        if (project instanceof NbGradleProjectImpl) {
             ((NbGradleProjectImpl) project).getProjectWatcher().addPropertyChangeListener(l);
         } else {
             assert false : "Attempted to add PropertyChangeListener to project " + project; //NOI18N
@@ -410,7 +410,7 @@
      * @param l
      */
     public static void removePropertyChangeListener(Project project, PropertyChangeListener l) {
-        if (project != null && project instanceof NbGradleProjectImpl) {
+        if (project instanceof NbGradleProjectImpl) {
             ((NbGradleProjectImpl) project).getProjectWatcher().removePropertyChangeListener(l);
         } else {
             assert false : "Attempted to remove PropertyChangeListener to project " + project; //NOI18N
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/Bundle.properties b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/Bundle.properties
index ca3bcc5..51a98c0 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/Bundle.properties
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/Bundle.properties
@@ -82,3 +82,8 @@
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.TrustOnce=-1
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.PermanentTrust=2
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.RunAlways=0
+
+# A distribution can choose if 'override' proxy option is available: NetBeans will
+# override proxy in the gradle daemon's JVM using explicit system properties.
+org.netbeans.modules.gradle.api.execute.NetworkProxySettings.allowOverride=true
+
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
index df937eb..550a3e4 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
@@ -60,6 +60,7 @@
  */
 public final class GradleCommandLine implements Serializable {
 
+    private static final String GRADLE_PROJECT_PROPERTY = "gradle-project"; //NOI18N
     private static final Logger LOGGER = Logger.getLogger(GradleCommandLine.class.getName());
     private static final String PROP_JVMARGS = "org.gradle.jvmargs"; // NOI18N
     /**
@@ -134,7 +135,7 @@
         NO_CONFIGURE_ON_DEMAND(PARAM, "--no-configure-on-demand"),
         NO_DAEMON(UNSUPPORTED, "--no-daemon"),
         NO_PARALLEL(PARAM, "--no-parallel"),
-        NO_REBUILD(PARAM, "-a", "--no-rebuild"),
+        NO_REBUILD(PARAM, GradleVersionRange.until("8.0"), "-a", "--no-rebuild"),
         NO_SCAN(PARAM, GradleVersionRange.from("4.3"), "--no-scan"),
         NO_SEARCH_UPWARD(UNSUPPORTED, GradleVersionRange.until("5.0"), "--no-search-upward", "-u"),
         NO_WATCH_FS(PARAM, GradleVersionRange.from("6.7"), "--no-watch-fs"),
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
index 6228015..28ec81b 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
@@ -69,7 +69,6 @@
 import org.netbeans.modules.gradle.spi.GradleSettings;
 import org.openide.awt.Notification;
 import org.openide.awt.NotificationDisplayer;
-import org.openide.util.Exceptions;
 import org.openide.util.NbBundle;
 import org.openide.util.RequestProcessor;
 
@@ -99,25 +98,8 @@
         GradleVersion.version("7.0"), // JDK-16
         GradleVersion.version("7.3"), // JDK-17
         GradleVersion.version("7.5"), // JDK-18
+        GradleVersion.version("7.6"), // JDK-19
     };
-    private static final int JAVA_VERSION;
-
-    static {
-        int ver = 8;
-        String version = System.getProperty("java.specification.version", System.getProperty("java.version")); //NOI18N
-        try {
-            int dot = version.indexOf('.');
-            ver = dot > 0 ? Integer.parseInt(version.substring(0, dot)) : Integer.parseInt(version);
-            if (ver == 1) {
-                version = version.substring(dot + 1);
-                dot = version.indexOf('.');
-                ver = dot > 0 ? Integer.parseInt(version.substring(0, dot)) : Integer.parseInt(version);
-            }
-        } catch (NumberFormatException ex) {
-            Exceptions.printStackTrace(ex);
-        }
-        JAVA_VERSION = ver;
-    }
 
     final File gradleUserHome;
 
@@ -379,7 +361,7 @@
         return new File(dist.getDistributionDir(), "gradle-" + version);
     }
 
-    
+    @SuppressWarnings("PackageVisibleInnerClass")
     static final class GradleVersionRange {
 
         public final GradleVersion lowerBound;
@@ -528,10 +510,12 @@
          * Checks if this Gradle distribution is compatible the NetBeans
          * runtime JDK.
          *
-         * @return <code>true</code> if this version is supported with the runtime JDK.
+         * @return <code>true</code>.
+         * @deprecated shall be no reason to be used.
          */
+        @Deprecated
         public boolean isCompatibleWithSystemJava() {
-            return isCompatibleWithJava(JAVA_VERSION);
+            return true;
         }
 
         /**
@@ -668,6 +652,7 @@
         }
 
         @Override
+        @SuppressWarnings("NestedAssignment")
         public void download(URI uri, File file) throws Exception {
             URL url = uri.toURL();
             URLConnection conn = url.openConnection();
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
index 1b0522f..865805c 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
@@ -55,21 +55,24 @@
 import java.util.Set;
 import java.util.WeakHashMap;
 import java.util.function.Function;
-import org.gradle.util.GradleVersion;
 import org.netbeans.api.project.ProjectInformation;
+import org.netbeans.api.project.ProjectManager;
+import org.netbeans.api.project.ProjectUtils;
 
 import org.netbeans.api.project.ui.OpenProjects;
-import org.netbeans.modules.gradle.NbGradleProjectImpl;
 import org.netbeans.modules.gradle.ProjectTrust;
 import org.netbeans.modules.gradle.actions.ActionToTaskUtils;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
 import org.netbeans.modules.gradle.api.execute.RunConfig.ExecFlag;
+import static org.netbeans.modules.gradle.customizer.GradleExecutionPanel.HINT_JDK_PLATFORM;
 import org.netbeans.modules.gradle.execute.ConfigurableActionProvider;
 import org.netbeans.modules.gradle.spi.GradleSettings;
 import org.netbeans.modules.gradle.execute.ProjectConfigurationSupport;
-import org.netbeans.modules.gradle.spi.actions.BeforeBuildActionHook;
 import org.netbeans.modules.gradle.spi.actions.ProjectActionMappingProvider;
 import org.netbeans.modules.gradle.spi.execute.GradleDistributionProvider;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager.JavaRuntime;
+import org.netbeans.spi.project.AuxiliaryProperties;
 import org.netbeans.spi.project.ProjectConfiguration;
 import org.netbeans.spi.project.SingleMethod;
 import org.openide.DialogDescriptor;
@@ -558,13 +561,14 @@
     }
 
     private static boolean isOptionEnabled(Project project, String option, boolean defaultValue) {
-        GradleBaseProject gbp = GradleBaseProject.get(project);
+        Project root = ProjectUtils.rootOf(project);
+        GradleBaseProject gbp = GradleBaseProject.get(root);
         if (gbp != null) {
             String value = gbp.getNetBeansProperty(option);
             if (value != null) {
                 return Boolean.valueOf(value);
             } else {
-                return NbGradleProject.getPreferences(project, false).getBoolean(option, defaultValue);
+                return NbGradleProject.getPreferences(root, false).getBoolean(option, defaultValue);
             }
         }
         return false;
@@ -672,6 +676,56 @@
         return getActivePlatform("deprecated"); //NOI18N
     }
 
+    /**
+     * Return the current active JavaRuntime used by the specified project.
+     * JavaRuntime is defined in the root project level. If there is no
+     * runtime specified on the root project, then this method would return the
+     * default runtime. Usually the one, which is used by the IDE.
+     * <p>
+     * It is possible that the ID representing the project runtime, has no
+     * associated runtime in the IDE. In this case a broken JavaRuntime would be
+     * returned with the ID, that would be used.
+     *
+     * @param project the project which root project specifies the runtime.
+     * @return the JavaRuntime to be used by the project, could be broken, but
+     *         not {@code null}
+     *
+     * @since 2.32
+     */
+    public static JavaRuntime getActiveRuntime(Project project) {
+        return ProjectManager.mutex().readAccess(() -> {
+            Project root = ProjectUtils.rootOf(project);
+            AuxiliaryProperties aux = root.getLookup().lookup(AuxiliaryProperties.class);
+            String id = aux.get(HINT_JDK_PLATFORM, true);
+            id = id != null ? id : JavaRuntimeManager.DEFAULT_RUNTIME_ID;
+
+            JavaRuntimeManager mgr = Lookup.getDefault().lookup(JavaRuntimeManager.class);
+            Map<String, JavaRuntime> runtimes = mgr.getAvailableRuntimes();
+            if (runtimes.containsKey(id)) {
+                return runtimes.get(id);
+            }
+            return JavaRuntimeManager.createJavaRuntime(id, null);
+        });
+    }
+
+    /**
+     * Sets the active JavaRuntime on the specified project root.
+     * 
+     * @param project the project , which root project shall be set the runtime on
+     * @param runtime The JavaRuntime to activate on the project or {@code null}
+     *                can be used to set the default runtime.
+     * 
+     * @since 2.32
+     */
+    public static void setActiveRuntime(Project project, JavaRuntime runtime) {
+        ProjectManager.mutex().postWriteRequest(() -> {
+            Project root = ProjectUtils.rootOf(project);
+            AuxiliaryProperties aux = root.getLookup().lookup(AuxiliaryProperties.class);
+            String id = (runtime != null) && !JavaRuntimeManager.DEFAULT_RUNTIME_ID.equals(runtime.getId()) ? runtime.getId() : null;
+            aux.put(HINT_JDK_PLATFORM, id, true);
+        });
+    }
+
     static GradleCommandLine getIncludedOpenProjects(Project project) {
         GradleCommandLine ret = new GradleCommandLine();
         Set<File> openRoots = new HashSet<>();
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/configurations/NewConfigurationPanel.java b/extide/gradle/src/org/netbeans/modules/gradle/configurations/NewConfigurationPanel.java
index cf3e300..fcf92a4 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/configurations/NewConfigurationPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/configurations/NewConfigurationPanel.java
@@ -27,10 +27,10 @@
 import java.util.stream.Collectors;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
-import javax.swing.text.Document;
 import javax.swing.text.EditorKit;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration;
+import org.netbeans.modules.gradle.customizer.BuildActionsCustomizer;
 import org.openide.NotificationLineSupport;
 import org.openide.filesystems.FileUtil;
 import org.openide.text.CloneableEditorSupport;
@@ -55,7 +55,7 @@
         initComponents();
         EditorKit kit = CloneableEditorSupport.getEditorKit("text/x-gradle-cli"); //NOI18N
         txParameters.setEditorKit(kit);
-        txParameters.getDocument().putProperty(Document.StreamDescriptionProperty, project);
+        txParameters.getDocument().putProperty(BuildActionsCustomizer.GRADLE_PROJECT_PROPERTY, project);
         if (isNew) {
             txId.getDocument().addDocumentListener(this);
             txId.getDocument().addDocumentListener(this);
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/customizer/BuildActionsCustomizer.java b/extide/gradle/src/org/netbeans/modules/gradle/customizer/BuildActionsCustomizer.java
index b2c77d3..ca3684b 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/customizer/BuildActionsCustomizer.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/customizer/BuildActionsCustomizer.java
@@ -40,7 +40,6 @@
 import javax.swing.JList;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
-import javax.swing.text.Document;
 import javax.swing.text.EditorKit;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.gradle.actions.CustomActionRegistrationSupport;
@@ -58,6 +57,9 @@
 @Messages("TXT_CUSTOM=Custom...")
 public class BuildActionsCustomizer extends javax.swing.JPanel {
 
+    //TODO: Move this one to GradleCommandLine in NetBeans 17
+    public static final String GRADLE_PROJECT_PROPERTY = "gradle-project"; //NOI18N
+
     private static final String CUSTOM_ACTION = Bundle.TXT_CUSTOM();
     private static final String CARD_NOSELECT = "empty"; //NOI18N
     private static final String CARD_DETAILS = "details"; //NOI18N
@@ -103,7 +105,7 @@
         tfLabel.getDocument().addDocumentListener(applyListener);
         EditorKit kit = CloneableEditorSupport.getEditorKit("text/x-gradle-cli"); //NOI18N
         taArgs.setEditorKit(kit);
-        taArgs.getDocument().putProperty(Document.StreamDescriptionProperty, project);
+        taArgs.getDocument().putProperty(GRADLE_PROJECT_PROPERTY, project);
         taArgs.getDocument().addDocumentListener(applyListener);
         initDefaultModels();
         comboReady = true;
@@ -185,7 +187,7 @@
             // in the other panel.
             GradleExecConfiguration cur = (GradleExecConfiguration)configModel.getSelectedItem();
             GradleExecConfiguration act = configSnapshot.getActiveConfiguration();
-            configModel.removeAllElements();;
+            configModel.removeAllElements();
             for (GradleExecConfiguration c : configSnapshot.getConfigurations()) {
                 configModel.addElement(c);
                 if (cur != null) {
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/customizer/Bundle.properties b/extide/gradle/src/org/netbeans/modules/gradle/customizer/Bundle.properties
index b621797..57af8d4 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/customizer/Bundle.properties
+++ b/extide/gradle/src/org/netbeans/modules/gradle/customizer/Bundle.properties
@@ -27,6 +27,7 @@
 ProjectInfoPanel.tfVersion.text=
 ProjectInfoPanel.jLabel4.text=Parent Project:
 ProjectInfoPanel.jLabel5.text=Plugins:
+
 BuildActionsCustomizer.lbActions.text=Configured Actions:
 BuildActionsCustomizer.lbNoAction.text=No Selected Action
 BuildActionsCustomizer.lbName.text=&Name:
@@ -36,21 +37,32 @@
 BuildActionsCustomizer.lbReloadRule.text=&Project Reload:
 BuildActionsCustomizer.cbRepeatable.text=&Repeatable
 BuildActionsCustomizer.lbTitle.text=Override IDE Default Action Binding and Custom Actions
-LicenseHeadersPanel.jLabel1.text=License Header
-LicenseHeadersPanel.rbGlobalLicense.text=Use Global License:
-LicenseHeadersPanel.rbCustomFile.text=Use Gradle Defined License:
-LicenseHeadersPanel.jLabel2.text=<html>Use the value of <b>netbeans.license</b> or in its absence <b>license</b>\nproperty of the project (or its parent). It is recommended to set this property on the\nroot project only. The value of the license property can be:\n<ul>\n  <li>Short name of a NetBeans Global license<br/>(e.g.: apache20)</li>\n  <li>Project directory relative path to a file.</li>\n  <li>Root project directory relative path to a file.</li>\n  <li>Absolute path to a file.</li>\n  <li>URI to a registered global license<br/>(e.g.: http://opensource.org/licenses/Apache-2.0)</li>\n</ul>
 BuildActionsCustomizer.jLabel1.text=Configure &Action:
-ProjectInfoPanel.jLabel6.text=Included Builds:
 BuildActionsCustomizer.cbRepeatable.toolTipText=Is this action allowed to be rerun from the output tab?
 BuildActionsCustomizer.lbReloadHints.text=<html>Reload Project after this action:\n<ul>\n<li><b>NEVER:</b> Do not reload.</li>\n<li><b>DEFAULT:</b> Reload only if the project had some problems.</li>\n<li><b>ALWAYS:</b> Always reload the project.</li>\n<li><b>ALWAYS_ONLINE:</b> Always reload the project, allowing Gradle to go online.</li>\n</ul>
-GradleExecutionPanel.lbReadOnly.text=Can be changed on the root project only.
-GradleExecutionPanel.lbTrustLevel.text=Trust level:
-GradleExecutionPanel.cbTrustLevel.NONE=Do not trust
-GradleExecutionPanel.cbTrustLevel.TEMPORARY=Trust just now
-GradleExecutionPanel.cbTrustLevel.PERMANENT=Trust permanently
 BuildActionsCustomizer.lbConfiguration.text=Override in Configuration:
 BuildActionsCustomizer.btnDisableAction.text=&Disable
 BuildActionsCustomizer.jLabel2.text=The action is disabled in this configuration.
 BuildActionsCustomizer.btnRestore.text=&Restore
 BuildActionsCustomizer.btnRemove2.text=Re&set
+
+LicenseHeadersPanel.jLabel1.text=License Header
+LicenseHeadersPanel.rbGlobalLicense.text=Use Global License:
+LicenseHeadersPanel.rbCustomFile.text=Use Gradle Defined License:
+LicenseHeadersPanel.jLabel2.text=<html>Use the value of <b>netbeans.license</b> or in its absence <b>license</b>\nproperty of the project (or its parent). It is recommended to set this property on the\nroot project only. The value of the license property can be:\n<ul>\n  <li>Short name of a NetBeans Global license<br/>(e.g.: apache20)</li>\n  <li>Project directory relative path to a file.</li>\n  <li>Root project directory relative path to a file.</li>\n  <li>Absolute path to a file.</li>\n  <li>URI to a registered global license<br/>(e.g.: http://opensource.org/licenses/Apache-2.0)</li>\n</ul>
+ProjectInfoPanel.jLabel6.text=Included Builds:
+
+
+GradleExecutionPanel.lbReadOnly.text=Can be changed on the root project only.
+GradleExecutionPanel.lbTrustLevel.text=Trust level:
+GradleExecutionPanel.cbTrustLevel.NONE=Do not trust
+GradleExecutionPanel.cbTrustLevel.TEMPORARY=Trust just now
+GradleExecutionPanel.cbTrustLevel.PERMANENT=Trust permanently
+GradleExecutionPanel.cbAugmentedBuild.text=&Augmented Build Execution
+GradleExecutionPanel.lbIncludeOpenProjects.text=<html>Create a composite project from this project and the other open Gradle projects by generating '--include-build' parameters.
+GradleExecutionPanel.cbIncludeOpenProjects.text=Include Open Projects
+GradleExecutionPanel.lbTrustTerms.text=<html><p>Executing Gradle can be potentially un-safe as it allows arbitrary code execution.</p>\n<p/>\n<p>By trusting this project, and with that all its subprojects, you entitle NetBeans to invoke Gradle to load project details without further confirmation.</p><p></p><p>Invoking any build related actions, would mark this project automatically trusted.</p>
+GradleExecutionPanel.lbAugmentedBuild.text=<html>Allow NetBeans to make on-the-fly changes to the Gradle build process. This way a few useful IDE actions/options can be enabled without actually changing the build files.
+GradleExecutionPanel.lbRuntime.text=Java &Runtime:
+GradleExecutionPanel.btManageRuntimes.text=Manage Runtimes...
+GradleExecutionPanel.btManageRuntimes.actionCommand=
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleCustomizerProvider.java b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleCustomizerProvider.java
index 5c1a0a4..4091f44 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleCustomizerProvider.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleCustomizerProvider.java
@@ -25,8 +25,6 @@
 import org.netbeans.spi.project.ui.support.ProjectCustomizer;
 import org.netbeans.spi.project.ui.CustomizerProvider;
 import org.netbeans.spi.project.ui.CustomizerProvider2;
-import org.openide.DialogDisplayer;
-import org.openide.NotifyDescriptor;
 import org.openide.util.NbBundle;
 
 import static org.netbeans.modules.gradle.customizer.Bundle.*;
@@ -63,19 +61,15 @@
     @NbBundle.Messages({
         "# {0} - project display name",
         "TIT_Project_Properties=Project Properties - {0}",
-        "TXT_Unloadable=Project is unloadable, the project information is unreliable. Show Project Properties dialog?",
-        "TIT_Unloadable=Project Unloadable"
+        "# {0} - project display name",
+        "TIT_Unloadable_Project_Properties=Project Properties - {0} (Unloadable)",
     })
     @Override
     public void showCustomizer(final String preselectedCategory, final String preselectedSubCategory) {
-        if (NbGradleProject.get(project).isUnloadable()) {
-            NotifyDescriptor.Confirmation nd = new NotifyDescriptor.Confirmation(TXT_Unloadable(), TIT_Unloadable());
-            nd.setOptionType(NotifyDescriptor.YES_NO_OPTION);
-            if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.NO_OPTION) {
-                return;
-            }
-        }
-//        try {
+        String displayName = ProjectUtils.getInformation(project).getDisplayName();
+        String title = NbGradleProject.get(project).isUnloadable()
+                ? TIT_Unloadable_Project_Properties(displayName)
+                : TIT_Project_Properties(displayName);
         Mutex.EVENT.readAccess(() -> {
             assert EventQueue.isDispatchThread();
             Lookup context = Lookups.singleton(project);
@@ -85,13 +79,10 @@
                     (ActionEvent ae) -> {/*noop*/},
                     null,
                     HELP_CTX);
-            dialog.setTitle(TIT_Project_Properties(ProjectUtils.getInformation(project).getDisplayName()));
+            dialog.setTitle(title);
             dialog.setModal(true);
             dialog.setVisible(true);
         });
-//        } catch (Exception ex) {
-//            Logger.getLogger(GradleCustomizerProvider.class.getName()).log(Level.SEVERE, "Cannot show project customizer", ex);
-//        }
     }
 
     @Override
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.form b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.form
index 03853d6..4677f36 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.form
+++ b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.form
@@ -38,39 +38,79 @@
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" attributes="0">
-              <EmptySpace min="-2" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" attributes="0">
+                      <EmptySpace min="6" pref="6" max="-2" attributes="0"/>
                       <Component id="lbReadOnly" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                   </Group>
                   <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace min="21" pref="21" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <Component id="lbTrustLevel" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                              <Component id="cbTrustLevel" max="32767" attributes="0"/>
-                          </Group>
-                          <Component id="lbTrustTerms" max="32767" attributes="0"/>
-                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lbTrustLevel" min="-2" pref="99" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="cbTrustLevel" linkSize="4" min="-2" pref="265" max="-2" attributes="0"/>
                   </Group>
               </Group>
+              <EmptySpace pref="317" max="32767" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="21" pref="21" max="-2" attributes="0"/>
+                      <Component id="lbIncludeOpenProjects" pref="0" max="32767" attributes="0"/>
+                  </Group>
+                  <Group type="102" attributes="0">
+                      <Component id="lbRuntime" min="-2" pref="99" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="cbRuntime" linkSize="4" min="-2" pref="265" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="btManageRuntimes" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+                  </Group>
+                  <Group type="102" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="cbIncludeOpenProjects" max="32767" attributes="0"/>
+                          <Group type="102" alignment="1" attributes="0">
+                              <EmptySpace min="21" pref="21" max="-2" attributes="0"/>
+                              <Component id="lbAugmentedBuild" pref="0" max="32767" attributes="0"/>
+                          </Group>
+                          <Component id="cbAugmentedBuild" alignment="0" max="32767" attributes="0"/>
+                          <Component id="jSeparator1" alignment="0" max="32767" attributes="0"/>
+                          <Component id="lbTrustTerms" alignment="1" pref="0" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
           </Group>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="0" attributes="0">
-              <EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="7" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="cbTrustLevel" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lbRuntime" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="btManageRuntimes" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="cbRuntime" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Component id="cbAugmentedBuild" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="lbAugmentedBuild" min="-2" pref="36" max="-2" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
+              <Component id="cbIncludeOpenProjects" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="lbIncludeOpenProjects" min="-2" pref="56" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jSeparator1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="lbTrustLevel" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="cbTrustLevel" alignment="3" min="-2" max="-2" attributes="0"/>
               </Group>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="lbTrustTerms" min="-2" pref="234" max="-2" attributes="0"/>
-              <EmptySpace pref="8" max="32767" attributes="0"/>
+              <Component id="lbTrustTerms" min="-2" pref="128" max="-2" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
               <Component id="lbReadOnly" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
@@ -78,8 +118,89 @@
     </DimensionLayout>
   </Layout>
   <SubComponents>
+    <Component class="javax.swing.JLabel" name="lbRuntime">
+      <Properties>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="cbRuntime"/>
+        </Property>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbRuntime.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cbRuntime">
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbRuntimeActionPerformed"/>
+      </Events>
+      <AuxValues>
+        <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;JavaRuntime&gt;"/>
+      </AuxValues>
+    </Component>
+    <Component class="javax.swing.JButton" name="btManageRuntimes">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.btManageRuntimes.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+        <Property name="actionCommand" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.btManageRuntimes.actionCommand" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btManageRuntimesActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="cbAugmentedBuild">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.cbAugmentedBuild.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lbAugmentedBuild">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbAugmentedBuild.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+        <Property name="verticalAlignment" type="int" value="1"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="cbIncludeOpenProjects">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.cbIncludeOpenProjects.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lbIncludeOpenProjects">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbIncludeOpenProjects.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+        <Property name="verticalAlignment" type="int" value="1"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JLabel" name="lbTrustLevel">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbTrustLevel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cbTrustLevel">
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbTrustLevelActionPerformed"/>
+      </Events>
+      <AuxValues>
+        <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;TrustLevel&gt;"/>
+      </AuxValues>
+    </Component>
     <Component class="javax.swing.JLabel" name="lbTrustTerms">
       <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbTrustTerms.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
         <Property name="verticalAlignment" type="int" value="1"/>
       </Properties>
     </Component>
@@ -93,17 +214,5 @@
         </Property>
       </Properties>
     </Component>
-    <Component class="javax.swing.JComboBox" name="cbTrustLevel">
-      <AuxValues>
-        <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;TrustLevel&gt;"/>
-      </AuxValues>
-    </Component>
-    <Component class="javax.swing.JLabel" name="lbTrustLevel">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/customizer/Bundle.properties" key="GradleExecutionPanel.lbTrustLevel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-      </Properties>
-    </Component>
   </SubComponents>
 </Form>
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.java b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.java
index 0904274..c167e85 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/customizer/GradleExecutionPanel.java
@@ -18,29 +18,41 @@
  */
 package org.netbeans.modules.gradle.customizer;
 
+import java.awt.Component;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+import java.util.prefs.Preferences;
+import javax.swing.ComboBoxModel;
 import javax.swing.DefaultComboBoxModel;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
+import javax.swing.event.ChangeListener;
+import javax.swing.plaf.UIResource;
 import org.netbeans.api.project.Project;
+import org.netbeans.api.project.ProjectUtils;
 import org.netbeans.modules.gradle.ProjectTrust;
 import org.netbeans.modules.gradle.api.GradleBaseProject;
+import org.netbeans.modules.gradle.api.NbGradleProject;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
 import org.openide.util.NbBundle;
-import org.openide.util.NbBundle.Messages;
 
 import static org.netbeans.modules.gradle.customizer.GradleExecutionPanel.TrustLevel.*;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager.JavaRuntime;
+import org.openide.util.Lookup;
+import org.openide.util.NbBundle.Messages;
+import org.openide.util.WeakListeners;
 
 /**
  *
  * @author lkishalmi
  */
-@Messages({
-    "GRADLE_TRUST_MSG=<html><p>Executing Gradle can be potentially un-safe as it "
-            + "allows arbitrary code execution.</p><p></p>"
-            + "<p>By trusting this project, and with that all its subprojects, "
-            + "you entitle NetBeans to invoke Gradle to load project details "
-            + "without further confirmation.</p><p></p>"
-            + "<p>Invoking any build related actions, would mark this project "
-            + "automatically trusted.</p>",
-})
 public class GradleExecutionPanel extends javax.swing.JPanel {
+    public static final String HINT_JDK_PLATFORM = "hint.jdkPlatform"; //NOI18N
     
     enum TrustLevel {
         PERMANENT,
@@ -54,37 +66,127 @@
         
     }
 
-    Project project;
+    private Project project;
+    private final JavaRuntimeManager runtimeManager;
+    private final ChangeListener runtimeChangeListener = (evt) -> managedRuntimeSetup();
+    private boolean readOnly = true;
 
     /**
      * Creates new form GradleExecutionPanel
      */
+    @Messages({
+        "NO_RUNTIME_SUPPORT_HINT=Runtime Change is not Supported",
+        "NO_RUNTIME_MANAGEMENT_HINT=Runtime Management is not Supported",
+    })
     public GradleExecutionPanel() {
         initComponents();
-        lbTrustTerms.setText(Bundle.GRADLE_TRUST_MSG());
+        runtimeManager = Lookup.getDefault().lookup(JavaRuntimeManager.class);
+        if (runtimeManager == null) {
+            cbRuntime.setToolTipText(Bundle.NO_RUNTIME_SUPPORT_HINT());
+            btManageRuntimes.setToolTipText(Bundle.NO_RUNTIME_SUPPORT_HINT());
+        } else {
+            runtimeManager.addChangeListener(WeakListeners.change(runtimeChangeListener, runtimeManager));
+            managedRuntimeSetup();
+            if (!runtimeManager.manageRuntimesAction().isPresent()) {
+                btManageRuntimes.setToolTipText(Bundle.NO_RUNTIME_MANAGEMENT_HINT());
+            }
+        }
+
     }
 
     public GradleExecutionPanel(Project project) {
         this();
         this.project = project;
         GradleBaseProject gbp = GradleBaseProject.get(project);
-        if (gbp != null) {
-            lbReadOnly.setVisible(!gbp.isRoot());
-            lbTrustLevel.setEnabled(gbp.isRoot());
-            cbTrustLevel.setEnabled(gbp.isRoot());
-            lbTrustTerms.setEnabled(gbp.isRoot());
-            
-            cbTrustLevel.setModel(new DefaultComboBoxModel<>(TrustLevel.values()));
+        readOnly = (gbp != null) && !gbp.isRoot();
 
-            if (ProjectTrust.getDefault().isTrustedPermanently(project)) {
-                cbTrustLevel.setSelectedItem(PERMANENT);
-            } else if (ProjectTrust.getDefault().isTrusted(project)) {
-                cbTrustLevel.setSelectedItem(TEMPORARY);
-            } else {
-                cbTrustLevel.setSelectedItem(NONE);
+        lbReadOnly.setVisible(readOnly);
+        lbTrustLevel.setEnabled(!readOnly);
+        cbTrustLevel.setEnabled(!readOnly);
+        lbTrustTerms.setEnabled(!readOnly);
+
+        cbTrustLevel.setModel(new DefaultComboBoxModel<>(TrustLevel.values()));
+
+        if (ProjectTrust.getDefault().isTrustedPermanently(project)) {
+            cbTrustLevel.setSelectedItem(PERMANENT);
+            setJavaSettingsEnabled(!readOnly);
+        } else if (ProjectTrust.getDefault().isTrusted(project)) {
+            cbTrustLevel.setSelectedItem(TEMPORARY);
+            setJavaSettingsEnabled(!readOnly);
+        } else {
+            cbTrustLevel.setSelectedItem(NONE);
+            setJavaSettingsEnabled(false);
+        }
+
+        cbRuntime.setRenderer(new RuntimeRenderer());
+        selectRuntime(RunUtils.getActiveRuntime(project));
+
+        setupCheckBox(cbAugmentedBuild, RunUtils.PROP_AUGMENTED_BUILD, true);
+        setupCheckBox(cbIncludeOpenProjects, RunUtils.PROP_INCLUDE_OPEN_PROJECTS, false);
+    }
+
+    private void selectRuntime(JavaRuntime selected) {
+        ComboBoxModel<JavaRuntime> model = cbRuntime.getModel();
+        if (selected == null || selected.isBroken()) {
+            model.setSelectedItem(selected);
+        } else {
+            for (int i = 0; i < model.getSize(); i++) {
+                JavaRuntime rt = model.getElementAt(i);
+                if (rt.equals(selected)) {
+                    model.setSelectedItem(model.getElementAt(i));
+                    break;
+                }
             }
         }
     }
+    
+    @Messages({
+        "# {0} - the name of the setting property",
+        "COMPILE_DISABLED_HINT=<html>This option is currently specificly controlled"
+        + " through your Gradle project (most likely through "
+        + "<b>gradle.properties</b>) by <br/> <b>netbeans.{0}</b> property."
+    })
+    private void setupCheckBox(JCheckBox check, String property, boolean defaultValue) {
+        Project root = ProjectUtils.rootOf(project);
+        GradleBaseProject gbp = GradleBaseProject.get(root);
+        if (gbp != null) {
+            if (gbp.getNetBeansProperty(property) != null) {
+                check.setEnabled(!readOnly);
+                check.setSelected(Boolean.parseBoolean(gbp.getNetBeansProperty(property)));
+                check.setToolTipText(Bundle.COMPILE_DISABLED_HINT(property));
+            } else {
+                Preferences prefs = NbGradleProject.getPreferences(root, false);
+                check.setSelected(prefs.getBoolean(property, defaultValue));
+            }
+        }
+    }
+
+    private void managedRuntimeSetup() {
+        int selected = cbRuntime.getSelectedIndex();
+        JavaRuntime runtime = selected != -1 ? cbRuntime.getModel().getElementAt(selected) : null;
+        Map<String, JavaRuntime> availabeRuntimes = runtimeManager != null ? runtimeManager.getAvailableRuntimes() : Collections.emptyMap();
+
+        JavaRuntime[] runtimes = availabeRuntimes.values().toArray(new JavaRuntime[0]);
+        Arrays.sort(runtimes);
+        
+        DefaultComboBoxModel<JavaRuntime> model = new DefaultComboBoxModel<>(runtimes);
+        cbRuntime.setModel(model);
+        selectRuntime(runtime);
+    }
+
+    private void setJavaSettingsEnabled(boolean b) {
+        boolean enableRuntime = b && (runtimeManager != null);
+
+        lbRuntime.setEnabled(enableRuntime);
+        cbRuntime.setEnabled(enableRuntime);
+        btManageRuntimes.setEnabled(enableRuntime && runtimeManager.manageRuntimesAction().isPresent());
+
+        cbAugmentedBuild.setEnabled(b);
+        lbAugmentedBuild.setEnabled(b);
+
+        cbIncludeOpenProjects.setEnabled(b);
+        lbIncludeOpenProjects.setEnabled(b);
+    }
 
     /**
      * This method is called from within the constructor to initialize the form.
@@ -95,82 +197,238 @@
     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
     private void initComponents() {
 
+        lbRuntime = new javax.swing.JLabel();
+        cbRuntime = new javax.swing.JComboBox<>();
+        btManageRuntimes = new javax.swing.JButton();
+        cbAugmentedBuild = new javax.swing.JCheckBox();
+        lbAugmentedBuild = new javax.swing.JLabel();
+        cbIncludeOpenProjects = new javax.swing.JCheckBox();
+        lbIncludeOpenProjects = new javax.swing.JLabel();
+        jSeparator1 = new javax.swing.JSeparator();
+        lbTrustLevel = new javax.swing.JLabel();
+        cbTrustLevel = new javax.swing.JComboBox<>();
         lbTrustTerms = new javax.swing.JLabel();
         lbReadOnly = new javax.swing.JLabel();
-        cbTrustLevel = new javax.swing.JComboBox<>();
-        lbTrustLevel = new javax.swing.JLabel();
 
+        lbRuntime.setLabelFor(cbRuntime);
+        org.openide.awt.Mnemonics.setLocalizedText(lbRuntime, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbRuntime.text")); // NOI18N
+
+        cbRuntime.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cbRuntimeActionPerformed(evt);
+            }
+        });
+
+        org.openide.awt.Mnemonics.setLocalizedText(btManageRuntimes, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.btManageRuntimes.text")); // NOI18N
+        btManageRuntimes.setActionCommand(org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.btManageRuntimes.actionCommand")); // NOI18N
+        btManageRuntimes.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                btManageRuntimesActionPerformed(evt);
+            }
+        });
+
+        org.openide.awt.Mnemonics.setLocalizedText(cbAugmentedBuild, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.cbAugmentedBuild.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(lbAugmentedBuild, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbAugmentedBuild.text")); // NOI18N
+        lbAugmentedBuild.setVerticalAlignment(javax.swing.SwingConstants.TOP);
+
+        org.openide.awt.Mnemonics.setLocalizedText(cbIncludeOpenProjects, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.cbIncludeOpenProjects.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(lbIncludeOpenProjects, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbIncludeOpenProjects.text")); // NOI18N
+        lbIncludeOpenProjects.setVerticalAlignment(javax.swing.SwingConstants.TOP);
+
+        org.openide.awt.Mnemonics.setLocalizedText(lbTrustLevel, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbTrustLevel.text")); // NOI18N
+
+        cbTrustLevel.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cbTrustLevelActionPerformed(evt);
+            }
+        });
+
+        org.openide.awt.Mnemonics.setLocalizedText(lbTrustTerms, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbTrustTerms.text")); // NOI18N
         lbTrustTerms.setVerticalAlignment(javax.swing.SwingConstants.TOP);
 
         lbReadOnly.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/netbeans/modules/gradle/resources/info.png"))); // NOI18N
         org.openide.awt.Mnemonics.setLocalizedText(lbReadOnly, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbReadOnly.text")); // NOI18N
 
-        org.openide.awt.Mnemonics.setLocalizedText(lbTrustLevel, org.openide.util.NbBundle.getMessage(GradleExecutionPanel.class, "GradleExecutionPanel.lbTrustLevel.text")); // NOI18N
-
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
         this.setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(6, 6, 6)
+                        .addComponent(lbReadOnly))
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(lbTrustLevel, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(cbTrustLevel, javax.swing.GroupLayout.PREFERRED_SIZE, 265, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(317, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(layout.createSequentialGroup()
-                        .addComponent(lbReadOnly)
+                        .addGap(21, 21, 21)
+                        .addComponent(lbIncludeOpenProjects, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lbRuntime, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(cbRuntime, javax.swing.GroupLayout.PREFERRED_SIZE, 265, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(btManageRuntimes)
                         .addGap(0, 0, Short.MAX_VALUE))
                     .addGroup(layout.createSequentialGroup()
-                        .addGap(21, 21, 21)
                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(layout.createSequentialGroup()
-                                .addComponent(lbTrustLevel)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addComponent(cbTrustLevel, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                            .addComponent(lbTrustTerms, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
-                .addContainerGap())
+                            .addComponent(cbIncludeOpenProjects, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                .addGap(21, 21, 21)
+                                .addComponent(lbAugmentedBuild, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                            .addComponent(cbAugmentedBuild, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(jSeparator1)
+                            .addComponent(lbTrustTerms, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                        .addContainerGap())))
         );
+
+        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cbRuntime, cbTrustLevel});
+
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
-                .addGap(5, 5, 5)
+                .addGap(7, 7, 7)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbTrustLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lbTrustLevel))
+                    .addComponent(lbRuntime)
+                    .addComponent(btManageRuntimes)
+                    .addComponent(cbRuntime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(cbAugmentedBuild)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(lbTrustTerms, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)
+                .addComponent(lbAugmentedBuild, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(cbIncludeOpenProjects)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(lbIncludeOpenProjects, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lbTrustLevel)
+                    .addComponent(cbTrustLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(lbTrustTerms, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addComponent(lbReadOnly)
                 .addContainerGap())
         );
     }// </editor-fold>//GEN-END:initComponents
 
+    private void btManageRuntimesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btManageRuntimesActionPerformed
+        if ((runtimeManager != null) && runtimeManager.manageRuntimesAction().isPresent()) {
+            runtimeManager.manageRuntimesAction().get().run();
+        }
+    }//GEN-LAST:event_btManageRuntimesActionPerformed
+
+    private void cbTrustLevelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbTrustLevelActionPerformed
+        setJavaSettingsEnabled(!readOnly && (cbTrustLevel.getSelectedItem() != TrustLevel.NONE));
+    }//GEN-LAST:event_cbTrustLevelActionPerformed
+
+    private void cbRuntimeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbRuntimeActionPerformed
+        JavaRuntime rt = (JavaRuntime) cbRuntime.getSelectedItem();
+        String fore = (rt != null) && rt.isBroken() ? "nb.errorForeground" : "ComboBox.foreground"; //NOI18N
+        cbRuntime.setForeground(UIManager.getColor(fore));
+    }//GEN-LAST:event_cbRuntimeActionPerformed
+
     // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton btManageRuntimes;
+    private javax.swing.JCheckBox cbAugmentedBuild;
+    private javax.swing.JCheckBox cbIncludeOpenProjects;
+    private javax.swing.JComboBox<JavaRuntime> cbRuntime;
     private javax.swing.JComboBox<TrustLevel> cbTrustLevel;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JLabel lbAugmentedBuild;
+    private javax.swing.JLabel lbIncludeOpenProjects;
     private javax.swing.JLabel lbReadOnly;
+    private javax.swing.JLabel lbRuntime;
     private javax.swing.JLabel lbTrustLevel;
     private javax.swing.JLabel lbTrustTerms;
     // End of variables declaration//GEN-END:variables
 
+    private void saveTrustLevel(Project project) {
+        TrustLevel v = (TrustLevel)cbTrustLevel.getSelectedItem();
+        if (v == null) {
+            v = NONE;
+        }
+        switch (v) {
+            case NONE:
+                ProjectTrust.getDefault().distrustProject(project);
+                break;
+
+            case PERMANENT:
+                ProjectTrust.getDefault().trustProject(project, true);
+                break;
+
+            case TEMPORARY:
+                if (ProjectTrust.getDefault().isTrustedPermanently(project)) {
+                    ProjectTrust.getDefault().distrustProject(project);
+                }
+                ProjectTrust.getDefault().trustProject(project, false);
+                break;
+        }
+    }
+
+    private void saveJavaRuntime(Project project) {
+        RunUtils.setActiveRuntime(project, (JavaRuntime) cbRuntime.getSelectedItem());
+    }
+
+    private void saveCheckBox(JCheckBox check, String property) {
+        GradleBaseProject gbp = project != null ? GradleBaseProject.get(project) : null;
+        if ((gbp != null) && (gbp.getNetBeansProperty(property) == null)) {
+            Preferences prefs = NbGradleProject.getPreferences(project, false);
+            prefs.putBoolean(property, check.isSelected());
+        }
+    }
+
     void save() {
         if (project != null) {
-            TrustLevel v = (TrustLevel)cbTrustLevel.getSelectedItem();
-            if (v == null) {
-                v = NONE;
+            saveTrustLevel(project);
+            saveJavaRuntime(project);
+
+            saveCheckBox(cbAugmentedBuild, RunUtils.PROP_AUGMENTED_BUILD);
+            saveCheckBox(cbIncludeOpenProjects, RunUtils.PROP_INCLUDE_OPEN_PROJECTS);
+        }
+    }
+
+    private class RuntimeRenderer extends JLabel implements ListCellRenderer, UIResource {
+
+        @Override
+        @NbBundle.Messages({
+            "# {0} - runtimeId", 
+            "LBL_MissingRuntime=Missing Runtime: {0}"
+        })
+        public Component getListCellRendererComponent(JList list, Object value,
+                int index, boolean isSelected,
+                boolean cellHasFocus) {
+            setOpaque(true);
+            if (value instanceof JavaRuntime) {
+                JavaRuntime rt = (JavaRuntime)value;
+                setText(rt.getDisplayName());
+                if ( isSelected ) {
+                    setBackground(list.getSelectionBackground());
+                    setForeground(list.getSelectionForeground());
+                } else {
+                    setBackground(list.getBackground());
+                    setForeground(list.getForeground());
+                }
+                if (rt.isBroken()) {
+                    setText(Bundle.LBL_MissingRuntime(value));
+                }
+            } else {
+                if (value == null) {
+                    setText("");
+                }
             }
-            switch (v) {
-                case NONE:
-                    ProjectTrust.getDefault().distrustProject(project);
-                    break;
-                    
-                case PERMANENT:
-                    ProjectTrust.getDefault().trustProject(project, true);
-                    break;
-                    
-                case TEMPORARY:
-                    if (ProjectTrust.getDefault().isTrustedPermanently(project)) {
-                        ProjectTrust.getDefault().distrustProject(project);
-                    }
-                    ProjectTrust.getDefault().trustProject(project, false);
-                    break;
-            }
+            return this;
         }
     }
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/Bundle.properties b/extide/gradle/src/org/netbeans/modules/gradle/execute/Bundle.properties
index 9ecf071..e609f01 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/execute/Bundle.properties
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/Bundle.properties
@@ -18,7 +18,7 @@
 GradleExecutorOptionsPanel.lbTasks.text=Gradle Command:
 GradleExecutorOptionsPanel.jScrollPane1.TabConstraints.tabTitle=Edit
 GradleExecutorOptionsPanel.jScrollPane2.TabConstraints.tabTitle=Preview
-ExecutionOptionsPanel.cbNoRebuild.text=Do not Rebuild Project Dependencies
+ExecutionOptionsPanel.cbNoRebuild.text=<html><strike>Do not Rebuild Project Dependencies</strike>
 ExecutionOptionsPanel.cbSkipCheck.text=Skip 'check' for non-test Related Executions
 ExecutionOptionsPanel.cbSkipTest.text=Skip 'test' for non-test Related Executions
 ExecutionOptionsPanel.cbOffline.text=Offline
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/DefaultJavaRuntimeManager.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/DefaultJavaRuntimeManager.java
new file mode 100644
index 0000000..dad0aac
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/DefaultJavaRuntimeManager.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.execute;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager;
+import org.openide.util.NbBundle.Messages;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ *
+ * @author Laszlo Kishalmi
+ */
+@ServiceProvider(service = JavaRuntimeManager.class)
+public class DefaultJavaRuntimeManager implements JavaRuntimeManager {
+
+    private final Map<String, JavaRuntime> defaultRuntimes;
+    
+    @Messages({
+        "# {0} - The version of the Java Runtime",
+        "DEFAULT_JAVA_RUNTIME_NAME=Java {0} (Default)"
+    })
+    public DefaultJavaRuntimeManager() {
+        File javaHome = new File(System.getProperty("java.home")); //NOI18N
+        String javaVersion = System.getProperty("java.specification.version"); //NOI18N
+        JavaRuntime defaultRuntime = JavaRuntimeManager.createJavaRuntime(DEFAULT_RUNTIME_ID, Bundle.DEFAULT_JAVA_RUNTIME_NAME(javaVersion), javaHome);
+        
+        defaultRuntimes = Collections.singletonMap(DEFAULT_RUNTIME_ID, defaultRuntime);
+    }
+
+    @Override
+    public Map<String, JavaRuntime> getAvailableRuntimes() {
+        return defaultRuntimes;
+    }
+
+}
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/ExecutionOptionsPanel.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/ExecutionOptionsPanel.java
index 6a5c9d3..a3f02aa 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/execute/ExecutionOptionsPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/ExecutionOptionsPanel.java
@@ -161,7 +161,7 @@
                     .addComponent(cbSkipCheck))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbNoRebuild)
+                    .addComponent(cbNoRebuild, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(cbSkipTest))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
index cd10f28..0e80a05 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
@@ -56,6 +56,7 @@
 import org.netbeans.api.project.ProjectUtils;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
 import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration;
+import org.netbeans.modules.gradle.execute.GradleNetworkProxySupport.ProxyResult;
 import org.netbeans.modules.gradle.spi.GradleFiles;
 import org.netbeans.modules.gradle.spi.execute.GradleDistributionProvider;
 import org.netbeans.modules.gradle.spi.execute.GradleJavaPlatformProvider;
@@ -239,6 +240,19 @@
                 }
             }
             GradleExecAccessor.instance().configureGradleHome(buildLauncher);
+            GradleNetworkProxySupport proxySupport = config.getProject().getLookup().lookup(GradleNetworkProxySupport.class);
+            if (proxySupport != null) {
+                try {
+                    ProxyResult result = proxySupport.checkProxySettings().get();
+                    if (result.getStatus() == GradleNetworkProxySupport.Status.ABORT) {
+                        showAbort();
+                        return;
+                    }
+                    buildLauncher = result.configure(buildLauncher);
+                } catch (InterruptedException | ExecutionException ex) {
+                    throw new BuildCancelledException("Interrupted", ex);
+                }
+            }
             buildLauncher.run();
             StatusDisplayer.getDefault().setStatusText(Bundle.BUILD_SUCCESS(getProjectName()));
             gradleTask.finish(0);
@@ -283,7 +297,6 @@
         String javaHome = null;
         if (platformProvider != null) {
             try {
-                buildLauncher.setJavaHome(platformProvider.getJavaHome());
                 javaHome = platformProvider.getJavaHome().getCanonicalPath();
             } catch (IOException ex) {
                 io.getErr().println(Bundle.NO_PLATFORM(ex.getMessage()));
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleExecutorOptionsPanel.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleExecutorOptionsPanel.java
index 6f3cca7..e87cec2 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleExecutorOptionsPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleExecutorOptionsPanel.java
@@ -20,11 +20,11 @@
 package org.netbeans.modules.gradle.execute;
 
 import org.netbeans.modules.gradle.api.execute.GradleCommandLine;
-import javax.swing.text.Document;
 import javax.swing.text.EditorKit;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.gradle.actions.CustomActionRegistrationSupport;
 import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration;
+import org.netbeans.modules.gradle.customizer.BuildActionsCustomizer;
 import org.openide.text.CloneableEditorSupport;
 
 /**
@@ -50,7 +50,7 @@
         EditorKit kit = CloneableEditorSupport.getEditorKit("text/x-gradle-cli"); //NOI18N
         epCLI.setEditorKit(kit);
         if (project != null) {
-            epCLI.getDocument().putProperty(Document.StreamDescriptionProperty, project);
+            epCLI.getDocument().putProperty(BuildActionsCustomizer.GRADLE_PROJECT_PROPERTY, project);
         } else {
             tfRememberAs.setEnabled(false);
             lbRememberAs.setEnabled(false);
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/GradleJavaPlatformProviderImpl.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleJavaPlatformProviderImpl.java
similarity index 66%
rename from java/gradle.java/src/org/netbeans/modules/gradle/java/execute/GradleJavaPlatformProviderImpl.java
rename to extide/gradle/src/org/netbeans/modules/gradle/execute/GradleJavaPlatformProviderImpl.java
index 309ff5c..99b3995 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/GradleJavaPlatformProviderImpl.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleJavaPlatformProviderImpl.java
@@ -16,20 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.gradle.java.execute;
+package org.netbeans.modules.gradle.execute;
 
 import java.io.File;
 import java.io.FileNotFoundException;
-import org.netbeans.api.java.platform.JavaPlatform;
 import org.netbeans.api.project.Project;
+import org.netbeans.modules.gradle.api.NbGradleProject;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
 import org.netbeans.modules.gradle.spi.execute.GradleJavaPlatformProvider;
-import org.openide.filesystems.FileUtil;
-import org.openide.util.Pair;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager.JavaRuntime;
+import org.netbeans.spi.project.ProjectServiceProvider;
 
 /**
  *
- * @author lkishalmi
+ * @author Laszlo Kishalmi
  */
+@ProjectServiceProvider(service = GradleJavaPlatformProvider.class, projectType = NbGradleProject.GRADLE_PROJECT_TYPE)
 public final class GradleJavaPlatformProviderImpl implements GradleJavaPlatformProvider {
 
     final Project project;
@@ -38,15 +40,12 @@
         this.project = project;
     }
 
-    
     @Override
     public File getJavaHome() throws FileNotFoundException {
-        Pair<String, JavaPlatform> platform = JavaRunUtils.getActivePlatform(project);
-        if (platform.second() == null || !platform.second().isValid() || platform.second().getInstallFolders().isEmpty()) {
-            throw new FileNotFoundException(platform.first());
+        JavaRuntime rt = RunUtils.getActiveRuntime(project);
+        if (rt.isBroken()) {
+            throw new FileNotFoundException("Could not found runtime for: " + rt.getId());
         }
-        File javaHome = FileUtil.toFile(platform.second().getInstallFolders().iterator().next());
-        return javaHome;
+        return rt.getJavaHome();
     }
-
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleNetworkProxySupport.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleNetworkProxySupport.java
new file mode 100644
index 0000000..10a4181
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleNetworkProxySupport.java
@@ -0,0 +1,596 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.execute;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.gradle.tooling.BuildActionExecuter;
+import org.gradle.tooling.ConfigurableLauncher;
+import org.netbeans.api.project.Project;
+import org.netbeans.modules.gradle.api.NbGradleProject;
+import org.netbeans.modules.gradle.options.GradleExperimentalSettings;
+import org.netbeans.modules.gradle.options.NetworkProxySettings;
+import org.netbeans.modules.gradle.spi.GradleFiles;
+import org.netbeans.spi.project.ProjectServiceProvider;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.awt.NotificationDisplayer;
+import org.openide.awt.StatusDisplayer;
+import org.openide.filesystems.FileUtil;
+import org.openide.util.EditableProperties;
+import org.openide.util.Exceptions;
+import org.openide.util.NbBundle;
+
+/**
+ * Support for proxy autodetection or autoconfiguration. The class works with {@link GradleExperimentalSettings} and {@link NetworkProxySettings} to determine
+ * the behaviour:
+ * <ul>
+ * <li>{@link NetworkProxySettings#IGNORE} - skip autodetection at all
+ * <li>{@link NetworkProxySettings#NOTICE} - just note mismatch, do not update configuration and continue building
+ * <li>{@link NetworkProxySettings#OVERRIDE} - override gradle.properties by explicit system properties
+ * <li>{@link NetworkProxySettings#UPDATE} - automatically update settings
+ * {@link NetworkProxySettings#ASK} - ask the user
+ * </ul>
+ * The user choice is remembered so for the same project and detected proxy, the question is not asked again. Also notice is displayed just once for project+detected proxy,
+ * so the log is not full of reminders.
+ * 
+ * @author sdedic
+ */
+@ProjectServiceProvider(service = GradleNetworkProxySupport.class, projectType = NbGradleProject.GRADLE_PROJECT_TYPE)
+public class GradleNetworkProxySupport {
+    private static final Logger LOG = Logger.getLogger(GradleNetworkProxySupport.class.getName());
+    /**
+     * Sample probe URI - google's public DNS server
+     */
+    private static final String PROBE_URI_STRING = "http://search.maven.org"; // NOI18N
+    
+    private static final String FILENAME_SUFFIX_OLD = ".old"; // NOI18N
+    private static final String SYSTEMPROP_HTTPS_PROXYPORT = "systemProp.https.proxyPort"; // NOI18N
+    private static final String SYSTEMPROP_HTTP_PROXYPORT = "systemProp.http.proxyPort"; // NOI18N
+    private static final String SYSTEMPROP_HTTPS_PROXYHOST = "systemProp.https.proxyHost"; // NOI18N
+    private static final String SYSTEMPROP_HTTP_PROXYHOST = "systemProp.http.proxyHost"; // NOI18N
+
+    private static final String JVM_HTTPS_PROXYPORT = "https.proxyPort"; // NOI18N
+    private static final String JVM_HTTP_PROXYPORT = "http.proxyPort"; // NOI18N
+    private static final String JVM_HTTPS_PROXYHOST = "https.proxyHost"; // NOI18N
+    private static final String JVM_HTTP_PROXYHOST = "http.proxyHost"; // NOI18N
+    
+    private static final int PORT_DEFAULT_HTTPS = 1080;
+    private static final int PORT_DEFAULT_HTTP = 80;
+    
+    private final Project project;
+    
+    /**
+     * Past decisions made by the user during this session. The Map is used so the user si not bothered that often with questions.
+     * If the user chooses 'override' or 'continue' (no action), the Map receives the public proxy spec and the result. If the same
+     * effective proxy is detected, the user is not asked again.
+     */
+    // @GuardedBy(this)
+    private Map<String, ProxyResult>    acknowledgedResults = new HashMap<>();
+    
+    public GradleNetworkProxySupport(Project project) {
+        this.project = project;
+    }
+    
+    public CompletableFuture<ProxyResult> checkProxySettings() {
+        return new Processor().checkProxy();
+    }
+    
+    public enum Status {
+        UNKNOWN,
+        CONTINUE,
+        RECONFIGURED,
+        OVERRIDE,
+        ABORT
+    }
+    
+    public static final class ProxyResult {
+        private final Status status;
+        private final Proxy proxy;
+        private final String toolProxy;
+        private final String proxyHost;
+        private final String proxySpec;
+        private final int proxyPort;
+
+        public ProxyResult(Status status, Proxy proxy) {
+            this.status = status;
+            this.proxy = proxy;
+            this.toolProxy = null;
+            this.proxySpec = null;
+            this.proxyHost = null;
+            this.proxyPort = -1;
+        }
+        
+        public ProxyResult(Status status, Proxy proxy, String toolProxy, String proxySpec, String proxyHost, int proxyPort) {
+            this.status = status;
+            this.proxy = proxy;
+            this.toolProxy = toolProxy;
+            this.proxySpec = proxySpec;
+            this.proxyHost = proxyHost;
+            this.proxyPort = proxyPort;
+        }
+
+        public Status getStatus() {
+            return status;
+        }
+
+        public Proxy getProxy() {
+            return proxy;
+        }
+
+        public String getToolProxy() {
+            return toolProxy;
+        }
+
+        public String getProxySpec() {
+            return proxySpec;
+        }
+        
+        public <T > BuildActionExecuter<T> configure(BuildActionExecuter<T> executor) {
+            configure((ConfigurableLauncher)executor);
+            return executor;
+        }
+        
+        public <T extends ConfigurableLauncher> T configure(T executor) {
+            if (status != Status.OVERRIDE) {
+                return executor;
+            }
+            addSystemProperty(executor, JVM_HTTP_PROXYHOST, proxyHost);
+            addSystemProperty(executor, JVM_HTTP_PROXYPORT, Integer.toString(proxyPort));
+            addSystemProperty(executor, JVM_HTTPS_PROXYHOST, proxyHost);
+            addSystemProperty(executor, JVM_HTTPS_PROXYPORT, Integer.toString(proxyPort));
+            
+            return executor;
+        }
+        
+        private void addSystemProperty(ConfigurableLauncher<?> executer, String propName, String value) {
+            executer.addJvmArguments("-D" + propName + "=" + (value == null ? "" : value));
+        }
+    }
+
+    @NbBundle.Messages({
+        "TITLE_GradleProxyMismatch=Possible Network Proxy Issue",
+        "# {0} - gradle proxy",
+        "MSG_ProxyMisconfiguredDirect=Gradle is configured for a proxy {0}, but the system does not require a proxy for network connections. Proxy settings should be removed from user gradle.properties.",
+        "# {0} - system proxy",
+        "MSG_ProxyMisconfiguredMissing=Gradle is not configured to use a network proxy, but the proxy {0} seems to be required for network communication. User gradle.properties should be updated to specify a proxy.",
+        "# {0} - system proxy",
+        "# {1} - gradle proxy",
+        "MSG_ProxyMisconfiguredOther=Gradle is configured to use a network proxy {1}, but the proxy {0} seems to be required for network communication. Proxy settings should be updated in user gradle.properties.",
+        "MSG_AppendAskUpdate=\nUpdate Gradle configuration ? Choose \"Override\" to apply detected proxy only to IDE operations.",
+        "MSG_AppendAskUpdate2=\nUpdate Gradle configuration ?",
+        "ACTION_Override=Override",
+        "ACTION_Continue=Keep settings",
+        "# {0} - date/time of the update",
+        "COMMENT_CreatedByNetBeans=# This proxy configuration has been updated by Apache NetBeans on {0}",
+        "TITLE_ConfigUpdateFailed=Configuration update failed",
+        "# {0} - error message",
+        "ERROR_ConfigUpdateFailed=Failed to modify Gradle user properties: {0}",
+        "# {0} - proxy specification",
+        "MSG_ProxySetTo=Gradle Network proxy set to: {0}",
+        "MSG_ProxyCleared=Gradle Network proxy removed",
+        
+        "# Branding API: change to false to disable suggestion to override proxies in Gradle invocation",
+        "CTRL_SuggestProxyOverride=true"
+    })
+    /**
+     * Encapsulates a single check to avoid an enormous method or a ton of parameters passed through
+     * a method chain. Should be constructed for each new check separately.
+     */
+    private class Processor {
+        Proxy publicProxy;
+        String publicProxyHost;
+        int publicProxyPort;
+        int publicProxyNonDefaultPort;
+        
+        String proxyAuthority;
+        String proxyHost;
+        String publicProxySpec;
+        
+        int proxyPort;
+        GradleFiles gradleFiles;
+        
+        public CompletableFuture<ProxyResult> checkProxy() {
+            boolean supportOverride = NetworkProxySettings.allowProxyOverride();
+            NetworkProxySettings action = GradleExperimentalSettings.getDefault().getNetworkProxy();
+            if (action == NetworkProxySettings.IGNORE) {
+                return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+            }
+            
+            obtainPublicProxy();
+            loadProjectProxy();
+            
+            boolean direct = publicProxy == null || publicProxy.type() == Proxy.Type.DIRECT;
+            
+            if (direct && proxyAuthority == null || gradleFiles == null) {
+                LOG.log(Level.FINE, "Project does not specify a proxy and none is needed");
+                return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+            }
+            
+            if (publicProxy != null) {
+                if (publicProxyHost == null) {
+                    // unable to decipher proxy address
+                    LOG.log(Level.WARNING, "Unable to decipher proxy: {0}", publicProxy);
+                    return CompletableFuture.completedFuture(new ProxyResult(Status.UNKNOWN, null));
+                }
+                if (publicProxyHost.equals(proxyHost) && proxyPort == publicProxyPort) {
+                    LOG.log(Level.FINE, "Project specifies detected proxy: {0}", publicProxySpec);
+                    return CompletableFuture.completedFuture(new ProxyResult(Status.CONTINUE, publicProxy));
+                }
+            }
+            
+            // at this point, it's obvious that 
+            
+            String userMessage;
+            
+            if (direct) {
+                userMessage = Bundle.MSG_ProxyMisconfiguredDirect(proxyAuthority);
+            } else if (proxyAuthority == null) {
+                userMessage = Bundle.MSG_ProxyMisconfiguredMissing(publicProxySpec);
+            } else {
+                userMessage = Bundle.MSG_ProxyMisconfiguredOther(publicProxySpec, proxyAuthority);
+            }
+            
+            ProxyResult result;
+            synchronized (this) {
+                result = acknowledgedResults.get(publicProxySpec);
+            }
+            if (result != null) {
+                LOG.log(Level.FINE, "Reusing previous decision: {0} with proxy {1}", new Object[] { result.getStatus(), result.proxySpec });
+                switch (result.getStatus()) {
+                    case CONTINUE:
+                        // includes noth NOTICE and IGNORE settings !
+                        action = NetworkProxySettings.IGNORE;
+                        break;
+                    case OVERRIDE: 
+                        action = NetworkProxySettings.OVERRIDE;
+                        break;
+                    case RECONFIGURED:
+                        action = NetworkProxySettings.UPDATE;
+                        break;
+                }
+            }
+            // TODO: because of some strange gradle tooling API behaviour, it is not possible to 
+            // override ~/.gradle/gradle.properties system properties with values passed on the commandline or -D ...
+            // ... but ./gradlew works for some strange reason.
+            // See https://github.com/gradle/gradle/issues/22856
+            if (proxyHost != null) {
+                supportOverride = false;
+                if (action == NetworkProxySettings.OVERRIDE) {
+                    action = NetworkProxySettings.NOTICE;
+                }
+            }
+            switch (action) {
+                case IGNORE:
+                    return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+                    
+                case NOTICE:
+                    NotificationDisplayer.getDefault().notify(
+                            Bundle.TITLE_GradleProxyMismatch(),
+                            NbGradleProject.getIcon(),
+                            userMessage, null, NotificationDisplayer.Priority.NORMAL, NotificationDisplayer.Category.WARNING);
+                    return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+                
+                case OVERRIDE:
+                    return CompletableFuture.completedFuture(createResult(Status.OVERRIDE));
+                    
+                case UPDATE:
+                    return CompletableFuture.completedFuture(updateGradleConfiguration(false));
+                    
+                case ASK:
+                    if (result != null) {
+                        return CompletableFuture.completedFuture(result);
+                    }
+                    String promptMsg;
+                    
+                    if (supportOverride) {
+                        promptMsg = userMessage + Bundle.MSG_AppendAskUpdate();
+                    } else {
+                        promptMsg = userMessage + Bundle.MSG_AppendAskUpdate2();
+                    }
+                    NotifyDescriptor desc = new NotifyDescriptor.Confirmation(
+                            promptMsg, Bundle.TITLE_GradleProxyMismatch(),
+                            NotifyDescriptor.OK_CANCEL_OPTION,  NotifyDescriptor.WARNING_MESSAGE);
+                    if (supportOverride) {
+                        desc.setAdditionalOptions(new Object[] { Bundle.ACTION_Continue(), Bundle.ACTION_Override() });
+                    } else {
+                        desc.setAdditionalOptions(new Object[] { Bundle.ACTION_Continue() });
+                    }
+                    desc.setValue(NotifyDescriptor.OK_OPTION);
+                    
+                    return DialogDisplayer.getDefault().notifyFuture(desc).thenApply(this::processUserConfirmation).exceptionally(t -> {
+                        if ((t instanceof CompletionException) && (t.getCause() instanceof CancellationException)) {
+                            return createResult(Status.ABORT);
+                        } else {
+                            return createResult(Status.UNKNOWN);
+                        }
+                    });
+            }
+            
+            return null;
+        }
+
+        ProxyResult createResult(Status s) {
+            boolean keep = false;
+            switch (s) {
+                case OVERRIDE:
+                    keep = true;
+                    LOG.log(Level.FINE, "Will override proxy to {0}", publicProxy);
+                    break;
+                case ABORT:
+                    LOG.log(Level.FINE, "Will abort operation");
+                    break;
+                case CONTINUE:
+                    keep = true;
+                    LOG.log(Level.FINE, "No action will be taken");
+                    break;
+                case RECONFIGURED:
+                    LOG.log(Level.FINE, "User properties were reconfigured to {0}", publicProxy);
+                    break;
+            }
+            ProxyResult r = new ProxyResult(s, publicProxy, proxyAuthority, publicProxySpec, publicProxyHost, publicProxyPort);
+            if (keep) {
+                synchronized (this) {
+                    acknowledgedResults.put(publicProxySpec, r);
+                }
+            }
+            return r;
+        }
+        
+        ProxyResult updateGradleConfiguration(boolean interactive) {
+            EditableProperties eprops = new EditableProperties(true);
+            
+            File userProps = gradleFiles.getFile(GradleFiles.Kind.USER_PROPERTIES);
+            
+            // TODO: would be better if, when removing the proxy, the support would only comment out the keys. But EditableProperties is not suitable for that
+            // now.
+            if (userProps.exists()) {
+                try (FileInputStream is = new FileInputStream(userProps)) {
+                    eprops.load(is);
+                } catch (IOException ex) {
+                    NotificationDisplayer.getDefault().notify(
+                            Bundle.TITLE_ConfigUpdateFailed(), 
+                            NbGradleProject.getWarningIcon(),
+                            Bundle.ERROR_ConfigUpdateFailed(ex.getLocalizedMessage()), null,
+                            NotificationDisplayer.Priority.HIGH, NotificationDisplayer.Category.ERROR);
+                    return createResult(Status.UNKNOWN);
+                }
+            } else {
+                if (publicProxyHost == null) {
+                    return createResult(Status.CONTINUE);
+                }
+            }
+            
+            if (publicProxy != null) {
+                eprops.put(SYSTEMPROP_HTTP_PROXYHOST, publicProxyHost);
+                eprops.put(SYSTEMPROP_HTTPS_PROXYHOST, publicProxyHost);
+                if (publicProxyNonDefaultPort > 0) {
+                    eprops.put(SYSTEMPROP_HTTP_PROXYPORT, Integer.toString(publicProxyNonDefaultPort));
+                    eprops.put(SYSTEMPROP_HTTPS_PROXYPORT, Integer.toString(publicProxyNonDefaultPort));
+                } else {
+                    eprops.remove(SYSTEMPROP_HTTP_PROXYPORT);
+                    eprops.remove(SYSTEMPROP_HTTPS_PROXYPORT);
+                }
+                eprops.setComment(SYSTEMPROP_HTTP_PROXYHOST, new String[] {
+                        Bundle.COMMENT_CreatedByNetBeans(DateFormat.getDateTimeInstance().format(new Date()))
+                    }, true );
+            } else {
+                eprops.remove(SYSTEMPROP_HTTP_PROXYHOST);
+                eprops.remove(SYSTEMPROP_HTTP_PROXYPORT);
+                eprops.remove(SYSTEMPROP_HTTPS_PROXYHOST);
+                eprops.remove(SYSTEMPROP_HTTPS_PROXYPORT);
+            }
+            
+            if (userProps.exists()) {
+                String base = userProps.getName() + FILENAME_SUFFIX_OLD;
+                File f = new File(userProps.getParentFile(), base);
+                int n = 1;
+                while (f.exists()) {
+                    f = new File(userProps.getParentFile(), base + "." + n); // NOI18N
+                    n++;
+                }
+                userProps.renameTo(f);
+            }
+            try (FileOutputStream os = new FileOutputStream(userProps)) {
+                eprops.store(os);
+                StatusDisplayer.getDefault().setStatusText(
+                        proxyHost == null ?
+                                Bundle.MSG_ProxyCleared() :
+                                Bundle.MSG_ProxySetTo(proxyAuthority)
+                );
+            } catch (IOException ex) {
+                NotificationDisplayer.getDefault().notify(
+                        Bundle.TITLE_ConfigUpdateFailed(), 
+                        NbGradleProject.getWarningIcon(), 
+                        Bundle.ERROR_ConfigUpdateFailed(ex.getLocalizedMessage()), null,
+                        NotificationDisplayer.Priority.HIGH, NotificationDisplayer.Category.ERROR);
+                return createResult(Status.ABORT);
+            }
+            return createResult(Status.RECONFIGURED);
+        }
+        
+        ProxyResult processUserConfirmation(NotifyDescriptor desc) {
+            Object val = desc.getValue();
+            if (val == NotifyDescriptor.CANCEL_OPTION) {
+                return createResult(Status.ABORT);
+            } else if (val == Bundle.ACTION_Continue()) {
+                return createResult(Status.CONTINUE);
+            } else if (val == Bundle.ACTION_Override()) {
+                return createResult(Status.OVERRIDE);
+            } else if (val == NotifyDescriptor.OK_OPTION) {
+                return updateGradleConfiguration(true);
+            }
+            return createResult(Status.UNKNOWN);
+        }
+        
+        private void obtainPublicProxy() {
+            URI probeUri;
+            try {
+                probeUri = new URI(PROBE_URI_STRING);
+            } catch (URISyntaxException ex) {
+                // this is competely unexpected
+                Exceptions.printStackTrace(ex);
+                return;
+            }
+            List<Proxy> proxies = ProxySelector.getDefault().select(probeUri);
+            LOG.log(Level.FINER, "Detected proxies for URI {0}: {1}", new Object[] { probeUri, proxies });
+            for (Proxy p : proxies) {
+                if (p.type() == Proxy.Type.HTTP) {
+                    publicProxy = p;
+                    LOG.log(Level.FINE, "Selected HTTP proxy: {0}", p);
+                    break;
+                } else if (p.type() == Proxy.Type.SOCKS) {
+                    if (publicProxy == null) {
+                        LOG.log(Level.FINE, "Found SOCKS proxy: {0}", p);
+                        publicProxy = p;
+                    }
+                }
+            }
+            if (publicProxy != null) {
+                SocketAddress proxyAddress = publicProxy.address();
+                if (proxyAddress instanceof InetSocketAddress) {
+                    InetSocketAddress iaddr = (InetSocketAddress)proxyAddress;
+                    int port = iaddr.getPort();
+                    int defPort = -1;
+
+                    switch(publicProxy.type()) {
+                        case HTTP:
+                            defPort = PORT_DEFAULT_HTTP; 
+                            break;
+                        case SOCKS:
+                            defPort = PORT_DEFAULT_HTTPS; 
+                            break;
+                    }
+                    
+                    if (port > 1) {
+                        publicProxyPort = port;
+                        if (publicProxyPort != defPort) {
+                            publicProxyNonDefaultPort = port;
+                        }
+                    }
+                    publicProxyHost = ((InetSocketAddress) proxyAddress).getHostString();
+                    publicProxySpec = publicProxyHost + ((publicProxyNonDefaultPort == 0) ? "" : ":" + publicProxyNonDefaultPort);
+                    LOG.log(Level.FINE, "Detected proxy: {0}", publicProxySpec);
+                }
+            }
+        }
+
+        private boolean extractNetworkProxy(Properties props) {
+            proxyHost = props.getProperty(SYSTEMPROP_HTTP_PROXYHOST);
+            String portKey;
+            int defPort;
+            
+            if (proxyHost == null || proxyHost.isEmpty()) {
+                proxyHost = props.getProperty(SYSTEMPROP_HTTPS_PROXYHOST);
+                if (proxyHost == null || proxyHost.isEmpty()) {
+                    proxyHost = null;
+                    proxyPort = -1;
+                    return false;
+                } else {
+                    LOG.log(Level.FINER, "Found https proxy: ", proxyHost);
+                }
+                portKey = SYSTEMPROP_HTTPS_PROXYPORT;
+                defPort = 443;
+            } else {
+                LOG.log(Level.FINER, "Found http proxy: ", proxyHost);
+                defPort = 80;
+                portKey = SYSTEMPROP_HTTP_PROXYPORT;
+            }
+            
+            String port = props.getProperty(portKey);
+            if (port != null && !port.trim().isEmpty()) {
+                proxyAuthority = proxyHost + ":" + port;
+                try {
+                    proxyPort = Integer.parseInt(port);
+                } catch (NumberFormatException ex) {
+                    // expected ?
+                    proxyPort = defPort;
+                    proxyAuthority = proxyHost;
+                }
+            } else {
+                proxyPort = defPort;
+                proxyAuthority = proxyHost;
+            }
+            return true;
+        }
+        
+        
+        private void loadProjectProxy() {
+            File f = FileUtil.toFile(project.getProjectDirectory());
+            if (f == null || !f.exists()) {
+                LOG.log(Level.WARNING, "Project has no directory: {0}", project);
+                return;
+            }
+            GradleFiles gf = new GradleFiles(f);
+            gradleFiles = gf;
+            // system properties are only read from the root project's directory, not from subprojects.
+            File rootDir = gf.getRootDir();
+            LOG.log(Level.FINE, "Project directory: {0}, root directory: {1}", new Object[] { f, rootDir });
+            if (!rootDir.equals(f)) {
+                gf = new GradleFiles(rootDir);
+            }
+            
+            Properties props = new Properties();
+            
+            File userProperties = gf.getFile(GradleFiles.Kind.USER_PROPERTIES);
+            File projectProperties = gf.getFile(GradleFiles.Kind.PROJECT_PROPERTIES);
+            
+            if (projectProperties != null && projectProperties.exists()) {
+                try (FileInputStream fis = new FileInputStream(projectProperties)) {
+                    LOG.log(Level.FINER, "Loading project properties from {0}", projectProperties);
+                    props.load(fis);
+                } catch (IOException ex) {
+                    // TBD: log
+                }
+            }
+            // override project properties with user properties; see Gradle manual for precedence.
+            if (userProperties != null && userProperties.exists()) {
+                try (FileInputStream fis = new FileInputStream(userProperties)) {
+                    LOG.log(Level.FINER, "Loading user properties from {0}", userProperties);
+                    props.load(fis);
+                } catch (IOException ex) {
+                    // TBD: log
+                }
+            }
+            
+            extractNetworkProxy(props);
+        }
+        
+    }
+    
+}
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/layer.xml b/extide/gradle/src/org/netbeans/modules/gradle/layer.xml
index 97bd3ec..427637e 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/layer.xml
+++ b/extide/gradle/src/org/netbeans/modules/gradle/layer.xml
@@ -158,13 +158,6 @@
                     </file>
                 </folder>
             </folder>
-            <folder name="x-gradle-cli">
-                <file name="EditorKit.instance">
-                    <attr name="instanceClass" stringvalue="org.netbeans.modules.gradle.execute.GradleCliEditorKit"/>
-                    <attr name="instanceOf" stringvalue="javax.swing.text.EditorKit,org.netbeans.modules.gradle.execute.GradleCliEditorKit"/>
-                    <attr name="beaninfo" boolvalue="false"/>
-                </file>
-            </folder>
         </folder>
     </folder>
 </filesystem>
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
index b05f751..fcdd052 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
@@ -75,6 +75,7 @@
 import org.netbeans.modules.gradle.api.execute.GradleCommandLine;
 import org.netbeans.modules.gradle.api.execute.RunUtils;
 import org.netbeans.modules.gradle.cache.ProjectInfoDiskCache;
+import org.netbeans.modules.gradle.execute.GradleNetworkProxySupport;
 import org.netbeans.modules.gradle.spi.GradleSettings;
 import org.openide.util.Cancellable;
 import org.openide.util.NbBundle;
@@ -326,6 +327,11 @@
         Throwable th = ex;
         while (th != null) {
             problems.add(GradleProject.createGradleReport(null, th.getMessage()));
+            ex = th;
+            th = th.getCause();
+            if (ex == th) {
+                break;
+            }
         }
         return problems;
     }
@@ -356,39 +362,29 @@
         return Collections.singletonList(createReport(t.getCause()));
     }
     
-    /**
-     * Accessor for the 'location' property on LocationAwareException
-     */
-    private static Method locationAccessor;
-
-    /**
-     * Accessor for the 'lineNumber' property on LocationAwareException
-     */
-    private static Method lineNumberAccessor;
-    
     private static String getLocation(Throwable locationAwareEx) {
         try {
-            if (locationAccessor == null) {
-                locationAccessor = locationAwareEx.getClass().getMethod("getLocation"); // NOI18N
-            }
+            Method locationAccessor = locationAwareEx.getClass().getMethod("getLocation"); // NOI18N
             return (String)locationAccessor.invoke(locationAwareEx);
         } catch (ReflectiveOperationException ex) {
             LOG.log(Level.FINE,"Error getting location", ex);
-            return null;
+        } catch (IllegalArgumentException iae) {
+            LOG.log(Level.FINE, "This probably should not happen: " + locationAwareEx.getClass().getName(), iae);
         }
+        return null;
     }
 
     private static int getLineNumber(Throwable locationAwareEx) {
         try {
-            if (lineNumberAccessor == null) {
-                lineNumberAccessor = locationAwareEx.getClass().getMethod("getLineNumber"); // NOI18N
-            }
+            Method lineNumberAccessor = locationAwareEx.getClass().getMethod("getLineNumber"); // NOI18N
             Integer i = (Integer)lineNumberAccessor.invoke(locationAwareEx);
             return i != null ? i : -1;
         } catch (ReflectiveOperationException ex) {
             LOG.log(Level.FINE,"Error getting line number", ex);
-            return -1;
+        } catch (IllegalArgumentException iae) {
+            LOG.log(Level.FINE, "This probably should not happen: " + locationAwareEx.getClass().getName(), iae);
         }
+        return -1;
     }
 
     /**
@@ -454,6 +450,9 @@
         return ret;
     }
 
+    @NbBundle.Messages({
+        "ERR_UserAbort=Project analysis aborted by the user."
+    })
     private static NbProjectInfo retrieveProjectInfo(NbGradleProjectImpl projectImpl, GoOnline goOnline, ProjectConnection pconn, GradleCommandLine cmd, CancellationToken token, ProgressListener pl, AtomicBoolean wasOnline) throws GradleConnectionException, IllegalStateException {
         NbProjectInfo ret;
 
@@ -489,8 +488,26 @@
                 }
             }
         }
+
+        BuildActionExecuter<NbProjectInfo> action = createInfoAction(pconn, online, token, pl);        
+        // since we're going online, check the network settings:
+        GradleNetworkProxySupport support = projectImpl.getLookup().lookup(GradleNetworkProxySupport.class);
+        if (support != null) {
+            try {
+                GradleNetworkProxySupport.ProxyResult result = support.checkProxySettings().get();
+                switch (result.getStatus()) {
+                    case ABORT:
+                        LOG.log(Level.FINE, "User cancelled the project load");
+                        throw new IllegalStateException(Bundle.ERR_UserAbort());
+                }
+                action = result.configure(action);
+            } catch (InterruptedException ex) {
+                throw new IllegalStateException(ex);
+            } catch (ExecutionException ex) {
+                throw new IllegalStateException(ex);
+            }
+        }
         
-        BuildActionExecuter<NbProjectInfo> action = createInfoAction(pconn, online, token, pl);
         wasOnline.set(true);
         return runInfoAction(action);
     }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/options/Bundle.properties b/extide/gradle/src/org/netbeans/modules/gradle/options/Bundle.properties
index a192be0..9ef4ddb 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/options/Bundle.properties
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/Bundle.properties
@@ -18,6 +18,11 @@
 SettingsPanel.lblCategories.text=Categories:
 SettingsPanel.jPanel1.border.title=Distribution
 SettingsPanel.jPanel2.border.title=Global Execution Options
+SettingsPanel.jPanel3.border.title=Project Options
+SettingsPanel.jPanel4.border.title=Project Explorer
+SettingsPanel.jPanel5.border.title=Build Output
+SettingsPanel.jPanel7.border.title=Performance
+SettingsPanel.jPanel8.border.title=Download Options
 SettingsPanel.lblGradleUserHome.text=Gradle User Home:
 SettingsPanel.lblGradleDistribution.text=Gradle Distribution:
 SettingsPanel.btGradleUserHome.text=Browse...
@@ -32,14 +37,11 @@
 SettingsPanel.cbPreferWrapper.text=Prefer to use Gradle Wrapper that Comes with the Project
 SettingsPanel.cbStartDaemonOnStart.text=Start Gradle Daemon on IDE Start
 SettingsPanel.lbVersionInfo.text=
-SettingsPanel.jPanel4.border.title=Project Explorer
 SettingsPanel.cbHideEmptyConfig.text=Hide 'Empty' Configurations
-SettingsPanel.jPanel5.border.title=Build Output
 SettingsPanel.cbAlwaysShowOutput.text=Always Show Build Output
 SettingsPanel.cbReuseOutputTabs.text=Reuse Output Tabs
 SettingsPanel.cbDisplayDescription.text=Use Project Description as Project Name
 SettingsPanel.cbReuseEditorOnStackTrace.text=Reuse Editor Window When Exploring StackTrace
-SettingsPanel.jLabel1.text=Performance:
 SettingsPanel.cbOpenLazy.toolTipText=<html>This option makes IDE more responsive on project open action.<br/>\nSome plugins (like Scala) may problem when this option is enabled.
 SettingsPanel.cbOpenLazy.text=Enable '&lazy' Source Group Initialization
 SettingsPanel.cbPreferMaven.text=Prefer Maven Projects over Gradle (needs restart)
@@ -57,5 +59,6 @@
 SettingsPanel.cbBundledLoading.toolTipText=Instead of loading  sub-projects of a multi-project build individually, try fetch the sub-project details in one run.
 SettingsPanel.cbUseConfigCache.toolTipText=<html>This is an <b>incubating</b> feature. Use with care!
 SettingsPanel.cbUseConfigCache.text=Use Configuration Cache
-SettingsPanel.cbNoRebuild.text=Do not Rebuild Project Dependencies
-SettingsPanel.cbNoRebuild.toolTipText=<html>Useful for debugging and fine-tuning buildSrc, but <b>can lead to wrong results</b>.<br/>Use with caution!
+SettingsPanel.cbNoRebuild.text=<html><strike>Do not Rebuild Project Dependencies</strike>
+SettingsPanel.cbNoRebuild.toolTipText=<html>This option was removed in Gradle 8.0 as this <b>can lead to wrong results</b>.<br/>\nNetBeans is going to remove it in version 20.<br/>Use with caution!
+SettingsPanel.lbNetworkProxy.text=Network Proxy:
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/options/GradleExperimentalSettings.java b/extide/gradle/src/org/netbeans/modules/gradle/options/GradleExperimentalSettings.java
index 35432d5..3fc9a81 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/options/GradleExperimentalSettings.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/GradleExperimentalSettings.java
@@ -29,6 +29,7 @@
     public static final String PROP_DISABLE_CACHE = "disableCache";
     public static final String PROP_LAZY_OPEN_GROUPS = "lazyOpen";
     public static final String PROP_BUNDLED_LOADING = "bundledLoading";
+    public static final String PROP_NETWORK_PROXY = "networkProxy";
 
     private static final GradleExperimentalSettings INSTANCE = new GradleExperimentalSettings(NbPreferences.forModule(GradleExperimentalSettings.class));
     private final Preferences preferences;
@@ -68,4 +69,17 @@
     public boolean isBundledLoading() {
         return getPreferences().getBoolean(PROP_BUNDLED_LOADING, false);
     }
+    
+    public NetworkProxySettings getNetworkProxy() {
+        String s = getPreferences().get(PROP_NETWORK_PROXY, NetworkProxySettings.ASK.name());
+        try {
+            return NetworkProxySettings.valueOf(s);
+        } catch (IllegalArgumentException ex) {
+            return NetworkProxySettings.ASK;
+        }
+    }
+    
+    public void setNetworkProxy(NetworkProxySettings s) {
+        getPreferences().put(PROP_NETWORK_PROXY, s.name());
+    }
 }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/options/NetworkProxySettings.java b/extide/gradle/src/org/netbeans/modules/gradle/options/NetworkProxySettings.java
new file mode 100644
index 0000000..fdb0319
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/NetworkProxySettings.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.options;
+
+import org.netbeans.modules.gradle.api.execute.RunUtils;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author sdedic
+ */
+@NbBundle.Messages({
+    "PROXY_IGNORE=Do not check",
+    "PROXY_NOTICE=Display Mismatch Notice",
+    "PROXY_UPDATE=Update User Properties",
+    "PROXY_ASK=Ask Before Execution",
+    "PROXY_OVERRIDE=Override on execution",
+})
+public enum NetworkProxySettings {
+    /**
+     * Do not verify proxy settings.
+     */
+    IGNORE,
+    /**
+     * Display a notice that proxy settings mismatch.
+     */
+    NOTICE,
+    /**
+     * Update user's gradle.properties file.
+     */
+    UPDATE,
+    /**
+     * Ask the user for confirmation.
+     */
+    ASK,
+    /**
+     * Automatically override on execution, but do not change gradle.properties.
+     */
+    OVERRIDE;
+    
+    public String toString() {
+        switch (this) {
+            case IGNORE: return Bundle.PROXY_IGNORE();
+            case NOTICE: return Bundle.PROXY_NOTICE();
+            case UPDATE: return Bundle.PROXY_UPDATE();
+            case ASK: return Bundle.PROXY_ASK();
+            case OVERRIDE: return Bundle.PROXY_OVERRIDE();
+            
+            default:
+                return name();
+        }
+    }
+
+    private static final String BRANDING_API_OVERRIDE_ENABLED = "org.netbeans.modules.gradle.api.execute.NetworkProxySettings.allowOverride";
+    
+    /**
+     * Determines if override is a valid option.
+     * @return true, if override should be offered as an option
+     */
+    public static boolean allowProxyOverride() {
+        return Boolean.parseBoolean(NbBundle.getMessage(RunUtils.class, BRANDING_API_OVERRIDE_ENABLED));
+    }
+}
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.form b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.form
index 47224f5..e593939 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.form
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.form
@@ -41,12 +41,12 @@
     <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
     <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
     <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-70,0,0,3,82"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-95,0,0,2,-85"/>
   </AuxValues>
 
   <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
   <SubComponents>
-    <Container class="javax.swing.JPanel" name="jPanel3">
+    <Container class="javax.swing.JPanel" name="pnlCategories">
       <Constraints>
         <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
           <BorderConstraints direction="West"/>
@@ -72,7 +72,7 @@
                   <EmptySpace max="-2" attributes="0"/>
                   <Component id="lblCategories" min="-2" max="-2" attributes="0"/>
                   <EmptySpace max="-2" attributes="0"/>
-                  <Component id="lstCategories" max="32767" attributes="0"/>
+                  <Component id="lstCategories" pref="382" max="32767" attributes="0"/>
                   <EmptySpace max="-2" attributes="0"/>
               </Group>
           </Group>
@@ -89,11 +89,12 @@
         <Component class="javax.swing.JList" name="lstCategories">
           <Properties>
             <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
-              <StringArray count="4">
+              <StringArray count="5">
                 <StringItem index="0" value="Execution"/>
                 <StringItem index="1" value="Appearance"/>
                 <StringItem index="2" value="Dependencies"/>
-                <StringItem index="3" value="Experimental"/>
+                <StringItem index="3" value="Maven"/>
+                <StringItem index="4" value="Experimental"/>
               </StringArray>
             </Property>
             <Property name="selectionMode" type="int" value="0"/>
@@ -136,20 +137,11 @@
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="jPanel1" max="32767" attributes="0"/>
-                  <Group type="102" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <Component id="cbPreferMaven" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="346" max="32767" attributes="0"/>
-                          </Group>
-                          <Component id="jPanel2" alignment="0" max="32767" attributes="0"/>
-                          <Group type="102" alignment="1" attributes="0">
-                              <Component id="lbAllowExecution" max="32767" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="cbAllowExecution" min="-2" pref="280" max="-2" attributes="0"/>
-                          </Group>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Component id="jPanel1" max="32767" attributes="0"/>
+                          <Component id="jPanel2" max="32767" attributes="0"/>
                       </Group>
                       <EmptySpace max="-2" attributes="0"/>
                   </Group>
@@ -158,17 +150,11 @@
             <DimensionLayout dim="1">
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
                       <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
-                      <Component id="jPanel2" min="-2" pref="124" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="3" attributes="0">
-                          <Component id="cbAllowExecution" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="lbAllowExecution" alignment="3" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace min="-2" pref="11" max="-2" attributes="0"/>
-                      <Component id="cbPreferMaven" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jPanel2" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="14" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -184,66 +170,63 @@
                   </Border>
                 </Property>
               </Properties>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
+              </AuxValues>
 
               <Layout>
                 <DimensionLayout dim="0">
                   <Group type="103" groupAlignment="0" attributes="0">
                       <Group type="102" attributes="0">
-                          <EmptySpace min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="0" attributes="0">
                               <Group type="102" alignment="0" attributes="0">
+                                  <Component id="lblGradleUserHome" min="-2" max="-2" attributes="0"/>
+                                  <EmptySpace min="-2" pref="9" max="-2" attributes="0"/>
                                   <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="lblGradleUserHome" alignment="0" min="-2" max="-2" attributes="0"/>
-                                      <Component id="lblGradleDistribution" alignment="0" min="-2" max="-2" attributes="0"/>
+                                      <Group type="102" attributes="0">
+                                          <EmptySpace min="-2" pref="231" max="-2" attributes="0"/>
+                                          <Component id="lbVersionInfo" pref="2" max="32767" attributes="0"/>
+                                          <EmptySpace min="-2" pref="78" max="-2" attributes="0"/>
+                                      </Group>
+                                      <Group type="102" alignment="1" attributes="0">
+                                          <Component id="tfGradleUserHome" max="32767" attributes="0"/>
+                                          <EmptySpace max="-2" attributes="0"/>
+                                          <Component id="btGradleUserHome" linkSize="3" min="-2" pref="105" max="-2" attributes="0"/>
+                                      </Group>
                                   </Group>
                                   <EmptySpace min="-2" max="-2" attributes="0"/>
+                                  <Component id="btDefaultHome" min="-2" pref="105" max="-2" attributes="0"/>
+                              </Group>
+                              <Group type="102" alignment="0" attributes="0">
+                                  <Component id="lblGradleDistribution" min="-2" max="-2" attributes="0"/>
+                                  <EmptySpace max="-2" attributes="0"/>
                                   <Group type="103" groupAlignment="0" attributes="0">
                                       <Group type="102" alignment="0" attributes="0">
-                                          <Group type="103" groupAlignment="0" attributes="0">
-                                              <Group type="102" attributes="0">
-                                                  <Group type="103" groupAlignment="0" attributes="0">
-                                                      <Group type="102" alignment="0" attributes="0">
-                                                          <EmptySpace min="-2" pref="231" max="-2" attributes="0"/>
-                                                          <Component id="lbVersionInfo" pref="109" max="32767" attributes="0"/>
-                                                      </Group>
-                                                      <Component id="rbUseStandardGradle" alignment="0" min="-2" pref="235" max="-2" attributes="0"/>
-                                                  </Group>
-                                                  <EmptySpace max="-2" attributes="0"/>
-                                                  <Component id="cbGradleVersion" pref="122" max="32767" attributes="0"/>
-                                              </Group>
-                                              <Group type="102" attributes="0">
-                                                  <Component id="rbUseCustomGradle" min="-2" max="-2" attributes="0"/>
-                                                  <EmptySpace max="-2" attributes="0"/>
-                                                  <Component id="tfUseCustomGradle" max="32767" attributes="0"/>
-                                              </Group>
-                                              <Group type="102" alignment="1" attributes="0">
-                                                  <Component id="tfGradleUserHome" max="32767" attributes="0"/>
-                                                  <EmptySpace max="-2" attributes="0"/>
-                                                  <Component id="btGradleUserHome" linkSize="3" min="-2" pref="105" max="-2" attributes="0"/>
-                                              </Group>
-                                          </Group>
-                                          <EmptySpace min="-2" max="-2" attributes="0"/>
-                                          <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                                              <Component id="jPanel6" max="32767" attributes="0"/>
-                                              <Component id="btUseCustomGradle" linkSize="3" alignment="0" pref="102" max="32767" attributes="0"/>
-                                              <Component id="btDefaultHome" alignment="0" max="32767" attributes="0"/>
-                                          </Group>
+                                          <Component id="rbUseStandardGradle" min="-2" max="-2" attributes="0"/>
+                                          <EmptySpace max="-2" attributes="0"/>
+                                          <Component id="cbGradleVersion" max="32767" attributes="0"/>
                                       </Group>
-                                      <Group type="102" attributes="0">
-                                          <Group type="103" groupAlignment="0" attributes="0">
-                                              <Component id="cbStartDaemonOnStart" min="-2" max="-2" attributes="0"/>
-                                              <Component id="cbPreferWrapper" alignment="0" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                          <EmptySpace min="0" pref="140" max="32767" attributes="0"/>
+                                      <Group type="102" alignment="0" attributes="0">
+                                          <Component id="rbUseCustomGradle" min="-2" max="-2" attributes="0"/>
+                                          <EmptySpace max="-2" attributes="0"/>
+                                          <Component id="tfUseCustomGradle" max="32767" attributes="0"/>
                                       </Group>
                                   </Group>
+                                  <EmptySpace min="-2" max="-2" attributes="0"/>
+                                  <Component id="btUseCustomGradle" linkSize="3" pref="102" max="32767" attributes="0"/>
                               </Group>
-                              <Group type="102" alignment="1" attributes="0">
+                              <Group type="102" alignment="0" attributes="0">
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Component id="cbSilentInstall" min="-2" max="-2" attributes="0"/>
+                                      <Component id="cbStartDaemonOnStart" min="-2" max="-2" attributes="0"/>
+                                      <Component id="cbPreferWrapper" min="-2" max="-2" attributes="0"/>
+                                  </Group>
                                   <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                                  <Component id="cbSilentInstall" min="-2" max="-2" attributes="0"/>
                               </Group>
                           </Group>
-                          <EmptySpace min="-2" max="-2" attributes="0"/>
+                          <EmptySpace min="2" pref="2" max="-2" attributes="0"/>
                       </Group>
                   </Group>
                 </DimensionLayout>
@@ -258,14 +241,12 @@
                               <Component id="btDefaultHome" alignment="3" min="-2" max="-2" attributes="0"/>
                           </Group>
                           <EmptySpace max="-2" attributes="0"/>
-                          <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                              <Group type="103" groupAlignment="3" attributes="0">
-                                  <Component id="lblGradleDistribution" alignment="3" min="-2" max="-2" attributes="0"/>
-                                  <Component id="cbGradleVersion" alignment="3" min="-2" max="-2" attributes="0"/>
-                                  <Component id="rbUseStandardGradle" alignment="3" min="-2" max="-2" attributes="0"/>
-                                  <Component id="lbVersionInfo" alignment="3" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <Component id="jPanel6" max="32767" attributes="0"/>
+                          <Component id="lbVersionInfo" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="lblGradleDistribution" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbGradleVersion" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="rbUseStandardGradle" alignment="3" min="-2" max="-2" attributes="0"/>
                           </Group>
                           <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="3" attributes="0">
@@ -273,11 +254,11 @@
                               <Component id="tfUseCustomGradle" alignment="3" min="-2" max="-2" attributes="0"/>
                               <Component id="btUseCustomGradle" alignment="3" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Component id="cbPreferWrapper" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace min="-2" pref="44" max="-2" attributes="0"/>
-                          <Component id="cbStartDaemonOnStart" min="-2" max="-2" attributes="0"/>
                           <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                          <Component id="cbPreferWrapper" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbStartDaemonOnStart" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
                           <Component id="cbSilentInstall" min="-2" max="-2" attributes="0"/>
                       </Group>
                   </Group>
@@ -404,21 +385,6 @@
                     <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btDefaultHomeActionPerformed"/>
                   </Events>
                 </Component>
-                <Container class="javax.swing.JPanel" name="jPanel6">
-
-                  <Layout>
-                    <DimensionLayout dim="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                    <DimensionLayout dim="1">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                  </Layout>
-                </Container>
               </SubComponents>
             </Container>
             <Container class="javax.swing.JPanel" name="jPanel2">
@@ -431,6 +397,10 @@
                   </Border>
                 </Property>
               </Properties>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
+              </AuxValues>
 
               <Layout>
                 <DimensionLayout dim="0">
@@ -438,16 +408,32 @@
                       <Group type="102" attributes="0">
                           <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="cbOffline" alignment="0" min="-2" max="-2" attributes="0"/>
-                              <Component id="cbConfigureOnDemand" alignment="0" min="-2" max="-2" attributes="0"/>
-                              <Component id="cbNoRebuild" alignment="0" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <EmptySpace max="32767" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="cbUseConfigCache" min="-2" max="-2" attributes="0"/>
-                              <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                                  <Component id="cbSkipCheck" max="32767" attributes="0"/>
-                                  <Component id="cbSkipTest" alignment="0" max="32767" attributes="0"/>
+                              <Group type="102" attributes="0">
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Component id="cbOffline" alignment="0" min="-2" max="-2" attributes="0"/>
+                                      <Component id="cbConfigureOnDemand" alignment="0" min="-2" max="-2" attributes="0"/>
+                                      <Component id="cbNoRebuild" alignment="0" min="-2" max="-2" attributes="0"/>
+                                  </Group>
+                                  <EmptySpace max="32767" attributes="0"/>
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Component id="cbUseConfigCache" min="-2" max="-2" attributes="0"/>
+                                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                                          <Component id="cbSkipCheck" max="32767" attributes="0"/>
+                                          <Component id="cbSkipTest" alignment="0" max="32767" attributes="0"/>
+                                      </Group>
+                                  </Group>
+                              </Group>
+                              <Group type="102" attributes="0">
+                                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                                      <Component id="lbAllowExecution" max="32767" attributes="0"/>
+                                      <Component id="lbNetworkProxy" min="-2" pref="142" max="-2" attributes="0"/>
+                                  </Group>
+                                  <EmptySpace max="-2" attributes="0"/>
+                                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                                      <Component id="cbNetworkProxy" max="32767" attributes="0"/>
+                                      <Component id="cbAllowExecution" min="-2" pref="280" max="-2" attributes="0"/>
+                                  </Group>
+                                  <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                               </Group>
                           </Group>
                           <EmptySpace max="-2" attributes="0"/>
@@ -457,7 +443,7 @@
                 <DimensionLayout dim="1">
                   <Group type="103" groupAlignment="0" attributes="0">
                       <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="3" attributes="0">
                               <Component id="cbOffline" alignment="3" min="-2" max="-2" attributes="0"/>
                               <Component id="cbSkipCheck" alignment="3" min="-2" max="-2" attributes="0"/>
@@ -472,7 +458,17 @@
                               <Component id="cbConfigureOnDemand" alignment="3" min="-2" max="-2" attributes="0"/>
                               <Component id="cbUseConfigCache" alignment="3" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <EmptySpace min="-2" pref="72" max="-2" attributes="0"/>
+                          <EmptySpace type="separate" max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="cbAllowExecution" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="lbAllowExecution" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="cbNetworkProxy" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="lbNetworkProxy" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="32767" attributes="0"/>
                       </Group>
                   </Group>
                 </DimensionLayout>
@@ -526,28 +522,33 @@
                     </Property>
                   </Properties>
                 </Component>
+                <Component class="javax.swing.JLabel" name="lbAllowExecution">
+                  <Properties>
+                    <Property name="horizontalAlignment" type="int" value="11"/>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbAllowExecution.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JComboBox" name="cbAllowExecution">
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.GradleExecutionRule&gt;"/>
+                  </AuxValues>
+                </Component>
+                <Component class="javax.swing.JLabel" name="lbNetworkProxy">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbNetworkProxy.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JComboBox" name="cbNetworkProxy">
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;NetworkProxySettings&gt;"/>
+                  </AuxValues>
+                </Component>
               </SubComponents>
             </Container>
-            <Component class="javax.swing.JLabel" name="lbAllowExecution">
-              <Properties>
-                <Property name="horizontalAlignment" type="int" value="11"/>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbAllowExecution.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JComboBox" name="cbAllowExecution">
-              <AuxValues>
-                <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.GradleExecutionRule&gt;"/>
-              </AuxValues>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="cbPreferMaven">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbPreferMaven.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
           </SubComponents>
         </Container>
         <Container class="javax.swing.JPanel" name="pnlAppearance">
@@ -565,11 +566,11 @@
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="jPanel4" max="32767" attributes="0"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
                           <Component id="jPanel5" max="32767" attributes="0"/>
+                          <Component id="jPanel4" max="32767" attributes="0"/>
                       </Group>
                       <EmptySpace max="-2" attributes="0"/>
                   </Group>
@@ -582,7 +583,7 @@
                       <Component id="jPanel4" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
                       <Component id="jPanel5" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace pref="204" max="32767" attributes="0"/>
+                      <EmptySpace pref="216" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -598,6 +599,10 @@
                   </Border>
                 </Property>
               </Properties>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
+              </AuxValues>
 
               <Layout>
                 <DimensionLayout dim="0">
@@ -605,7 +610,7 @@
                       <Group type="102" attributes="0">
                           <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="cbDisplayDescription" pref="691" max="32767" attributes="0"/>
+                              <Component id="cbDisplayDescription" max="32767" attributes="0"/>
                               <Component id="cbHideEmptyConfig" max="32767" attributes="0"/>
                           </Group>
                           <EmptySpace max="-2" attributes="0"/>
@@ -652,15 +657,20 @@
                   </Border>
                 </Property>
               </Properties>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
+              </AuxValues>
 
               <Layout>
                 <DimensionLayout dim="0">
                   <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="cbAlwaysShowOutput" alignment="0" pref="697" max="32767" attributes="0"/>
+                              <Component id="cbReuseEditorOnStackTrace" pref="541" max="32767" attributes="0"/>
                               <Component id="cbReuseOutputTabs" alignment="1" max="32767" attributes="0"/>
-                              <Component id="cbReuseEditorOnStackTrace" alignment="0" pref="697" max="32767" attributes="0"/>
+                              <Component id="cbAlwaysShowOutput" max="32767" attributes="0"/>
                           </Group>
                           <EmptySpace max="-2" attributes="0"/>
                       </Group>
@@ -674,7 +684,7 @@
                           <Component id="cbReuseOutputTabs" min="-2" max="-2" attributes="0"/>
                           <EmptySpace max="-2" attributes="0"/>
                           <Component id="cbReuseEditorOnStackTrace" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace pref="36" max="32767" attributes="0"/>
+                          <EmptySpace max="32767" attributes="0"/>
                       </Group>
                   </Group>
                 </DimensionLayout>
@@ -721,25 +731,9 @@
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <Component id="lbDownloadLibs" linkSize="2" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="cbDownloadLibs" pref="347" max="32767" attributes="0"/>
-                          </Group>
-                          <Group type="102" attributes="0">
-                              <Component id="lbDownloadJavadoc" linkSize="2" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="cbDownloadJavadoc" max="32767" attributes="0"/>
-                          </Group>
-                          <Group type="102" attributes="0">
-                              <Component id="lbDownloadSources" linkSize="2" min="-2" pref="360" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="cbDownloadSources" max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
+                      <Component id="jPanel8" max="32767" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
                   </Group>
               </Group>
@@ -748,83 +742,206 @@
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="3" attributes="0">
-                          <Component id="lbDownloadLibs" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="cbDownloadLibs" alignment="3" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="3" attributes="0">
-                          <Component id="lbDownloadSources" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="cbDownloadSources" alignment="3" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="3" attributes="0">
-                          <Component id="lbDownloadJavadoc" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="cbDownloadJavadoc" alignment="3" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace pref="352" max="32767" attributes="0"/>
+                      <Component id="jPanel8" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="294" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
           </Layout>
           <SubComponents>
-            <Component class="javax.swing.JLabel" name="lbDownloadLibs">
+            <Container class="javax.swing.JPanel" name="jPanel8">
               <Properties>
-                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
-                  <ComponentRef name="cbDownloadLibs"/>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                    <TitledBorder title="Download Options">
+                      <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.jPanel8.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </TitledBorder>
+                  </Border>
                 </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadLibs.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="lbDownloadSources">
-              <Properties>
-                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
-                  <ComponentRef name="cbDownloadSources"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadSources.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="lbDownloadJavadoc">
-              <Properties>
-                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
-                  <ComponentRef name="cbDownloadJavadoc"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadJavadoc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JComboBox" name="cbDownloadJavadoc">
-              <Properties>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbDownloadJavadoc.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="enabled" type="boolean" value="false"/>
               </Properties>
               <AuxValues>
-                <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadMiscRule&gt;"/>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
               </AuxValues>
-            </Component>
-            <Component class="javax.swing.JComboBox" name="cbDownloadSources">
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                              <Component id="lbDownloadSources" max="32767" attributes="0"/>
+                              <Component id="lbDownloadJavadoc" max="32767" attributes="0"/>
+                              <Component id="lbDownloadLibs" max="32767" attributes="0"/>
+                          </Group>
+                          <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="cbDownloadSources" pref="238" max="32767" attributes="0"/>
+                              <Component id="cbDownloadLibs" max="32767" attributes="0"/>
+                              <Component id="cbDownloadJavadoc" max="32767" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="lbDownloadLibs" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbDownloadLibs" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="lbDownloadSources" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbDownloadSources" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="lbDownloadJavadoc" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbDownloadJavadoc" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+              <SubComponents>
+                <Component class="javax.swing.JComboBox" name="cbDownloadJavadoc">
+                  <Properties>
+                    <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbDownloadJavadoc.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                    <Property name="enabled" type="boolean" value="false"/>
+                  </Properties>
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadMiscRule&gt;"/>
+                  </AuxValues>
+                </Component>
+                <Component class="javax.swing.JComboBox" name="cbDownloadSources">
+                  <Properties>
+                    <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbDownloadSources.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                    <Property name="enabled" type="boolean" value="false"/>
+                  </Properties>
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadMiscRule&gt;"/>
+                  </AuxValues>
+                </Component>
+                <Component class="javax.swing.JComboBox" name="cbDownloadLibs">
+                  <AuxValues>
+                    <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadLibsRule&gt;"/>
+                  </AuxValues>
+                </Component>
+                <Component class="javax.swing.JLabel" name="lbDownloadLibs">
+                  <Properties>
+                    <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+                      <ComponentRef name="cbDownloadLibs"/>
+                    </Property>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadLibs.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JLabel" name="lbDownloadSources">
+                  <Properties>
+                    <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+                      <ComponentRef name="cbDownloadSources"/>
+                    </Property>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadSources.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JLabel" name="lbDownloadJavadoc">
+                  <Properties>
+                    <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+                      <ComponentRef name="cbDownloadJavadoc"/>
+                    </Property>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.lbDownloadJavadoc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="pnlMaven">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
+              <CardConstraints cardName="Maven"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jPanel3" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="354" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="javax.swing.JPanel" name="jPanel3">
               <Properties>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbDownloadSources.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                    <TitledBorder title="Project Options">
+                      <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.jPanel3.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </TitledBorder>
+                  </Border>
                 </Property>
-                <Property name="enabled" type="boolean" value="false"/>
               </Properties>
               <AuxValues>
-                <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadMiscRule&gt;"/>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
               </AuxValues>
-            </Component>
-            <Component class="javax.swing.JComboBox" name="cbDownloadLibs">
-              <AuxValues>
-                <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;GradleSettings.DownloadLibsRule&gt;"/>
-              </AuxValues>
-            </Component>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbPreferMaven" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace pref="231" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbPreferMaven" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+              <SubComponents>
+                <Component class="javax.swing.JCheckBox" name="cbPreferMaven">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbPreferMaven.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
           </SubComponents>
         </Container>
         <Container class="javax.swing.JPanel" name="pnlExperimental">
@@ -839,18 +956,8 @@
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                          <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace min="6" pref="6" max="-2" attributes="0"/>
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Component id="cbOpenLazy" min="-2" max="-2" attributes="0"/>
-                                  <Component id="cbEnableCache" min="-2" max="-2" attributes="0"/>
-                                  <Component id="cbBundledLoading" alignment="0" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                      </Group>
-                      <EmptySpace pref="423" max="32767" attributes="0"/>
+                      <Component id="jPanel7" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -858,56 +965,89 @@
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
                       <EmptySpace max="-2" attributes="0"/>
-                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="cbEnableCache" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="cbOpenLazy" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="cbBundledLoading" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace pref="334" max="32767" attributes="0"/>
+                      <Component id="jPanel7" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="300" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
           </Layout>
           <SubComponents>
-            <Component class="javax.swing.JLabel" name="jLabel1">
+            <Container class="javax.swing.JPanel" name="jPanel7">
               <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                    <TitledBorder title="Performance">
+                      <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.jPanel7.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </TitledBorder>
+                  </Border>
                 </Property>
               </Properties>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="cbEnableCache">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbEnableCache.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbEnableCache.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="cbOpenLazy">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbOpenLazy.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbOpenLazy.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="cbBundledLoading">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbBundledLoading.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbBundledLoading.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
+              </AuxValues>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="cbOpenLazy" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbEnableCache" min="-2" max="-2" attributes="0"/>
+                              <Component id="cbBundledLoading" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace pref="289" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbEnableCache" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbOpenLazy" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cbBundledLoading" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+              <SubComponents>
+                <Component class="javax.swing.JCheckBox" name="cbEnableCache">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbEnableCache.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                    <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbEnableCache.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JCheckBox" name="cbOpenLazy">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbOpenLazy.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                    <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbOpenLazy.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+                <Component class="javax.swing.JCheckBox" name="cbBundledLoading">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbBundledLoading.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                    <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                      <ResourceString bundle="org/netbeans/modules/gradle/options/Bundle.properties" key="SettingsPanel.cbBundledLoading.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
           </SubComponents>
         </Container>
       </SubComponents>
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
index 546024e..7094ea7 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
@@ -60,7 +60,7 @@
     @StaticResource
     private static final String RESTART_ICON = "org/netbeans/modules/gradle/resources/restart.png"; //NOI18
 
-    private static final String[] CARDS = {"Execution", "Appearance", "Dependencies", "Experimental"}; //NOI18N
+    private static final String[] CARDS = {"Execution", "Appearance", "Dependencies", "Maven", "Experimental"}; //NOI18N
 
     private GradleDistributionManager gdm = GradleDistributionManager.get();
 
@@ -76,6 +76,12 @@
         cbDownloadSources.setModel(new DefaultComboBoxModel<>(GradleSettings.DownloadMiscRule.values()));
         cbDownloadJavadoc.setModel(new DefaultComboBoxModel<>(GradleSettings.DownloadMiscRule.values()));
         cbAllowExecution.setModel(new DefaultComboBoxModel<>(GradleSettings.GradleExecutionRule.values()));
+        
+        DefaultComboBoxModel mdl = new DefaultComboBoxModel<>(NetworkProxySettings.values());
+        if (!NetworkProxySettings.allowProxyOverride()) {
+            mdl.removeElement(NetworkProxySettings.OVERRIDE);
+        }
+        cbNetworkProxy.setModel(mdl);
     }
 
     /**
@@ -88,12 +94,12 @@
     private void initComponents() {
 
         bgUsedDistribution = new javax.swing.ButtonGroup();
-        jPanel3 = new javax.swing.JPanel();
+        pnlCategories = new javax.swing.JPanel();
         lblCategories = new javax.swing.JLabel();
         lstCategories = new javax.swing.JList<>();
         pnlCards = new javax.swing.JPanel();
         pnlExecution = new javax.swing.JPanel();
-        jPanel1 = new javax.swing.JPanel();
+        javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
         lblGradleUserHome = new javax.swing.JLabel();
         tfGradleUserHome = new javax.swing.JTextField();
         btGradleUserHome = new javax.swing.JButton();
@@ -108,8 +114,7 @@
         lbVersionInfo = new javax.swing.JLabel();
         cbSilentInstall = new javax.swing.JCheckBox();
         btDefaultHome = new javax.swing.JButton();
-        jPanel6 = new javax.swing.JPanel();
-        jPanel2 = new javax.swing.JPanel();
+        javax.swing.JPanel jPanel2 = new javax.swing.JPanel();
         cbOffline = new javax.swing.JCheckBox();
         cbSkipTest = new javax.swing.JCheckBox();
         cbSkipCheck = new javax.swing.JCheckBox();
@@ -118,24 +123,29 @@
         cbNoRebuild = new javax.swing.JCheckBox();
         lbAllowExecution = new javax.swing.JLabel();
         cbAllowExecution = new javax.swing.JComboBox<>();
-        cbPreferMaven = new javax.swing.JCheckBox();
+        lbNetworkProxy = new javax.swing.JLabel();
+        cbNetworkProxy = new javax.swing.JComboBox<>();
         pnlAppearance = new javax.swing.JPanel();
-        jPanel4 = new javax.swing.JPanel();
+        javax.swing.JPanel jPanel4 = new javax.swing.JPanel();
         cbDisplayDescription = new javax.swing.JCheckBox();
         cbHideEmptyConfig = new javax.swing.JCheckBox();
-        jPanel5 = new javax.swing.JPanel();
+        javax.swing.JPanel jPanel5 = new javax.swing.JPanel();
         cbAlwaysShowOutput = new javax.swing.JCheckBox();
         cbReuseOutputTabs = new javax.swing.JCheckBox();
         cbReuseEditorOnStackTrace = new javax.swing.JCheckBox();
         pnlDependencies = new javax.swing.JPanel();
-        lbDownloadLibs = new javax.swing.JLabel();
-        lbDownloadSources = new javax.swing.JLabel();
-        lbDownloadJavadoc = new javax.swing.JLabel();
+        javax.swing.JPanel jPanel8 = new javax.swing.JPanel();
         cbDownloadJavadoc = new javax.swing.JComboBox<>();
         cbDownloadSources = new javax.swing.JComboBox<>();
         cbDownloadLibs = new javax.swing.JComboBox<>();
+        lbDownloadLibs = new javax.swing.JLabel();
+        lbDownloadSources = new javax.swing.JLabel();
+        lbDownloadJavadoc = new javax.swing.JLabel();
+        pnlMaven = new javax.swing.JPanel();
+        javax.swing.JPanel jPanel3 = new javax.swing.JPanel();
+        cbPreferMaven = new javax.swing.JCheckBox();
         pnlExperimental = new javax.swing.JPanel();
-        jLabel1 = new javax.swing.JLabel();
+        javax.swing.JPanel jPanel7 = new javax.swing.JPanel();
         cbEnableCache = new javax.swing.JCheckBox();
         cbOpenLazy = new javax.swing.JCheckBox();
         cbBundledLoading = new javax.swing.JCheckBox();
@@ -146,7 +156,7 @@
         org.openide.awt.Mnemonics.setLocalizedText(lblCategories, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lblCategories.text")); // NOI18N
 
         lstCategories.setModel(new javax.swing.AbstractListModel<String>() {
-            String[] strings = { "Execution", "Appearance", "Dependencies", "Experimental" };
+            String[] strings = { "Execution", "Appearance", "Dependencies", "Maven", "Experimental" };
             public int getSize() { return strings.length; }
             public String getElementAt(int i) { return strings[i]; }
         });
@@ -157,28 +167,28 @@
             }
         });
 
-        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
-        jPanel3.setLayout(jPanel3Layout);
-        jPanel3Layout.setHorizontalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
+        javax.swing.GroupLayout pnlCategoriesLayout = new javax.swing.GroupLayout(pnlCategories);
+        pnlCategories.setLayout(pnlCategoriesLayout);
+        pnlCategoriesLayout.setHorizontalGroup(
+            pnlCategoriesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(pnlCategoriesLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(pnlCategoriesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                     .addComponent(lstCategories, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                     .addComponent(lblCategories, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
-        jPanel3Layout.setVerticalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
+        pnlCategoriesLayout.setVerticalGroup(
+            pnlCategoriesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(pnlCategoriesLayout.createSequentialGroup()
                 .addContainerGap()
                 .addComponent(lblCategories)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(lstCategories, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(lstCategories, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
                 .addContainerGap())
         );
 
-        add(jPanel3, java.awt.BorderLayout.WEST);
+        add(pnlCategories, java.awt.BorderLayout.WEST);
 
         pnlCards.setPreferredSize(new java.awt.Dimension(800, 415));
         pnlCards.setLayout(new java.awt.CardLayout());
@@ -248,17 +258,6 @@
             }
         });
 
-        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
-        jPanel6.setLayout(jPanel6Layout);
-        jPanel6Layout.setHorizontalGroup(
-            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 0, Short.MAX_VALUE)
-        );
-        jPanel6Layout.setVerticalGroup(
-            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 0, Short.MAX_VALUE)
-        );
-
         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
         jPanel1.setLayout(jPanel1Layout);
         jPanel1Layout.setHorizontalGroup(
@@ -267,43 +266,40 @@
                 .addContainerGap()
                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(lblGradleUserHome)
+                        .addGap(9, 9, 9)
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(lblGradleUserHome)
-                            .addComponent(lblGradleDistribution))
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(231, 231, 231)
+                                .addComponent(lbVersionInfo, javax.swing.GroupLayout.DEFAULT_SIZE, 2, Short.MAX_VALUE)
+                                .addGap(78, 78, 78))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
+                                .addComponent(tfGradleUserHome)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(btGradleUserHome, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(btDefaultHome, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(lblGradleDistribution)
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                             .addGroup(jPanel1Layout.createSequentialGroup()
-                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addGroup(jPanel1Layout.createSequentialGroup()
-                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                            .addGroup(jPanel1Layout.createSequentialGroup()
-                                                .addGap(231, 231, 231)
-                                                .addComponent(lbVersionInfo, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE))
-                                            .addComponent(rbUseStandardGradle, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(cbGradleVersion, 0, 122, Short.MAX_VALUE))
-                                    .addGroup(jPanel1Layout.createSequentialGroup()
-                                        .addComponent(rbUseCustomGradle)
-                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(tfUseCustomGradle))
-                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
-                                        .addComponent(tfGradleUserHome)
-                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(btGradleUserHome, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                .addComponent(rbUseStandardGradle)
                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                    .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                    .addComponent(btUseCustomGradle, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE)
-                                    .addComponent(btDefaultHome, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                                .addComponent(cbGradleVersion, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                             .addGroup(jPanel1Layout.createSequentialGroup()
-                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addComponent(cbStartDaemonOnStart)
-                                    .addComponent(cbPreferWrapper))
-                                .addGap(0, 140, Short.MAX_VALUE))))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
-                        .addGap(0, 0, Short.MAX_VALUE)
-                        .addComponent(cbSilentInstall)))
-                .addContainerGap())
+                                .addComponent(rbUseCustomGradle)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(tfUseCustomGradle)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(btUseCustomGradle, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE))
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(cbSilentInstall)
+                            .addComponent(cbStartDaemonOnStart)
+                            .addComponent(cbPreferWrapper))
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addGap(2, 2, 2))
         );
 
         jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btGradleUserHome, btUseCustomGradle});
@@ -318,23 +314,22 @@
                     .addComponent(btGradleUserHome)
                     .addComponent(btDefaultHome))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                        .addComponent(lblGradleDistribution)
-                        .addComponent(cbGradleVersion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addComponent(rbUseStandardGradle)
-                        .addComponent(lbVersionInfo))
-                    .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addComponent(lbVersionInfo)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblGradleDistribution)
+                    .addComponent(cbGradleVersion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(rbUseStandardGradle))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(rbUseCustomGradle)
                     .addComponent(tfUseCustomGradle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(btUseCustomGradle))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(cbPreferWrapper)
-                .addGap(44, 44, 44)
-                .addComponent(cbStartDaemonOnStart)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(cbPreferWrapper)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cbStartDaemonOnStart)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(cbSilentInstall))
         );
 
@@ -354,6 +349,11 @@
         org.openide.awt.Mnemonics.setLocalizedText(cbNoRebuild, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbNoRebuild.text")); // NOI18N
         cbNoRebuild.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbNoRebuild.toolTipText")); // NOI18N
 
+        lbAllowExecution.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
+        org.openide.awt.Mnemonics.setLocalizedText(lbAllowExecution, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbAllowExecution.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(lbNetworkProxy, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbNetworkProxy.text")); // NOI18N
+
         javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
         jPanel2.setLayout(jPanel2Layout);
         jPanel2Layout.setHorizontalGroup(
@@ -361,71 +361,73 @@
             .addGroup(jPanel2Layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(cbOffline)
-                    .addComponent(cbConfigureOnDemand)
-                    .addComponent(cbNoRebuild))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(cbUseConfigCache)
-                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                        .addComponent(cbSkipCheck, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addComponent(cbSkipTest, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                    .addGroup(jPanel2Layout.createSequentialGroup()
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(cbOffline)
+                            .addComponent(cbConfigureOnDemand)
+                            .addComponent(cbNoRebuild, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(cbUseConfigCache)
+                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                .addComponent(cbSkipCheck, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                .addComponent(cbSkipTest, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                    .addGroup(jPanel2Layout.createSequentialGroup()
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(lbAllowExecution, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(lbNetworkProxy, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(cbNetworkProxy, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(cbAllowExecution, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(0, 0, Short.MAX_VALUE)))
                 .addContainerGap())
         );
         jPanel2Layout.setVerticalGroup(
             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel2Layout.createSequentialGroup()
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap()
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(cbOffline)
                     .addComponent(cbSkipCheck))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(cbSkipTest)
-                    .addComponent(cbNoRebuild))
+                    .addComponent(cbNoRebuild, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(cbConfigureOnDemand)
                     .addComponent(cbUseConfigCache))
-                .addGap(72, 72, 72))
+                .addGap(18, 18, 18)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cbAllowExecution, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lbAllowExecution))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cbNetworkProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lbNetworkProxy))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        lbAllowExecution.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
-        org.openide.awt.Mnemonics.setLocalizedText(lbAllowExecution, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbAllowExecution.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(cbPreferMaven, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbPreferMaven.text")); // NOI18N
-
         javax.swing.GroupLayout pnlExecutionLayout = new javax.swing.GroupLayout(pnlExecution);
         pnlExecution.setLayout(pnlExecutionLayout);
         pnlExecutionLayout.setHorizontalGroup(
             pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addGroup(pnlExecutionLayout.createSequentialGroup()
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlExecutionLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(pnlExecutionLayout.createSequentialGroup()
-                        .addComponent(cbPreferMaven)
-                        .addGap(0, 346, Short.MAX_VALUE))
-                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlExecutionLayout.createSequentialGroup()
-                        .addComponent(lbAllowExecution, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(cbAllowExecution, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap())
         );
         pnlExecutionLayout.setVerticalGroup(
             pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlExecutionLayout.createSequentialGroup()
+                .addContainerGap()
                 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbAllowExecution, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lbAllowExecution))
-                .addGap(11, 11, 11)
-                .addComponent(cbPreferMaven)
-                .addContainerGap())
+                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(14, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlExecution, "Execution");
@@ -446,7 +448,7 @@
             .addGroup(jPanel4Layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(cbDisplayDescription, javax.swing.GroupLayout.DEFAULT_SIZE, 691, Short.MAX_VALUE)
+                    .addComponent(cbDisplayDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                     .addComponent(cbHideEmptyConfig, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap())
         );
@@ -474,10 +476,11 @@
         jPanel5Layout.setHorizontalGroup(
             jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel5Layout.createSequentialGroup()
+                .addContainerGap()
                 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(cbAlwaysShowOutput, javax.swing.GroupLayout.DEFAULT_SIZE, 697, Short.MAX_VALUE)
+                    .addComponent(cbReuseEditorOnStackTrace, javax.swing.GroupLayout.DEFAULT_SIZE, 541, Short.MAX_VALUE)
                     .addComponent(cbReuseOutputTabs, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(cbReuseEditorOnStackTrace, javax.swing.GroupLayout.DEFAULT_SIZE, 697, Short.MAX_VALUE))
+                    .addComponent(cbAlwaysShowOutput, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap())
         );
         jPanel5Layout.setVerticalGroup(
@@ -488,18 +491,18 @@
                 .addComponent(cbReuseOutputTabs)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(cbReuseEditorOnStackTrace)
-                .addContainerGap(36, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
         javax.swing.GroupLayout pnlAppearanceLayout = new javax.swing.GroupLayout(pnlAppearance);
         pnlAppearance.setLayout(pnlAppearanceLayout);
         pnlAppearanceLayout.setHorizontalGroup(
             pnlAppearanceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(pnlAppearanceLayout.createSequentialGroup()
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlAppearanceLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(pnlAppearanceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(pnlAppearanceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap())
         );
         pnlAppearanceLayout.setVerticalGroup(
@@ -509,13 +512,21 @@
                 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(204, Short.MAX_VALUE))
+                .addContainerGap(216, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlAppearance, "Appearance");
 
         pnlDependencies.setPreferredSize(new java.awt.Dimension(800, 415));
 
+        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.jPanel8.border.title"))); // NOI18N
+
+        cbDownloadJavadoc.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbDownloadJavadoc.toolTipText")); // NOI18N
+        cbDownloadJavadoc.setEnabled(false);
+
+        cbDownloadSources.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbDownloadSources.toolTipText")); // NOI18N
+        cbDownloadSources.setEnabled(false);
+
         lbDownloadLibs.setLabelFor(cbDownloadLibs);
         org.openide.awt.Mnemonics.setLocalizedText(lbDownloadLibs, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbDownloadLibs.text")); // NOI18N
 
@@ -525,11 +536,40 @@
         lbDownloadJavadoc.setLabelFor(cbDownloadJavadoc);
         org.openide.awt.Mnemonics.setLocalizedText(lbDownloadJavadoc, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbDownloadJavadoc.text")); // NOI18N
 
-        cbDownloadJavadoc.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbDownloadJavadoc.toolTipText")); // NOI18N
-        cbDownloadJavadoc.setEnabled(false);
-
-        cbDownloadSources.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbDownloadSources.toolTipText")); // NOI18N
-        cbDownloadSources.setEnabled(false);
+        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
+        jPanel8.setLayout(jPanel8Layout);
+        jPanel8Layout.setHorizontalGroup(
+            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel8Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addComponent(lbDownloadSources, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(lbDownloadJavadoc, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(lbDownloadLibs, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(cbDownloadSources, 0, 238, Short.MAX_VALUE)
+                    .addComponent(cbDownloadLibs, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(cbDownloadJavadoc, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+        jPanel8Layout.setVerticalGroup(
+            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel8Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lbDownloadLibs)
+                    .addComponent(cbDownloadLibs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lbDownloadSources)
+                    .addComponent(cbDownloadSources, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lbDownloadJavadoc)
+                    .addComponent(cbDownloadJavadoc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
 
         javax.swing.GroupLayout pnlDependenciesLayout = new javax.swing.GroupLayout(pnlDependencies);
         pnlDependencies.setLayout(pnlDependenciesLayout);
@@ -537,45 +577,60 @@
             pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlDependenciesLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(pnlDependenciesLayout.createSequentialGroup()
-                        .addComponent(lbDownloadLibs)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(cbDownloadLibs, 0, 347, Short.MAX_VALUE))
-                    .addGroup(pnlDependenciesLayout.createSequentialGroup()
-                        .addComponent(lbDownloadJavadoc)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(cbDownloadJavadoc, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                    .addGroup(pnlDependenciesLayout.createSequentialGroup()
-                        .addComponent(lbDownloadSources, javax.swing.GroupLayout.PREFERRED_SIZE, 360, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(cbDownloadSources, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addContainerGap())
         );
-
-        pnlDependenciesLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {lbDownloadJavadoc, lbDownloadLibs, lbDownloadSources});
-
         pnlDependenciesLayout.setVerticalGroup(
             pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlDependenciesLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(lbDownloadLibs)
-                    .addComponent(cbDownloadLibs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(lbDownloadSources)
-                    .addComponent(cbDownloadSources, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(pnlDependenciesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(lbDownloadJavadoc)
-                    .addComponent(cbDownloadJavadoc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addContainerGap(352, Short.MAX_VALUE))
+                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(294, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlDependencies, "Dependencies");
 
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.jLabel1.text")); // NOI18N
+        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.jPanel3.border.title"))); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(cbPreferMaven, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbPreferMaven.text")); // NOI18N
+
+        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
+        jPanel3.setLayout(jPanel3Layout);
+        jPanel3Layout.setHorizontalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cbPreferMaven)
+                .addContainerGap(231, Short.MAX_VALUE))
+        );
+        jPanel3Layout.setVerticalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cbPreferMaven)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout pnlMavenLayout = new javax.swing.GroupLayout(pnlMaven);
+        pnlMaven.setLayout(pnlMavenLayout);
+        pnlMavenLayout.setHorizontalGroup(
+            pnlMavenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlMavenLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        pnlMavenLayout.setVerticalGroup(
+            pnlMavenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(pnlMavenLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(354, Short.MAX_VALUE))
+        );
+
+        pnlCards.add(pnlMaven, "Maven");
+
+        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.jPanel7.border.title"))); // NOI18N
 
         org.openide.awt.Mnemonics.setLocalizedText(cbEnableCache, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbEnableCache.text")); // NOI18N
         cbEnableCache.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbEnableCache.toolTipText")); // NOI18N
@@ -586,34 +641,45 @@
         org.openide.awt.Mnemonics.setLocalizedText(cbBundledLoading, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbBundledLoading.text")); // NOI18N
         cbBundledLoading.setToolTipText(org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbBundledLoading.toolTipText")); // NOI18N
 
+        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
+        jPanel7.setLayout(jPanel7Layout);
+        jPanel7Layout.setHorizontalGroup(
+            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel7Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(cbOpenLazy)
+                    .addComponent(cbEnableCache)
+                    .addComponent(cbBundledLoading))
+                .addContainerGap(289, Short.MAX_VALUE))
+        );
+        jPanel7Layout.setVerticalGroup(
+            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel7Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cbEnableCache)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cbOpenLazy)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cbBundledLoading)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
         javax.swing.GroupLayout pnlExperimentalLayout = new javax.swing.GroupLayout(pnlExperimental);
         pnlExperimental.setLayout(pnlExperimentalLayout);
         pnlExperimentalLayout.setHorizontalGroup(
             pnlExperimentalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlExperimentalLayout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(pnlExperimentalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(jLabel1)
-                    .addGroup(pnlExperimentalLayout.createSequentialGroup()
-                        .addGap(6, 6, 6)
-                        .addGroup(pnlExperimentalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(cbOpenLazy)
-                            .addComponent(cbEnableCache)
-                            .addComponent(cbBundledLoading))))
-                .addContainerGap(423, Short.MAX_VALUE))
+                .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
         );
         pnlExperimentalLayout.setVerticalGroup(
             pnlExperimentalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlExperimentalLayout.createSequentialGroup()
                 .addContainerGap()
-                .addComponent(jLabel1)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(cbEnableCache)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(cbOpenLazy)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(cbBundledLoading)
-                .addContainerGap(334, Short.MAX_VALUE))
+                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(300, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlExperimental, "Experimental");
@@ -666,8 +732,8 @@
     }//GEN-LAST:event_cbGradleVersionItemStateChanged
 
     private void rbUseStandardGradleStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rbUseStandardGradleStateChanged
-       boolean selected = rbUseStandardGradle.isSelected();
-       cbGradleVersion.setEnabled(selected);
+        boolean selected = rbUseStandardGradle.isSelected();
+        cbGradleVersion.setEnabled(selected);
     }//GEN-LAST:event_rbUseStandardGradleStateChanged
 
     private void rbUseCustomGradleStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rbUseCustomGradleStateChanged
@@ -746,6 +812,8 @@
         cbDownloadJavadoc.setSelectedItem(settings.getDownloadJavadoc());
 
         cbAllowExecution.setSelectedItem(settings.getGradleExecutionRule());
+        
+        cbNetworkProxy.setSelectedItem(experimental.getNetworkProxy());
 
         new SwingWorker<List<GradleDistribution>, Void>() {
 
@@ -830,6 +898,8 @@
                         LifecycleManager.getDefault().exit();
             });
         }
+        
+        experimental.setNetworkProxy((NetworkProxySettings)cbNetworkProxy.getSelectedItem());
     }
 
     public boolean hasChanges() {
@@ -869,6 +939,8 @@
         isChanged |= settings.getDownloadJavadoc() != cbDownloadJavadoc.getSelectedItem();
 
         isChanged |= settings.getGradleExecutionRule() != cbAllowExecution.getSelectedItem();
+        
+        isChanged |= experimental.getNetworkProxy() != cbNetworkProxy.getSelectedItem();
 
         return isChanged;
     }
@@ -894,7 +966,7 @@
             if (cmp instanceof JLabel) {
                 JLabel label = (JLabel) cmp;
                 label.setHorizontalAlignment(RIGHT);
-                if (value != null && value instanceof GradleDistribution) {
+                if (value instanceof GradleDistribution) {
                     GradleDistribution dist = (GradleDistribution) value;
                     label.setText(dist.getVersion());
                     if (!dist.isAvailable()) {
@@ -933,6 +1005,7 @@
     private javax.swing.JCheckBox cbEnableCache;
     private javax.swing.JComboBox<GradleDistribution> cbGradleVersion;
     private javax.swing.JCheckBox cbHideEmptyConfig;
+    private javax.swing.JComboBox<NetworkProxySettings> cbNetworkProxy;
     private javax.swing.JCheckBox cbNoRebuild;
     private javax.swing.JCheckBox cbOffline;
     private javax.swing.JCheckBox cbOpenLazy;
@@ -945,17 +1018,11 @@
     private javax.swing.JCheckBox cbSkipTest;
     private javax.swing.JCheckBox cbStartDaemonOnStart;
     private javax.swing.JCheckBox cbUseConfigCache;
-    private javax.swing.JLabel jLabel1;
-    private javax.swing.JPanel jPanel1;
-    private javax.swing.JPanel jPanel2;
-    private javax.swing.JPanel jPanel3;
-    private javax.swing.JPanel jPanel4;
-    private javax.swing.JPanel jPanel5;
-    private javax.swing.JPanel jPanel6;
     private javax.swing.JLabel lbAllowExecution;
     private javax.swing.JLabel lbDownloadJavadoc;
     private javax.swing.JLabel lbDownloadLibs;
     private javax.swing.JLabel lbDownloadSources;
+    private javax.swing.JLabel lbNetworkProxy;
     private javax.swing.JLabel lbVersionInfo;
     private javax.swing.JLabel lblCategories;
     private javax.swing.JLabel lblGradleDistribution;
@@ -963,9 +1030,11 @@
     private javax.swing.JList<String> lstCategories;
     private javax.swing.JPanel pnlAppearance;
     private javax.swing.JPanel pnlCards;
+    private javax.swing.JPanel pnlCategories;
     private javax.swing.JPanel pnlDependencies;
     private javax.swing.JPanel pnlExecution;
     private javax.swing.JPanel pnlExperimental;
+    private javax.swing.JPanel pnlMaven;
     private javax.swing.JRadioButton rbUseCustomGradle;
     private javax.swing.JRadioButton rbUseStandardGradle;
     private javax.swing.JTextField tfGradleUserHome;
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleSettings.java b/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleSettings.java
index f1c7030..4e17035 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleSettings.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleSettings.java
@@ -263,10 +263,28 @@
         return getPreferences().get(PROP_GRADLE_VERSION, GradleVersion.current().getVersion());
     }
 
+    /**
+     * Gradle removed this option in version 8.0. NetBeans is going to remove
+     * the UI option in NetBeans 20, beyond that point this option would be
+     * available to keep binary compatibility, but would be un-effective.
+     * 
+     * @param b
+     * @deprecated Do not use, could produce undesirable results.
+     */
+    @Deprecated
     public void setNoRebuild(boolean b) {
         getPreferences().putBoolean(PROP_OPT_NO_REBUILD, b);
     }
 
+    /**
+     * Gradle removed this option in version 8.0. NetBeans is going to remove
+     * the UI option in NetBeans 20, beyond that point this option would be
+     * available to keep binary compatibility, but would return {@code false}.
+     * 
+     * @return whether the {@code --no-rebuild} command line option should be set by default.
+     * @deprecated Do not use, could produce undesirable results.
+     */
+    @Deprecated
     public boolean getNoRebuild() {
         return getPreferences().getBoolean(PROP_OPT_NO_REBUILD, false);
     }
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/JavaRuntimeManager.java b/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/JavaRuntimeManager.java
new file mode 100644
index 0000000..2189ef4
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/JavaRuntimeManager.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.spi.execute;
+
+import java.io.File;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.annotations.common.NonNull;
+
+/**
+ * JavaRuntimeManager is to provide Java Runtime for Gradle execution. Gradle
+ * is not just a build system for JVM based languages, but can build C, C++,
+ * NodeJS projects as well.
+ * <p>
+ * Gradle just requires a suitable JRE to run on.
+ * </p>
+ * <p>Most cases though Gradle build Java libraries/applications, and by default
+ * Gradle uses the JVM, that it is running on.</p>
+ *
+ * <p>This manager separates the JavaRuntime on which Gradle can run from
+ * the JavaPlatform on which Gradle Java project can be built. Every JavaPlatform
+ * is a JavaRuntime, but not every JavaRuntime is a JavaPlatform way.
+ * </p>
+ *
+ * @author Laszlo Kishalmi
+ * @since 2.32
+ */
+public interface JavaRuntimeManager {
+
+    /**
+     * The ID that the Runtime shall use for the Java Runtime the IDE is runnoing on.
+     */
+    public static String DEFAULT_RUNTIME_ID = "default_platform"; //NOI18N
+
+    /**
+     * Return the available runtimes stored in the IDE with their respective Id-s.
+     *
+     * @return the available runtimes stored in the IDE.
+     */
+    Map<String, JavaRuntime> getAvailableRuntimes();
+
+    /**
+     * This method is called from the Gradle Execution Customizer when
+     * the "Manage Runtimes..." button is called.
+     *
+     * @return can provide a runnable to configure the available runtimes.
+     */
+    default Optional<Runnable> manageRuntimesAction() {
+        return Optional.empty();
+    }
+
+    /**
+     * Register a change listener to this manager.
+     * Implementations shall fire a change event when the available runtimes
+     * changed.
+     * <p>
+     * The default implementation does nothing.
+     * </p>
+     *
+     * @param l the listener to be registered.
+     */
+    default void addChangeListener(ChangeListener l) {}
+
+    /**
+     * Removes a change listener from this manager.
+     * <p>
+     * The default implementation does nothing.
+     * </p>
+     * @param l the listener to be removed.
+     */
+    default void removeChangeListener(ChangeListener l) {}
+
+    public static JavaRuntime createJavaRuntime(@NonNull String id, File javaHome) {
+        return new JavaRuntime(id, null, javaHome);
+    }
+
+    public static JavaRuntime createJavaRuntime(@NonNull String id, String displayName, File javaHome) {
+        return new JavaRuntime(id, displayName, javaHome);
+    }
+
+    /**
+     * This class represents a java home directory with and id,
+     * and an optional display name.
+     *
+     * @since 2.32
+     */
+    public final class JavaRuntime implements Comparable<JavaRuntime> {
+        final String id;
+        final String displayName;
+        final File javaHome;
+
+        private JavaRuntime(@NonNull String id, String displayName, File javaHome) {
+            this.id = id;
+            this.displayName = displayName != null ? displayName : id;
+            this.javaHome = javaHome;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public String getDisplayName() {
+            return displayName;
+        }
+
+        /**
+         * The Java home directory associated with the id. This can be null or
+         * non existent directory, that would represent a broken JavaRuntime.
+         *
+         * @return the Java home directory of this runtime.
+         */
+        public File getJavaHome() {
+            return javaHome;
+        }
+
+        /**
+         * Returns {@code true} if the Java home of this runtime is {@code null}
+         * or points to a non-existing directory.
+         *
+         * @return {@code true} if this runtime should not be used.
+         */
+        public boolean isBroken() {
+            return javaHome == null || !javaHome.isDirectory();
+        }
+
+        @Override
+        public int compareTo(JavaRuntime o) {
+            return getDisplayName().compareToIgnoreCase(o.getDisplayName());
+        }
+
+        @Override
+        public String toString() {
+            return getDisplayName();
+        }
+
+        @Override
+        public int hashCode() {
+            return id.hashCode();
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final JavaRuntime other = (JavaRuntime) obj;
+            return Objects.equals(this.id, other.id);
+        }
+
+
+    }
+}
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/package-info.java b/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/package-info.java
new file mode 100644
index 0000000..b798cae
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/spi/execute/package-info.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+/**
+ * If a project needs direct access to Gradle, there is a
+ * {@link org.gradle.tooling.ProjectConnection}
+ * can be retrieved from the project's lookup. The returned implementation
+ * takes account the {@link org.netbeans.modules.gradle.spi.execute.GradleJavaPlatformProvider} and the {@link org.netbeans.modules.gradle.spi.execute.GradleDistributionProvider}
+ * implementations if they are available in the project lookup.
+ * <pre>
+ *  ProjectConnection connection = project.getLookup().lookup(ProjectConnection.class);
+ *
+ *  connection.newBuild()
+ *    .forTasks("tasks")
+ *    .setStandardOutput(System.out)
+ *    .run();
+ *
+ * </pre>
+ */
+package org.netbeans.modules.gradle.spi.execute;
diff --git a/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties b/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java b/extide/gradle/test/unit/data/projects/oldgradle/basic/build.gradle
similarity index 66%
copy from java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
copy to extide/gradle/test/unit/data/projects/oldgradle/basic/build.gradle
index 1416c3a..6301ee7 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
+++ b/extide/gradle/test/unit/data/projects/oldgradle/basic/build.gradle
@@ -16,29 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.classfile;
 
-import junit.framework.*;
+apply plugin: 'java'
+apply plugin: 'application'
 
-/**
- *
- * @author tball
- */
-public class ConstantPoolTest extends TestCase {
-    
-    public ConstantPoolTest(String testName) {
-        super(testName);
-    }
-    
-    public void testGet() {
-    }
-
-    public void testGetClass() {
-    }
-
-    public void testGetAllConstants() {
-    }
-
-    public void testGetAllClassNames() {
-    }
-}
+mainClassName = 'test.App'
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java b/extide/gradle/test/unit/data/projects/oldgradle/basic/settings.gradle
similarity index 66%
copy from java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
copy to extide/gradle/test/unit/data/projects/oldgradle/basic/settings.gradle
index 1416c3a..877a63d 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
+++ b/extide/gradle/test/unit/data/projects/oldgradle/basic/settings.gradle
@@ -16,29 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.classfile;
 
-import junit.framework.*;
+rootProject.name="simple"
 
-/**
- *
- * @author tball
- */
-public class ConstantPoolTest extends TestCase {
-    
-    public ConstantPoolTest(String testName) {
-        super(testName);
-    }
-    
-    public void testGet() {
-    }
-
-    public void testGetClass() {
-    }
-
-    public void testGetAllConstants() {
-    }
-
-    public void testGetAllClassNames() {
-    }
-}
diff --git a/extide/gradle/test/unit/data/projects/oldgradle/basic/src/main/java/test/App.java b/extide/gradle/test/unit/data/projects/oldgradle/basic/src/main/java/test/App.java
new file mode 100644
index 0000000..917e9b0
--- /dev/null
+++ b/extide/gradle/test/unit/data/projects/oldgradle/basic/src/main/java/test/App.java
@@ -0,0 +1,19 @@
+package test;
+
+import java.util.Collections;
+
+public class App {
+    private static final String PREFIX = "org.netbeans.gradle.javaexec.test.";
+    public static void main(String[] args) {
+        for (int i = 0; i < args.length; i++) {
+            System.err.println("args." + i + "=" + args[i]);
+        }
+        String[] props = Collections.list(System.getProperties().propertyNames()).stream().
+            filter(n -> n.toString().startsWith(PREFIX)).
+            map(Object::toString).sorted().toArray(i -> new String[i]);
+
+        for (int i = 0; i < props.length; i++) {
+            System.err.println("prop." + i + "=" + props[i].substring(PREFIX.length()) + "=" + System.getProperty(props[i]));
+        }
+    }
+}
diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
index 82aca6a..64778be 100644
--- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
+++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
@@ -20,13 +20,17 @@
 
 import java.io.File;
 import java.util.List;
-import java.util.Optional;
 import static junit.framework.TestCase.assertNotNull;
+import org.gradle.tooling.GradleConnector;
+import org.gradle.tooling.ProjectConnection;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectManager;
 import org.netbeans.api.project.ui.OpenProjects;
 import org.netbeans.modules.gradle.AbstractGradleProjectTestCase;
+import org.netbeans.modules.gradle.GradleBaseProjectInternal;
 import org.netbeans.modules.gradle.ProjectTrust;
+import org.netbeans.modules.gradle.api.execute.GradleDistributionManager;
+import org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
 import org.netbeans.modules.gradle.options.GradleExperimentalSettings;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -205,4 +209,62 @@
         assertEquals(":p1:jar", external.getPath());
         assertEquals(":p1", external.getProjectPath());
     }
+    
+    private void assertProjectLoadedWithNoProblems(Project p, String expectedVersion) {
+        GradleBaseProject gbp = GradleBaseProject.get(p);
+        assertNotNull(gbp);
+        assertTrue(NbGradleProject.get(p).getQuality().atLeast(NbGradleProject.Quality.FULL));
+        assertEquals(0, gbp.getProblems().size());
+        GradleBaseProjectInternal baseInternal = NbGradleProject.get(p).projectLookup(GradleBaseProjectInternal.class);
+        assertNotNull(baseInternal);
+        assertEquals(expectedVersion, baseInternal.getGradleVersion());
+    }
+    
+    private Project makeProjectWithWrapper(String subdir, String gradleVersion) throws Exception {
+        FileObject src = FileUtil.toFileObject(getDataDir()).getFileObject(subdir);
+        projectDir = FileUtil.copyFile(src, FileUtil.toFileObject(getWorkDir()), src.getNameExt());
+        
+        GradleDistribution dist = GradleDistributionManager.get().defaultDistribution();
+        GradleConnector gconn = GradleConnector.newConnector();
+        gconn = gconn.useGradleUserHomeDir(dist.getGradleUserHome());
+        if (dist.isAvailable()) {
+            gconn = gconn.useInstallation(dist.getDistributionDir());
+        } else {
+            gconn = gconn.useDistribution(dist.getDistributionURI());
+        }
+        try (ProjectConnection c = gconn.forProjectDirectory(FileUtil.toFile(projectDir)).connect()) {
+            c.newBuild().forTasks("wrapper").addArguments("wrapper", "--gradle-version", gradleVersion).run();
+        }
+        
+        Project p = ProjectManager.getDefault().findProject(projectDir);
+        assertNotNull(p);
+        ProjectTrust.getDefault().trustProject(p);
+        
+        OpenProjects.getDefault().open(new Project[] { p }, true);
+        OpenProjects.getDefault().openProjects().get();
+        
+        NbGradleProject.get(p).toQuality("Load data", NbGradleProject.Quality.FULL, false).toCompletableFuture().get();
+        return p;
+    }
+    
+    public void testOldGradle611ProjectLoads() throws Exception {
+        Project p = makeProjectWithWrapper("projects/oldgradle/basic", "6.1.1");
+        assertProjectLoadedWithNoProblems(p, "6.1.1");
+    }
+
+    public void testOldGradle683ProjectLoads() throws Exception {
+        Project p = makeProjectWithWrapper("projects/oldgradle/basic", "6.8.3");
+        assertProjectLoadedWithNoProblems(p, "6.8.3");
+    }
+
+    public void testOldGradle700ProjectLoads() throws Exception {
+        Project p = makeProjectWithWrapper("projects/oldgradle/basic", "7.0");
+        assertProjectLoadedWithNoProblems(p, "7.0");
+    }
+
+    public void testOldGradle710ProjectLoads() throws Exception {
+        Project p = makeProjectWithWrapper("projects/oldgradle/basic", "7.1");
+        assertProjectLoadedWithNoProblems(p, "7.1");
+    }
 }
+
diff --git a/extide/libs.gradle/external/binaries-list b/extide/libs.gradle/external/binaries-list
index 26365ef..f65a3e1 100644
--- a/extide/libs.gradle/external/binaries-list
+++ b/extide/libs.gradle/external/binaries-list
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-18FB51FF62486D84F7B91F171D0E4AABF020DCDC https://repo.gradle.org/public/org/gradle/gradle-tooling-api/7.5/gradle-tooling-api-7.5.jar gradle-tooling-api-7.5.jar
+21A1F0E6F9FB1A08D06602737FF2010288F9E934 https://repo.gradle.org/artifactory/libs-releases/org/gradle/gradle-tooling-api/8.0-rc-1/gradle-tooling-api-8.0-rc-1.jar gradle-tooling-api-8.0-rc-1.jar
diff --git a/extide/libs.gradle/external/gradle-tooling-api-7.5-license.txt b/extide/libs.gradle/external/gradle-tooling-api-8.0-rc-1-license.txt
similarity index 99%
rename from extide/libs.gradle/external/gradle-tooling-api-7.5-license.txt
rename to extide/libs.gradle/external/gradle-tooling-api-8.0-rc-1-license.txt
index 935c1ef..f616b4a 100644
--- a/extide/libs.gradle/external/gradle-tooling-api-7.5-license.txt
+++ b/extide/libs.gradle/external/gradle-tooling-api-8.0-rc-1-license.txt
@@ -1,7 +1,7 @@
 Name: Gradle Wrapper
 Description: Gradle Tooling API
-Version: 7.5
-Files: gradle-tooling-api-7.5.jar
+Version: 8.0-rc-1
+Files: gradle-tooling-api-8.0-rc-1.jar
 License: Apache-2.0
 Origin: Gradle Inc.
 URL: https://gradle.org/
diff --git a/extide/libs.gradle/external/gradle-tooling-api-7.5-notice.txt b/extide/libs.gradle/external/gradle-tooling-api-8.0-rc-1-notice.txt
similarity index 100%
rename from extide/libs.gradle/external/gradle-tooling-api-7.5-notice.txt
rename to extide/libs.gradle/external/gradle-tooling-api-8.0-rc-1-notice.txt
diff --git a/extide/libs.gradle/manifest.mf b/extide/libs.gradle/manifest.mf
index 178f6d0..21cbb48 100644
--- a/extide/libs.gradle/manifest.mf
+++ b/extide/libs.gradle/manifest.mf
@@ -1,5 +1,5 @@
 Manifest-Version: 1.0
 AutoUpdate-Show-In-Client: false
-OpenIDE-Module: org.netbeans.modules.libs.gradle/7
+OpenIDE-Module: org.netbeans.modules.libs.gradle/8
 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/libs/gradle/Bundle.properties
-OpenIDE-Module-Specification-Version: 7.7
+OpenIDE-Module-Specification-Version: 8.0.1
diff --git a/extide/libs.gradle/nbproject/org-netbeans-modules-libs-gradle.sig b/extide/libs.gradle/nbproject/org-netbeans-modules-libs-gradle.sig
index b48a72a..ff9ac82 100644
--- a/extide/libs.gradle/nbproject/org-netbeans-modules-libs-gradle.sig
+++ b/extide/libs.gradle/nbproject/org-netbeans-modules-libs-gradle.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.5.0.1
+#Version 8.0.1
 
 CLSS public abstract interface java.io.Serializable
 
@@ -33,6 +33,8 @@
 meth public boolean isBuildCacheEnabled()
 meth public boolean isBuildProjectDependencies()
 meth public boolean isBuildScan()
+meth public boolean isConfigurationCacheRequested()
+ anno 0 org.gradle.api.Incubating()
 meth public boolean isConfigureOnDemand()
  anno 0 org.gradle.api.Incubating()
 meth public boolean isContinueOnFailure()
diff --git a/extide/libs.gradle/nbproject/project.properties b/extide/libs.gradle/nbproject/project.properties
index a25cda0..41aa7d0 100644
--- a/extide/libs.gradle/nbproject/project.properties
+++ b/extide/libs.gradle/nbproject/project.properties
@@ -22,4 +22,4 @@
 # For more information, please see http://wiki.netbeans.org/SignatureTest
 sigtest.gen.fail.on.error=false
 
-release.external/gradle-tooling-api-7.5.jar=modules/gradle/gradle-tooling-api.jar
+release.external/gradle-tooling-api-8.0-rc-1.jar=modules/gradle/gradle-tooling-api.jar
diff --git a/extide/libs.gradle/nbproject/project.xml b/extide/libs.gradle/nbproject/project.xml
index f770f33..03b4e0a 100644
--- a/extide/libs.gradle/nbproject/project.xml
+++ b/extide/libs.gradle/nbproject/project.xml
@@ -39,7 +39,7 @@
             </public-packages>
             <class-path-extension>
                 <runtime-relative-path>gradle/gradle-tooling-api.jar</runtime-relative-path>
-                <binary-origin>external/gradle-tooling-api-7.5.jar</binary-origin>
+                <binary-origin>external/gradle-tooling-api-8.0-rc-1.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/extide/o.apache.tools.ant.module/nbproject/org-apache-tools-ant-module.sig b/extide/o.apache.tools.ant.module/nbproject/org-apache-tools-ant-module.sig
index ad9c180..f603eda 100644
--- a/extide/o.apache.tools.ant.module/nbproject/org-apache-tools-ant-module.sig
+++ b/extide/o.apache.tools.ant.module/nbproject/org-apache-tools-ant-module.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.101.0
+#Version 3.102.0
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/extide/options.java/nbproject/org-netbeans-modules-options-java.sig b/extide/options.java/nbproject/org-netbeans-modules-options-java.sig
index eb91a73..4ec6fd4 100644
--- a/extide/options.java/nbproject/org-netbeans-modules-options-java.sig
+++ b/extide/options.java/nbproject/org-netbeans-modules-options-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.31
+#Version 1.32
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/extide/options.java/nbproject/project.properties b/extide/options.java/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/extide/options.java/nbproject/project.properties
+++ b/extide/options.java/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/extra/libs.javafx.linux/nbproject/project.properties b/extra/libs.javafx.linux/nbproject/project.properties
index 04b47a2..02f1d19 100644
--- a/extra/libs.javafx.linux/nbproject/project.properties
+++ b/extra/libs.javafx.linux/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/extra/libs.javafx.macosx/nbproject/project.properties b/extra/libs.javafx.macosx/nbproject/project.properties
index 230824d..851ed2b 100644
--- a/extra/libs.javafx.macosx/nbproject/project.properties
+++ b/extra/libs.javafx.macosx/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/extra/libs.javafx.win/nbproject/project.properties b/extra/libs.javafx.win/nbproject/project.properties
index 0b27aea..6d40450 100644
--- a/extra/libs.javafx.win/nbproject/project.properties
+++ b/extra/libs.javafx.win/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/groovy/groovy.antproject/nbproject/project.properties b/groovy/groovy.antproject/nbproject/project.properties
index 218b504..34e21e7 100644
--- a/groovy/groovy.antproject/nbproject/project.properties
+++ b/groovy/groovy.antproject/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 nbm.module.author=Martin Janicek
diff --git a/groovy/groovy.editor/nbproject/org-netbeans-modules-groovy-editor.sig b/groovy/groovy.editor/nbproject/org-netbeans-modules-groovy-editor.sig
index ea7bf75..f25508d 100644
--- a/groovy/groovy.editor/nbproject/org-netbeans-modules-groovy-editor.sig
+++ b/groovy/groovy.editor/nbproject/org-netbeans-modules-groovy-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.86
+#Version 1.87
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/PathFinderVisitor.java b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/PathFinderVisitor.java
index 84e0ebe..7c35460 100644
--- a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/PathFinderVisitor.java
+++ b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/PathFinderVisitor.java
@@ -783,8 +783,8 @@
                 code = ((ClosureExpression) node).getCode();
             }
 
-            if (code != null && code instanceof BlockStatement
-                    && ((code.getLineNumber() < 0 && code.getColumnNumber() < 0)
+            if (code instanceof BlockStatement
+                && ((code.getLineNumber() < 0 && code.getColumnNumber() < 0)
                     || (code.getLastLineNumber() < 0 && code.getLastColumnNumber() < 0))) {
                 BlockStatement block = (BlockStatement) code;
                 List<Statement> statements = block.getStatements();
diff --git a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/CompletionContext.java b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/CompletionContext.java
index 3799347..751bbae 100644
--- a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/CompletionContext.java
+++ b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/CompletionContext.java
@@ -767,7 +767,7 @@
      * @return a valid ASTNode or null
      */
     private ClassNode getBeforeDotDeclaringClass() {
-        if (declaringClass != null && declaringClass instanceof ClassNode) {
+        if (declaringClass instanceof ClassNode) {
             return declaringClass;
         }
         
diff --git a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/ContextHelper.java b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/ContextHelper.java
index 33d7750..f9c27c5 100644
--- a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/ContextHelper.java
+++ b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/api/completion/util/ContextHelper.java
@@ -291,7 +291,7 @@
                 ASTNode node = getASTNodeForToken(ctx.before1, request);
                 LOG.log(Level.FINEST, "getASTNodeForToken(ASTNode) : {0}", node); //NOI18N
 
-                if (node != null && (node instanceof ClassExpression || node instanceof DeclarationExpression)) {
+                if (node instanceof ClassExpression || node instanceof DeclarationExpression) {
                     LOG.log(Level.FINEST, "ClassExpression or DeclarationExpression discovered"); //NOI18N
                     return true;
                 }
diff --git a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockMethodParamCompletion.java b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockMethodParamCompletion.java
index f18d43d..9bcee90 100644
--- a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockMethodParamCompletion.java
+++ b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockMethodParamCompletion.java
@@ -129,7 +129,7 @@
                 AnnotationNode unroll = null;
                 
                 ParserResult pr = request.getParserResult();
-                if(pr != null && pr instanceof GroovyParserResult) {
+                if(pr instanceof GroovyParserResult) {
                     GroovyParserResult gpr = (GroovyParserResult)request.getParserResult();
                     ClassNode unrollCN = gpr.resolveClassName(UNROLL_CLASS);
                     if (unrollCN != null) {
diff --git a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockUtils.java b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockUtils.java
index 508d544..90d153f 100644
--- a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockUtils.java
+++ b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/completion/SpockUtils.java
@@ -44,7 +44,7 @@
             return false;
         }
         ParserResult pr = context.getParserResult();
-        if (pr != null && pr instanceof GroovyParserResult) {
+        if (pr instanceof GroovyParserResult) {
             GroovyParserResult gpr = (GroovyParserResult) pr;
             ClassNode specCN = gpr.resolveClassName("spock.lang.Specification");   //NOI18N
             if (specCN != null) {
diff --git a/groovy/groovy.editor/test/qa-functional/src/org/netbeans/test/groovy/GeneralGroovy.java b/groovy/groovy.editor/test/qa-functional/src/org/netbeans/test/groovy/GeneralGroovy.java
index 1edc5cb..7142c62 100644
--- a/groovy/groovy.editor/test/qa-functional/src/org/netbeans/test/groovy/GeneralGroovy.java
+++ b/groovy/groovy.editor/test/qa-functional/src/org/netbeans/test/groovy/GeneralGroovy.java
@@ -149,7 +149,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/groovy/groovy.gsp/nbproject/project.properties b/groovy/groovy.gsp/nbproject/project.properties
index 0568b38..c81cb48 100644
--- a/groovy/groovy.gsp/nbproject/project.properties
+++ b/groovy/groovy.gsp/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 nbm.homepage=http://wiki.netbeans.org/groovy
 nbm.module.author=Martin Adamek, Matthias Schmidt
 
diff --git a/groovy/groovy.kit/nbproject/project.properties b/groovy/groovy.kit/nbproject/project.properties
index 7a01d53..741e205 100644
--- a/groovy/groovy.kit/nbproject/project.properties
+++ b/groovy/groovy.kit/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 nbm.homepage=http://wiki.netbeans.org/groovy
 nbm.module.author=Martin Adamek, Petr Hejl, Martin Janicek, Matthias Schmidt
diff --git a/groovy/groovy.refactoring/nbproject/project.properties b/groovy/groovy.refactoring/nbproject/project.properties
index 3506a0e..4c95e47 100644
--- a/groovy/groovy.refactoring/nbproject/project.properties
+++ b/groovy/groovy.refactoring/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 nbm.module.author=Martin Janicek
diff --git a/groovy/groovy.refactoring/src/org/netbeans/modules/groovy/refactoring/ui/WhereUsedPanelMethod.java b/groovy/groovy.refactoring/src/org/netbeans/modules/groovy/refactoring/ui/WhereUsedPanelMethod.java
index d48cc59..6bb4d43 100644
--- a/groovy/groovy.refactoring/src/org/netbeans/modules/groovy/refactoring/ui/WhereUsedPanelMethod.java
+++ b/groovy/groovy.refactoring/src/org/netbeans/modules/groovy/refactoring/ui/WhereUsedPanelMethod.java
@@ -146,7 +146,7 @@
                 boolean cellHasFocus) {
             setName("ComboBox.listRenderer"); // NOI18N
 
-            if (value != null && value instanceof ClassNode) {
+            if (value instanceof ClassNode) {
                 ClassNode classNode = ((ClassNode) value);
                 setText(ElementUtils.getNameWithoutPackage(classNode));
 
diff --git a/groovy/groovy.samples/nbproject/project.properties b/groovy/groovy.samples/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/groovy/groovy.samples/nbproject/project.properties
+++ b/groovy/groovy.samples/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/groovy/groovy.samples/sample_src/NBProjectGenerators/src/generators/NetBeansModule.groovy b/groovy/groovy.samples/sample_src/NBProjectGenerators/src/generators/NetBeansModule.groovy
index 534bb66..76d94f5 100644
--- a/groovy/groovy.samples/sample_src/NBProjectGenerators/src/generators/NetBeansModule.groovy
+++ b/groovy/groovy.samples/sample_src/NBProjectGenerators/src/generators/NetBeansModule.groovy
@@ -94,7 +94,7 @@
 
 """
 def project_properties = """\
-javac.source=1.5
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 """
diff --git a/groovy/groovy.support/nbproject/org-netbeans-modules-groovy-support.sig b/groovy/groovy.support/nbproject/org-netbeans-modules-groovy-support.sig
index ee30c38..6e08050 100644
--- a/groovy/groovy.support/nbproject/org-netbeans-modules-groovy-support.sig
+++ b/groovy/groovy.support/nbproject/org-netbeans-modules-groovy-support.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57
+#Version 1.58
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/groovy/groovy.support/src/org/netbeans/modules/groovy/support/wizard/AbstractFileWizard.java b/groovy/groovy.support/src/org/netbeans/modules/groovy/support/wizard/AbstractFileWizard.java
index c7b964f..0f817bf 100644
--- a/groovy/groovy.support/src/org/netbeans/modules/groovy/support/wizard/AbstractFileWizard.java
+++ b/groovy/groovy.support/src/org/netbeans/modules/groovy/support/wizard/AbstractFileWizard.java
@@ -72,7 +72,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/groovy/libs.groovy/nbproject/org-netbeans-modules-libs-groovy.sig b/groovy/libs.groovy/nbproject/org-netbeans-modules-libs-groovy.sig
index 8a11286..dff4036 100644
--- a/groovy/libs.groovy/nbproject/org-netbeans-modules-libs-groovy.sig
+++ b/groovy/libs.groovy/nbproject/org-netbeans-modules-libs-groovy.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.17
+#Version 2.18
 
 CLSS public abstract interface !annotation groovy.beans.Bindable
  anno 0 java.lang.annotation.Documented()
diff --git a/groovy/maven.groovy/nbproject/project.properties b/groovy/maven.groovy/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/groovy/maven.groovy/nbproject/project.properties
+++ b/groovy/maven.groovy/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/harness/apisupport.harness/build.xml b/harness/apisupport.harness/build.xml
index 19ca3c1..aa12e50 100644
--- a/harness/apisupport.harness/build.xml
+++ b/harness/apisupport.harness/build.xml
@@ -39,13 +39,13 @@
                 <pathelement location="${cluster}/tasks.jar"></pathelement>
             </classpath>
         </taskdef>
-        <echo file="build/binaries-list">8E6300EF51C1D801A7ED62D07CD221ACA3A90640 org.ow2.asm:asm:9.3</echo>
+        <echo file="build/binaries-list">B4E0E2D2E023AA317B7CFCFC916377EA348E07D1 org.ow2.asm:asm:9.4</echo>
         <TestDownload>
             <manifest dir="build">
                 <include name="binaries-list"/>
             </manifest>
         </TestDownload>
-        <delete file="build/asm-9.3.jar"/>
+        <delete file="build/asm-9.4.jar"/>
     </target>
 
     <target name="compile-jnlp-launcher" depends="init,compile">
diff --git a/harness/apisupport.harness/release/launchers/app.sh b/harness/apisupport.harness/release/launchers/app.sh
index 76bcc63..e92dc03 100644
--- a/harness/apisupport.harness/release/launchers/app.sh
+++ b/harness/apisupport.harness/release/launchers/app.sh
@@ -159,8 +159,24 @@
 
        # See longer comments in nb/ide.launcher/unix/netbeans.
        if [ ! -z "$KDE_FULL_SESSION" ] ; then
-           echo "Detected KDE; adding awt.useSystemAAFontSettings=on"
-           extra_automatic_options="-J-Dawt.useSystemAAFontSettings=on"
+           case "`command xrdb -query 2> /dev/null | grep Xft.rgba | cut -d ':' -f2 | xargs`" in
+               rgb)
+                   extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_hrgb"
+                   ;;
+               bgr)
+                   extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_hbgr"
+                   ;;
+               vrgb)
+                   extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_vrgb"
+                   ;;
+               vbgr)
+                   extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_vbgr"
+                   ;;
+               *)
+                   extra_automatic_options="-J-Dawt.useSystemAAFontSettings=on"
+                   ;;
+           esac
+           echo "Detected KDE; use explicit setting for font antialiasing ($extra_automatic_options)"
        fi
 
        # Add extra_automatic_options before default_options, to allow system
diff --git a/harness/jellytools.platform/nbproject/org-netbeans-modules-jellytools-platform.sig b/harness/jellytools.platform/nbproject/org-netbeans-modules-jellytools-platform.sig
index 74e940f..233fea4 100644
--- a/harness/jellytools.platform/nbproject/org-netbeans-modules-jellytools-platform.sig
+++ b/harness/jellytools.platform/nbproject/org-netbeans-modules-jellytools-platform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.46
+#Version 3.47
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/harness/jellytools.platform/test/qa-functional/data/SampleProject/nbproject/project.properties b/harness/jellytools.platform/test/qa-functional/data/SampleProject/nbproject/project.properties
index cb6088f..ee5acf4 100644
--- a/harness/jellytools.platform/test/qa-functional/data/SampleProject/nbproject/project.properties
+++ b/harness/jellytools.platform/test/qa-functional/data/SampleProject/nbproject/project.properties
@@ -43,7 +43,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/harness/jemmy/nbproject/org-netbeans-modules-jemmy.sig b/harness/jemmy/nbproject/org-netbeans-modules-jemmy.sig
index cdd6035..ac556ed 100644
--- a/harness/jemmy/nbproject/org-netbeans-modules-jemmy.sig
+++ b/harness/jemmy/nbproject/org-netbeans-modules-jemmy.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.44
+#Version 3.45
 
 CLSS public abstract java.awt.AWTEvent
 cons public init(java.awt.Event)
diff --git a/harness/libs.nbi.ant/stub/ext/engine/src/org/mycompany/installer/wizard/components/panels/PreInstallSummaryPanel.java b/harness/libs.nbi.ant/stub/ext/engine/src/org/mycompany/installer/wizard/components/panels/PreInstallSummaryPanel.java
index 587f633..c46e24b 100644
--- a/harness/libs.nbi.ant/stub/ext/engine/src/org/mycompany/installer/wizard/components/panels/PreInstallSummaryPanel.java
+++ b/harness/libs.nbi.ant/stub/ext/engine/src/org/mycompany/installer/wizard/components/panels/PreInstallSummaryPanel.java
@@ -210,13 +210,11 @@
             
             installationSizeLabel.setText(
                     panel.getProperty(INSTALLATION_SIZE_PROPERTY));
-            installationSizeValue.setText(StringUtils.formatSize(
-                    installationSize));
+            installationSizeValue.setText(StringUtils.formatSize(installationSize));
 
             downloadSizeLabel.setText(
                     panel.getProperty(DOWNLOAD_SIZE_PROPERTY));
-            downloadSizeValue.setText(StringUtils.formatSize(
-                    downloadSize));
+            downloadSizeValue.setText(StringUtils.formatSize(downloadSize));
 
             if (registry.getProductsToInstall().size() == 0) {
                 locationsPane.setVisible(false);
diff --git a/harness/nbjunit/nbproject/org-netbeans-modules-nbjunit.sig b/harness/nbjunit/nbproject/org-netbeans-modules-nbjunit.sig
index ee421ca..1254b17 100644
--- a/harness/nbjunit/nbproject/org-netbeans-modules-nbjunit.sig
+++ b/harness/nbjunit/nbproject/org-netbeans-modules-nbjunit.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.107
+#Version 1.108
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/harness/o.n.insane/nbproject/org-netbeans-insane.sig b/harness/o.n.insane/nbproject/org-netbeans-insane.sig
index 4e1f359..52916cb 100644
--- a/harness/o.n.insane/nbproject/org-netbeans-insane.sig
+++ b/harness/o.n.insane/nbproject/org-netbeans-insane.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.46.0
+#Version 1.47.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/harness/o.n.insane/src/org/netbeans/insane/impl/LiveEngine.java b/harness/o.n.insane/src/org/netbeans/insane/impl/LiveEngine.java
index f9545e8..5e7fea3 100644
--- a/harness/o.n.insane/src/org/netbeans/insane/impl/LiveEngine.java
+++ b/harness/o.n.insane/src/org/netbeans/insane/impl/LiveEngine.java
@@ -65,7 +65,7 @@
     }
     
     public String getID(Object o) {
-        objects.put(o, null);; // mark as known
+        objects.put(o, null); // mark as known
         return null; // null - if somebody really uses it, fails quickly
     }
 
diff --git a/ide/api.debugger/nbproject/org-netbeans-api-debugger.sig b/ide/api.debugger/nbproject/org-netbeans-api-debugger.sig
index 65b12ac..3d4bf31 100644
--- a/ide/api.debugger/nbproject/org-netbeans-api-debugger.sig
+++ b/ide/api.debugger/nbproject/org-netbeans-api-debugger.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.72
+#Version 1.73
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
@@ -97,7 +97,7 @@
 meth public void removeActionsManagerListener(org.netbeans.api.debugger.ActionsManagerListener)
 supr java.lang.Object
 hfds actionListener,actionProviders,actionProvidersInitialized,actionProvidersLock,aps,destroy,doiingDo,lazyListeners,listener,listeners,listerersLoaded,logger,lookup,providersChangeListener
-hcls AsynchActionTask,MyActionListener
+hcls AsynchActionTask
 
 CLSS public org.netbeans.api.debugger.ActionsManagerAdapter
 cons public init()
diff --git a/ide/api.debugger/src/org/netbeans/api/debugger/Lookup.java b/ide/api.debugger/src/org/netbeans/api/debugger/Lookup.java
index e330d48..9885f68 100644
--- a/ide/api.debugger/src/org/netbeans/api/debugger/Lookup.java
+++ b/ide/api.debugger/src/org/netbeans/api/debugger/Lookup.java
@@ -107,7 +107,7 @@
         
         @Override
         public <T> List<? extends T> lookup(String folder, Class<T> service) {
-            List<T> l = new ArrayList<T>();
+            List<T> l = new ArrayList<>();
             for (Object s : services) {
                 if (service.isInstance(s)) {
                     l.add(service.cast(s));
diff --git a/ide/api.debugger/src/org/netbeans/spi/debugger/DelegatingSessionProvider.java b/ide/api.debugger/src/org/netbeans/spi/debugger/DelegatingSessionProvider.java
index 0872025..da9dd7f 100644
--- a/ide/api.debugger/src/org/netbeans/spi/debugger/DelegatingSessionProvider.java
+++ b/ide/api.debugger/src/org/netbeans/spi/debugger/DelegatingSessionProvider.java
@@ -34,6 +34,7 @@
 // XXX: What this is for??
 // XXX: Not usable anyway, Session is final with private constructor
 // XXX: Should be deprecated? Or removed - can not be meaningfully implemented anyway...
+@Deprecated
 public abstract class DelegatingSessionProvider {
 
     /**
diff --git a/ide/api.java.classpath/nbproject/org-netbeans-api-java-classpath.sig b/ide/api.java.classpath/nbproject/org-netbeans-api-java-classpath.sig
index e524f89..bb9d6fb 100644
--- a/ide/api.java.classpath/nbproject/org-netbeans-api-java-classpath.sig
+++ b/ide/api.java.classpath/nbproject/org-netbeans-api-java-classpath.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.71
+#Version 1.72
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/api.lsp/nbproject/org-netbeans-api-lsp.sig b/ide/api.lsp/nbproject/org-netbeans-api-lsp.sig
index 71e7122..a0b188d 100644
--- a/ide/api.lsp/nbproject/org-netbeans-api-lsp.sig
+++ b/ide/api.lsp/nbproject/org-netbeans-api-lsp.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.11
+#Version 1.13
 
 CLSS public abstract interface java.io.Serializable
 
@@ -221,6 +221,7 @@
 innr public final static Builder
 meth public java.lang.String getCode()
 meth public java.lang.String getDescription()
+meth public java.net.URL getCodeDescription()
 meth public org.netbeans.api.lsp.Diagnostic$LazyCodeActions getActions()
 meth public org.netbeans.api.lsp.Diagnostic$Severity getSeverity()
 meth public org.netbeans.api.lsp.Position getEndPosition()
@@ -229,17 +230,18 @@
  anno 1 org.netbeans.api.annotations.common.NullAllowed()
  anno 2 org.netbeans.api.annotations.common.NullAllowed()
 supr java.lang.Object
-hfds actions,code,description,endPosition,severity,startPosition
+hfds actions,code,codeDescription,description,endPosition,severity,startPosition
 
 CLSS public final static org.netbeans.api.lsp.Diagnostic$Builder
  outer org.netbeans.api.lsp.Diagnostic
 meth public org.netbeans.api.lsp.Diagnostic build()
 meth public org.netbeans.api.lsp.Diagnostic$Builder addActions(org.netbeans.api.lsp.Diagnostic$LazyCodeActions)
 meth public org.netbeans.api.lsp.Diagnostic$Builder setCode(java.lang.String)
+meth public org.netbeans.api.lsp.Diagnostic$Builder setCodeDescription(java.net.URL)
 meth public org.netbeans.api.lsp.Diagnostic$Builder setSeverity(org.netbeans.api.lsp.Diagnostic$Severity)
 meth public static org.netbeans.api.lsp.Diagnostic$Builder create(org.netbeans.api.lsp.Position,org.netbeans.api.lsp.Position,java.lang.String)
 supr java.lang.Object
-hfds actions,code,description,endPosition,severity,startPosition
+hfds actions,code,codeDescription,description,endPosition,severity,startPosition
 
 CLSS public abstract interface static org.netbeans.api.lsp.Diagnostic$LazyCodeActions
  outer org.netbeans.api.lsp.Diagnostic
diff --git a/ide/api.xml.ui/nbproject/org-netbeans-api-xml-ui.sig b/ide/api.xml.ui/nbproject/org-netbeans-api-xml-ui.sig
index d1523da..3c33ddf 100644
--- a/ide/api.xml.ui/nbproject/org-netbeans-api-xml-ui.sig
+++ b/ide/api.xml.ui/nbproject/org-netbeans-api-xml-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61
+#Version 1.62
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/ide/api.xml/nbproject/org-netbeans-api-xml.sig b/ide/api.xml/nbproject/org-netbeans-api-xml.sig
index bfb13a3..d93dac6 100644
--- a/ide/api.xml/nbproject/org-netbeans-api-xml.sig
+++ b/ide/api.xml/nbproject/org-netbeans-api-xml.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61
+#Version 1.62
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/bugtracking.bridge/nbproject/project.properties b/ide/bugtracking.bridge/nbproject/project.properties
index 84344d8..c016567 100644
--- a/ide/bugtracking.bridge/nbproject/project.properties
+++ b/ide/bugtracking.bridge/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/bugtracking.commons/nbproject/org-netbeans-modules-bugtracking-commons.sig b/ide/bugtracking.commons/nbproject/org-netbeans-modules-bugtracking-commons.sig
index 7b109db..06043ad 100644
--- a/ide/bugtracking.commons/nbproject/org-netbeans-modules-bugtracking-commons.sig
+++ b/ide/bugtracking.commons/nbproject/org-netbeans-modules-bugtracking-commons.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.25
+#Version 1.26
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/bugtracking.commons/src/org/netbeans/modules/bugtracking/issuetable/NodeTableModel.java b/ide/bugtracking.commons/src/org/netbeans/modules/bugtracking/issuetable/NodeTableModel.java
index 48147d7..eaed0b8 100644
--- a/ide/bugtracking.commons/src/org/netbeans/modules/bugtracking/issuetable/NodeTableModel.java
+++ b/ide/bugtracking.commons/src/org/netbeans/modules/bugtracking/issuetable/NodeTableModel.java
@@ -147,7 +147,7 @@
             Object o = props[i].getValue(ATTR_TREE_COLUMN);
             boolean x;
 
-            if ((o != null) && o instanceof Boolean) {
+            if (o instanceof Boolean) {
                 if (((Boolean) o).booleanValue()) {
                     treeColumnProperty = props[i];
                     size--;
@@ -175,7 +175,7 @@
 
                     Object o = props[i].getValue(ATTR_ORDER_NUMBER);
 
-                    if ((o != null) && o instanceof Integer) {
+                    if (o instanceof Integer) {
                         sort.put(new Double(((Integer) o).doubleValue()), Integer.valueOf(ia));
                     } else {
                         sort.put(new Double(ia + 0.1), Integer.valueOf(ia));
@@ -185,7 +185,7 @@
 
                     Object o = props[i].getValue(ATTR_SORTING_COLUMN);
 
-                    if ((o != null) && o instanceof Boolean) {
+                    if (o instanceof Boolean) {
                         props[i].setValue(ATTR_SORTING_COLUMN, Boolean.FALSE);
                     }
                 }
@@ -193,7 +193,7 @@
                 if (!existsComparableColumn) {
                     Object o = props[i].getValue(ATTR_COMPARABLE_COLUMN);
 
-                    if ((o != null) && o instanceof Boolean) {
+                    if (o instanceof Boolean) {
                         existsComparableColumn = ((Boolean) o).booleanValue();
                     }
                 }
@@ -261,7 +261,7 @@
 
                 Object o = p.getValue(ATTR_SORTING_COLUMN);
 
-                if ((o != null) && o instanceof Boolean) {
+                if (o instanceof Boolean) {
                     if (((Boolean) o).booleanValue()) {
                         p.setValue(ATTR_SORTING_COLUMN, Boolean.FALSE);
                         p.setValue(ATTR_DESCENDING_ORDER, Boolean.FALSE);
@@ -343,7 +343,7 @@
         Property p = allPropertyColumns[column].getProperty();
         Object o = p.getValue(ATTR_COMPARABLE_COLUMN);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
@@ -378,7 +378,7 @@
         Property p = allPropertyColumns[column].getProperty();
         Object o = p.getValue(ATTR_SORTING_COLUMN);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
@@ -464,7 +464,7 @@
         Property p = allPropertyColumns[sortColumn].getProperty();
         Object o = p.getValue(ATTR_DESCENDING_ORDER);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
diff --git a/ide/bugtracking/nbproject/org-netbeans-modules-bugtracking.sig b/ide/bugtracking/nbproject/org-netbeans-modules-bugtracking.sig
index b477d64..bf298a0 100644
--- a/ide/bugtracking/nbproject/org-netbeans-modules-bugtracking.sig
+++ b/ide/bugtracking/nbproject/org-netbeans-modules-bugtracking.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.126
+#Version 1.127
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/issue/IssueTopComponent.java b/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/issue/IssueTopComponent.java
index 11dbb8d..9844d3e 100644
--- a/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/issue/IssueTopComponent.java
+++ b/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/issue/IssueTopComponent.java
@@ -472,7 +472,7 @@
 
     private RepositoryImpl getRepository() {
         Object item = repositoryComboBox.getSelectedItem();
-        if (item == null || !(item instanceof Repository)) {
+        if (!(item instanceof Repository)) {
             return null;
         }
         return APIAccessor.IMPL.getImpl((Repository) item);
diff --git a/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java b/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java
index 48c1f40..50db61b 100644
--- a/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java
+++ b/ide/bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java
@@ -423,8 +423,7 @@
         } else if(evt.getPropertyName().equals(RepositoryRegistry.EVENT_REPOSITORIES_CHANGED)) {
             if(query != null) {
                 Object cOld = evt.getOldValue();
-                if(cOld != null &&
-                   cOld instanceof Collection)
+                if(cOld instanceof Collection)
                 {
                     RepositoryImpl thisRepo = query.getRepositoryImpl();
                     if(contains((Collection) cOld, thisRepo)) {
@@ -695,7 +694,7 @@
 
     private RepositoryImpl getRepository() {
         Object item = repositoryComboBox.getSelectedItem();
-        if (item == null || !(item instanceof Repository)) {
+        if (!(item instanceof Repository)) {
             return null;
         }
         return APIAccessor.IMPL.getImpl((Repository)item);
diff --git a/ide/bugzilla/nbproject/org-netbeans-modules-bugzilla.sig b/ide/bugzilla/nbproject/org-netbeans-modules-bugzilla.sig
index 6018290..b4c4398 100644
--- a/ide/bugzilla/nbproject/org-netbeans-modules-bugzilla.sig
+++ b/ide/bugzilla/nbproject/org-netbeans-modules-bugzilla.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.94
+#Version 1.95
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/bugzilla/src/org/netbeans/modules/bugzilla/commands/BugzillaExecutor.java b/ide/bugzilla/src/org/netbeans/modules/bugzilla/commands/BugzillaExecutor.java
index 7f0da48..ad8cc8f 100644
--- a/ide/bugzilla/src/org/netbeans/modules/bugzilla/commands/BugzillaExecutor.java
+++ b/ide/bugzilla/src/org/netbeans/modules/bugzilla/commands/BugzillaExecutor.java
@@ -308,7 +308,7 @@
         html = html.substring(idxS, idxE);
 
         // very nice
-        html = html.replaceAll("Please press \\<b\\>Back\\</b\\> and try again.", ""); // NOI18N
+        html = html.replace("Please press <b>Back</b> and try again.", ""); // NOI18N
 
         return html;
     }
@@ -423,7 +423,7 @@
                 return null;
             }
             Throwable cause = status.getException();
-            if(cause != null && cause instanceof RedirectException) {
+            if(cause instanceof RedirectException) {
                 String msg = cause.getMessage();
                 if(msg.contains(KENAI_LOGIN_REDIRECT)) {
                     Bugzilla.LOG.log(Level.FINER, "returned error message [{0}]", msg);                     // NOI18N
diff --git a/ide/bugzilla/src/org/netbeans/modules/bugzilla/issue/CommentsPanel.java b/ide/bugzilla/src/org/netbeans/modules/bugzilla/issue/CommentsPanel.java
index 59926a1..0ff9d16 100644
--- a/ide/bugzilla/src/org/netbeans/modules/bugzilla/issue/CommentsPanel.java
+++ b/ide/bugzilla/src/org/netbeans/modules/bugzilla/issue/CommentsPanel.java
@@ -435,7 +435,7 @@
                 StyledDocument doc = pane.getStyledDocument();
                 Element elem = doc.getCharacterElement(pane.viewToModel(clickPoint));
                 Object l = elem.getAttributes().getAttribute(HyperlinkSupport.LINK_ATTRIBUTE);
-                if (l != null && l instanceof AttachmentLink) {
+                if (l instanceof AttachmentLink) {
                     BugzillaIssue.Attachment attachment = ((AttachmentLink) l).attachment;
                     if (attachment != null) {
                         add(new JMenuItem(attachment.getOpenAction()));
diff --git a/ide/bugzilla/test/unit/src/org/netbeans/modules/bugzilla/BugzillaTest.java b/ide/bugzilla/test/unit/src/org/netbeans/modules/bugzilla/BugzillaTest.java
index fda57b9..c20a4e0 100644
--- a/ide/bugzilla/test/unit/src/org/netbeans/modules/bugzilla/BugzillaTest.java
+++ b/ide/bugzilla/test/unit/src/org/netbeans/modules/bugzilla/BugzillaTest.java
@@ -296,7 +296,7 @@
         // Hours left
         taRemainingTime = data.getRoot().getMappedAttribute(BugzillaAttribute.REMAINING_TIME.getKey());
         taWorkTime = data.getRoot().createMappedAttribute(BugzillaAttribute.WORK_TIME.getKey());
-        taComment = data.getRoot().createMappedAttribute(TaskAttribute.COMMENT_NEW);;
+        taComment = data.getRoot().createMappedAttribute(TaskAttribute.COMMENT_NEW);
         
         taRemainingTime.setValue("2"); 
         taWorkTime.setValue("2"); 
diff --git a/ide/code.analysis/nbproject/org-netbeans-modules-code-analysis.sig b/ide/code.analysis/nbproject/org-netbeans-modules-code-analysis.sig
index 40f080f..12673a9 100644
--- a/ide/code.analysis/nbproject/org-netbeans-modules-code-analysis.sig
+++ b/ide/code.analysis/nbproject/org-netbeans-modules-code-analysis.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.43
+#Version 1.44
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/core.browser/nbproject/org-netbeans-core-browser.sig b/ide/core.browser/nbproject/org-netbeans-core-browser.sig
index 03d41ce..de7fa7a 100644
--- a/ide/core.browser/nbproject/org-netbeans-core-browser.sig
+++ b/ide/core.browser/nbproject/org-netbeans-core-browser.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.45.0
+#Version 1.46.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/core.browser/nbproject/project.properties b/ide/core.browser/nbproject/project.properties
index 6352344..818260d 100644
--- a/ide/core.browser/nbproject/project.properties
+++ b/ide/core.browser/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 spec.version.base=1.47.0
diff --git a/ide/core.ide/nbproject/org-netbeans-core-ide.sig b/ide/core.ide/nbproject/org-netbeans-core-ide.sig
index 0e5d2b7..5208315 100644
--- a/ide/core.ide/nbproject/org-netbeans-core-ide.sig
+++ b/ide/core.ide/nbproject/org-netbeans-core-ide.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.58
+#Version 1.59
 
 CLSS public abstract interface java.lang.annotation.Annotation
 meth public abstract boolean equals(java.lang.Object)
diff --git a/ide/csl.api/nbproject/org-netbeans-modules-csl-api.sig b/ide/csl.api/nbproject/org-netbeans-modules-csl-api.sig
index 018c7bd..bc8d1a4 100644
--- a/ide/csl.api/nbproject/org-netbeans-modules-csl-api.sig
+++ b/ide/csl.api/nbproject/org-netbeans-modules-csl-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.74.0
+#Version 2.75.0
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/CslActions.java b/ide/csl.api/src/org/netbeans/modules/csl/api/CslActions.java
index be32862..77aa65d 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/CslActions.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/CslActions.java
@@ -100,6 +100,7 @@
      * @deprecated use {@link CamelCaseInterceptor} instead
      * @return the action; never {@code null}.
      */
+    @Deprecated
     public static Action createCamelCasePositionAction(Action originalAction, boolean next) {
         return next
                 ? new NextCamelCasePosition(originalAction)
@@ -114,6 +115,7 @@
      * @deprecated use {@link CamelCaseInterceptor} instead
      * @return the action; never {@code null}.
      */
+    @Deprecated
     public static Action createDeleteToCamelCasePositionAction(Action originalAction, boolean next) {
         return next
                 ? new DeleteToNextCamelCasePosition(originalAction)
@@ -128,6 +130,7 @@
      * @deprecated use {@link CamelCaseInterceptor} instead
      * @return the action; never {@code null}.
      */
+    @Deprecated
     public static Action createSelectCamelCasePositionAction(Action originalAction, boolean next) {
         return next
                 ? new SelectNextCamelCasePosition(originalAction)
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToNextCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToNextCamelCasePosition.java
index f46d70a..f55ec2f 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToNextCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToNextCamelCasePosition.java
@@ -25,6 +25,7 @@
 /** @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createDeleteCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public final class DeleteToNextCamelCasePosition extends SelectNextCamelCasePosition {
     public static final String deleteNextCamelCasePosition = "delete-next-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToPreviousCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToPreviousCamelCasePosition.java
index e88ceec..a1b9b77 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToPreviousCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/DeleteToPreviousCamelCasePosition.java
@@ -25,6 +25,7 @@
 /** @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createDeleteCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public final class DeleteToPreviousCamelCasePosition extends SelectPreviousCamelCasePosition {
     public static final String deletePreviousCamelCasePosition = "delete-previous-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/EditList.java b/ide/csl.api/src/org/netbeans/modules/csl/api/EditList.java
index b0ebec7..084155a 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/EditList.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/EditList.java
@@ -63,7 +63,7 @@
     private Document doc;
     private List<Edit> edits;
     private boolean formatAll;
-    private List<DelegatedPosition> positions = new ArrayList<DelegatedPosition>();;
+    private List<DelegatedPosition> positions = new ArrayList<DelegatedPosition>();
     
     public EditList(BaseDocument doc) {
         this.doc = doc;
@@ -105,6 +105,7 @@
      * @deprecated use {@link #applyTo}.
      * @param otherDoc 
      */
+    @Deprecated
     public void applyToDocument(BaseDocument otherDoc/*, boolean narrow*/) {
         applyTo(otherDoc);
     }
@@ -256,6 +257,7 @@
      * @param doc
      * @return 
      */
+    @Deprecated
     public int firstLine(BaseDocument doc) {
         return firstEditLine(doc);
     }
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/GoToMarkOccurrencesAction.java b/ide/csl.api/src/org/netbeans/modules/csl/api/GoToMarkOccurrencesAction.java
index fb910b0..07364d9 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/GoToMarkOccurrencesAction.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/GoToMarkOccurrencesAction.java
@@ -45,6 +45,7 @@
  * @author Vladimir Voskresensky
  * @deprecated use {@link CslActions#createGoToMarkOccurrencesAction(boolean) } instead.
  */
+@Deprecated
 public final class GoToMarkOccurrencesAction extends BaseAction {
 
     private static final String prevActionName = EditorActionNames.gotoPrevOccurrence;
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/GsfLanguage.java b/ide/csl.api/src/org/netbeans/modules/csl/api/GsfLanguage.java
index ffa4719..6160049 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/GsfLanguage.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/GsfLanguage.java
@@ -102,6 +102,7 @@
      * @return The set of source classpath IDs, can be empty or even <code>null</code>.
      * @deprecated Use {@link PathRecognizerRegistration} instead.
      */
+    @Deprecated
     Set<String> getSourcePathIds();
 
     /**
@@ -113,6 +114,7 @@
      *   Please see {@link #getSourcePathIds()} for the exact meaning of those values.
      * @deprecated Use {@link PathRecognizerRegistration} instead.
      */
+    @Deprecated
     Set<String> getLibraryPathIds();
 
     /**
@@ -128,5 +130,6 @@
      *   Please see {@link #getLibraryPathIds()} for the exact meaning of those values.
      * @deprecated Use {@link PathRecognizerRegistration} instead.
      */
+    @Deprecated
     Set<String> getBinaryLibraryPathIds();
 }
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/InstantRenameAction.java b/ide/csl.api/src/org/netbeans/modules/csl/api/InstantRenameAction.java
index a2b5b06..9c7db2e 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/InstantRenameAction.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/InstantRenameAction.java
@@ -70,6 +70,7 @@
  * @author Tor Norbye
  * @deprecated use {@link CslActions#createInstantRenameAction() } instead.
  */
+@Deprecated
 public class InstantRenameAction extends BaseAction {
     /** Creates a new instance of InstantRenameAction */
     public InstantRenameAction() {
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/KeystrokeHandler.java b/ide/csl.api/src/org/netbeans/modules/csl/api/KeystrokeHandler.java
index 20f68d4..714aa31 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/KeystrokeHandler.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/KeystrokeHandler.java
@@ -53,12 +53,14 @@
      * XXX Fix javadoc.
      * @deprecated  {@link DeletedTextInterceptor} {@link TypedTextInterceptor} {@link TypedBreakInterceptor} instead.
      */
+    @Deprecated
     boolean beforeCharInserted(@NonNull Document doc, int caretOffset, @NonNull JTextComponent target, char ch)
         throws BadLocationException;
 
     /** @todo Rip out the boolean return value? What does it mean? 
      * @deprecated  {@link DeletedTextInterceptor} {@link TypedTextInterceptor} {@link TypedBreakInterceptor} instead.
      */
+    @Deprecated
     boolean afterCharInserted(@NonNull Document doc, int caretOffset, @NonNull JTextComponent target, char ch)
         throws BadLocationException;
 
@@ -87,6 +89,7 @@
      * @todo Document why both caretOffset and caret is passed in!
      * @deprecated  {@link DeletedTextInterceptor} {@link TypedTextInterceptor} {@link TypedBreakInterceptor} instead.
      */
+    @Deprecated
     int beforeBreak(@NonNull Document doc, int caretOffset, @NonNull JTextComponent target)
         throws BadLocationException;
 
@@ -96,6 +99,7 @@
      * @deprecated  {@link DeletedTextInterceptor} {@link TypedTextInterceptor} {@link TypedBreakInterceptor} instead.
      */
     @NonNull
+    @Deprecated
     OffsetRange findMatching(@NonNull Document doc, int caretOffset);
     
     /**
@@ -117,5 +121,6 @@
      * @deprecated use interceptor {@link CamelCaseInterceptor} instead
      */
     @CheckForNull
+    @Deprecated
     int getNextWordOffset(Document doc, int caretOffset, boolean reverse);
 }
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/NextCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/NextCamelCasePosition.java
index 71621d7..fda113e 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/NextCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/NextCamelCasePosition.java
@@ -25,6 +25,7 @@
 /** @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public class NextCamelCasePosition extends AbstractCamelCasePosition {
     public static final String nextCamelCasePosition = "next-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/PreviousCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/PreviousCamelCasePosition.java
index a6fa9d1..5157632 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/PreviousCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/PreviousCamelCasePosition.java
@@ -25,6 +25,7 @@
 /** @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public class PreviousCamelCasePosition extends AbstractCamelCasePosition {
     public static final String previousCamelCasePosition = "previous-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectCodeElementAction.java b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectCodeElementAction.java
index 84e0ffb..75e01da 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectCodeElementAction.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectCodeElementAction.java
@@ -51,6 +51,7 @@
  * @author Miloslav Metelka, Jan Pokorsky
  * @deprecated use {@link CslActions#createSelectCodeElementAction(java.lang.String, boolean)  } instead.
 */
+@Deprecated
 public final class SelectCodeElementAction extends BaseAction {
     public static final String selectNextElementAction = "select-element-next"; //NOI18N
     public static final String selectPreviousElementAction = "select-element-previous"; //NOI18N
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectNextCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectNextCamelCasePosition.java
index a6d11fa..7222527 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectNextCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectNextCamelCasePosition.java
@@ -26,6 +26,7 @@
  * @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createSelectCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public class SelectNextCamelCasePosition extends NextCamelCasePosition {
     public static final String selectNextCamelCasePosition = "select-next-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectPreviousCamelCasePosition.java b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectPreviousCamelCasePosition.java
index c4dc24d..586db83 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/SelectPreviousCamelCasePosition.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/SelectPreviousCamelCasePosition.java
@@ -25,6 +25,7 @@
 /** @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
  * @deprecated use {@link CslActions#createSelectCamelCasePositionAction(javax.swing.Action, boolean) } instead.
  */
+@Deprecated
 public class SelectPreviousCamelCasePosition extends PreviousCamelCasePosition {
     public static final String selectPreviousCamelCasePosition = "select-previous-camel-case-position"; //NOI18N
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/api/ToggleBlockCommentAction.java b/ide/csl.api/src/org/netbeans/modules/csl/api/ToggleBlockCommentAction.java
index df42bc4..e9f854d 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/api/ToggleBlockCommentAction.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/api/ToggleBlockCommentAction.java
@@ -47,6 +47,7 @@
 /**
  * @deprecated use {@link CslActions#createToggleBlockCommentAction() } instead.
  */
+@Deprecated
 public class ToggleBlockCommentAction extends BaseAction {
 
     // -J-Dorg.netbeans.modules.csl.api.ToggleBlockCommentAction.level=FINE
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/core/CslEditorKit.java b/ide/csl.api/src/org/netbeans/modules/csl/core/CslEditorKit.java
index aaeda02..2049e49 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/core/CslEditorKit.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/core/CslEditorKit.java
@@ -221,6 +221,7 @@
     /**
      * @deprecated use {@link TypedTextInterceptor} instead
      */
+    @Deprecated
     private final class GsfDefaultKeyTypedAction extends ExtDefaultKeyTypedAction {
         private JTextComponent currentTarget;
         private String replacedText = null;
@@ -311,6 +312,7 @@
     /**
      * @deprecated use {@link TypedBreakInterceptor} instead
      */
+    @Deprecated
     private final class GsfInsertBreakAction extends InsertBreakAction {
         static final long serialVersionUID = -1506173310438326380L;
 
@@ -359,6 +361,7 @@
     /**
      * @deprecated use {@link DeletedTextInterceptor} instead
      */
+    @Deprecated
     private final class GsfDeleteCharAction extends ExtDeleteCharAction {
         private JTextComponent currentTarget;
 
@@ -438,7 +441,7 @@
 
                         Object helpID = a.getValue("helpID"); // NOI18N
 
-                        if ((helpID != null) && (helpID instanceof String)) {
+                        if (helpID instanceof String) {
                             item.putClientProperty("HelpID", helpID); // NOI18N
                         }
                     } else {
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/editor/semantic/SequenceElement.java b/ide/csl.api/src/org/netbeans/modules/csl/editor/semantic/SequenceElement.java
index 6b6eb22..2420ffe 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/editor/semantic/SequenceElement.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/editor/semantic/SequenceElement.java
@@ -59,7 +59,7 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof SequenceElement)) {
+        if (!(obj instanceof SequenceElement)) {
             return false;
         }
         SequenceElement other = (SequenceElement)obj;
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/GsfHintsManager.java b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/GsfHintsManager.java
index d1dc923..bdedb2b 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/GsfHintsManager.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/GsfHintsManager.java
@@ -381,9 +381,8 @@
                 Object nonGuiObject = fo.getAttribute(NON_GUI);
                 boolean toGui = true;
                 
-                if ( nonGuiObject != null && 
-                     nonGuiObject instanceof Boolean &&
-                     ((Boolean)nonGuiObject).booleanValue() ) {
+                if (nonGuiObject instanceof Boolean &&
+                    ((Boolean) nonGuiObject).booleanValue()) {
                     toGui = false;
                 }
                 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.form b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.form
index 49d8640..fb60a18 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.form
+++ b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.form
@@ -38,17 +38,14 @@
     <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
     <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
     <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,2,24"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,63,0,0,2,48"/>
   </AuxValues>
 
   <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
   <SubComponents>
     <Container class="javax.swing.JSplitPane" name="jSplitPane1">
       <Properties>
-        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-          <Border info="null"/>
-        </Property>
-        <Property name="dividerLocation" type="int" value="320"/>
+        <Property name="dividerLocation" type="int" value="260"/>
       </Properties>
       <Constraints>
         <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
@@ -100,17 +97,29 @@
             </Constraint>
           </Constraints>
 
-          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="optionsPanel" pref="273" max="32767" attributes="0"/>
+                  <Component id="descriptionPanel" pref="0" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="optionsPanel" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
+                      <Component id="descriptionPanel" pref="230" max="32767" attributes="0"/>
+                      <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
           <SubComponents>
             <Container class="javax.swing.JPanel" name="optionsPanel">
               <Properties>
                 <Property name="opaque" type="boolean" value="false"/>
               </Properties>
-              <Constraints>
-                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
-                  <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="12" insetsRight="0" anchor="18" weightX="1.0" weightY="0.7"/>
-                </Constraint>
-              </Constraints>
 
               <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
               <SubComponents>
@@ -176,11 +185,6 @@
               <Properties>
                 <Property name="opaque" type="boolean" value="false"/>
               </Properties>
-              <Constraints>
-                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
-                  <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.3"/>
-                </Constraint>
-              </Constraints>
 
               <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
               <SubComponents>
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.java b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.java
index 919bea7..04bf8af 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/hints/infrastructure/HintsPanel.java
@@ -21,8 +21,6 @@
 
 import java.awt.Component;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
@@ -94,39 +92,36 @@
         // Expand all
         for(int lastRow = errorTree.getRowCount(); lastRow >= 0; --lastRow) {
             errorTree.expandRow(lastRow);
-        }        
+        }
     }
 
     private DefaultMutableTreeNode sort(DefaultMutableTreeNode parent) {
-        List<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>();
+        List<DefaultMutableTreeNode> nodes = new ArrayList<>();
 
         for (int i = 0; i < parent.getChildCount(); i++) {
             DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent.getChildAt(i);
             nodes.add(sort(node));
         }
 
-        Collections.sort(nodes, new Comparator<DefaultMutableTreeNode>() {
-            @Override
-            public int compare(DefaultMutableTreeNode p1, DefaultMutableTreeNode p2) {
-                Object o1 = p1.getUserObject();
-                String s1 = "";
-                if (o1 instanceof Rule) {
-                    s1 = ((Rule) o1).getDisplayName();
-                }
-                if (o1 instanceof FileObject) {
-                    s1 = getFileObjectLocalizedName((FileObject) o1);
-                }
-
-                Object o2 = p2.getUserObject();
-                String s2 = "";
-                if (o2 instanceof Rule) {
-                    s2 = ((Rule) o2).getDisplayName();
-                }
-                if (o2 instanceof FileObject) {
-                    s2 = getFileObjectLocalizedName((FileObject) o2);
-                }
-                return s1.compareTo(s2);
+        nodes.sort((DefaultMutableTreeNode p1, DefaultMutableTreeNode p2) -> {
+            Object o1 = p1.getUserObject();
+            String s1 = "";
+            if (o1 instanceof Rule) {
+                s1 = ((Rule) o1).getDisplayName();
             }
+            if (o1 instanceof FileObject) {
+                s1 = getFileObjectLocalizedName((FileObject) o1);
+            }
+
+            Object o2 = p2.getUserObject();
+            String s2 = "";
+            if (o2 instanceof Rule) {
+                s2 = ((Rule) o2).getDisplayName();
+            }
+            if (o2 instanceof FileObject) {
+                s2 = getFileObjectLocalizedName((FileObject) o2);
+            }
+            return s1.compareTo(s2);
         });
         parent.removeAllChildren();
         for (DefaultMutableTreeNode node : nodes) {
@@ -191,8 +186,7 @@
         setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
         setLayout(new java.awt.GridBagLayout());
 
-        jSplitPane1.setBorder(null);
-        jSplitPane1.setDividerLocation(320);
+        jSplitPane1.setDividerLocation(260);
 
         treePanel.setOpaque(false);
         treePanel.setLayout(new java.awt.BorderLayout());
@@ -205,7 +199,6 @@
 
         detailsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 6, 0, 0));
         detailsPanel.setOpaque(false);
-        detailsPanel.setLayout(new java.awt.GridBagLayout());
 
         optionsPanel.setOpaque(false);
         optionsPanel.setLayout(new java.awt.GridBagLayout());
@@ -249,16 +242,6 @@
         gridBagConstraints.insets = new java.awt.Insets(8, 0, 0, 0);
         optionsPanel.add(customizerPanel, gridBagConstraints);
 
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 0;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
-        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
-        gridBagConstraints.weightx = 1.0;
-        gridBagConstraints.weighty = 0.7;
-        gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 0);
-        detailsPanel.add(optionsPanel, gridBagConstraints);
-
         descriptionPanel.setOpaque(false);
         descriptionPanel.setLayout(new java.awt.GridBagLayout());
 
@@ -284,13 +267,21 @@
         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
         descriptionPanel.add(descriptionLabel, gridBagConstraints);
 
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 1;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
-        gridBagConstraints.weightx = 1.0;
-        gridBagConstraints.weighty = 0.3;
-        detailsPanel.add(descriptionPanel, gridBagConstraints);
+        javax.swing.GroupLayout detailsPanelLayout = new javax.swing.GroupLayout(detailsPanel);
+        detailsPanel.setLayout(detailsPanelLayout);
+        detailsPanelLayout.setHorizontalGroup(
+            detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(optionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE)
+            .addComponent(descriptionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+        );
+        detailsPanelLayout.setVerticalGroup(
+            detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(detailsPanelLayout.createSequentialGroup()
+                .addComponent(optionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(descriptionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
+                .addGap(1, 1, 1))
+        );
 
         jSplitPane1.setRightComponent(detailsPanel);
 
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/spi/GsfUtilities.java b/ide/csl.api/src/org/netbeans/modules/csl/spi/GsfUtilities.java
index 35d7cda..c34ff30 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/spi/GsfUtilities.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/spi/GsfUtilities.java
@@ -110,6 +110,7 @@
      * @return indentation level, in characters.
      * @deprecated Use {@link #getLineIndent(javax.swing.text.Document, int) } instead.
      */
+    @Deprecated
     public static int getLineIndent(BaseDocument doc, int offset) {
         return getLineIndent((Document)doc, offset);
     }
@@ -121,6 +122,7 @@
      * Copied from Indent module's "modifyIndent"
      * @deprecated Use {@link #setLineIndentation(javax.swing.text.Document, int, int).
      */
+    @Deprecated
     public static int setLineIndentation(BaseDocument doc, int lineOffset, int newIndent) throws BadLocationException {
         return setLineIndentation((Document)doc, lineOffset, newIndent);
     }
@@ -234,6 +236,7 @@
      * @return document instance or {@code null} if not opened and {@code openIfNecessary} was false.
      * @deprecated Use {@link #getADocument(org.openide.filesystems.FileObject, boolean)}.
      */
+    @Deprecated
     public static BaseDocument getDocument(FileObject fileObject, boolean openIfNecessary) {
         return getDocument(fileObject, openIfNecessary, false);
     }
@@ -252,6 +255,11 @@
     }
 
     /**
+     * see org.openide.text.DataEditorSupport#BIG_FILE_THRESHOLD_MB
+     */
+    private static final long BIG_FILE_THRESHOLD_MB = Integer.getInteger("org.openide.text.big.file.size", 5) * 1024 * 1024;
+
+    /**
      * Load the document for the given fileObject.
      * @param fileObject the file whose document we want to obtain
      * @param openIfNecessary If true, block if necessary to open the document. If false, will only return the
@@ -261,6 +269,7 @@
      * @return
      * @deprecated Use {@link #getADocument(org.openide.filesystems.FileObject, boolean, boolean)}.
      */
+    @Deprecated
     public static BaseDocument getDocument(FileObject fileObject, boolean openIfNecessary, boolean skipLarge) {
         if (skipLarge) {
             // Make sure we're not dealing with a huge file!
@@ -275,7 +284,7 @@
             // (see issue http://www.netbeans.org/issues/show_bug.cgi?id=148702 )
             // but for many cases, the user probably doesn't want really large files as indicated
             // by the skipLarge parameter).
-            if (fileObject.getSize () > 1024 * 1024) {
+            if (fileObject.getSize () > BIG_FILE_THRESHOLD_MB) {
                 return null;
             }
         }
diff --git a/ide/csl.api/test/unit/src/org/netbeans/modules/csl/api/test/CslTestBase.java b/ide/csl.api/test/unit/src/org/netbeans/modules/csl/api/test/CslTestBase.java
index c478f9f..24a9c38 100644
--- a/ide/csl.api/test/unit/src/org/netbeans/modules/csl/api/test/CslTestBase.java
+++ b/ide/csl.api/test/unit/src/org/netbeans/modules/csl/api/test/CslTestBase.java
@@ -1647,16 +1647,18 @@
 
     protected void checkNoOverlaps(Set<OffsetRange> ranges, Document doc) throws BadLocationException {
         // Make sure there are no overlapping ranges
-        List<OffsetRange> sortedRanges = new ArrayList<OffsetRange>(ranges);
+        List<OffsetRange> sortedRanges = new ArrayList<>(ranges);
         Collections.sort(sortedRanges);
-        OffsetRange prevRange = OffsetRange.NONE;
-        for (OffsetRange range : sortedRanges) {
-            if (range.getStart() < prevRange.getEnd() && range.getEnd() > prevRange.getEnd()) {
-                fail("OffsetRanges should be non-overlapping! " + prevRange +
-                        "(" + doc.getText(prevRange.getStart(), prevRange.getLength()) + ") and " + range +
-                        "(" + doc.getText(range.getStart(), range.getLength()) + ")");
+        for (int i = 0; i < sortedRanges.size(); i++) {
+            OffsetRange prevRange = sortedRanges.get(i);
+            for (int j = i + 1; j < sortedRanges.size(); j++) {
+                OffsetRange targetRange = sortedRanges.get(j);
+                if (prevRange.overlaps(targetRange)) {
+                    fail("OffsetRanges should be non-overlapping! " + prevRange
+                            + "(" + doc.getText(prevRange.getStart(), prevRange.getLength()) + ") and " + targetRange
+                            + "(" + doc.getText(targetRange.getStart(), targetRange.getLength()) + ")");
+                }
             }
-            prevRange = range;
         }
     }
 
@@ -3045,7 +3047,7 @@
                 completionResult.insert(proposal);
                 completionResult.afterInsert(proposal);
 
-                String fileContent = doc.getText(0, doc.getLength());;
+                String fileContent = doc.getText(0, doc.getLength());
                 assertFileContentsMatches(file, fileContent, false, ".ccresult");
             }
         });
diff --git a/ide/csl.types/nbproject/org-netbeans-modules-csl-types.sig b/ide/csl.types/nbproject/org-netbeans-modules-csl-types.sig
index 538af67..8b3cfb2 100644
--- a/ide/csl.types/nbproject/org-netbeans-modules-csl-types.sig
+++ b/ide/csl.types/nbproject/org-netbeans-modules-csl-types.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/css.editor/external/binaries-list b/ide/css.editor/external/binaries-list
index b5f382f..0034d68 100644
--- a/ide/css.editor/external/binaries-list
+++ b/ide/css.editor/external/binaries-list
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 901D8F815922C435D985DA3814D20E34CC7622CB css21-spec.zip
-25FEEFC8F0192368A5E0A35F4A6013A71865AECC css3-spec.zip
+B9A045802E3214909501B822177EE3AA2F4A469F css3-spec.zip
diff --git a/ide/css.editor/external/css3-spec-howtocreate.txt b/ide/css.editor/external/css3-spec-howtocreate.txt
index 0642897..f549278 100644
--- a/ide/css.editor/external/css3-spec-howtocreate.txt
+++ b/ide/css.editor/external/css3-spec-howtocreate.txt
@@ -51,7 +51,9 @@
 http://www.w3.org/TR/css3-values/ \
 http://www.w3.org/TR/css3-writing-modes/ \
 http://www.w3.org/TR/css-align-3/ \
-http://www.w3.org/TR/css-break-3/
+http://www.w3.org/TR/css-break-3/ \
+http://www.w3.org/TR/css-position-3/ \
+http://www.w3.org/TR/css-sizing-3/
 
 3. Check that the contents still looks sane and mirroring worked
 
diff --git a/ide/css.editor/nbproject/org-netbeans-modules-css-editor.sig b/ide/css.editor/nbproject/org-netbeans-modules-css-editor.sig
index 639fda8..bea74e8 100644
--- a/ide/css.editor/nbproject/org-netbeans-modules-css-editor.sig
+++ b/ide/css.editor/nbproject/org-netbeans-modules-css-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.85
+#Version 1.86
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/csl/CssCompletion.java b/ide/css.editor/src/org/netbeans/modules/css/editor/csl/CssCompletion.java
index 4fc4d40..9f87b66 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/csl/CssCompletion.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/csl/CssCompletion.java
@@ -38,6 +38,7 @@
 import javax.swing.text.Caret;
 import javax.swing.text.Document;
 import javax.swing.text.JTextComponent;
+import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.editor.EditorRegistry;
 import org.netbeans.api.lexer.Token;
 import org.netbeans.api.lexer.TokenHierarchy;
@@ -50,7 +51,6 @@
 import org.netbeans.modules.csl.api.ElementHandle;
 import org.netbeans.modules.csl.api.ElementHandle.UrlHandle;
 import org.netbeans.modules.csl.api.ElementKind;
-import org.netbeans.modules.csl.api.OffsetRange;
 import org.netbeans.modules.csl.api.ParameterInfo;
 import org.netbeans.modules.csl.spi.DefaultCompletionResult;
 import org.netbeans.modules.csl.spi.ParserResult;
@@ -109,7 +109,7 @@
     @Override
     public CodeCompletionResult complete(CodeCompletionContext context) {
 
-        final List<CompletionProposal> completionProposals = new ArrayList<>();
+        List<CompletionProposal> completionProposals = new ArrayList<>();
 
         CssParserResult info = (CssParserResult) context.getParserResult();
         Snapshot snapshot = info.getSnapshot();
@@ -235,6 +235,13 @@
         completePropertyName(completionContext, completionProposals);
         completePropertyValue(completionContext, completionProposals, charAfterCaret);
 
+        String nodeImage = node.image().toString();
+        completionProposals.sort((a, b) -> {
+            int distA = levenshteinDistance(nodeImage, a.getName(), false);
+            int distB = levenshteinDistance(nodeImage, b.getName(), false);
+            return distA - distB;
+        });
+
         return new DefaultCompletionResult(completionProposals, false);
     }
 
@@ -1682,6 +1689,40 @@
         } //switch
     }
 
+    @SuppressWarnings("AssignmentToMethodParameter")
+    public final int levenshteinDistance(
+            @NonNull String str1,
+            @NonNull String str2,
+            final boolean caseSensitive) {
+        if (!caseSensitive) {
+            str1 = str1.toLowerCase();
+            str2 = str2.toLowerCase();
+        }
+        int[][] distance = new int[str1.length() + 1][str2.length() + 1];
+
+        for (int i = 0; i <= str1.length(); i++) {
+            distance[i][0] = i;
+        }
+        for (int j = 1; j <= str2.length(); j++) {
+            distance[0][j] = j;
+        }
+
+        for (int i = 1; i <= str1.length(); i++) {
+            for (int j = 1; j <= str2.length(); j++) {
+                distance[i][j] = minimum(
+                        distance[i - 1][j] + 1,
+                        distance[i][j - 1] + 1,
+                        distance[i - 1][j - 1] + ((str1.charAt(i - 1) == str2.charAt(j - 1)) ? 0 : 1));
+            }
+        }
+
+        return distance[str1.length()][str2.length()];
+    }
+
+    private static int minimum(int a, int b, int c) {
+        return Math.min(Math.min(a, b), c);
+    }
+
     private static class CssFileCompletionResult extends DefaultCompletionResult {
 
         private int moveCaretBack;
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/CssModuleSupport.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/CssModuleSupport.java
index f4b4ee5..274db60 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/CssModuleSupport.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/CssModuleSupport.java
@@ -31,6 +31,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.text.Document;
 import org.netbeans.modules.csl.api.ColoringAttributes;
@@ -94,11 +95,13 @@
     }
 
     public static Map<OffsetRange, Set<ColoringAttributes>> getSemanticHighlights(FeatureContext context, FeatureCancel cancel) {
-        Map<OffsetRange, Set<ColoringAttributes>> all = new HashMap<>();
+        long start = System.nanoTime();
+
+        Map<OffsetRange, Set<ColoringAttributes>> allPrecursor = new HashMap<>();
         final Collection<NodeVisitor<Map<OffsetRange, Set<ColoringAttributes>>>> visitors = new ArrayList<>();
 
         for (CssEditorModule module : getModules()) {
-            NodeVisitor<Map<OffsetRange, Set<ColoringAttributes>>> visitor = module.getSemanticHighlightingNodeVisitor(context, all);
+            NodeVisitor<Map<OffsetRange, Set<ColoringAttributes>>> visitor = module.getSemanticHighlightingNodeVisitor(context, allPrecursor);
             //modules may return null visitor instead of a dummy empty visitor 
             //to speed up the parse tree visiting when there're no result
             if (visitor != null) {
@@ -122,6 +125,59 @@
 
         NodeVisitor.visitChildren(context.getParseTreeRoot(), visitors);
 
+        long preparation = System.nanoTime();
+
+        Map<OffsetRange, Set<ColoringAttributes>> all = new HashMap<>();
+
+        List<OffsetRange> sortedRanges = new ArrayList<>(allPrecursor.keySet());
+        sortedRanges.sort(null);
+
+
+        List<OffsetRange> stack = new ArrayList<>();
+        OffsetRange lastAdded;
+
+        for(int i = 0; i < sortedRanges.size(); i++) {
+            OffsetRange currentItem = sortedRanges.get(i);
+            Set<ColoringAttributes> attributes = allPrecursor.get(currentItem);
+            OffsetRange nextItem = (i < (sortedRanges.size() - 1)) ? sortedRanges.get(i + 1) : null;
+            if(nextItem != null && currentItem.getEnd() > nextItem.getStart()) {
+                stack.add(currentItem);
+                currentItem = currentItem.boundTo(0, nextItem.getStart());
+            }
+            if(! currentItem.isEmpty()) {
+                all.put(currentItem, attributes);
+            }
+            lastAdded = currentItem;
+            while(true) {
+                if(stack.isEmpty()) {
+                    break;
+                }
+                OffsetRange stackElement = stack.remove(stack.size() - 1);
+                boolean endStackProcessing = false;
+                if(nextItem != null && stackElement.getEnd() > nextItem.getStart()) {
+                    stack.add(stackElement);
+                    endStackProcessing = true;
+                }
+                Set<ColoringAttributes> stackAttributes = allPrecursor.get(stackElement);
+                stackElement = stackElement.boundTo(lastAdded.getEnd(), nextItem != null ? nextItem.getStart() : Integer.MAX_VALUE);
+                if(! stackElement.isEmpty()) {
+                    all.put(stackElement, stackAttributes);
+                    lastAdded = stackElement;
+                }
+                if(endStackProcessing) {
+                    break;
+                }
+            }
+        }
+
+        long consolidation = System.nanoTime();
+
+        if(LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "Preparation: {0} ms, Consolidation: {1} ms", new Object[]{preparation - start, consolidation - preparation});
+            LOGGER.log(Level.FINER, "Precursor: {0}", allPrecursor);
+            LOGGER.log(Level.FINER, "Final: {0}", all);
+        }
+
         return all;
     }
 
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/BrowserSupportModule.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/BrowserSupportModule.java
index 4757fe5..57eecc2 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/BrowserSupportModule.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/BrowserSupportModule.java
@@ -66,7 +66,12 @@
 
     @Override
     public PropertyDefinition getPropertyDefinition(String propertyName) {
-        return parser.getVendorSpecificProperties().get(propertyName);
+        PropertyDefinition pd = parser.getVendorSpecificProperties().get(propertyName);
+        if (pd != null || propertyName == null) {
+            return pd;
+        } else {
+            return parser.getVendorSpecificProperties().get(propertyName.toLowerCase());
+        }
     }
 
     @Override
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/Bundle.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/Bundle.properties
index acef45a..9eb4e37 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/Bundle.properties
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/Bundle.properties
@@ -54,6 +54,7 @@
 css-module-displayname-alignment=Box Alignment
 css-module-displayname-fragmentation=Fragmentation
 css-module-displayname-positioning=Positioning
+css-module-displayname-sizing=Sizing
 
 completion-help-no-documentation-found=No documentation found
 
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/DefaultCssEditorModule.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/DefaultCssEditorModule.java
index 8b63bd8..f762393 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/DefaultCssEditorModule.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/DefaultCssEditorModule.java
@@ -36,7 +36,6 @@
 import javax.swing.text.Document;
 import org.netbeans.api.lexer.Token;
 import org.netbeans.api.lexer.TokenSequence;
-import org.netbeans.api.lexer.TokenUtilities;
 import org.netbeans.lib.editor.util.CharSequenceUtilities;
 import org.netbeans.modules.csl.api.ColoringAttributes;
 import org.netbeans.modules.csl.api.CompletionProposal;
@@ -105,7 +104,8 @@
         module("generated_and_replaced_content", "http://www.w3.org/TR/css3-content"), //NOI18N
         module("alignment", "http://www.w3.org/TR/css-align-3"), //NOI18N
         module("fragmentation", "http://www.w3.org/TR/css-break-3"), //NOI18N
-        module("positioning", "http://www.w3.org/TR/css3-positioning") //NOI18N
+        module("positioning", "http://www.w3.org/TR/css-position-3"), //NOI18N
+        module("sizing", "http://www.w3.org/TR/css-sizing-3") //NOI18N
     };
     private static Map<String, PropertyDefinition> propertyDescriptors;
 
@@ -189,7 +189,12 @@
 
     @Override
     public PropertyDefinition getPropertyDefinition(String propertyName) {
-        return getProperties().get(propertyName);
+        PropertyDefinition pd = getProperties().get(propertyName);
+        if (pd != null || propertyName == null) {
+            return pd;
+        } else {
+            return getProperties().get(propertyName.toLowerCase());
+        }
     }
 
     @Override
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/ExtCssEditorModule.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/ExtCssEditorModule.java
index e451ce6..07866ca 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/ExtCssEditorModule.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/ExtCssEditorModule.java
@@ -53,6 +53,11 @@
     @Override
     public PropertyDefinition getPropertyDefinition(String propertyName) {
         //Note: the context param is ignored by the "standard" css editor modules.
-        return getProperties().get(propertyName);
+        PropertyDefinition pd = getProperties().get(propertyName);
+        if (pd != null || propertyName == null) {
+            return pd;
+        } else {
+            return getProperties().get(propertyName.toLowerCase());
+        }
     }
 }
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/StandardPropertiesHelpResolver.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/StandardPropertiesHelpResolver.java
index e29308f..b2cd286 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/StandardPropertiesHelpResolver.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/StandardPropertiesHelpResolver.java
@@ -105,11 +105,16 @@
                 
                 String elementName = "dfn";
                 
-                String patternImg = String.format("(?s)<%s[^>]*id=['\"]?\\w*-??propdef-%s\\d?['\"]?[^>]*>", elementName, propertyName);
+                String patternImg = String.format("(?s)<%s[^>]*id=(['\"])propdef-%s\\d?\\1[^>]*>", elementName, propertyName);
                 
                 Pattern pattern = Pattern.compile(patternImg); //DOTALL mode
                 Matcher matcher = pattern.matcher(urlContent);
                 if (!matcher.find(0)){
+                    patternImg = String.format("(?s)<%s[^>]*id=['\"]?\\w*-??propdef-%s\\d?['\"]?[^>]*>", elementName, propertyName);
+                    pattern = Pattern.compile(patternImg); //DOTALL mode
+                    matcher = pattern.matcher(urlContent);
+                }
+                if (!matcher.find(0)){
                     patternImg = String.format("(?s)<%s[^>]*id=['\"]?\\w*-??%s\\d?['\"]?>", elementName, propertyName);
                     pattern = Pattern.compile(patternImg); //DOTALL mode
                     matcher = pattern.matcher(urlContent);
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_box_model.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_box_model.properties
index 8a667dc..efc4d6c 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_box_model.properties
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_box_model.properties
@@ -68,10 +68,6 @@
 
 #marquee-style=scroll | slide | alternate
 
-max-width;max-height= <length> | <percentage> | available | min-content | max-content | fit-content | none | inherit
-
-min-width;min-height= <length> | <percentage> | available | min-content | max-content | fit-content | inherit
-
 overflow=[ visible | hidden | scroll | auto | no-display | no-content | <var-fn> ]{1,2}
 
 overflow-style=<basic_box_model-overflow-style> || <marquee_model-overflow-style>
@@ -86,7 +82,3 @@
 rotation-point=<bg-pos>
 
 visibility=visible | hidden | collapse | <var-fn>
-
-width=[ <length> | <percentage> ] && [border-box | content-box]? | available | min-content | max-content | fit-content | auto | inherit | <var-fn>
-
-height=[ <length> | <percentage> ] && [border-box | content-box]? | available | min-content | max-content | fit-content | complex | auto | inherit | <var-fn>
\ No newline at end of file
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_user_interface.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_user_interface.properties
index b6e17fa..e6291fc 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_user_interface.properties
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/basic_user_interface.properties
@@ -27,9 +27,6 @@
             | list-menu | radio-group | checkbox-group | outline-tree | range \
             | field | combo-box | signature | password | <var-fn>
 
-box-sizing=content-box | border-box | <var-fn>
-
-
 #content=<basic_user_interface-content>
 #
 #@basic_user_interface-content=<icon>
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/default_module.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/default_module.properties
index 3da6a2f..3415043 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/default_module.properties
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/default_module.properties
@@ -48,8 +48,6 @@
 
 azimuth=<angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards
 
-bottom=<length> | <percentage> | auto
-
 border-collapse=collapse | separate | <var-fn>
 
 border-spacing=[<length> [<length>]?] | <var-fn>
@@ -64,8 +62,6 @@
 
 empty-cells=show | hide | <var-fn>
 
-left=<length> | <percentage> | auto
-
 pitch-range=<number>
 
 pitch=!frequency | x-low | low | medium | high | x-high
@@ -76,8 +72,6 @@
 
 richness=<number>
 
-right=<length> | <percentage> | auto
-
 speak-header=once | always | <var-fn>
 
 speak-numeral=digits | continuous | <var-fn>
@@ -90,8 +84,6 @@
 
 table-layout=auto | fixed | <var-fn>
 
-top=<length> | <percentage> | auto
-
 volume=<number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud 
 
 z-index=auto | <integer>
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/positioning.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/positioning.properties
index 9867713..7295dc6 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/positioning.properties
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/positioning.properties
@@ -19,4 +19,10 @@
 
 $category=positioning
 
+top;right;bottom;left;inset-block-start;inset-inline-start;inset-block-end;inset-inline-end = <length> | <percentage> | auto
+
+inset = [ <length> | <percentage> | auto ]{1,4}
+
+inset-block;inset-inline = [ <length> | <percentage> | auto ]{1,2}
+
 position=static | relative | absolute | fixed | sticky | <var-fn>
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/sizing.properties b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/sizing.properties
new file mode 100644
index 0000000..3736d9c
--- /dev/null
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/properties/sizing.properties
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+#Basic User Interface Module
+
+$category=sizing
+
+box-sizing=content-box | border-box | <var-fn>
+
+width;height= auto | <length> | <percentage> | min-content | max-content | [ fit-content [ ( [ <length> | <percentage> ] ) ]? ] | inherit | <var-fn>
+
+max-width;max-height= none | <length> | <percentage> | min-content | max-content | [ fit-content [ ( [ <length> | <percentage> ] ) ]? ] | inherit | <var-fn>
+
+min-width;min-height= auto | <length> | <percentage> | min-content | max-content | [ fit-content [ ( [ <length> | <percentage> ] ) ]? ] | inherit | <var-fn>
\ No newline at end of file
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/ui/CssRuleCreateActionDialog.java b/ide/css.editor/src/org/netbeans/modules/css/editor/ui/CssRuleCreateActionDialog.java
index a83265d..8a058b8 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/ui/CssRuleCreateActionDialog.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/ui/CssRuleCreateActionDialog.java
@@ -467,7 +467,7 @@
                 }   break;
             case ELEMENT_ID_TYPE:
                 if(!selectElementIdTextField.getText().trim().equals("")){
-                    rule = "#" + selectElementIdTextField.getText().trim();;
+                    rule = "#" + selectElementIdTextField.getText().trim();
                 }   break;
         }
         if((rule != null) && (!selectedRules.contains(rule))){
@@ -495,7 +495,7 @@
                 }   break;
             case ELEMENT_ID_TYPE:
                 if(!selectElementIdTextField.getText().trim().equals("")){
-                    rule = "#" + selectElementIdTextField.getText().trim();;
+                    rule = "#" + selectElementIdTextField.getText().trim();
                 }   break;
         }
         return rule;
diff --git a/ide/css.editor/test/unit/data/testfiles/coloring1.css b/ide/css.editor/test/unit/data/testfiles/coloring1.css
new file mode 100644
index 0000000..b78b696
--- /dev/null
+++ b/ide/css.editor/test/unit/data/testfiles/coloring1.css
@@ -0,0 +1,6 @@
+[type="checkbox"]:nth-child(2n),
+[type="checkbox"]:not([hidden]),
+[type="checkbox"]:not(.active),
+[type="checkbox"]:not(:checked),
+[type="checkbox"]:checked {
+}
\ No newline at end of file
diff --git a/ide/css.editor/test/unit/data/testfiles/coloring1.css.semantic b/ide/css.editor/test/unit/data/testfiles/coloring1.css.semantic
new file mode 100644
index 0000000..27d0398
--- /dev/null
+++ b/ide/css.editor/test/unit/data/testfiles/coloring1.css.semantic
@@ -0,0 +1,6 @@
+[|>CUSTOM1:type<|="checkbox"]|>CLASS::nth-child(2n)<|,
+[|>CUSTOM1:type<|="checkbox"]|>CLASS::not([|>CUSTOM1:<|hidden|>CLASS:<|])<|,
+[|>CUSTOM1:type<|="checkbox"]|>CLASS::not(|>METHOD:<|.active|>CLASS:<|)<|,
+[|>CUSTOM1:type<|="checkbox"]|>CLASS::not(|>CLASS:<|:checked|>CLASS:<|)<|,
+[|>CUSTOM1:type<|="checkbox"]|>CLASS::checked<| {
+}
\ No newline at end of file
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/csl/CssSemanticAnalyzerTest.java
similarity index 60%
copy from java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
copy to ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/csl/CssSemanticAnalyzerTest.java
index 1416c3a..045b0a6 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/csl/CssSemanticAnalyzerTest.java
@@ -16,29 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.classfile;
+package org.netbeans.modules.css.editor.csl;
 
-import junit.framework.*;
+import org.netbeans.modules.css.editor.module.main.CssModuleTestBase;
+import org.netbeans.modules.css.lib.api.CssParserResult;
 
-/**
- *
- * @author tball
- */
-public class ConstantPoolTest extends TestCase {
-    
-    public ConstantPoolTest(String testName) {
-        super(testName);
-    }
-    
-    public void testGet() {
+public class CssSemanticAnalyzerTest extends CssModuleTestBase {
+
+    public CssSemanticAnalyzerTest(String name) {
+        super(name);
     }
 
-    public void testGetClass() {
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        CssParserResult.IN_UNIT_TESTS = true;
     }
 
-    public void testGetAllConstants() {
-    }
-
-    public void testGetAllClassNames() {
+    public void testColoring1() throws Exception {
+        checkSemantic("testfiles/coloring1.css");
     }
 }
diff --git a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/BasicBoxModelModuleTest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/BasicBoxModelModuleTest.java
index f90fe4a..073aa88 100644
--- a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/BasicBoxModelModuleTest.java
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/BasicBoxModelModuleTest.java
@@ -40,10 +40,6 @@
         assertPropertyValues("padding", "1px");
     }
     
-    public void testHeight() {
-        assertPropertyDeclaration("height: 20px");
-    }
-    
     public void testMargin() {
         assertPropertyDeclaration("margin: 1px"); //tblr == 1
         assertPropertyDeclaration("margin: 1px 2px"); //tb=1, lr=2
diff --git a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/ColorsModuleTest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/ColorsModuleTest.java
index 2d611e9..387d042 100644
--- a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/ColorsModuleTest.java
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/ColorsModuleTest.java
@@ -63,7 +63,13 @@
         PropertyDefinition p = Properties.getPropertyDefinition( "color");
         assertTrue(new ResolvedProperty(p, "#ffaa00").isResolved());
         assertTrue(new ResolvedProperty(p, "#fb0").isResolved());
+        assertTrue(new ResolvedProperty(p, "#ffaa0077").isResolved());
+        assertTrue(new ResolvedProperty(p, "#fa07").isResolved());
+        assertFalse(new ResolvedProperty(p, "#fx0").isResolved());
         assertFalse(new ResolvedProperty(p, "#fa001").isResolved());
+        assertFalse(new ResolvedProperty(p, "#dummy1").isResolved());
+        assertFalse(new ResolvedProperty(p, "#dummy123").isResolved());
+        assertFalse(new ResolvedProperty(p, "#dffaa007712").isResolved());
     }
 
     public void testRGBaValues() {
diff --git a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/PositioningModuleTest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/PositioningModuleTest.java
new file mode 100644
index 0000000..6714df1
--- /dev/null
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/PositioningModuleTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.css.editor.module.main;
+
+public class PositioningModuleTest extends CssModuleTestBase {
+
+    public PositioningModuleTest(String testName) {
+        super(testName);
+    }
+
+    public void testBaseDefinitions() {
+        for (String propertyName : new String[]{"top", "right", "left", "bottom", "inset-block-start", "inset-inline-start", "inset-block-end", "inset-inline-end"}) {
+            for (String value : new String[]{"auto", "15.2px", "10%", "inherit", "initial", "unset"}) {
+                assertPropertyDeclaration(propertyName + ": " + value);
+            }
+        }
+    }
+
+    public void testInset() {
+        assertPropertyDeclaration("inset: auto");
+        assertPropertyDeclaration("inset: initial");
+        assertPropertyDeclaration("inset: inherit");
+        assertPropertyDeclaration("inset: 12px");
+        assertPropertyDeclaration("inset: 12px auto");
+        assertPropertyDeclaration("inset: 12px auto 42em");
+        assertPropertyDeclaration("inset: 12px auto 42em 10%");
+    }
+
+    public void testInsetBlockInline() {
+        assertPropertyDeclaration("inset-block: auto");
+        assertPropertyDeclaration("inset-inline: initial");
+        assertPropertyDeclaration("inset-block: inherit");
+        assertPropertyDeclaration("inset-inline: 12px");
+        assertPropertyDeclaration("inset-block: 12px auto");
+    }
+
+}
diff --git a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/SizingModuleTest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/SizingModuleTest.java
new file mode 100644
index 0000000..7a02428
--- /dev/null
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/SizingModuleTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.css.editor.module.main;
+
+public class SizingModuleTest extends CssModuleTestBase {
+
+    public SizingModuleTest(String testName) {
+        super(testName);
+    }
+
+    public void testHeightWidth() {
+        assertPropertyDeclaration("width: auto");
+        assertPropertyDeclaration("height: 20px");
+        assertPropertyDeclaration("width: 20%");
+        assertPropertyDeclaration("height: min-content");
+        assertPropertyDeclaration("width: max-content");
+        assertPropertyDeclaration("height: fit-content");
+        assertPropertyDeclaration("width: fit-content(30%)");
+        assertPropertyDeclaration("height: inherit");
+        assertPropertyDeclaration("width: initial");
+        assertPropertyDeclaration("height: var(--test)");
+    }
+
+    public void testMaxHeightWidth() {
+        assertPropertyDeclaration("max-width: none");
+        assertPropertyDeclaration("max-height: 20px");
+        assertPropertyDeclaration("max-width: 20%");
+        assertPropertyDeclaration("max-height: min-content");
+        assertPropertyDeclaration("max-width: max-content");
+        assertPropertyDeclaration("max-height: fit-content");
+        assertPropertyDeclaration("max-width: fit-content(30%)");
+        assertPropertyDeclaration("max-height: inherit");
+        assertPropertyDeclaration("max-width: initial");
+        assertPropertyDeclaration("max-height: var(--test)");
+    }
+
+    public void testMinHeightWidth() {
+        assertPropertyDeclaration("min-width: auto");
+        assertPropertyDeclaration("min-height: 20px");
+        assertPropertyDeclaration("min-width: 20%");
+        assertPropertyDeclaration("min-height: min-content");
+        assertPropertyDeclaration("min-width: max-content");
+        assertPropertyDeclaration("min-height: fit-content");
+        assertPropertyDeclaration("min-width: fit-content(30%)");
+        assertPropertyDeclaration("min-height: inherit");
+        assertPropertyDeclaration("min-width: initial");
+        assertPropertyDeclaration("min-height: var(--test)");
+    }
+}
diff --git a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/properties/PropertiesATest.java b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/properties/PropertiesATest.java
index f2a92ba..f384cb2 100644
--- a/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/properties/PropertiesATest.java
+++ b/ide/css.editor/test/unit/src/org/netbeans/modules/css/editor/module/main/properties/PropertiesATest.java
@@ -2769,4 +2769,11 @@
         assertCssCode(".demo {grid: auto-flow 1fr / repeat(auto-fill, 5em);}");
         assertCssCode(".demo {grid: auto 1fr auto / repeat(5, 1fr);}");
     }
+
+    public void testCaseSensitivity() throws Exception {
+        assertCssCode("h1 { border-style: dashed; border-width: 1rem; }");
+        assertCssCode("h1 { border-style: dAsHeD; border-width: 1ReM; }");
+        assertCssCode("h1 { BORDER-STYLE: dashed }");
+        assertCssCode("h1 { bOrDeR-sTyLe: dashed }");
+    }
 }
\ No newline at end of file
diff --git a/ide/css.lib/nbproject/org-netbeans-modules-css-lib.sig b/ide/css.lib/nbproject/org-netbeans-modules-css-lib.sig
index ea9d83e..90e5dca 100644
--- a/ide/css.lib/nbproject/org-netbeans-modules-css-lib.sig
+++ b/ide/css.lib/nbproject/org-netbeans-modules-css-lib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.100
+#Version 1.101
 
 CLSS public abstract interface java.io.Serializable
 
@@ -970,6 +970,7 @@
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory MULTI_COLUMN_LAYOUT
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory OPERA
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory PAGED_MEDIA
+fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory POSITIONING
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory RUBY
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory SAFARI
 fld public final static org.netbeans.modules.css.lib.api.properties.PropertyCategory SPEECH
diff --git a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g
index a7db101..797994c 100644
--- a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g
+++ b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g
@@ -318,9 +318,9 @@
 	(
             ( importItem ws? SEMI ws? )
             |
-            ( sass_use ws? SEMI ws? )
+            {isScssSource()}? ( sass_use ws? SEMI ws? )
             |
-            ( sass_forward ws? SEMI ws? )
+            {isScssSource()}? ( sass_forward ws? SEMI ws? )
         )+
 	;
 
@@ -336,7 +336,7 @@
 
 sass_use
     :
-        {isScssSource()}? SASS_USE ws resourceIdentifier (ws sass_use_as)? (ws sass_use_with)?
+        SASS_USE ws resourceIdentifier (ws sass_use_as)? (ws sass_use_with)?
     ;
 
 sass_use_as
@@ -357,7 +357,7 @@
 
 sass_forward
     :
-        {isScssSource()}? SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide |  sass_forward_show))? ({tokenNameEquals2("as")}? ws sass_forward_as)? ({tokenNameEquals2("with")}? ws sass_forward_with)?
+        SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide |  sass_forward_show))? ({tokenNameEquals2("as")}? ws sass_forward_as)? ({tokenNameEquals2("with")}? ws sass_forward_with)?
     ;
 
 sass_forward_as
@@ -1082,7 +1082,7 @@
 cp_variable
     :
         //every token which might possibly begin with the at sign
-        {isLessSource()}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT )
+        {isLessSource()}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT | SASS_USE | SASS_FORWARD )
         |
         {isScssSource()}? ( SASS_VAR | IDENT DOT SASS_VAR )
     ;
diff --git a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Lexer.java b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Lexer.java
index eda240b..e74ecfd 100644
--- a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Lexer.java
+++ b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Lexer.java
@@ -1,4 +1,4 @@
-// $ANTLR 3.5.2 /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g 2022-02-19 22:48:21
+// $ANTLR 3.5.2 /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g 2022-12-23 21:32:12
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -13109,70 +13109,70 @@
 		"\uffff\1\7\113\uffff\1\10\u020c\uffff";
 	static final String DFA193_specialS =
 		"\2\uffff\1\u00ed\6\uffff\1\u013d\12\uffff\1\u013e\5\uffff\1\101\16\uffff"+
-		"\1\u014b\1\u014c\4\uffff\1\u017c\1\u01e8\1\172\1\u0183\1\u0081\1\u008b"+
-		"\1\u01e7\1\17\1\u00d5\1\u0096\1\30\1\u00da\1\u0100\1\u018d\1\u0106\1\u019b"+
-		"\1\u01f0\1\42\1\u01a9\1\61\1\u012b\1\u01ed\1\u0135\1\uffff\1\2\5\uffff"+
-		"\1\u01b7\1\uffff\1\120\1\u00a3\1\141\1\u017d\1\173\1\u0184\1\u0082\1\u008c"+
-		"\1\20\1\u00d6\1\u0094\1\31\1\u00db\1\u0101\1\u0107\1\u019a\1\43\1\u01a8"+
-		"\1\64\1\u012c\1\u0136\1\121\1\142\1\u010e\1\u0128\1\uffff\1\u0117\6\uffff"+
-		"\1\u00af\1\u013f\1\u00bf\1\u010d\1\u0118\1\u00ae\1\u00c0\1\u008d\1\u0098"+
-		"\1\21\1\32\1\u00d7\1\u00dc\14\uffff\1\u008e\1\u0099\1\22\1\33\1\u00d8"+
-		"\1\u00dd\1\u019e\1\u01ab\1\41\1\65\2\uffff\1\u0141\1\u019f\1\u01ac\1\46"+
-		"\1\66\1\u012a\1\u0134\1\u012d\1\u0137\1\117\1\143\1\122\1\144\1\uffff"+
+		"\1\u014b\1\u014c\4\uffff\1\u017c\1\u01e8\1\172\1\u0184\1\u0081\1\u008c"+
+		"\1\u01e7\1\20\1\u00d5\1\u0094\1\31\1\u00da\1\u0100\1\u018d\1\u0106\1\u019b"+
+		"\1\u01f0\1\41\1\u01a9\1\60\1\u012b\1\u01ed\1\u0135\1\uffff\1\2\5\uffff"+
+		"\1\u01b7\1\uffff\1\121\1\u00a3\1\143\1\u017d\1\173\1\u0185\1\u0082\1\u008d"+
+		"\1\17\1\u00d6\1\u0096\1\32\1\u00db\1\u0101\1\u0107\1\u019c\1\42\1\u01a8"+
+		"\1\61\1\u012c\1\u0134\1\120\1\142\1\u010e\1\u0128\1\uffff\1\u0117\6\uffff"+
+		"\1\u00ae\1\u013f\1\u00bf\1\u010d\1\u0118\1\u00af\1\u00c0\1\u008b\1\u0097"+
+		"\1\21\1\33\1\u00d7\1\u00dc\14\uffff\1\u008e\1\u0098\1\22\1\30\1\u00d8"+
+		"\1\u00dd\1\u019e\1\u01aa\1\43\1\64\2\uffff\1\u0141\1\u019f\1\u01ad\1\46"+
+		"\1\66\1\u012d\1\u0136\1\u012e\1\u0137\1\125\1\147\1\130\1\141\1\uffff"+
 		"\1\u0149\1\u014a\1\u00a5\2\uffff\1\u00a6\2\uffff\1\u00ac\1\u00ad\1\102"+
 		"\2\uffff\1\104\2\uffff\1\u00e8\1\u00e9\3\uffff\1\u017a\1\u017b\1\77\2"+
 		"\uffff\1\100\2\uffff\1\u0121\1\u0122\2\uffff\1\u00f4\1\u00e5\1\u00f9\2"+
-		"\uffff\1\u01c6\1\u0190\1\u01d5\1\u00f5\1\u00fa\1\u01c9\1\u01d4\1\126\1"+
-		"\145\4\uffff\1\127\1\156\1\uffff\1\u00aa\1\u00ab\3\uffff\1\u00de\1\u00e0"+
-		"\2\uffff\1\u015a\1\u018c\1\u0169\1\u015b\1\u0168\1\u010f\1\u0119\1\u0110"+
-		"\1\u011a\6\uffff\1\167\1\170\20\uffff\1\u01b6\2\uffff\1\u017e\1\174\1"+
-		"\u0185\1\u0083\1\u0103\1\u0108\1\u01a0\1\47\1\u01ad\1\71\1\u012e\1\u0138"+
-		"\1\130\1\157\1\u01a1\1\50\1\u01b0\1\60\1\u008f\1\23\1\u0177\1\u009a\1"+
+		"\uffff\1\u01c6\1\u0190\1\u01d5\1\u00f5\1\u00fa\1\u01c5\1\u01d6\1\131\1"+
+		"\151\4\uffff\1\132\1\153\1\uffff\1\u00aa\1\u00ab\3\uffff\1\u00de\1\u00e0"+
+		"\2\uffff\1\u0159\1\u018c\1\u0168\1\u0158\1\u0169\1\u010f\1\u0116\1\u0110"+
+		"\1\u0119\6\uffff\1\167\1\170\20\uffff\1\u01b6\2\uffff\1\u017e\1\174\1"+
+		"\u0183\1\u0083\1\u0103\1\u0108\1\u019a\1\50\1\u01b0\1\67\1\u012f\1\u0138"+
+		"\1\117\1\154\1\u01a0\1\51\1\u01b1\1\72\1\u008f\1\23\1\u0177\1\u0099\1"+
 		"\34\1\u0178\7\uffff\1\u00ee\1\u00f0\1\166\3\uffff\1\u008a\1\u01ef\1\u014e"+
 		"\2\uffff\1\u00a7\1\u00a8\3\uffff\1\u0124\1\u0125\1\u01eb\2\uffff\1\u00e1"+
-		"\1\u00e2\7\uffff\1\u0197\1\u0199\2\uffff\1\131\1\161\1\136\1\162\5\uffff"+
+		"\1\u00e2\7\uffff\1\u0197\1\u0199\2\uffff\1\135\1\157\1\140\1\160\5\uffff"+
 		"\1\u0088\1\u0089\2\uffff\1\u009f\1\uffff\1\u0142\1\u0143\7\uffff\1\u0111"+
-		"\1\uffff\1\u011b\1\uffff\1\u00b1\1\u00be\2\uffff\1\7\16\uffff\1\5\2\uffff"+
-		"\1\u017f\1\175\1\u0186\1\u0084\1\u0105\1\u0109\1\u01a4\1\51\1\u01b1\1"+
-		"\72\1\u012f\1\u0139\1\125\1\151\1\u01a6\1\53\1\u01b4\1\73\1\u0090\1\24"+
-		"\1\u01e9\1\u0095\1\35\1\u01ea\4\uffff\1\u00b2\1\u00c1\1\u00b3\1\u00c2"+
-		"\1\12\1\14\1\u01c5\1\u01da\1\13\1\15\1\u01ca\1\u01dc\3\uffff\1\u0155\1"+
-		"\u0156\1\u00b7\3\uffff\1\u00d0\1\115\1\u01bc\2\uffff\1\u00ef\1\u00f1\3"+
+		"\1\uffff\1\u011a\1\uffff\1\u00b3\1\u00be\2\uffff\1\7\16\uffff\1\5\2\uffff"+
+		"\1\u017f\1\175\1\u0186\1\u0084\1\u0104\1\u0109\1\u01a1\1\52\1\u01b3\1"+
+		"\74\1\u0130\1\u0139\1\134\1\144\1\u01a2\1\54\1\u01b4\1\57\1\u0090\1\24"+
+		"\1\u01e9\1\u0095\1\35\1\u01ea\4\uffff\1\u00b4\1\u00c1\1\u00b5\1\u00c3"+
+		"\1\12\1\14\1\u01c7\1\u01d8\1\13\1\15\1\u01c8\1\u01d9\3\uffff\1\u0155\1"+
+		"\u0156\1\u00b6\3\uffff\1\u00d0\1\115\1\u01bc\2\uffff\1\u00ef\1\u00f1\3"+
 		"\uffff\1\u018e\1\u018f\1\107\2\uffff\1\u0126\1\u0127\2\uffff\1\u0198\4"+
-		"\uffff\1\u01f3\1\u01f4\1\u01cb\1\u01dd\2\uffff\1\u0145\1\u0146\3\uffff"+
-		"\1\123\1\146\2\uffff\1\u00ce\1\u00cf\2\uffff\1\u00e6\1\uffff\1\u0159\1"+
-		"\u016a\2\uffff\1\u00ea\1\u00eb\5\uffff\1\u0112\1\uffff\1\u011c\1\uffff"+
-		"\1\u00b8\1\u00c5\1\u0158\1\u016b\1\u015c\1\u0167\2\uffff\1\u009d\15\uffff"+
-		"\1\u01b8\2\uffff\1\u0180\1\176\1\u0187\1\u0085\1\u0102\1\u010a\1\u01a7"+
-		"\1\54\1\u01b5\1\62\1\u0130\1\u013a\1\132\1\150\1\u01a2\1\56\1\u01ae\1"+
-		"\70\1\u0091\1\25\1\u0188\1\u009b\1\36\1\u018b\4\uffff\1\u00ba\1\u00c7"+
-		"\1\u00bc\1\u00c9\1\u01c0\1\u01c2\1\u01cc\1\u01de\1\u01c1\1\u01c3\1\u01ce"+
-		"\1\u01df\3\uffff\1\u01e4\1\u01e6\1\u00fe\3\uffff\1\u0123\1\u00a9\1\16"+
+		"\uffff\1\u01f3\1\u01f4\1\u01c9\1\u01d4\2\uffff\1\u0145\1\u0146\3\uffff"+
+		"\1\126\1\146\2\uffff\1\u00ce\1\u00cf\2\uffff\1\u00e6\1\uffff\1\u0157\1"+
+		"\u016d\2\uffff\1\u00ea\1\u00eb\5\uffff\1\u0112\1\uffff\1\u011b\1\uffff"+
+		"\1\u00b7\1\u00c4\1\u015c\1\u0167\1\u015d\1\u016f\2\uffff\1\u009d\15\uffff"+
+		"\1\u01b8\2\uffff\1\u0180\1\176\1\u0187\1\u0085\1\u0105\1\u010a\1\u01a5"+
+		"\1\55\1\u01b5\1\73\1\u0131\1\u013a\1\127\1\145\1\u01a3\1\56\1\u01af\1"+
+		"\70\1\u0091\1\25\1\u0188\1\u009a\1\36\1\u018b\4\uffff\1\u00b8\1\u00c8"+
+		"\1\u00ba\1\u00c9\1\u01c0\1\u01c2\1\u01ca\1\u01da\1\u01c1\1\u01c3\1\u01cb"+
+		"\1\u01db\3\uffff\1\u01e4\1\u01e6\1\u00fe\3\uffff\1\u0123\1\u00a9\1\16"+
 		"\2\uffff\1\u0153\1\u0154\3\uffff\1\u01ec\1\u01ee\1\u00a4\2\uffff\1\u0191"+
-		"\1\u0193\2\uffff\1\u01f7\4\uffff\1\164\1\165\1\u01cf\1\u01e0\2\uffff\1"+
-		"\u01b9\1\u01ba\3\uffff\1\137\1\154\2\uffff\1\u011f\1\u0120\2\uffff\1\u0140"+
-		"\1\uffff\1\u0164\1\u016c\2\uffff\1\u014f\1\u0150\4\uffff\1\u0113\1\uffff"+
-		"\1\u011d\1\uffff\1\u00b0\1\u00ca\1\u0165\1\u016d\1\u0166\1\u0171\2\uffff"+
+		"\1\u0193\2\uffff\1\u01f7\4\uffff\1\164\1\165\1\u01cf\1\u01dd\2\uffff\1"+
+		"\u01b9\1\u01ba\3\uffff\1\124\1\161\2\uffff\1\u011f\1\u0120\2\uffff\1\u0140"+
+		"\1\uffff\1\u0160\1\u0170\2\uffff\1\u014f\1\u0150\4\uffff\1\u0113\1\uffff"+
+		"\1\u011c\1\uffff\1\u00bd\1\u00ca\1\u0162\1\u0173\1\u0163\1\u0174\2\uffff"+
 		"\1\u00d3\13\uffff\1\103\2\uffff\1\u0181\1\177\1\u0189\1\u0086\1\u00ff"+
-		"\1\u010b\1\u01a5\1\55\1\u01aa\1\67\1\u0131\1\u013c\1\133\1\155\1\u019c"+
-		"\1\52\1\u01b2\1\63\1\u0092\1\26\1\3\1\u009c\1\37\1\4\4\uffff\1\u00bb\1"+
-		"\u00cb\1\u00b6\1\u00c3\1\110\1\112\1\u01d2\1\u01e1\1\111\1\113\1\u01c7"+
-		"\1\u01d8\2\uffff\1\u0161\1\u0172\1\u00cd\2\uffff\1\u00d4\1\163\1\u01c4"+
+		"\1\u010b\1\u01a6\1\44\1\u01b2\1\63\1\u012a\1\u013b\1\136\1\155\1\u01a4"+
+		"\1\47\1\u01ae\1\65\1\u0092\1\26\1\3\1\u009c\1\37\1\4\4\uffff\1\u00bc\1"+
+		"\u00c5\1\u00b9\1\u00c2\1\110\1\112\1\u01d2\1\u01e0\1\111\1\113\1\u01cc"+
+		"\1\u01e2\2\uffff\1\u015e\1\u0176\1\u00cd\2\uffff\1\u00d4\1\163\1\u01c4"+
 		"\1\uffff\1\u00f2\1\u00f3\2\uffff\1\u0192\1\u0194\1\116\1\uffff\1\u0129"+
-		"\1\u0133\2\uffff\1\171\3\uffff\1\0\1\1\1\u01c8\1\u01e2\2\uffff\1\10\1"+
-		"\11\2\uffff\1\124\1\147\1\uffff\1\u00d1\1\u00d2\1\uffff\1\u00e7\1\uffff"+
-		"\1\u015e\1\u0173\2\uffff\1\u01be\1\u01bf\2\uffff\1\u0114\1\uffff\1\u0116"+
-		"\1\uffff\1\u00bd\1\u00c8\1\u0157\1\u0174\1\u015d\1\u016f\1\uffff\1\u009e"+
-		"\1\u0182\1\u0080\1\u018a\1\u0087\1\u0104\1\u010c\1\u01a3\1\45\1\u01af"+
-		"\1\74\1\u0132\1\u013b\1\135\1\160\1\u019d\1\44\1\u01b3\1\57\1\u0093\1"+
-		"\27\1\u00d9\1\u0097\1\40\1\u00df\1\u00b4\1\u00c6\1\u00b9\1\u00cc\1\u00f6"+
-		"\1\u00fb\1\u01d3\1\u01d9\1\u00f7\1\u00fc\1\u01d1\1\u01d6\1\u01f5\1\u01f6"+
+		"\1\u0133\2\uffff\1\171\3\uffff\1\0\1\1\1\u01d1\1\u01e1\2\uffff\1\10\1"+
+		"\11\2\uffff\1\122\1\150\1\uffff\1\u00d1\1\u00d2\1\uffff\1\u00e7\1\uffff"+
+		"\1\u015a\1\u016a\2\uffff\1\u01be\1\u01bf\2\uffff\1\u0114\1\uffff\1\u011d"+
+		"\1\uffff\1\u00b1\1\u00c6\1\u0161\1\u0171\1\u0166\1\u016e\1\uffff\1\u009e"+
+		"\1\u0182\1\u0080\1\u018a\1\u0087\1\u0102\1\u010c\1\u019d\1\53\1\u01ab"+
+		"\1\71\1\u0132\1\u013c\1\133\1\152\1\u01a7\1\45\1\u01ac\1\62\1\u0093\1"+
+		"\27\1\u00d9\1\u009b\1\40\1\u00df\1\u00b2\1\u00cb\1\u00bb\1\u00c7\1\u00f6"+
+		"\1\u00fb\1\u01d3\1\u01dc\1\u00f7\1\u00fc\1\u01ce\1\u01df\1\u01f5\1\u01f6"+
 		"\1\u0144\1\u014d\1\u00e4\1\114\1\u0195\1\u0196\1\75\1\76\1\u00e3\1\u01e3"+
-		"\1\u01e5\1\uffff\1\6\2\uffff\1\u00a0\1\u00a1\1\u01cd\1\u01d7\1\uffff\1"+
-		"\u01bb\1\u01bd\1\uffff\1\140\1\153\1\u0147\1\u0148\1\u0179\1\uffff\1\u0162"+
-		"\1\u016e\1\uffff\1\u0151\1\u0152\1\u0115\1\u011e\1\u00b5\1\u00c4\1\u0160"+
-		"\1\u0175\1\u0163\1\u0176\1\u00ec\1\u00a2\1\u00f8\1\u00fd\1\u01d0\1\u01db"+
-		"\1\105\1\106\1\134\1\152\1\u015f\1\u0170\1\u01f1\1\u01f2}>";
+		"\1\u01e5\1\uffff\1\6\2\uffff\1\u00a0\1\u00a1\1\u01d0\1\u01d7\1\uffff\1"+
+		"\u01bb\1\u01bd\1\uffff\1\137\1\162\1\u0147\1\u0148\1\u0179\1\uffff\1\u015f"+
+		"\1\u016b\1\uffff\1\u0151\1\u0152\1\u0115\1\u011e\1\u00b0\1\u00cc\1\u015b"+
+		"\1\u016c\1\u0165\1\u0175\1\u00ec\1\u00a2\1\u00f8\1\u00fd\1\u01cd\1\u01de"+
+		"\1\105\1\106\1\123\1\156\1\u0164\1\u0172\1\u01f1\1\u01f2}>";
 	static final String[] DFA193_transitionS = {
 			"\1\27\7\uffff\1\14\23\uffff\2\14\1\20\1\15\1\16\2\14\1\26\1\22\1\14\1"+
 			"\25\1\14\1\21\2\14\1\17\1\14\1\23\1\24\7\14\1\uffff\1\2\2\uffff\1\14"+
@@ -14283,19 +14283,6 @@
 						break;
 
 					case 15 : 
-						int LA193_54 = input.LA(1);
-						 
-						int index193_54 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred5_Css3()) ) {s = 170;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_54);
-						if ( s>=0 ) return s;
-						break;
-
-					case 16 : 
 						int LA193_87 = input.LA(1);
 						 
 						int index193_87 = input.index();
@@ -14308,6 +14295,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 16 : 
+						int LA193_54 = input.LA(1);
+						 
+						int index193_54 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred5_Css3()) ) {s = 170;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_54);
+						if ( s>=0 ) return s;
+						break;
+
 					case 17 : 
 						int LA193_121 = input.LA(1);
 						 
@@ -14400,6 +14400,19 @@
 						break;
 
 					case 24 : 
+						int LA193_140 = input.LA(1);
+						 
+						int index193_140 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred5_Css3()) ) {s = 170;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_140);
+						if ( s>=0 ) return s;
+						break;
+
+					case 25 : 
 						int LA193_57 = input.LA(1);
 						 
 						int index193_57 = input.index();
@@ -14412,7 +14425,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 25 : 
+					case 26 : 
 						int LA193_90 = input.LA(1);
 						 
 						int index193_90 = input.index();
@@ -14425,7 +14438,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 26 : 
+					case 27 : 
 						int LA193_122 = input.LA(1);
 						 
 						int index193_122 = input.index();
@@ -14438,19 +14451,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 27 : 
-						int LA193_140 = input.LA(1);
-						 
-						int index193_140 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred5_Css3()) ) {s = 170;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_140);
-						if ( s>=0 ) return s;
-						break;
-
 					case 28 : 
 						int LA193_284 = input.LA(1);
 						 
@@ -14517,19 +14517,6 @@
 						break;
 
 					case 33 : 
-						int LA193_145 = input.LA(1);
-						 
-						int index193_145 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_145);
-						if ( s>=0 ) return s;
-						break;
-
-					case 34 : 
 						int LA193_64 = input.LA(1);
 						 
 						int index193_64 = input.index();
@@ -14542,7 +14529,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 35 : 
+					case 34 : 
 						int LA193_95 = input.LA(1);
 						 
 						int index193_95 = input.index();
@@ -14555,7 +14542,33 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 35 : 
+						int LA193_145 = input.LA(1);
+						 
+						int index193_145 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_145);
+						if ( s>=0 ) return s;
+						break;
+
 					case 36 : 
+						int LA193_649 = input.LA(1);
+						 
+						int index193_649 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_649);
+						if ( s>=0 ) return s;
+						break;
+
+					case 37 : 
 						int LA193_762 = input.LA(1);
 						 
 						int index193_762 = input.index();
@@ -14568,19 +14581,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 37 : 
-						int LA193_754 = input.LA(1);
-						 
-						int index193_754 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_754);
-						if ( s>=0 ) return s;
-						break;
-
 					case 38 : 
 						int LA193_152 = input.LA(1);
 						 
@@ -14595,45 +14595,6 @@
 						break;
 
 					case 39 : 
-						int LA193_269 = input.LA(1);
-						 
-						int index193_269 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_269);
-						if ( s>=0 ) return s;
-						break;
-
-					case 40 : 
-						int LA193_277 = input.LA(1);
-						 
-						int index193_277 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_277);
-						if ( s>=0 ) return s;
-						break;
-
-					case 41 : 
-						int LA193_384 = input.LA(1);
-						 
-						int index193_384 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_384);
-						if ( s>=0 ) return s;
-						break;
-
-					case 42 : 
 						int LA193_657 = input.LA(1);
 						 
 						int index193_657 = input.index();
@@ -14646,7 +14607,59 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 40 : 
+						int LA193_269 = input.LA(1);
+						 
+						int index193_269 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_269);
+						if ( s>=0 ) return s;
+						break;
+
+					case 41 : 
+						int LA193_277 = input.LA(1);
+						 
+						int index193_277 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_277);
+						if ( s>=0 ) return s;
+						break;
+
+					case 42 : 
+						int LA193_384 = input.LA(1);
+						 
+						int index193_384 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_384);
+						if ( s>=0 ) return s;
+						break;
+
 					case 43 : 
+						int LA193_754 = input.LA(1);
+						 
+						int index193_754 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_754);
+						if ( s>=0 ) return s;
+						break;
+
+					case 44 : 
 						int LA193_392 = input.LA(1);
 						 
 						int index193_392 = input.index();
@@ -14659,7 +14672,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 44 : 
+					case 45 : 
 						int LA193_518 = input.LA(1);
 						 
 						int index193_518 = input.index();
@@ -14672,19 +14685,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 45 : 
-						int LA193_649 = input.LA(1);
-						 
-						int index193_649 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_649);
-						if ( s>=0 ) return s;
-						break;
-
 					case 46 : 
 						int LA193_526 = input.LA(1);
 						 
@@ -14699,32 +14699,19 @@
 						break;
 
 					case 47 : 
-						int LA193_764 = input.LA(1);
+						int LA193_394 = input.LA(1);
 						 
-						int index193_764 = input.index();
+						int index193_394 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_764);
+						input.seek(index193_394);
 						if ( s>=0 ) return s;
 						break;
 
 					case 48 : 
-						int LA193_279 = input.LA(1);
-						 
-						int index193_279 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_279);
-						if ( s>=0 ) return s;
-						break;
-
-					case 49 : 
 						int LA193_66 = input.LA(1);
 						 
 						int index193_66 = input.index();
@@ -14737,33 +14724,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 50 : 
-						int LA193_520 = input.LA(1);
-						 
-						int index193_520 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_520);
-						if ( s>=0 ) return s;
-						break;
-
-					case 51 : 
-						int LA193_659 = input.LA(1);
-						 
-						int index193_659 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_659);
-						if ( s>=0 ) return s;
-						break;
-
-					case 52 : 
+					case 49 : 
 						int LA193_97 = input.LA(1);
 						 
 						int index193_97 = input.index();
@@ -14776,7 +14737,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 53 : 
+					case 50 : 
+						int LA193_764 = input.LA(1);
+						 
+						int index193_764 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_764);
+						if ( s>=0 ) return s;
+						break;
+
+					case 51 : 
+						int LA193_651 = input.LA(1);
+						 
+						int index193_651 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_651);
+						if ( s>=0 ) return s;
+						break;
+
+					case 52 : 
 						int LA193_146 = input.LA(1);
 						 
 						int index193_146 = input.index();
@@ -14789,6 +14776,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 53 : 
+						int LA193_659 = input.LA(1);
+						 
+						int index193_659 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_659);
+						if ( s>=0 ) return s;
+						break;
+
 					case 54 : 
 						int LA193_153 = input.LA(1);
 						 
@@ -14803,15 +14803,15 @@
 						break;
 
 					case 55 : 
-						int LA193_651 = input.LA(1);
+						int LA193_271 = input.LA(1);
 						 
-						int index193_651 = input.index();
+						int index193_271 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_651);
+						input.seek(index193_271);
 						if ( s>=0 ) return s;
 						break;
 
@@ -14829,45 +14829,6 @@
 						break;
 
 					case 57 : 
-						int LA193_271 = input.LA(1);
-						 
-						int index193_271 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_271);
-						if ( s>=0 ) return s;
-						break;
-
-					case 58 : 
-						int LA193_386 = input.LA(1);
-						 
-						int index193_386 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_386);
-						if ( s>=0 ) return s;
-						break;
-
-					case 59 : 
-						int LA193_394 = input.LA(1);
-						 
-						int index193_394 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_394);
-						if ( s>=0 ) return s;
-						break;
-
-					case 60 : 
 						int LA193_756 = input.LA(1);
 						 
 						int index193_756 = input.index();
@@ -14880,6 +14841,45 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 58 : 
+						int LA193_279 = input.LA(1);
+						 
+						int index193_279 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_279);
+						if ( s>=0 ) return s;
+						break;
+
+					case 59 : 
+						int LA193_520 = input.LA(1);
+						 
+						int index193_520 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_520);
+						if ( s>=0 ) return s;
+						break;
+
+					case 60 : 
+						int LA193_386 = input.LA(1);
+						 
+						int index193_386 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_386);
+						if ( s>=0 ) return s;
+						break;
+
 					case 61 : 
 						int LA193_791 = input.LA(1);
 						 
@@ -15114,123 +15114,6 @@
 						break;
 
 					case 79 : 
-						int LA193_158 = input.LA(1);
-						 
-						int index193_158 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_158);
-						if ( s>=0 ) return s;
-						break;
-
-					case 80 : 
-						int LA193_79 = input.LA(1);
-						 
-						int index193_79 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_79);
-						if ( s>=0 ) return s;
-						break;
-
-					case 81 : 
-						int LA193_100 = input.LA(1);
-						 
-						int index193_100 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_100);
-						if ( s>=0 ) return s;
-						break;
-
-					case 82 : 
-						int LA193_160 = input.LA(1);
-						 
-						int index193_160 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_160);
-						if ( s>=0 ) return s;
-						break;
-
-					case 83 : 
-						int LA193_461 = input.LA(1);
-						 
-						int index193_461 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_461);
-						if ( s>=0 ) return s;
-						break;
-
-					case 84 : 
-						int LA193_719 = input.LA(1);
-						 
-						int index193_719 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_719);
-						if ( s>=0 ) return s;
-						break;
-
-					case 85 : 
-						int LA193_389 = input.LA(1);
-						 
-						int index193_389 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_389);
-						if ( s>=0 ) return s;
-						break;
-
-					case 86 : 
-						int LA193_208 = input.LA(1);
-						 
-						int index193_208 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_208);
-						if ( s>=0 ) return s;
-						break;
-
-					case 87 : 
-						int LA193_214 = input.LA(1);
-						 
-						int index193_214 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_214);
-						if ( s>=0 ) return s;
-						break;
-
-					case 88 : 
 						int LA193_274 = input.LA(1);
 						 
 						int index193_274 = input.index();
@@ -15243,46 +15126,46 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 89 : 
-						int LA193_327 = input.LA(1);
+					case 80 : 
+						int LA193_100 = input.LA(1);
 						 
-						int index193_327 = input.index();
+						int index193_100 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_327);
+						input.seek(index193_100);
 						if ( s>=0 ) return s;
 						break;
 
-					case 90 : 
-						int LA193_523 = input.LA(1);
+					case 81 : 
+						int LA193_79 = input.LA(1);
 						 
-						int index193_523 = input.index();
+						int index193_79 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_523);
+						input.seek(index193_79);
 						if ( s>=0 ) return s;
 						break;
 
-					case 91 : 
-						int LA193_654 = input.LA(1);
+					case 82 : 
+						int LA193_719 = input.LA(1);
 						 
-						int index193_654 = input.index();
+						int index193_719 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_654);
+						input.seek(index193_719);
 						if ( s>=0 ) return s;
 						break;
 
-					case 92 : 
+					case 83 : 
 						int LA193_835 = input.LA(1);
 						 
 						int index193_835 = input.index();
@@ -15295,33 +15178,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 93 : 
-						int LA193_759 = input.LA(1);
-						 
-						int index193_759 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_759);
-						if ( s>=0 ) return s;
-						break;
-
-					case 94 : 
-						int LA193_329 = input.LA(1);
-						 
-						int index193_329 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_329);
-						if ( s>=0 ) return s;
-						break;
-
-					case 95 : 
+					case 84 : 
 						int LA193_595 = input.LA(1);
 						 
 						int index193_595 = input.index();
@@ -15334,7 +15191,137 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 96 : 
+					case 85 : 
+						int LA193_158 = input.LA(1);
+						 
+						int index193_158 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_158);
+						if ( s>=0 ) return s;
+						break;
+
+					case 86 : 
+						int LA193_461 = input.LA(1);
+						 
+						int index193_461 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_461);
+						if ( s>=0 ) return s;
+						break;
+
+					case 87 : 
+						int LA193_523 = input.LA(1);
+						 
+						int index193_523 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_523);
+						if ( s>=0 ) return s;
+						break;
+
+					case 88 : 
+						int LA193_160 = input.LA(1);
+						 
+						int index193_160 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_160);
+						if ( s>=0 ) return s;
+						break;
+
+					case 89 : 
+						int LA193_208 = input.LA(1);
+						 
+						int index193_208 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_208);
+						if ( s>=0 ) return s;
+						break;
+
+					case 90 : 
+						int LA193_214 = input.LA(1);
+						 
+						int index193_214 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_214);
+						if ( s>=0 ) return s;
+						break;
+
+					case 91 : 
+						int LA193_759 = input.LA(1);
+						 
+						int index193_759 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_759);
+						if ( s>=0 ) return s;
+						break;
+
+					case 92 : 
+						int LA193_389 = input.LA(1);
+						 
+						int index193_389 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_389);
+						if ( s>=0 ) return s;
+						break;
+
+					case 93 : 
+						int LA193_327 = input.LA(1);
+						 
+						int index193_327 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_327);
+						if ( s>=0 ) return s;
+						break;
+
+					case 94 : 
+						int LA193_654 = input.LA(1);
+						 
+						int index193_654 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_654);
+						if ( s>=0 ) return s;
+						break;
+
+					case 95 : 
 						int LA193_808 = input.LA(1);
 						 
 						int index193_808 = input.index();
@@ -15347,16 +15334,29 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 97 : 
-						int LA193_81 = input.LA(1);
+					case 96 : 
+						int LA193_329 = input.LA(1);
 						 
-						int index193_81 = input.index();
+						int index193_329 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_81);
+						input.seek(index193_329);
+						if ( s>=0 ) return s;
+						break;
+
+					case 97 : 
+						int LA193_161 = input.LA(1);
+						 
+						int index193_161 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_161);
 						if ( s>=0 ) return s;
 						break;
 
@@ -15374,41 +15374,41 @@
 						break;
 
 					case 99 : 
-						int LA193_159 = input.LA(1);
+						int LA193_81 = input.LA(1);
 						 
-						int index193_159 = input.index();
+						int index193_81 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_159);
+						input.seek(index193_81);
 						if ( s>=0 ) return s;
 						break;
 
 					case 100 : 
-						int LA193_161 = input.LA(1);
+						int LA193_390 = input.LA(1);
 						 
-						int index193_161 = input.index();
+						int index193_390 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_161);
+						input.seek(index193_390);
 						if ( s>=0 ) return s;
 						break;
 
 					case 101 : 
-						int LA193_209 = input.LA(1);
+						int LA193_524 = input.LA(1);
 						 
-						int index193_209 = input.index();
+						int index193_524 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_209);
+						input.seek(index193_524);
 						if ( s>=0 ) return s;
 						break;
 
@@ -15426,6 +15426,19 @@
 						break;
 
 					case 103 : 
+						int LA193_159 = input.LA(1);
+						 
+						int index193_159 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_159);
+						if ( s>=0 ) return s;
+						break;
+
+					case 104 : 
 						int LA193_720 = input.LA(1);
 						 
 						int index193_720 = input.index();
@@ -15438,68 +15451,55 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 104 : 
-						int LA193_524 = input.LA(1);
-						 
-						int index193_524 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_524);
-						if ( s>=0 ) return s;
-						break;
-
 					case 105 : 
-						int LA193_390 = input.LA(1);
+						int LA193_209 = input.LA(1);
 						 
-						int index193_390 = input.index();
+						int index193_209 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_390);
+						input.seek(index193_209);
 						if ( s>=0 ) return s;
 						break;
 
 					case 106 : 
-						int LA193_836 = input.LA(1);
+						int LA193_760 = input.LA(1);
 						 
-						int index193_836 = input.index();
+						int index193_760 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_836);
+						input.seek(index193_760);
 						if ( s>=0 ) return s;
 						break;
 
 					case 107 : 
-						int LA193_809 = input.LA(1);
+						int LA193_215 = input.LA(1);
 						 
-						int index193_809 = input.index();
+						int index193_215 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_809);
+						input.seek(index193_215);
 						if ( s>=0 ) return s;
 						break;
 
 					case 108 : 
-						int LA193_596 = input.LA(1);
+						int LA193_275 = input.LA(1);
 						 
-						int index193_596 = input.index();
+						int index193_275 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_596);
+						input.seek(index193_275);
 						if ( s>=0 ) return s;
 						break;
 
@@ -15517,45 +15517,19 @@
 						break;
 
 					case 110 : 
-						int LA193_215 = input.LA(1);
+						int LA193_836 = input.LA(1);
 						 
-						int index193_215 = input.index();
+						int index193_836 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred12_Css3()) ) {s = 216;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_215);
+						input.seek(index193_836);
 						if ( s>=0 ) return s;
 						break;
 
 					case 111 : 
-						int LA193_275 = input.LA(1);
-						 
-						int index193_275 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_275);
-						if ( s>=0 ) return s;
-						break;
-
-					case 112 : 
-						int LA193_760 = input.LA(1);
-						 
-						int index193_760 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred12_Css3()) ) {s = 216;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_760);
-						if ( s>=0 ) return s;
-						break;
-
-					case 113 : 
 						int LA193_328 = input.LA(1);
 						 
 						int index193_328 = input.index();
@@ -15568,7 +15542,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 114 : 
+					case 112 : 
 						int LA193_330 = input.LA(1);
 						 
 						int index193_330 = input.index();
@@ -15581,6 +15555,32 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 113 : 
+						int LA193_596 = input.LA(1);
+						 
+						int index193_596 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_596);
+						if ( s>=0 ) return s;
+						break;
+
+					case 114 : 
+						int LA193_809 = input.LA(1);
+						 
+						int index193_809 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred12_Css3()) ) {s = 216;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_809);
+						if ( s>=0 ) return s;
+						break;
+
 					case 115 : 
 						int LA193_690 = input.LA(1);
 						 
@@ -15894,6 +15894,19 @@
 						break;
 
 					case 139 : 
+						int LA193_119 = input.LA(1);
+						 
+						int index193_119 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred5_Css3()) ) {s = 170;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_119);
+						if ( s>=0 ) return s;
+						break;
+
+					case 140 : 
 						int LA193_52 = input.LA(1);
 						 
 						int index193_52 = input.index();
@@ -15906,7 +15919,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 140 : 
+					case 141 : 
 						int LA193_86 = input.LA(1);
 						 
 						int index193_86 = input.index();
@@ -15919,19 +15932,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 141 : 
-						int LA193_119 = input.LA(1);
-						 
-						int index193_119 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred5_Css3()) ) {s = 170;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_119);
-						if ( s>=0 ) return s;
-						break;
-
 					case 142 : 
 						int LA193_137 = input.LA(1);
 						 
@@ -16011,15 +16011,15 @@
 						break;
 
 					case 148 : 
-						int LA193_89 = input.LA(1);
+						int LA193_56 = input.LA(1);
 						 
-						int index193_89 = input.index();
+						int index193_56 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred5_Css3()) ) {s = 170;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_89);
+						input.seek(index193_56);
 						if ( s>=0 ) return s;
 						break;
 
@@ -16037,32 +16037,19 @@
 						break;
 
 					case 150 : 
-						int LA193_56 = input.LA(1);
+						int LA193_89 = input.LA(1);
 						 
-						int index193_56 = input.index();
+						int index193_89 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred5_Css3()) ) {s = 170;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_56);
+						input.seek(index193_89);
 						if ( s>=0 ) return s;
 						break;
 
 					case 151 : 
-						int LA193_768 = input.LA(1);
-						 
-						int index193_768 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred5_Css3()) ) {s = 170;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_768);
-						if ( s>=0 ) return s;
-						break;
-
-					case 152 : 
 						int LA193_120 = input.LA(1);
 						 
 						int index193_120 = input.index();
@@ -16075,7 +16062,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 153 : 
+					case 152 : 
 						int LA193_138 = input.LA(1);
 						 
 						int index193_138 = input.index();
@@ -16088,7 +16075,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 154 : 
+					case 153 : 
 						int LA193_283 = input.LA(1);
 						 
 						int index193_283 = input.index();
@@ -16101,7 +16088,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 155 : 
+					case 154 : 
 						int LA193_532 = input.LA(1);
 						 
 						int index193_532 = input.index();
@@ -16114,6 +16101,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 155 : 
+						int LA193_768 = input.LA(1);
+						 
+						int index193_768 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred5_Css3()) ) {s = 170;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_768);
+						if ( s>=0 ) return s;
+						break;
+
 					case 156 : 
 						int LA193_663 = input.LA(1);
 						 
@@ -16347,19 +16347,6 @@
 						break;
 
 					case 174 : 
-						int LA193_117 = input.LA(1);
-						 
-						int index193_117 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_117);
-						if ( s>=0 ) return s;
-						break;
-
-					case 175 : 
 						int LA193_112 = input.LA(1);
 						 
 						int index193_112 = input.index();
@@ -16372,72 +16359,20 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 175 : 
+						int LA193_117 = input.LA(1);
+						 
+						int index193_117 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_117);
+						if ( s>=0 ) return s;
+						break;
+
 					case 176 : 
-						int LA193_619 = input.LA(1);
-						 
-						int index193_619 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_619);
-						if ( s>=0 ) return s;
-						break;
-
-					case 177 : 
-						int LA193_355 = input.LA(1);
-						 
-						int index193_355 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_355);
-						if ( s>=0 ) return s;
-						break;
-
-					case 178 : 
-						int LA193_405 = input.LA(1);
-						 
-						int index193_405 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_405);
-						if ( s>=0 ) return s;
-						break;
-
-					case 179 : 
-						int LA193_407 = input.LA(1);
-						 
-						int index193_407 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_407);
-						if ( s>=0 ) return s;
-						break;
-
-					case 180 : 
-						int LA193_771 = input.LA(1);
-						 
-						int index193_771 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_771);
-						if ( s>=0 ) return s;
-						break;
-
-					case 181 : 
 						int LA193_821 = input.LA(1);
 						 
 						int index193_821 = input.index();
@@ -16450,20 +16385,72 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 182 : 
-						int LA193_672 = input.LA(1);
+					case 177 : 
+						int LA193_739 = input.LA(1);
 						 
-						int index193_672 = input.index();
+						int index193_739 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_672);
+						input.seek(index193_739);
 						if ( s>=0 ) return s;
 						break;
 
-					case 183 : 
+					case 178 : 
+						int LA193_771 = input.LA(1);
+						 
+						int index193_771 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_771);
+						if ( s>=0 ) return s;
+						break;
+
+					case 179 : 
+						int LA193_355 = input.LA(1);
+						 
+						int index193_355 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_355);
+						if ( s>=0 ) return s;
+						break;
+
+					case 180 : 
+						int LA193_405 = input.LA(1);
+						 
+						int index193_405 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_405);
+						if ( s>=0 ) return s;
+						break;
+
+					case 181 : 
+						int LA193_407 = input.LA(1);
+						 
+						int index193_407 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_407);
+						if ( s>=0 ) return s;
+						break;
+
+					case 182 : 
 						int LA193_422 = input.LA(1);
 						 
 						int index193_422 = input.index();
@@ -16476,7 +16463,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 184 : 
+					case 183 : 
 						int LA193_486 = input.LA(1);
 						 
 						int index193_486 = input.index();
@@ -16489,20 +16476,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 185 : 
-						int LA193_773 = input.LA(1);
-						 
-						int index193_773 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_773);
-						if ( s>=0 ) return s;
-						break;
-
-					case 186 : 
+					case 184 : 
 						int LA193_539 = input.LA(1);
 						 
 						int index193_539 = input.index();
@@ -16515,20 +16489,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 187 : 
-						int LA193_670 = input.LA(1);
+					case 185 : 
+						int LA193_672 = input.LA(1);
 						 
-						int index193_670 = input.index();
+						int index193_672 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_670);
+						input.seek(index193_672);
 						if ( s>=0 ) return s;
 						break;
 
-					case 188 : 
+					case 186 : 
 						int LA193_541 = input.LA(1);
 						 
 						int index193_541 = input.index();
@@ -16541,16 +16515,42 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 189 : 
-						int LA193_739 = input.LA(1);
+					case 187 : 
+						int LA193_773 = input.LA(1);
 						 
-						int index193_739 = input.index();
+						int index193_773 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_739);
+						input.seek(index193_773);
+						if ( s>=0 ) return s;
+						break;
+
+					case 188 : 
+						int LA193_670 = input.LA(1);
+						 
+						int index193_670 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_670);
+						if ( s>=0 ) return s;
+						break;
+
+					case 189 : 
+						int LA193_619 = input.LA(1);
+						 
+						int index193_619 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_619);
 						if ( s>=0 ) return s;
 						break;
 
@@ -16607,19 +16607,6 @@
 						break;
 
 					case 194 : 
-						int LA193_408 = input.LA(1);
-						 
-						int index193_408 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_408);
-						if ( s>=0 ) return s;
-						break;
-
-					case 195 : 
 						int LA193_673 = input.LA(1);
 						 
 						int index193_673 = input.index();
@@ -16632,20 +16619,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 196 : 
-						int LA193_822 = input.LA(1);
+					case 195 : 
+						int LA193_408 = input.LA(1);
 						 
-						int index193_822 = input.index();
+						int index193_408 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_822);
+						input.seek(index193_408);
 						if ( s>=0 ) return s;
 						break;
 
-					case 197 : 
+					case 196 : 
 						int LA193_487 = input.LA(1);
 						 
 						int index193_487 = input.index();
@@ -16658,33 +16645,20 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 197 : 
+						int LA193_671 = input.LA(1);
+						 
+						int index193_671 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_671);
+						if ( s>=0 ) return s;
+						break;
+
 					case 198 : 
-						int LA193_772 = input.LA(1);
-						 
-						int index193_772 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_772);
-						if ( s>=0 ) return s;
-						break;
-
-					case 199 : 
-						int LA193_540 = input.LA(1);
-						 
-						int index193_540 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred9_Css3()) ) {s = 240;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_540);
-						if ( s>=0 ) return s;
-						break;
-
-					case 200 : 
 						int LA193_740 = input.LA(1);
 						 
 						int index193_740 = input.index();
@@ -16697,6 +16671,32 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 199 : 
+						int LA193_774 = input.LA(1);
+						 
+						int index193_774 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_774);
+						if ( s>=0 ) return s;
+						break;
+
+					case 200 : 
+						int LA193_540 = input.LA(1);
+						 
+						int index193_540 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred9_Css3()) ) {s = 240;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_540);
+						if ( s>=0 ) return s;
+						break;
+
 					case 201 : 
 						int LA193_542 = input.LA(1);
 						 
@@ -16724,28 +16724,28 @@
 						break;
 
 					case 203 : 
-						int LA193_671 = input.LA(1);
+						int LA193_772 = input.LA(1);
 						 
-						int index193_671 = input.index();
+						int index193_772 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_671);
+						input.seek(index193_772);
 						if ( s>=0 ) return s;
 						break;
 
 					case 204 : 
-						int LA193_774 = input.LA(1);
+						int LA193_822 = input.LA(1);
 						 
-						int index193_774 = input.index();
+						int index193_822 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred9_Css3()) ) {s = 240;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_774);
+						input.seek(index193_822);
 						if ( s>=0 ) return s;
 						break;
 
@@ -17446,15 +17446,15 @@
 						break;
 
 					case 258 : 
-						int LA193_515 = input.LA(1);
+						int LA193_751 = input.LA(1);
 						 
-						int index193_515 = input.index();
+						int index193_751 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred6_Css3()) ) {s = 178;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_515);
+						input.seek(index193_751);
 						if ( s>=0 ) return s;
 						break;
 
@@ -17472,19 +17472,6 @@
 						break;
 
 					case 260 : 
-						int LA193_751 = input.LA(1);
-						 
-						int index193_751 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred6_Css3()) ) {s = 178;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_751);
-						if ( s>=0 ) return s;
-						break;
-
-					case 261 : 
 						int LA193_381 = input.LA(1);
 						 
 						int index193_381 = input.index();
@@ -17497,6 +17484,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 261 : 
+						int LA193_515 = input.LA(1);
+						 
+						int index193_515 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred6_Css3()) ) {s = 178;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_515);
+						if ( s>=0 ) return s;
+						break;
+
 					case 262 : 
 						int LA193_61 = input.LA(1);
 						 
@@ -17706,15 +17706,15 @@
 						break;
 
 					case 278 : 
-						int LA193_737 = input.LA(1);
+						int LA193_232 = input.LA(1);
 						 
-						int index193_737 = input.index();
+						int index193_232 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred3_Css3()) ) {s = 221;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_737);
+						input.seek(index193_232);
 						if ( s>=0 ) return s;
 						break;
 
@@ -17745,19 +17745,6 @@
 						break;
 
 					case 281 : 
-						int LA193_232 = input.LA(1);
-						 
-						int index193_232 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_232);
-						if ( s>=0 ) return s;
-						break;
-
-					case 282 : 
 						int LA193_234 = input.LA(1);
 						 
 						int index193_234 = input.index();
@@ -17770,7 +17757,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 283 : 
+					case 282 : 
 						int LA193_353 = input.LA(1);
 						 
 						int index193_353 = input.index();
@@ -17783,7 +17770,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 284 : 
+					case 283 : 
 						int LA193_484 = input.LA(1);
 						 
 						int index193_484 = input.index();
@@ -17796,7 +17783,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 285 : 
+					case 284 : 
 						int LA193_617 = input.LA(1);
 						 
 						int index193_617 = input.index();
@@ -17809,6 +17796,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 285 : 
+						int LA193_737 = input.LA(1);
+						 
+						int index193_737 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_737);
+						if ( s>=0 ) return s;
+						break;
+
 					case 286 : 
 						int LA193_820 = input.LA(1);
 						 
@@ -17964,15 +17964,15 @@
 						break;
 
 					case 298 : 
-						int LA193_154 = input.LA(1);
+						int LA193_652 = input.LA(1);
 						 
-						int index193_154 = input.index();
+						int index193_652 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred8_Css3()) ) {s = 191;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_154);
+						input.seek(index193_652);
 						if ( s>=0 ) return s;
 						break;
 
@@ -18003,6 +18003,19 @@
 						break;
 
 					case 301 : 
+						int LA193_154 = input.LA(1);
+						 
+						int index193_154 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred8_Css3()) ) {s = 191;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_154);
+						if ( s>=0 ) return s;
+						break;
+
+					case 302 : 
 						int LA193_156 = input.LA(1);
 						 
 						int index193_156 = input.index();
@@ -18015,7 +18028,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 302 : 
+					case 303 : 
 						int LA193_272 = input.LA(1);
 						 
 						int index193_272 = input.index();
@@ -18028,7 +18041,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 303 : 
+					case 304 : 
 						int LA193_387 = input.LA(1);
 						 
 						int index193_387 = input.index();
@@ -18041,7 +18054,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 304 : 
+					case 305 : 
 						int LA193_521 = input.LA(1);
 						 
 						int index193_521 = input.index();
@@ -18054,19 +18067,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 305 : 
-						int LA193_652 = input.LA(1);
-						 
-						int index193_652 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred8_Css3()) ) {s = 191;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_652);
-						if ( s>=0 ) return s;
-						break;
-
 					case 306 : 
 						int LA193_757 = input.LA(1);
 						 
@@ -18094,15 +18094,15 @@
 						break;
 
 					case 308 : 
-						int LA193_155 = input.LA(1);
+						int LA193_99 = input.LA(1);
 						 
-						int index193_155 = input.index();
+						int index193_99 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred8_Css3()) ) {s = 191;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_155);
+						input.seek(index193_99);
 						if ( s>=0 ) return s;
 						break;
 
@@ -18120,15 +18120,15 @@
 						break;
 
 					case 310 : 
-						int LA193_99 = input.LA(1);
+						int LA193_155 = input.LA(1);
 						 
-						int index193_99 = input.index();
+						int index193_155 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred8_Css3()) ) {s = 191;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_99);
+						input.seek(index193_155);
 						if ( s>=0 ) return s;
 						break;
 
@@ -18185,19 +18185,6 @@
 						break;
 
 					case 315 : 
-						int LA193_758 = input.LA(1);
-						 
-						int index193_758 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred8_Css3()) ) {s = 191;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_758);
-						if ( s>=0 ) return s;
-						break;
-
-					case 316 : 
 						int LA193_653 = input.LA(1);
 						 
 						int index193_653 = input.index();
@@ -18210,6 +18197,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 316 : 
+						int LA193_758 = input.LA(1);
+						 
+						int index193_758 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred8_Css3()) ) {s = 191;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_758);
+						if ( s>=0 ) return s;
+						break;
+
 					case 317 : 
 						int LA193_9 = input.LA(1);
 						 
@@ -18547,32 +18547,6 @@
 						break;
 
 					case 343 : 
-						int LA193_741 = input.LA(1);
-						 
-						int index193_741 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_741);
-						if ( s>=0 ) return s;
-						break;
-
-					case 344 : 
-						int LA193_488 = input.LA(1);
-						 
-						int index193_488 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_488);
-						if ( s>=0 ) return s;
-						break;
-
-					case 345 : 
 						int LA193_471 = input.LA(1);
 						 
 						int index193_471 = input.index();
@@ -18585,20 +18559,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 346 : 
-						int LA193_226 = input.LA(1);
-						 
-						int index193_226 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_226);
-						if ( s>=0 ) return s;
-						break;
-
-					case 347 : 
+					case 344 : 
 						int LA193_229 = input.LA(1);
 						 
 						int index193_229 = input.index();
@@ -18611,33 +18572,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 348 : 
-						int LA193_490 = input.LA(1);
+					case 345 : 
+						int LA193_226 = input.LA(1);
 						 
-						int index193_490 = input.index();
+						int index193_226 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred3_Css3()) ) {s = 221;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_490);
+						input.seek(index193_226);
 						if ( s>=0 ) return s;
 						break;
 
-					case 349 : 
-						int LA193_743 = input.LA(1);
-						 
-						int index193_743 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_743);
-						if ( s>=0 ) return s;
-						break;
-
-					case 350 : 
+					case 346 : 
 						int LA193_727 = input.LA(1);
 						 
 						int index193_727 = input.index();
@@ -18650,20 +18598,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 351 : 
-						int LA193_837 = input.LA(1);
-						 
-						int index193_837 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_837);
-						if ( s>=0 ) return s;
-						break;
-
-					case 352 : 
+					case 347 : 
 						int LA193_823 = input.LA(1);
 						 
 						int index193_823 = input.index();
@@ -18676,7 +18611,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 353 : 
+					case 348 : 
+						int LA193_488 = input.LA(1);
+						 
+						int index193_488 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_488);
+						if ( s>=0 ) return s;
+						break;
+
+					case 349 : 
+						int LA193_490 = input.LA(1);
+						 
+						int index193_490 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_490);
+						if ( s>=0 ) return s;
+						break;
+
+					case 350 : 
 						int LA193_684 = input.LA(1);
 						 
 						int index193_684 = input.index();
@@ -18689,7 +18650,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 354 : 
+					case 351 : 
 						int LA193_814 = input.LA(1);
 						 
 						int index193_814 = input.index();
@@ -18702,20 +18663,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 355 : 
-						int LA193_825 = input.LA(1);
-						 
-						int index193_825 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_825);
-						if ( s>=0 ) return s;
-						break;
-
-					case 356 : 
+					case 352 : 
 						int LA193_605 = input.LA(1);
 						 
 						int index193_605 = input.index();
@@ -18728,7 +18676,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 357 : 
+					case 353 : 
+						int LA193_741 = input.LA(1);
+						 
+						int index193_741 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_741);
+						if ( s>=0 ) return s;
+						break;
+
+					case 354 : 
 						int LA193_621 = input.LA(1);
 						 
 						int index193_621 = input.index();
@@ -18741,7 +18702,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 358 : 
+					case 355 : 
 						int LA193_623 = input.LA(1);
 						 
 						int index193_623 = input.index();
@@ -18754,59 +18715,46 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 356 : 
+						int LA193_837 = input.LA(1);
+						 
+						int index193_837 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_837);
+						if ( s>=0 ) return s;
+						break;
+
+					case 357 : 
+						int LA193_825 = input.LA(1);
+						 
+						int index193_825 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_825);
+						if ( s>=0 ) return s;
+						break;
+
+					case 358 : 
+						int LA193_743 = input.LA(1);
+						 
+						int index193_743 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_743);
+						if ( s>=0 ) return s;
+						break;
+
 					case 359 : 
-						int LA193_491 = input.LA(1);
-						 
-						int index193_491 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_491);
-						if ( s>=0 ) return s;
-						break;
-
-					case 360 : 
-						int LA193_230 = input.LA(1);
-						 
-						int index193_230 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_230);
-						if ( s>=0 ) return s;
-						break;
-
-					case 361 : 
-						int LA193_228 = input.LA(1);
-						 
-						int index193_228 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_228);
-						if ( s>=0 ) return s;
-						break;
-
-					case 362 : 
-						int LA193_472 = input.LA(1);
-						 
-						int index193_472 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_472);
-						if ( s>=0 ) return s;
-						break;
-
-					case 363 : 
 						int LA193_489 = input.LA(1);
 						 
 						int index193_489 = input.index();
@@ -18819,98 +18767,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 364 : 
-						int LA193_606 = input.LA(1);
+					case 360 : 
+						int LA193_228 = input.LA(1);
 						 
-						int index193_606 = input.index();
+						int index193_228 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred3_Css3()) ) {s = 221;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_606);
+						input.seek(index193_228);
 						if ( s>=0 ) return s;
 						break;
 
-					case 365 : 
-						int LA193_622 = input.LA(1);
+					case 361 : 
+						int LA193_230 = input.LA(1);
 						 
-						int index193_622 = input.index();
+						int index193_230 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred3_Css3()) ) {s = 221;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_622);
+						input.seek(index193_230);
 						if ( s>=0 ) return s;
 						break;
 
-					case 366 : 
-						int LA193_815 = input.LA(1);
-						 
-						int index193_815 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_815);
-						if ( s>=0 ) return s;
-						break;
-
-					case 367 : 
-						int LA193_744 = input.LA(1);
-						 
-						int index193_744 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_744);
-						if ( s>=0 ) return s;
-						break;
-
-					case 368 : 
-						int LA193_838 = input.LA(1);
-						 
-						int index193_838 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_838);
-						if ( s>=0 ) return s;
-						break;
-
-					case 369 : 
-						int LA193_624 = input.LA(1);
-						 
-						int index193_624 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred3_Css3()) ) {s = 221;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_624);
-						if ( s>=0 ) return s;
-						break;
-
-					case 370 : 
-						int LA193_685 = input.LA(1);
-						 
-						int index193_685 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred4_Css3()) ) {s = 162;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_685);
-						if ( s>=0 ) return s;
-						break;
-
-					case 371 : 
+					case 362 : 
 						int LA193_728 = input.LA(1);
 						 
 						int index193_728 = input.index();
@@ -18923,20 +18806,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 372 : 
-						int LA193_742 = input.LA(1);
+					case 363 : 
+						int LA193_815 = input.LA(1);
 						 
-						int index193_742 = input.index();
+						int index193_815 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred3_Css3()) ) {s = 221;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_742);
+						input.seek(index193_815);
 						if ( s>=0 ) return s;
 						break;
 
-					case 373 : 
+					case 364 : 
 						int LA193_824 = input.LA(1);
 						 
 						int index193_824 = input.index();
@@ -18949,7 +18832,111 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 374 : 
+					case 365 : 
+						int LA193_472 = input.LA(1);
+						 
+						int index193_472 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_472);
+						if ( s>=0 ) return s;
+						break;
+
+					case 366 : 
+						int LA193_744 = input.LA(1);
+						 
+						int index193_744 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_744);
+						if ( s>=0 ) return s;
+						break;
+
+					case 367 : 
+						int LA193_491 = input.LA(1);
+						 
+						int index193_491 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_491);
+						if ( s>=0 ) return s;
+						break;
+
+					case 368 : 
+						int LA193_606 = input.LA(1);
+						 
+						int index193_606 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_606);
+						if ( s>=0 ) return s;
+						break;
+
+					case 369 : 
+						int LA193_742 = input.LA(1);
+						 
+						int index193_742 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_742);
+						if ( s>=0 ) return s;
+						break;
+
+					case 370 : 
+						int LA193_838 = input.LA(1);
+						 
+						int index193_838 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_838);
+						if ( s>=0 ) return s;
+						break;
+
+					case 371 : 
+						int LA193_622 = input.LA(1);
+						 
+						int index193_622 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_622);
+						if ( s>=0 ) return s;
+						break;
+
+					case 372 : 
+						int LA193_624 = input.LA(1);
+						 
+						int index193_624 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred3_Css3()) ) {s = 221;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_624);
+						if ( s>=0 ) return s;
+						break;
+
+					case 373 : 
 						int LA193_826 = input.LA(1);
 						 
 						int index193_826 = input.index();
@@ -18962,6 +18949,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 374 : 
+						int LA193_685 = input.LA(1);
+						 
+						int index193_685 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred4_Css3()) ) {s = 162;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_685);
+						if ( s>=0 ) return s;
+						break;
+
 					case 375 : 
 						int LA193_282 = input.LA(1);
 						 
@@ -19119,6 +19119,19 @@
 						break;
 
 					case 387 : 
+						int LA193_264 = input.LA(1);
+						 
+						int index193_264 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred4_Css3()) ) {s = 162;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_264);
+						if ( s>=0 ) return s;
+						break;
+
+					case 388 : 
 						int LA193_50 = input.LA(1);
 						 
 						int index193_50 = input.index();
@@ -19131,7 +19144,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 388 : 
+					case 389 : 
 						int LA193_84 = input.LA(1);
 						 
 						int index193_84 = input.index();
@@ -19144,19 +19157,6 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 389 : 
-						int LA193_264 = input.LA(1);
-						 
-						int index193_264 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred4_Css3()) ) {s = 162;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_264);
-						if ( s>=0 ) return s;
-						break;
-
 					case 390 : 
 						int LA193_379 = input.LA(1);
 						 
@@ -19412,15 +19412,15 @@
 						break;
 
 					case 410 : 
-						int LA193_94 = input.LA(1);
+						int LA193_268 = input.LA(1);
 						 
-						int index193_94 = input.index();
+						int index193_268 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_94);
+						input.seek(index193_268);
 						if ( s>=0 ) return s;
 						break;
 
@@ -19438,28 +19438,28 @@
 						break;
 
 					case 412 : 
-						int LA193_656 = input.LA(1);
+						int LA193_94 = input.LA(1);
 						 
-						int index193_656 = input.index();
+						int index193_94 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_656);
+						input.seek(index193_94);
 						if ( s>=0 ) return s;
 						break;
 
 					case 413 : 
-						int LA193_761 = input.LA(1);
+						int LA193_753 = input.LA(1);
 						 
-						int index193_761 = input.index();
+						int index193_753 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_761);
+						input.seek(index193_753);
 						if ( s>=0 ) return s;
 						break;
 
@@ -19490,19 +19490,6 @@
 						break;
 
 					case 416 : 
-						int LA193_268 = input.LA(1);
-						 
-						int index193_268 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_268);
-						if ( s>=0 ) return s;
-						break;
-
-					case 417 : 
 						int LA193_276 = input.LA(1);
 						 
 						int index193_276 = input.index();
@@ -19515,33 +19502,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 418 : 
-						int LA193_525 = input.LA(1);
-						 
-						int index193_525 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_525);
-						if ( s>=0 ) return s;
-						break;
-
-					case 419 : 
-						int LA193_753 = input.LA(1);
-						 
-						int index193_753 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_753);
-						if ( s>=0 ) return s;
-						break;
-
-					case 420 : 
+					case 417 : 
 						int LA193_383 = input.LA(1);
 						 
 						int index193_383 = input.index();
@@ -19554,20 +19515,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 421 : 
-						int LA193_648 = input.LA(1);
-						 
-						int index193_648 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_648);
-						if ( s>=0 ) return s;
-						break;
-
-					case 422 : 
+					case 418 : 
 						int LA193_391 = input.LA(1);
 						 
 						int index193_391 = input.index();
@@ -19580,7 +19528,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 423 : 
+					case 419 : 
+						int LA193_525 = input.LA(1);
+						 
+						int index193_525 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_525);
+						if ( s>=0 ) return s;
+						break;
+
+					case 420 : 
+						int LA193_656 = input.LA(1);
+						 
+						int index193_656 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_656);
+						if ( s>=0 ) return s;
+						break;
+
+					case 421 : 
 						int LA193_517 = input.LA(1);
 						 
 						int index193_517 = input.index();
@@ -19593,6 +19567,32 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 422 : 
+						int LA193_648 = input.LA(1);
+						 
+						int index193_648 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_648);
+						if ( s>=0 ) return s;
+						break;
+
+					case 423 : 
+						int LA193_761 = input.LA(1);
+						 
+						int index193_761 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_761);
+						if ( s>=0 ) return s;
+						break;
+
 					case 424 : 
 						int LA193_96 = input.LA(1);
 						 
@@ -19620,19 +19620,6 @@
 						break;
 
 					case 426 : 
-						int LA193_650 = input.LA(1);
-						 
-						int index193_650 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_650);
-						if ( s>=0 ) return s;
-						break;
-
-					case 427 : 
 						int LA193_144 = input.LA(1);
 						 
 						int index193_144 = input.index();
@@ -19645,46 +19632,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 428 : 
-						int LA193_151 = input.LA(1);
-						 
-						int index193_151 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_151);
-						if ( s>=0 ) return s;
-						break;
-
-					case 429 : 
-						int LA193_270 = input.LA(1);
-						 
-						int index193_270 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_270);
-						if ( s>=0 ) return s;
-						break;
-
-					case 430 : 
-						int LA193_527 = input.LA(1);
-						 
-						int index193_527 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred7_Css3()) ) {s = 183;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_527);
-						if ( s>=0 ) return s;
-						break;
-
-					case 431 : 
+					case 427 : 
 						int LA193_755 = input.LA(1);
 						 
 						int index193_755 = input.index();
@@ -19697,33 +19645,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 432 : 
-						int LA193_278 = input.LA(1);
+					case 428 : 
+						int LA193_763 = input.LA(1);
 						 
-						int index193_278 = input.index();
+						int index193_763 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_278);
+						input.seek(index193_763);
 						if ( s>=0 ) return s;
 						break;
 
-					case 433 : 
-						int LA193_385 = input.LA(1);
+					case 429 : 
+						int LA193_151 = input.LA(1);
 						 
-						int index193_385 = input.index();
+						int index193_151 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_385);
+						input.seek(index193_151);
 						if ( s>=0 ) return s;
 						break;
 
-					case 434 : 
+					case 430 : 
 						int LA193_658 = input.LA(1);
 						 
 						int index193_658 = input.index();
@@ -19736,16 +19684,68 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 435 : 
-						int LA193_763 = input.LA(1);
+					case 431 : 
+						int LA193_527 = input.LA(1);
 						 
-						int index193_763 = input.index();
+						int index193_527 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred7_Css3()) ) {s = 183;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_763);
+						input.seek(index193_527);
+						if ( s>=0 ) return s;
+						break;
+
+					case 432 : 
+						int LA193_270 = input.LA(1);
+						 
+						int index193_270 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_270);
+						if ( s>=0 ) return s;
+						break;
+
+					case 433 : 
+						int LA193_278 = input.LA(1);
+						 
+						int index193_278 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_278);
+						if ( s>=0 ) return s;
+						break;
+
+					case 434 : 
+						int LA193_650 = input.LA(1);
+						 
+						int index193_650 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_650);
+						if ( s>=0 ) return s;
+						break;
+
+					case 435 : 
+						int LA193_385 = input.LA(1);
+						 
+						int index193_385 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred7_Css3()) ) {s = 183;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_385);
 						if ( s>=0 ) return s;
 						break;
 
@@ -19969,15 +19969,15 @@
 						break;
 
 					case 453 : 
-						int LA193_411 = input.LA(1);
+						int LA193_206 = input.LA(1);
 						 
-						int index193_411 = input.index();
+						int index193_206 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_411);
+						input.seek(index193_206);
 						if ( s>=0 ) return s;
 						break;
 
@@ -19995,45 +19995,19 @@
 						break;
 
 					case 455 : 
-						int LA193_680 = input.LA(1);
+						int LA193_411 = input.LA(1);
 						 
-						int index193_680 = input.index();
+						int index193_411 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_680);
+						input.seek(index193_411);
 						if ( s>=0 ) return s;
 						break;
 
 					case 456 : 
-						int LA193_711 = input.LA(1);
-						 
-						int index193_711 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_711);
-						if ( s>=0 ) return s;
-						break;
-
-					case 457 : 
-						int LA193_206 = input.LA(1);
-						 
-						int index193_206 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_206);
-						if ( s>=0 ) return s;
-						break;
-
-					case 458 : 
 						int LA193_415 = input.LA(1);
 						 
 						int index193_415 = input.index();
@@ -20046,7 +20020,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 459 : 
+					case 457 : 
 						int LA193_452 = input.LA(1);
 						 
 						int index193_452 = input.index();
@@ -20059,7 +20033,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 460 : 
+					case 458 : 
 						int LA193_545 = input.LA(1);
 						 
 						int index193_545 = input.index();
@@ -20072,20 +20046,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 461 : 
-						int LA193_802 = input.LA(1);
-						 
-						int index193_802 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_802);
-						if ( s>=0 ) return s;
-						break;
-
-					case 462 : 
+					case 459 : 
 						int LA193_549 = input.LA(1);
 						 
 						int index193_549 = input.index();
@@ -20098,6 +20059,45 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 460 : 
+						int LA193_680 = input.LA(1);
+						 
+						int index193_680 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_680);
+						if ( s>=0 ) return s;
+						break;
+
+					case 461 : 
+						int LA193_831 = input.LA(1);
+						 
+						int index193_831 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_831);
+						if ( s>=0 ) return s;
+						break;
+
+					case 462 : 
+						int LA193_781 = input.LA(1);
+						 
+						int index193_781 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_781);
+						if ( s>=0 ) return s;
+						break;
+
 					case 463 : 
 						int LA193_586 = input.LA(1);
 						 
@@ -20112,28 +20112,28 @@
 						break;
 
 					case 464 : 
-						int LA193_831 = input.LA(1);
+						int LA193_802 = input.LA(1);
 						 
-						int index193_831 = input.index();
+						int index193_802 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_831);
+						input.seek(index193_802);
 						if ( s>=0 ) return s;
 						break;
 
 					case 465 : 
-						int LA193_781 = input.LA(1);
+						int LA193_711 = input.LA(1);
 						 
-						int index193_781 = input.index();
+						int index193_711 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_781);
+						input.seek(index193_711);
 						if ( s>=0 ) return s;
 						break;
 
@@ -20164,15 +20164,15 @@
 						break;
 
 					case 468 : 
-						int LA193_207 = input.LA(1);
+						int LA193_453 = input.LA(1);
 						 
-						int index193_207 = input.index();
+						int index193_453 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_207);
+						input.seek(index193_453);
 						if ( s>=0 ) return s;
 						break;
 
@@ -20190,15 +20190,15 @@
 						break;
 
 					case 470 : 
-						int LA193_782 = input.LA(1);
+						int LA193_207 = input.LA(1);
 						 
-						int index193_782 = input.index();
+						int index193_207 = input.index();
 						input.rewind();
 						s = -1;
 						if ( (synpred10_Css3()) ) {s = 316;}
 						else if ( (true) ) {s = 12;}
 						 
-						input.seek(index193_782);
+						input.seek(index193_207);
 						if ( s>=0 ) return s;
 						break;
 
@@ -20216,32 +20216,6 @@
 						break;
 
 					case 472 : 
-						int LA193_681 = input.LA(1);
-						 
-						int index193_681 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_681);
-						if ( s>=0 ) return s;
-						break;
-
-					case 473 : 
-						int LA193_778 = input.LA(1);
-						 
-						int index193_778 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_778);
-						if ( s>=0 ) return s;
-						break;
-
-					case 474 : 
 						int LA193_412 = input.LA(1);
 						 
 						int index193_412 = input.index();
@@ -20254,20 +20228,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 475 : 
-						int LA193_832 = input.LA(1);
-						 
-						int index193_832 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_832);
-						if ( s>=0 ) return s;
-						break;
-
-					case 476 : 
+					case 473 : 
 						int LA193_416 = input.LA(1);
 						 
 						int index193_416 = input.index();
@@ -20280,20 +20241,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 477 : 
-						int LA193_453 = input.LA(1);
-						 
-						int index193_453 = input.index();
-						input.rewind();
-						s = -1;
-						if ( (synpred10_Css3()) ) {s = 316;}
-						else if ( (true) ) {s = 12;}
-						 
-						input.seek(index193_453);
-						if ( s>=0 ) return s;
-						break;
-
-					case 478 : 
+					case 474 : 
 						int LA193_546 = input.LA(1);
 						 
 						int index193_546 = input.index();
@@ -20306,7 +20254,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 479 : 
+					case 475 : 
 						int LA193_550 = input.LA(1);
 						 
 						int index193_550 = input.index();
@@ -20319,7 +20267,20 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 480 : 
+					case 476 : 
+						int LA193_778 = input.LA(1);
+						 
+						int index193_778 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_778);
+						if ( s>=0 ) return s;
+						break;
+
+					case 477 : 
 						int LA193_587 = input.LA(1);
 						 
 						int index193_587 = input.index();
@@ -20332,7 +20293,33 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 481 : 
+					case 478 : 
+						int LA193_832 = input.LA(1);
+						 
+						int index193_832 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_832);
+						if ( s>=0 ) return s;
+						break;
+
+					case 479 : 
+						int LA193_782 = input.LA(1);
+						 
+						int index193_782 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_782);
+						if ( s>=0 ) return s;
+						break;
+
+					case 480 : 
 						int LA193_677 = input.LA(1);
 						 
 						int index193_677 = input.index();
@@ -20345,7 +20332,7 @@
 						if ( s>=0 ) return s;
 						break;
 
-					case 482 : 
+					case 481 : 
 						int LA193_712 = input.LA(1);
 						 
 						int index193_712 = input.index();
@@ -20358,6 +20345,19 @@
 						if ( s>=0 ) return s;
 						break;
 
+					case 482 : 
+						int LA193_681 = input.LA(1);
+						 
+						int index193_681 = input.index();
+						input.rewind();
+						s = -1;
+						if ( (synpred10_Css3()) ) {s = 316;}
+						else if ( (true) ) {s = 12;}
+						 
+						input.seek(index193_681);
+						if ( s>=0 ) return s;
+						break;
+
 					case 483 : 
 						int LA193_794 = input.LA(1);
 						 
diff --git a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Parser.java b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Parser.java
index 1b9867f..d0a94dc 100644
--- a/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Parser.java
+++ b/ide/css.lib/src/org/netbeans/modules/css/lib/Css3Parser.java
@@ -1,4 +1,4 @@
-// $ANTLR 3.5.2 /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g 2022-02-19 22:48:20
+// $ANTLR 3.5.2 /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g 2022-12-23 21:32:11
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -226,52 +226,52 @@
 
 
 	public static final String[] ruleNames = new String[] {
-		"invalidRule", "synpred11_Css3", "synpred10_Css3", "webkitKeyframeSelectors", 
-		"cssClass", "prio", "less_condition", "supportsDisjunction", "mediaExpression", 
-		"less_when", "synpred39_Css3", "term", "cp_mixin_call_args", "fnAttributeName", 
-		"synpred35_Css3", "declaration", "cp_expression_atom", "namespacePrefix", 
-		"cp_mixin_call", "synpred28_Css3", "sass_debug", "sass_forward_as", "synpred45_Css3", 
-		"synpred38_Css3", "synpred23_Css3", "synpred2_Css3", "sass_forward_show", 
-		"importItem", "webkitKeyframes", "synpred47_Css3", "sass_control_block", 
-		"supportsWithOperator", "supportsCondition", "less_condition_operator", 
-		"mediaQueryOperator", "slAttributeName", "synpred18_Css3", "property", 
-		"hexColor", "cp_variable_declaration", "sass_control_expression", "supportsInParens", 
-		"synpred17_Css3", "key_only", "syncTo_SEMI", "synpred32_Css3", "synpred41_Css3", 
-		"sass_function_name", "synpred5_Css3", "cp_arg", "cp_variable", "supportsFeature", 
-		"cp_term_symbol", "cp_propertyValue", "synpred27_Css3", "synpred29_Css3", 
-		"fnAttributes", "synpred15_Css3", "rule", "charSet", "margin", "mediaType", 
-		"syncToDeclarationsRule", "fnAttribute", "declarations", "sass_for", "synpred22_Css3", 
-		"supportsDecl", "supportsAtRule", "sass_map_name", "synpred4_Css3", "imports", 
-		"functionName", "mediaBody", "synpred48_Css3", "expressionPredicate", 
-		"namespacePrefixName", "media", "less_function_in_condition", "mediaFeatureValue", 
-		"key_or", "synpred43_Css3", "cp_mixin_name", "syncTo_RBRACE", "synpred8_Css3", 
-		"synpred49_Css3", "propertyDeclaration", "sass_while", "margin_sym", "at_rule", 
-		"esPred", "sass_each_variables", "synpred31_Css3", "mediaQuery", "webkitKeyframesBlock", 
-		"sass_error", "synpred12_Css3", "selectorsGroup", "moz_document", "synpred1_Css3", 
-		"less_selector_interpolation_exp", "less_mixin_guarded", "synpred6_Css3", 
-		"cp_math_expression_atom", "synpred14_Css3", "sass_use", "cp_math_expressions", 
-		"slAttribute", "synpred42_Css3", "fontFace", "sass_forward_hide", "synpred9_Css3", 
-		"synpred52_Css3", "namespaces", "synpred51_Css3", "operator", "page", 
-		"synpred30_Css3", "function", "body", "unaryOperator", "synpred26_Css3", 
-		"sass_control", "supportsConjunction", "simpleSelectorSequence", "less_fn_name", 
-		"mediaBodyItem", "mediaQueryList", "syncToFollow", "sass_selector_interpolation_exp", 
-		"cp_expression_list", "styleSheet", "sass_forward_with_declaration", "mediaFeature", 
-		"sass_nested_properties", "cp_args_list", "slAttributeValue", "synpred40_Css3", 
-		"synpred3_Css3", "cssId", "cp_mixin_declaration", "moz_document_function", 
-		"sass_map_pair", "sass_extend_only_selector", "sass_if", "expression", 
-		"cp_math_expression", "cp_mixin_call_arg", "synpred19_Css3", "sass_map_pairs", 
-		"synpred21_Css3", "pseudo", "sass_each", "sass_else", "bodyItem", "typeSelector", 
-		"ws", "synpred50_Css3", "synpred25_Css3", "sass_function_declaration", 
-		"less_selector_interpolation", "charSetValue", "sass_extend", "sass_use_with", 
-		"synpred33_Css3", "synpred46_Css3", "sass_interpolation_expression_var", 
-		"synpred37_Css3", "sass_forward_with", "synpred16_Css3", "sass_content", 
-		"elementName", "cp_mixin_block", "cp_expression", "sass_use_as", "atRuleId", 
-		"synpred34_Css3", "synpred36_Css3", "vendorAtRule", "fnAttributeValue", 
-		"cp_expression_operator", "synpred20_Css3", "sass_map", "synpred44_Css3", 
-		"namespace", "sass_forward", "key_and", "resourceIdentifier", "generic_at_rule", 
-		"synpred7_Css3", "synpred24_Css3", "selector", "propertyValue", "counterStyle", 
-		"combinator", "less_import_types", "synpred13_Css3", "sass_use_with_declaration", 
-		"elementSubsequent", "sass_function_return", "pseudoPage"
+		"invalidRule", "sass_forward_show", "synpred9_Css3", "webkitKeyframesBlock", 
+		"importItem", "less_mixin_guarded", "synpred3_Css3", "synpred38_Css3", 
+		"declaration", "esPred", "cp_math_expression_atom", "cp_mixin_name", "cp_term_symbol", 
+		"supportsDecl", "synpred27_Css3", "synpred40_Css3", "supportsAtRule", 
+		"simpleSelectorSequence", "sass_use_with_declaration", "fnAttributeValue", 
+		"synpred37_Css3", "sass_use_with", "synpred22_Css3", "synpred46_Css3", 
+		"cp_variable", "sass_each_variables", "synpred48_Css3", "supportsInParens", 
+		"mediaFeature", "less_fn_name", "selector", "counterStyle", "page", "synpred17_Css3", 
+		"synpred16_Css3", "sass_function_declaration", "synpred11_Css3", "sass_map_name", 
+		"synpred5_Css3", "mediaQueryOperator", "pseudo", "less_when", "synpred31_Css3", 
+		"sass_debug", "styleSheet", "sass_control_block", "syncTo_RBRACE", "property", 
+		"cp_args_list", "slAttributeValue", "key_and", "synpred28_Css3", "prio", 
+		"synpred14_Css3", "less_selector_interpolation", "synpred52_Css3", "sass_nested_properties", 
+		"fnAttributes", "synpred26_Css3", "cp_mixin_declaration", "less_selector_interpolation_exp", 
+		"sass_extend_only_selector", "cp_expression_atom", "supportsFeature", 
+		"sass_map", "elementName", "function", "sass_forward_as", "expression", 
+		"sass_selector_interpolation_exp", "sass_map_pairs", "declarations", "cp_expression_list", 
+		"elementSubsequent", "cssId", "synpred42_Css3", "namespaces", "at_rule", 
+		"mediaBody", "sass_if", "supportsDisjunction", "body", "fnAttributeName", 
+		"cp_mixin_block", "imports", "bodyItem", "cp_mixin_call_arg", "synpred7_Css3", 
+		"margin", "synpred32_Css3", "functionName", "sass_control_expression", 
+		"synpred30_Css3", "mediaQueryList", "moz_document_function", "sass_use_as", 
+		"vendorAtRule", "sass_map_pair", "cp_propertyValue", "syncToDeclarationsRule", 
+		"term", "synpred34_Css3", "cp_math_expression", "synpred13_Css3", "synpred41_Css3", 
+		"rule", "sass_forward_with_declaration", "synpred51_Css3", "slAttribute", 
+		"cp_expression_operator", "pseudoPage", "mediaType", "synpred29_Css3", 
+		"key_only", "synpred8_Css3", "mediaExpression", "operator", "synpred2_Css3", 
+		"synpred25_Css3", "atRuleId", "webkitKeyframes", "supportsWithOperator", 
+		"fontFace", "sass_use", "less_function_in_condition", "sass_extend", "synpred12_Css3", 
+		"expressionPredicate", "charSet", "less_condition", "syncTo_SEMI", "synpred10_Css3", 
+		"cp_variable_declaration", "webkitKeyframeSelectors", "mediaBodyItem", 
+		"synpred15_Css3", "synpred44_Css3", "slAttributeName", "synpred39_Css3", 
+		"sass_content", "fnAttribute", "sass_while", "combinator", "sass_forward_with", 
+		"synpred47_Css3", "mediaQuery", "synpred36_Css3", "cp_expression", "sass_control", 
+		"propertyValue", "moz_document", "cssClass", "cp_mixin_call_args", "synpred1_Css3", 
+		"namespacePrefixName", "synpred18_Css3", "unaryOperator", "synpred20_Css3", 
+		"propertyDeclaration", "hexColor", "synpred50_Css3", "less_condition_operator", 
+		"sass_for", "synpred49_Css3", "synpred24_Css3", "namespacePrefix", "syncToFollow", 
+		"sass_error", "cp_mixin_call", "resourceIdentifier", "mediaFeatureValue", 
+		"sass_each", "cp_math_expressions", "charSetValue", "synpred4_Css3", "synpred33_Css3", 
+		"sass_interpolation_expression_var", "sass_function_return", "less_import_types", 
+		"synpred19_Css3", "cp_arg", "media", "ws", "synpred43_Css3", "supportsCondition", 
+		"supportsConjunction", "synpred6_Css3", "sass_forward", "synpred23_Css3", 
+		"selectorsGroup", "synpred45_Css3", "synpred21_Css3", "sass_function_name", 
+		"typeSelector", "sass_else", "synpred35_Css3", "namespace", "margin_sym", 
+		"sass_forward_hide", "generic_at_rule", "key_or"
 	};
 
 	public static final boolean[] decisionCanBacktrack = new boolean[] {
@@ -640,15 +640,31 @@
 			try { dbg.enterSubRule(4);
 			try { dbg.enterDecision(4, decisionCanBacktrack[4]);
 
-			int LA4_0 = input.LA(1);
-			if ( (LA4_0==IMPORT_SYM) ) {
-				int LA4_1 = input.LA(2);
-				if ( (!(evalPredicate(((evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")&&evalPredicate(isLessSource(),"isLessSource()"))||evalPredicate(isLessSource(),"isLessSource()")||evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")||(evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")&&evalPredicate(isScssSource(),"isScssSource()"))),""))) ) {
-					alt4=1;
-				}
-			}
-			else if ( (LA4_0==SASS_FORWARD||LA4_0==SASS_USE) ) {
-				alt4=1;
+			switch ( input.LA(1) ) {
+				case IMPORT_SYM:
+					{
+					int LA4_1 = input.LA(2);
+					if ( (!(evalPredicate(((evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")&&evalPredicate(isLessSource(),"isLessSource()"))||evalPredicate(isLessSource(),"isLessSource()")||evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")||(evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()")&&evalPredicate(isScssSource(),"isScssSource()"))),""))) ) {
+						alt4=1;
+					}
+					}
+					break;
+				case SASS_USE:
+					{
+					int LA4_2 = input.LA(2);
+					if ( (evalPredicate(isScssSource(),"isScssSource()")) ) {
+						alt4=1;
+					}
+					}
+					break;
+				case SASS_FORWARD:
+					{
+					int LA4_3 = input.LA(2);
+					if ( (evalPredicate(isScssSource(),"isScssSource()")) ) {
+						alt4=1;
+					}
+					}
+					break;
 			}
 			} finally {dbg.exitDecision(4);}
 
@@ -707,7 +723,7 @@
 			try { dbg.enterDecision(6, decisionCanBacktrack[6]);
 
 			int LA6_0 = input.LA(1);
-			if ( ((LA6_0 >= AT_IDENT && LA6_0 <= AT_SIGN)||(LA6_0 >= BOTTOMCENTER_SYM && LA6_0 <= BOTTOMRIGHT_SYM)||(LA6_0 >= CHARSET_SYM && LA6_0 <= COLON)||LA6_0==COUNTER_STYLE_SYM||(LA6_0 >= DCOLON && LA6_0 <= DOT)||LA6_0==FONT_FACE_SYM||(LA6_0 >= GEN && LA6_0 <= GREATER)||(LA6_0 >= HASH && LA6_0 <= HASH_SYMBOL)||LA6_0==IDENT||LA6_0==IMPORT_SYM||(LA6_0 >= LBRACKET && LA6_0 <= LEFTTOP_SYM)||LA6_0==LESS_AND||(LA6_0 >= MEDIA_SYM && LA6_0 <= MOZ_DOCUMENT_SYM)||LA6_0==NAMESPACE_SYM||LA6_0==PAGE_SYM||(LA6_0 >= PIPE && LA6_0 <= PLUS)||(LA6_0 >= RIGHTBOTTOM_SYM && LA6_0 <= RIGHTTOP_SYM)||(LA6_0 >= SASS_AT_ROOT && LA6_0 <= SASS_DEBUG)||(LA6_0 >= SASS_EACH && LA6_0 <= SASS_ELSE)||(LA6_0 >= SASS_EXTEND && LA6_0 <= SASS_FOR)||LA6_0==SASS_FUNCTION||(LA6_0 >= SASS_IF && LA6_0 <= SASS_MIXIN)||LA6_0==SASS_RETURN||(LA6_0 >= SASS_VAR && LA6_0 <= SEMI)||LA6_0==STAR||LA6_0==SUPPORTS_SYM||LA6_0==TILDE||(LA6_0 >= TOPCENTER_SYM && LA6_0 <= TOPRIGHT_SYM)||LA6_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA6_0 >= AT_IDENT && LA6_0 <= AT_SIGN)||(LA6_0 >= BOTTOMCENTER_SYM && LA6_0 <= BOTTOMRIGHT_SYM)||(LA6_0 >= CHARSET_SYM && LA6_0 <= COLON)||LA6_0==COUNTER_STYLE_SYM||(LA6_0 >= DCOLON && LA6_0 <= DOT)||LA6_0==FONT_FACE_SYM||(LA6_0 >= GEN && LA6_0 <= GREATER)||(LA6_0 >= HASH && LA6_0 <= HASH_SYMBOL)||LA6_0==IDENT||LA6_0==IMPORT_SYM||(LA6_0 >= LBRACKET && LA6_0 <= LEFTTOP_SYM)||LA6_0==LESS_AND||(LA6_0 >= MEDIA_SYM && LA6_0 <= MOZ_DOCUMENT_SYM)||LA6_0==NAMESPACE_SYM||LA6_0==PAGE_SYM||(LA6_0 >= PIPE && LA6_0 <= PLUS)||(LA6_0 >= RIGHTBOTTOM_SYM && LA6_0 <= RIGHTTOP_SYM)||(LA6_0 >= SASS_AT_ROOT && LA6_0 <= SASS_DEBUG)||(LA6_0 >= SASS_EACH && LA6_0 <= SASS_ELSE)||(LA6_0 >= SASS_EXTEND && LA6_0 <= SASS_FUNCTION)||(LA6_0 >= SASS_IF && LA6_0 <= SASS_MIXIN)||(LA6_0 >= SASS_RETURN && LA6_0 <= SEMI)||LA6_0==STAR||LA6_0==SUPPORTS_SYM||LA6_0==TILDE||(LA6_0 >= TOPCENTER_SYM && LA6_0 <= TOPRIGHT_SYM)||LA6_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt6=1;
 			}
 			} finally {dbg.exitDecision(6);}
@@ -1255,7 +1271,7 @@
 
 
 	// $ANTLR start "imports"
-	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:316:1: imports : ( ( importItem ( ws )? SEMI ( ws )? ) | ( sass_use ( ws )? SEMI ( ws )? ) | ( sass_forward ( ws )? SEMI ( ws )? ) )+ ;
+	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:316:1: imports : ( ( importItem ( ws )? SEMI ( ws )? ) |{...}? ( sass_use ( ws )? SEMI ( ws )? ) |{...}? ( sass_forward ( ws )? SEMI ( ws )? ) )+ ;
 	public final void imports() throws RecognitionException {
 		try { dbg.enterRule(getGrammarFileName(), "imports");
 		if ( getRuleLevel()==0 ) {dbg.commence();}
@@ -1263,13 +1279,13 @@
 		dbg.location(316, 0);
 
 		try {
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:317:2: ( ( ( importItem ( ws )? SEMI ( ws )? ) | ( sass_use ( ws )? SEMI ( ws )? ) | ( sass_forward ( ws )? SEMI ( ws )? ) )+ )
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:317:2: ( ( ( importItem ( ws )? SEMI ( ws )? ) |{...}? ( sass_use ( ws )? SEMI ( ws )? ) |{...}? ( sass_forward ( ws )? SEMI ( ws )? ) )+ )
 			dbg.enterAlt(1);
 
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:318:2: ( ( importItem ( ws )? SEMI ( ws )? ) | ( sass_use ( ws )? SEMI ( ws )? ) | ( sass_forward ( ws )? SEMI ( ws )? ) )+
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:318:2: ( ( importItem ( ws )? SEMI ( ws )? ) |{...}? ( sass_use ( ws )? SEMI ( ws )? ) |{...}? ( sass_forward ( ws )? SEMI ( ws )? ) )+
 			{
 			dbg.location(318,2);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:318:2: ( ( importItem ( ws )? SEMI ( ws )? ) | ( sass_use ( ws )? SEMI ( ws )? ) | ( sass_forward ( ws )? SEMI ( ws )? ) )+
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:318:2: ( ( importItem ( ws )? SEMI ( ws )? ) |{...}? ( sass_use ( ws )? SEMI ( ws )? ) |{...}? ( sass_forward ( ws )? SEMI ( ws )? ) )+
 			int cnt21=0;
 			try { dbg.enterSubRule(21);
 
@@ -1290,12 +1306,20 @@
 					break;
 				case SASS_USE:
 					{
-					alt21=2;
+					int LA21_36 = input.LA(2);
+					if ( (evalPredicate(isScssSource(),"isScssSource()")) ) {
+						alt21=2;
+					}
+
 					}
 					break;
 				case SASS_FORWARD:
 					{
-					alt21=3;
+					int LA21_39 = input.LA(2);
+					if ( (evalPredicate(isScssSource(),"isScssSource()")) ) {
+						alt21=3;
+					}
+
 					}
 					break;
 				}
@@ -1382,20 +1406,24 @@
 				case 2 :
 					dbg.enterAlt(2);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:13: ( sass_use ( ws )? SEMI ( ws )? )
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:13: {...}? ( sass_use ( ws )? SEMI ( ws )? )
 					{
 					dbg.location(321,13);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:13: ( sass_use ( ws )? SEMI ( ws )? )
+					if ( !(evalPredicate(isScssSource(),"isScssSource()")) ) {
+						if (state.backtracking>0) {state.failed=true; return;}
+						throw new FailedPredicateException(input, "imports", "isScssSource()");
+					}dbg.location(321,31);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:31: ( sass_use ( ws )? SEMI ( ws )? )
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:15: sass_use ( ws )? SEMI ( ws )?
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:33: sass_use ( ws )? SEMI ( ws )?
 					{
-					dbg.location(321,15);
-					pushFollow(FOLLOW_sass_use_in_imports347);
+					dbg.location(321,33);
+					pushFollow(FOLLOW_sass_use_in_imports349);
 					sass_use();
 					state._fsp--;
-					if (state.failed) return;dbg.location(321,24);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:24: ( ws )?
+					if (state.failed) return;dbg.location(321,42);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:42: ( ws )?
 					int alt17=2;
 					try { dbg.enterSubRule(17);
 					try { dbg.enterDecision(17, decisionCanBacktrack[17]);
@@ -1410,10 +1438,10 @@
 						case 1 :
 							dbg.enterAlt(1);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:24: ws
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:42: ws
 							{
-							dbg.location(321,24);
-							pushFollow(FOLLOW_ws_in_imports349);
+							dbg.location(321,42);
+							pushFollow(FOLLOW_ws_in_imports351);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1422,9 +1450,9 @@
 
 					}
 					} finally {dbg.exitSubRule(17);}
-					dbg.location(321,28);
-					match(input,SEMI,FOLLOW_SEMI_in_imports352); if (state.failed) return;dbg.location(321,33);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:33: ( ws )?
+					dbg.location(321,46);
+					match(input,SEMI,FOLLOW_SEMI_in_imports354); if (state.failed) return;dbg.location(321,51);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:51: ( ws )?
 					int alt18=2;
 					try { dbg.enterSubRule(18);
 					try { dbg.enterDecision(18, decisionCanBacktrack[18]);
@@ -1439,10 +1467,10 @@
 						case 1 :
 							dbg.enterAlt(1);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:33: ws
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:321:51: ws
 							{
-							dbg.location(321,33);
-							pushFollow(FOLLOW_ws_in_imports354);
+							dbg.location(321,51);
+							pushFollow(FOLLOW_ws_in_imports356);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1459,20 +1487,24 @@
 				case 3 :
 					dbg.enterAlt(3);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:13: ( sass_forward ( ws )? SEMI ( ws )? )
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:13: {...}? ( sass_forward ( ws )? SEMI ( ws )? )
 					{
 					dbg.location(323,13);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:13: ( sass_forward ( ws )? SEMI ( ws )? )
+					if ( !(evalPredicate(isScssSource(),"isScssSource()")) ) {
+						if (state.backtracking>0) {state.failed=true; return;}
+						throw new FailedPredicateException(input, "imports", "isScssSource()");
+					}dbg.location(323,31);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:31: ( sass_forward ( ws )? SEMI ( ws )? )
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:15: sass_forward ( ws )? SEMI ( ws )?
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:33: sass_forward ( ws )? SEMI ( ws )?
 					{
-					dbg.location(323,15);
-					pushFollow(FOLLOW_sass_forward_in_imports387);
+					dbg.location(323,33);
+					pushFollow(FOLLOW_sass_forward_in_imports391);
 					sass_forward();
 					state._fsp--;
-					if (state.failed) return;dbg.location(323,28);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:28: ( ws )?
+					if (state.failed) return;dbg.location(323,46);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:46: ( ws )?
 					int alt19=2;
 					try { dbg.enterSubRule(19);
 					try { dbg.enterDecision(19, decisionCanBacktrack[19]);
@@ -1487,10 +1519,10 @@
 						case 1 :
 							dbg.enterAlt(1);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:28: ws
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:46: ws
 							{
-							dbg.location(323,28);
-							pushFollow(FOLLOW_ws_in_imports389);
+							dbg.location(323,46);
+							pushFollow(FOLLOW_ws_in_imports393);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1499,9 +1531,9 @@
 
 					}
 					} finally {dbg.exitSubRule(19);}
-					dbg.location(323,32);
-					match(input,SEMI,FOLLOW_SEMI_in_imports392); if (state.failed) return;dbg.location(323,37);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:37: ( ws )?
+					dbg.location(323,50);
+					match(input,SEMI,FOLLOW_SEMI_in_imports396); if (state.failed) return;dbg.location(323,55);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:55: ( ws )?
 					int alt20=2;
 					try { dbg.enterSubRule(20);
 					try { dbg.enterDecision(20, decisionCanBacktrack[20]);
@@ -1516,10 +1548,10 @@
 						case 1 :
 							dbg.enterAlt(1);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:37: ws
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:323:55: ws
 							{
-							dbg.location(323,37);
-							pushFollow(FOLLOW_ws_in_imports394);
+							dbg.location(323,55);
+							pushFollow(FOLLOW_ws_in_imports398);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1600,7 +1632,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:329:9: IMPORT_SYM ( ws )? resourceIdentifier ( ( ( ws )? mediaQueryList )=> ( ws )? mediaQueryList )?
 					{
 					dbg.location(329,9);
-					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem430); if (state.failed) return;dbg.location(329,20);
+					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem434); if (state.failed) return;dbg.location(329,20);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:329:20: ( ws )?
 					int alt22=2;
 					try { dbg.enterSubRule(22);
@@ -1619,7 +1651,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:329:20: ws
 							{
 							dbg.location(329,20);
-							pushFollow(FOLLOW_ws_in_importItem432);
+							pushFollow(FOLLOW_ws_in_importItem436);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1629,7 +1661,7 @@
 					}
 					} finally {dbg.exitSubRule(22);}
 					dbg.location(329,24);
-					pushFollow(FOLLOW_resourceIdentifier_in_importItem435);
+					pushFollow(FOLLOW_resourceIdentifier_in_importItem439);
 					resourceIdentifier();
 					state._fsp--;
 					if (state.failed) return;dbg.location(329,43);
@@ -1789,7 +1821,7 @@
 							alt24=1;
 						}
 					}
-					else if ( ((LA24_0 >= BOTTOMCENTER_SYM && LA24_0 <= BOTTOMRIGHT_SYM)||LA24_0==CHARSET_SYM||(LA24_0 >= LEFTBOTTOM_SYM && LA24_0 <= LEFTTOP_SYM)||LA24_0==NAMESPACE_SYM||(LA24_0 >= RIGHTBOTTOM_SYM && LA24_0 <= RIGHTTOP_SYM)||LA24_0==SASS_ELSE||LA24_0==SASS_RETURN||(LA24_0 >= TOPCENTER_SYM && LA24_0 <= TOPRIGHT_SYM)) ) {
+					else if ( ((LA24_0 >= BOTTOMCENTER_SYM && LA24_0 <= BOTTOMRIGHT_SYM)||LA24_0==CHARSET_SYM||(LA24_0 >= LEFTBOTTOM_SYM && LA24_0 <= LEFTTOP_SYM)||LA24_0==NAMESPACE_SYM||(LA24_0 >= RIGHTBOTTOM_SYM && LA24_0 <= RIGHTTOP_SYM)||LA24_0==SASS_ELSE||LA24_0==SASS_FORWARD||(LA24_0 >= SASS_RETURN && LA24_0 <= SASS_USE)||(LA24_0 >= TOPCENTER_SYM && LA24_0 <= TOPRIGHT_SYM)) ) {
 						int LA24_44 = input.LA(2);
 						if ( ((synpred1_Css3()&&evalPredicate(isLessSource(),"isLessSource()"))) ) {
 							alt24=1;
@@ -1822,7 +1854,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:329:66: ws
 									{
 									dbg.location(329,66);
-									pushFollow(FOLLOW_ws_in_importItem445);
+									pushFollow(FOLLOW_ws_in_importItem449);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -1832,7 +1864,7 @@
 							}
 							} finally {dbg.exitSubRule(23);}
 							dbg.location(329,70);
-							pushFollow(FOLLOW_mediaQueryList_in_importItem448);
+							pushFollow(FOLLOW_mediaQueryList_in_importItem452);
 							mediaQueryList();
 							state._fsp--;
 							if (state.failed) return;
@@ -1854,7 +1886,7 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "importItem", "isScssSource()");
 					}dbg.location(332,27);
-					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem481); if (state.failed) return;dbg.location(332,38);
+					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem485); if (state.failed) return;dbg.location(332,38);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:38: ( ws )?
 					int alt25=2;
 					try { dbg.enterSubRule(25);
@@ -1873,7 +1905,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:38: ws
 							{
 							dbg.location(332,38);
-							pushFollow(FOLLOW_ws_in_importItem483);
+							pushFollow(FOLLOW_ws_in_importItem487);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -1883,7 +1915,7 @@
 					}
 					} finally {dbg.exitSubRule(25);}
 					dbg.location(332,42);
-					pushFollow(FOLLOW_resourceIdentifier_in_importItem486);
+					pushFollow(FOLLOW_resourceIdentifier_in_importItem490);
 					resourceIdentifier();
 					state._fsp--;
 					if (state.failed) return;dbg.location(332,61);
@@ -1930,7 +1962,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:62: ws
 									{
 									dbg.location(332,62);
-									pushFollow(FOLLOW_ws_in_importItem489);
+									pushFollow(FOLLOW_ws_in_importItem493);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -1940,7 +1972,7 @@
 							}
 							} finally {dbg.exitSubRule(26);}
 							dbg.location(332,66);
-							match(input,COMMA,FOLLOW_COMMA_in_importItem492); if (state.failed) return;dbg.location(332,72);
+							match(input,COMMA,FOLLOW_COMMA_in_importItem496); if (state.failed) return;dbg.location(332,72);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:72: ( ws )?
 							int alt27=2;
 							try { dbg.enterSubRule(27);
@@ -1959,7 +1991,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:72: ws
 									{
 									dbg.location(332,72);
-									pushFollow(FOLLOW_ws_in_importItem494);
+									pushFollow(FOLLOW_ws_in_importItem498);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -1969,7 +2001,7 @@
 							}
 							} finally {dbg.exitSubRule(27);}
 							dbg.location(332,76);
-							pushFollow(FOLLOW_resourceIdentifier_in_importItem497);
+							pushFollow(FOLLOW_resourceIdentifier_in_importItem501);
 							resourceIdentifier();
 							state._fsp--;
 							if (state.failed) return;
@@ -2138,7 +2170,7 @@
 							alt30=1;
 						}
 					}
-					else if ( ((LA30_0 >= BOTTOMCENTER_SYM && LA30_0 <= BOTTOMRIGHT_SYM)||LA30_0==CHARSET_SYM||(LA30_0 >= LEFTBOTTOM_SYM && LA30_0 <= LEFTTOP_SYM)||LA30_0==NAMESPACE_SYM||(LA30_0 >= RIGHTBOTTOM_SYM && LA30_0 <= RIGHTTOP_SYM)||LA30_0==SASS_ELSE||LA30_0==SASS_RETURN||(LA30_0 >= TOPCENTER_SYM && LA30_0 <= TOPRIGHT_SYM)) ) {
+					else if ( ((LA30_0 >= BOTTOMCENTER_SYM && LA30_0 <= BOTTOMRIGHT_SYM)||LA30_0==CHARSET_SYM||(LA30_0 >= LEFTBOTTOM_SYM && LA30_0 <= LEFTTOP_SYM)||LA30_0==NAMESPACE_SYM||(LA30_0 >= RIGHTBOTTOM_SYM && LA30_0 <= RIGHTTOP_SYM)||LA30_0==SASS_ELSE||LA30_0==SASS_FORWARD||(LA30_0 >= SASS_RETURN && LA30_0 <= SASS_USE)||(LA30_0 >= TOPCENTER_SYM && LA30_0 <= TOPRIGHT_SYM)) ) {
 						int LA30_44 = input.LA(2);
 						if ( ((synpred2_Css3()&&evalPredicate(isLessSource(),"isLessSource()"))) ) {
 							alt30=1;
@@ -2171,7 +2203,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:120: ws
 									{
 									dbg.location(332,120);
-									pushFollow(FOLLOW_ws_in_importItem509);
+									pushFollow(FOLLOW_ws_in_importItem513);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -2181,7 +2213,7 @@
 							}
 							} finally {dbg.exitSubRule(29);}
 							dbg.location(332,124);
-							pushFollow(FOLLOW_mediaQueryList_in_importItem512);
+							pushFollow(FOLLOW_mediaQueryList_in_importItem516);
 							mediaQueryList();
 							state._fsp--;
 							if (state.failed) return;
@@ -2203,7 +2235,7 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "importItem", "isLessSource()");
 					}dbg.location(334,27);
-					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem536); if (state.failed) return;dbg.location(334,38);
+					match(input,IMPORT_SYM,FOLLOW_IMPORT_SYM_in_importItem540); if (state.failed) return;dbg.location(334,38);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:38: ( ws )?
 					int alt31=2;
 					try { dbg.enterSubRule(31);
@@ -2222,7 +2254,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:38: ws
 							{
 							dbg.location(334,38);
-							pushFollow(FOLLOW_ws_in_importItem538);
+							pushFollow(FOLLOW_ws_in_importItem542);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -2250,12 +2282,12 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:43: LPAREN less_import_types RPAREN ( ws )?
 							{
 							dbg.location(334,43);
-							match(input,LPAREN,FOLLOW_LPAREN_in_importItem542); if (state.failed) return;dbg.location(334,50);
-							pushFollow(FOLLOW_less_import_types_in_importItem544);
+							match(input,LPAREN,FOLLOW_LPAREN_in_importItem546); if (state.failed) return;dbg.location(334,50);
+							pushFollow(FOLLOW_less_import_types_in_importItem548);
 							less_import_types();
 							state._fsp--;
 							if (state.failed) return;dbg.location(334,68);
-							match(input,RPAREN,FOLLOW_RPAREN_in_importItem546); if (state.failed) return;dbg.location(334,75);
+							match(input,RPAREN,FOLLOW_RPAREN_in_importItem550); if (state.failed) return;dbg.location(334,75);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:75: ( ws )?
 							int alt32=2;
 							try { dbg.enterSubRule(32);
@@ -2274,7 +2306,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:75: ws
 									{
 									dbg.location(334,75);
-									pushFollow(FOLLOW_ws_in_importItem548);
+									pushFollow(FOLLOW_ws_in_importItem552);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -2290,7 +2322,7 @@
 					}
 					} finally {dbg.exitSubRule(33);}
 					dbg.location(334,81);
-					pushFollow(FOLLOW_resourceIdentifier_in_importItem553);
+					pushFollow(FOLLOW_resourceIdentifier_in_importItem557);
 					resourceIdentifier();
 					state._fsp--;
 					if (state.failed) return;dbg.location(334,100);
@@ -2450,7 +2482,7 @@
 							alt35=1;
 						}
 					}
-					else if ( ((LA35_0 >= BOTTOMCENTER_SYM && LA35_0 <= BOTTOMRIGHT_SYM)||LA35_0==CHARSET_SYM||(LA35_0 >= LEFTBOTTOM_SYM && LA35_0 <= LEFTTOP_SYM)||LA35_0==NAMESPACE_SYM||(LA35_0 >= RIGHTBOTTOM_SYM && LA35_0 <= RIGHTTOP_SYM)||LA35_0==SASS_ELSE||LA35_0==SASS_RETURN||(LA35_0 >= TOPCENTER_SYM && LA35_0 <= TOPRIGHT_SYM)) ) {
+					else if ( ((LA35_0 >= BOTTOMCENTER_SYM && LA35_0 <= BOTTOMRIGHT_SYM)||LA35_0==CHARSET_SYM||(LA35_0 >= LEFTBOTTOM_SYM && LA35_0 <= LEFTTOP_SYM)||LA35_0==NAMESPACE_SYM||(LA35_0 >= RIGHTBOTTOM_SYM && LA35_0 <= RIGHTTOP_SYM)||LA35_0==SASS_ELSE||LA35_0==SASS_FORWARD||(LA35_0 >= SASS_RETURN && LA35_0 <= SASS_USE)||(LA35_0 >= TOPCENTER_SYM && LA35_0 <= TOPRIGHT_SYM)) ) {
 						int LA35_44 = input.LA(2);
 						if ( ((evalPredicate(isLessSource(),"isLessSource()")&&synpred3_Css3())) ) {
 							alt35=1;
@@ -2483,7 +2515,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:123: ws
 									{
 									dbg.location(334,123);
-									pushFollow(FOLLOW_ws_in_importItem563);
+									pushFollow(FOLLOW_ws_in_importItem567);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -2493,7 +2525,7 @@
 							}
 							} finally {dbg.exitSubRule(34);}
 							dbg.location(334,127);
-							pushFollow(FOLLOW_mediaQueryList_in_importItem566);
+							pushFollow(FOLLOW_mediaQueryList_in_importItem570);
 							mediaQueryList();
 							state._fsp--;
 							if (state.failed) return;
@@ -2530,7 +2562,7 @@
 
 
 	// $ANTLR start "sass_use"
-	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:337:1: sass_use :{...}? SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )? ;
+	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:337:1: sass_use : SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )? ;
 	public final void sass_use() throws RecognitionException {
 		try { dbg.enterRule(getGrammarFileName(), "sass_use");
 		if ( getRuleLevel()==0 ) {dbg.commence();}
@@ -2538,26 +2570,22 @@
 		dbg.location(337, 0);
 
 		try {
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:338:5: ({...}? SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )? )
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:338:5: ( SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )? )
 			dbg.enterAlt(1);
 
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:9: {...}? SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )?
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:9: SASS_USE ws resourceIdentifier ( ws sass_use_as )? ( ws sass_use_with )?
 			{
 			dbg.location(339,9);
-			if ( !(evalPredicate(isScssSource(),"isScssSource()")) ) {
-				if (state.backtracking>0) {state.failed=true; return;}
-				throw new FailedPredicateException(input, "sass_use", "isScssSource()");
-			}dbg.location(339,27);
-			match(input,SASS_USE,FOLLOW_SASS_USE_in_sass_use595); if (state.failed) return;dbg.location(339,36);
-			pushFollow(FOLLOW_ws_in_sass_use597);
+			match(input,SASS_USE,FOLLOW_SASS_USE_in_sass_use597); if (state.failed) return;dbg.location(339,18);
+			pushFollow(FOLLOW_ws_in_sass_use599);
 			ws();
 			state._fsp--;
-			if (state.failed) return;dbg.location(339,39);
-			pushFollow(FOLLOW_resourceIdentifier_in_sass_use599);
+			if (state.failed) return;dbg.location(339,21);
+			pushFollow(FOLLOW_resourceIdentifier_in_sass_use601);
 			resourceIdentifier();
 			state._fsp--;
-			if (state.failed) return;dbg.location(339,58);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:58: ( ws sass_use_as )?
+			if (state.failed) return;dbg.location(339,40);
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:40: ( ws sass_use_as )?
 			int alt37=2;
 			try { dbg.enterSubRule(37);
 			try { dbg.enterDecision(37, decisionCanBacktrack[37]);
@@ -2576,14 +2604,14 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:59: ws sass_use_as
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:41: ws sass_use_as
 					{
-					dbg.location(339,59);
-					pushFollow(FOLLOW_ws_in_sass_use602);
+					dbg.location(339,41);
+					pushFollow(FOLLOW_ws_in_sass_use604);
 					ws();
 					state._fsp--;
-					if (state.failed) return;dbg.location(339,62);
-					pushFollow(FOLLOW_sass_use_as_in_sass_use604);
+					if (state.failed) return;dbg.location(339,44);
+					pushFollow(FOLLOW_sass_use_as_in_sass_use606);
 					sass_use_as();
 					state._fsp--;
 					if (state.failed) return;
@@ -2592,8 +2620,8 @@
 
 			}
 			} finally {dbg.exitSubRule(37);}
-			dbg.location(339,76);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:76: ( ws sass_use_with )?
+			dbg.location(339,58);
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:58: ( ws sass_use_with )?
 			int alt38=2;
 			try { dbg.enterSubRule(38);
 			try { dbg.enterDecision(38, decisionCanBacktrack[38]);
@@ -2612,14 +2640,14 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:77: ws sass_use_with
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:339:59: ws sass_use_with
 					{
-					dbg.location(339,77);
-					pushFollow(FOLLOW_ws_in_sass_use609);
+					dbg.location(339,59);
+					pushFollow(FOLLOW_ws_in_sass_use611);
 					ws();
 					state._fsp--;
-					if (state.failed) return;dbg.location(339,80);
-					pushFollow(FOLLOW_sass_use_with_in_sass_use611);
+					if (state.failed) return;dbg.location(339,62);
+					pushFollow(FOLLOW_sass_use_with_in_sass_use613);
 					sass_use_with();
 					state._fsp--;
 					if (state.failed) return;
@@ -2672,12 +2700,12 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "sass_use_as", "tokenNameEquals(\"as\")");
 			}dbg.location(344,30);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_use_as636); if (state.failed) return;dbg.location(344,36);
-			pushFollow(FOLLOW_ws_in_sass_use_as638);
+			match(input,IDENT,FOLLOW_IDENT_in_sass_use_as638); if (state.failed) return;dbg.location(344,36);
+			pushFollow(FOLLOW_ws_in_sass_use_as640);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(344,39);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_use_as640); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_sass_use_as642); if (state.failed) return;
 			}
 
 		}
@@ -2721,7 +2749,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "sass_use_with", "tokenNameEquals(\"with\")");
 			}dbg.location(349,32);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_use_with663); if (state.failed) return;dbg.location(349,38);
+			match(input,IDENT,FOLLOW_IDENT_in_sass_use_with665); if (state.failed) return;dbg.location(349,38);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:38: ( ws )?
 			int alt39=2;
 			try { dbg.enterSubRule(39);
@@ -2740,7 +2768,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:38: ws
 					{
 					dbg.location(349,38);
-					pushFollow(FOLLOW_ws_in_sass_use_with665);
+					pushFollow(FOLLOW_ws_in_sass_use_with667);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -2750,7 +2778,7 @@
 			}
 			} finally {dbg.exitSubRule(39);}
 			dbg.location(349,42);
-			match(input,LPAREN,FOLLOW_LPAREN_in_sass_use_with668); if (state.failed) return;dbg.location(349,49);
+			match(input,LPAREN,FOLLOW_LPAREN_in_sass_use_with670); if (state.failed) return;dbg.location(349,49);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:49: ( ws )?
 			int alt40=2;
 			try { dbg.enterSubRule(40);
@@ -2769,7 +2797,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:49: ws
 					{
 					dbg.location(349,49);
-					pushFollow(FOLLOW_ws_in_sass_use_with670);
+					pushFollow(FOLLOW_ws_in_sass_use_with672);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -2779,7 +2807,7 @@
 			}
 			} finally {dbg.exitSubRule(40);}
 			dbg.location(349,53);
-			pushFollow(FOLLOW_sass_use_with_declaration_in_sass_use_with673);
+			pushFollow(FOLLOW_sass_use_with_declaration_in_sass_use_with675);
 			sass_use_with_declaration();
 			state._fsp--;
 			if (state.failed) return;dbg.location(349,80);
@@ -2826,7 +2854,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:81: ws
 							{
 							dbg.location(349,81);
-							pushFollow(FOLLOW_ws_in_sass_use_with677);
+							pushFollow(FOLLOW_ws_in_sass_use_with679);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -2836,7 +2864,7 @@
 					}
 					} finally {dbg.exitSubRule(41);}
 					dbg.location(349,85);
-					match(input,COMMA,FOLLOW_COMMA_in_sass_use_with680); if (state.failed) return;dbg.location(349,91);
+					match(input,COMMA,FOLLOW_COMMA_in_sass_use_with682); if (state.failed) return;dbg.location(349,91);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:91: ( ws )?
 					int alt42=2;
 					try { dbg.enterSubRule(42);
@@ -2855,7 +2883,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:91: ws
 							{
 							dbg.location(349,91);
-							pushFollow(FOLLOW_ws_in_sass_use_with682);
+							pushFollow(FOLLOW_ws_in_sass_use_with684);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -2865,7 +2893,7 @@
 					}
 					} finally {dbg.exitSubRule(42);}
 					dbg.location(349,95);
-					pushFollow(FOLLOW_sass_use_with_declaration_in_sass_use_with685);
+					pushFollow(FOLLOW_sass_use_with_declaration_in_sass_use_with687);
 					sass_use_with_declaration();
 					state._fsp--;
 					if (state.failed) return;
@@ -2896,7 +2924,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:349:124: ws
 					{
 					dbg.location(349,124);
-					pushFollow(FOLLOW_ws_in_sass_use_with690);
+					pushFollow(FOLLOW_ws_in_sass_use_with692);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -2906,7 +2934,7 @@
 			}
 			} finally {dbg.exitSubRule(44);}
 			dbg.location(349,128);
-			match(input,RPAREN,FOLLOW_RPAREN_in_sass_use_with693); if (state.failed) return;
+			match(input,RPAREN,FOLLOW_RPAREN_in_sass_use_with695); if (state.failed) return;
 			}
 
 		}
@@ -2946,7 +2974,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:354:5: cp_variable ( ws )? COLON ( ws )? cp_expression
 			{
 			dbg.location(354,5);
-			pushFollow(FOLLOW_cp_variable_in_sass_use_with_declaration714);
+			pushFollow(FOLLOW_cp_variable_in_sass_use_with_declaration716);
 			cp_variable();
 			state._fsp--;
 			if (state.failed) return;dbg.location(354,17);
@@ -2968,7 +2996,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:354:17: ws
 					{
 					dbg.location(354,17);
-					pushFollow(FOLLOW_ws_in_sass_use_with_declaration716);
+					pushFollow(FOLLOW_ws_in_sass_use_with_declaration718);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -2978,7 +3006,7 @@
 			}
 			} finally {dbg.exitSubRule(45);}
 			dbg.location(354,21);
-			match(input,COLON,FOLLOW_COLON_in_sass_use_with_declaration719); if (state.failed) return;dbg.location(354,27);
+			match(input,COLON,FOLLOW_COLON_in_sass_use_with_declaration721); if (state.failed) return;dbg.location(354,27);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:354:27: ( ws )?
 			int alt46=2;
 			try { dbg.enterSubRule(46);
@@ -2997,7 +3025,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:354:27: ws
 					{
 					dbg.location(354,27);
-					pushFollow(FOLLOW_ws_in_sass_use_with_declaration721);
+					pushFollow(FOLLOW_ws_in_sass_use_with_declaration723);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -3007,7 +3035,7 @@
 			}
 			} finally {dbg.exitSubRule(46);}
 			dbg.location(354,31);
-			pushFollow(FOLLOW_cp_expression_in_sass_use_with_declaration724);
+			pushFollow(FOLLOW_cp_expression_in_sass_use_with_declaration726);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;
@@ -3036,7 +3064,7 @@
 
 
 	// $ANTLR start "sass_forward"
-	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:358:1: sass_forward :{...}? SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )? ;
+	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:358:1: sass_forward : SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )? ;
 	public final void sass_forward() throws RecognitionException {
 		try { dbg.enterRule(getGrammarFileName(), "sass_forward");
 		if ( getRuleLevel()==0 ) {dbg.commence();}
@@ -3044,26 +3072,22 @@
 		dbg.location(358, 0);
 
 		try {
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:359:5: ({...}? SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )? )
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:359:5: ( SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )? )
 			dbg.enterAlt(1);
 
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:9: {...}? SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )?
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:9: SASS_FORWARD ws resourceIdentifier ( ws ( sass_forward_hide | sass_forward_show ) )? ({...}? ws sass_forward_as )? ({...}? ws sass_forward_with )?
 			{
 			dbg.location(360,9);
-			if ( !(evalPredicate(isScssSource(),"isScssSource()")) ) {
-				if (state.backtracking>0) {state.failed=true; return;}
-				throw new FailedPredicateException(input, "sass_forward", "isScssSource()");
-			}dbg.location(360,27);
-			match(input,SASS_FORWARD,FOLLOW_SASS_FORWARD_in_sass_forward752); if (state.failed) return;dbg.location(360,40);
+			match(input,SASS_FORWARD,FOLLOW_SASS_FORWARD_in_sass_forward752); if (state.failed) return;dbg.location(360,22);
 			pushFollow(FOLLOW_ws_in_sass_forward754);
 			ws();
 			state._fsp--;
-			if (state.failed) return;dbg.location(360,43);
+			if (state.failed) return;dbg.location(360,25);
 			pushFollow(FOLLOW_resourceIdentifier_in_sass_forward756);
 			resourceIdentifier();
 			state._fsp--;
-			if (state.failed) return;dbg.location(360,62);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:62: ( ws ( sass_forward_hide | sass_forward_show ) )?
+			if (state.failed) return;dbg.location(360,44);
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:44: ( ws ( sass_forward_hide | sass_forward_show ) )?
 			int alt48=2;
 			try { dbg.enterSubRule(48);
 			try { dbg.enterDecision(48, decisionCanBacktrack[48]);
@@ -3082,14 +3106,14 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:64: ws ( sass_forward_hide | sass_forward_show )
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:46: ws ( sass_forward_hide | sass_forward_show )
 					{
-					dbg.location(360,64);
+					dbg.location(360,46);
 					pushFollow(FOLLOW_ws_in_sass_forward760);
 					ws();
 					state._fsp--;
-					if (state.failed) return;dbg.location(360,67);
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:67: ( sass_forward_hide | sass_forward_show )
+					if (state.failed) return;dbg.location(360,49);
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:49: ( sass_forward_hide | sass_forward_show )
 					int alt47=2;
 					try { dbg.enterSubRule(47);
 					try { dbg.enterDecision(47, decisionCanBacktrack[47]);
@@ -3108,9 +3132,9 @@
 						case 1 :
 							dbg.enterAlt(1);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:69: sass_forward_hide
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:51: sass_forward_hide
 							{
-							dbg.location(360,69);
+							dbg.location(360,51);
 							pushFollow(FOLLOW_sass_forward_hide_in_sass_forward764);
 							sass_forward_hide();
 							state._fsp--;
@@ -3120,9 +3144,9 @@
 						case 2 :
 							dbg.enterAlt(2);
 
-							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:90: sass_forward_show
+							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:72: sass_forward_show
 							{
-							dbg.location(360,90);
+							dbg.location(360,72);
 							pushFollow(FOLLOW_sass_forward_show_in_sass_forward769);
 							sass_forward_show();
 							state._fsp--;
@@ -3138,8 +3162,8 @@
 
 			}
 			} finally {dbg.exitSubRule(48);}
-			dbg.location(360,111);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:111: ({...}? ws sass_forward_as )?
+			dbg.location(360,93);
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:93: ({...}? ws sass_forward_as )?
 			int alt49=2;
 			try { dbg.enterSubRule(49);
 			try { dbg.enterDecision(49, decisionCanBacktrack[49]);
@@ -3158,17 +3182,17 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:112: {...}? ws sass_forward_as
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:94: {...}? ws sass_forward_as
 					{
-					dbg.location(360,112);
+					dbg.location(360,94);
 					if ( !(evalPredicate(tokenNameEquals2("as"),"tokenNameEquals2(\"as\")")) ) {
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "sass_forward", "tokenNameEquals2(\"as\")");
-					}dbg.location(360,138);
+					}dbg.location(360,120);
 					pushFollow(FOLLOW_ws_in_sass_forward777);
 					ws();
 					state._fsp--;
-					if (state.failed) return;dbg.location(360,141);
+					if (state.failed) return;dbg.location(360,123);
 					pushFollow(FOLLOW_sass_forward_as_in_sass_forward779);
 					sass_forward_as();
 					state._fsp--;
@@ -3178,8 +3202,8 @@
 
 			}
 			} finally {dbg.exitSubRule(49);}
-			dbg.location(360,159);
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:159: ({...}? ws sass_forward_with )?
+			dbg.location(360,141);
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:141: ({...}? ws sass_forward_with )?
 			int alt50=2;
 			try { dbg.enterSubRule(50);
 			try { dbg.enterDecision(50, decisionCanBacktrack[50]);
@@ -3198,17 +3222,17 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:160: {...}? ws sass_forward_with
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:360:142: {...}? ws sass_forward_with
 					{
-					dbg.location(360,160);
+					dbg.location(360,142);
 					if ( !(evalPredicate(tokenNameEquals2("with"),"tokenNameEquals2(\"with\")")) ) {
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "sass_forward", "tokenNameEquals2(\"with\")");
-					}dbg.location(360,188);
+					}dbg.location(360,170);
 					pushFollow(FOLLOW_ws_in_sass_forward786);
 					ws();
 					state._fsp--;
-					if (state.failed) return;dbg.location(360,191);
+					if (state.failed) return;dbg.location(360,173);
 					pushFollow(FOLLOW_sass_forward_with_in_sass_forward788);
 					sass_forward_with();
 					state._fsp--;
@@ -4030,7 +4054,7 @@
 			try { dbg.enterDecision(68, decisionCanBacktrack[68]);
 
 			int LA68_0 = input.LA(1);
-			if ( ((LA68_0 >= AT_IDENT && LA68_0 <= AT_SIGN)||(LA68_0 >= BOTTOMCENTER_SYM && LA68_0 <= BOTTOMRIGHT_SYM)||(LA68_0 >= CHARSET_SYM && LA68_0 <= COLON)||LA68_0==COUNTER_STYLE_SYM||(LA68_0 >= DCOLON && LA68_0 <= DOT)||LA68_0==FONT_FACE_SYM||(LA68_0 >= GEN && LA68_0 <= GREATER)||(LA68_0 >= HASH && LA68_0 <= HASH_SYMBOL)||LA68_0==IDENT||LA68_0==IMPORT_SYM||(LA68_0 >= LBRACKET && LA68_0 <= LEFTTOP_SYM)||LA68_0==LESS_AND||(LA68_0 >= MEDIA_SYM && LA68_0 <= MOZ_DOCUMENT_SYM)||LA68_0==NAMESPACE_SYM||LA68_0==PAGE_SYM||(LA68_0 >= PIPE && LA68_0 <= PLUS)||(LA68_0 >= RIGHTBOTTOM_SYM && LA68_0 <= RIGHTTOP_SYM)||(LA68_0 >= SASS_AT_ROOT && LA68_0 <= SASS_DEBUG)||(LA68_0 >= SASS_EACH && LA68_0 <= SASS_ELSE)||(LA68_0 >= SASS_EXTEND && LA68_0 <= SASS_FOR)||LA68_0==SASS_FUNCTION||(LA68_0 >= SASS_IF && LA68_0 <= SASS_MIXIN)||LA68_0==SASS_RETURN||(LA68_0 >= SASS_VAR && LA68_0 <= SEMI)||LA68_0==STAR||LA68_0==SUPPORTS_SYM||LA68_0==TILDE||(LA68_0 >= TOPCENTER_SYM && LA68_0 <= TOPRIGHT_SYM)||LA68_0==VARIABLE||LA68_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA68_0 >= AT_IDENT && LA68_0 <= AT_SIGN)||(LA68_0 >= BOTTOMCENTER_SYM && LA68_0 <= BOTTOMRIGHT_SYM)||(LA68_0 >= CHARSET_SYM && LA68_0 <= COLON)||LA68_0==COUNTER_STYLE_SYM||(LA68_0 >= DCOLON && LA68_0 <= DOT)||LA68_0==FONT_FACE_SYM||(LA68_0 >= GEN && LA68_0 <= GREATER)||(LA68_0 >= HASH && LA68_0 <= HASH_SYMBOL)||LA68_0==IDENT||LA68_0==IMPORT_SYM||(LA68_0 >= LBRACKET && LA68_0 <= LEFTTOP_SYM)||LA68_0==LESS_AND||(LA68_0 >= MEDIA_SYM && LA68_0 <= MOZ_DOCUMENT_SYM)||LA68_0==NAMESPACE_SYM||LA68_0==PAGE_SYM||(LA68_0 >= PIPE && LA68_0 <= PLUS)||(LA68_0 >= RIGHTBOTTOM_SYM && LA68_0 <= RIGHTTOP_SYM)||(LA68_0 >= SASS_AT_ROOT && LA68_0 <= SASS_DEBUG)||(LA68_0 >= SASS_EACH && LA68_0 <= SASS_ELSE)||(LA68_0 >= SASS_EXTEND && LA68_0 <= SASS_FUNCTION)||(LA68_0 >= SASS_IF && LA68_0 <= SASS_MIXIN)||(LA68_0 >= SASS_RETURN && LA68_0 <= SEMI)||LA68_0==STAR||LA68_0==SUPPORTS_SYM||LA68_0==TILDE||(LA68_0 >= TOPCENTER_SYM && LA68_0 <= TOPRIGHT_SYM)||LA68_0==VARIABLE||LA68_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt68=1;
 			}
 			} finally {dbg.exitDecision(68);}
@@ -4144,11 +4168,13 @@
 				case SASS_ELSE:
 				case SASS_EXTEND_ONLY_SELECTOR:
 				case SASS_FOR:
+				case SASS_FORWARD:
 				case SASS_FUNCTION:
 				case SASS_IF:
 				case SASS_INCLUDE:
 				case SASS_MIXIN:
 				case SASS_RETURN:
+				case SASS_USE:
 				case SASS_VAR:
 				case SASS_WARN:
 				case SASS_WHILE:
@@ -5024,7 +5050,7 @@
 				}
 
 			}
-			else if ( ((LA79_0 >= BOTTOMCENTER_SYM && LA79_0 <= BOTTOMRIGHT_SYM)||LA79_0==CHARSET_SYM||LA79_0==COUNTER_STYLE_SYM||(LA79_0 >= LEFTBOTTOM_SYM && LA79_0 <= LEFTTOP_SYM)||LA79_0==NAMESPACE_SYM||(LA79_0 >= RIGHTBOTTOM_SYM && LA79_0 <= RIGHTTOP_SYM)||LA79_0==SASS_ELSE||LA79_0==SASS_EXTEND||LA79_0==SASS_FUNCTION||LA79_0==SASS_RETURN||(LA79_0 >= TOPCENTER_SYM && LA79_0 <= TOPRIGHT_SYM)) && (synpred9_Css3())) {
+			else if ( ((LA79_0 >= BOTTOMCENTER_SYM && LA79_0 <= BOTTOMRIGHT_SYM)||LA79_0==CHARSET_SYM||LA79_0==COUNTER_STYLE_SYM||(LA79_0 >= LEFTBOTTOM_SYM && LA79_0 <= LEFTTOP_SYM)||LA79_0==NAMESPACE_SYM||(LA79_0 >= RIGHTBOTTOM_SYM && LA79_0 <= RIGHTTOP_SYM)||LA79_0==SASS_ELSE||LA79_0==SASS_EXTEND||(LA79_0 >= SASS_FORWARD && LA79_0 <= SASS_FUNCTION)||(LA79_0 >= SASS_RETURN && LA79_0 <= SASS_USE)||(LA79_0 >= TOPCENTER_SYM && LA79_0 <= TOPRIGHT_SYM)) && (synpred9_Css3())) {
 				alt79=5;
 			}
 			else if ( (LA79_0==SUPPORTS_SYM) ) {
@@ -5626,11 +5652,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_VAR:
 			case SASS_WARN:
 			case SASS_WHILE:
@@ -6718,11 +6746,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -7025,11 +7055,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_VAR:
 			case SASS_WARN:
 			case SASS_WHILE:
@@ -7087,7 +7119,7 @@
 					try { dbg.enterDecision(101, decisionCanBacktrack[101]);
 
 					int LA101_0 = input.LA(1);
-					if ( (LA101_0==AT_IDENT||(LA101_0 >= BOTTOMCENTER_SYM && LA101_0 <= BOTTOMRIGHT_SYM)||LA101_0==CHARSET_SYM||LA101_0==COUNTER_STYLE_SYM||LA101_0==FONT_FACE_SYM||LA101_0==IDENT||LA101_0==IMPORT_SYM||(LA101_0 >= LEFTBOTTOM_SYM && LA101_0 <= LEFTTOP_SYM)||LA101_0==MEDIA_SYM||LA101_0==MOZ_DOCUMENT_SYM||LA101_0==NAMESPACE_SYM||LA101_0==PAGE_SYM||(LA101_0 >= RIGHTBOTTOM_SYM && LA101_0 <= RIGHTTOP_SYM)||(LA101_0 >= SASS_AT_ROOT && LA101_0 <= SASS_DEBUG)||(LA101_0 >= SASS_EACH && LA101_0 <= SASS_ELSE)||LA101_0==SASS_EXTEND||LA101_0==SASS_FOR||LA101_0==SASS_FUNCTION||(LA101_0 >= SASS_IF && LA101_0 <= SASS_MIXIN)||LA101_0==SASS_RETURN||(LA101_0 >= SASS_VAR && LA101_0 <= SASS_WHILE)||(LA101_0 >= TOPCENTER_SYM && LA101_0 <= TOPRIGHT_SYM)||LA101_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( (LA101_0==AT_IDENT||(LA101_0 >= BOTTOMCENTER_SYM && LA101_0 <= BOTTOMRIGHT_SYM)||LA101_0==CHARSET_SYM||LA101_0==COUNTER_STYLE_SYM||LA101_0==FONT_FACE_SYM||LA101_0==IDENT||LA101_0==IMPORT_SYM||(LA101_0 >= LEFTBOTTOM_SYM && LA101_0 <= LEFTTOP_SYM)||LA101_0==MEDIA_SYM||LA101_0==MOZ_DOCUMENT_SYM||LA101_0==NAMESPACE_SYM||LA101_0==PAGE_SYM||(LA101_0 >= RIGHTBOTTOM_SYM && LA101_0 <= RIGHTTOP_SYM)||(LA101_0 >= SASS_AT_ROOT && LA101_0 <= SASS_DEBUG)||(LA101_0 >= SASS_EACH && LA101_0 <= SASS_ELSE)||LA101_0==SASS_EXTEND||(LA101_0 >= SASS_FOR && LA101_0 <= SASS_FUNCTION)||(LA101_0 >= SASS_IF && LA101_0 <= SASS_MIXIN)||(LA101_0 >= SASS_RETURN && LA101_0 <= SASS_WHILE)||(LA101_0 >= TOPCENTER_SYM && LA101_0 <= TOPRIGHT_SYM)||LA101_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt101=1;
 					}
 					else if ( (LA101_0==HASH_SYMBOL) ) {
@@ -7184,7 +7216,7 @@
 				try { dbg.enterDecision(107, decisionCanBacktrack[107]);
 
 				int LA107_0 = input.LA(1);
-				if ( ((LA107_0 >= AT_IDENT && LA107_0 <= AT_SIGN)||(LA107_0 >= BOTTOMCENTER_SYM && LA107_0 <= BOTTOMRIGHT_SYM)||(LA107_0 >= CHARSET_SYM && LA107_0 <= COLON)||LA107_0==COUNTER_STYLE_SYM||(LA107_0 >= DCOLON && LA107_0 <= DOT)||LA107_0==FONT_FACE_SYM||(LA107_0 >= GEN && LA107_0 <= GREATER)||(LA107_0 >= HASH && LA107_0 <= HASH_SYMBOL)||LA107_0==IDENT||LA107_0==IMPORT_SYM||(LA107_0 >= LBRACKET && LA107_0 <= LEFTTOP_SYM)||LA107_0==LESS_AND||(LA107_0 >= MEDIA_SYM && LA107_0 <= MOZ_DOCUMENT_SYM)||LA107_0==NAMESPACE_SYM||LA107_0==PAGE_SYM||(LA107_0 >= PIPE && LA107_0 <= PLUS)||(LA107_0 >= RIGHTBOTTOM_SYM && LA107_0 <= RIGHTTOP_SYM)||(LA107_0 >= SASS_AT_ROOT && LA107_0 <= SASS_DEBUG)||(LA107_0 >= SASS_EACH && LA107_0 <= SASS_ELSE)||(LA107_0 >= SASS_EXTEND && LA107_0 <= SASS_FOR)||LA107_0==SASS_FUNCTION||(LA107_0 >= SASS_IF && LA107_0 <= SASS_MIXIN)||LA107_0==SASS_RETURN||(LA107_0 >= SASS_VAR && LA107_0 <= SASS_WHILE)||LA107_0==STAR||LA107_0==SUPPORTS_SYM||LA107_0==TILDE||(LA107_0 >= TOPCENTER_SYM && LA107_0 <= TOPRIGHT_SYM)||LA107_0==WEBKIT_KEYFRAMES_SYM) ) {
+				if ( ((LA107_0 >= AT_IDENT && LA107_0 <= AT_SIGN)||(LA107_0 >= BOTTOMCENTER_SYM && LA107_0 <= BOTTOMRIGHT_SYM)||(LA107_0 >= CHARSET_SYM && LA107_0 <= COLON)||LA107_0==COUNTER_STYLE_SYM||(LA107_0 >= DCOLON && LA107_0 <= DOT)||LA107_0==FONT_FACE_SYM||(LA107_0 >= GEN && LA107_0 <= GREATER)||(LA107_0 >= HASH && LA107_0 <= HASH_SYMBOL)||LA107_0==IDENT||LA107_0==IMPORT_SYM||(LA107_0 >= LBRACKET && LA107_0 <= LEFTTOP_SYM)||LA107_0==LESS_AND||(LA107_0 >= MEDIA_SYM && LA107_0 <= MOZ_DOCUMENT_SYM)||LA107_0==NAMESPACE_SYM||LA107_0==PAGE_SYM||(LA107_0 >= PIPE && LA107_0 <= PLUS)||(LA107_0 >= RIGHTBOTTOM_SYM && LA107_0 <= RIGHTTOP_SYM)||(LA107_0 >= SASS_AT_ROOT && LA107_0 <= SASS_DEBUG)||(LA107_0 >= SASS_EACH && LA107_0 <= SASS_ELSE)||(LA107_0 >= SASS_EXTEND && LA107_0 <= SASS_FUNCTION)||(LA107_0 >= SASS_IF && LA107_0 <= SASS_MIXIN)||(LA107_0 >= SASS_RETURN && LA107_0 <= SASS_WHILE)||LA107_0==STAR||LA107_0==SUPPORTS_SYM||LA107_0==TILDE||(LA107_0 >= TOPCENTER_SYM && LA107_0 <= TOPRIGHT_SYM)||LA107_0==WEBKIT_KEYFRAMES_SYM) ) {
 					alt107=1;
 				}
 				else if ( (LA107_0==SEMI) ) {
@@ -7948,7 +7980,9 @@
 			case SASS_CONTENT:
 			case SASS_ELSE:
 			case SASS_EXTEND:
+			case SASS_FORWARD:
 			case SASS_RETURN:
+			case SASS_USE:
 			case TOPCENTER_SYM:
 			case TOPLEFTCORNER_SYM:
 			case TOPLEFT_SYM:
@@ -8287,7 +8321,7 @@
 			try { dbg.enterDecision(112, decisionCanBacktrack[112]);
 
 			int LA112_0 = input.LA(1);
-			if ( ((LA112_0 >= AT_IDENT && LA112_0 <= AT_SIGN)||(LA112_0 >= BOTTOMCENTER_SYM && LA112_0 <= BOTTOMRIGHT_SYM)||(LA112_0 >= CHARSET_SYM && LA112_0 <= COLON)||LA112_0==COUNTER_STYLE_SYM||(LA112_0 >= DCOLON && LA112_0 <= DOT)||LA112_0==FONT_FACE_SYM||(LA112_0 >= GEN && LA112_0 <= GREATER)||(LA112_0 >= HASH && LA112_0 <= HASH_SYMBOL)||LA112_0==IDENT||LA112_0==IMPORT_SYM||(LA112_0 >= LBRACKET && LA112_0 <= LEFTTOP_SYM)||LA112_0==LESS_AND||(LA112_0 >= MEDIA_SYM && LA112_0 <= MOZ_DOCUMENT_SYM)||LA112_0==NAMESPACE_SYM||LA112_0==PAGE_SYM||(LA112_0 >= PIPE && LA112_0 <= PLUS)||(LA112_0 >= RIGHTBOTTOM_SYM && LA112_0 <= RIGHTTOP_SYM)||(LA112_0 >= SASS_AT_ROOT && LA112_0 <= SASS_DEBUG)||(LA112_0 >= SASS_EACH && LA112_0 <= SASS_ELSE)||(LA112_0 >= SASS_EXTEND && LA112_0 <= SASS_FOR)||LA112_0==SASS_FUNCTION||(LA112_0 >= SASS_IF && LA112_0 <= SASS_MIXIN)||LA112_0==SASS_RETURN||(LA112_0 >= SASS_VAR && LA112_0 <= SEMI)||LA112_0==STAR||LA112_0==SUPPORTS_SYM||LA112_0==TILDE||(LA112_0 >= TOPCENTER_SYM && LA112_0 <= TOPRIGHT_SYM)||LA112_0==VARIABLE||LA112_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA112_0 >= AT_IDENT && LA112_0 <= AT_SIGN)||(LA112_0 >= BOTTOMCENTER_SYM && LA112_0 <= BOTTOMRIGHT_SYM)||(LA112_0 >= CHARSET_SYM && LA112_0 <= COLON)||LA112_0==COUNTER_STYLE_SYM||(LA112_0 >= DCOLON && LA112_0 <= DOT)||LA112_0==FONT_FACE_SYM||(LA112_0 >= GEN && LA112_0 <= GREATER)||(LA112_0 >= HASH && LA112_0 <= HASH_SYMBOL)||LA112_0==IDENT||LA112_0==IMPORT_SYM||(LA112_0 >= LBRACKET && LA112_0 <= LEFTTOP_SYM)||LA112_0==LESS_AND||(LA112_0 >= MEDIA_SYM && LA112_0 <= MOZ_DOCUMENT_SYM)||LA112_0==NAMESPACE_SYM||LA112_0==PAGE_SYM||(LA112_0 >= PIPE && LA112_0 <= PLUS)||(LA112_0 >= RIGHTBOTTOM_SYM && LA112_0 <= RIGHTTOP_SYM)||(LA112_0 >= SASS_AT_ROOT && LA112_0 <= SASS_DEBUG)||(LA112_0 >= SASS_EACH && LA112_0 <= SASS_ELSE)||(LA112_0 >= SASS_EXTEND && LA112_0 <= SASS_FUNCTION)||(LA112_0 >= SASS_IF && LA112_0 <= SASS_MIXIN)||(LA112_0 >= SASS_RETURN && LA112_0 <= SEMI)||LA112_0==STAR||LA112_0==SUPPORTS_SYM||LA112_0==TILDE||(LA112_0 >= TOPCENTER_SYM && LA112_0 <= TOPRIGHT_SYM)||LA112_0==VARIABLE||LA112_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt112=1;
 			}
 			} finally {dbg.exitDecision(112);}
@@ -8808,7 +8842,7 @@
 			if ( (LA119_0==LPAREN||LA119_0==NOT) ) {
 				alt119=1;
 			}
-			else if ( ((LA119_0 >= AT_IDENT && LA119_0 <= AT_SIGN)||(LA119_0 >= BOTTOMCENTER_SYM && LA119_0 <= BOTTOMRIGHT_SYM)||(LA119_0 >= CHARSET_SYM && LA119_0 <= COLON)||LA119_0==COUNTER_STYLE_SYM||(LA119_0 >= DCOLON && LA119_0 <= DOT)||LA119_0==FONT_FACE_SYM||(LA119_0 >= GEN && LA119_0 <= GREATER)||(LA119_0 >= HASH && LA119_0 <= HASH_SYMBOL)||LA119_0==IDENT||LA119_0==IMPORT_SYM||(LA119_0 >= LBRACKET && LA119_0 <= LEFTTOP_SYM)||LA119_0==LESS_AND||(LA119_0 >= MEDIA_SYM && LA119_0 <= MOZ_DOCUMENT_SYM)||LA119_0==NAMESPACE_SYM||LA119_0==PAGE_SYM||(LA119_0 >= PIPE && LA119_0 <= PLUS)||(LA119_0 >= RIGHTBOTTOM_SYM && LA119_0 <= RIGHTTOP_SYM)||(LA119_0 >= SASS_AT_ROOT && LA119_0 <= SASS_DEBUG)||(LA119_0 >= SASS_EACH && LA119_0 <= SASS_ELSE)||(LA119_0 >= SASS_ERROR && LA119_0 <= SASS_FOR)||LA119_0==SASS_FUNCTION||(LA119_0 >= SASS_IF && LA119_0 <= SASS_MIXIN)||LA119_0==SASS_RETURN||(LA119_0 >= SASS_VAR && LA119_0 <= SASS_WHILE)||LA119_0==STAR||LA119_0==SUPPORTS_SYM||LA119_0==TILDE||(LA119_0 >= TOPCENTER_SYM && LA119_0 <= TOPRIGHT_SYM)||LA119_0==VARIABLE||LA119_0==WEBKIT_KEYFRAMES_SYM) ) {
+			else if ( ((LA119_0 >= AT_IDENT && LA119_0 <= AT_SIGN)||(LA119_0 >= BOTTOMCENTER_SYM && LA119_0 <= BOTTOMRIGHT_SYM)||(LA119_0 >= CHARSET_SYM && LA119_0 <= COLON)||LA119_0==COUNTER_STYLE_SYM||(LA119_0 >= DCOLON && LA119_0 <= DOT)||LA119_0==FONT_FACE_SYM||(LA119_0 >= GEN && LA119_0 <= GREATER)||(LA119_0 >= HASH && LA119_0 <= HASH_SYMBOL)||LA119_0==IDENT||LA119_0==IMPORT_SYM||(LA119_0 >= LBRACKET && LA119_0 <= LEFTTOP_SYM)||LA119_0==LESS_AND||(LA119_0 >= MEDIA_SYM && LA119_0 <= MOZ_DOCUMENT_SYM)||LA119_0==NAMESPACE_SYM||LA119_0==PAGE_SYM||(LA119_0 >= PIPE && LA119_0 <= PLUS)||(LA119_0 >= RIGHTBOTTOM_SYM && LA119_0 <= RIGHTTOP_SYM)||(LA119_0 >= SASS_AT_ROOT && LA119_0 <= SASS_DEBUG)||(LA119_0 >= SASS_EACH && LA119_0 <= SASS_ELSE)||(LA119_0 >= SASS_ERROR && LA119_0 <= SASS_FUNCTION)||(LA119_0 >= SASS_IF && LA119_0 <= SASS_MIXIN)||(LA119_0 >= SASS_RETURN && LA119_0 <= SASS_WHILE)||LA119_0==STAR||LA119_0==SUPPORTS_SYM||LA119_0==TILDE||(LA119_0 >= TOPCENTER_SYM && LA119_0 <= TOPRIGHT_SYM)||LA119_0==VARIABLE||LA119_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt119=2;
 			}
 
@@ -9314,11 +9348,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_VAR:
 			case SASS_WARN:
 			case SASS_WHILE:
@@ -9376,7 +9412,7 @@
 					try { dbg.enterDecision(123, decisionCanBacktrack[123]);
 
 					int LA123_0 = input.LA(1);
-					if ( (LA123_0==AT_IDENT||(LA123_0 >= BOTTOMCENTER_SYM && LA123_0 <= BOTTOMRIGHT_SYM)||LA123_0==CHARSET_SYM||LA123_0==COUNTER_STYLE_SYM||LA123_0==FONT_FACE_SYM||LA123_0==IDENT||LA123_0==IMPORT_SYM||(LA123_0 >= LEFTBOTTOM_SYM && LA123_0 <= LEFTTOP_SYM)||LA123_0==MEDIA_SYM||LA123_0==MOZ_DOCUMENT_SYM||LA123_0==NAMESPACE_SYM||LA123_0==PAGE_SYM||(LA123_0 >= RIGHTBOTTOM_SYM && LA123_0 <= RIGHTTOP_SYM)||(LA123_0 >= SASS_AT_ROOT && LA123_0 <= SASS_DEBUG)||(LA123_0 >= SASS_EACH && LA123_0 <= SASS_ELSE)||LA123_0==SASS_EXTEND||LA123_0==SASS_FOR||LA123_0==SASS_FUNCTION||(LA123_0 >= SASS_IF && LA123_0 <= SASS_MIXIN)||LA123_0==SASS_RETURN||(LA123_0 >= SASS_VAR && LA123_0 <= SASS_WHILE)||(LA123_0 >= TOPCENTER_SYM && LA123_0 <= TOPRIGHT_SYM)||LA123_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( (LA123_0==AT_IDENT||(LA123_0 >= BOTTOMCENTER_SYM && LA123_0 <= BOTTOMRIGHT_SYM)||LA123_0==CHARSET_SYM||LA123_0==COUNTER_STYLE_SYM||LA123_0==FONT_FACE_SYM||LA123_0==IDENT||LA123_0==IMPORT_SYM||(LA123_0 >= LEFTBOTTOM_SYM && LA123_0 <= LEFTTOP_SYM)||LA123_0==MEDIA_SYM||LA123_0==MOZ_DOCUMENT_SYM||LA123_0==NAMESPACE_SYM||LA123_0==PAGE_SYM||(LA123_0 >= RIGHTBOTTOM_SYM && LA123_0 <= RIGHTTOP_SYM)||(LA123_0 >= SASS_AT_ROOT && LA123_0 <= SASS_DEBUG)||(LA123_0 >= SASS_EACH && LA123_0 <= SASS_ELSE)||LA123_0==SASS_EXTEND||(LA123_0 >= SASS_FOR && LA123_0 <= SASS_FUNCTION)||(LA123_0 >= SASS_IF && LA123_0 <= SASS_MIXIN)||(LA123_0 >= SASS_RETURN && LA123_0 <= SASS_WHILE)||(LA123_0 >= TOPCENTER_SYM && LA123_0 <= TOPRIGHT_SYM)||LA123_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt123=1;
 					}
 					else if ( (LA123_0==HASH_SYMBOL) ) {
@@ -9498,7 +9534,7 @@
 			try { dbg.enterDecision(127, decisionCanBacktrack[127]);
 
 			int LA127_0 = input.LA(1);
-			if ( (LA127_0==AT_IDENT||(LA127_0 >= BOTTOMCENTER_SYM && LA127_0 <= BOTTOMRIGHT_SYM)||LA127_0==CHARSET_SYM||LA127_0==COUNTER_STYLE_SYM||LA127_0==FONT_FACE_SYM||LA127_0==HASH_SYMBOL||LA127_0==IDENT||LA127_0==IMPORT_SYM||(LA127_0 >= LEFTBOTTOM_SYM && LA127_0 <= LEFTTOP_SYM)||LA127_0==MEDIA_SYM||LA127_0==MOZ_DOCUMENT_SYM||LA127_0==NAMESPACE_SYM||LA127_0==PAGE_SYM||(LA127_0 >= RIGHTBOTTOM_SYM && LA127_0 <= RIGHTTOP_SYM)||(LA127_0 >= SASS_AT_ROOT && LA127_0 <= SASS_DEBUG)||(LA127_0 >= SASS_EACH && LA127_0 <= SASS_ELSE)||LA127_0==SASS_EXTEND||LA127_0==SASS_FOR||LA127_0==SASS_FUNCTION||(LA127_0 >= SASS_IF && LA127_0 <= SASS_MIXIN)||LA127_0==SASS_RETURN||(LA127_0 >= SASS_VAR && LA127_0 <= SASS_WHILE)||LA127_0==STRING||(LA127_0 >= TOPCENTER_SYM && LA127_0 <= TOPRIGHT_SYM)||LA127_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA127_0==AT_IDENT||(LA127_0 >= BOTTOMCENTER_SYM && LA127_0 <= BOTTOMRIGHT_SYM)||LA127_0==CHARSET_SYM||LA127_0==COUNTER_STYLE_SYM||LA127_0==FONT_FACE_SYM||LA127_0==HASH_SYMBOL||LA127_0==IDENT||LA127_0==IMPORT_SYM||(LA127_0 >= LEFTBOTTOM_SYM && LA127_0 <= LEFTTOP_SYM)||LA127_0==MEDIA_SYM||LA127_0==MOZ_DOCUMENT_SYM||LA127_0==NAMESPACE_SYM||LA127_0==PAGE_SYM||(LA127_0 >= RIGHTBOTTOM_SYM && LA127_0 <= RIGHTTOP_SYM)||(LA127_0 >= SASS_AT_ROOT && LA127_0 <= SASS_DEBUG)||(LA127_0 >= SASS_EACH && LA127_0 <= SASS_ELSE)||LA127_0==SASS_EXTEND||(LA127_0 >= SASS_FOR && LA127_0 <= SASS_FUNCTION)||(LA127_0 >= SASS_IF && LA127_0 <= SASS_MIXIN)||(LA127_0 >= SASS_RETURN && LA127_0 <= SASS_WHILE)||LA127_0==STRING||(LA127_0 >= TOPCENTER_SYM && LA127_0 <= TOPRIGHT_SYM)||LA127_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt127=1;
 			}
 			} finally {dbg.exitDecision(127);}
@@ -9789,7 +9825,7 @@
 			try { dbg.enterDecision(134, decisionCanBacktrack[134]);
 
 			int LA134_0 = input.LA(1);
-			if ( ((LA134_0 >= AT_IDENT && LA134_0 <= AT_SIGN)||(LA134_0 >= BOTTOMCENTER_SYM && LA134_0 <= BOTTOMRIGHT_SYM)||(LA134_0 >= CHARSET_SYM && LA134_0 <= COLON)||LA134_0==COUNTER_STYLE_SYM||(LA134_0 >= DCOLON && LA134_0 <= DOT)||LA134_0==FONT_FACE_SYM||(LA134_0 >= GEN && LA134_0 <= GREATER)||(LA134_0 >= HASH && LA134_0 <= HASH_SYMBOL)||LA134_0==IDENT||LA134_0==IMPORT_SYM||(LA134_0 >= LBRACKET && LA134_0 <= LEFTTOP_SYM)||LA134_0==LESS_AND||(LA134_0 >= MEDIA_SYM && LA134_0 <= MOZ_DOCUMENT_SYM)||LA134_0==NAMESPACE_SYM||LA134_0==PAGE_SYM||(LA134_0 >= PIPE && LA134_0 <= PLUS)||(LA134_0 >= RIGHTBOTTOM_SYM && LA134_0 <= RIGHTTOP_SYM)||(LA134_0 >= SASS_AT_ROOT && LA134_0 <= SASS_DEBUG)||(LA134_0 >= SASS_EACH && LA134_0 <= SASS_ELSE)||(LA134_0 >= SASS_EXTEND && LA134_0 <= SASS_FOR)||LA134_0==SASS_FUNCTION||(LA134_0 >= SASS_IF && LA134_0 <= SASS_MIXIN)||LA134_0==SASS_RETURN||(LA134_0 >= SASS_VAR && LA134_0 <= SEMI)||LA134_0==STAR||LA134_0==SUPPORTS_SYM||LA134_0==TILDE||(LA134_0 >= TOPCENTER_SYM && LA134_0 <= TOPRIGHT_SYM)||LA134_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA134_0 >= AT_IDENT && LA134_0 <= AT_SIGN)||(LA134_0 >= BOTTOMCENTER_SYM && LA134_0 <= BOTTOMRIGHT_SYM)||(LA134_0 >= CHARSET_SYM && LA134_0 <= COLON)||LA134_0==COUNTER_STYLE_SYM||(LA134_0 >= DCOLON && LA134_0 <= DOT)||LA134_0==FONT_FACE_SYM||(LA134_0 >= GEN && LA134_0 <= GREATER)||(LA134_0 >= HASH && LA134_0 <= HASH_SYMBOL)||LA134_0==IDENT||LA134_0==IMPORT_SYM||(LA134_0 >= LBRACKET && LA134_0 <= LEFTTOP_SYM)||LA134_0==LESS_AND||(LA134_0 >= MEDIA_SYM && LA134_0 <= MOZ_DOCUMENT_SYM)||LA134_0==NAMESPACE_SYM||LA134_0==PAGE_SYM||(LA134_0 >= PIPE && LA134_0 <= PLUS)||(LA134_0 >= RIGHTBOTTOM_SYM && LA134_0 <= RIGHTTOP_SYM)||(LA134_0 >= SASS_AT_ROOT && LA134_0 <= SASS_DEBUG)||(LA134_0 >= SASS_EACH && LA134_0 <= SASS_ELSE)||(LA134_0 >= SASS_EXTEND && LA134_0 <= SASS_FUNCTION)||(LA134_0 >= SASS_IF && LA134_0 <= SASS_MIXIN)||(LA134_0 >= SASS_RETURN && LA134_0 <= SEMI)||LA134_0==STAR||LA134_0==SUPPORTS_SYM||LA134_0==TILDE||(LA134_0 >= TOPCENTER_SYM && LA134_0 <= TOPRIGHT_SYM)||LA134_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt134=1;
 			}
 			} finally {dbg.exitDecision(134);}
@@ -10188,7 +10224,7 @@
 					try { dbg.enterDecision(142, decisionCanBacktrack[142]);
 
 					int LA142_0 = input.LA(1);
-					if ( ((LA142_0 >= AT_IDENT && LA142_0 <= AT_SIGN)||(LA142_0 >= BOTTOMCENTER_SYM && LA142_0 <= BOTTOMRIGHT_SYM)||(LA142_0 >= CHARSET_SYM && LA142_0 <= COLON)||LA142_0==COUNTER_STYLE_SYM||(LA142_0 >= DCOLON && LA142_0 <= DOT)||LA142_0==FONT_FACE_SYM||(LA142_0 >= GEN && LA142_0 <= GREATER)||(LA142_0 >= HASH && LA142_0 <= HASH_SYMBOL)||LA142_0==IDENT||LA142_0==IMPORT_SYM||(LA142_0 >= LBRACKET && LA142_0 <= LEFTTOP_SYM)||LA142_0==LESS_AND||(LA142_0 >= MEDIA_SYM && LA142_0 <= MOZ_DOCUMENT_SYM)||LA142_0==NAMESPACE_SYM||LA142_0==PAGE_SYM||(LA142_0 >= PIPE && LA142_0 <= PLUS)||(LA142_0 >= RIGHTBOTTOM_SYM && LA142_0 <= RIGHTTOP_SYM)||(LA142_0 >= SASS_AT_ROOT && LA142_0 <= SASS_DEBUG)||(LA142_0 >= SASS_EACH && LA142_0 <= SASS_ELSE)||(LA142_0 >= SASS_ERROR && LA142_0 <= SASS_FOR)||LA142_0==SASS_FUNCTION||(LA142_0 >= SASS_IF && LA142_0 <= SASS_MIXIN)||LA142_0==SASS_RETURN||(LA142_0 >= SASS_VAR && LA142_0 <= SEMI)||LA142_0==STAR||LA142_0==SUPPORTS_SYM||LA142_0==TILDE||(LA142_0 >= TOPCENTER_SYM && LA142_0 <= TOPRIGHT_SYM)||LA142_0==VARIABLE||LA142_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( ((LA142_0 >= AT_IDENT && LA142_0 <= AT_SIGN)||(LA142_0 >= BOTTOMCENTER_SYM && LA142_0 <= BOTTOMRIGHT_SYM)||(LA142_0 >= CHARSET_SYM && LA142_0 <= COLON)||LA142_0==COUNTER_STYLE_SYM||(LA142_0 >= DCOLON && LA142_0 <= DOT)||LA142_0==FONT_FACE_SYM||(LA142_0 >= GEN && LA142_0 <= GREATER)||(LA142_0 >= HASH && LA142_0 <= HASH_SYMBOL)||LA142_0==IDENT||LA142_0==IMPORT_SYM||(LA142_0 >= LBRACKET && LA142_0 <= LEFTTOP_SYM)||LA142_0==LESS_AND||(LA142_0 >= MEDIA_SYM && LA142_0 <= MOZ_DOCUMENT_SYM)||LA142_0==NAMESPACE_SYM||LA142_0==PAGE_SYM||(LA142_0 >= PIPE && LA142_0 <= PLUS)||(LA142_0 >= RIGHTBOTTOM_SYM && LA142_0 <= RIGHTTOP_SYM)||(LA142_0 >= SASS_AT_ROOT && LA142_0 <= SASS_DEBUG)||(LA142_0 >= SASS_EACH && LA142_0 <= SASS_ELSE)||(LA142_0 >= SASS_ERROR && LA142_0 <= SASS_FUNCTION)||(LA142_0 >= SASS_IF && LA142_0 <= SASS_MIXIN)||(LA142_0 >= SASS_RETURN && LA142_0 <= SEMI)||LA142_0==STAR||LA142_0==SUPPORTS_SYM||LA142_0==TILDE||(LA142_0 >= TOPCENTER_SYM && LA142_0 <= TOPRIGHT_SYM)||LA142_0==VARIABLE||LA142_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt142=1;
 					}
 					} finally {dbg.exitDecision(142);}
@@ -10806,7 +10842,7 @@
 						}
 
 					}
-					else if ( ((LA159_0 >= AT_IDENT && LA159_0 <= AT_SIGN)||(LA159_0 >= BOTTOMCENTER_SYM && LA159_0 <= BOTTOMRIGHT_SYM)||LA159_0==CHARSET_SYM||LA159_0==COUNTER_STYLE_SYM||LA159_0==FONT_FACE_SYM||LA159_0==GEN||LA159_0==HASH_SYMBOL||LA159_0==IDENT||LA159_0==IMPORT_SYM||(LA159_0 >= LEFTBOTTOM_SYM && LA159_0 <= LEFTTOP_SYM)||(LA159_0 >= MEDIA_SYM && LA159_0 <= MOZ_DOCUMENT_SYM)||LA159_0==NAMESPACE_SYM||LA159_0==PAGE_SYM||(LA159_0 >= RIGHTBOTTOM_SYM && LA159_0 <= RIGHTTOP_SYM)||(LA159_0 >= SASS_AT_ROOT && LA159_0 <= SASS_DEBUG)||(LA159_0 >= SASS_EACH && LA159_0 <= SASS_ELSE)||LA159_0==SASS_EXTEND||LA159_0==SASS_FOR||LA159_0==SASS_FUNCTION||(LA159_0 >= SASS_IF && LA159_0 <= SASS_MIXIN)||LA159_0==SASS_RETURN||(LA159_0 >= SASS_VAR && LA159_0 <= SASS_WHILE)||LA159_0==STAR||(LA159_0 >= TOPCENTER_SYM && LA159_0 <= TOPRIGHT_SYM)||LA159_0==VARIABLE||LA159_0==WEBKIT_KEYFRAMES_SYM) ) {
+					else if ( ((LA159_0 >= AT_IDENT && LA159_0 <= AT_SIGN)||(LA159_0 >= BOTTOMCENTER_SYM && LA159_0 <= BOTTOMRIGHT_SYM)||LA159_0==CHARSET_SYM||LA159_0==COUNTER_STYLE_SYM||LA159_0==FONT_FACE_SYM||LA159_0==GEN||LA159_0==HASH_SYMBOL||LA159_0==IDENT||LA159_0==IMPORT_SYM||(LA159_0 >= LEFTBOTTOM_SYM && LA159_0 <= LEFTTOP_SYM)||(LA159_0 >= MEDIA_SYM && LA159_0 <= MOZ_DOCUMENT_SYM)||LA159_0==NAMESPACE_SYM||LA159_0==PAGE_SYM||(LA159_0 >= RIGHTBOTTOM_SYM && LA159_0 <= RIGHTTOP_SYM)||(LA159_0 >= SASS_AT_ROOT && LA159_0 <= SASS_DEBUG)||(LA159_0 >= SASS_EACH && LA159_0 <= SASS_ELSE)||LA159_0==SASS_EXTEND||(LA159_0 >= SASS_FOR && LA159_0 <= SASS_FUNCTION)||(LA159_0 >= SASS_IF && LA159_0 <= SASS_MIXIN)||(LA159_0 >= SASS_RETURN && LA159_0 <= SASS_WHILE)||LA159_0==STAR||(LA159_0 >= TOPCENTER_SYM && LA159_0 <= TOPRIGHT_SYM)||LA159_0==VARIABLE||LA159_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt159=2;
 					}
 
@@ -11180,7 +11216,7 @@
 			try { dbg.enterDecision(167, decisionCanBacktrack[167]);
 
 			int LA167_0 = input.LA(1);
-			if ( ((LA167_0 >= AT_IDENT && LA167_0 <= AT_SIGN)||(LA167_0 >= BOTTOMCENTER_SYM && LA167_0 <= BOTTOMRIGHT_SYM)||(LA167_0 >= CHARSET_SYM && LA167_0 <= COLON)||LA167_0==COUNTER_STYLE_SYM||(LA167_0 >= DCOLON && LA167_0 <= DOT)||LA167_0==FONT_FACE_SYM||(LA167_0 >= GEN && LA167_0 <= GREATER)||(LA167_0 >= HASH && LA167_0 <= HASH_SYMBOL)||LA167_0==IDENT||LA167_0==IMPORT_SYM||(LA167_0 >= LBRACKET && LA167_0 <= LEFTTOP_SYM)||LA167_0==LESS_AND||(LA167_0 >= MEDIA_SYM && LA167_0 <= MOZ_DOCUMENT_SYM)||LA167_0==NAMESPACE_SYM||LA167_0==PAGE_SYM||(LA167_0 >= PIPE && LA167_0 <= PLUS)||(LA167_0 >= RIGHTBOTTOM_SYM && LA167_0 <= RIGHTTOP_SYM)||(LA167_0 >= SASS_AT_ROOT && LA167_0 <= SASS_DEBUG)||(LA167_0 >= SASS_EACH && LA167_0 <= SASS_ELSE)||(LA167_0 >= SASS_ERROR && LA167_0 <= SASS_FOR)||LA167_0==SASS_FUNCTION||(LA167_0 >= SASS_IF && LA167_0 <= SASS_MIXIN)||LA167_0==SASS_RETURN||(LA167_0 >= SASS_VAR && LA167_0 <= SEMI)||LA167_0==STAR||LA167_0==SUPPORTS_SYM||LA167_0==TILDE||(LA167_0 >= TOPCENTER_SYM && LA167_0 <= TOPRIGHT_SYM)||LA167_0==VARIABLE||LA167_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA167_0 >= AT_IDENT && LA167_0 <= AT_SIGN)||(LA167_0 >= BOTTOMCENTER_SYM && LA167_0 <= BOTTOMRIGHT_SYM)||(LA167_0 >= CHARSET_SYM && LA167_0 <= COLON)||LA167_0==COUNTER_STYLE_SYM||(LA167_0 >= DCOLON && LA167_0 <= DOT)||LA167_0==FONT_FACE_SYM||(LA167_0 >= GEN && LA167_0 <= GREATER)||(LA167_0 >= HASH && LA167_0 <= HASH_SYMBOL)||LA167_0==IDENT||LA167_0==IMPORT_SYM||(LA167_0 >= LBRACKET && LA167_0 <= LEFTTOP_SYM)||LA167_0==LESS_AND||(LA167_0 >= MEDIA_SYM && LA167_0 <= MOZ_DOCUMENT_SYM)||LA167_0==NAMESPACE_SYM||LA167_0==PAGE_SYM||(LA167_0 >= PIPE && LA167_0 <= PLUS)||(LA167_0 >= RIGHTBOTTOM_SYM && LA167_0 <= RIGHTTOP_SYM)||(LA167_0 >= SASS_AT_ROOT && LA167_0 <= SASS_DEBUG)||(LA167_0 >= SASS_EACH && LA167_0 <= SASS_ELSE)||(LA167_0 >= SASS_ERROR && LA167_0 <= SASS_FUNCTION)||(LA167_0 >= SASS_IF && LA167_0 <= SASS_MIXIN)||(LA167_0 >= SASS_RETURN && LA167_0 <= SEMI)||LA167_0==STAR||LA167_0==SUPPORTS_SYM||LA167_0==TILDE||(LA167_0 >= TOPCENTER_SYM && LA167_0 <= TOPRIGHT_SYM)||LA167_0==VARIABLE||LA167_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt167=1;
 			}
 			} finally {dbg.exitDecision(167);}
@@ -11310,7 +11346,7 @@
 			try { dbg.enterDecision(170, decisionCanBacktrack[170]);
 
 			int LA170_0 = input.LA(1);
-			if ( ((LA170_0 >= AT_IDENT && LA170_0 <= AT_SIGN)||(LA170_0 >= BOTTOMCENTER_SYM && LA170_0 <= BOTTOMRIGHT_SYM)||(LA170_0 >= CHARSET_SYM && LA170_0 <= COLON)||LA170_0==COUNTER_STYLE_SYM||(LA170_0 >= DCOLON && LA170_0 <= DOT)||LA170_0==FONT_FACE_SYM||(LA170_0 >= GEN && LA170_0 <= GREATER)||(LA170_0 >= HASH && LA170_0 <= HASH_SYMBOL)||LA170_0==IDENT||LA170_0==IMPORT_SYM||(LA170_0 >= LBRACKET && LA170_0 <= LEFTTOP_SYM)||LA170_0==LESS_AND||(LA170_0 >= MEDIA_SYM && LA170_0 <= MOZ_DOCUMENT_SYM)||LA170_0==NAMESPACE_SYM||LA170_0==PAGE_SYM||(LA170_0 >= PIPE && LA170_0 <= PLUS)||(LA170_0 >= RIGHTBOTTOM_SYM && LA170_0 <= RIGHTTOP_SYM)||(LA170_0 >= SASS_AT_ROOT && LA170_0 <= SASS_DEBUG)||(LA170_0 >= SASS_EACH && LA170_0 <= SASS_ELSE)||(LA170_0 >= SASS_ERROR && LA170_0 <= SASS_FOR)||LA170_0==SASS_FUNCTION||(LA170_0 >= SASS_IF && LA170_0 <= SASS_MIXIN)||LA170_0==SASS_RETURN||(LA170_0 >= SASS_VAR && LA170_0 <= SEMI)||LA170_0==STAR||LA170_0==SUPPORTS_SYM||LA170_0==TILDE||(LA170_0 >= TOPCENTER_SYM && LA170_0 <= TOPRIGHT_SYM)||LA170_0==VARIABLE||LA170_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA170_0 >= AT_IDENT && LA170_0 <= AT_SIGN)||(LA170_0 >= BOTTOMCENTER_SYM && LA170_0 <= BOTTOMRIGHT_SYM)||(LA170_0 >= CHARSET_SYM && LA170_0 <= COLON)||LA170_0==COUNTER_STYLE_SYM||(LA170_0 >= DCOLON && LA170_0 <= DOT)||LA170_0==FONT_FACE_SYM||(LA170_0 >= GEN && LA170_0 <= GREATER)||(LA170_0 >= HASH && LA170_0 <= HASH_SYMBOL)||LA170_0==IDENT||LA170_0==IMPORT_SYM||(LA170_0 >= LBRACKET && LA170_0 <= LEFTTOP_SYM)||LA170_0==LESS_AND||(LA170_0 >= MEDIA_SYM && LA170_0 <= MOZ_DOCUMENT_SYM)||LA170_0==NAMESPACE_SYM||LA170_0==PAGE_SYM||(LA170_0 >= PIPE && LA170_0 <= PLUS)||(LA170_0 >= RIGHTBOTTOM_SYM && LA170_0 <= RIGHTTOP_SYM)||(LA170_0 >= SASS_AT_ROOT && LA170_0 <= SASS_DEBUG)||(LA170_0 >= SASS_EACH && LA170_0 <= SASS_ELSE)||(LA170_0 >= SASS_ERROR && LA170_0 <= SASS_FUNCTION)||(LA170_0 >= SASS_IF && LA170_0 <= SASS_MIXIN)||(LA170_0 >= SASS_RETURN && LA170_0 <= SEMI)||LA170_0==STAR||LA170_0==SUPPORTS_SYM||LA170_0==TILDE||(LA170_0 >= TOPCENTER_SYM && LA170_0 <= TOPRIGHT_SYM)||LA170_0==VARIABLE||LA170_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt170=1;
 			}
 			} finally {dbg.exitDecision(170);}
@@ -11443,7 +11479,7 @@
 			try { dbg.enterDecision(173, decisionCanBacktrack[173]);
 
 			int LA173_0 = input.LA(1);
-			if ( ((LA173_0 >= AT_IDENT && LA173_0 <= AT_SIGN)||(LA173_0 >= BOTTOMCENTER_SYM && LA173_0 <= BOTTOMRIGHT_SYM)||(LA173_0 >= CHARSET_SYM && LA173_0 <= COLON)||LA173_0==COUNTER_STYLE_SYM||(LA173_0 >= DCOLON && LA173_0 <= DOT)||LA173_0==FONT_FACE_SYM||(LA173_0 >= GEN && LA173_0 <= GREATER)||(LA173_0 >= HASH && LA173_0 <= HASH_SYMBOL)||LA173_0==IDENT||LA173_0==IMPORT_SYM||(LA173_0 >= LBRACKET && LA173_0 <= LEFTTOP_SYM)||LA173_0==LESS_AND||(LA173_0 >= MEDIA_SYM && LA173_0 <= MOZ_DOCUMENT_SYM)||LA173_0==NAMESPACE_SYM||LA173_0==PAGE_SYM||(LA173_0 >= PIPE && LA173_0 <= PLUS)||(LA173_0 >= RIGHTBOTTOM_SYM && LA173_0 <= RIGHTTOP_SYM)||(LA173_0 >= SASS_AT_ROOT && LA173_0 <= SASS_DEBUG)||(LA173_0 >= SASS_EACH && LA173_0 <= SASS_ELSE)||(LA173_0 >= SASS_ERROR && LA173_0 <= SASS_FOR)||LA173_0==SASS_FUNCTION||(LA173_0 >= SASS_IF && LA173_0 <= SASS_MIXIN)||LA173_0==SASS_RETURN||(LA173_0 >= SASS_VAR && LA173_0 <= SEMI)||LA173_0==STAR||LA173_0==SUPPORTS_SYM||LA173_0==TILDE||(LA173_0 >= TOPCENTER_SYM && LA173_0 <= TOPRIGHT_SYM)||LA173_0==VARIABLE||LA173_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA173_0 >= AT_IDENT && LA173_0 <= AT_SIGN)||(LA173_0 >= BOTTOMCENTER_SYM && LA173_0 <= BOTTOMRIGHT_SYM)||(LA173_0 >= CHARSET_SYM && LA173_0 <= COLON)||LA173_0==COUNTER_STYLE_SYM||(LA173_0 >= DCOLON && LA173_0 <= DOT)||LA173_0==FONT_FACE_SYM||(LA173_0 >= GEN && LA173_0 <= GREATER)||(LA173_0 >= HASH && LA173_0 <= HASH_SYMBOL)||LA173_0==IDENT||LA173_0==IMPORT_SYM||(LA173_0 >= LBRACKET && LA173_0 <= LEFTTOP_SYM)||LA173_0==LESS_AND||(LA173_0 >= MEDIA_SYM && LA173_0 <= MOZ_DOCUMENT_SYM)||LA173_0==NAMESPACE_SYM||LA173_0==PAGE_SYM||(LA173_0 >= PIPE && LA173_0 <= PLUS)||(LA173_0 >= RIGHTBOTTOM_SYM && LA173_0 <= RIGHTTOP_SYM)||(LA173_0 >= SASS_AT_ROOT && LA173_0 <= SASS_DEBUG)||(LA173_0 >= SASS_EACH && LA173_0 <= SASS_ELSE)||(LA173_0 >= SASS_ERROR && LA173_0 <= SASS_FUNCTION)||(LA173_0 >= SASS_IF && LA173_0 <= SASS_MIXIN)||(LA173_0 >= SASS_RETURN && LA173_0 <= SEMI)||LA173_0==STAR||LA173_0==SUPPORTS_SYM||LA173_0==TILDE||(LA173_0 >= TOPCENTER_SYM && LA173_0 <= TOPRIGHT_SYM)||LA173_0==VARIABLE||LA173_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt173=1;
 			}
 			} finally {dbg.exitDecision(173);}
@@ -11809,11 +11845,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_VAR:
 			case SASS_WARN:
 			case SASS_WHILE:
@@ -12026,7 +12064,7 @@
 			try { dbg.enterDecision(177, decisionCanBacktrack[177]);
 
 			int LA177_0 = input.LA(1);
-			if ( ((LA177_0 >= AT_IDENT && LA177_0 <= AT_SIGN)||(LA177_0 >= BOTTOMCENTER_SYM && LA177_0 <= BOTTOMRIGHT_SYM)||LA177_0==CHARSET_SYM||LA177_0==COMMA||LA177_0==COUNTER_STYLE_SYM||LA177_0==FONT_FACE_SYM||LA177_0==GEN||LA177_0==HASH_SYMBOL||LA177_0==IDENT||LA177_0==IMPORT_SYM||(LA177_0 >= LEFTBOTTOM_SYM && LA177_0 <= LEFTTOP_SYM)||(LA177_0 >= MEDIA_SYM && LA177_0 <= MOZ_DOCUMENT_SYM)||LA177_0==NAMESPACE_SYM||LA177_0==NUMBER||LA177_0==PAGE_SYM||(LA177_0 >= RIGHTBOTTOM_SYM && LA177_0 <= RIGHTTOP_SYM)||(LA177_0 >= SASS_AT_ROOT && LA177_0 <= SASS_DEBUG)||(LA177_0 >= SASS_EACH && LA177_0 <= SASS_ELSE)||LA177_0==SASS_EXTEND||LA177_0==SASS_FOR||LA177_0==SASS_FUNCTION||(LA177_0 >= SASS_IF && LA177_0 <= SASS_MIXIN)||LA177_0==SASS_RETURN||(LA177_0 >= SASS_VAR && LA177_0 <= SASS_WHILE)||LA177_0==STRING||(LA177_0 >= TOPCENTER_SYM && LA177_0 <= TOPRIGHT_SYM)||LA177_0==VARIABLE||LA177_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA177_0 >= AT_IDENT && LA177_0 <= AT_SIGN)||(LA177_0 >= BOTTOMCENTER_SYM && LA177_0 <= BOTTOMRIGHT_SYM)||LA177_0==CHARSET_SYM||LA177_0==COMMA||LA177_0==COUNTER_STYLE_SYM||LA177_0==FONT_FACE_SYM||LA177_0==GEN||LA177_0==HASH_SYMBOL||LA177_0==IDENT||LA177_0==IMPORT_SYM||(LA177_0 >= LEFTBOTTOM_SYM && LA177_0 <= LEFTTOP_SYM)||(LA177_0 >= MEDIA_SYM && LA177_0 <= MOZ_DOCUMENT_SYM)||LA177_0==NAMESPACE_SYM||LA177_0==NUMBER||LA177_0==PAGE_SYM||(LA177_0 >= RIGHTBOTTOM_SYM && LA177_0 <= RIGHTTOP_SYM)||(LA177_0 >= SASS_AT_ROOT && LA177_0 <= SASS_DEBUG)||(LA177_0 >= SASS_EACH && LA177_0 <= SASS_ELSE)||LA177_0==SASS_EXTEND||(LA177_0 >= SASS_FOR && LA177_0 <= SASS_FUNCTION)||(LA177_0 >= SASS_IF && LA177_0 <= SASS_MIXIN)||(LA177_0 >= SASS_RETURN && LA177_0 <= SASS_WHILE)||LA177_0==STRING||(LA177_0 >= TOPCENTER_SYM && LA177_0 <= TOPRIGHT_SYM)||LA177_0==VARIABLE||LA177_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt177=1;
 			}
 			} finally {dbg.exitDecision(177);}
@@ -12257,7 +12295,7 @@
 				try { dbg.enterDecision(185, decisionCanBacktrack[185]);
 
 				int LA185_0 = input.LA(1);
-				if ( ((LA185_0 >= AT_IDENT && LA185_0 <= AT_SIGN)||(LA185_0 >= BOTTOMCENTER_SYM && LA185_0 <= BOTTOMRIGHT_SYM)||LA185_0==CHARSET_SYM||LA185_0==COUNTER_STYLE_SYM||LA185_0==FONT_FACE_SYM||LA185_0==GEN||LA185_0==HASH_SYMBOL||LA185_0==IDENT||LA185_0==IMPORT_SYM||(LA185_0 >= LEFTBOTTOM_SYM && LA185_0 <= LEFTTOP_SYM)||(LA185_0 >= MEDIA_SYM && LA185_0 <= MOZ_DOCUMENT_SYM)||LA185_0==NAMESPACE_SYM||LA185_0==NUMBER||LA185_0==PAGE_SYM||(LA185_0 >= RIGHTBOTTOM_SYM && LA185_0 <= RIGHTTOP_SYM)||(LA185_0 >= SASS_AT_ROOT && LA185_0 <= SASS_DEBUG)||(LA185_0 >= SASS_EACH && LA185_0 <= SASS_ELSE)||LA185_0==SASS_EXTEND||LA185_0==SASS_FOR||LA185_0==SASS_FUNCTION||(LA185_0 >= SASS_IF && LA185_0 <= SASS_MIXIN)||LA185_0==SASS_RETURN||(LA185_0 >= SASS_VAR && LA185_0 <= SASS_WHILE)||LA185_0==STRING||(LA185_0 >= TOPCENTER_SYM && LA185_0 <= TOPRIGHT_SYM)||LA185_0==VARIABLE||LA185_0==WEBKIT_KEYFRAMES_SYM) ) {
+				if ( ((LA185_0 >= AT_IDENT && LA185_0 <= AT_SIGN)||(LA185_0 >= BOTTOMCENTER_SYM && LA185_0 <= BOTTOMRIGHT_SYM)||LA185_0==CHARSET_SYM||LA185_0==COUNTER_STYLE_SYM||LA185_0==FONT_FACE_SYM||LA185_0==GEN||LA185_0==HASH_SYMBOL||LA185_0==IDENT||LA185_0==IMPORT_SYM||(LA185_0 >= LEFTBOTTOM_SYM && LA185_0 <= LEFTTOP_SYM)||(LA185_0 >= MEDIA_SYM && LA185_0 <= MOZ_DOCUMENT_SYM)||LA185_0==NAMESPACE_SYM||LA185_0==NUMBER||LA185_0==PAGE_SYM||(LA185_0 >= RIGHTBOTTOM_SYM && LA185_0 <= RIGHTTOP_SYM)||(LA185_0 >= SASS_AT_ROOT && LA185_0 <= SASS_DEBUG)||(LA185_0 >= SASS_EACH && LA185_0 <= SASS_ELSE)||LA185_0==SASS_EXTEND||(LA185_0 >= SASS_FOR && LA185_0 <= SASS_FUNCTION)||(LA185_0 >= SASS_IF && LA185_0 <= SASS_MIXIN)||(LA185_0 >= SASS_RETURN && LA185_0 <= SASS_WHILE)||LA185_0==STRING||(LA185_0 >= TOPCENTER_SYM && LA185_0 <= TOPRIGHT_SYM)||LA185_0==VARIABLE||LA185_0==WEBKIT_KEYFRAMES_SYM) ) {
 					alt185=1;
 				}
 				else if ( (LA185_0==COMMA) ) {
@@ -12550,11 +12588,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -13215,7 +13255,7 @@
 			try { dbg.enterDecision(201, decisionCanBacktrack[201]);
 
 			int LA201_0 = input.LA(1);
-			if ( ((LA201_0 >= AT_IDENT && LA201_0 <= AT_SIGN)||(LA201_0 >= BOTTOMCENTER_SYM && LA201_0 <= BOTTOMRIGHT_SYM)||(LA201_0 >= CHARSET_SYM && LA201_0 <= COLON)||LA201_0==COUNTER_STYLE_SYM||(LA201_0 >= DCOLON && LA201_0 <= DOT)||LA201_0==FONT_FACE_SYM||(LA201_0 >= GEN && LA201_0 <= GREATER)||(LA201_0 >= HASH && LA201_0 <= HASH_SYMBOL)||LA201_0==IDENT||LA201_0==IMPORT_SYM||(LA201_0 >= LBRACKET && LA201_0 <= LEFTTOP_SYM)||LA201_0==LESS_AND||(LA201_0 >= MEDIA_SYM && LA201_0 <= MOZ_DOCUMENT_SYM)||LA201_0==NAMESPACE_SYM||LA201_0==PAGE_SYM||(LA201_0 >= PIPE && LA201_0 <= PLUS)||(LA201_0 >= RIGHTBOTTOM_SYM && LA201_0 <= RIGHTTOP_SYM)||(LA201_0 >= SASS_AT_ROOT && LA201_0 <= SASS_DEBUG)||(LA201_0 >= SASS_EACH && LA201_0 <= SASS_ELSE)||(LA201_0 >= SASS_ERROR && LA201_0 <= SASS_FOR)||LA201_0==SASS_FUNCTION||(LA201_0 >= SASS_IF && LA201_0 <= SASS_MIXIN)||LA201_0==SASS_RETURN||(LA201_0 >= SASS_VAR && LA201_0 <= SEMI)||LA201_0==STAR||LA201_0==SUPPORTS_SYM||LA201_0==TILDE||(LA201_0 >= TOPCENTER_SYM && LA201_0 <= TOPRIGHT_SYM)||LA201_0==VARIABLE||LA201_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA201_0 >= AT_IDENT && LA201_0 <= AT_SIGN)||(LA201_0 >= BOTTOMCENTER_SYM && LA201_0 <= BOTTOMRIGHT_SYM)||(LA201_0 >= CHARSET_SYM && LA201_0 <= COLON)||LA201_0==COUNTER_STYLE_SYM||(LA201_0 >= DCOLON && LA201_0 <= DOT)||LA201_0==FONT_FACE_SYM||(LA201_0 >= GEN && LA201_0 <= GREATER)||(LA201_0 >= HASH && LA201_0 <= HASH_SYMBOL)||LA201_0==IDENT||LA201_0==IMPORT_SYM||(LA201_0 >= LBRACKET && LA201_0 <= LEFTTOP_SYM)||LA201_0==LESS_AND||(LA201_0 >= MEDIA_SYM && LA201_0 <= MOZ_DOCUMENT_SYM)||LA201_0==NAMESPACE_SYM||LA201_0==PAGE_SYM||(LA201_0 >= PIPE && LA201_0 <= PLUS)||(LA201_0 >= RIGHTBOTTOM_SYM && LA201_0 <= RIGHTTOP_SYM)||(LA201_0 >= SASS_AT_ROOT && LA201_0 <= SASS_DEBUG)||(LA201_0 >= SASS_EACH && LA201_0 <= SASS_ELSE)||(LA201_0 >= SASS_ERROR && LA201_0 <= SASS_FUNCTION)||(LA201_0 >= SASS_IF && LA201_0 <= SASS_MIXIN)||(LA201_0 >= SASS_RETURN && LA201_0 <= SEMI)||LA201_0==STAR||LA201_0==SUPPORTS_SYM||LA201_0==TILDE||(LA201_0 >= TOPCENTER_SYM && LA201_0 <= TOPRIGHT_SYM)||LA201_0==VARIABLE||LA201_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt201=1;
 			}
 			} finally {dbg.exitDecision(201);}
@@ -14838,7 +14878,7 @@
 			else if ( (LA220_0==SASS_ERROR) ) {
 				alt220=16;
 			}
-			else if ( ((LA220_0 >= BOTTOMCENTER_SYM && LA220_0 <= BOTTOMRIGHT_SYM)||LA220_0==CHARSET_SYM||(LA220_0 >= LEFTBOTTOM_SYM && LA220_0 <= LEFTTOP_SYM)||LA220_0==NAMESPACE_SYM||(LA220_0 >= RIGHTBOTTOM_SYM && LA220_0 <= RIGHTTOP_SYM)||LA220_0==SASS_ELSE||LA220_0==SASS_FUNCTION||(LA220_0 >= TOPCENTER_SYM && LA220_0 <= TOPRIGHT_SYM)) ) {
+			else if ( ((LA220_0 >= BOTTOMCENTER_SYM && LA220_0 <= BOTTOMRIGHT_SYM)||LA220_0==CHARSET_SYM||(LA220_0 >= LEFTBOTTOM_SYM && LA220_0 <= LEFTTOP_SYM)||LA220_0==NAMESPACE_SYM||(LA220_0 >= RIGHTBOTTOM_SYM && LA220_0 <= RIGHTTOP_SYM)||LA220_0==SASS_ELSE||(LA220_0 >= SASS_FORWARD && LA220_0 <= SASS_FUNCTION)||LA220_0==SASS_USE||(LA220_0 >= TOPCENTER_SYM && LA220_0 <= TOPRIGHT_SYM)) ) {
 				int LA220_39 = input.LA(2);
 				if ( ((synpred23_Css3()&&evalPredicate(isLessSource(),"isLessSource()"))) ) {
 					alt220=1;
@@ -18143,7 +18183,7 @@
 							try { dbg.enterDecision(260, decisionCanBacktrack[260]);
 
 							int LA260_0 = input.LA(1);
-							if ( ((LA260_0 >= ANGLE && LA260_0 <= AT_SIGN)||(LA260_0 >= BOTTOMCENTER_SYM && LA260_0 <= BOTTOMRIGHT_SYM)||LA260_0==CHARSET_SYM||LA260_0==COUNTER_STYLE_SYM||LA260_0==DIMENSION||LA260_0==EMS||LA260_0==EXS||(LA260_0 >= FONT_FACE_SYM && LA260_0 <= FREQ)||LA260_0==GEN||(LA260_0 >= HASH && LA260_0 <= HASH_SYMBOL)||LA260_0==IDENT||LA260_0==IMPORT_SYM||(LA260_0 >= LBRACKET && LA260_0 <= LENGTH)||(LA260_0 >= LESS_AND && LA260_0 <= LESS_JS_STRING)||(LA260_0 >= MEDIA_SYM && LA260_0 <= MOZ_DOCUMENT_SYM)||LA260_0==NAMESPACE_SYM||LA260_0==NUMBER||(LA260_0 >= PAGE_SYM && LA260_0 <= PERCENTAGE_SYMBOL)||LA260_0==PLUS||(LA260_0 >= REM && LA260_0 <= RIGHTTOP_SYM)||(LA260_0 >= SASS_AT_ROOT && LA260_0 <= SASS_DEBUG)||(LA260_0 >= SASS_EACH && LA260_0 <= SASS_ELSE)||LA260_0==SASS_EXTEND||LA260_0==SASS_FOR||LA260_0==SASS_FUNCTION||(LA260_0 >= SASS_IF && LA260_0 <= SASS_MIXIN)||LA260_0==SASS_RETURN||(LA260_0 >= SASS_VAR && LA260_0 <= SASS_WHILE)||LA260_0==STRING||(LA260_0 >= TILDE && LA260_0 <= TOPRIGHT_SYM)||(LA260_0 >= URANGE && LA260_0 <= URI)||LA260_0==VARIABLE||LA260_0==WEBKIT_KEYFRAMES_SYM) ) {
+							if ( ((LA260_0 >= ANGLE && LA260_0 <= AT_SIGN)||(LA260_0 >= BOTTOMCENTER_SYM && LA260_0 <= BOTTOMRIGHT_SYM)||LA260_0==CHARSET_SYM||LA260_0==COUNTER_STYLE_SYM||LA260_0==DIMENSION||LA260_0==EMS||LA260_0==EXS||(LA260_0 >= FONT_FACE_SYM && LA260_0 <= FREQ)||LA260_0==GEN||(LA260_0 >= HASH && LA260_0 <= HASH_SYMBOL)||LA260_0==IDENT||LA260_0==IMPORT_SYM||(LA260_0 >= LBRACKET && LA260_0 <= LENGTH)||(LA260_0 >= LESS_AND && LA260_0 <= LESS_JS_STRING)||(LA260_0 >= MEDIA_SYM && LA260_0 <= MOZ_DOCUMENT_SYM)||LA260_0==NAMESPACE_SYM||LA260_0==NUMBER||(LA260_0 >= PAGE_SYM && LA260_0 <= PERCENTAGE_SYMBOL)||LA260_0==PLUS||(LA260_0 >= REM && LA260_0 <= RIGHTTOP_SYM)||(LA260_0 >= SASS_AT_ROOT && LA260_0 <= SASS_DEBUG)||(LA260_0 >= SASS_EACH && LA260_0 <= SASS_ELSE)||LA260_0==SASS_EXTEND||(LA260_0 >= SASS_FOR && LA260_0 <= SASS_FUNCTION)||(LA260_0 >= SASS_IF && LA260_0 <= SASS_MIXIN)||(LA260_0 >= SASS_RETURN && LA260_0 <= SASS_WHILE)||LA260_0==STRING||(LA260_0 >= TILDE && LA260_0 <= TOPRIGHT_SYM)||(LA260_0 >= URANGE && LA260_0 <= URI)||LA260_0==VARIABLE||LA260_0==WEBKIT_KEYFRAMES_SYM) ) {
 								alt260=1;
 							}
 							else if ( (LA260_0==STAR) ) {
@@ -18812,11 +18852,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -19489,11 +19531,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -20485,11 +20529,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_VAR:
 			case SASS_WARN:
 			case SASS_WHILE:
@@ -21076,7 +21122,7 @@
 			try { dbg.enterDecision(297, decisionCanBacktrack[297]);
 
 			int LA297_0 = input.LA(1);
-			if ( ((LA297_0 >= ANGLE && LA297_0 <= AT_SIGN)||(LA297_0 >= BOTTOMCENTER_SYM && LA297_0 <= BOTTOMRIGHT_SYM)||LA297_0==CHARSET_SYM||LA297_0==COUNTER_STYLE_SYM||LA297_0==DIMENSION||LA297_0==EMS||LA297_0==EXS||(LA297_0 >= FONT_FACE_SYM && LA297_0 <= FREQ)||LA297_0==GEN||(LA297_0 >= HASH && LA297_0 <= HASH_SYMBOL)||(LA297_0 >= IDENT && LA297_0 <= IMPORT_SYM)||(LA297_0 >= LBRACE && LA297_0 <= LENGTH)||(LA297_0 >= LESS_AND && LA297_0 <= LESS_JS_STRING)||LA297_0==LPAREN||(LA297_0 >= MEDIA_SYM && LA297_0 <= MOZ_DOCUMENT_SYM)||LA297_0==NAMESPACE_SYM||(LA297_0 >= NOT && LA297_0 <= NUMBER)||(LA297_0 >= PAGE_SYM && LA297_0 <= PERCENTAGE_SYMBOL)||LA297_0==PLUS||(LA297_0 >= REM && LA297_0 <= RIGHTTOP_SYM)||(LA297_0 >= SASS_AT_ROOT && LA297_0 <= SASS_DEBUG)||(LA297_0 >= SASS_EACH && LA297_0 <= SASS_ELSE)||LA297_0==SASS_EXTEND||LA297_0==SASS_FOR||LA297_0==SASS_FUNCTION||(LA297_0 >= SASS_IF && LA297_0 <= SASS_MIXIN)||LA297_0==SASS_RETURN||(LA297_0 >= SASS_VAR && LA297_0 <= SASS_WHILE)||LA297_0==STRING||(LA297_0 >= TILDE && LA297_0 <= TOPRIGHT_SYM)||(LA297_0 >= URANGE && LA297_0 <= URI)||LA297_0==VARIABLE||LA297_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA297_0 >= ANGLE && LA297_0 <= AT_SIGN)||(LA297_0 >= BOTTOMCENTER_SYM && LA297_0 <= BOTTOMRIGHT_SYM)||LA297_0==CHARSET_SYM||LA297_0==COUNTER_STYLE_SYM||LA297_0==DIMENSION||LA297_0==EMS||LA297_0==EXS||(LA297_0 >= FONT_FACE_SYM && LA297_0 <= FREQ)||LA297_0==GEN||(LA297_0 >= HASH && LA297_0 <= HASH_SYMBOL)||(LA297_0 >= IDENT && LA297_0 <= IMPORT_SYM)||(LA297_0 >= LBRACE && LA297_0 <= LENGTH)||(LA297_0 >= LESS_AND && LA297_0 <= LESS_JS_STRING)||LA297_0==LPAREN||(LA297_0 >= MEDIA_SYM && LA297_0 <= MOZ_DOCUMENT_SYM)||LA297_0==NAMESPACE_SYM||(LA297_0 >= NOT && LA297_0 <= NUMBER)||(LA297_0 >= PAGE_SYM && LA297_0 <= PERCENTAGE_SYMBOL)||LA297_0==PLUS||(LA297_0 >= REM && LA297_0 <= RIGHTTOP_SYM)||(LA297_0 >= SASS_AT_ROOT && LA297_0 <= SASS_DEBUG)||(LA297_0 >= SASS_EACH && LA297_0 <= SASS_ELSE)||LA297_0==SASS_EXTEND||(LA297_0 >= SASS_FOR && LA297_0 <= SASS_FUNCTION)||(LA297_0 >= SASS_IF && LA297_0 <= SASS_MIXIN)||(LA297_0 >= SASS_RETURN && LA297_0 <= SASS_WHILE)||LA297_0==STRING||(LA297_0 >= TILDE && LA297_0 <= TOPRIGHT_SYM)||(LA297_0 >= URANGE && LA297_0 <= URI)||LA297_0==VARIABLE||LA297_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt297=1;
 			}
 			else if ( (LA297_0==RPAREN) ) {
@@ -21489,7 +21535,7 @@
 				}
 
 			}
-			else if ( (LA307_0==AT_IDENT||(LA307_0 >= BOTTOMCENTER_SYM && LA307_0 <= BOTTOMRIGHT_SYM)||LA307_0==CHARSET_SYM||LA307_0==COUNTER_STYLE_SYM||LA307_0==FONT_FACE_SYM||LA307_0==IMPORT_SYM||(LA307_0 >= LEFTBOTTOM_SYM && LA307_0 <= LEFTTOP_SYM)||LA307_0==MEDIA_SYM||LA307_0==MOZ_DOCUMENT_SYM||LA307_0==NAMESPACE_SYM||LA307_0==PAGE_SYM||(LA307_0 >= RIGHTBOTTOM_SYM && LA307_0 <= RIGHTTOP_SYM)||(LA307_0 >= SASS_AT_ROOT && LA307_0 <= SASS_DEBUG)||(LA307_0 >= SASS_EACH && LA307_0 <= SASS_ELSE)||LA307_0==SASS_EXTEND||LA307_0==SASS_FOR||LA307_0==SASS_FUNCTION||(LA307_0 >= SASS_IF && LA307_0 <= SASS_MIXIN)||LA307_0==SASS_RETURN||(LA307_0 >= SASS_WARN && LA307_0 <= SASS_WHILE)||(LA307_0 >= TOPCENTER_SYM && LA307_0 <= TOPRIGHT_SYM)||LA307_0==WEBKIT_KEYFRAMES_SYM) ) {
+			else if ( (LA307_0==AT_IDENT||(LA307_0 >= BOTTOMCENTER_SYM && LA307_0 <= BOTTOMRIGHT_SYM)||LA307_0==CHARSET_SYM||LA307_0==COUNTER_STYLE_SYM||LA307_0==FONT_FACE_SYM||LA307_0==IMPORT_SYM||(LA307_0 >= LEFTBOTTOM_SYM && LA307_0 <= LEFTTOP_SYM)||LA307_0==MEDIA_SYM||LA307_0==MOZ_DOCUMENT_SYM||LA307_0==NAMESPACE_SYM||LA307_0==PAGE_SYM||(LA307_0 >= RIGHTBOTTOM_SYM && LA307_0 <= RIGHTTOP_SYM)||(LA307_0 >= SASS_AT_ROOT && LA307_0 <= SASS_DEBUG)||(LA307_0 >= SASS_EACH && LA307_0 <= SASS_ELSE)||LA307_0==SASS_EXTEND||(LA307_0 >= SASS_FOR && LA307_0 <= SASS_FUNCTION)||(LA307_0 >= SASS_IF && LA307_0 <= SASS_MIXIN)||(LA307_0 >= SASS_RETURN && LA307_0 <= SASS_USE)||(LA307_0 >= SASS_WARN && LA307_0 <= SASS_WHILE)||(LA307_0 >= TOPCENTER_SYM && LA307_0 <= TOPRIGHT_SYM)||LA307_0==WEBKIT_KEYFRAMES_SYM) ) {
 				int LA307_2 = input.LA(2);
 				if ( (((synpred38_Css3()&&evalPredicate(isCssPreprocessorSource(),"isCssPreprocessorSource()"))&&evalPredicate(isLessSource(),"isLessSource()"))) ) {
 					alt307=1;
@@ -22057,7 +22103,7 @@
 				}
 
 			}
-			else if ( (LA309_0==AT_IDENT||(LA309_0 >= BOTTOMCENTER_SYM && LA309_0 <= BOTTOMRIGHT_SYM)||LA309_0==CHARSET_SYM||LA309_0==COUNTER_STYLE_SYM||LA309_0==FONT_FACE_SYM||LA309_0==IMPORT_SYM||(LA309_0 >= LEFTBOTTOM_SYM && LA309_0 <= LEFTTOP_SYM)||LA309_0==MEDIA_SYM||LA309_0==MOZ_DOCUMENT_SYM||LA309_0==NAMESPACE_SYM||LA309_0==PAGE_SYM||(LA309_0 >= RIGHTBOTTOM_SYM && LA309_0 <= RIGHTTOP_SYM)||(LA309_0 >= SASS_AT_ROOT && LA309_0 <= SASS_DEBUG)||(LA309_0 >= SASS_EACH && LA309_0 <= SASS_ELSE)||LA309_0==SASS_EXTEND||LA309_0==SASS_FOR||LA309_0==SASS_FUNCTION||(LA309_0 >= SASS_IF && LA309_0 <= SASS_MIXIN)||LA309_0==SASS_RETURN||(LA309_0 >= SASS_VAR && LA309_0 <= SASS_WHILE)||(LA309_0 >= TOPCENTER_SYM && LA309_0 <= TOPRIGHT_SYM)||LA309_0==WEBKIT_KEYFRAMES_SYM) ) {
+			else if ( (LA309_0==AT_IDENT||(LA309_0 >= BOTTOMCENTER_SYM && LA309_0 <= BOTTOMRIGHT_SYM)||LA309_0==CHARSET_SYM||LA309_0==COUNTER_STYLE_SYM||LA309_0==FONT_FACE_SYM||LA309_0==IMPORT_SYM||(LA309_0 >= LEFTBOTTOM_SYM && LA309_0 <= LEFTTOP_SYM)||LA309_0==MEDIA_SYM||LA309_0==MOZ_DOCUMENT_SYM||LA309_0==NAMESPACE_SYM||LA309_0==PAGE_SYM||(LA309_0 >= RIGHTBOTTOM_SYM && LA309_0 <= RIGHTTOP_SYM)||(LA309_0 >= SASS_AT_ROOT && LA309_0 <= SASS_DEBUG)||(LA309_0 >= SASS_EACH && LA309_0 <= SASS_ELSE)||LA309_0==SASS_EXTEND||(LA309_0 >= SASS_FOR && LA309_0 <= SASS_FUNCTION)||(LA309_0 >= SASS_IF && LA309_0 <= SASS_MIXIN)||(LA309_0 >= SASS_RETURN && LA309_0 <= SASS_WHILE)||(LA309_0 >= TOPCENTER_SYM && LA309_0 <= TOPRIGHT_SYM)||LA309_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt309=2;
 			}
 
@@ -22768,11 +22814,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -23323,11 +23371,13 @@
 			case SASS_ELSE:
 			case SASS_EXTEND:
 			case SASS_FOR:
+			case SASS_FORWARD:
 			case SASS_FUNCTION:
 			case SASS_IF:
 			case SASS_INCLUDE:
 			case SASS_MIXIN:
 			case SASS_RETURN:
+			case SASS_USE:
 			case SASS_WARN:
 			case SASS_WHILE:
 			case TOPCENTER_SYM:
@@ -23718,7 +23768,7 @@
 
 
 	// $ANTLR start "cp_variable"
-	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1082:1: cp_variable : ({...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT ) |{...}? ( SASS_VAR | IDENT DOT SASS_VAR ) );
+	// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1082:1: cp_variable : ({...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT | SASS_USE | SASS_FORWARD ) |{...}? ( SASS_VAR | IDENT DOT SASS_VAR ) );
 	public final void cp_variable() throws RecognitionException {
 		try { dbg.enterRule(getGrammarFileName(), "cp_variable");
 		if ( getRuleLevel()==0 ) {dbg.commence();}
@@ -23726,12 +23776,12 @@
 		dbg.location(1082, 0);
 
 		try {
-			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1083:5: ({...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT ) |{...}? ( SASS_VAR | IDENT DOT SASS_VAR ) )
+			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1083:5: ({...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT | SASS_USE | SASS_FORWARD ) |{...}? ( SASS_VAR | IDENT DOT SASS_VAR ) )
 			int alt325=2;
 			try { dbg.enterDecision(325, decisionCanBacktrack[325]);
 
 			int LA325_0 = input.LA(1);
-			if ( (LA325_0==AT_IDENT||(LA325_0 >= BOTTOMCENTER_SYM && LA325_0 <= BOTTOMRIGHT_SYM)||LA325_0==CHARSET_SYM||LA325_0==COUNTER_STYLE_SYM||LA325_0==FONT_FACE_SYM||LA325_0==IMPORT_SYM||(LA325_0 >= LEFTBOTTOM_SYM && LA325_0 <= LEFTTOP_SYM)||LA325_0==MEDIA_SYM||LA325_0==MOZ_DOCUMENT_SYM||LA325_0==NAMESPACE_SYM||LA325_0==PAGE_SYM||(LA325_0 >= RIGHTBOTTOM_SYM && LA325_0 <= RIGHTTOP_SYM)||(LA325_0 >= SASS_AT_ROOT && LA325_0 <= SASS_DEBUG)||(LA325_0 >= SASS_EACH && LA325_0 <= SASS_ELSE)||LA325_0==SASS_EXTEND||LA325_0==SASS_FOR||LA325_0==SASS_FUNCTION||(LA325_0 >= SASS_IF && LA325_0 <= SASS_MIXIN)||LA325_0==SASS_RETURN||(LA325_0 >= SASS_WARN && LA325_0 <= SASS_WHILE)||(LA325_0 >= TOPCENTER_SYM && LA325_0 <= TOPRIGHT_SYM)||LA325_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA325_0==AT_IDENT||(LA325_0 >= BOTTOMCENTER_SYM && LA325_0 <= BOTTOMRIGHT_SYM)||LA325_0==CHARSET_SYM||LA325_0==COUNTER_STYLE_SYM||LA325_0==FONT_FACE_SYM||LA325_0==IMPORT_SYM||(LA325_0 >= LEFTBOTTOM_SYM && LA325_0 <= LEFTTOP_SYM)||LA325_0==MEDIA_SYM||LA325_0==MOZ_DOCUMENT_SYM||LA325_0==NAMESPACE_SYM||LA325_0==PAGE_SYM||(LA325_0 >= RIGHTBOTTOM_SYM && LA325_0 <= RIGHTTOP_SYM)||(LA325_0 >= SASS_AT_ROOT && LA325_0 <= SASS_DEBUG)||(LA325_0 >= SASS_EACH && LA325_0 <= SASS_ELSE)||LA325_0==SASS_EXTEND||(LA325_0 >= SASS_FOR && LA325_0 <= SASS_FUNCTION)||(LA325_0 >= SASS_IF && LA325_0 <= SASS_MIXIN)||(LA325_0 >= SASS_RETURN && LA325_0 <= SASS_USE)||(LA325_0 >= SASS_WARN && LA325_0 <= SASS_WHILE)||(LA325_0 >= TOPCENTER_SYM && LA325_0 <= TOPRIGHT_SYM)||LA325_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt325=1;
 			}
 			else if ( (LA325_0==IDENT||LA325_0==SASS_VAR) ) {
@@ -23752,14 +23802,14 @@
 				case 1 :
 					dbg.enterAlt(1);
 
-					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1085:9: {...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT )
+					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1085:9: {...}? ( AT_IDENT | IMPORT_SYM | PAGE_SYM | MEDIA_SYM | NAMESPACE_SYM | CHARSET_SYM | COUNTER_STYLE_SYM | FONT_FACE_SYM | TOPLEFTCORNER_SYM | TOPLEFT_SYM | TOPCENTER_SYM | TOPRIGHT_SYM | TOPRIGHTCORNER_SYM | BOTTOMLEFTCORNER_SYM | BOTTOMLEFT_SYM | BOTTOMCENTER_SYM | BOTTOMRIGHT_SYM | BOTTOMRIGHTCORNER_SYM | LEFTTOP_SYM | LEFTMIDDLE_SYM | LEFTBOTTOM_SYM | RIGHTTOP_SYM | RIGHTMIDDLE_SYM | RIGHTBOTTOM_SYM | MOZ_DOCUMENT_SYM | WEBKIT_KEYFRAMES_SYM | SASS_CONTENT | SASS_MIXIN | SASS_INCLUDE | SASS_EXTEND | SASS_DEBUG | SASS_WARN | SASS_IF | SASS_ELSE | SASS_FOR | SASS_FUNCTION | SASS_RETURN | SASS_EACH | SASS_WHILE | SASS_AT_ROOT | SASS_USE | SASS_FORWARD )
 					{
 					dbg.location(1085,9);
 					if ( !(evalPredicate(isLessSource(),"isLessSource()")) ) {
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "cp_variable", "isLessSource()");
 					}dbg.location(1085,27);
-					if ( input.LA(1)==AT_IDENT||(input.LA(1) >= BOTTOMCENTER_SYM && input.LA(1) <= BOTTOMRIGHT_SYM)||input.LA(1)==CHARSET_SYM||input.LA(1)==COUNTER_STYLE_SYM||input.LA(1)==FONT_FACE_SYM||input.LA(1)==IMPORT_SYM||(input.LA(1) >= LEFTBOTTOM_SYM && input.LA(1) <= LEFTTOP_SYM)||input.LA(1)==MEDIA_SYM||input.LA(1)==MOZ_DOCUMENT_SYM||input.LA(1)==NAMESPACE_SYM||input.LA(1)==PAGE_SYM||(input.LA(1) >= RIGHTBOTTOM_SYM && input.LA(1) <= RIGHTTOP_SYM)||(input.LA(1) >= SASS_AT_ROOT && input.LA(1) <= SASS_DEBUG)||(input.LA(1) >= SASS_EACH && input.LA(1) <= SASS_ELSE)||input.LA(1)==SASS_EXTEND||input.LA(1)==SASS_FOR||input.LA(1)==SASS_FUNCTION||(input.LA(1) >= SASS_IF && input.LA(1) <= SASS_MIXIN)||input.LA(1)==SASS_RETURN||(input.LA(1) >= SASS_WARN && input.LA(1) <= SASS_WHILE)||(input.LA(1) >= TOPCENTER_SYM && input.LA(1) <= TOPRIGHT_SYM)||input.LA(1)==WEBKIT_KEYFRAMES_SYM ) {
+					if ( input.LA(1)==AT_IDENT||(input.LA(1) >= BOTTOMCENTER_SYM && input.LA(1) <= BOTTOMRIGHT_SYM)||input.LA(1)==CHARSET_SYM||input.LA(1)==COUNTER_STYLE_SYM||input.LA(1)==FONT_FACE_SYM||input.LA(1)==IMPORT_SYM||(input.LA(1) >= LEFTBOTTOM_SYM && input.LA(1) <= LEFTTOP_SYM)||input.LA(1)==MEDIA_SYM||input.LA(1)==MOZ_DOCUMENT_SYM||input.LA(1)==NAMESPACE_SYM||input.LA(1)==PAGE_SYM||(input.LA(1) >= RIGHTBOTTOM_SYM && input.LA(1) <= RIGHTTOP_SYM)||(input.LA(1) >= SASS_AT_ROOT && input.LA(1) <= SASS_DEBUG)||(input.LA(1) >= SASS_EACH && input.LA(1) <= SASS_ELSE)||input.LA(1)==SASS_EXTEND||(input.LA(1) >= SASS_FOR && input.LA(1) <= SASS_FUNCTION)||(input.LA(1) >= SASS_IF && input.LA(1) <= SASS_MIXIN)||(input.LA(1) >= SASS_RETURN && input.LA(1) <= SASS_USE)||(input.LA(1) >= SASS_WARN && input.LA(1) <= SASS_WHILE)||(input.LA(1) >= TOPCENTER_SYM && input.LA(1) <= TOPRIGHT_SYM)||input.LA(1)==WEBKIT_KEYFRAMES_SYM ) {
 						input.consume();
 						state.errorRecovery=false;
 						state.failed=false;
@@ -23812,7 +23862,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1087:29: SASS_VAR
 							{
 							dbg.location(1087,29);
-							match(input,SASS_VAR,FOLLOW_SASS_VAR_in_cp_variable7406); if (state.failed) return;
+							match(input,SASS_VAR,FOLLOW_SASS_VAR_in_cp_variable7413); if (state.failed) return;
 							}
 							break;
 						case 2 :
@@ -23821,9 +23871,9 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1087:40: IDENT DOT SASS_VAR
 							{
 							dbg.location(1087,40);
-							match(input,IDENT,FOLLOW_IDENT_in_cp_variable7410); if (state.failed) return;dbg.location(1087,46);
-							match(input,DOT,FOLLOW_DOT_in_cp_variable7412); if (state.failed) return;dbg.location(1087,50);
-							match(input,SASS_VAR,FOLLOW_SASS_VAR_in_cp_variable7414); if (state.failed) return;
+							match(input,IDENT,FOLLOW_IDENT_in_cp_variable7417); if (state.failed) return;dbg.location(1087,46);
+							match(input,DOT,FOLLOW_DOT_in_cp_variable7419); if (state.failed) return;dbg.location(1087,50);
+							match(input,SASS_VAR,FOLLOW_SASS_VAR_in_cp_variable7421); if (state.failed) return;
 							}
 							break;
 
@@ -23871,7 +23921,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1093:5: ( cp_expression )=> cp_expression ( ( ( ws )? COMMA ( ws )? cp_expression )=> ( ws )? COMMA ( ws )? cp_expression )*
 			{
 			dbg.location(1093,24);
-			pushFollow(FOLLOW_cp_expression_in_cp_expression_list7444);
+			pushFollow(FOLLOW_cp_expression_in_cp_expression_list7451);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1094,5);
@@ -23918,7 +23968,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:37: ws
 							{
 							dbg.location(1094,37);
-							pushFollow(FOLLOW_ws_in_cp_expression_list7463);
+							pushFollow(FOLLOW_ws_in_cp_expression_list7470);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -23928,7 +23978,7 @@
 					}
 					} finally {dbg.exitSubRule(326);}
 					dbg.location(1094,41);
-					match(input,COMMA,FOLLOW_COMMA_in_cp_expression_list7466); if (state.failed) return;dbg.location(1094,47);
+					match(input,COMMA,FOLLOW_COMMA_in_cp_expression_list7473); if (state.failed) return;dbg.location(1094,47);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:47: ( ws )?
 					int alt327=2;
 					try { dbg.enterSubRule(327);
@@ -23947,7 +23997,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:47: ws
 							{
 							dbg.location(1094,47);
-							pushFollow(FOLLOW_ws_in_cp_expression_list7468);
+							pushFollow(FOLLOW_ws_in_cp_expression_list7475);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -23957,7 +24007,7 @@
 					}
 					} finally {dbg.exitSubRule(327);}
 					dbg.location(1094,51);
-					pushFollow(FOLLOW_cp_expression_in_cp_expression_list7471);
+					pushFollow(FOLLOW_cp_expression_in_cp_expression_list7478);
 					cp_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -24080,7 +24130,7 @@
 			else if ( (LA337_0==HASH) && (synpred43_Css3())) {
 				alt337=2;
 			}
-			else if ( (LA337_0==AT_IDENT||(LA337_0 >= BOTTOMCENTER_SYM && LA337_0 <= BOTTOMRIGHT_SYM)||LA337_0==CHARSET_SYM||LA337_0==COUNTER_STYLE_SYM||LA337_0==FONT_FACE_SYM||LA337_0==IMPORT_SYM||(LA337_0 >= LEFTBOTTOM_SYM && LA337_0 <= LEFTTOP_SYM)||LA337_0==MEDIA_SYM||LA337_0==MOZ_DOCUMENT_SYM||LA337_0==NAMESPACE_SYM||LA337_0==PAGE_SYM||(LA337_0 >= RIGHTBOTTOM_SYM && LA337_0 <= RIGHTTOP_SYM)||(LA337_0 >= SASS_AT_ROOT && LA337_0 <= SASS_DEBUG)||(LA337_0 >= SASS_EACH && LA337_0 <= SASS_ELSE)||LA337_0==SASS_EXTEND||LA337_0==SASS_FOR||LA337_0==SASS_FUNCTION||(LA337_0 >= SASS_IF && LA337_0 <= SASS_MIXIN)||LA337_0==SASS_RETURN||(LA337_0 >= SASS_WARN && LA337_0 <= SASS_WHILE)||(LA337_0 >= TOPCENTER_SYM && LA337_0 <= TOPRIGHT_SYM)||LA337_0==WEBKIT_KEYFRAMES_SYM) && (synpred43_Css3())) {
+			else if ( (LA337_0==AT_IDENT||(LA337_0 >= BOTTOMCENTER_SYM && LA337_0 <= BOTTOMRIGHT_SYM)||LA337_0==CHARSET_SYM||LA337_0==COUNTER_STYLE_SYM||LA337_0==FONT_FACE_SYM||LA337_0==IMPORT_SYM||(LA337_0 >= LEFTBOTTOM_SYM && LA337_0 <= LEFTTOP_SYM)||LA337_0==MEDIA_SYM||LA337_0==MOZ_DOCUMENT_SYM||LA337_0==NAMESPACE_SYM||LA337_0==PAGE_SYM||(LA337_0 >= RIGHTBOTTOM_SYM && LA337_0 <= RIGHTTOP_SYM)||(LA337_0 >= SASS_AT_ROOT && LA337_0 <= SASS_DEBUG)||(LA337_0 >= SASS_EACH && LA337_0 <= SASS_ELSE)||LA337_0==SASS_EXTEND||(LA337_0 >= SASS_FOR && LA337_0 <= SASS_FUNCTION)||(LA337_0 >= SASS_IF && LA337_0 <= SASS_MIXIN)||(LA337_0 >= SASS_RETURN && LA337_0 <= SASS_USE)||(LA337_0 >= SASS_WARN && LA337_0 <= SASS_WHILE)||(LA337_0 >= TOPCENTER_SYM && LA337_0 <= TOPRIGHT_SYM)||LA337_0==WEBKIT_KEYFRAMES_SYM) && (synpred43_Css3())) {
 				alt337=2;
 			}
 			else if ( (LA337_0==SASS_VAR) && (synpred43_Css3())) {
@@ -24153,7 +24203,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1109:24: LBRACE ( ws )? syncToFollow ( declarations )? RBRACE
 					{
 					dbg.location(1109,24);
-					match(input,LBRACE,FOLLOW_LBRACE_in_cp_expression7507); if (state.failed) return;dbg.location(1109,31);
+					match(input,LBRACE,FOLLOW_LBRACE_in_cp_expression7514); if (state.failed) return;dbg.location(1109,31);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1109:31: ( ws )?
 					int alt329=2;
 					try { dbg.enterSubRule(329);
@@ -24172,7 +24222,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1109:31: ws
 							{
 							dbg.location(1109,31);
-							pushFollow(FOLLOW_ws_in_cp_expression7509);
+							pushFollow(FOLLOW_ws_in_cp_expression7516);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -24182,7 +24232,7 @@
 					}
 					} finally {dbg.exitSubRule(329);}
 					dbg.location(1109,35);
-					pushFollow(FOLLOW_syncToFollow_in_cp_expression7512);
+					pushFollow(FOLLOW_syncToFollow_in_cp_expression7519);
 					syncToFollow();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1109,48);
@@ -24192,7 +24242,7 @@
 					try { dbg.enterDecision(330, decisionCanBacktrack[330]);
 
 					int LA330_0 = input.LA(1);
-					if ( ((LA330_0 >= AT_IDENT && LA330_0 <= AT_SIGN)||(LA330_0 >= BOTTOMCENTER_SYM && LA330_0 <= BOTTOMRIGHT_SYM)||(LA330_0 >= CHARSET_SYM && LA330_0 <= COLON)||LA330_0==COUNTER_STYLE_SYM||(LA330_0 >= DCOLON && LA330_0 <= DOT)||LA330_0==FONT_FACE_SYM||(LA330_0 >= GEN && LA330_0 <= GREATER)||(LA330_0 >= HASH && LA330_0 <= HASH_SYMBOL)||LA330_0==IDENT||LA330_0==IMPORT_SYM||(LA330_0 >= LBRACKET && LA330_0 <= LEFTTOP_SYM)||LA330_0==LESS_AND||(LA330_0 >= MEDIA_SYM && LA330_0 <= MOZ_DOCUMENT_SYM)||LA330_0==NAMESPACE_SYM||LA330_0==PAGE_SYM||(LA330_0 >= PIPE && LA330_0 <= PLUS)||(LA330_0 >= RIGHTBOTTOM_SYM && LA330_0 <= RIGHTTOP_SYM)||(LA330_0 >= SASS_AT_ROOT && LA330_0 <= SASS_DEBUG)||(LA330_0 >= SASS_EACH && LA330_0 <= SASS_ELSE)||(LA330_0 >= SASS_ERROR && LA330_0 <= SASS_FOR)||LA330_0==SASS_FUNCTION||(LA330_0 >= SASS_IF && LA330_0 <= SASS_MIXIN)||LA330_0==SASS_RETURN||(LA330_0 >= SASS_VAR && LA330_0 <= SEMI)||LA330_0==STAR||LA330_0==SUPPORTS_SYM||LA330_0==TILDE||(LA330_0 >= TOPCENTER_SYM && LA330_0 <= TOPRIGHT_SYM)||LA330_0==VARIABLE||LA330_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( ((LA330_0 >= AT_IDENT && LA330_0 <= AT_SIGN)||(LA330_0 >= BOTTOMCENTER_SYM && LA330_0 <= BOTTOMRIGHT_SYM)||(LA330_0 >= CHARSET_SYM && LA330_0 <= COLON)||LA330_0==COUNTER_STYLE_SYM||(LA330_0 >= DCOLON && LA330_0 <= DOT)||LA330_0==FONT_FACE_SYM||(LA330_0 >= GEN && LA330_0 <= GREATER)||(LA330_0 >= HASH && LA330_0 <= HASH_SYMBOL)||LA330_0==IDENT||LA330_0==IMPORT_SYM||(LA330_0 >= LBRACKET && LA330_0 <= LEFTTOP_SYM)||LA330_0==LESS_AND||(LA330_0 >= MEDIA_SYM && LA330_0 <= MOZ_DOCUMENT_SYM)||LA330_0==NAMESPACE_SYM||LA330_0==PAGE_SYM||(LA330_0 >= PIPE && LA330_0 <= PLUS)||(LA330_0 >= RIGHTBOTTOM_SYM && LA330_0 <= RIGHTTOP_SYM)||(LA330_0 >= SASS_AT_ROOT && LA330_0 <= SASS_DEBUG)||(LA330_0 >= SASS_EACH && LA330_0 <= SASS_ELSE)||(LA330_0 >= SASS_ERROR && LA330_0 <= SASS_FUNCTION)||(LA330_0 >= SASS_IF && LA330_0 <= SASS_MIXIN)||(LA330_0 >= SASS_RETURN && LA330_0 <= SEMI)||LA330_0==STAR||LA330_0==SUPPORTS_SYM||LA330_0==TILDE||(LA330_0 >= TOPCENTER_SYM && LA330_0 <= TOPRIGHT_SYM)||LA330_0==VARIABLE||LA330_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt330=1;
 					}
 					} finally {dbg.exitDecision(330);}
@@ -24204,7 +24254,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1109:48: declarations
 							{
 							dbg.location(1109,48);
-							pushFollow(FOLLOW_declarations_in_cp_expression7514);
+							pushFollow(FOLLOW_declarations_in_cp_expression7521);
 							declarations();
 							state._fsp--;
 							if (state.failed) return;
@@ -24214,7 +24264,7 @@
 					}
 					} finally {dbg.exitSubRule(330);}
 					dbg.location(1109,62);
-					match(input,RBRACE,FOLLOW_RBRACE_in_cp_expression7517); if (state.failed) return;
+					match(input,RBRACE,FOLLOW_RBRACE_in_cp_expression7524); if (state.failed) return;
 					}
 
 					}
@@ -24231,7 +24281,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1110:32: cp_expression_atom ( ( ( ws )? cp_expression_operator )=> ( ( ws )? cp_expression_operator ( ws )? ) cp_expression_atom | ( ( ws )? cp_expression_atom )=> ( ws )? cp_expression_atom )*
 					{
 					dbg.location(1110,32);
-					pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7533);
+					pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7540);
 					cp_expression_atom();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1111,5);
@@ -24284,7 +24334,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1112:40: ws
 									{
 									dbg.location(1112,40);
-									pushFollow(FOLLOW_ws_in_cp_expression7557);
+									pushFollow(FOLLOW_ws_in_cp_expression7564);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -24294,7 +24344,7 @@
 							}
 							} finally {dbg.exitSubRule(331);}
 							dbg.location(1112,44);
-							pushFollow(FOLLOW_cp_expression_operator_in_cp_expression7560);
+							pushFollow(FOLLOW_cp_expression_operator_in_cp_expression7567);
 							cp_expression_operator();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1112,67);
@@ -24316,7 +24366,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1112:67: ws
 									{
 									dbg.location(1112,67);
-									pushFollow(FOLLOW_ws_in_cp_expression7562);
+									pushFollow(FOLLOW_ws_in_cp_expression7569);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -24328,7 +24378,7 @@
 
 							}
 							dbg.location(1112,72);
-							pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7566);
+							pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7573);
 							cp_expression_atom();
 							state._fsp--;
 							if (state.failed) return;
@@ -24358,7 +24408,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1113:37: ws
 									{
 									dbg.location(1113,37);
-									pushFollow(FOLLOW_ws_in_cp_expression7585);
+									pushFollow(FOLLOW_ws_in_cp_expression7592);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -24368,7 +24418,7 @@
 							}
 							} finally {dbg.exitSubRule(333);}
 							dbg.location(1113,41);
-							pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7588);
+							pushFollow(FOLLOW_cp_expression_atom_in_cp_expression7595);
 							cp_expression_atom();
 							state._fsp--;
 							if (state.failed) return;
@@ -24395,7 +24445,7 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "cp_expression", "isScssSource()");
 					}dbg.location(1115,25);
-					match(input,LPAREN,FOLLOW_LPAREN_in_cp_expression7606); if (state.failed) return;dbg.location(1115,32);
+					match(input,LPAREN,FOLLOW_LPAREN_in_cp_expression7613); if (state.failed) return;dbg.location(1115,32);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1115:32: ( ws )?
 					int alt335=2;
 					try { dbg.enterSubRule(335);
@@ -24414,7 +24464,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1115:32: ws
 							{
 							dbg.location(1115,32);
-							pushFollow(FOLLOW_ws_in_cp_expression7608);
+							pushFollow(FOLLOW_ws_in_cp_expression7615);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -24424,7 +24474,7 @@
 					}
 					} finally {dbg.exitSubRule(335);}
 					dbg.location(1115,36);
-					pushFollow(FOLLOW_syncToFollow_in_cp_expression7611);
+					pushFollow(FOLLOW_syncToFollow_in_cp_expression7618);
 					syncToFollow();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1115,49);
@@ -24434,7 +24484,7 @@
 					try { dbg.enterDecision(336, decisionCanBacktrack[336]);
 
 					int LA336_0 = input.LA(1);
-					if ( ((LA336_0 >= AT_IDENT && LA336_0 <= AT_SIGN)||(LA336_0 >= BOTTOMCENTER_SYM && LA336_0 <= BOTTOMRIGHT_SYM)||LA336_0==CHARSET_SYM||LA336_0==COMMA||LA336_0==COUNTER_STYLE_SYM||LA336_0==FONT_FACE_SYM||LA336_0==GEN||LA336_0==HASH_SYMBOL||LA336_0==IDENT||LA336_0==IMPORT_SYM||(LA336_0 >= LEFTBOTTOM_SYM && LA336_0 <= LEFTTOP_SYM)||(LA336_0 >= MEDIA_SYM && LA336_0 <= MOZ_DOCUMENT_SYM)||LA336_0==NAMESPACE_SYM||LA336_0==NUMBER||LA336_0==PAGE_SYM||(LA336_0 >= RIGHTBOTTOM_SYM && LA336_0 <= RIGHTTOP_SYM)||(LA336_0 >= SASS_AT_ROOT && LA336_0 <= SASS_DEBUG)||(LA336_0 >= SASS_EACH && LA336_0 <= SASS_ELSE)||LA336_0==SASS_EXTEND||LA336_0==SASS_FOR||LA336_0==SASS_FUNCTION||(LA336_0 >= SASS_IF && LA336_0 <= SASS_MIXIN)||LA336_0==SASS_RETURN||(LA336_0 >= SASS_VAR && LA336_0 <= SASS_WHILE)||LA336_0==STRING||(LA336_0 >= TOPCENTER_SYM && LA336_0 <= TOPRIGHT_SYM)||LA336_0==VARIABLE||LA336_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( ((LA336_0 >= AT_IDENT && LA336_0 <= AT_SIGN)||(LA336_0 >= BOTTOMCENTER_SYM && LA336_0 <= BOTTOMRIGHT_SYM)||LA336_0==CHARSET_SYM||LA336_0==COMMA||LA336_0==COUNTER_STYLE_SYM||LA336_0==FONT_FACE_SYM||LA336_0==GEN||LA336_0==HASH_SYMBOL||LA336_0==IDENT||LA336_0==IMPORT_SYM||(LA336_0 >= LEFTBOTTOM_SYM && LA336_0 <= LEFTTOP_SYM)||(LA336_0 >= MEDIA_SYM && LA336_0 <= MOZ_DOCUMENT_SYM)||LA336_0==NAMESPACE_SYM||LA336_0==NUMBER||LA336_0==PAGE_SYM||(LA336_0 >= RIGHTBOTTOM_SYM && LA336_0 <= RIGHTTOP_SYM)||(LA336_0 >= SASS_AT_ROOT && LA336_0 <= SASS_DEBUG)||(LA336_0 >= SASS_EACH && LA336_0 <= SASS_ELSE)||LA336_0==SASS_EXTEND||(LA336_0 >= SASS_FOR && LA336_0 <= SASS_FUNCTION)||(LA336_0 >= SASS_IF && LA336_0 <= SASS_MIXIN)||(LA336_0 >= SASS_RETURN && LA336_0 <= SASS_WHILE)||LA336_0==STRING||(LA336_0 >= TOPCENTER_SYM && LA336_0 <= TOPRIGHT_SYM)||LA336_0==VARIABLE||LA336_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt336=1;
 					}
 					} finally {dbg.exitDecision(336);}
@@ -24446,7 +24496,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1115:49: sass_map_pairs
 							{
 							dbg.location(1115,49);
-							pushFollow(FOLLOW_sass_map_pairs_in_cp_expression7613);
+							pushFollow(FOLLOW_sass_map_pairs_in_cp_expression7620);
 							sass_map_pairs();
 							state._fsp--;
 							if (state.failed) return;
@@ -24456,7 +24506,7 @@
 					}
 					} finally {dbg.exitSubRule(336);}
 					dbg.location(1115,65);
-					match(input,RPAREN,FOLLOW_RPAREN_in_cp_expression7616); if (state.failed) return;
+					match(input,RPAREN,FOLLOW_RPAREN_in_cp_expression7623); if (state.failed) return;
 					}
 					break;
 
@@ -24569,7 +24619,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:5: key_or
 					{
 					dbg.location(1120,5);
-					pushFollow(FOLLOW_key_or_in_cp_expression_operator7637);
+					pushFollow(FOLLOW_key_or_in_cp_expression_operator7644);
 					key_or();
 					state._fsp--;
 					if (state.failed) return;
@@ -24581,7 +24631,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:14: key_and
 					{
 					dbg.location(1120,14);
-					pushFollow(FOLLOW_key_and_in_cp_expression_operator7641);
+					pushFollow(FOLLOW_key_and_in_cp_expression_operator7648);
 					key_and();
 					state._fsp--;
 					if (state.failed) return;
@@ -24593,7 +24643,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:25: CP_EQ
 					{
 					dbg.location(1120,25);
-					match(input,CP_EQ,FOLLOW_CP_EQ_in_cp_expression_operator7646); if (state.failed) return;
+					match(input,CP_EQ,FOLLOW_CP_EQ_in_cp_expression_operator7653); if (state.failed) return;
 					}
 					break;
 				case 4 :
@@ -24602,7 +24652,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:33: CP_NOT_EQ
 					{
 					dbg.location(1120,33);
-					match(input,CP_NOT_EQ,FOLLOW_CP_NOT_EQ_in_cp_expression_operator7650); if (state.failed) return;
+					match(input,CP_NOT_EQ,FOLLOW_CP_NOT_EQ_in_cp_expression_operator7657); if (state.failed) return;
 					}
 					break;
 				case 5 :
@@ -24611,7 +24661,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:45: LESS
 					{
 					dbg.location(1120,45);
-					match(input,LESS,FOLLOW_LESS_in_cp_expression_operator7654); if (state.failed) return;
+					match(input,LESS,FOLLOW_LESS_in_cp_expression_operator7661); if (state.failed) return;
 					}
 					break;
 				case 6 :
@@ -24620,7 +24670,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:52: LESS_OR_EQ
 					{
 					dbg.location(1120,52);
-					match(input,LESS_OR_EQ,FOLLOW_LESS_OR_EQ_in_cp_expression_operator7658); if (state.failed) return;
+					match(input,LESS_OR_EQ,FOLLOW_LESS_OR_EQ_in_cp_expression_operator7665); if (state.failed) return;
 					}
 					break;
 				case 7 :
@@ -24629,7 +24679,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:65: GREATER
 					{
 					dbg.location(1120,65);
-					match(input,GREATER,FOLLOW_GREATER_in_cp_expression_operator7662); if (state.failed) return;
+					match(input,GREATER,FOLLOW_GREATER_in_cp_expression_operator7669); if (state.failed) return;
 					}
 					break;
 				case 8 :
@@ -24638,7 +24688,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1120:75: GREATER_OR_EQ
 					{
 					dbg.location(1120,75);
-					match(input,GREATER_OR_EQ,FOLLOW_GREATER_OR_EQ_in_cp_expression_operator7666); if (state.failed) return;
+					match(input,GREATER_OR_EQ,FOLLOW_GREATER_OR_EQ_in_cp_expression_operator7673); if (state.failed) return;
 					}
 					break;
 
@@ -24698,7 +24748,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1125:10: NOT ( ws )?
 					{
 					dbg.location(1125,10);
-					match(input,NOT,FOLLOW_NOT_in_cp_expression_atom7692); if (state.failed) return;dbg.location(1125,14);
+					match(input,NOT,FOLLOW_NOT_in_cp_expression_atom7699); if (state.failed) return;dbg.location(1125,14);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1125:14: ( ws )?
 					int alt339=2;
 					try { dbg.enterSubRule(339);
@@ -24717,7 +24767,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1125:14: ws
 							{
 							dbg.location(1125,14);
-							pushFollow(FOLLOW_ws_in_cp_expression_atom7694);
+							pushFollow(FOLLOW_ws_in_cp_expression_atom7701);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -24805,7 +24855,7 @@
 			else if ( (LA344_0==HASH) && (synpred46_Css3())) {
 				alt344=1;
 			}
-			else if ( (LA344_0==AT_IDENT||(LA344_0 >= BOTTOMCENTER_SYM && LA344_0 <= BOTTOMRIGHT_SYM)||LA344_0==CHARSET_SYM||LA344_0==COUNTER_STYLE_SYM||LA344_0==FONT_FACE_SYM||LA344_0==IMPORT_SYM||(LA344_0 >= LEFTBOTTOM_SYM && LA344_0 <= LEFTTOP_SYM)||LA344_0==MEDIA_SYM||LA344_0==MOZ_DOCUMENT_SYM||LA344_0==NAMESPACE_SYM||LA344_0==PAGE_SYM||(LA344_0 >= RIGHTBOTTOM_SYM && LA344_0 <= RIGHTTOP_SYM)||(LA344_0 >= SASS_AT_ROOT && LA344_0 <= SASS_DEBUG)||(LA344_0 >= SASS_EACH && LA344_0 <= SASS_ELSE)||LA344_0==SASS_EXTEND||LA344_0==SASS_FOR||LA344_0==SASS_FUNCTION||(LA344_0 >= SASS_IF && LA344_0 <= SASS_MIXIN)||LA344_0==SASS_RETURN||(LA344_0 >= SASS_WARN && LA344_0 <= SASS_WHILE)||(LA344_0 >= TOPCENTER_SYM && LA344_0 <= TOPRIGHT_SYM)||LA344_0==WEBKIT_KEYFRAMES_SYM) && (synpred46_Css3())) {
+			else if ( (LA344_0==AT_IDENT||(LA344_0 >= BOTTOMCENTER_SYM && LA344_0 <= BOTTOMRIGHT_SYM)||LA344_0==CHARSET_SYM||LA344_0==COUNTER_STYLE_SYM||LA344_0==FONT_FACE_SYM||LA344_0==IMPORT_SYM||(LA344_0 >= LEFTBOTTOM_SYM && LA344_0 <= LEFTTOP_SYM)||LA344_0==MEDIA_SYM||LA344_0==MOZ_DOCUMENT_SYM||LA344_0==NAMESPACE_SYM||LA344_0==PAGE_SYM||(LA344_0 >= RIGHTBOTTOM_SYM && LA344_0 <= RIGHTTOP_SYM)||(LA344_0 >= SASS_AT_ROOT && LA344_0 <= SASS_DEBUG)||(LA344_0 >= SASS_EACH && LA344_0 <= SASS_ELSE)||LA344_0==SASS_EXTEND||(LA344_0 >= SASS_FOR && LA344_0 <= SASS_FUNCTION)||(LA344_0 >= SASS_IF && LA344_0 <= SASS_MIXIN)||(LA344_0 >= SASS_RETURN && LA344_0 <= SASS_USE)||(LA344_0 >= SASS_WARN && LA344_0 <= SASS_WHILE)||(LA344_0 >= TOPCENTER_SYM && LA344_0 <= TOPRIGHT_SYM)||LA344_0==WEBKIT_KEYFRAMES_SYM) && (synpred46_Css3())) {
 				alt344=1;
 			}
 			else if ( (LA344_0==SASS_VAR) && (synpred46_Css3())) {
@@ -24854,7 +24904,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1127:13: ( cp_math_expression )=> cp_math_expression
 					{
 					dbg.location(1127,35);
-					pushFollow(FOLLOW_cp_math_expression_in_cp_expression_atom7725);
+					pushFollow(FOLLOW_cp_math_expression_in_cp_expression_atom7732);
 					cp_math_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -24866,7 +24916,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1128:15: LPAREN ( ws )? ( cp_expression_list ( ws )? )? RPAREN
 					{
 					dbg.location(1128,15);
-					match(input,LPAREN,FOLLOW_LPAREN_in_cp_expression_atom7741); if (state.failed) return;dbg.location(1128,22);
+					match(input,LPAREN,FOLLOW_LPAREN_in_cp_expression_atom7748); if (state.failed) return;dbg.location(1128,22);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1128:22: ( ws )?
 					int alt341=2;
 					try { dbg.enterSubRule(341);
@@ -24885,7 +24935,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1128:22: ws
 							{
 							dbg.location(1128,22);
-							pushFollow(FOLLOW_ws_in_cp_expression_atom7743);
+							pushFollow(FOLLOW_ws_in_cp_expression_atom7750);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -24901,7 +24951,7 @@
 					try { dbg.enterDecision(343, decisionCanBacktrack[343]);
 
 					int LA343_0 = input.LA(1);
-					if ( ((LA343_0 >= ANGLE && LA343_0 <= AT_SIGN)||(LA343_0 >= BOTTOMCENTER_SYM && LA343_0 <= BOTTOMRIGHT_SYM)||LA343_0==CHARSET_SYM||LA343_0==COUNTER_STYLE_SYM||LA343_0==DIMENSION||LA343_0==EMS||LA343_0==EXS||(LA343_0 >= FONT_FACE_SYM && LA343_0 <= FREQ)||LA343_0==GEN||(LA343_0 >= HASH && LA343_0 <= HASH_SYMBOL)||(LA343_0 >= IDENT && LA343_0 <= IMPORT_SYM)||(LA343_0 >= LBRACE && LA343_0 <= LENGTH)||(LA343_0 >= LESS_AND && LA343_0 <= LESS_JS_STRING)||LA343_0==LPAREN||(LA343_0 >= MEDIA_SYM && LA343_0 <= MOZ_DOCUMENT_SYM)||LA343_0==NAMESPACE_SYM||(LA343_0 >= NOT && LA343_0 <= NUMBER)||(LA343_0 >= PAGE_SYM && LA343_0 <= PERCENTAGE_SYMBOL)||LA343_0==PLUS||(LA343_0 >= REM && LA343_0 <= RIGHTTOP_SYM)||(LA343_0 >= SASS_AT_ROOT && LA343_0 <= SASS_DEBUG)||(LA343_0 >= SASS_EACH && LA343_0 <= SASS_ELSE)||LA343_0==SASS_EXTEND||LA343_0==SASS_FOR||LA343_0==SASS_FUNCTION||(LA343_0 >= SASS_IF && LA343_0 <= SASS_MIXIN)||LA343_0==SASS_RETURN||(LA343_0 >= SASS_VAR && LA343_0 <= SASS_WHILE)||LA343_0==STRING||(LA343_0 >= TILDE && LA343_0 <= TOPRIGHT_SYM)||(LA343_0 >= URANGE && LA343_0 <= URI)||LA343_0==VARIABLE||LA343_0==WEBKIT_KEYFRAMES_SYM) ) {
+					if ( ((LA343_0 >= ANGLE && LA343_0 <= AT_SIGN)||(LA343_0 >= BOTTOMCENTER_SYM && LA343_0 <= BOTTOMRIGHT_SYM)||LA343_0==CHARSET_SYM||LA343_0==COUNTER_STYLE_SYM||LA343_0==DIMENSION||LA343_0==EMS||LA343_0==EXS||(LA343_0 >= FONT_FACE_SYM && LA343_0 <= FREQ)||LA343_0==GEN||(LA343_0 >= HASH && LA343_0 <= HASH_SYMBOL)||(LA343_0 >= IDENT && LA343_0 <= IMPORT_SYM)||(LA343_0 >= LBRACE && LA343_0 <= LENGTH)||(LA343_0 >= LESS_AND && LA343_0 <= LESS_JS_STRING)||LA343_0==LPAREN||(LA343_0 >= MEDIA_SYM && LA343_0 <= MOZ_DOCUMENT_SYM)||LA343_0==NAMESPACE_SYM||(LA343_0 >= NOT && LA343_0 <= NUMBER)||(LA343_0 >= PAGE_SYM && LA343_0 <= PERCENTAGE_SYMBOL)||LA343_0==PLUS||(LA343_0 >= REM && LA343_0 <= RIGHTTOP_SYM)||(LA343_0 >= SASS_AT_ROOT && LA343_0 <= SASS_DEBUG)||(LA343_0 >= SASS_EACH && LA343_0 <= SASS_ELSE)||LA343_0==SASS_EXTEND||(LA343_0 >= SASS_FOR && LA343_0 <= SASS_FUNCTION)||(LA343_0 >= SASS_IF && LA343_0 <= SASS_MIXIN)||(LA343_0 >= SASS_RETURN && LA343_0 <= SASS_WHILE)||LA343_0==STRING||(LA343_0 >= TILDE && LA343_0 <= TOPRIGHT_SYM)||(LA343_0 >= URANGE && LA343_0 <= URI)||LA343_0==VARIABLE||LA343_0==WEBKIT_KEYFRAMES_SYM) ) {
 						alt343=1;
 					}
 					} finally {dbg.exitDecision(343);}
@@ -24913,7 +24963,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1128:27: cp_expression_list ( ws )?
 							{
 							dbg.location(1128,27);
-							pushFollow(FOLLOW_cp_expression_list_in_cp_expression_atom7747);
+							pushFollow(FOLLOW_cp_expression_list_in_cp_expression_atom7754);
 							cp_expression_list();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1128,46);
@@ -24935,7 +24985,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1128:46: ws
 									{
 									dbg.location(1128,46);
-									pushFollow(FOLLOW_ws_in_cp_expression_atom7749);
+									pushFollow(FOLLOW_ws_in_cp_expression_atom7756);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -24951,7 +25001,7 @@
 					}
 					} finally {dbg.exitSubRule(343);}
 					dbg.location(1128,52);
-					match(input,RPAREN,FOLLOW_RPAREN_in_cp_expression_atom7754); if (state.failed) return;
+					match(input,RPAREN,FOLLOW_RPAREN_in_cp_expression_atom7761); if (state.failed) return;
 					}
 					break;
 
@@ -24997,7 +25047,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1135:5: cp_math_expression ( ws cp_math_expression )*
 			{
 			dbg.location(1135,5);
-			pushFollow(FOLLOW_cp_math_expression_in_cp_math_expressions7786);
+			pushFollow(FOLLOW_cp_math_expression_in_cp_math_expressions7793);
 			cp_math_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1136,5);
@@ -25023,11 +25073,11 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1136:6: ws cp_math_expression
 					{
 					dbg.location(1136,6);
-					pushFollow(FOLLOW_ws_in_cp_math_expressions7793);
+					pushFollow(FOLLOW_ws_in_cp_math_expressions7800);
 					ws();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1136,9);
-					pushFollow(FOLLOW_cp_math_expression_in_cp_math_expressions7795);
+					pushFollow(FOLLOW_cp_math_expression_in_cp_math_expressions7802);
 					cp_math_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -25079,7 +25129,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1152:10: cp_math_expression_atom ( ( ( ws )? ( PLUS | MINUS | STAR | SOLIDUS ) )=> ( ws )? ( PLUS | MINUS | STAR | SOLIDUS ) ( ws )? cp_math_expression_atom )*
 			{
 			dbg.location(1152,10);
-			pushFollow(FOLLOW_cp_math_expression_atom_in_cp_math_expression7829);
+			pushFollow(FOLLOW_cp_math_expression_atom_in_cp_math_expression7836);
 			cp_math_expression_atom();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1153,10);
@@ -25126,7 +25176,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1154:48: ws
 							{
 							dbg.location(1154,48);
-							pushFollow(FOLLOW_ws_in_cp_math_expression7871);
+							pushFollow(FOLLOW_ws_in_cp_math_expression7878);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -25165,7 +25215,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1154:78: ws
 							{
 							dbg.location(1154,78);
-							pushFollow(FOLLOW_ws_in_cp_math_expression7884);
+							pushFollow(FOLLOW_ws_in_cp_math_expression7891);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -25175,7 +25225,7 @@
 					}
 					} finally {dbg.exitSubRule(347);}
 					dbg.location(1154,82);
-					pushFollow(FOLLOW_cp_math_expression_atom_in_cp_math_expression7887);
+					pushFollow(FOLLOW_cp_math_expression_atom_in_cp_math_expression7894);
 					cp_math_expression_atom();
 					state._fsp--;
 					if (state.failed) return;
@@ -25242,7 +25292,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1160:5: term
 					{
 					dbg.location(1160,5);
-					pushFollow(FOLLOW_term_in_cp_math_expression_atom7920);
+					pushFollow(FOLLOW_term_in_cp_math_expression_atom7927);
 					term();
 					state._fsp--;
 					if (state.failed) return;
@@ -25254,7 +25304,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1161:7: IMPORTANT_SYM
 					{
 					dbg.location(1161,7);
-					match(input,IMPORTANT_SYM,FOLLOW_IMPORTANT_SYM_in_cp_math_expression_atom7928); if (state.failed) return;
+					match(input,IMPORTANT_SYM,FOLLOW_IMPORTANT_SYM_in_cp_math_expression_atom7935); if (state.failed) return;
 					}
 					break;
 				case 3 :
@@ -25281,7 +25331,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1162:9: unaryOperator ( ws )?
 							{
 							dbg.location(1162,9);
-							pushFollow(FOLLOW_unaryOperator_in_cp_math_expression_atom7939);
+							pushFollow(FOLLOW_unaryOperator_in_cp_math_expression_atom7946);
 							unaryOperator();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1162,23);
@@ -25303,7 +25353,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1162:23: ws
 									{
 									dbg.location(1162,23);
-									pushFollow(FOLLOW_ws_in_cp_math_expression_atom7941);
+									pushFollow(FOLLOW_ws_in_cp_math_expression_atom7948);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25319,7 +25369,7 @@
 					}
 					} finally {dbg.exitSubRule(350);}
 					dbg.location(1162,30);
-					match(input,LPAREN,FOLLOW_LPAREN_in_cp_math_expression_atom7947); if (state.failed) return;dbg.location(1162,37);
+					match(input,LPAREN,FOLLOW_LPAREN_in_cp_math_expression_atom7954); if (state.failed) return;dbg.location(1162,37);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1162:37: ( ws )?
 					int alt351=2;
 					try { dbg.enterSubRule(351);
@@ -25338,7 +25388,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1162:37: ws
 							{
 							dbg.location(1162,37);
-							pushFollow(FOLLOW_ws_in_cp_math_expression_atom7949);
+							pushFollow(FOLLOW_ws_in_cp_math_expression_atom7956);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -25348,7 +25398,7 @@
 					}
 					} finally {dbg.exitSubRule(351);}
 					dbg.location(1162,41);
-					pushFollow(FOLLOW_cp_math_expression_in_cp_math_expression_atom7952);
+					pushFollow(FOLLOW_cp_math_expression_in_cp_math_expression_atom7959);
 					cp_math_expression();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1162,60);
@@ -25370,7 +25420,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1162:60: ws
 							{
 							dbg.location(1162,60);
-							pushFollow(FOLLOW_ws_in_cp_math_expression_atom7954);
+							pushFollow(FOLLOW_ws_in_cp_math_expression_atom7961);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -25380,7 +25430,7 @@
 					}
 					} finally {dbg.exitSubRule(352);}
 					dbg.location(1162,64);
-					match(input,RPAREN,FOLLOW_RPAREN_in_cp_math_expression_atom7957); if (state.failed) return;
+					match(input,RPAREN,FOLLOW_RPAREN_in_cp_math_expression_atom7964); if (state.failed) return;
 					}
 					break;
 
@@ -25486,7 +25536,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:28: LESS_AND
 							{
 							dbg.location(1174,28);
-							match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_declaration7997); if (state.failed) return;
+							match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_declaration8004); if (state.failed) return;
 							}
 							break;
 						case 2 :
@@ -25537,8 +25587,8 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:42: DOT cp_mixin_name
 									{
 									dbg.location(1174,42);
-									match(input,DOT,FOLLOW_DOT_in_cp_mixin_declaration8004); if (state.failed) return;dbg.location(1174,46);
-									pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_declaration8006);
+									match(input,DOT,FOLLOW_DOT_in_cp_mixin_declaration8011); if (state.failed) return;dbg.location(1174,46);
+									pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_declaration8013);
 									cp_mixin_name();
 									state._fsp--;
 									if (state.failed) return;
@@ -25552,7 +25602,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:63: HASH
 									{
 									dbg.location(1174,63);
-									match(input,HASH,FOLLOW_HASH_in_cp_mixin_declaration8011); if (state.failed) return;
+									match(input,HASH,FOLLOW_HASH_in_cp_mixin_declaration8018); if (state.failed) return;
 									}
 									break;
 
@@ -25577,7 +25627,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:69: ws
 									{
 									dbg.location(1174,69);
-									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8014);
+									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8021);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25587,7 +25637,7 @@
 							}
 							} finally {dbg.exitSubRule(355);}
 							dbg.location(1174,73);
-							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_declaration8017); if (state.failed) return;dbg.location(1174,80);
+							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_declaration8024); if (state.failed) return;dbg.location(1174,80);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:80: ( ws )?
 							int alt356=2;
 							try { dbg.enterSubRule(356);
@@ -25606,7 +25656,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:80: ws
 									{
 									dbg.location(1174,80);
-									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8019);
+									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8026);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25622,7 +25672,7 @@
 							try { dbg.enterDecision(357, decisionCanBacktrack[357]);
 
 							int LA357_0 = input.LA(1);
-							if ( (LA357_0==AT_IDENT||(LA357_0 >= BOTTOMCENTER_SYM && LA357_0 <= BOTTOMRIGHT_SYM)||LA357_0==CHARSET_SYM||(LA357_0 >= COUNTER_STYLE_SYM && LA357_0 <= CP_DOTS)||LA357_0==FONT_FACE_SYM||LA357_0==IDENT||LA357_0==IMPORT_SYM||(LA357_0 >= LEFTBOTTOM_SYM && LA357_0 <= LEFTTOP_SYM)||LA357_0==LESS_REST||LA357_0==MEDIA_SYM||LA357_0==MOZ_DOCUMENT_SYM||LA357_0==NAMESPACE_SYM||LA357_0==PAGE_SYM||(LA357_0 >= RIGHTBOTTOM_SYM && LA357_0 <= RIGHTTOP_SYM)||(LA357_0 >= SASS_AT_ROOT && LA357_0 <= SASS_DEBUG)||(LA357_0 >= SASS_EACH && LA357_0 <= SASS_ELSE)||LA357_0==SASS_EXTEND||LA357_0==SASS_FOR||LA357_0==SASS_FUNCTION||(LA357_0 >= SASS_IF && LA357_0 <= SASS_MIXIN)||LA357_0==SASS_RETURN||(LA357_0 >= SASS_VAR && LA357_0 <= SASS_WHILE)||(LA357_0 >= TOPCENTER_SYM && LA357_0 <= TOPRIGHT_SYM)||LA357_0==WEBKIT_KEYFRAMES_SYM) ) {
+							if ( (LA357_0==AT_IDENT||(LA357_0 >= BOTTOMCENTER_SYM && LA357_0 <= BOTTOMRIGHT_SYM)||LA357_0==CHARSET_SYM||(LA357_0 >= COUNTER_STYLE_SYM && LA357_0 <= CP_DOTS)||LA357_0==FONT_FACE_SYM||LA357_0==IDENT||LA357_0==IMPORT_SYM||(LA357_0 >= LEFTBOTTOM_SYM && LA357_0 <= LEFTTOP_SYM)||LA357_0==LESS_REST||LA357_0==MEDIA_SYM||LA357_0==MOZ_DOCUMENT_SYM||LA357_0==NAMESPACE_SYM||LA357_0==PAGE_SYM||(LA357_0 >= RIGHTBOTTOM_SYM && LA357_0 <= RIGHTTOP_SYM)||(LA357_0 >= SASS_AT_ROOT && LA357_0 <= SASS_DEBUG)||(LA357_0 >= SASS_EACH && LA357_0 <= SASS_ELSE)||LA357_0==SASS_EXTEND||(LA357_0 >= SASS_FOR && LA357_0 <= SASS_FUNCTION)||(LA357_0 >= SASS_IF && LA357_0 <= SASS_MIXIN)||(LA357_0 >= SASS_RETURN && LA357_0 <= SASS_WHILE)||(LA357_0 >= TOPCENTER_SYM && LA357_0 <= TOPRIGHT_SYM)||LA357_0==WEBKIT_KEYFRAMES_SYM) ) {
 								alt357=1;
 							}
 							} finally {dbg.exitDecision(357);}
@@ -25634,7 +25684,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:84: cp_args_list
 									{
 									dbg.location(1174,84);
-									pushFollow(FOLLOW_cp_args_list_in_cp_mixin_declaration8022);
+									pushFollow(FOLLOW_cp_args_list_in_cp_mixin_declaration8029);
 									cp_args_list();
 									state._fsp--;
 									if (state.failed) return;
@@ -25644,7 +25694,7 @@
 							}
 							} finally {dbg.exitSubRule(357);}
 							dbg.location(1174,98);
-							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_declaration8025); if (state.failed) return;
+							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_declaration8032); if (state.failed) return;
 							}
 
 							}
@@ -25693,7 +25743,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1174:108: ws
 									{
 									dbg.location(1174,108);
-									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8030);
+									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8037);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25703,7 +25753,7 @@
 							}
 							} finally {dbg.exitSubRule(359);}
 							dbg.location(1174,112);
-							pushFollow(FOLLOW_less_mixin_guarded_in_cp_mixin_declaration8033);
+							pushFollow(FOLLOW_less_mixin_guarded_in_cp_mixin_declaration8040);
 							less_mixin_guarded();
 							state._fsp--;
 							if (state.failed) return;
@@ -25725,12 +25775,12 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "cp_mixin_declaration", "isScssSource()");
 					}dbg.location(1176,27);
-					match(input,SASS_MIXIN,FOLLOW_SASS_MIXIN_in_cp_mixin_declaration8057); if (state.failed) return;dbg.location(1176,38);
-					pushFollow(FOLLOW_ws_in_cp_mixin_declaration8059);
+					match(input,SASS_MIXIN,FOLLOW_SASS_MIXIN_in_cp_mixin_declaration8064); if (state.failed) return;dbg.location(1176,38);
+					pushFollow(FOLLOW_ws_in_cp_mixin_declaration8066);
 					ws();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1176,41);
-					pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_declaration8061);
+					pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_declaration8068);
 					cp_mixin_name();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1176,55);
@@ -25774,7 +25824,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1176:56: ws
 									{
 									dbg.location(1176,56);
-									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8064);
+									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8071);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25784,7 +25834,7 @@
 							}
 							} finally {dbg.exitSubRule(361);}
 							dbg.location(1176,60);
-							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_declaration8067); if (state.failed) return;dbg.location(1176,67);
+							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_declaration8074); if (state.failed) return;dbg.location(1176,67);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1176:67: ( ws )?
 							int alt362=2;
 							try { dbg.enterSubRule(362);
@@ -25803,7 +25853,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1176:67: ws
 									{
 									dbg.location(1176,67);
-									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8069);
+									pushFollow(FOLLOW_ws_in_cp_mixin_declaration8076);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -25819,7 +25869,7 @@
 							try { dbg.enterDecision(363, decisionCanBacktrack[363]);
 
 							int LA363_0 = input.LA(1);
-							if ( (LA363_0==AT_IDENT||(LA363_0 >= BOTTOMCENTER_SYM && LA363_0 <= BOTTOMRIGHT_SYM)||LA363_0==CHARSET_SYM||(LA363_0 >= COUNTER_STYLE_SYM && LA363_0 <= CP_DOTS)||LA363_0==FONT_FACE_SYM||LA363_0==IDENT||LA363_0==IMPORT_SYM||(LA363_0 >= LEFTBOTTOM_SYM && LA363_0 <= LEFTTOP_SYM)||LA363_0==LESS_REST||LA363_0==MEDIA_SYM||LA363_0==MOZ_DOCUMENT_SYM||LA363_0==NAMESPACE_SYM||LA363_0==PAGE_SYM||(LA363_0 >= RIGHTBOTTOM_SYM && LA363_0 <= RIGHTTOP_SYM)||(LA363_0 >= SASS_AT_ROOT && LA363_0 <= SASS_DEBUG)||(LA363_0 >= SASS_EACH && LA363_0 <= SASS_ELSE)||LA363_0==SASS_EXTEND||LA363_0==SASS_FOR||LA363_0==SASS_FUNCTION||(LA363_0 >= SASS_IF && LA363_0 <= SASS_MIXIN)||LA363_0==SASS_RETURN||(LA363_0 >= SASS_VAR && LA363_0 <= SASS_WHILE)||(LA363_0 >= TOPCENTER_SYM && LA363_0 <= TOPRIGHT_SYM)||LA363_0==WEBKIT_KEYFRAMES_SYM) ) {
+							if ( (LA363_0==AT_IDENT||(LA363_0 >= BOTTOMCENTER_SYM && LA363_0 <= BOTTOMRIGHT_SYM)||LA363_0==CHARSET_SYM||(LA363_0 >= COUNTER_STYLE_SYM && LA363_0 <= CP_DOTS)||LA363_0==FONT_FACE_SYM||LA363_0==IDENT||LA363_0==IMPORT_SYM||(LA363_0 >= LEFTBOTTOM_SYM && LA363_0 <= LEFTTOP_SYM)||LA363_0==LESS_REST||LA363_0==MEDIA_SYM||LA363_0==MOZ_DOCUMENT_SYM||LA363_0==NAMESPACE_SYM||LA363_0==PAGE_SYM||(LA363_0 >= RIGHTBOTTOM_SYM && LA363_0 <= RIGHTTOP_SYM)||(LA363_0 >= SASS_AT_ROOT && LA363_0 <= SASS_DEBUG)||(LA363_0 >= SASS_EACH && LA363_0 <= SASS_ELSE)||LA363_0==SASS_EXTEND||(LA363_0 >= SASS_FOR && LA363_0 <= SASS_FUNCTION)||(LA363_0 >= SASS_IF && LA363_0 <= SASS_MIXIN)||(LA363_0 >= SASS_RETURN && LA363_0 <= SASS_WHILE)||(LA363_0 >= TOPCENTER_SYM && LA363_0 <= TOPRIGHT_SYM)||LA363_0==WEBKIT_KEYFRAMES_SYM) ) {
 								alt363=1;
 							}
 							} finally {dbg.exitDecision(363);}
@@ -25831,7 +25881,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1176:71: cp_args_list
 									{
 									dbg.location(1176,71);
-									pushFollow(FOLLOW_cp_args_list_in_cp_mixin_declaration8072);
+									pushFollow(FOLLOW_cp_args_list_in_cp_mixin_declaration8079);
 									cp_args_list();
 									state._fsp--;
 									if (state.failed) return;
@@ -25841,7 +25891,7 @@
 							}
 							} finally {dbg.exitSubRule(363);}
 							dbg.location(1176,85);
-							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_declaration8075); if (state.failed) return;
+							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_declaration8082); if (state.failed) return;
 							}
 							break;
 
@@ -25872,7 +25922,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1178:5: ws
 					{
 					dbg.location(1178,5);
-					pushFollow(FOLLOW_ws_in_cp_mixin_declaration8089);
+					pushFollow(FOLLOW_ws_in_cp_mixin_declaration8096);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -25882,7 +25932,7 @@
 			}
 			} finally {dbg.exitSubRule(366);}
 			dbg.location(1178,9);
-			pushFollow(FOLLOW_cp_mixin_block_in_cp_mixin_declaration8092);
+			pushFollow(FOLLOW_cp_mixin_block_in_cp_mixin_declaration8099);
 			cp_mixin_block();
 			state._fsp--;
 			if (state.failed) return;
@@ -26001,8 +26051,8 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:28: DOT cp_mixin_name
 							{
 							dbg.location(1186,28);
-							match(input,DOT,FOLLOW_DOT_in_cp_mixin_call8128); if (state.failed) return;dbg.location(1186,32);
-							pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8130);
+							match(input,DOT,FOLLOW_DOT_in_cp_mixin_call8135); if (state.failed) return;dbg.location(1186,32);
+							pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8137);
 							cp_mixin_name();
 							state._fsp--;
 							if (state.failed) return;
@@ -26014,7 +26064,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:48: HASH
 							{
 							dbg.location(1186,48);
-							match(input,HASH,FOLLOW_HASH_in_cp_mixin_call8134); if (state.failed) return;
+							match(input,HASH,FOLLOW_HASH_in_cp_mixin_call8141); if (state.failed) return;
 							}
 							break;
 						case 3 :
@@ -26023,7 +26073,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:55: AT_IDENT
 							{
 							dbg.location(1186,55);
-							match(input,AT_IDENT,FOLLOW_AT_IDENT_in_cp_mixin_call8138); if (state.failed) return;
+							match(input,AT_IDENT,FOLLOW_AT_IDENT_in_cp_mixin_call8145); if (state.failed) return;
 							}
 							break;
 						case 4 :
@@ -26032,7 +26082,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:66: LESS_AND
 							{
 							dbg.location(1186,66);
-							match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_call8142); if (state.failed) return;
+							match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_call8149); if (state.failed) return;
 							}
 							break;
 
@@ -26090,7 +26140,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:101: ws
 									{
 									dbg.location(1186,101);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8158);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8165);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26100,7 +26150,7 @@
 							}
 							} finally {dbg.exitSubRule(368);}
 							dbg.location(1186,105);
-							pushFollow(FOLLOW_combinator_in_cp_mixin_call8161);
+							pushFollow(FOLLOW_combinator_in_cp_mixin_call8168);
 							combinator();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1186,116);
@@ -26122,7 +26172,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:116: ws
 									{
 									dbg.location(1186,116);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8163);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8170);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26174,8 +26224,8 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:121: DOT cp_mixin_name
 									{
 									dbg.location(1186,121);
-									match(input,DOT,FOLLOW_DOT_in_cp_mixin_call8167); if (state.failed) return;dbg.location(1186,125);
-									pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8169);
+									match(input,DOT,FOLLOW_DOT_in_cp_mixin_call8174); if (state.failed) return;dbg.location(1186,125);
+									pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8176);
 									cp_mixin_name();
 									state._fsp--;
 									if (state.failed) return;
@@ -26187,7 +26237,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:141: HASH
 									{
 									dbg.location(1186,141);
-									match(input,HASH,FOLLOW_HASH_in_cp_mixin_call8173); if (state.failed) return;
+									match(input,HASH,FOLLOW_HASH_in_cp_mixin_call8180); if (state.failed) return;
 									}
 									break;
 								case 3 :
@@ -26196,7 +26246,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:148: AT_IDENT
 									{
 									dbg.location(1186,148);
-									match(input,AT_IDENT,FOLLOW_AT_IDENT_in_cp_mixin_call8177); if (state.failed) return;
+									match(input,AT_IDENT,FOLLOW_AT_IDENT_in_cp_mixin_call8184); if (state.failed) return;
 									}
 									break;
 								case 4 :
@@ -26205,7 +26255,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:159: LESS_AND
 									{
 									dbg.location(1186,159);
-									match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_call8181); if (state.failed) return;
+									match(input,LESS_AND,FOLLOW_LESS_AND_in_cp_mixin_call8188); if (state.failed) return;
 									}
 									break;
 
@@ -26251,7 +26301,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:172: ( pseudo )=> pseudo
 							{
 							dbg.location(1186,182);
-							pushFollow(FOLLOW_pseudo_in_cp_mixin_call8191);
+							pushFollow(FOLLOW_pseudo_in_cp_mixin_call8198);
 							pseudo();
 							state._fsp--;
 							if (state.failed) return;
@@ -26287,7 +26337,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:206: ws
 									{
 									dbg.location(1186,206);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8203);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8210);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26297,7 +26347,7 @@
 							}
 							} finally {dbg.exitSubRule(372);}
 							dbg.location(1186,210);
-							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_call8206); if (state.failed) return;dbg.location(1186,217);
+							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_call8213); if (state.failed) return;dbg.location(1186,217);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:217: ( ws )?
 							int alt373=2;
 							try { dbg.enterSubRule(373);
@@ -26316,7 +26366,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:217: ws
 									{
 									dbg.location(1186,217);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8208);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8215);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26332,7 +26382,7 @@
 							try { dbg.enterDecision(374, decisionCanBacktrack[374]);
 
 							int LA374_0 = input.LA(1);
-							if ( ((LA374_0 >= ANGLE && LA374_0 <= AT_SIGN)||(LA374_0 >= BOTTOMCENTER_SYM && LA374_0 <= BOTTOMRIGHT_SYM)||LA374_0==CHARSET_SYM||LA374_0==COUNTER_STYLE_SYM||LA374_0==DIMENSION||LA374_0==EMS||LA374_0==EXS||(LA374_0 >= FONT_FACE_SYM && LA374_0 <= FREQ)||LA374_0==GEN||(LA374_0 >= HASH && LA374_0 <= HASH_SYMBOL)||(LA374_0 >= IDENT && LA374_0 <= IMPORT_SYM)||(LA374_0 >= LBRACE && LA374_0 <= LENGTH)||(LA374_0 >= LESS_AND && LA374_0 <= LESS_JS_STRING)||LA374_0==LPAREN||(LA374_0 >= MEDIA_SYM && LA374_0 <= MOZ_DOCUMENT_SYM)||LA374_0==NAMESPACE_SYM||(LA374_0 >= NOT && LA374_0 <= NUMBER)||(LA374_0 >= PAGE_SYM && LA374_0 <= PERCENTAGE_SYMBOL)||LA374_0==PLUS||(LA374_0 >= REM && LA374_0 <= RIGHTTOP_SYM)||(LA374_0 >= SASS_AT_ROOT && LA374_0 <= SASS_DEBUG)||(LA374_0 >= SASS_EACH && LA374_0 <= SASS_ELSE)||LA374_0==SASS_EXTEND||LA374_0==SASS_FOR||LA374_0==SASS_FUNCTION||(LA374_0 >= SASS_IF && LA374_0 <= SASS_MIXIN)||LA374_0==SASS_RETURN||(LA374_0 >= SASS_VAR && LA374_0 <= SASS_WHILE)||LA374_0==STRING||(LA374_0 >= TILDE && LA374_0 <= TOPRIGHT_SYM)||(LA374_0 >= URANGE && LA374_0 <= URI)||LA374_0==VARIABLE||LA374_0==WEBKIT_KEYFRAMES_SYM) ) {
+							if ( ((LA374_0 >= ANGLE && LA374_0 <= AT_SIGN)||(LA374_0 >= BOTTOMCENTER_SYM && LA374_0 <= BOTTOMRIGHT_SYM)||LA374_0==CHARSET_SYM||LA374_0==COUNTER_STYLE_SYM||LA374_0==DIMENSION||LA374_0==EMS||LA374_0==EXS||(LA374_0 >= FONT_FACE_SYM && LA374_0 <= FREQ)||LA374_0==GEN||(LA374_0 >= HASH && LA374_0 <= HASH_SYMBOL)||(LA374_0 >= IDENT && LA374_0 <= IMPORT_SYM)||(LA374_0 >= LBRACE && LA374_0 <= LENGTH)||(LA374_0 >= LESS_AND && LA374_0 <= LESS_JS_STRING)||LA374_0==LPAREN||(LA374_0 >= MEDIA_SYM && LA374_0 <= MOZ_DOCUMENT_SYM)||LA374_0==NAMESPACE_SYM||(LA374_0 >= NOT && LA374_0 <= NUMBER)||(LA374_0 >= PAGE_SYM && LA374_0 <= PERCENTAGE_SYMBOL)||LA374_0==PLUS||(LA374_0 >= REM && LA374_0 <= RIGHTTOP_SYM)||(LA374_0 >= SASS_AT_ROOT && LA374_0 <= SASS_DEBUG)||(LA374_0 >= SASS_EACH && LA374_0 <= SASS_ELSE)||LA374_0==SASS_EXTEND||(LA374_0 >= SASS_FOR && LA374_0 <= SASS_FUNCTION)||(LA374_0 >= SASS_IF && LA374_0 <= SASS_MIXIN)||(LA374_0 >= SASS_RETURN && LA374_0 <= SASS_WHILE)||LA374_0==STRING||(LA374_0 >= TILDE && LA374_0 <= TOPRIGHT_SYM)||(LA374_0 >= URANGE && LA374_0 <= URI)||LA374_0==VARIABLE||LA374_0==WEBKIT_KEYFRAMES_SYM) ) {
 								alt374=1;
 							}
 							} finally {dbg.exitDecision(374);}
@@ -26344,7 +26394,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:221: cp_mixin_call_args
 									{
 									dbg.location(1186,221);
-									pushFollow(FOLLOW_cp_mixin_call_args_in_cp_mixin_call8211);
+									pushFollow(FOLLOW_cp_mixin_call_args_in_cp_mixin_call8218);
 									cp_mixin_call_args();
 									state._fsp--;
 									if (state.failed) return;
@@ -26354,7 +26404,7 @@
 							}
 							} finally {dbg.exitSubRule(374);}
 							dbg.location(1186,241);
-							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_call8214); if (state.failed) return;
+							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_call8221); if (state.failed) return;
 							}
 
 							}
@@ -26375,12 +26425,12 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "cp_mixin_call", "isScssSource()");
 					}dbg.location(1188,27);
-					match(input,SASS_INCLUDE,FOLLOW_SASS_INCLUDE_in_cp_mixin_call8239); if (state.failed) return;dbg.location(1188,40);
-					pushFollow(FOLLOW_ws_in_cp_mixin_call8241);
+					match(input,SASS_INCLUDE,FOLLOW_SASS_INCLUDE_in_cp_mixin_call8246); if (state.failed) return;dbg.location(1188,40);
+					pushFollow(FOLLOW_ws_in_cp_mixin_call8248);
 					ws();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1188,43);
-					pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8243);
+					pushFollow(FOLLOW_cp_mixin_name_in_cp_mixin_call8250);
 					cp_mixin_name();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1188,57);
@@ -26424,7 +26474,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1188:58: ws
 									{
 									dbg.location(1188,58);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8246);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8253);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26434,7 +26484,7 @@
 							}
 							} finally {dbg.exitSubRule(376);}
 							dbg.location(1188,62);
-							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_call8249); if (state.failed) return;dbg.location(1188,69);
+							match(input,LPAREN,FOLLOW_LPAREN_in_cp_mixin_call8256); if (state.failed) return;dbg.location(1188,69);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1188:69: ( ws )?
 							int alt377=2;
 							try { dbg.enterSubRule(377);
@@ -26453,7 +26503,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1188:69: ws
 									{
 									dbg.location(1188,69);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8251);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8258);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26469,7 +26519,7 @@
 							try { dbg.enterDecision(378, decisionCanBacktrack[378]);
 
 							int LA378_0 = input.LA(1);
-							if ( ((LA378_0 >= ANGLE && LA378_0 <= AT_SIGN)||(LA378_0 >= BOTTOMCENTER_SYM && LA378_0 <= BOTTOMRIGHT_SYM)||LA378_0==CHARSET_SYM||LA378_0==COUNTER_STYLE_SYM||LA378_0==DIMENSION||LA378_0==EMS||LA378_0==EXS||(LA378_0 >= FONT_FACE_SYM && LA378_0 <= FREQ)||LA378_0==GEN||(LA378_0 >= HASH && LA378_0 <= HASH_SYMBOL)||(LA378_0 >= IDENT && LA378_0 <= IMPORT_SYM)||(LA378_0 >= LBRACE && LA378_0 <= LENGTH)||(LA378_0 >= LESS_AND && LA378_0 <= LESS_JS_STRING)||LA378_0==LPAREN||(LA378_0 >= MEDIA_SYM && LA378_0 <= MOZ_DOCUMENT_SYM)||LA378_0==NAMESPACE_SYM||(LA378_0 >= NOT && LA378_0 <= NUMBER)||(LA378_0 >= PAGE_SYM && LA378_0 <= PERCENTAGE_SYMBOL)||LA378_0==PLUS||(LA378_0 >= REM && LA378_0 <= RIGHTTOP_SYM)||(LA378_0 >= SASS_AT_ROOT && LA378_0 <= SASS_DEBUG)||(LA378_0 >= SASS_EACH && LA378_0 <= SASS_ELSE)||LA378_0==SASS_EXTEND||LA378_0==SASS_FOR||LA378_0==SASS_FUNCTION||(LA378_0 >= SASS_IF && LA378_0 <= SASS_MIXIN)||LA378_0==SASS_RETURN||(LA378_0 >= SASS_VAR && LA378_0 <= SASS_WHILE)||LA378_0==STRING||(LA378_0 >= TILDE && LA378_0 <= TOPRIGHT_SYM)||(LA378_0 >= URANGE && LA378_0 <= URI)||LA378_0==VARIABLE||LA378_0==WEBKIT_KEYFRAMES_SYM) ) {
+							if ( ((LA378_0 >= ANGLE && LA378_0 <= AT_SIGN)||(LA378_0 >= BOTTOMCENTER_SYM && LA378_0 <= BOTTOMRIGHT_SYM)||LA378_0==CHARSET_SYM||LA378_0==COUNTER_STYLE_SYM||LA378_0==DIMENSION||LA378_0==EMS||LA378_0==EXS||(LA378_0 >= FONT_FACE_SYM && LA378_0 <= FREQ)||LA378_0==GEN||(LA378_0 >= HASH && LA378_0 <= HASH_SYMBOL)||(LA378_0 >= IDENT && LA378_0 <= IMPORT_SYM)||(LA378_0 >= LBRACE && LA378_0 <= LENGTH)||(LA378_0 >= LESS_AND && LA378_0 <= LESS_JS_STRING)||LA378_0==LPAREN||(LA378_0 >= MEDIA_SYM && LA378_0 <= MOZ_DOCUMENT_SYM)||LA378_0==NAMESPACE_SYM||(LA378_0 >= NOT && LA378_0 <= NUMBER)||(LA378_0 >= PAGE_SYM && LA378_0 <= PERCENTAGE_SYMBOL)||LA378_0==PLUS||(LA378_0 >= REM && LA378_0 <= RIGHTTOP_SYM)||(LA378_0 >= SASS_AT_ROOT && LA378_0 <= SASS_DEBUG)||(LA378_0 >= SASS_EACH && LA378_0 <= SASS_ELSE)||LA378_0==SASS_EXTEND||(LA378_0 >= SASS_FOR && LA378_0 <= SASS_FUNCTION)||(LA378_0 >= SASS_IF && LA378_0 <= SASS_MIXIN)||(LA378_0 >= SASS_RETURN && LA378_0 <= SASS_WHILE)||LA378_0==STRING||(LA378_0 >= TILDE && LA378_0 <= TOPRIGHT_SYM)||(LA378_0 >= URANGE && LA378_0 <= URI)||LA378_0==VARIABLE||LA378_0==WEBKIT_KEYFRAMES_SYM) ) {
 								alt378=1;
 							}
 							} finally {dbg.exitDecision(378);}
@@ -26481,7 +26531,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1188:73: cp_mixin_call_args
 									{
 									dbg.location(1188,73);
-									pushFollow(FOLLOW_cp_mixin_call_args_in_cp_mixin_call8254);
+									pushFollow(FOLLOW_cp_mixin_call_args_in_cp_mixin_call8261);
 									cp_mixin_call_args();
 									state._fsp--;
 									if (state.failed) return;
@@ -26491,7 +26541,7 @@
 							}
 							} finally {dbg.exitSubRule(378);}
 							dbg.location(1188,93);
-							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_call8257); if (state.failed) return;
+							match(input,RPAREN,FOLLOW_RPAREN_in_cp_mixin_call8264); if (state.failed) return;
 							}
 							break;
 
@@ -26538,7 +26588,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1188:103: ws
 									{
 									dbg.location(1188,103);
-									pushFollow(FOLLOW_ws_in_cp_mixin_call8262);
+									pushFollow(FOLLOW_ws_in_cp_mixin_call8269);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26548,7 +26598,7 @@
 							}
 							} finally {dbg.exitSubRule(380);}
 							dbg.location(1188,107);
-							pushFollow(FOLLOW_cp_mixin_block_in_cp_mixin_call8265);
+							pushFollow(FOLLOW_cp_mixin_block_in_cp_mixin_call8272);
 							cp_mixin_block();
 							state._fsp--;
 							if (state.failed) return;
@@ -26603,7 +26653,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1194:5: LBRACE ( ws )? syncToFollow ( declarations | ( webkitKeyframeSelectors )=> ( webkitKeyframesBlock ( ws )? )* )? RBRACE
 			{
 			dbg.location(1194,5);
-			match(input,LBRACE,FOLLOW_LBRACE_in_cp_mixin_block8294); if (state.failed) return;dbg.location(1194,12);
+			match(input,LBRACE,FOLLOW_LBRACE_in_cp_mixin_block8301); if (state.failed) return;dbg.location(1194,12);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1194:12: ( ws )?
 			int alt383=2;
 			try { dbg.enterSubRule(383);
@@ -26622,7 +26672,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1194:12: ws
 					{
 					dbg.location(1194,12);
-					pushFollow(FOLLOW_ws_in_cp_mixin_block8296);
+					pushFollow(FOLLOW_ws_in_cp_mixin_block8303);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -26632,7 +26682,7 @@
 			}
 			} finally {dbg.exitSubRule(383);}
 			dbg.location(1194,16);
-			pushFollow(FOLLOW_syncToFollow_in_cp_mixin_block8299);
+			pushFollow(FOLLOW_syncToFollow_in_cp_mixin_block8306);
 			syncToFollow();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1195,9);
@@ -26642,7 +26692,7 @@
 			try { dbg.enterDecision(386, decisionCanBacktrack[386]);
 
 			int LA386_0 = input.LA(1);
-			if ( ((LA386_0 >= AT_IDENT && LA386_0 <= AT_SIGN)||(LA386_0 >= BOTTOMCENTER_SYM && LA386_0 <= BOTTOMRIGHT_SYM)||(LA386_0 >= CHARSET_SYM && LA386_0 <= COLON)||LA386_0==COUNTER_STYLE_SYM||(LA386_0 >= DCOLON && LA386_0 <= DOT)||LA386_0==FONT_FACE_SYM||(LA386_0 >= GEN && LA386_0 <= GREATER)||(LA386_0 >= HASH && LA386_0 <= HASH_SYMBOL)||LA386_0==IMPORT_SYM||(LA386_0 >= LBRACKET && LA386_0 <= LEFTTOP_SYM)||LA386_0==LESS_AND||(LA386_0 >= MEDIA_SYM && LA386_0 <= MOZ_DOCUMENT_SYM)||LA386_0==NAMESPACE_SYM||LA386_0==PAGE_SYM||(LA386_0 >= PIPE && LA386_0 <= PLUS)||(LA386_0 >= RIGHTBOTTOM_SYM && LA386_0 <= RIGHTTOP_SYM)||LA386_0==SASS_AT_ROOT||LA386_0==SASS_DEBUG||(LA386_0 >= SASS_EACH && LA386_0 <= SASS_ELSE)||(LA386_0 >= SASS_ERROR && LA386_0 <= SASS_FOR)||LA386_0==SASS_FUNCTION||(LA386_0 >= SASS_IF && LA386_0 <= SASS_MIXIN)||LA386_0==SASS_RETURN||(LA386_0 >= SASS_VAR && LA386_0 <= SEMI)||LA386_0==STAR||LA386_0==SUPPORTS_SYM||LA386_0==TILDE||(LA386_0 >= TOPCENTER_SYM && LA386_0 <= TOPRIGHT_SYM)||LA386_0==VARIABLE||LA386_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA386_0 >= AT_IDENT && LA386_0 <= AT_SIGN)||(LA386_0 >= BOTTOMCENTER_SYM && LA386_0 <= BOTTOMRIGHT_SYM)||(LA386_0 >= CHARSET_SYM && LA386_0 <= COLON)||LA386_0==COUNTER_STYLE_SYM||(LA386_0 >= DCOLON && LA386_0 <= DOT)||LA386_0==FONT_FACE_SYM||(LA386_0 >= GEN && LA386_0 <= GREATER)||(LA386_0 >= HASH && LA386_0 <= HASH_SYMBOL)||LA386_0==IMPORT_SYM||(LA386_0 >= LBRACKET && LA386_0 <= LEFTTOP_SYM)||LA386_0==LESS_AND||(LA386_0 >= MEDIA_SYM && LA386_0 <= MOZ_DOCUMENT_SYM)||LA386_0==NAMESPACE_SYM||LA386_0==PAGE_SYM||(LA386_0 >= PIPE && LA386_0 <= PLUS)||(LA386_0 >= RIGHTBOTTOM_SYM && LA386_0 <= RIGHTTOP_SYM)||LA386_0==SASS_AT_ROOT||LA386_0==SASS_DEBUG||(LA386_0 >= SASS_EACH && LA386_0 <= SASS_ELSE)||(LA386_0 >= SASS_ERROR && LA386_0 <= SASS_FUNCTION)||(LA386_0 >= SASS_IF && LA386_0 <= SASS_MIXIN)||(LA386_0 >= SASS_RETURN && LA386_0 <= SEMI)||LA386_0==STAR||LA386_0==SUPPORTS_SYM||LA386_0==TILDE||(LA386_0 >= TOPCENTER_SYM && LA386_0 <= TOPRIGHT_SYM)||LA386_0==VARIABLE||LA386_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt386=1;
 			}
 			else if ( (LA386_0==IDENT) ) {
@@ -26681,7 +26731,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1195:10: declarations
 					{
 					dbg.location(1195,10);
-					pushFollow(FOLLOW_declarations_in_cp_mixin_block8310);
+					pushFollow(FOLLOW_declarations_in_cp_mixin_block8317);
 					declarations();
 					state._fsp--;
 					if (state.failed) return;
@@ -26715,7 +26765,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1196:5: webkitKeyframesBlock ( ws )?
 							{
 							dbg.location(1196,5);
-							pushFollow(FOLLOW_webkitKeyframesBlock_in_cp_mixin_block8325);
+							pushFollow(FOLLOW_webkitKeyframesBlock_in_cp_mixin_block8332);
 							webkitKeyframesBlock();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1196,26);
@@ -26737,7 +26787,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1196:26: ws
 									{
 									dbg.location(1196,26);
-									pushFollow(FOLLOW_ws_in_cp_mixin_block8327);
+									pushFollow(FOLLOW_ws_in_cp_mixin_block8334);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -26762,7 +26812,7 @@
 			}
 			} finally {dbg.exitSubRule(386);}
 			dbg.location(1197,5);
-			match(input,RBRACE,FOLLOW_RBRACE_in_cp_mixin_block8339); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_cp_mixin_block8346); if (state.failed) return;
 			}
 
 		}
@@ -26802,7 +26852,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1202:5: IDENT
 			{
 			dbg.location(1202,5);
-			match(input,IDENT,FOLLOW_IDENT_in_cp_mixin_name8360); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_cp_mixin_name8367); if (state.failed) return;
 			}
 
 		}
@@ -26842,7 +26892,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:5: cp_mixin_call_arg ( ( COMMA | SEMI ) ( ws )? cp_mixin_call_arg )* ( CP_DOTS ( ws )? )? ( SEMI )?
 			{
 			dbg.location(1209,5);
-			pushFollow(FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8391);
+			pushFollow(FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8398);
 			cp_mixin_call_arg();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1209,23);
@@ -26857,7 +26907,7 @@
 				int LA388_0 = input.LA(1);
 				if ( (LA388_0==SEMI) ) {
 					int LA388_2 = input.LA(2);
-					if ( ((LA388_2 >= ANGLE && LA388_2 <= AT_SIGN)||(LA388_2 >= BOTTOMCENTER_SYM && LA388_2 <= BOTTOMRIGHT_SYM)||LA388_2==CHARSET_SYM||LA388_2==COMMENT||LA388_2==COUNTER_STYLE_SYM||LA388_2==DIMENSION||LA388_2==EMS||LA388_2==EXS||(LA388_2 >= FONT_FACE_SYM && LA388_2 <= FREQ)||LA388_2==GEN||(LA388_2 >= HASH && LA388_2 <= HASH_SYMBOL)||(LA388_2 >= IDENT && LA388_2 <= IMPORT_SYM)||(LA388_2 >= LBRACE && LA388_2 <= LENGTH)||(LA388_2 >= LESS_AND && LA388_2 <= LESS_JS_STRING)||LA388_2==LPAREN||(LA388_2 >= MEDIA_SYM && LA388_2 <= MOZ_DOCUMENT_SYM)||(LA388_2 >= NAMESPACE_SYM && LA388_2 <= NL)||(LA388_2 >= NOT && LA388_2 <= NUMBER)||(LA388_2 >= PAGE_SYM && LA388_2 <= PERCENTAGE_SYMBOL)||LA388_2==PLUS||(LA388_2 >= REM && LA388_2 <= RIGHTTOP_SYM)||(LA388_2 >= SASS_AT_ROOT && LA388_2 <= SASS_DEBUG)||(LA388_2 >= SASS_EACH && LA388_2 <= SASS_ELSE)||LA388_2==SASS_EXTEND||LA388_2==SASS_FOR||LA388_2==SASS_FUNCTION||(LA388_2 >= SASS_IF && LA388_2 <= SASS_MIXIN)||LA388_2==SASS_RETURN||(LA388_2 >= SASS_VAR && LA388_2 <= SASS_WHILE)||LA388_2==STRING||(LA388_2 >= TILDE && LA388_2 <= TOPRIGHT_SYM)||(LA388_2 >= URANGE && LA388_2 <= URI)||LA388_2==VARIABLE||(LA388_2 >= WEBKIT_KEYFRAMES_SYM && LA388_2 <= WS)) ) {
+					if ( ((LA388_2 >= ANGLE && LA388_2 <= AT_SIGN)||(LA388_2 >= BOTTOMCENTER_SYM && LA388_2 <= BOTTOMRIGHT_SYM)||LA388_2==CHARSET_SYM||LA388_2==COMMENT||LA388_2==COUNTER_STYLE_SYM||LA388_2==DIMENSION||LA388_2==EMS||LA388_2==EXS||(LA388_2 >= FONT_FACE_SYM && LA388_2 <= FREQ)||LA388_2==GEN||(LA388_2 >= HASH && LA388_2 <= HASH_SYMBOL)||(LA388_2 >= IDENT && LA388_2 <= IMPORT_SYM)||(LA388_2 >= LBRACE && LA388_2 <= LENGTH)||(LA388_2 >= LESS_AND && LA388_2 <= LESS_JS_STRING)||LA388_2==LPAREN||(LA388_2 >= MEDIA_SYM && LA388_2 <= MOZ_DOCUMENT_SYM)||(LA388_2 >= NAMESPACE_SYM && LA388_2 <= NL)||(LA388_2 >= NOT && LA388_2 <= NUMBER)||(LA388_2 >= PAGE_SYM && LA388_2 <= PERCENTAGE_SYMBOL)||LA388_2==PLUS||(LA388_2 >= REM && LA388_2 <= RIGHTTOP_SYM)||(LA388_2 >= SASS_AT_ROOT && LA388_2 <= SASS_DEBUG)||(LA388_2 >= SASS_EACH && LA388_2 <= SASS_ELSE)||LA388_2==SASS_EXTEND||(LA388_2 >= SASS_FOR && LA388_2 <= SASS_FUNCTION)||(LA388_2 >= SASS_IF && LA388_2 <= SASS_MIXIN)||(LA388_2 >= SASS_RETURN && LA388_2 <= SASS_WHILE)||LA388_2==STRING||(LA388_2 >= TILDE && LA388_2 <= TOPRIGHT_SYM)||(LA388_2 >= URANGE && LA388_2 <= URI)||LA388_2==VARIABLE||(LA388_2 >= WEBKIT_KEYFRAMES_SYM && LA388_2 <= WS)) ) {
 						alt388=1;
 					}
 
@@ -26904,7 +26954,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:40: ws
 							{
 							dbg.location(1209,40);
-							pushFollow(FOLLOW_ws_in_cp_mixin_call_args8403);
+							pushFollow(FOLLOW_ws_in_cp_mixin_call_args8410);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -26914,7 +26964,7 @@
 					}
 					} finally {dbg.exitSubRule(387);}
 					dbg.location(1209,44);
-					pushFollow(FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8406);
+					pushFollow(FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8413);
 					cp_mixin_call_arg();
 					state._fsp--;
 					if (state.failed) return;
@@ -26945,7 +26995,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:66: CP_DOTS ( ws )?
 					{
 					dbg.location(1209,66);
-					match(input,CP_DOTS,FOLLOW_CP_DOTS_in_cp_mixin_call_args8412); if (state.failed) return;dbg.location(1209,74);
+					match(input,CP_DOTS,FOLLOW_CP_DOTS_in_cp_mixin_call_args8419); if (state.failed) return;dbg.location(1209,74);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:74: ( ws )?
 					int alt389=2;
 					try { dbg.enterSubRule(389);
@@ -26964,7 +27014,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:74: ws
 							{
 							dbg.location(1209,74);
-							pushFollow(FOLLOW_ws_in_cp_mixin_call_args8414);
+							pushFollow(FOLLOW_ws_in_cp_mixin_call_args8421);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -26998,7 +27048,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1209:80: SEMI
 					{
 					dbg.location(1209,80);
-					match(input,SEMI,FOLLOW_SEMI_in_cp_mixin_call_args8419); if (state.failed) return;
+					match(input,SEMI,FOLLOW_SEMI_in_cp_mixin_call_args8426); if (state.failed) return;
 					}
 					break;
 
@@ -27066,7 +27116,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1215:9: cp_variable ( ws )? COLON ( ws )? cp_expression
 					{
 					dbg.location(1215,9);
-					pushFollow(FOLLOW_cp_variable_in_cp_mixin_call_arg8451);
+					pushFollow(FOLLOW_cp_variable_in_cp_mixin_call_arg8458);
 					cp_variable();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1215,21);
@@ -27088,7 +27138,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1215:21: ws
 							{
 							dbg.location(1215,21);
-							pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8453);
+							pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8460);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27098,7 +27148,7 @@
 					}
 					} finally {dbg.exitSubRule(392);}
 					dbg.location(1215,25);
-					match(input,COLON,FOLLOW_COLON_in_cp_mixin_call_arg8456); if (state.failed) return;dbg.location(1215,31);
+					match(input,COLON,FOLLOW_COLON_in_cp_mixin_call_arg8463); if (state.failed) return;dbg.location(1215,31);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1215:31: ( ws )?
 					int alt393=2;
 					try { dbg.enterSubRule(393);
@@ -27117,7 +27167,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1215:31: ws
 							{
 							dbg.location(1215,31);
-							pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8458);
+							pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8465);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27127,7 +27177,7 @@
 					}
 					} finally {dbg.exitSubRule(393);}
 					dbg.location(1215,35);
-					pushFollow(FOLLOW_cp_expression_in_cp_mixin_call_arg8461);
+					pushFollow(FOLLOW_cp_expression_in_cp_mixin_call_arg8468);
 					cp_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -27139,7 +27189,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1216:11: cp_expression
 					{
 					dbg.location(1216,11);
-					pushFollow(FOLLOW_cp_expression_in_cp_mixin_call_arg8473);
+					pushFollow(FOLLOW_cp_expression_in_cp_mixin_call_arg8480);
 					cp_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -27167,7 +27217,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1217:7: ws
 					{
 					dbg.location(1217,7);
-					pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8481);
+					pushFollow(FOLLOW_ws_in_cp_mixin_call_arg8488);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -27215,7 +27265,7 @@
 			try { dbg.enterDecision(403, decisionCanBacktrack[403]);
 
 			int LA403_0 = input.LA(1);
-			if ( (LA403_0==AT_IDENT||(LA403_0 >= BOTTOMCENTER_SYM && LA403_0 <= BOTTOMRIGHT_SYM)||LA403_0==CHARSET_SYM||LA403_0==COUNTER_STYLE_SYM||LA403_0==FONT_FACE_SYM||LA403_0==IDENT||LA403_0==IMPORT_SYM||(LA403_0 >= LEFTBOTTOM_SYM && LA403_0 <= LEFTTOP_SYM)||LA403_0==MEDIA_SYM||LA403_0==MOZ_DOCUMENT_SYM||LA403_0==NAMESPACE_SYM||LA403_0==PAGE_SYM||(LA403_0 >= RIGHTBOTTOM_SYM && LA403_0 <= RIGHTTOP_SYM)||(LA403_0 >= SASS_AT_ROOT && LA403_0 <= SASS_DEBUG)||(LA403_0 >= SASS_EACH && LA403_0 <= SASS_ELSE)||LA403_0==SASS_EXTEND||LA403_0==SASS_FOR||LA403_0==SASS_FUNCTION||(LA403_0 >= SASS_IF && LA403_0 <= SASS_MIXIN)||LA403_0==SASS_RETURN||(LA403_0 >= SASS_VAR && LA403_0 <= SASS_WHILE)||(LA403_0 >= TOPCENTER_SYM && LA403_0 <= TOPRIGHT_SYM)||LA403_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA403_0==AT_IDENT||(LA403_0 >= BOTTOMCENTER_SYM && LA403_0 <= BOTTOMRIGHT_SYM)||LA403_0==CHARSET_SYM||LA403_0==COUNTER_STYLE_SYM||LA403_0==FONT_FACE_SYM||LA403_0==IDENT||LA403_0==IMPORT_SYM||(LA403_0 >= LEFTBOTTOM_SYM && LA403_0 <= LEFTTOP_SYM)||LA403_0==MEDIA_SYM||LA403_0==MOZ_DOCUMENT_SYM||LA403_0==NAMESPACE_SYM||LA403_0==PAGE_SYM||(LA403_0 >= RIGHTBOTTOM_SYM && LA403_0 <= RIGHTTOP_SYM)||(LA403_0 >= SASS_AT_ROOT && LA403_0 <= SASS_DEBUG)||(LA403_0 >= SASS_EACH && LA403_0 <= SASS_ELSE)||LA403_0==SASS_EXTEND||(LA403_0 >= SASS_FOR && LA403_0 <= SASS_FUNCTION)||(LA403_0 >= SASS_IF && LA403_0 <= SASS_MIXIN)||(LA403_0 >= SASS_RETURN && LA403_0 <= SASS_WHILE)||(LA403_0 >= TOPCENTER_SYM && LA403_0 <= TOPRIGHT_SYM)||LA403_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt403=1;
 			}
 			else if ( (LA403_0==CP_DOTS||LA403_0==LESS_REST) ) {
@@ -27245,7 +27295,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1229:7: cp_arg ( ( COMMA | SEMI ) ( ws )? cp_arg )* ( ( COMMA | SEMI ) ( ws )? )? ( ( CP_DOTS | LESS_REST ) ( ws )? )?
 					{
 					dbg.location(1229,7);
-					pushFollow(FOLLOW_cp_arg_in_cp_args_list8528);
+					pushFollow(FOLLOW_cp_arg_in_cp_args_list8535);
 					cp_arg();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1229,14);
@@ -27303,7 +27353,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1229:33: ws
 									{
 									dbg.location(1229,33);
-									pushFollow(FOLLOW_ws_in_cp_args_list8542);
+									pushFollow(FOLLOW_ws_in_cp_args_list8549);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -27313,7 +27363,7 @@
 							}
 							} finally {dbg.exitSubRule(396);}
 							dbg.location(1229,37);
-							pushFollow(FOLLOW_cp_arg_in_cp_args_list8545);
+							pushFollow(FOLLOW_cp_arg_in_cp_args_list8552);
 							cp_arg();
 							state._fsp--;
 							if (state.failed) return;
@@ -27373,7 +27423,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1229:64: ws
 									{
 									dbg.location(1229,64);
-									pushFollow(FOLLOW_ws_in_cp_args_list8560);
+									pushFollow(FOLLOW_ws_in_cp_args_list8567);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -27436,7 +27486,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1229:95: ws
 									{
 									dbg.location(1229,95);
-									pushFollow(FOLLOW_ws_in_cp_args_list8576);
+									pushFollow(FOLLOW_ws_in_cp_args_list8583);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -27491,7 +27541,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1231:27: ws
 							{
 							dbg.location(1231,27);
-							pushFollow(FOLLOW_ws_in_cp_args_list8601);
+							pushFollow(FOLLOW_ws_in_cp_args_list8608);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27541,7 +27591,7 @@
 			try { dbg.enterDecision(408, decisionCanBacktrack[408]);
 
 			int LA408_0 = input.LA(1);
-			if ( (LA408_0==AT_IDENT||(LA408_0 >= BOTTOMCENTER_SYM && LA408_0 <= BOTTOMRIGHT_SYM)||LA408_0==CHARSET_SYM||LA408_0==COUNTER_STYLE_SYM||LA408_0==FONT_FACE_SYM||LA408_0==IMPORT_SYM||(LA408_0 >= LEFTBOTTOM_SYM && LA408_0 <= LEFTTOP_SYM)||LA408_0==MEDIA_SYM||LA408_0==MOZ_DOCUMENT_SYM||LA408_0==NAMESPACE_SYM||LA408_0==PAGE_SYM||(LA408_0 >= RIGHTBOTTOM_SYM && LA408_0 <= RIGHTTOP_SYM)||(LA408_0 >= SASS_AT_ROOT && LA408_0 <= SASS_DEBUG)||(LA408_0 >= SASS_EACH && LA408_0 <= SASS_ELSE)||LA408_0==SASS_EXTEND||LA408_0==SASS_FOR||LA408_0==SASS_FUNCTION||(LA408_0 >= SASS_IF && LA408_0 <= SASS_MIXIN)||LA408_0==SASS_RETURN||(LA408_0 >= SASS_VAR && LA408_0 <= SASS_WHILE)||(LA408_0 >= TOPCENTER_SYM && LA408_0 <= TOPRIGHT_SYM)||LA408_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA408_0==AT_IDENT||(LA408_0 >= BOTTOMCENTER_SYM && LA408_0 <= BOTTOMRIGHT_SYM)||LA408_0==CHARSET_SYM||LA408_0==COUNTER_STYLE_SYM||LA408_0==FONT_FACE_SYM||LA408_0==IMPORT_SYM||(LA408_0 >= LEFTBOTTOM_SYM && LA408_0 <= LEFTTOP_SYM)||LA408_0==MEDIA_SYM||LA408_0==MOZ_DOCUMENT_SYM||LA408_0==NAMESPACE_SYM||LA408_0==PAGE_SYM||(LA408_0 >= RIGHTBOTTOM_SYM && LA408_0 <= RIGHTTOP_SYM)||(LA408_0 >= SASS_AT_ROOT && LA408_0 <= SASS_DEBUG)||(LA408_0 >= SASS_EACH && LA408_0 <= SASS_ELSE)||LA408_0==SASS_EXTEND||(LA408_0 >= SASS_FOR && LA408_0 <= SASS_FUNCTION)||(LA408_0 >= SASS_IF && LA408_0 <= SASS_MIXIN)||(LA408_0 >= SASS_RETURN && LA408_0 <= SASS_WHILE)||(LA408_0 >= TOPCENTER_SYM && LA408_0 <= TOPRIGHT_SYM)||LA408_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt408=1;
 			}
 			else if ( (LA408_0==IDENT) ) {
@@ -27586,7 +27636,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:5: cp_variable ( ws )? ( COLON ( ws )? cp_expression ( ws )? )?
 					{
 					dbg.location(1237,5);
-					pushFollow(FOLLOW_cp_variable_in_cp_arg8624);
+					pushFollow(FOLLOW_cp_variable_in_cp_arg8631);
 					cp_variable();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1237,17);
@@ -27608,7 +27658,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:17: ws
 							{
 							dbg.location(1237,17);
-							pushFollow(FOLLOW_ws_in_cp_arg8626);
+							pushFollow(FOLLOW_ws_in_cp_arg8633);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27636,7 +27686,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:23: COLON ( ws )? cp_expression ( ws )?
 							{
 							dbg.location(1237,23);
-							match(input,COLON,FOLLOW_COLON_in_cp_arg8631); if (state.failed) return;dbg.location(1237,29);
+							match(input,COLON,FOLLOW_COLON_in_cp_arg8638); if (state.failed) return;dbg.location(1237,29);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:29: ( ws )?
 							int alt405=2;
 							try { dbg.enterSubRule(405);
@@ -27655,7 +27705,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:29: ws
 									{
 									dbg.location(1237,29);
-									pushFollow(FOLLOW_ws_in_cp_arg8633);
+									pushFollow(FOLLOW_ws_in_cp_arg8640);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -27665,7 +27715,7 @@
 							}
 							} finally {dbg.exitSubRule(405);}
 							dbg.location(1237,33);
-							pushFollow(FOLLOW_cp_expression_in_cp_arg8636);
+							pushFollow(FOLLOW_cp_expression_in_cp_arg8643);
 							cp_expression();
 							state._fsp--;
 							if (state.failed) return;dbg.location(1237,47);
@@ -27687,7 +27737,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1237:47: ws
 									{
 									dbg.location(1237,47);
-									pushFollow(FOLLOW_ws_in_cp_arg8638);
+									pushFollow(FOLLOW_ws_in_cp_arg8645);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -27715,7 +27765,7 @@
 						if (state.backtracking>0) {state.failed=true; return;}
 						throw new FailedPredicateException(input, "cp_arg", "isLessSource()");
 					}dbg.location(1238,25);
-					match(input,IDENT,FOLLOW_IDENT_in_cp_arg8651); if (state.failed) return;
+					match(input,IDENT,FOLLOW_IDENT_in_cp_arg8658); if (state.failed) return;
 					}
 					break;
 
@@ -27757,7 +27807,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:5: less_when ( ws )? less_condition ( ( ws )? ( COMMA | key_and ) ( ws )? less_condition )*
 			{
 			dbg.location(1245,5);
-			pushFollow(FOLLOW_less_when_in_less_mixin_guarded8674);
+			pushFollow(FOLLOW_less_when_in_less_mixin_guarded8681);
 			less_when();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1245,15);
@@ -27779,7 +27829,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:15: ws
 					{
 					dbg.location(1245,15);
-					pushFollow(FOLLOW_ws_in_less_mixin_guarded8676);
+					pushFollow(FOLLOW_ws_in_less_mixin_guarded8683);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -27789,7 +27839,7 @@
 			}
 			} finally {dbg.exitSubRule(409);}
 			dbg.location(1245,19);
-			pushFollow(FOLLOW_less_condition_in_less_mixin_guarded8679);
+			pushFollow(FOLLOW_less_condition_in_less_mixin_guarded8686);
 			less_condition();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1245,34);
@@ -27836,7 +27886,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:35: ws
 							{
 							dbg.location(1245,35);
-							pushFollow(FOLLOW_ws_in_less_mixin_guarded8682);
+							pushFollow(FOLLOW_ws_in_less_mixin_guarded8689);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27876,7 +27926,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:40: COMMA
 							{
 							dbg.location(1245,40);
-							match(input,COMMA,FOLLOW_COMMA_in_less_mixin_guarded8686); if (state.failed) return;
+							match(input,COMMA,FOLLOW_COMMA_in_less_mixin_guarded8693); if (state.failed) return;
 							}
 							break;
 						case 2 :
@@ -27885,7 +27935,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:48: key_and
 							{
 							dbg.location(1245,48);
-							pushFollow(FOLLOW_key_and_in_less_mixin_guarded8690);
+							pushFollow(FOLLOW_key_and_in_less_mixin_guarded8697);
 							key_and();
 							state._fsp--;
 							if (state.failed) return;
@@ -27913,7 +27963,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1245:57: ws
 							{
 							dbg.location(1245,57);
-							pushFollow(FOLLOW_ws_in_less_mixin_guarded8693);
+							pushFollow(FOLLOW_ws_in_less_mixin_guarded8700);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -27923,7 +27973,7 @@
 					}
 					} finally {dbg.exitSubRule(412);}
 					dbg.location(1245,61);
-					pushFollow(FOLLOW_less_condition_in_less_mixin_guarded8696);
+					pushFollow(FOLLOW_less_condition_in_less_mixin_guarded8703);
 					less_condition();
 					state._fsp--;
 					if (state.failed) return;
@@ -27993,7 +28043,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1252:6: NOT ( ws )?
 					{
 					dbg.location(1252,6);
-					match(input,NOT,FOLLOW_NOT_in_less_condition8722); if (state.failed) return;dbg.location(1252,10);
+					match(input,NOT,FOLLOW_NOT_in_less_condition8729); if (state.failed) return;dbg.location(1252,10);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1252:10: ( ws )?
 					int alt414=2;
 					try { dbg.enterSubRule(414);
@@ -28012,7 +28062,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1252:10: ws
 							{
 							dbg.location(1252,10);
-							pushFollow(FOLLOW_ws_in_less_condition8724);
+							pushFollow(FOLLOW_ws_in_less_condition8731);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -28028,7 +28078,7 @@
 			}
 			} finally {dbg.exitSubRule(415);}
 			dbg.location(1253,5);
-			match(input,LPAREN,FOLLOW_LPAREN_in_less_condition8733); if (state.failed) return;dbg.location(1253,12);
+			match(input,LPAREN,FOLLOW_LPAREN_in_less_condition8740); if (state.failed) return;dbg.location(1253,12);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1253:12: ( ws )?
 			int alt416=2;
 			try { dbg.enterSubRule(416);
@@ -28047,7 +28097,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1253:12: ws
 					{
 					dbg.location(1253,12);
-					pushFollow(FOLLOW_ws_in_less_condition8735);
+					pushFollow(FOLLOW_ws_in_less_condition8742);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28069,7 +28119,7 @@
 			try { dbg.enterDecision(417, decisionCanBacktrack[417]);
 
 			int LA417_0 = input.LA(1);
-			if ( (LA417_0==AT_IDENT||(LA417_0 >= BOTTOMCENTER_SYM && LA417_0 <= BOTTOMRIGHT_SYM)||LA417_0==CHARSET_SYM||LA417_0==COUNTER_STYLE_SYM||LA417_0==FONT_FACE_SYM||LA417_0==IMPORT_SYM||(LA417_0 >= LEFTBOTTOM_SYM && LA417_0 <= LEFTTOP_SYM)||LA417_0==MEDIA_SYM||LA417_0==MOZ_DOCUMENT_SYM||LA417_0==NAMESPACE_SYM||LA417_0==PAGE_SYM||(LA417_0 >= RIGHTBOTTOM_SYM && LA417_0 <= RIGHTTOP_SYM)||(LA417_0 >= SASS_AT_ROOT && LA417_0 <= SASS_DEBUG)||(LA417_0 >= SASS_EACH && LA417_0 <= SASS_ELSE)||LA417_0==SASS_EXTEND||LA417_0==SASS_FOR||LA417_0==SASS_FUNCTION||(LA417_0 >= SASS_IF && LA417_0 <= SASS_MIXIN)||LA417_0==SASS_RETURN||(LA417_0 >= SASS_VAR && LA417_0 <= SASS_WHILE)||(LA417_0 >= TOPCENTER_SYM && LA417_0 <= TOPRIGHT_SYM)||LA417_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA417_0==AT_IDENT||(LA417_0 >= BOTTOMCENTER_SYM && LA417_0 <= BOTTOMRIGHT_SYM)||LA417_0==CHARSET_SYM||LA417_0==COUNTER_STYLE_SYM||LA417_0==FONT_FACE_SYM||LA417_0==IMPORT_SYM||(LA417_0 >= LEFTBOTTOM_SYM && LA417_0 <= LEFTTOP_SYM)||LA417_0==MEDIA_SYM||LA417_0==MOZ_DOCUMENT_SYM||LA417_0==NAMESPACE_SYM||LA417_0==PAGE_SYM||(LA417_0 >= RIGHTBOTTOM_SYM && LA417_0 <= RIGHTTOP_SYM)||(LA417_0 >= SASS_AT_ROOT && LA417_0 <= SASS_DEBUG)||(LA417_0 >= SASS_EACH && LA417_0 <= SASS_ELSE)||LA417_0==SASS_EXTEND||(LA417_0 >= SASS_FOR && LA417_0 <= SASS_FUNCTION)||(LA417_0 >= SASS_IF && LA417_0 <= SASS_MIXIN)||(LA417_0 >= SASS_RETURN && LA417_0 <= SASS_WHILE)||(LA417_0 >= TOPCENTER_SYM && LA417_0 <= TOPRIGHT_SYM)||LA417_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt417=1;
 			}
 			else if ( (LA417_0==IDENT) ) {
@@ -28114,7 +28164,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1255:15: cp_variable
 					{
 					dbg.location(1255,15);
-					pushFollow(FOLLOW_cp_variable_in_less_condition8762);
+					pushFollow(FOLLOW_cp_variable_in_less_condition8769);
 					cp_variable();
 					state._fsp--;
 					if (state.failed) return;
@@ -28126,7 +28176,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1255:29: less_function_in_condition
 					{
 					dbg.location(1255,29);
-					pushFollow(FOLLOW_less_function_in_condition_in_less_condition8766);
+					pushFollow(FOLLOW_less_function_in_condition_in_less_condition8773);
 					less_function_in_condition();
 					state._fsp--;
 					if (state.failed) return;
@@ -28154,7 +28204,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1255:57: ws
 					{
 					dbg.location(1255,57);
-					pushFollow(FOLLOW_ws_in_less_condition8769);
+					pushFollow(FOLLOW_ws_in_less_condition8776);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28182,7 +28232,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1255:62: less_condition_operator ( ws )? cp_math_expression
 					{
 					dbg.location(1255,62);
-					pushFollow(FOLLOW_less_condition_operator_in_less_condition8773);
+					pushFollow(FOLLOW_less_condition_operator_in_less_condition8780);
 					less_condition_operator();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1255,86);
@@ -28204,7 +28254,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1255:86: ws
 							{
 							dbg.location(1255,86);
-							pushFollow(FOLLOW_ws_in_less_condition8775);
+							pushFollow(FOLLOW_ws_in_less_condition8782);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -28214,7 +28264,7 @@
 					}
 					} finally {dbg.exitSubRule(419);}
 					dbg.location(1255,90);
-					pushFollow(FOLLOW_cp_math_expression_in_less_condition8778);
+					pushFollow(FOLLOW_cp_math_expression_in_less_condition8785);
 					cp_math_expression();
 					state._fsp--;
 					if (state.failed) return;
@@ -28226,7 +28276,7 @@
 
 			}
 			dbg.location(1257,5);
-			match(input,RPAREN,FOLLOW_RPAREN_in_less_condition8796); if (state.failed) return;
+			match(input,RPAREN,FOLLOW_RPAREN_in_less_condition8803); if (state.failed) return;
 			}
 
 		}
@@ -28266,7 +28316,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1263:5: less_fn_name ( ws )? LPAREN ( ws )? cp_variable ( ws )? RPAREN
 			{
 			dbg.location(1263,5);
-			pushFollow(FOLLOW_less_fn_name_in_less_function_in_condition8818);
+			pushFollow(FOLLOW_less_fn_name_in_less_function_in_condition8825);
 			less_fn_name();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1263,18);
@@ -28288,7 +28338,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1263:18: ws
 					{
 					dbg.location(1263,18);
-					pushFollow(FOLLOW_ws_in_less_function_in_condition8820);
+					pushFollow(FOLLOW_ws_in_less_function_in_condition8827);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28298,7 +28348,7 @@
 			}
 			} finally {dbg.exitSubRule(421);}
 			dbg.location(1263,22);
-			match(input,LPAREN,FOLLOW_LPAREN_in_less_function_in_condition8823); if (state.failed) return;dbg.location(1263,29);
+			match(input,LPAREN,FOLLOW_LPAREN_in_less_function_in_condition8830); if (state.failed) return;dbg.location(1263,29);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1263:29: ( ws )?
 			int alt422=2;
 			try { dbg.enterSubRule(422);
@@ -28317,7 +28367,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1263:29: ws
 					{
 					dbg.location(1263,29);
-					pushFollow(FOLLOW_ws_in_less_function_in_condition8825);
+					pushFollow(FOLLOW_ws_in_less_function_in_condition8832);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28327,7 +28377,7 @@
 			}
 			} finally {dbg.exitSubRule(422);}
 			dbg.location(1263,33);
-			pushFollow(FOLLOW_cp_variable_in_less_function_in_condition8828);
+			pushFollow(FOLLOW_cp_variable_in_less_function_in_condition8835);
 			cp_variable();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1263,45);
@@ -28349,7 +28399,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1263:45: ws
 					{
 					dbg.location(1263,45);
-					pushFollow(FOLLOW_ws_in_less_function_in_condition8830);
+					pushFollow(FOLLOW_ws_in_less_function_in_condition8837);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28359,7 +28409,7 @@
 			}
 			} finally {dbg.exitSubRule(423);}
 			dbg.location(1263,49);
-			match(input,RPAREN,FOLLOW_RPAREN_in_less_function_in_condition8833); if (state.failed) return;
+			match(input,RPAREN,FOLLOW_RPAREN_in_less_function_in_condition8840); if (state.failed) return;
 			}
 
 		}
@@ -28399,7 +28449,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1269:5: IDENT
 			{
 			dbg.location(1269,5);
-			match(input,IDENT,FOLLOW_IDENT_in_less_fn_name8855); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_less_fn_name8862); if (state.failed) return;
 			}
 
 		}
@@ -28524,7 +28574,7 @@
 			}
 			} finally {dbg.exitSubRule(424);}
 			dbg.location(1278,22);
-			pushFollow(FOLLOW_less_selector_interpolation_in_less_selector_interpolation_exp8918);
+			pushFollow(FOLLOW_less_selector_interpolation_in_less_selector_interpolation_exp8925);
 			less_selector_interpolation();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1278,50);
@@ -28574,7 +28624,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1278:51: less_selector_interpolation_exp
 					{
 					dbg.location(1278,51);
-					pushFollow(FOLLOW_less_selector_interpolation_exp_in_less_selector_interpolation_exp8921);
+					pushFollow(FOLLOW_less_selector_interpolation_exp_in_less_selector_interpolation_exp8928);
 					less_selector_interpolation_exp();
 					state._fsp--;
 					if (state.failed) return;
@@ -28687,8 +28737,8 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1283:5: AT_SIGN LBRACE ( ws )? IDENT ( ws )? RBRACE
 			{
 			dbg.location(1283,5);
-			match(input,AT_SIGN,FOLLOW_AT_SIGN_in_less_selector_interpolation8964); if (state.failed) return;dbg.location(1283,13);
-			match(input,LBRACE,FOLLOW_LBRACE_in_less_selector_interpolation8966); if (state.failed) return;dbg.location(1283,20);
+			match(input,AT_SIGN,FOLLOW_AT_SIGN_in_less_selector_interpolation8971); if (state.failed) return;dbg.location(1283,13);
+			match(input,LBRACE,FOLLOW_LBRACE_in_less_selector_interpolation8973); if (state.failed) return;dbg.location(1283,20);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1283:20: ( ws )?
 			int alt427=2;
 			try { dbg.enterSubRule(427);
@@ -28707,7 +28757,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1283:20: ws
 					{
 					dbg.location(1283,20);
-					pushFollow(FOLLOW_ws_in_less_selector_interpolation8968);
+					pushFollow(FOLLOW_ws_in_less_selector_interpolation8975);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28717,7 +28767,7 @@
 			}
 			} finally {dbg.exitSubRule(427);}
 			dbg.location(1283,24);
-			match(input,IDENT,FOLLOW_IDENT_in_less_selector_interpolation8971); if (state.failed) return;dbg.location(1283,30);
+			match(input,IDENT,FOLLOW_IDENT_in_less_selector_interpolation8978); if (state.failed) return;dbg.location(1283,30);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1283:30: ( ws )?
 			int alt428=2;
 			try { dbg.enterSubRule(428);
@@ -28736,7 +28786,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1283:30: ws
 					{
 					dbg.location(1283,30);
-					pushFollow(FOLLOW_ws_in_less_selector_interpolation8973);
+					pushFollow(FOLLOW_ws_in_less_selector_interpolation8980);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -28746,7 +28796,7 @@
 			}
 			} finally {dbg.exitSubRule(428);}
 			dbg.location(1283,34);
-			match(input,RBRACE,FOLLOW_RBRACE_in_less_selector_interpolation8976); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_less_selector_interpolation8983); if (state.failed) return;
 			}
 
 		}
@@ -28821,7 +28871,7 @@
 			}
 			} finally {dbg.exitSubRule(429);}
 			dbg.location(1288,22);
-			pushFollow(FOLLOW_sass_interpolation_expression_var_in_sass_selector_interpolation_exp9003);
+			pushFollow(FOLLOW_sass_interpolation_expression_var_in_sass_selector_interpolation_exp9010);
 			sass_interpolation_expression_var();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1288,56);
@@ -28880,7 +28930,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1288:57: sass_selector_interpolation_exp
 					{
 					dbg.location(1288,57);
-					pushFollow(FOLLOW_sass_selector_interpolation_exp_in_sass_selector_interpolation_exp9006);
+					pushFollow(FOLLOW_sass_selector_interpolation_exp_in_sass_selector_interpolation_exp9013);
 					sass_selector_interpolation_exp();
 					state._fsp--;
 					if (state.failed) return;
@@ -28993,8 +29043,8 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1293:9: HASH_SYMBOL LBRACE ( WS )? cp_expression ( WS )? RBRACE
 			{
 			dbg.location(1293,9);
-			match(input,HASH_SYMBOL,FOLLOW_HASH_SYMBOL_in_sass_interpolation_expression_var9053); if (state.failed) return;dbg.location(1293,21);
-			match(input,LBRACE,FOLLOW_LBRACE_in_sass_interpolation_expression_var9055); if (state.failed) return;dbg.location(1293,28);
+			match(input,HASH_SYMBOL,FOLLOW_HASH_SYMBOL_in_sass_interpolation_expression_var9060); if (state.failed) return;dbg.location(1293,21);
+			match(input,LBRACE,FOLLOW_LBRACE_in_sass_interpolation_expression_var9062); if (state.failed) return;dbg.location(1293,28);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1293:28: ( WS )?
 			int alt432=2;
 			try { dbg.enterSubRule(432);
@@ -29013,14 +29063,14 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1293:28: WS
 					{
 					dbg.location(1293,28);
-					match(input,WS,FOLLOW_WS_in_sass_interpolation_expression_var9057); if (state.failed) return;
+					match(input,WS,FOLLOW_WS_in_sass_interpolation_expression_var9064); if (state.failed) return;
 					}
 					break;
 
 			}
 			} finally {dbg.exitSubRule(432);}
 			dbg.location(1293,32);
-			pushFollow(FOLLOW_cp_expression_in_sass_interpolation_expression_var9060);
+			pushFollow(FOLLOW_cp_expression_in_sass_interpolation_expression_var9067);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1293,46);
@@ -29042,14 +29092,14 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1293:46: WS
 					{
 					dbg.location(1293,46);
-					match(input,WS,FOLLOW_WS_in_sass_interpolation_expression_var9062); if (state.failed) return;
+					match(input,WS,FOLLOW_WS_in_sass_interpolation_expression_var9069); if (state.failed) return;
 					}
 					break;
 
 			}
 			} finally {dbg.exitSubRule(433);}
 			dbg.location(1293,50);
-			match(input,RBRACE,FOLLOW_RBRACE_in_sass_interpolation_expression_var9065); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_sass_interpolation_expression_var9072); if (state.failed) return;
 			}
 
 		}
@@ -29089,7 +29139,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:5: property ( ws )? COLON ( ws )? ( propertyValue ( ws )? )? LBRACE ( ws )? syncToFollow ( declarations )? RBRACE
 			{
 			dbg.location(1316,5);
-			pushFollow(FOLLOW_property_in_sass_nested_properties9105);
+			pushFollow(FOLLOW_property_in_sass_nested_properties9112);
 			property();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1316,14);
@@ -29111,7 +29161,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:14: ws
 					{
 					dbg.location(1316,14);
-					pushFollow(FOLLOW_ws_in_sass_nested_properties9107);
+					pushFollow(FOLLOW_ws_in_sass_nested_properties9114);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -29121,7 +29171,7 @@
 			}
 			} finally {dbg.exitSubRule(434);}
 			dbg.location(1316,18);
-			match(input,COLON,FOLLOW_COLON_in_sass_nested_properties9110); if (state.failed) return;dbg.location(1316,24);
+			match(input,COLON,FOLLOW_COLON_in_sass_nested_properties9117); if (state.failed) return;dbg.location(1316,24);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:24: ( ws )?
 			int alt435=2;
 			try { dbg.enterSubRule(435);
@@ -29140,7 +29190,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:24: ws
 					{
 					dbg.location(1316,24);
-					pushFollow(FOLLOW_ws_in_sass_nested_properties9112);
+					pushFollow(FOLLOW_ws_in_sass_nested_properties9119);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -29156,7 +29206,7 @@
 			try { dbg.enterDecision(437, decisionCanBacktrack[437]);
 
 			int LA437_0 = input.LA(1);
-			if ( ((LA437_0 >= ANGLE && LA437_0 <= AT_SIGN)||(LA437_0 >= BOTTOMCENTER_SYM && LA437_0 <= BOTTOMRIGHT_SYM)||LA437_0==CHARSET_SYM||LA437_0==COUNTER_STYLE_SYM||LA437_0==DIMENSION||LA437_0==EMS||LA437_0==EXS||(LA437_0 >= FONT_FACE_SYM && LA437_0 <= FREQ)||LA437_0==GEN||(LA437_0 >= HASH && LA437_0 <= HASH_SYMBOL)||LA437_0==IDENT||LA437_0==IMPORT_SYM||(LA437_0 >= LBRACKET && LA437_0 <= LENGTH)||(LA437_0 >= LESS_AND && LA437_0 <= LESS_JS_STRING)||(LA437_0 >= MEDIA_SYM && LA437_0 <= MOZ_DOCUMENT_SYM)||LA437_0==NAMESPACE_SYM||LA437_0==NUMBER||(LA437_0 >= PAGE_SYM && LA437_0 <= PERCENTAGE_SYMBOL)||LA437_0==PLUS||(LA437_0 >= REM && LA437_0 <= RIGHTTOP_SYM)||(LA437_0 >= SASS_AT_ROOT && LA437_0 <= SASS_DEBUG)||(LA437_0 >= SASS_EACH && LA437_0 <= SASS_ELSE)||LA437_0==SASS_EXTEND||LA437_0==SASS_FOR||LA437_0==SASS_FUNCTION||(LA437_0 >= SASS_IF && LA437_0 <= SASS_MIXIN)||LA437_0==SASS_RETURN||(LA437_0 >= SASS_VAR && LA437_0 <= SASS_WHILE)||LA437_0==STRING||(LA437_0 >= TILDE && LA437_0 <= TOPRIGHT_SYM)||(LA437_0 >= URANGE && LA437_0 <= URI)||LA437_0==VARIABLE||LA437_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA437_0 >= ANGLE && LA437_0 <= AT_SIGN)||(LA437_0 >= BOTTOMCENTER_SYM && LA437_0 <= BOTTOMRIGHT_SYM)||LA437_0==CHARSET_SYM||LA437_0==COUNTER_STYLE_SYM||LA437_0==DIMENSION||LA437_0==EMS||LA437_0==EXS||(LA437_0 >= FONT_FACE_SYM && LA437_0 <= FREQ)||LA437_0==GEN||(LA437_0 >= HASH && LA437_0 <= HASH_SYMBOL)||LA437_0==IDENT||LA437_0==IMPORT_SYM||(LA437_0 >= LBRACKET && LA437_0 <= LENGTH)||(LA437_0 >= LESS_AND && LA437_0 <= LESS_JS_STRING)||(LA437_0 >= MEDIA_SYM && LA437_0 <= MOZ_DOCUMENT_SYM)||LA437_0==NAMESPACE_SYM||LA437_0==NUMBER||(LA437_0 >= PAGE_SYM && LA437_0 <= PERCENTAGE_SYMBOL)||LA437_0==PLUS||(LA437_0 >= REM && LA437_0 <= RIGHTTOP_SYM)||(LA437_0 >= SASS_AT_ROOT && LA437_0 <= SASS_DEBUG)||(LA437_0 >= SASS_EACH && LA437_0 <= SASS_ELSE)||LA437_0==SASS_EXTEND||(LA437_0 >= SASS_FOR && LA437_0 <= SASS_FUNCTION)||(LA437_0 >= SASS_IF && LA437_0 <= SASS_MIXIN)||(LA437_0 >= SASS_RETURN && LA437_0 <= SASS_WHILE)||LA437_0==STRING||(LA437_0 >= TILDE && LA437_0 <= TOPRIGHT_SYM)||(LA437_0 >= URANGE && LA437_0 <= URI)||LA437_0==VARIABLE||LA437_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt437=1;
 			}
 			} finally {dbg.exitDecision(437);}
@@ -29168,7 +29218,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:29: propertyValue ( ws )?
 					{
 					dbg.location(1316,29);
-					pushFollow(FOLLOW_propertyValue_in_sass_nested_properties9116);
+					pushFollow(FOLLOW_propertyValue_in_sass_nested_properties9123);
 					propertyValue();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1316,43);
@@ -29190,7 +29240,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:43: ws
 							{
 							dbg.location(1316,43);
-							pushFollow(FOLLOW_ws_in_sass_nested_properties9118);
+							pushFollow(FOLLOW_ws_in_sass_nested_properties9125);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -29206,7 +29256,7 @@
 			}
 			} finally {dbg.exitSubRule(437);}
 			dbg.location(1316,49);
-			match(input,LBRACE,FOLLOW_LBRACE_in_sass_nested_properties9123); if (state.failed) return;dbg.location(1316,56);
+			match(input,LBRACE,FOLLOW_LBRACE_in_sass_nested_properties9130); if (state.failed) return;dbg.location(1316,56);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:56: ( ws )?
 			int alt438=2;
 			try { dbg.enterSubRule(438);
@@ -29225,7 +29275,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:56: ws
 					{
 					dbg.location(1316,56);
-					pushFollow(FOLLOW_ws_in_sass_nested_properties9125);
+					pushFollow(FOLLOW_ws_in_sass_nested_properties9132);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -29235,7 +29285,7 @@
 			}
 			} finally {dbg.exitSubRule(438);}
 			dbg.location(1316,60);
-			pushFollow(FOLLOW_syncToFollow_in_sass_nested_properties9128);
+			pushFollow(FOLLOW_syncToFollow_in_sass_nested_properties9135);
 			syncToFollow();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1316,73);
@@ -29245,7 +29295,7 @@
 			try { dbg.enterDecision(439, decisionCanBacktrack[439]);
 
 			int LA439_0 = input.LA(1);
-			if ( ((LA439_0 >= AT_IDENT && LA439_0 <= AT_SIGN)||(LA439_0 >= BOTTOMCENTER_SYM && LA439_0 <= BOTTOMRIGHT_SYM)||(LA439_0 >= CHARSET_SYM && LA439_0 <= COLON)||LA439_0==COUNTER_STYLE_SYM||(LA439_0 >= DCOLON && LA439_0 <= DOT)||LA439_0==FONT_FACE_SYM||(LA439_0 >= GEN && LA439_0 <= GREATER)||(LA439_0 >= HASH && LA439_0 <= HASH_SYMBOL)||LA439_0==IDENT||LA439_0==IMPORT_SYM||(LA439_0 >= LBRACKET && LA439_0 <= LEFTTOP_SYM)||LA439_0==LESS_AND||(LA439_0 >= MEDIA_SYM && LA439_0 <= MOZ_DOCUMENT_SYM)||LA439_0==NAMESPACE_SYM||LA439_0==PAGE_SYM||(LA439_0 >= PIPE && LA439_0 <= PLUS)||(LA439_0 >= RIGHTBOTTOM_SYM && LA439_0 <= RIGHTTOP_SYM)||(LA439_0 >= SASS_AT_ROOT && LA439_0 <= SASS_DEBUG)||(LA439_0 >= SASS_EACH && LA439_0 <= SASS_ELSE)||(LA439_0 >= SASS_ERROR && LA439_0 <= SASS_FOR)||LA439_0==SASS_FUNCTION||(LA439_0 >= SASS_IF && LA439_0 <= SASS_MIXIN)||LA439_0==SASS_RETURN||(LA439_0 >= SASS_VAR && LA439_0 <= SEMI)||LA439_0==STAR||LA439_0==SUPPORTS_SYM||LA439_0==TILDE||(LA439_0 >= TOPCENTER_SYM && LA439_0 <= TOPRIGHT_SYM)||LA439_0==VARIABLE||LA439_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA439_0 >= AT_IDENT && LA439_0 <= AT_SIGN)||(LA439_0 >= BOTTOMCENTER_SYM && LA439_0 <= BOTTOMRIGHT_SYM)||(LA439_0 >= CHARSET_SYM && LA439_0 <= COLON)||LA439_0==COUNTER_STYLE_SYM||(LA439_0 >= DCOLON && LA439_0 <= DOT)||LA439_0==FONT_FACE_SYM||(LA439_0 >= GEN && LA439_0 <= GREATER)||(LA439_0 >= HASH && LA439_0 <= HASH_SYMBOL)||LA439_0==IDENT||LA439_0==IMPORT_SYM||(LA439_0 >= LBRACKET && LA439_0 <= LEFTTOP_SYM)||LA439_0==LESS_AND||(LA439_0 >= MEDIA_SYM && LA439_0 <= MOZ_DOCUMENT_SYM)||LA439_0==NAMESPACE_SYM||LA439_0==PAGE_SYM||(LA439_0 >= PIPE && LA439_0 <= PLUS)||(LA439_0 >= RIGHTBOTTOM_SYM && LA439_0 <= RIGHTTOP_SYM)||(LA439_0 >= SASS_AT_ROOT && LA439_0 <= SASS_DEBUG)||(LA439_0 >= SASS_EACH && LA439_0 <= SASS_ELSE)||(LA439_0 >= SASS_ERROR && LA439_0 <= SASS_FUNCTION)||(LA439_0 >= SASS_IF && LA439_0 <= SASS_MIXIN)||(LA439_0 >= SASS_RETURN && LA439_0 <= SEMI)||LA439_0==STAR||LA439_0==SUPPORTS_SYM||LA439_0==TILDE||(LA439_0 >= TOPCENTER_SYM && LA439_0 <= TOPRIGHT_SYM)||LA439_0==VARIABLE||LA439_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt439=1;
 			}
 			} finally {dbg.exitDecision(439);}
@@ -29257,7 +29307,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1316:73: declarations
 					{
 					dbg.location(1316,73);
-					pushFollow(FOLLOW_declarations_in_sass_nested_properties9130);
+					pushFollow(FOLLOW_declarations_in_sass_nested_properties9137);
 					declarations();
 					state._fsp--;
 					if (state.failed) return;
@@ -29267,7 +29317,7 @@
 			}
 			} finally {dbg.exitSubRule(439);}
 			dbg.location(1316,87);
-			match(input,RBRACE,FOLLOW_RBRACE_in_sass_nested_properties9133); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_sass_nested_properties9140); if (state.failed) return;
 			}
 
 		}
@@ -29307,12 +29357,12 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1321:5: SASS_EXTEND ws simpleSelectorSequence ( ( ws )? COMMA ( ws )? simpleSelectorSequence )* ( ws SASS_OPTIONAL )?
 			{
 			dbg.location(1321,5);
-			match(input,SASS_EXTEND,FOLLOW_SASS_EXTEND_in_sass_extend9154); if (state.failed) return;dbg.location(1321,17);
-			pushFollow(FOLLOW_ws_in_sass_extend9156);
+			match(input,SASS_EXTEND,FOLLOW_SASS_EXTEND_in_sass_extend9161); if (state.failed) return;dbg.location(1321,17);
+			pushFollow(FOLLOW_ws_in_sass_extend9163);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1321,20);
-			pushFollow(FOLLOW_simpleSelectorSequence_in_sass_extend9158);
+			pushFollow(FOLLOW_simpleSelectorSequence_in_sass_extend9165);
 			simpleSelectorSequence();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1321,43);
@@ -29359,7 +29409,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1321:44: ws
 							{
 							dbg.location(1321,44);
-							pushFollow(FOLLOW_ws_in_sass_extend9161);
+							pushFollow(FOLLOW_ws_in_sass_extend9168);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -29369,7 +29419,7 @@
 					}
 					} finally {dbg.exitSubRule(440);}
 					dbg.location(1321,48);
-					match(input,COMMA,FOLLOW_COMMA_in_sass_extend9164); if (state.failed) return;dbg.location(1321,54);
+					match(input,COMMA,FOLLOW_COMMA_in_sass_extend9171); if (state.failed) return;dbg.location(1321,54);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1321:54: ( ws )?
 					int alt441=2;
 					try { dbg.enterSubRule(441);
@@ -29388,7 +29438,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1321:54: ws
 							{
 							dbg.location(1321,54);
-							pushFollow(FOLLOW_ws_in_sass_extend9166);
+							pushFollow(FOLLOW_ws_in_sass_extend9173);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -29398,7 +29448,7 @@
 					}
 					} finally {dbg.exitSubRule(441);}
 					dbg.location(1321,58);
-					pushFollow(FOLLOW_simpleSelectorSequence_in_sass_extend9169);
+					pushFollow(FOLLOW_simpleSelectorSequence_in_sass_extend9176);
 					simpleSelectorSequence();
 					state._fsp--;
 					if (state.failed) return;
@@ -29433,11 +29483,11 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1321:84: ws SASS_OPTIONAL
 					{
 					dbg.location(1321,84);
-					pushFollow(FOLLOW_ws_in_sass_extend9174);
+					pushFollow(FOLLOW_ws_in_sass_extend9181);
 					ws();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1321,87);
-					match(input,SASS_OPTIONAL,FOLLOW_SASS_OPTIONAL_in_sass_extend9176); if (state.failed) return;
+					match(input,SASS_OPTIONAL,FOLLOW_SASS_OPTIONAL_in_sass_extend9183); if (state.failed) return;
 					}
 					break;
 
@@ -29483,7 +29533,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1326:5: SASS_EXTEND_ONLY_SELECTOR ( sass_selector_interpolation_exp )?
 			{
 			dbg.location(1326,5);
-			match(input,SASS_EXTEND_ONLY_SELECTOR,FOLLOW_SASS_EXTEND_ONLY_SELECTOR_in_sass_extend_only_selector9199); if (state.failed) return;dbg.location(1326,31);
+			match(input,SASS_EXTEND_ONLY_SELECTOR,FOLLOW_SASS_EXTEND_ONLY_SELECTOR_in_sass_extend_only_selector9206); if (state.failed) return;dbg.location(1326,31);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1326:31: ( sass_selector_interpolation_exp )?
 			int alt444=2;
 			try { dbg.enterSubRule(444);
@@ -29508,7 +29558,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1326:31: sass_selector_interpolation_exp
 					{
 					dbg.location(1326,31);
-					pushFollow(FOLLOW_sass_selector_interpolation_exp_in_sass_extend_only_selector9201);
+					pushFollow(FOLLOW_sass_selector_interpolation_exp_in_sass_extend_only_selector9208);
 					sass_selector_interpolation_exp();
 					state._fsp--;
 					if (state.failed) return;
@@ -29568,11 +29618,11 @@
 				dbg.recognitionException(mse);
 				throw mse;
 			}dbg.location(1331,32);
-			pushFollow(FOLLOW_ws_in_sass_debug9233);
+			pushFollow(FOLLOW_ws_in_sass_debug9240);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1331,35);
-			pushFollow(FOLLOW_cp_expression_in_sass_debug9235);
+			pushFollow(FOLLOW_cp_expression_in_sass_debug9242);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;
@@ -29615,12 +29665,12 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1336:5: SASS_ERROR ws STRING
 			{
 			dbg.location(1336,5);
-			match(input,SASS_ERROR,FOLLOW_SASS_ERROR_in_sass_error9256); if (state.failed) return;dbg.location(1336,16);
-			pushFollow(FOLLOW_ws_in_sass_error9258);
+			match(input,SASS_ERROR,FOLLOW_SASS_ERROR_in_sass_error9263); if (state.failed) return;dbg.location(1336,16);
+			pushFollow(FOLLOW_ws_in_sass_error9265);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1336,19);
-			match(input,STRING,FOLLOW_STRING_in_sass_error9260); if (state.failed) return;
+			match(input,STRING,FOLLOW_STRING_in_sass_error9267); if (state.failed) return;
 			}
 
 		}
@@ -29695,7 +29745,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1341:5: sass_if
 					{
 					dbg.location(1341,5);
-					pushFollow(FOLLOW_sass_if_in_sass_control9281);
+					pushFollow(FOLLOW_sass_if_in_sass_control9288);
 					sass_if();
 					state._fsp--;
 					if (state.failed) return;
@@ -29707,7 +29757,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1341:15: sass_for
 					{
 					dbg.location(1341,15);
-					pushFollow(FOLLOW_sass_for_in_sass_control9285);
+					pushFollow(FOLLOW_sass_for_in_sass_control9292);
 					sass_for();
 					state._fsp--;
 					if (state.failed) return;
@@ -29719,7 +29769,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1341:26: sass_each
 					{
 					dbg.location(1341,26);
-					pushFollow(FOLLOW_sass_each_in_sass_control9289);
+					pushFollow(FOLLOW_sass_each_in_sass_control9296);
 					sass_each();
 					state._fsp--;
 					if (state.failed) return;
@@ -29731,7 +29781,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1341:38: sass_while
 					{
 					dbg.location(1341,38);
-					pushFollow(FOLLOW_sass_while_in_sass_control9293);
+					pushFollow(FOLLOW_sass_while_in_sass_control9300);
 					sass_while();
 					state._fsp--;
 					if (state.failed) return;
@@ -29776,7 +29826,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1346:5: SASS_IF ( ws )? sass_control_expression ( ws )? sass_control_block ( ( ws )? sass_else )?
 			{
 			dbg.location(1346,5);
-			match(input,SASS_IF,FOLLOW_SASS_IF_in_sass_if9314); if (state.failed) return;dbg.location(1346,13);
+			match(input,SASS_IF,FOLLOW_SASS_IF_in_sass_if9321); if (state.failed) return;dbg.location(1346,13);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1346:13: ( ws )?
 			int alt446=2;
 			try { dbg.enterSubRule(446);
@@ -29795,7 +29845,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1346:13: ws
 					{
 					dbg.location(1346,13);
-					pushFollow(FOLLOW_ws_in_sass_if9316);
+					pushFollow(FOLLOW_ws_in_sass_if9323);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -29805,7 +29855,7 @@
 			}
 			} finally {dbg.exitSubRule(446);}
 			dbg.location(1346,17);
-			pushFollow(FOLLOW_sass_control_expression_in_sass_if9319);
+			pushFollow(FOLLOW_sass_control_expression_in_sass_if9326);
 			sass_control_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1346,41);
@@ -29827,7 +29877,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1346:41: ws
 					{
 					dbg.location(1346,41);
-					pushFollow(FOLLOW_ws_in_sass_if9321);
+					pushFollow(FOLLOW_ws_in_sass_if9328);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -29837,7 +29887,7 @@
 			}
 			} finally {dbg.exitSubRule(447);}
 			dbg.location(1346,45);
-			pushFollow(FOLLOW_sass_control_block_in_sass_if9324);
+			pushFollow(FOLLOW_sass_control_block_in_sass_if9331);
 			sass_control_block();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1346,64);
@@ -29881,7 +29931,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1346:65: ws
 							{
 							dbg.location(1346,65);
-							pushFollow(FOLLOW_ws_in_sass_if9327);
+							pushFollow(FOLLOW_ws_in_sass_if9334);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -29891,7 +29941,7 @@
 					}
 					} finally {dbg.exitSubRule(448);}
 					dbg.location(1346,69);
-					pushFollow(FOLLOW_sass_else_in_sass_if9330);
+					pushFollow(FOLLOW_sass_else_in_sass_if9337);
 					sass_else();
 					state._fsp--;
 					if (state.failed) return;
@@ -29955,7 +30005,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1351:5: SASS_ELSE ( ws )? sass_control_block
 					{
 					dbg.location(1351,5);
-					match(input,SASS_ELSE,FOLLOW_SASS_ELSE_in_sass_else9353); if (state.failed) return;dbg.location(1351,15);
+					match(input,SASS_ELSE,FOLLOW_SASS_ELSE_in_sass_else9360); if (state.failed) return;dbg.location(1351,15);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1351:15: ( ws )?
 					int alt450=2;
 					try { dbg.enterSubRule(450);
@@ -29974,7 +30024,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1351:15: ws
 							{
 							dbg.location(1351,15);
-							pushFollow(FOLLOW_ws_in_sass_else9355);
+							pushFollow(FOLLOW_ws_in_sass_else9362);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -29984,7 +30034,7 @@
 					}
 					} finally {dbg.exitSubRule(450);}
 					dbg.location(1351,19);
-					pushFollow(FOLLOW_sass_control_block_in_sass_else9358);
+					pushFollow(FOLLOW_sass_control_block_in_sass_else9365);
 					sass_control_block();
 					state._fsp--;
 					if (state.failed) return;
@@ -30032,7 +30082,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:7: SASS_ELSE ( ws )? {...}? IDENT
 							{
 							dbg.location(1353,7);
-							match(input,SASS_ELSE,FOLLOW_SASS_ELSE_in_sass_else9372); if (state.failed) return;dbg.location(1353,17);
+							match(input,SASS_ELSE,FOLLOW_SASS_ELSE_in_sass_else9379); if (state.failed) return;dbg.location(1353,17);
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:17: ( ws )?
 							int alt451=2;
 							try { dbg.enterSubRule(451);
@@ -30051,7 +30101,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:17: ws
 									{
 									dbg.location(1353,17);
-									pushFollow(FOLLOW_ws_in_sass_else9374);
+									pushFollow(FOLLOW_ws_in_sass_else9381);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -30065,7 +30115,7 @@
 								if (state.backtracking>0) {state.failed=true; return;}
 								throw new FailedPredicateException(input, "sass_else", "tokenNameEquals(\"if\")");
 							}dbg.location(1353,46);
-							match(input,IDENT,FOLLOW_IDENT_in_sass_else9379); if (state.failed) return;
+							match(input,IDENT,FOLLOW_IDENT_in_sass_else9386); if (state.failed) return;
 							}
 
 							}
@@ -30076,7 +30126,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:64: SASS_ELSEIF
 							{
 							dbg.location(1353,64);
-							match(input,SASS_ELSEIF,FOLLOW_SASS_ELSEIF_in_sass_else9386); if (state.failed) return;
+							match(input,SASS_ELSEIF,FOLLOW_SASS_ELSEIF_in_sass_else9393); if (state.failed) return;
 							}
 							break;
 
@@ -30101,7 +30151,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:77: ws
 							{
 							dbg.location(1353,77);
-							pushFollow(FOLLOW_ws_in_sass_else9389);
+							pushFollow(FOLLOW_ws_in_sass_else9396);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -30111,7 +30161,7 @@
 					}
 					} finally {dbg.exitSubRule(453);}
 					dbg.location(1353,81);
-					pushFollow(FOLLOW_sass_control_expression_in_sass_else9392);
+					pushFollow(FOLLOW_sass_control_expression_in_sass_else9399);
 					sass_control_expression();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1353,105);
@@ -30133,7 +30183,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:105: ws
 							{
 							dbg.location(1353,105);
-							pushFollow(FOLLOW_ws_in_sass_else9394);
+							pushFollow(FOLLOW_ws_in_sass_else9401);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -30143,7 +30193,7 @@
 					}
 					} finally {dbg.exitSubRule(454);}
 					dbg.location(1353,109);
-					pushFollow(FOLLOW_sass_control_block_in_sass_else9397);
+					pushFollow(FOLLOW_sass_control_block_in_sass_else9404);
 					sass_control_block();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1353,128);
@@ -30187,7 +30237,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1353:129: ws
 									{
 									dbg.location(1353,129);
-									pushFollow(FOLLOW_ws_in_sass_else9400);
+									pushFollow(FOLLOW_ws_in_sass_else9407);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -30197,7 +30247,7 @@
 							}
 							} finally {dbg.exitSubRule(455);}
 							dbg.location(1353,133);
-							pushFollow(FOLLOW_sass_else_in_sass_else9403);
+							pushFollow(FOLLOW_sass_else_in_sass_else9410);
 							sass_else();
 							state._fsp--;
 							if (state.failed) return;
@@ -30248,7 +30298,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1358:5: cp_expression
 			{
 			dbg.location(1358,5);
-			pushFollow(FOLLOW_cp_expression_in_sass_control_expression9426);
+			pushFollow(FOLLOW_cp_expression_in_sass_control_expression9433);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;
@@ -30291,16 +30341,16 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1363:5: SASS_FOR ws cp_variable ws {...}? IDENT ws cp_math_expression ws {...}? IDENT ws cp_math_expression ( ws )? sass_control_block
 			{
 			dbg.location(1363,5);
-			match(input,SASS_FOR,FOLLOW_SASS_FOR_in_sass_for9447); if (state.failed) return;dbg.location(1363,14);
-			pushFollow(FOLLOW_ws_in_sass_for9449);
+			match(input,SASS_FOR,FOLLOW_SASS_FOR_in_sass_for9454); if (state.failed) return;dbg.location(1363,14);
+			pushFollow(FOLLOW_ws_in_sass_for9456);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,17);
-			pushFollow(FOLLOW_cp_variable_in_sass_for9451);
+			pushFollow(FOLLOW_cp_variable_in_sass_for9458);
 			cp_variable();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,29);
-			pushFollow(FOLLOW_ws_in_sass_for9453);
+			pushFollow(FOLLOW_ws_in_sass_for9460);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,32);
@@ -30308,16 +30358,16 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "sass_for", "tokenNameEquals(\"from\")");
 			}dbg.location(1363,59);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_for9457); if (state.failed) return;dbg.location(1363,74);
-			pushFollow(FOLLOW_ws_in_sass_for9461);
+			match(input,IDENT,FOLLOW_IDENT_in_sass_for9464); if (state.failed) return;dbg.location(1363,74);
+			pushFollow(FOLLOW_ws_in_sass_for9468);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,77);
-			pushFollow(FOLLOW_cp_math_expression_in_sass_for9463);
+			pushFollow(FOLLOW_cp_math_expression_in_sass_for9470);
 			cp_math_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,96);
-			pushFollow(FOLLOW_ws_in_sass_for9465);
+			pushFollow(FOLLOW_ws_in_sass_for9472);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,99);
@@ -30325,12 +30375,12 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "sass_for", "tokenNameEquals(\"to\")|tokenNameEquals(\"through\")");
 			}dbg.location(1363,151);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_for9469); if (state.failed) return;dbg.location(1363,173);
-			pushFollow(FOLLOW_ws_in_sass_for9473);
+			match(input,IDENT,FOLLOW_IDENT_in_sass_for9476); if (state.failed) return;dbg.location(1363,173);
+			pushFollow(FOLLOW_ws_in_sass_for9480);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,176);
-			pushFollow(FOLLOW_cp_math_expression_in_sass_for9475);
+			pushFollow(FOLLOW_cp_math_expression_in_sass_for9482);
 			cp_math_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1363,195);
@@ -30352,7 +30402,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1363:195: ws
 					{
 					dbg.location(1363,195);
-					pushFollow(FOLLOW_ws_in_sass_for9477);
+					pushFollow(FOLLOW_ws_in_sass_for9484);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -30362,7 +30412,7 @@
 			}
 			} finally {dbg.exitSubRule(458);}
 			dbg.location(1363,199);
-			pushFollow(FOLLOW_sass_control_block_in_sass_for9480);
+			pushFollow(FOLLOW_sass_control_block_in_sass_for9487);
 			sass_control_block();
 			state._fsp--;
 			if (state.failed) return;
@@ -30405,16 +30455,16 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1368:5: SASS_EACH ws sass_each_variables ws {...}? IDENT ws ( cp_expression_list ( ( ws )? COMMA )? ( ws )? )+ sass_control_block
 			{
 			dbg.location(1368,5);
-			match(input,SASS_EACH,FOLLOW_SASS_EACH_in_sass_each9501); if (state.failed) return;dbg.location(1368,15);
-			pushFollow(FOLLOW_ws_in_sass_each9503);
+			match(input,SASS_EACH,FOLLOW_SASS_EACH_in_sass_each9508); if (state.failed) return;dbg.location(1368,15);
+			pushFollow(FOLLOW_ws_in_sass_each9510);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1368,18);
-			pushFollow(FOLLOW_sass_each_variables_in_sass_each9505);
+			pushFollow(FOLLOW_sass_each_variables_in_sass_each9512);
 			sass_each_variables();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1368,38);
-			pushFollow(FOLLOW_ws_in_sass_each9507);
+			pushFollow(FOLLOW_ws_in_sass_each9514);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1368,41);
@@ -30422,8 +30472,8 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "sass_each", "tokenNameEquals(\"in\")");
 			}dbg.location(1368,66);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_each9511); if (state.failed) return;dbg.location(1368,79);
-			pushFollow(FOLLOW_ws_in_sass_each9515);
+			match(input,IDENT,FOLLOW_IDENT_in_sass_each9518); if (state.failed) return;dbg.location(1368,79);
+			pushFollow(FOLLOW_ws_in_sass_each9522);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1368,82);
@@ -30444,7 +30494,7 @@
 					}
 
 				}
-				else if ( ((LA462_0 >= ANGLE && LA462_0 <= AT_SIGN)||(LA462_0 >= BOTTOMCENTER_SYM && LA462_0 <= BOTTOMRIGHT_SYM)||LA462_0==CHARSET_SYM||LA462_0==COUNTER_STYLE_SYM||LA462_0==DIMENSION||LA462_0==EMS||LA462_0==EXS||(LA462_0 >= FONT_FACE_SYM && LA462_0 <= FREQ)||LA462_0==GEN||(LA462_0 >= HASH && LA462_0 <= HASH_SYMBOL)||(LA462_0 >= IDENT && LA462_0 <= IMPORT_SYM)||(LA462_0 >= LBRACKET && LA462_0 <= LENGTH)||(LA462_0 >= LESS_AND && LA462_0 <= LESS_JS_STRING)||LA462_0==LPAREN||(LA462_0 >= MEDIA_SYM && LA462_0 <= MOZ_DOCUMENT_SYM)||LA462_0==NAMESPACE_SYM||(LA462_0 >= NOT && LA462_0 <= NUMBER)||(LA462_0 >= PAGE_SYM && LA462_0 <= PERCENTAGE_SYMBOL)||LA462_0==PLUS||(LA462_0 >= REM && LA462_0 <= RIGHTTOP_SYM)||(LA462_0 >= SASS_AT_ROOT && LA462_0 <= SASS_DEBUG)||(LA462_0 >= SASS_EACH && LA462_0 <= SASS_ELSE)||LA462_0==SASS_EXTEND||LA462_0==SASS_FOR||LA462_0==SASS_FUNCTION||(LA462_0 >= SASS_IF && LA462_0 <= SASS_MIXIN)||LA462_0==SASS_RETURN||(LA462_0 >= SASS_VAR && LA462_0 <= SASS_WHILE)||LA462_0==STRING||(LA462_0 >= TILDE && LA462_0 <= TOPRIGHT_SYM)||(LA462_0 >= URANGE && LA462_0 <= URI)||LA462_0==VARIABLE||LA462_0==WEBKIT_KEYFRAMES_SYM) ) {
+				else if ( ((LA462_0 >= ANGLE && LA462_0 <= AT_SIGN)||(LA462_0 >= BOTTOMCENTER_SYM && LA462_0 <= BOTTOMRIGHT_SYM)||LA462_0==CHARSET_SYM||LA462_0==COUNTER_STYLE_SYM||LA462_0==DIMENSION||LA462_0==EMS||LA462_0==EXS||(LA462_0 >= FONT_FACE_SYM && LA462_0 <= FREQ)||LA462_0==GEN||(LA462_0 >= HASH && LA462_0 <= HASH_SYMBOL)||(LA462_0 >= IDENT && LA462_0 <= IMPORT_SYM)||(LA462_0 >= LBRACKET && LA462_0 <= LENGTH)||(LA462_0 >= LESS_AND && LA462_0 <= LESS_JS_STRING)||LA462_0==LPAREN||(LA462_0 >= MEDIA_SYM && LA462_0 <= MOZ_DOCUMENT_SYM)||LA462_0==NAMESPACE_SYM||(LA462_0 >= NOT && LA462_0 <= NUMBER)||(LA462_0 >= PAGE_SYM && LA462_0 <= PERCENTAGE_SYMBOL)||LA462_0==PLUS||(LA462_0 >= REM && LA462_0 <= RIGHTTOP_SYM)||(LA462_0 >= SASS_AT_ROOT && LA462_0 <= SASS_DEBUG)||(LA462_0 >= SASS_EACH && LA462_0 <= SASS_ELSE)||LA462_0==SASS_EXTEND||(LA462_0 >= SASS_FOR && LA462_0 <= SASS_FUNCTION)||(LA462_0 >= SASS_IF && LA462_0 <= SASS_MIXIN)||(LA462_0 >= SASS_RETURN && LA462_0 <= SASS_WHILE)||LA462_0==STRING||(LA462_0 >= TILDE && LA462_0 <= TOPRIGHT_SYM)||(LA462_0 >= URANGE && LA462_0 <= URI)||LA462_0==VARIABLE||LA462_0==WEBKIT_KEYFRAMES_SYM) ) {
 					alt462=1;
 				}
 
@@ -30457,7 +30507,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1368:83: cp_expression_list ( ( ws )? COMMA )? ( ws )?
 					{
 					dbg.location(1368,83);
-					pushFollow(FOLLOW_cp_expression_list_in_sass_each9518);
+					pushFollow(FOLLOW_cp_expression_list_in_sass_each9525);
 					cp_expression_list();
 					state._fsp--;
 					if (state.failed) return;dbg.location(1368,102);
@@ -30501,7 +30551,7 @@
 									// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1368:103: ws
 									{
 									dbg.location(1368,103);
-									pushFollow(FOLLOW_ws_in_sass_each9521);
+									pushFollow(FOLLOW_ws_in_sass_each9528);
 									ws();
 									state._fsp--;
 									if (state.failed) return;
@@ -30511,7 +30561,7 @@
 							}
 							} finally {dbg.exitSubRule(459);}
 							dbg.location(1368,107);
-							match(input,COMMA,FOLLOW_COMMA_in_sass_each9524); if (state.failed) return;
+							match(input,COMMA,FOLLOW_COMMA_in_sass_each9531); if (state.failed) return;
 							}
 							break;
 
@@ -30536,7 +30586,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1368:115: ws
 							{
 							dbg.location(1368,115);
-							pushFollow(FOLLOW_ws_in_sass_each9528);
+							pushFollow(FOLLOW_ws_in_sass_each9535);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -30561,7 +30611,7 @@
 			}
 			} finally {dbg.exitSubRule(462);}
 			dbg.location(1368,122);
-			pushFollow(FOLLOW_sass_control_block_in_sass_each9534);
+			pushFollow(FOLLOW_sass_control_block_in_sass_each9541);
 			sass_control_block();
 			state._fsp--;
 			if (state.failed) return;
@@ -30604,7 +30654,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1373:5: cp_variable ( ( ( ws )? COMMA )=> ( ws )? COMMA ( ws )? cp_variable )*
 			{
 			dbg.location(1373,5);
-			pushFollow(FOLLOW_cp_variable_in_sass_each_variables9555);
+			pushFollow(FOLLOW_cp_variable_in_sass_each_variables9562);
 			cp_variable();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1373,17);
@@ -30651,7 +30701,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1373:33: ws
 							{
 							dbg.location(1373,33);
-							pushFollow(FOLLOW_ws_in_sass_each_variables9567);
+							pushFollow(FOLLOW_ws_in_sass_each_variables9574);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -30661,7 +30711,7 @@
 					}
 					} finally {dbg.exitSubRule(463);}
 					dbg.location(1373,37);
-					match(input,COMMA,FOLLOW_COMMA_in_sass_each_variables9570); if (state.failed) return;dbg.location(1373,43);
+					match(input,COMMA,FOLLOW_COMMA_in_sass_each_variables9577); if (state.failed) return;dbg.location(1373,43);
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1373:43: ( ws )?
 					int alt464=2;
 					try { dbg.enterSubRule(464);
@@ -30680,7 +30730,7 @@
 							// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1373:43: ws
 							{
 							dbg.location(1373,43);
-							pushFollow(FOLLOW_ws_in_sass_each_variables9572);
+							pushFollow(FOLLOW_ws_in_sass_each_variables9579);
 							ws();
 							state._fsp--;
 							if (state.failed) return;
@@ -30690,7 +30740,7 @@
 					}
 					} finally {dbg.exitSubRule(464);}
 					dbg.location(1373,47);
-					pushFollow(FOLLOW_cp_variable_in_sass_each_variables9575);
+					pushFollow(FOLLOW_cp_variable_in_sass_each_variables9582);
 					cp_variable();
 					state._fsp--;
 					if (state.failed) return;
@@ -30742,12 +30792,12 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1378:5: SASS_WHILE ws sass_control_expression ( ws )? sass_control_block
 			{
 			dbg.location(1378,5);
-			match(input,SASS_WHILE,FOLLOW_SASS_WHILE_in_sass_while9600); if (state.failed) return;dbg.location(1378,16);
-			pushFollow(FOLLOW_ws_in_sass_while9602);
+			match(input,SASS_WHILE,FOLLOW_SASS_WHILE_in_sass_while9607); if (state.failed) return;dbg.location(1378,16);
+			pushFollow(FOLLOW_ws_in_sass_while9609);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1378,19);
-			pushFollow(FOLLOW_sass_control_expression_in_sass_while9604);
+			pushFollow(FOLLOW_sass_control_expression_in_sass_while9611);
 			sass_control_expression();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1378,43);
@@ -30769,7 +30819,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1378:43: ws
 					{
 					dbg.location(1378,43);
-					pushFollow(FOLLOW_ws_in_sass_while9606);
+					pushFollow(FOLLOW_ws_in_sass_while9613);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -30779,7 +30829,7 @@
 			}
 			} finally {dbg.exitSubRule(466);}
 			dbg.location(1378,47);
-			pushFollow(FOLLOW_sass_control_block_in_sass_while9609);
+			pushFollow(FOLLOW_sass_control_block_in_sass_while9616);
 			sass_control_block();
 			state._fsp--;
 			if (state.failed) return;
@@ -30822,7 +30872,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1383:5: LBRACE ( ws )? ( declarations )? RBRACE
 			{
 			dbg.location(1383,5);
-			match(input,LBRACE,FOLLOW_LBRACE_in_sass_control_block9630); if (state.failed) return;dbg.location(1383,12);
+			match(input,LBRACE,FOLLOW_LBRACE_in_sass_control_block9637); if (state.failed) return;dbg.location(1383,12);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1383:12: ( ws )?
 			int alt467=2;
 			try { dbg.enterSubRule(467);
@@ -30841,7 +30891,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1383:12: ws
 					{
 					dbg.location(1383,12);
-					pushFollow(FOLLOW_ws_in_sass_control_block9632);
+					pushFollow(FOLLOW_ws_in_sass_control_block9639);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -30857,7 +30907,7 @@
 			try { dbg.enterDecision(468, decisionCanBacktrack[468]);
 
 			int LA468_0 = input.LA(1);
-			if ( ((LA468_0 >= AT_IDENT && LA468_0 <= AT_SIGN)||(LA468_0 >= BOTTOMCENTER_SYM && LA468_0 <= BOTTOMRIGHT_SYM)||(LA468_0 >= CHARSET_SYM && LA468_0 <= COLON)||LA468_0==COUNTER_STYLE_SYM||(LA468_0 >= DCOLON && LA468_0 <= DOT)||LA468_0==FONT_FACE_SYM||(LA468_0 >= GEN && LA468_0 <= GREATER)||(LA468_0 >= HASH && LA468_0 <= HASH_SYMBOL)||LA468_0==IDENT||LA468_0==IMPORT_SYM||(LA468_0 >= LBRACKET && LA468_0 <= LEFTTOP_SYM)||LA468_0==LESS_AND||(LA468_0 >= MEDIA_SYM && LA468_0 <= MOZ_DOCUMENT_SYM)||LA468_0==NAMESPACE_SYM||LA468_0==PAGE_SYM||(LA468_0 >= PIPE && LA468_0 <= PLUS)||(LA468_0 >= RIGHTBOTTOM_SYM && LA468_0 <= RIGHTTOP_SYM)||(LA468_0 >= SASS_AT_ROOT && LA468_0 <= SASS_DEBUG)||(LA468_0 >= SASS_EACH && LA468_0 <= SASS_ELSE)||(LA468_0 >= SASS_ERROR && LA468_0 <= SASS_FOR)||LA468_0==SASS_FUNCTION||(LA468_0 >= SASS_IF && LA468_0 <= SASS_MIXIN)||LA468_0==SASS_RETURN||(LA468_0 >= SASS_VAR && LA468_0 <= SEMI)||LA468_0==STAR||LA468_0==SUPPORTS_SYM||LA468_0==TILDE||(LA468_0 >= TOPCENTER_SYM && LA468_0 <= TOPRIGHT_SYM)||LA468_0==VARIABLE||LA468_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA468_0 >= AT_IDENT && LA468_0 <= AT_SIGN)||(LA468_0 >= BOTTOMCENTER_SYM && LA468_0 <= BOTTOMRIGHT_SYM)||(LA468_0 >= CHARSET_SYM && LA468_0 <= COLON)||LA468_0==COUNTER_STYLE_SYM||(LA468_0 >= DCOLON && LA468_0 <= DOT)||LA468_0==FONT_FACE_SYM||(LA468_0 >= GEN && LA468_0 <= GREATER)||(LA468_0 >= HASH && LA468_0 <= HASH_SYMBOL)||LA468_0==IDENT||LA468_0==IMPORT_SYM||(LA468_0 >= LBRACKET && LA468_0 <= LEFTTOP_SYM)||LA468_0==LESS_AND||(LA468_0 >= MEDIA_SYM && LA468_0 <= MOZ_DOCUMENT_SYM)||LA468_0==NAMESPACE_SYM||LA468_0==PAGE_SYM||(LA468_0 >= PIPE && LA468_0 <= PLUS)||(LA468_0 >= RIGHTBOTTOM_SYM && LA468_0 <= RIGHTTOP_SYM)||(LA468_0 >= SASS_AT_ROOT && LA468_0 <= SASS_DEBUG)||(LA468_0 >= SASS_EACH && LA468_0 <= SASS_ELSE)||(LA468_0 >= SASS_ERROR && LA468_0 <= SASS_FUNCTION)||(LA468_0 >= SASS_IF && LA468_0 <= SASS_MIXIN)||(LA468_0 >= SASS_RETURN && LA468_0 <= SEMI)||LA468_0==STAR||LA468_0==SUPPORTS_SYM||LA468_0==TILDE||(LA468_0 >= TOPCENTER_SYM && LA468_0 <= TOPRIGHT_SYM)||LA468_0==VARIABLE||LA468_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt468=1;
 			}
 			} finally {dbg.exitDecision(468);}
@@ -30869,7 +30919,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1383:16: declarations
 					{
 					dbg.location(1383,16);
-					pushFollow(FOLLOW_declarations_in_sass_control_block9635);
+					pushFollow(FOLLOW_declarations_in_sass_control_block9642);
 					declarations();
 					state._fsp--;
 					if (state.failed) return;
@@ -30879,7 +30929,7 @@
 			}
 			} finally {dbg.exitSubRule(468);}
 			dbg.location(1383,30);
-			match(input,RBRACE,FOLLOW_RBRACE_in_sass_control_block9638); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_sass_control_block9645); if (state.failed) return;
 			}
 
 		}
@@ -30919,12 +30969,12 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:5: SASS_FUNCTION ws sass_function_name ( ws )? LPAREN ( ws )? ( cp_args_list )? RPAREN ( ws )? LBRACE ( ws )? ( declarations )? RBRACE
 			{
 			dbg.location(1392,5);
-			match(input,SASS_FUNCTION,FOLLOW_SASS_FUNCTION_in_sass_function_declaration9680); if (state.failed) return;dbg.location(1392,19);
-			pushFollow(FOLLOW_ws_in_sass_function_declaration9682);
+			match(input,SASS_FUNCTION,FOLLOW_SASS_FUNCTION_in_sass_function_declaration9687); if (state.failed) return;dbg.location(1392,19);
+			pushFollow(FOLLOW_ws_in_sass_function_declaration9689);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1392,22);
-			pushFollow(FOLLOW_sass_function_name_in_sass_function_declaration9684);
+			pushFollow(FOLLOW_sass_function_name_in_sass_function_declaration9691);
 			sass_function_name();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1392,41);
@@ -30946,7 +30996,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:41: ws
 					{
 					dbg.location(1392,41);
-					pushFollow(FOLLOW_ws_in_sass_function_declaration9686);
+					pushFollow(FOLLOW_ws_in_sass_function_declaration9693);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -30956,7 +31006,7 @@
 			}
 			} finally {dbg.exitSubRule(469);}
 			dbg.location(1392,45);
-			match(input,LPAREN,FOLLOW_LPAREN_in_sass_function_declaration9689); if (state.failed) return;dbg.location(1392,52);
+			match(input,LPAREN,FOLLOW_LPAREN_in_sass_function_declaration9696); if (state.failed) return;dbg.location(1392,52);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:52: ( ws )?
 			int alt470=2;
 			try { dbg.enterSubRule(470);
@@ -30975,7 +31025,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:52: ws
 					{
 					dbg.location(1392,52);
-					pushFollow(FOLLOW_ws_in_sass_function_declaration9691);
+					pushFollow(FOLLOW_ws_in_sass_function_declaration9698);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -30991,7 +31041,7 @@
 			try { dbg.enterDecision(471, decisionCanBacktrack[471]);
 
 			int LA471_0 = input.LA(1);
-			if ( (LA471_0==AT_IDENT||(LA471_0 >= BOTTOMCENTER_SYM && LA471_0 <= BOTTOMRIGHT_SYM)||LA471_0==CHARSET_SYM||(LA471_0 >= COUNTER_STYLE_SYM && LA471_0 <= CP_DOTS)||LA471_0==FONT_FACE_SYM||LA471_0==IDENT||LA471_0==IMPORT_SYM||(LA471_0 >= LEFTBOTTOM_SYM && LA471_0 <= LEFTTOP_SYM)||LA471_0==LESS_REST||LA471_0==MEDIA_SYM||LA471_0==MOZ_DOCUMENT_SYM||LA471_0==NAMESPACE_SYM||LA471_0==PAGE_SYM||(LA471_0 >= RIGHTBOTTOM_SYM && LA471_0 <= RIGHTTOP_SYM)||(LA471_0 >= SASS_AT_ROOT && LA471_0 <= SASS_DEBUG)||(LA471_0 >= SASS_EACH && LA471_0 <= SASS_ELSE)||LA471_0==SASS_EXTEND||LA471_0==SASS_FOR||LA471_0==SASS_FUNCTION||(LA471_0 >= SASS_IF && LA471_0 <= SASS_MIXIN)||LA471_0==SASS_RETURN||(LA471_0 >= SASS_VAR && LA471_0 <= SASS_WHILE)||(LA471_0 >= TOPCENTER_SYM && LA471_0 <= TOPRIGHT_SYM)||LA471_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( (LA471_0==AT_IDENT||(LA471_0 >= BOTTOMCENTER_SYM && LA471_0 <= BOTTOMRIGHT_SYM)||LA471_0==CHARSET_SYM||(LA471_0 >= COUNTER_STYLE_SYM && LA471_0 <= CP_DOTS)||LA471_0==FONT_FACE_SYM||LA471_0==IDENT||LA471_0==IMPORT_SYM||(LA471_0 >= LEFTBOTTOM_SYM && LA471_0 <= LEFTTOP_SYM)||LA471_0==LESS_REST||LA471_0==MEDIA_SYM||LA471_0==MOZ_DOCUMENT_SYM||LA471_0==NAMESPACE_SYM||LA471_0==PAGE_SYM||(LA471_0 >= RIGHTBOTTOM_SYM && LA471_0 <= RIGHTTOP_SYM)||(LA471_0 >= SASS_AT_ROOT && LA471_0 <= SASS_DEBUG)||(LA471_0 >= SASS_EACH && LA471_0 <= SASS_ELSE)||LA471_0==SASS_EXTEND||(LA471_0 >= SASS_FOR && LA471_0 <= SASS_FUNCTION)||(LA471_0 >= SASS_IF && LA471_0 <= SASS_MIXIN)||(LA471_0 >= SASS_RETURN && LA471_0 <= SASS_WHILE)||(LA471_0 >= TOPCENTER_SYM && LA471_0 <= TOPRIGHT_SYM)||LA471_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt471=1;
 			}
 			} finally {dbg.exitDecision(471);}
@@ -31003,7 +31053,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:56: cp_args_list
 					{
 					dbg.location(1392,56);
-					pushFollow(FOLLOW_cp_args_list_in_sass_function_declaration9694);
+					pushFollow(FOLLOW_cp_args_list_in_sass_function_declaration9701);
 					cp_args_list();
 					state._fsp--;
 					if (state.failed) return;
@@ -31013,7 +31063,7 @@
 			}
 			} finally {dbg.exitSubRule(471);}
 			dbg.location(1392,70);
-			match(input,RPAREN,FOLLOW_RPAREN_in_sass_function_declaration9697); if (state.failed) return;dbg.location(1392,77);
+			match(input,RPAREN,FOLLOW_RPAREN_in_sass_function_declaration9704); if (state.failed) return;dbg.location(1392,77);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:77: ( ws )?
 			int alt472=2;
 			try { dbg.enterSubRule(472);
@@ -31032,7 +31082,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:77: ws
 					{
 					dbg.location(1392,77);
-					pushFollow(FOLLOW_ws_in_sass_function_declaration9699);
+					pushFollow(FOLLOW_ws_in_sass_function_declaration9706);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -31042,7 +31092,7 @@
 			}
 			} finally {dbg.exitSubRule(472);}
 			dbg.location(1392,81);
-			match(input,LBRACE,FOLLOW_LBRACE_in_sass_function_declaration9702); if (state.failed) return;dbg.location(1392,88);
+			match(input,LBRACE,FOLLOW_LBRACE_in_sass_function_declaration9709); if (state.failed) return;dbg.location(1392,88);
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:88: ( ws )?
 			int alt473=2;
 			try { dbg.enterSubRule(473);
@@ -31061,7 +31111,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:88: ws
 					{
 					dbg.location(1392,88);
-					pushFollow(FOLLOW_ws_in_sass_function_declaration9704);
+					pushFollow(FOLLOW_ws_in_sass_function_declaration9711);
 					ws();
 					state._fsp--;
 					if (state.failed) return;
@@ -31077,7 +31127,7 @@
 			try { dbg.enterDecision(474, decisionCanBacktrack[474]);
 
 			int LA474_0 = input.LA(1);
-			if ( ((LA474_0 >= AT_IDENT && LA474_0 <= AT_SIGN)||(LA474_0 >= BOTTOMCENTER_SYM && LA474_0 <= BOTTOMRIGHT_SYM)||(LA474_0 >= CHARSET_SYM && LA474_0 <= COLON)||LA474_0==COUNTER_STYLE_SYM||(LA474_0 >= DCOLON && LA474_0 <= DOT)||LA474_0==FONT_FACE_SYM||(LA474_0 >= GEN && LA474_0 <= GREATER)||(LA474_0 >= HASH && LA474_0 <= HASH_SYMBOL)||LA474_0==IDENT||LA474_0==IMPORT_SYM||(LA474_0 >= LBRACKET && LA474_0 <= LEFTTOP_SYM)||LA474_0==LESS_AND||(LA474_0 >= MEDIA_SYM && LA474_0 <= MOZ_DOCUMENT_SYM)||LA474_0==NAMESPACE_SYM||LA474_0==PAGE_SYM||(LA474_0 >= PIPE && LA474_0 <= PLUS)||(LA474_0 >= RIGHTBOTTOM_SYM && LA474_0 <= RIGHTTOP_SYM)||(LA474_0 >= SASS_AT_ROOT && LA474_0 <= SASS_DEBUG)||(LA474_0 >= SASS_EACH && LA474_0 <= SASS_ELSE)||(LA474_0 >= SASS_ERROR && LA474_0 <= SASS_FOR)||LA474_0==SASS_FUNCTION||(LA474_0 >= SASS_IF && LA474_0 <= SASS_MIXIN)||LA474_0==SASS_RETURN||(LA474_0 >= SASS_VAR && LA474_0 <= SEMI)||LA474_0==STAR||LA474_0==SUPPORTS_SYM||LA474_0==TILDE||(LA474_0 >= TOPCENTER_SYM && LA474_0 <= TOPRIGHT_SYM)||LA474_0==VARIABLE||LA474_0==WEBKIT_KEYFRAMES_SYM) ) {
+			if ( ((LA474_0 >= AT_IDENT && LA474_0 <= AT_SIGN)||(LA474_0 >= BOTTOMCENTER_SYM && LA474_0 <= BOTTOMRIGHT_SYM)||(LA474_0 >= CHARSET_SYM && LA474_0 <= COLON)||LA474_0==COUNTER_STYLE_SYM||(LA474_0 >= DCOLON && LA474_0 <= DOT)||LA474_0==FONT_FACE_SYM||(LA474_0 >= GEN && LA474_0 <= GREATER)||(LA474_0 >= HASH && LA474_0 <= HASH_SYMBOL)||LA474_0==IDENT||LA474_0==IMPORT_SYM||(LA474_0 >= LBRACKET && LA474_0 <= LEFTTOP_SYM)||LA474_0==LESS_AND||(LA474_0 >= MEDIA_SYM && LA474_0 <= MOZ_DOCUMENT_SYM)||LA474_0==NAMESPACE_SYM||LA474_0==PAGE_SYM||(LA474_0 >= PIPE && LA474_0 <= PLUS)||(LA474_0 >= RIGHTBOTTOM_SYM && LA474_0 <= RIGHTTOP_SYM)||(LA474_0 >= SASS_AT_ROOT && LA474_0 <= SASS_DEBUG)||(LA474_0 >= SASS_EACH && LA474_0 <= SASS_ELSE)||(LA474_0 >= SASS_ERROR && LA474_0 <= SASS_FUNCTION)||(LA474_0 >= SASS_IF && LA474_0 <= SASS_MIXIN)||(LA474_0 >= SASS_RETURN && LA474_0 <= SEMI)||LA474_0==STAR||LA474_0==SUPPORTS_SYM||LA474_0==TILDE||(LA474_0 >= TOPCENTER_SYM && LA474_0 <= TOPRIGHT_SYM)||LA474_0==VARIABLE||LA474_0==WEBKIT_KEYFRAMES_SYM) ) {
 				alt474=1;
 			}
 			} finally {dbg.exitDecision(474);}
@@ -31089,7 +31139,7 @@
 					// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1392:92: declarations
 					{
 					dbg.location(1392,92);
-					pushFollow(FOLLOW_declarations_in_sass_function_declaration9707);
+					pushFollow(FOLLOW_declarations_in_sass_function_declaration9714);
 					declarations();
 					state._fsp--;
 					if (state.failed) return;
@@ -31099,7 +31149,7 @@
 			}
 			} finally {dbg.exitSubRule(474);}
 			dbg.location(1392,106);
-			match(input,RBRACE,FOLLOW_RBRACE_in_sass_function_declaration9710); if (state.failed) return;
+			match(input,RBRACE,FOLLOW_RBRACE_in_sass_function_declaration9717); if (state.failed) return;
 			}
 
 		}
@@ -31139,7 +31189,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1397:5: IDENT
 			{
 			dbg.location(1397,5);
-			match(input,IDENT,FOLLOW_IDENT_in_sass_function_name9731); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_sass_function_name9738); if (state.failed) return;
 			}
 
 		}
@@ -31179,12 +31229,12 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1402:5: SASS_RETURN ws cp_expression
 			{
 			dbg.location(1402,5);
-			match(input,SASS_RETURN,FOLLOW_SASS_RETURN_in_sass_function_return9752); if (state.failed) return;dbg.location(1402,17);
-			pushFollow(FOLLOW_ws_in_sass_function_return9754);
+			match(input,SASS_RETURN,FOLLOW_SASS_RETURN_in_sass_function_return9759); if (state.failed) return;dbg.location(1402,17);
+			pushFollow(FOLLOW_ws_in_sass_function_return9761);
 			ws();
 			state._fsp--;
 			if (state.failed) return;dbg.location(1402,20);
-			pushFollow(FOLLOW_cp_expression_in_sass_function_return9756);
+			pushFollow(FOLLOW_cp_expression_in_sass_function_return9763);
 			cp_expression();
 			state._fsp--;
 			if (state.failed) return;
@@ -31227,7 +31277,7 @@
 			// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1407:5: SASS_CONTENT
 			{
 			dbg.location(1407,5);
-			match(input,SASS_CONTENT,FOLLOW_SASS_CONTENT_in_sass_content9777); if (state.failed) return;
+			match(input,SASS_CONTENT,FOLLOW_SASS_CONTENT_in_sass_content9784); if (state.failed) return;
 			}
 
 		}
@@ -31271,7 +31321,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "less_import_types", "tokenNameIs(new String[]{\"LESS\", \"CSS\", \"REFERENCE\", \"INLINE\", \"ONCE\", \"MULTIPLE\"})");
 			}dbg.location(1411,92);
-			match(input,IDENT,FOLLOW_IDENT_in_less_import_types9796); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_less_import_types9803); if (state.failed) return;
 			}
 
 		}
@@ -31318,7 +31368,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "less_when", "tokenNameEquals(\"when\")");
 			}dbg.location(1418,32);
-			match(input,IDENT,FOLLOW_IDENT_in_less_when9819); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_less_when9826); if (state.failed) return;
 			}
 
 		}
@@ -31362,7 +31412,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "key_and", "tokenNameEquals(\"and\")");
 			}dbg.location(1422,31);
-			match(input,IDENT,FOLLOW_IDENT_in_key_and9838); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_key_and9845); if (state.failed) return;
 			}
 
 		}
@@ -31406,7 +31456,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "key_or", "tokenNameEquals(\"or\")");
 			}dbg.location(1426,30);
-			match(input,IDENT,FOLLOW_IDENT_in_key_or9856); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_key_or9863); if (state.failed) return;
 			}
 
 		}
@@ -31450,7 +31500,7 @@
 				if (state.backtracking>0) {state.failed=true; return;}
 				throw new FailedPredicateException(input, "key_only", "tokenNameEquals(\"only\")");
 			}dbg.location(1430,32);
-			match(input,IDENT,FOLLOW_IDENT_in_key_only9874); if (state.failed) return;
+			match(input,IDENT,FOLLOW_IDENT_in_key_only9881); if (state.failed) return;
 			}
 
 		}
@@ -31499,7 +31549,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:329:45: ws
 				{
 				dbg.location(329,45);
-				pushFollow(FOLLOW_ws_in_synpred1_Css3439);
+				pushFollow(FOLLOW_ws_in_synpred1_Css3443);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -31509,7 +31559,7 @@
 		}
 		} finally {dbg.exitSubRule(475);}
 		dbg.location(329,49);
-		pushFollow(FOLLOW_mediaQueryList_in_synpred1_Css3442);
+		pushFollow(FOLLOW_mediaQueryList_in_synpred1_Css3446);
 		mediaQueryList();
 		state._fsp--;
 		if (state.failed) return;
@@ -31544,7 +31594,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:332:99: ws
 				{
 				dbg.location(332,99);
-				pushFollow(FOLLOW_ws_in_synpred2_Css3503);
+				pushFollow(FOLLOW_ws_in_synpred2_Css3507);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -31554,7 +31604,7 @@
 		}
 		} finally {dbg.exitSubRule(476);}
 		dbg.location(332,103);
-		pushFollow(FOLLOW_mediaQueryList_in_synpred2_Css3506);
+		pushFollow(FOLLOW_mediaQueryList_in_synpred2_Css3510);
 		mediaQueryList();
 		state._fsp--;
 		if (state.failed) return;
@@ -31589,7 +31639,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:334:102: ws
 				{
 				dbg.location(334,102);
-				pushFollow(FOLLOW_ws_in_synpred3_Css3557);
+				pushFollow(FOLLOW_ws_in_synpred3_Css3561);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -31599,7 +31649,7 @@
 		}
 		} finally {dbg.exitSubRule(477);}
 		dbg.location(334,106);
-		pushFollow(FOLLOW_mediaQueryList_in_synpred3_Css3560);
+		pushFollow(FOLLOW_mediaQueryList_in_synpred3_Css3564);
 		mediaQueryList();
 		state._fsp--;
 		if (state.failed) return;
@@ -33934,7 +33984,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:7: ws
 				{
 				dbg.location(1094,7);
-				pushFollow(FOLLOW_ws_in_synpred42_Css37452);
+				pushFollow(FOLLOW_ws_in_synpred42_Css37459);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -33944,7 +33994,7 @@
 		}
 		} finally {dbg.exitSubRule(526);}
 		dbg.location(1094,11);
-		match(input,COMMA,FOLLOW_COMMA_in_synpred42_Css37455); if (state.failed) return;dbg.location(1094,17);
+		match(input,COMMA,FOLLOW_COMMA_in_synpred42_Css37462); if (state.failed) return;dbg.location(1094,17);
 		// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:17: ( ws )?
 		int alt527=2;
 		try { dbg.enterSubRule(527);
@@ -33963,7 +34013,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1094:17: ws
 				{
 				dbg.location(1094,17);
-				pushFollow(FOLLOW_ws_in_synpred42_Css37457);
+				pushFollow(FOLLOW_ws_in_synpred42_Css37464);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -33973,7 +34023,7 @@
 		}
 		} finally {dbg.exitSubRule(527);}
 		dbg.location(1094,21);
-		pushFollow(FOLLOW_cp_expression_in_synpred42_Css37460);
+		pushFollow(FOLLOW_cp_expression_in_synpred42_Css37467);
 		cp_expression();
 		state._fsp--;
 		if (state.failed) return;
@@ -33990,7 +34040,7 @@
 		// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1110:8: cp_expression_atom
 		{
 		dbg.location(1110,8);
-		pushFollow(FOLLOW_cp_expression_atom_in_synpred43_Css37527);
+		pushFollow(FOLLOW_cp_expression_atom_in_synpred43_Css37534);
 		cp_expression_atom();
 		state._fsp--;
 		if (state.failed) return;
@@ -34025,7 +34075,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1112:10: ws
 				{
 				dbg.location(1112,10);
-				pushFollow(FOLLOW_ws_in_synpred44_Css37550);
+				pushFollow(FOLLOW_ws_in_synpred44_Css37557);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34035,7 +34085,7 @@
 		}
 		} finally {dbg.exitSubRule(528);}
 		dbg.location(1112,14);
-		pushFollow(FOLLOW_cp_expression_operator_in_synpred44_Css37553);
+		pushFollow(FOLLOW_cp_expression_operator_in_synpred44_Css37560);
 		cp_expression_operator();
 		state._fsp--;
 		if (state.failed) return;
@@ -34070,7 +34120,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1113:12: ws
 				{
 				dbg.location(1113,12);
-				pushFollow(FOLLOW_ws_in_synpred45_Css37579);
+				pushFollow(FOLLOW_ws_in_synpred45_Css37586);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34080,7 +34130,7 @@
 		}
 		} finally {dbg.exitSubRule(529);}
 		dbg.location(1113,16);
-		pushFollow(FOLLOW_cp_expression_atom_in_synpred45_Css37582);
+		pushFollow(FOLLOW_cp_expression_atom_in_synpred45_Css37589);
 		cp_expression_atom();
 		state._fsp--;
 		if (state.failed) return;
@@ -34097,7 +34147,7 @@
 		// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1127:14: cp_math_expression
 		{
 		dbg.location(1127,14);
-		pushFollow(FOLLOW_cp_math_expression_in_synpred46_Css37722);
+		pushFollow(FOLLOW_cp_math_expression_in_synpred46_Css37729);
 		cp_math_expression();
 		state._fsp--;
 		if (state.failed) return;
@@ -34132,7 +34182,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1154:14: ws
 				{
 				dbg.location(1154,14);
-				pushFollow(FOLLOW_ws_in_synpred47_Css37855);
+				pushFollow(FOLLOW_ws_in_synpred47_Css37862);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34184,7 +34234,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:78: ws
 				{
 				dbg.location(1186,78);
-				pushFollow(FOLLOW_ws_in_synpred48_Css38147);
+				pushFollow(FOLLOW_ws_in_synpred48_Css38154);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34194,7 +34244,7 @@
 		}
 		} finally {dbg.exitSubRule(531);}
 		dbg.location(1186,82);
-		pushFollow(FOLLOW_combinator_in_synpred48_Css38150);
+		pushFollow(FOLLOW_combinator_in_synpred48_Css38157);
 		combinator();
 		state._fsp--;
 		if (state.failed) return;dbg.location(1186,93);
@@ -34216,7 +34266,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:93: ws
 				{
 				dbg.location(1186,93);
-				pushFollow(FOLLOW_ws_in_synpred48_Css38152);
+				pushFollow(FOLLOW_ws_in_synpred48_Css38159);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34239,7 +34289,7 @@
 		// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:173: pseudo
 		{
 		dbg.location(1186,173);
-		pushFollow(FOLLOW_pseudo_in_synpred49_Css38188);
+		pushFollow(FOLLOW_pseudo_in_synpred49_Css38195);
 		pseudo();
 		state._fsp--;
 		if (state.failed) return;
@@ -34274,7 +34324,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1186:192: ws
 				{
 				dbg.location(1186,192);
-				pushFollow(FOLLOW_ws_in_synpred50_Css38196);
+				pushFollow(FOLLOW_ws_in_synpred50_Css38203);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34284,7 +34334,7 @@
 		}
 		} finally {dbg.exitSubRule(533);}
 		dbg.location(1186,196);
-		match(input,LPAREN,FOLLOW_LPAREN_in_synpred50_Css38199); if (state.failed) return;
+		match(input,LPAREN,FOLLOW_LPAREN_in_synpred50_Css38206); if (state.failed) return;
 		}
 
 	}
@@ -34298,7 +34348,7 @@
 		// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1195:26: webkitKeyframeSelectors
 		{
 		dbg.location(1195,26);
-		pushFollow(FOLLOW_webkitKeyframeSelectors_in_synpred51_Css38315);
+		pushFollow(FOLLOW_webkitKeyframeSelectors_in_synpred51_Css38322);
 		webkitKeyframeSelectors();
 		state._fsp--;
 		if (state.failed) return;
@@ -34333,7 +34383,7 @@
 				// /home/matthias/src/netbeans/ide/css.lib/src/org/netbeans/modules/css/lib/Css3.g:1373:20: ws
 				{
 				dbg.location(1373,20);
-				pushFollow(FOLLOW_ws_in_synpred52_Css39560);
+				pushFollow(FOLLOW_ws_in_synpred52_Css39567);
 				ws();
 				state._fsp--;
 				if (state.failed) return;
@@ -34343,7 +34393,7 @@
 		}
 		} finally {dbg.exitSubRule(534);}
 		dbg.location(1373,24);
-		match(input,COMMA,FOLLOW_COMMA_in_synpred52_Css39563); if (state.failed) return;
+		match(input,COMMA,FOLLOW_COMMA_in_synpred52_Css39570); if (state.failed) return;
 		}
 
 	}
@@ -35325,8 +35375,8 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\3\uffff\1\2\5\uffff\3\2\7\uffff\1\2\2\uffff"+
 			"\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff\1\2\6\uffff"+
 			"\3\2\5\uffff\1\1\11\uffff\1\2\2\uffff\2\2\6\uffff\3\2\2\uffff\3\2\1\uffff"+
-			"\2\2\2\uffff\3\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff\4\2\1\uffff"+
-			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\10\uffff\1\2",
+			"\2\2\2\uffff\5\2\1\uffff\3\2\1\uffff\6\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
+			"\1\2\1\uffff\5\2\10\uffff\1\2",
 			"\1\2\1\uffff\1\3\35\uffff\1\4\36\uffff\1\3\62\uffff\1\4\14\uffff\1\4"+
 			"\5\uffff\1\3",
 			"",
@@ -35389,8 +35439,8 @@
 			"\2\1\2\uffff\5\1\3\uffff\2\1\3\uffff\1\1\5\uffff\3\1\7\uffff\1\1\2\uffff"+
 			"\2\1\2\uffff\2\1\3\uffff\1\1\1\uffff\1\1\6\uffff\4\1\2\uffff\1\1\6\uffff"+
 			"\3\1\5\uffff\1\2\11\uffff\1\1\2\uffff\2\1\6\uffff\3\1\2\uffff\3\1\1\uffff"+
-			"\2\1\2\uffff\3\1\1\uffff\1\1\1\uffff\3\1\1\uffff\1\1\1\uffff\4\1\1\uffff"+
-			"\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff\5\1\10\uffff\1\1",
+			"\2\1\2\uffff\5\1\1\uffff\3\1\1\uffff\6\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
+			"\1\1\1\uffff\5\1\10\uffff\1\1",
 			"",
 			"\1\1\1\uffff\1\3\35\uffff\1\4\36\uffff\1\3\62\uffff\1\4\14\uffff\1\4"+
 			"\5\uffff\1\3",
@@ -35554,14 +35604,14 @@
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\4\uffff\1\2\1\uffff\3\2\5\uffff\1\2\1\1\3\uffff\1\2\4\uffff\1\2"+
 			"\2\uffff\2\2\2\uffff\1\2\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\2\uffff"+
-			"\3\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
+			"\5\2\1\uffff\3\2\1\uffff\6\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
+			"\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\3\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\4\uffff\1\2\1\uffff\3\2\5\uffff\1\2\1\1\3\uffff\1\2\4\uffff\1\2"+
 			"\2\uffff\2\2\2\uffff\1\2\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff"+
-			"\4\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
+			"\6\2\1\uffff\3\2\1\uffff\6\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
+			"\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
 			"",
 			""
 	};
@@ -35656,7 +35706,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "339:58: ( ws sass_use_as )?";
+			return "339:40: ( ws sass_use_as )?";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -35713,7 +35763,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "339:76: ( ws sass_use_with )?";
+			return "339:58: ( ws sass_use_with )?";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -35830,7 +35880,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "360:62: ( ws ( sass_forward_hide | sass_forward_show ) )?";
+			return "360:44: ( ws ( sass_forward_hide | sass_forward_show ) )?";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -35913,7 +35963,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "360:67: ( sass_forward_hide | sass_forward_show )";
+			return "360:49: ( sass_forward_hide | sass_forward_show )";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -35996,7 +36046,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "360:111: ({...}? ws sass_forward_as )?";
+			return "360:93: ({...}? ws sass_forward_as )?";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -36053,7 +36103,7 @@
 		}
 		@Override
 		public String getDescription() {
-			return "360:159: ({...}? ws sass_forward_with )?";
+			return "360:141: ({...}? ws sass_forward_with )?";
 		}
 		public void error(NoViableAltException nvae) {
 			dbg.recognitionException(nvae);
@@ -36247,15 +36297,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\uffff\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\3\3\1\2\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3"+
-			"\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\5\3\1\2\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3"+
+			"\1\uffff\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\uffff\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\3\3\1\4\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3"+
-			"\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\5\3\1\4\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3"+
+			"\1\uffff\1\3\1\1",
 			"\1\uffff",
 			"",
 			"\1\uffff",
@@ -36353,15 +36403,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -36420,15 +36470,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -36487,15 +36537,15 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\3\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\5\uffff\5\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\2\uffff\3\2\1\uffff\1\2\1\uffff"+
-			"\3\2\1\uffff\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
-			"\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\2\uffff\5\2\1\uffff\3\2\1\uffff"+
+			"\6\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff"+
+			"\1\2\1\1",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\3\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\5\uffff\5\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\3\2\1\uffff\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
-			"\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\6\2\1\uffff\3\2\1\uffff"+
+			"\6\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff"+
+			"\1\2\1\1",
 			"",
 			""
 	};
@@ -36548,7 +36598,7 @@
 						input.rewind();
 						s = -1;
 						if ( (LA82_0==COMMENT||LA82_0==NL||LA82_0==WS) ) {s = 1;}
-						else if ( (LA82_0==EOF||(LA82_0 >= AT_IDENT && LA82_0 <= AT_SIGN)||(LA82_0 >= BOTTOMCENTER_SYM && LA82_0 <= BOTTOMRIGHT_SYM)||(LA82_0 >= CHARSET_SYM && LA82_0 <= COLON)||LA82_0==COUNTER_STYLE_SYM||(LA82_0 >= DCOLON && LA82_0 <= DOT)||LA82_0==FONT_FACE_SYM||(LA82_0 >= GEN && LA82_0 <= GREATER)||(LA82_0 >= HASH && LA82_0 <= HASH_SYMBOL)||LA82_0==IDENT||LA82_0==IMPORT_SYM||(LA82_0 >= LBRACE && LA82_0 <= LEFTTOP_SYM)||LA82_0==LESS_AND||(LA82_0 >= MEDIA_SYM && LA82_0 <= MOZ_DOCUMENT_SYM)||LA82_0==NAMESPACE_SYM||LA82_0==PAGE_SYM||(LA82_0 >= PIPE && LA82_0 <= PLUS)||LA82_0==RBRACE||(LA82_0 >= RIGHTBOTTOM_SYM && LA82_0 <= RPAREN)||(LA82_0 >= SASS_AT_ROOT && LA82_0 <= SASS_DEBUG)||(LA82_0 >= SASS_EACH && LA82_0 <= SASS_ELSE)||(LA82_0 >= SASS_EXTEND && LA82_0 <= SASS_FOR)||LA82_0==SASS_FUNCTION||(LA82_0 >= SASS_IF && LA82_0 <= SASS_MIXIN)||LA82_0==SASS_RETURN||(LA82_0 >= SASS_VAR && LA82_0 <= SEMI)||LA82_0==STAR||LA82_0==SUPPORTS_SYM||LA82_0==TILDE||(LA82_0 >= TOPCENTER_SYM && LA82_0 <= TOPRIGHT_SYM)||LA82_0==VARIABLE||LA82_0==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
+						else if ( (LA82_0==EOF||(LA82_0 >= AT_IDENT && LA82_0 <= AT_SIGN)||(LA82_0 >= BOTTOMCENTER_SYM && LA82_0 <= BOTTOMRIGHT_SYM)||(LA82_0 >= CHARSET_SYM && LA82_0 <= COLON)||LA82_0==COUNTER_STYLE_SYM||(LA82_0 >= DCOLON && LA82_0 <= DOT)||LA82_0==FONT_FACE_SYM||(LA82_0 >= GEN && LA82_0 <= GREATER)||(LA82_0 >= HASH && LA82_0 <= HASH_SYMBOL)||LA82_0==IDENT||LA82_0==IMPORT_SYM||(LA82_0 >= LBRACE && LA82_0 <= LEFTTOP_SYM)||LA82_0==LESS_AND||(LA82_0 >= MEDIA_SYM && LA82_0 <= MOZ_DOCUMENT_SYM)||LA82_0==NAMESPACE_SYM||LA82_0==PAGE_SYM||(LA82_0 >= PIPE && LA82_0 <= PLUS)||LA82_0==RBRACE||(LA82_0 >= RIGHTBOTTOM_SYM && LA82_0 <= RPAREN)||(LA82_0 >= SASS_AT_ROOT && LA82_0 <= SASS_DEBUG)||(LA82_0 >= SASS_EACH && LA82_0 <= SASS_ELSE)||(LA82_0 >= SASS_EXTEND && LA82_0 <= SASS_FUNCTION)||(LA82_0 >= SASS_IF && LA82_0 <= SASS_MIXIN)||(LA82_0 >= SASS_RETURN && LA82_0 <= SEMI)||LA82_0==STAR||LA82_0==SUPPORTS_SYM||LA82_0==TILDE||(LA82_0 >= TOPCENTER_SYM && LA82_0 <= TOPRIGHT_SYM)||LA82_0==VARIABLE||LA82_0==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
 						else if ( (LA82_0==COMMA) && (synpred10_Css3())) {s = 3;}
 						 
 						input.seek(index82_0);
@@ -36561,7 +36611,7 @@
 						int index82_1 = input.index();
 						input.rewind();
 						s = -1;
-						if ( (LA82_1==EOF||(LA82_1 >= AT_IDENT && LA82_1 <= AT_SIGN)||(LA82_1 >= BOTTOMCENTER_SYM && LA82_1 <= BOTTOMRIGHT_SYM)||(LA82_1 >= CHARSET_SYM && LA82_1 <= COLON)||LA82_1==COUNTER_STYLE_SYM||(LA82_1 >= DCOLON && LA82_1 <= DOT)||LA82_1==FONT_FACE_SYM||(LA82_1 >= GEN && LA82_1 <= GREATER)||(LA82_1 >= HASH && LA82_1 <= HASH_SYMBOL)||LA82_1==IDENT||LA82_1==IMPORT_SYM||(LA82_1 >= LBRACE && LA82_1 <= LEFTTOP_SYM)||LA82_1==LESS_AND||(LA82_1 >= MEDIA_SYM && LA82_1 <= MOZ_DOCUMENT_SYM)||LA82_1==NAMESPACE_SYM||LA82_1==PAGE_SYM||(LA82_1 >= PIPE && LA82_1 <= PLUS)||LA82_1==RBRACE||(LA82_1 >= RIGHTBOTTOM_SYM && LA82_1 <= RPAREN)||(LA82_1 >= SASS_AT_ROOT && LA82_1 <= SASS_DEBUG)||(LA82_1 >= SASS_EACH && LA82_1 <= SASS_ELSE)||(LA82_1 >= SASS_ERROR && LA82_1 <= SASS_FOR)||LA82_1==SASS_FUNCTION||(LA82_1 >= SASS_IF && LA82_1 <= SASS_MIXIN)||LA82_1==SASS_RETURN||(LA82_1 >= SASS_VAR && LA82_1 <= SEMI)||LA82_1==STAR||LA82_1==SUPPORTS_SYM||LA82_1==TILDE||(LA82_1 >= TOPCENTER_SYM && LA82_1 <= TOPRIGHT_SYM)||LA82_1==VARIABLE||LA82_1==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
+						if ( (LA82_1==EOF||(LA82_1 >= AT_IDENT && LA82_1 <= AT_SIGN)||(LA82_1 >= BOTTOMCENTER_SYM && LA82_1 <= BOTTOMRIGHT_SYM)||(LA82_1 >= CHARSET_SYM && LA82_1 <= COLON)||LA82_1==COUNTER_STYLE_SYM||(LA82_1 >= DCOLON && LA82_1 <= DOT)||LA82_1==FONT_FACE_SYM||(LA82_1 >= GEN && LA82_1 <= GREATER)||(LA82_1 >= HASH && LA82_1 <= HASH_SYMBOL)||LA82_1==IDENT||LA82_1==IMPORT_SYM||(LA82_1 >= LBRACE && LA82_1 <= LEFTTOP_SYM)||LA82_1==LESS_AND||(LA82_1 >= MEDIA_SYM && LA82_1 <= MOZ_DOCUMENT_SYM)||LA82_1==NAMESPACE_SYM||LA82_1==PAGE_SYM||(LA82_1 >= PIPE && LA82_1 <= PLUS)||LA82_1==RBRACE||(LA82_1 >= RIGHTBOTTOM_SYM && LA82_1 <= RPAREN)||(LA82_1 >= SASS_AT_ROOT && LA82_1 <= SASS_DEBUG)||(LA82_1 >= SASS_EACH && LA82_1 <= SASS_ELSE)||(LA82_1 >= SASS_ERROR && LA82_1 <= SASS_FUNCTION)||(LA82_1 >= SASS_IF && LA82_1 <= SASS_MIXIN)||(LA82_1 >= SASS_RETURN && LA82_1 <= SEMI)||LA82_1==STAR||LA82_1==SUPPORTS_SYM||LA82_1==TILDE||(LA82_1 >= TOPCENTER_SYM && LA82_1 <= TOPRIGHT_SYM)||LA82_1==VARIABLE||LA82_1==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
 						else if ( (LA82_1==COMMENT||LA82_1==NL||LA82_1==WS) ) {s = 1;}
 						else if ( (LA82_1==COMMA) && (synpred10_Css3())) {s = 3;}
 						 
@@ -36650,15 +36700,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\uffff\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\3\3\1\2\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3"+
-			"\1\uffff\5\3\10\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\5\3\1\2\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\10\uffff\1\3"+
+			"\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\uffff\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\3\3\1\4\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3"+
-			"\1\uffff\5\3\10\uffff\1\3\1\1",
+			"\3\uffff\3\3\2\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\5\3\1\4\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\10\uffff\1\3"+
+			"\1\1",
 			"\1\uffff",
 			"",
 			"\1\uffff",
@@ -36984,25 +37034,25 @@
 			"\2\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\2\1\uffff\1\4\17\uffff\1\4\2\uffff"+
 			"\1\4\4\uffff\1\4\3\uffff\1\4\1\uffff\1\4\7\uffff\3\4\11\uffff\3\4\5\uffff"+
 			"\1\4\1\2\10\uffff\1\4\6\uffff\1\3\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4"+
-			"\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\1\1\uffff\1\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\2",
+			"\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\1\1\1\uffff\1\4\5\uffff"+
+			"\5\4\6\uffff\1\4\1\uffff\1\4\1\2",
 			"\2\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\5\1\uffff\1\4\17\uffff\1\4\2"+
 			"\uffff\1\4\4\uffff\1\4\3\uffff\1\4\1\uffff\1\4\7\uffff\3\4\11\uffff\3"+
 			"\4\5\uffff\1\4\1\5\10\uffff\1\4\6\uffff\1\3\3\uffff\3\4\2\uffff\3\4\1"+
-			"\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1"+
-			"\4\1\uffff\3\4\2\uffff\1\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5",
+			"\uffff\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\2\uffff\1"+
+			"\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5",
 			"\2\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\2\1\uffff\1\4\17\uffff\1\4\2"+
 			"\uffff\1\4\4\uffff\1\4\3\uffff\1\4\1\uffff\1\4\7\uffff\3\4\11\uffff\3"+
 			"\4\5\uffff\1\4\1\2\10\uffff\1\4\6\uffff\1\3\3\uffff\3\4\2\uffff\3\4\1"+
-			"\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1"+
-			"\4\1\uffff\4\4\1\uffff\1\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\2",
+			"\uffff\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\6\4\1\uffff\1"+
+			"\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\2",
 			"",
 			"",
 			"\2\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\5\1\uffff\1\4\17\uffff\1\4\2"+
 			"\uffff\1\4\4\uffff\1\4\3\uffff\1\4\1\uffff\1\4\7\uffff\3\4\11\uffff\3"+
 			"\4\5\uffff\1\4\1\5\10\uffff\1\4\6\uffff\1\3\3\uffff\3\4\2\uffff\3\4\1"+
-			"\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1"+
-			"\4\1\uffff\3\4\2\uffff\1\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5"
+			"\uffff\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\2\uffff\1"+
+			"\4\5\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5"
 	};
 
 	static final short[] DFA161_eot = DFA.unpackEncodedString(DFA161_eotS);
@@ -37058,9 +37108,9 @@
 	static final String[] DFA160_transitionS = {
 			"\2\1\2\uffff\5\2\3\uffff\1\1\4\uffff\1\1\17\uffff\1\1\2\uffff\1\1\4\uffff"+
 			"\1\1\3\uffff\1\1\1\uffff\1\1\7\uffff\3\2\11\uffff\3\1\5\uffff\1\1\11"+
-			"\uffff\1\1\12\uffff\3\2\2\uffff\3\1\1\uffff\2\1\2\uffff\1\1\1\uffff\1"+
-			"\1\1\uffff\1\1\1\uffff\3\1\1\uffff\1\1\1\uffff\3\1\2\uffff\1\1\5\uffff"+
-			"\5\2\6\uffff\1\1\1\uffff\1\1",
+			"\uffff\1\1\12\uffff\3\2\2\uffff\3\1\1\uffff\2\1\2\uffff\1\1\1\uffff\3"+
+			"\1\1\uffff\3\1\1\uffff\5\1\2\uffff\1\1\5\uffff\5\2\6\uffff\1\1\1\uffff"+
+			"\1\1",
 			"",
 			"\1\1\1\uffff\1\3\45\uffff\1\4\26\uffff\1\3\105\uffff\1\3",
 			"\1\1\1\uffff\1\3\45\uffff\1\4\26\uffff\1\3\105\uffff\1\3",
@@ -37121,15 +37171,13 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\2\uffff\3\2\1\uffff\1\2\1\4\3\2\1\uffff"+
-			"\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\10\uffff"+
-			"\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\2\uffff\5\2\1\4\3\2\1\uffff\6\2\1\uffff"+
+			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\10\uffff\1\2\1\1",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\1\uffff\4\2\1\uffff\1\2\1\4\3\2\1\uffff"+
-			"\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff"+
-			"\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\1\uffff\6\2\1\4\3\2\1\uffff\6\2\1\uffff"+
+			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
 			"",
 			"",
 			""
@@ -37189,13 +37237,13 @@
 			"\2\3\2\uffff\5\3\3\uffff\1\3\1\uffff\1\2\1\1\1\uffff\1\3\17\uffff\1\3"+
 			"\2\uffff\1\3\4\uffff\1\3\3\uffff\1\3\1\uffff\1\3\7\uffff\3\3\11\uffff"+
 			"\3\3\5\uffff\1\3\1\1\4\uffff\1\3\3\uffff\1\3\12\uffff\4\3\1\uffff\3\3"+
-			"\1\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\3\1\uffff\3\3\3\uffff\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\1\uffff\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff"+
+			"\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\1\3\1\uffff\1\4\1\1\1\uffff\1\3\17\uffff\1"+
 			"\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\3\1\uffff\1\3\7\uffff\3\3\11\uffff"+
 			"\3\3\5\uffff\1\3\1\1\4\uffff\1\3\3\uffff\1\3\12\uffff\4\3\1\uffff\3\3"+
-			"\1\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\3\1\uffff\3\3\3\uffff\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\1\uffff\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff"+
+			"\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"\1\uffff",
 			"",
 			"\1\uffff",
@@ -37350,13 +37398,13 @@
 			"\2\3\2\uffff\5\3\3\uffff\1\3\1\uffff\1\3\1\1\1\uffff\1\3\17\uffff\1\3"+
 			"\2\uffff\1\3\4\uffff\1\3\3\uffff\1\3\1\2\1\3\7\uffff\3\3\11\uffff\3\3"+
 			"\5\uffff\1\3\1\1\4\uffff\1\3\3\uffff\1\3\12\uffff\4\3\1\uffff\3\3\1\uffff"+
-			"\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\3\uffff\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff\1\3\4\uffff"+
+			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\1\3\1\uffff\1\3\1\1\1\uffff\1\3\17\uffff\1"+
 			"\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\3\1\2\1\3\7\uffff\3\3\11\uffff\3"+
 			"\3\5\uffff\1\3\1\1\4\uffff\1\3\3\uffff\1\3\12\uffff\4\3\1\uffff\3\3\1"+
-			"\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1"+
-			"\3\1\uffff\3\3\3\uffff\1\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\uffff\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff\1"+
+			"\3\4\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"",
 			""
 	};
@@ -37537,22 +37585,21 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\3\uffff\1\2\5\uffff\3\2\7\uffff\1\2\2\uffff"+
 			"\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff\1\2\6\uffff"+
 			"\3\2\5\uffff\1\2\11\uffff\1\2\2\uffff\2\2\6\uffff\3\2\2\uffff\3\2\1\uffff"+
-			"\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff\3\2\1\1"+
-			"\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff"+
-			"\1\2",
+			"\2\2\1\uffff\6\2\1\uffff\3\2\1\uffff\5\2\1\1\1\uffff\1\2\1\uffff\1\2"+
+			"\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\3\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\3\10\uffff\1\2\2\uffff\2\2\2\uffff\1\4"+
-			"\3\uffff\3\2\2\uffff\3\2\1\uffff\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\3\2\1\uffff\1\2\1\uffff\3\2\1\1\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2"+
-			"\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\3",
+			"\3\uffff\3\2\2\uffff\3\2\1\uffff\2\2\1\uffff\6\2\1\uffff\3\2\1\uffff"+
+			"\5\2\1\1\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2"+
+			"\1\uffff\1\2\1\3",
 			"",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\3\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\3\10\uffff\1\2\2\uffff\2\2\2\uffff\1\4"+
-			"\3\uffff\3\2\2\uffff\3\2\1\uffff\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\3\2\1\uffff\1\2\1\uffff\3\2\1\1\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2"+
-			"\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\3",
+			"\3\uffff\3\2\2\uffff\3\2\1\uffff\2\2\1\uffff\6\2\1\uffff\3\2\1\uffff"+
+			"\5\2\1\1\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2"+
+			"\1\uffff\1\2\1\3",
 			""
 	};
 
@@ -37611,23 +37658,23 @@
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\1\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\1\10\uffff\1\4\2\uffff\2\4\2\uffff\1\3"+
-			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\4\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\4\1\uffff\3\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4"+
-			"\1\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\1",
+			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\6\4\1\uffff\3\4\1\uffff"+
+			"\5\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff\1\4"+
+			"\1\uffff\1\4\1\1",
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\5\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\5\10\uffff\1\4\2\uffff\2\4\2\uffff\1\3"+
-			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\4\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\4\1\uffff\3\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4"+
-			"\1\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5",
+			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\6\4\1\uffff\3\4\1\uffff"+
+			"\5\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff\1\4"+
+			"\1\uffff\1\4\1\5",
 			"",
 			"",
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\5\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\5\10\uffff\1\4\2\uffff\2\4\2\uffff\1\3"+
-			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\4\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\4\1\uffff\3\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4"+
-			"\1\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\5"
+			"\3\uffff\3\4\2\uffff\3\4\1\uffff\2\4\1\uffff\6\4\1\uffff\3\4\1\uffff"+
+			"\5\4\1\2\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff\1\4"+
+			"\1\uffff\1\4\1\5"
 	};
 
 	static final short[] DFA208_eot = DFA.unpackEncodedString(DFA208_eotS);
@@ -37685,9 +37732,8 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\uffff\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\6\uffff\3\3"+
-			"\2\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\3\1\uffff\3\3\1\2\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3"+
-			"\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\2\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff\5\3\1\2\1\uffff"+
+			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"",
 			""
 	};
@@ -37806,9 +37852,9 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -37869,9 +37915,9 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -38297,15 +38343,14 @@
 			"\2\3\2\uffff\5\3\3\uffff\3\3\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff\1\3"+
 			"\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\5\3\2\uffff\1\3\4\uffff"+
 			"\1\2\1\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\3\3\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff\1\3"+
 			"\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\5\3\2\uffff\1\3\4\uffff"+
 			"\1\2\1\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff"+
-			"\5\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff"+
-			"\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\12\3\1\uffff"+
+			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"",
 			""
 	};
@@ -38364,15 +38409,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\1\3\1\2\1\3\6\uffff\4\3\2\uffff"+
 			"\1\3\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -38439,9 +38484,9 @@
 			"\51\1\63\1\uffff\1\6\1\75\5\uffff\1\46\1\25\1\44\5\uffff\1\52\1\1\4\uffff"+
 			"\1\60\3\uffff\1\42\1\62\1\77\1\2\1\15\2\uffff\1\2\1\uffff\1\65\1\72\3"+
 			"\51\1\2\1\uffff\1\14\1\40\1\32\1\uffff\1\36\1\52\2\uffff\1\47\1\2\1\35"+
-			"\1\uffff\1\52\1\uffff\1\34\1\13\1\11\1\uffff\1\52\1\uffff\1\33\1\32\1"+
-			"\37\1\2\1\56\1\2\1\73\1\2\1\uffff\1\57\1\70\5\51\2\uffff\1\61\1\76\2"+
-			"\uffff\1\31\1\uffff\1\45\1\1",
+			"\2\52\1\uffff\1\34\1\13\1\11\1\uffff\2\52\1\33\1\32\1\37\1\2\1\56\1\2"+
+			"\1\73\1\2\1\uffff\1\57\1\70\5\51\2\uffff\1\61\1\76\2\uffff\1\31\1\uffff"+
+			"\1\45\1\1",
 			"\1\uffff",
 			"",
 			"",
@@ -38586,7 +38631,7 @@
 						else if ( (LA288_0==MEDIA_SYM) ) {s = 38;}
 						else if ( (LA288_0==SASS_EXTEND) ) {s = 39;}
 						else if ( ((LA288_0 >= BOTTOMCENTER_SYM && LA288_0 <= BOTTOMRIGHT_SYM)||(LA288_0 >= LEFTBOTTOM_SYM && LA288_0 <= LEFTTOP_SYM)||(LA288_0 >= RIGHTBOTTOM_SYM && LA288_0 <= RIGHTTOP_SYM)||(LA288_0 >= TOPCENTER_SYM && LA288_0 <= TOPRIGHT_SYM)) ) {s = 41;}
-						else if ( (LA288_0==CHARSET_SYM||LA288_0==COUNTER_STYLE_SYM||LA288_0==NAMESPACE_SYM||LA288_0==SASS_ELSE||LA288_0==SASS_FUNCTION||LA288_0==SASS_RETURN) ) {s = 42;}
+						else if ( (LA288_0==CHARSET_SYM||LA288_0==COUNTER_STYLE_SYM||LA288_0==NAMESPACE_SYM||LA288_0==SASS_ELSE||(LA288_0 >= SASS_FORWARD && LA288_0 <= SASS_FUNCTION)||(LA288_0 >= SASS_RETURN && LA288_0 <= SASS_USE)) ) {s = 42;}
 						else if ( (LA288_0==COMMA) ) {s = 45;}
 						else if ( (LA288_0==SOLIDUS) && (synpred36_Css3())) {s = 46;}
 						else if ( (LA288_0==TILDE) ) {s = 47;}
@@ -39077,16 +39122,14 @@
 			"\2\uffff\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff"+
 			"\1\3\1\uffff\1\3\6\uffff\5\3\1\uffff\2\3\5\uffff\3\3\5\uffff\1\3\1\1"+
 			"\4\uffff\1\3\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff"+
-			"\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\2\1\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff"+
-			"\1\3\1\1",
+			"\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\1\uffff\1\2\1\uffff"+
+			"\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\uffff\1\2\1\1\1\uffff\1\4\6\uffff\1\4"+
 			"\2\uffff\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\1\4\3\uffff\2\4\3\uffff"+
 			"\1\4\1\uffff\1\4\6\uffff\5\4\1\uffff\2\4\5\uffff\3\4\5\uffff\1\4\1\1"+
 			"\4\uffff\1\4\3\uffff\3\4\1\uffff\1\4\4\uffff\5\4\2\uffff\3\4\1\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\2\1\uffff\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\1",
+			"\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\1\uffff\1\2\1\uffff"+
+			"\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
 			"",
 			"",
 			""
@@ -39205,17 +39248,17 @@
 			"\3\uffff\1\31\1\35\3\uffff\1\5\1\uffff\1\32\6\uffff\1\7\3\32\1\13\1\uffff"+
 			"\1\34\1\26\5\uffff\1\32\1\4\1\32\5\uffff\1\32\1\1\4\uffff\1\10\3\uffff"+
 			"\1\32\1\12\1\37\1\uffff\1\4\4\uffff\1\15\1\22\3\32\1\2\1\uffff\3\32\1"+
-			"\uffff\2\32\2\uffff\1\32\1\uffff\1\32\1\uffff\1\32\1\uffff\3\32\1\uffff"+
-			"\1\32\1\uffff\1\33\2\32\1\2\1\3\1\uffff\1\24\2\uffff\1\25\1\20\5\32\2"+
-			"\uffff\1\11\1\30\2\uffff\1\6\1\uffff\1\32\1\1",
+			"\uffff\2\32\2\uffff\1\32\1\uffff\3\32\1\uffff\3\32\1\uffff\2\32\1\33"+
+			"\2\32\1\2\1\3\1\uffff\1\24\2\uffff\1\25\1\20\5\32\2\uffff\1\11\1\30\2"+
+			"\uffff\1\6\1\uffff\1\32\1\1",
 			"\1\17\1\41\1\45\2\uffff\5\41\3\uffff\1\41\1\uffff\1\2\1\1\1\uffff\1"+
 			"\41\6\uffff\1\23\2\uffff\1\14\3\uffff\1\16\1\uffff\1\41\1\21\1\uffff"+
 			"\1\27\3\uffff\1\31\1\44\3\uffff\1\40\1\uffff\1\41\6\uffff\1\7\3\41\1"+
 			"\13\1\uffff\1\43\1\26\5\uffff\1\41\1\4\1\41\5\uffff\1\41\1\1\4\uffff"+
 			"\1\10\3\uffff\1\41\1\12\1\46\1\uffff\1\4\4\uffff\1\15\1\22\3\41\1\2\1"+
-			"\uffff\3\41\1\uffff\2\41\2\uffff\1\41\1\uffff\1\41\1\uffff\1\41\1\uffff"+
-			"\3\41\1\uffff\1\41\1\uffff\1\42\2\41\1\2\1\3\1\uffff\1\24\2\uffff\1\25"+
-			"\1\20\5\41\2\uffff\1\11\1\30\2\uffff\1\6\1\uffff\1\41\1\1",
+			"\uffff\3\41\1\uffff\2\41\2\uffff\1\41\1\uffff\3\41\1\uffff\3\41\1\uffff"+
+			"\2\41\1\42\2\41\1\2\1\3\1\uffff\1\24\2\uffff\1\25\1\20\5\41\2\uffff\1"+
+			"\11\1\30\2\uffff\1\6\1\uffff\1\41\1\1",
 			"",
 			"",
 			"",
@@ -39327,7 +39370,7 @@
 						else if ( (LA313_0==GEN) && (synpred40_Css3())) {s = 23;}
 						else if ( (LA313_0==URI) && (synpred40_Css3())) {s = 24;}
 						else if ( (LA313_0==HASH) && (synpred40_Css3())) {s = 25;}
-						else if ( (LA313_0==AT_IDENT||(LA313_0 >= BOTTOMCENTER_SYM && LA313_0 <= BOTTOMRIGHT_SYM)||LA313_0==CHARSET_SYM||LA313_0==COUNTER_STYLE_SYM||LA313_0==FONT_FACE_SYM||LA313_0==IMPORT_SYM||(LA313_0 >= LEFTBOTTOM_SYM && LA313_0 <= LEFTTOP_SYM)||LA313_0==MEDIA_SYM||LA313_0==MOZ_DOCUMENT_SYM||LA313_0==NAMESPACE_SYM||LA313_0==PAGE_SYM||(LA313_0 >= RIGHTBOTTOM_SYM && LA313_0 <= RIGHTTOP_SYM)||(LA313_0 >= SASS_AT_ROOT && LA313_0 <= SASS_DEBUG)||(LA313_0 >= SASS_EACH && LA313_0 <= SASS_ELSE)||LA313_0==SASS_EXTEND||LA313_0==SASS_FOR||LA313_0==SASS_FUNCTION||(LA313_0 >= SASS_IF && LA313_0 <= SASS_MIXIN)||LA313_0==SASS_RETURN||(LA313_0 >= SASS_WARN && LA313_0 <= SASS_WHILE)||(LA313_0 >= TOPCENTER_SYM && LA313_0 <= TOPRIGHT_SYM)||LA313_0==WEBKIT_KEYFRAMES_SYM) && (synpred40_Css3())) {s = 26;}
+						else if ( (LA313_0==AT_IDENT||(LA313_0 >= BOTTOMCENTER_SYM && LA313_0 <= BOTTOMRIGHT_SYM)||LA313_0==CHARSET_SYM||LA313_0==COUNTER_STYLE_SYM||LA313_0==FONT_FACE_SYM||LA313_0==IMPORT_SYM||(LA313_0 >= LEFTBOTTOM_SYM && LA313_0 <= LEFTTOP_SYM)||LA313_0==MEDIA_SYM||LA313_0==MOZ_DOCUMENT_SYM||LA313_0==NAMESPACE_SYM||LA313_0==PAGE_SYM||(LA313_0 >= RIGHTBOTTOM_SYM && LA313_0 <= RIGHTTOP_SYM)||(LA313_0 >= SASS_AT_ROOT && LA313_0 <= SASS_DEBUG)||(LA313_0 >= SASS_EACH && LA313_0 <= SASS_ELSE)||LA313_0==SASS_EXTEND||(LA313_0 >= SASS_FOR && LA313_0 <= SASS_FUNCTION)||(LA313_0 >= SASS_IF && LA313_0 <= SASS_MIXIN)||(LA313_0 >= SASS_RETURN && LA313_0 <= SASS_USE)||(LA313_0 >= SASS_WARN && LA313_0 <= SASS_WHILE)||(LA313_0 >= TOPCENTER_SYM && LA313_0 <= TOPRIGHT_SYM)||LA313_0==WEBKIT_KEYFRAMES_SYM) && (synpred40_Css3())) {s = 26;}
 						else if ( (LA313_0==SASS_VAR) && (synpred40_Css3())) {s = 27;}
 						else if ( (LA313_0==LESS_AND) && (synpred40_Css3())) {s = 28;}
 						else if ( (LA313_0==HASH_SYMBOL) && (synpred40_Css3())) {s = 29;}
@@ -39368,7 +39411,7 @@
 						else if ( (LA313_1==GEN) && (synpred40_Css3())) {s = 23;}
 						else if ( (LA313_1==URI) && (synpred40_Css3())) {s = 24;}
 						else if ( (LA313_1==HASH) && (synpred40_Css3())) {s = 25;}
-						else if ( (LA313_1==AT_IDENT||(LA313_1 >= BOTTOMCENTER_SYM && LA313_1 <= BOTTOMRIGHT_SYM)||LA313_1==CHARSET_SYM||LA313_1==COUNTER_STYLE_SYM||LA313_1==FONT_FACE_SYM||LA313_1==IMPORT_SYM||(LA313_1 >= LEFTBOTTOM_SYM && LA313_1 <= LEFTTOP_SYM)||LA313_1==MEDIA_SYM||LA313_1==MOZ_DOCUMENT_SYM||LA313_1==NAMESPACE_SYM||LA313_1==PAGE_SYM||(LA313_1 >= RIGHTBOTTOM_SYM && LA313_1 <= RIGHTTOP_SYM)||(LA313_1 >= SASS_AT_ROOT && LA313_1 <= SASS_DEBUG)||(LA313_1 >= SASS_EACH && LA313_1 <= SASS_ELSE)||LA313_1==SASS_EXTEND||LA313_1==SASS_FOR||LA313_1==SASS_FUNCTION||(LA313_1 >= SASS_IF && LA313_1 <= SASS_MIXIN)||LA313_1==SASS_RETURN||(LA313_1 >= SASS_WARN && LA313_1 <= SASS_WHILE)||(LA313_1 >= TOPCENTER_SYM && LA313_1 <= TOPRIGHT_SYM)||LA313_1==WEBKIT_KEYFRAMES_SYM) && (synpred40_Css3())) {s = 33;}
+						else if ( (LA313_1==AT_IDENT||(LA313_1 >= BOTTOMCENTER_SYM && LA313_1 <= BOTTOMRIGHT_SYM)||LA313_1==CHARSET_SYM||LA313_1==COUNTER_STYLE_SYM||LA313_1==FONT_FACE_SYM||LA313_1==IMPORT_SYM||(LA313_1 >= LEFTBOTTOM_SYM && LA313_1 <= LEFTTOP_SYM)||LA313_1==MEDIA_SYM||LA313_1==MOZ_DOCUMENT_SYM||LA313_1==NAMESPACE_SYM||LA313_1==PAGE_SYM||(LA313_1 >= RIGHTBOTTOM_SYM && LA313_1 <= RIGHTTOP_SYM)||(LA313_1 >= SASS_AT_ROOT && LA313_1 <= SASS_DEBUG)||(LA313_1 >= SASS_EACH && LA313_1 <= SASS_ELSE)||LA313_1==SASS_EXTEND||(LA313_1 >= SASS_FOR && LA313_1 <= SASS_FUNCTION)||(LA313_1 >= SASS_IF && LA313_1 <= SASS_MIXIN)||(LA313_1 >= SASS_RETURN && LA313_1 <= SASS_USE)||(LA313_1 >= SASS_WARN && LA313_1 <= SASS_WHILE)||(LA313_1 >= TOPCENTER_SYM && LA313_1 <= TOPRIGHT_SYM)||LA313_1==WEBKIT_KEYFRAMES_SYM) && (synpred40_Css3())) {s = 33;}
 						else if ( (LA313_1==SASS_VAR) && (synpred40_Css3())) {s = 34;}
 						else if ( (LA313_1==LESS_AND) && (synpred40_Css3())) {s = 35;}
 						else if ( (LA313_1==HASH_SYMBOL) && (synpred40_Css3())) {s = 36;}
@@ -39405,14 +39448,14 @@
 			"\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff\1\3\1\uffff"+
 			"\1\3\6\uffff\5\3\1\uffff\2\3\5\uffff\3\3\5\uffff\1\3\1\1\4\uffff\1\3"+
 			"\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff\2\3\2\uffff"+
-			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\2\1\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
+			"\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\1\uffff\1\2\1\uffff\1\3\2\uffff"+
+			"\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\1\1\uffff\1\4\6\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\1\4\3\uffff\2\4\3\uffff\1\4\1\uffff"+
 			"\1\4\6\uffff\5\4\1\uffff\2\4\5\uffff\3\4\5\uffff\1\4\1\1\4\uffff\1\4"+
 			"\3\uffff\3\4\1\uffff\1\4\4\uffff\5\4\2\uffff\3\4\1\uffff\2\4\2\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\3\4\1\uffff"+
-			"\1\2\1\uffff\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
+			"\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\1\uffff\1\2\1\uffff\1\4\2\uffff"+
+			"\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
 			"",
 			"",
 			""
@@ -39472,15 +39515,13 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\2\uffff\3\2\1\uffff\1\2\1\4\3\2\1\uffff"+
-			"\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\10\uffff"+
-			"\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\2\uffff\5\2\1\4\3\2\1\uffff\6\2\1\uffff"+
+			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\10\uffff\1\2\1\1",
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\1\uffff\4\2\1\uffff\1\2\1\4\3\2\1\uffff"+
-			"\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff"+
-			"\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\3\2\2\1\uffff\6\2\1\4\3\2\1\uffff\6\2\1\uffff"+
+			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
 			"",
 			"",
 			""
@@ -39540,9 +39581,8 @@
 			"\3\2\2\uffff\5\2\3\uffff\2\2\1\57\1\1\1\uffff\1\2\5\uffff\3\2\1\uffff"+
 			"\1\2\3\uffff\1\2\1\uffff\2\2\1\uffff\2\2\2\uffff\2\2\3\uffff\3\2\5\uffff"+
 			"\6\2\1\uffff\2\2\3\uffff\1\2\1\uffff\3\2\5\uffff\1\2\1\1\3\uffff\2\2"+
-			"\3\uffff\5\2\2\uffff\1\2\1\uffff\6\2\1\uffff\6\2\2\uffff\3\2\1\uffff"+
-			"\5\2\1\uffff\1\2\1\uffff\4\2\1\uffff\3\2\1\uffff\7\2\2\uffff\2\2\2\uffff"+
-			"\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\5\2\2\uffff\1\2\1\uffff\6\2\1\uffff\6\2\2\uffff\11\2\1\uffff"+
+			"\6\2\1\uffff\3\2\1\uffff\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2\1\1",
 			"\1\uffff",
 			"",
 			"",
@@ -39714,10 +39754,9 @@
 			"\44\5\uffff\1\2\1\33\3\54\1\70\1\112\1\21\1\101\1\113\1\2\1\uffff\1\104"+
 			"\1\uffff\1\51\1\10\1\47\5\uffff\1\60\1\107\3\uffff\1\64\1\5\3\uffff\1"+
 			"\45\1\67\1\103\1\2\1\30\2\uffff\1\2\1\uffff\1\72\1\77\3\54\1\2\1\uffff"+
-			"\1\26\1\43\1\27\1\2\1\41\1\60\2\uffff\1\52\1\2\1\40\1\uffff\1\57\1\2"+
-			"\1\37\1\25\1\15\1\uffff\1\60\1\uffff\1\16\1\27\1\42\1\2\1\uffff\1\2\1"+
-			"\6\1\2\1\uffff\1\65\1\75\5\54\2\uffff\1\66\1\102\2\uffff\1\13\1\uffff"+
-			"\1\50\1\1",
+			"\1\26\1\43\1\27\1\2\1\41\1\60\2\uffff\1\52\1\2\1\40\1\60\1\57\1\2\1\37"+
+			"\1\25\1\15\1\uffff\2\60\1\16\1\27\1\42\1\2\1\uffff\1\2\1\6\1\2\1\uffff"+
+			"\1\65\1\75\5\54\2\uffff\1\66\1\102\2\uffff\1\13\1\uffff\1\50\1\1",
 			"\1\uffff",
 			"",
 			"",
@@ -39881,7 +39920,7 @@
 						else if ( ((LA334_0 >= BOTTOMCENTER_SYM && LA334_0 <= BOTTOMRIGHT_SYM)||(LA334_0 >= LEFTBOTTOM_SYM && LA334_0 <= LEFTTOP_SYM)||(LA334_0 >= RIGHTBOTTOM_SYM && LA334_0 <= RIGHTTOP_SYM)||(LA334_0 >= TOPCENTER_SYM && LA334_0 <= TOPRIGHT_SYM)) ) {s = 44;}
 						else if ( (LA334_0==COUNTER_STYLE_SYM) ) {s = 45;}
 						else if ( (LA334_0==SASS_FUNCTION) ) {s = 47;}
-						else if ( (LA334_0==CHARSET_SYM||LA334_0==NAMESPACE_SYM||LA334_0==SASS_ELSE||LA334_0==SASS_RETURN) ) {s = 48;}
+						else if ( (LA334_0==CHARSET_SYM||LA334_0==NAMESPACE_SYM||LA334_0==SASS_ELSE||LA334_0==SASS_FORWARD||(LA334_0 >= SASS_RETURN && LA334_0 <= SASS_USE)) ) {s = 48;}
 						else if ( (LA334_0==NOT) ) {s = 52;}
 						else if ( (LA334_0==TILDE) ) {s = 53;}
 						else if ( (LA334_0==URANGE) ) {s = 54;}
@@ -40652,9 +40691,9 @@
 			"\3\2\2\uffff\5\2\3\uffff\3\2\1\114\1\uffff\4\2\2\uffff\3\2\1\uffff\1"+
 			"\2\3\uffff\1\2\1\uffff\2\2\1\uffff\3\2\1\uffff\2\2\3\uffff\3\2\5\uffff"+
 			"\13\2\1\uffff\1\2\1\uffff\1\2\1\15\1\2\5\uffff\1\2\1\114\3\uffff\2\2"+
-			"\3\uffff\4\2\1\52\2\uffff\1\2\1\uffff\6\2\1\uffff\6\2\2\uffff\3\2\1\uffff"+
-			"\5\2\1\uffff\1\2\1\uffff\4\2\1\115\1\63\2\2\1\uffff\7\2\2\uffff\2\2\2"+
-			"\uffff\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\52\2\uffff\1\2\1\uffff\6\2\1\uffff\6\2\2\uffff\11\2\1"+
+			"\uffff\6\2\1\115\1\63\2\2\1\uffff\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff"+
+			"\1\2\1\1",
 			"\1\uffff",
 			"",
 			"",
@@ -40782,7 +40821,7 @@
 						input.rewind();
 						s = -1;
 						if ( (LA348_0==WS) ) {s = 1;}
-						else if ( (LA348_0==EOF||(LA348_0 >= ANGLE && LA348_0 <= AT_SIGN)||(LA348_0 >= BOTTOMCENTER_SYM && LA348_0 <= BOTTOMRIGHT_SYM)||(LA348_0 >= CHARSET_SYM && LA348_0 <= COMMA)||(LA348_0 >= COUNTER_STYLE_SYM && LA348_0 <= CP_NOT_EQ)||(LA348_0 >= DCOLON && LA348_0 <= DOT)||LA348_0==EMS||LA348_0==EXS||(LA348_0 >= FONT_FACE_SYM && LA348_0 <= FREQ)||(LA348_0 >= GEN && LA348_0 <= GREATER_OR_EQ)||(LA348_0 >= HASH && LA348_0 <= HASH_SYMBOL)||(LA348_0 >= IDENT && LA348_0 <= IMPORT_SYM)||(LA348_0 >= LBRACE && LA348_0 <= LESS_REST)||LA348_0==LPAREN||LA348_0==MEDIA_SYM||LA348_0==MOZ_DOCUMENT_SYM||LA348_0==NAMESPACE_SYM||(LA348_0 >= NOT && LA348_0 <= NUMBER)||(LA348_0 >= PAGE_SYM && LA348_0 <= PIPE)||LA348_0==RBRACE||(LA348_0 >= REM && LA348_0 <= RPAREN)||(LA348_0 >= SASS_AT_ROOT && LA348_0 <= SASS_ELSE)||(LA348_0 >= SASS_EXTEND && LA348_0 <= SASS_FOR)||(LA348_0 >= SASS_FUNCTION && LA348_0 <= SASS_MIXIN)||LA348_0==SASS_RETURN||(LA348_0 >= SASS_VAR && LA348_0 <= SEMI)||(LA348_0 >= STRING && LA348_0 <= SUPPORTS_SYM)||(LA348_0 >= TILDE && LA348_0 <= TOPRIGHT_SYM)||(LA348_0 >= URANGE && LA348_0 <= URI)||LA348_0==VARIABLE||LA348_0==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
+						else if ( (LA348_0==EOF||(LA348_0 >= ANGLE && LA348_0 <= AT_SIGN)||(LA348_0 >= BOTTOMCENTER_SYM && LA348_0 <= BOTTOMRIGHT_SYM)||(LA348_0 >= CHARSET_SYM && LA348_0 <= COMMA)||(LA348_0 >= COUNTER_STYLE_SYM && LA348_0 <= CP_NOT_EQ)||(LA348_0 >= DCOLON && LA348_0 <= DOT)||LA348_0==EMS||LA348_0==EXS||(LA348_0 >= FONT_FACE_SYM && LA348_0 <= FREQ)||(LA348_0 >= GEN && LA348_0 <= GREATER_OR_EQ)||(LA348_0 >= HASH && LA348_0 <= HASH_SYMBOL)||(LA348_0 >= IDENT && LA348_0 <= IMPORT_SYM)||(LA348_0 >= LBRACE && LA348_0 <= LESS_REST)||LA348_0==LPAREN||LA348_0==MEDIA_SYM||LA348_0==MOZ_DOCUMENT_SYM||LA348_0==NAMESPACE_SYM||(LA348_0 >= NOT && LA348_0 <= NUMBER)||(LA348_0 >= PAGE_SYM && LA348_0 <= PIPE)||LA348_0==RBRACE||(LA348_0 >= REM && LA348_0 <= RPAREN)||(LA348_0 >= SASS_AT_ROOT && LA348_0 <= SASS_ELSE)||(LA348_0 >= SASS_EXTEND && LA348_0 <= SASS_MIXIN)||(LA348_0 >= SASS_RETURN && LA348_0 <= SEMI)||(LA348_0 >= STRING && LA348_0 <= SUPPORTS_SYM)||(LA348_0 >= TILDE && LA348_0 <= TOPRIGHT_SYM)||(LA348_0 >= URANGE && LA348_0 <= URI)||LA348_0==VARIABLE||LA348_0==WEBKIT_KEYFRAMES_SYM) ) {s = 2;}
 						else if ( (LA348_0==MINUS) ) {s = 13;}
 						else if ( (LA348_0==PLUS) ) {s = 42;}
 						else if ( (LA348_0==STAR) ) {s = 51;}
@@ -40883,14 +40922,14 @@
 			"\1\2\1\uffff\2\2\1\uffff\1\2\3\uffff\2\2\3\uffff\1\2\1\3\1\2\6\uffff"+
 			"\5\2\1\uffff\2\2\3\uffff\1\4\1\uffff\1\2\1\1\1\2\5\uffff\1\2\5\uffff"+
 			"\1\2\3\uffff\3\2\1\uffff\1\1\4\uffff\5\2\2\uffff\3\2\1\uffff\2\2\2\uffff"+
-			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff\3\2\3\uffff"+
-			"\1\2\2\uffff\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2",
+			"\1\2\1\uffff\3\2\1\uffff\3\2\1\uffff\5\2\3\uffff\1\2\2\uffff\7\2\2\uffff"+
+			"\2\2\2\uffff\1\2\1\uffff\1\2",
 			"\3\2\2\uffff\5\2\3\uffff\1\2\2\uffff\1\5\1\uffff\1\2\6\uffff\1\2\2\uffff"+
 			"\1\2\3\uffff\1\2\1\uffff\2\2\1\uffff\1\2\3\uffff\2\2\3\uffff\1\2\1\uffff"+
 			"\1\2\6\uffff\5\2\1\uffff\2\2\3\uffff\1\4\1\uffff\1\2\1\uffff\1\2\5\uffff"+
 			"\1\2\1\5\4\uffff\1\2\3\uffff\3\2\6\uffff\5\2\2\uffff\3\2\1\uffff\2\2"+
-			"\2\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff"+
-			"\3\2\3\uffff\1\2\2\uffff\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2\1\5",
+			"\2\uffff\1\2\1\uffff\3\2\1\uffff\3\2\1\uffff\5\2\3\uffff\1\2\2\uffff"+
+			"\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2\1\5",
 			"",
 			"",
 			"",
@@ -40898,8 +40937,8 @@
 			"\1\2\3\uffff\1\2\1\uffff\2\2\1\uffff\1\2\3\uffff\2\2\3\uffff\1\2\1\uffff"+
 			"\1\2\6\uffff\5\2\1\uffff\2\2\3\uffff\1\4\1\uffff\1\2\1\uffff\1\2\5\uffff"+
 			"\1\2\1\5\4\uffff\1\2\3\uffff\3\2\6\uffff\5\2\2\uffff\3\2\1\uffff\2\2"+
-			"\2\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\3\2\1\uffff\1\2\1\uffff"+
-			"\3\2\3\uffff\1\2\2\uffff\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2\1\5"
+			"\2\uffff\1\2\1\uffff\3\2\1\uffff\3\2\1\uffff\5\2\3\uffff\1\2\2\uffff"+
+			"\7\2\2\uffff\2\2\2\uffff\1\2\1\uffff\1\2\1\5"
 	};
 
 	static final short[] DFA353_eot = DFA.unpackEncodedString(DFA353_eotS);
@@ -41070,15 +41109,15 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\5\3\2\uffff\1\3\4\uffff"+
 			"\1\2\1\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\5\3\2\uffff\1\3\4\uffff"+
 			"\1\2\1\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3"+
-			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff"+
-			"\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
+			"\3\uffff\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff"+
+			"\6\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff"+
+			"\1\3\1\1",
 			"",
 			""
 	};
@@ -41137,15 +41176,13 @@
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\1\2\4\3\2\uffff\1\3"+
 			"\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3\3\uffff"+
-			"\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\3\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff"+
-			"\1\3\1\uffff\1\3\1\1",
+			"\4\3\1\uffff\3\3\1\uffff\2\3\2\uffff\5\3\1\uffff\3\3\1\uffff\6\3\1\uffff"+
+			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"\2\3\2\uffff\5\3\3\uffff\2\3\1\uffff\1\1\1\uffff\1\3\5\uffff\3\3\7\uffff"+
 			"\1\3\2\uffff\2\3\2\uffff\2\3\3\uffff\3\3\5\uffff\1\2\4\3\2\uffff\1\3"+
 			"\6\uffff\3\3\5\uffff\1\3\1\1\10\uffff\1\3\2\uffff\2\3\2\uffff\1\3\3\uffff"+
-			"\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\4\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff"+
-			"\1\3\1\uffff\1\3\1\1",
+			"\4\3\1\uffff\3\3\1\uffff\2\3\1\uffff\6\3\1\uffff\3\3\1\uffff\6\3\1\uffff"+
+			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\5\3\6\uffff\1\3\1\uffff\1\3\1\1",
 			"",
 			""
 	};
@@ -41205,48 +41242,47 @@
 			"\1\4\3\uffff\1\4\1\uffff\1\1\1\4\1\uffff\1\4\3\uffff\2\4\3\uffff\1\3"+
 			"\1\4\1\1\5\uffff\2\4\3\1\1\4\1\uffff\2\4\3\uffff\1\4\1\uffff\1\1\1\4"+
 			"\1\1\5\uffff\1\1\4\uffff\2\4\3\uffff\1\1\2\4\1\uffff\1\4\4\uffff\2\4"+
-			"\3\1\2\uffff\3\1\1\uffff\2\1\2\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
-			"\3\1\1\uffff\1\1\1\uffff\1\2\2\1\3\uffff\1\4\2\uffff\2\4\5\1\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\1",
+			"\3\1\2\uffff\3\1\1\uffff\2\1\2\uffff\1\1\1\uffff\3\1\1\uffff\3\1\1\uffff"+
+			"\2\1\1\2\2\1\3\uffff\1\4\2\uffff\2\4\5\1\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\1",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\6\1\4\1\5\1\uffff\4\4\3\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\1\4\1\5\3\uffff\2\4\3\uffff\3\4"+
 			"\1\uffff\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\5",
+			"\3\4\1\uffff\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\4\1\5",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\6\1\4\1\7\1\uffff\4\4\3\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\1\4\1\7\3\uffff\2\4\3\uffff\3\4"+
 			"\1\uffff\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\7",
+			"\3\4\1\uffff\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\4\1\7",
 			"\3\4\2\uffff\5\4\3\uffff\4\4\1\uffff\4\4\3\uffff\1\4\1\10\1\uffff\1"+
 			"\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\2\4\3\uffff\2\4\3\uffff\3\4\1\uffff"+
-			"\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff\2\4\2\uffff"+
-			"\1\4\1\uffff\2\4",
+			"\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff"+
+			"\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\2\4",
 			"",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\6\1\4\1\5\1\uffff\4\4\3\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\1\4\1\5\3\uffff\2\4\3\uffff\3\4"+
 			"\1\uffff\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\5",
+			"\3\4\1\uffff\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\4\1\5",
 			"",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\6\1\4\1\7\1\uffff\4\4\3\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\1\4\1\7\3\uffff\2\4\3\uffff\3\4"+
 			"\1\uffff\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\7",
+			"\3\4\1\uffff\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\4\1\7",
 			"\1\4\113\uffff\1\11",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\6\1\4\1\7\1\uffff\4\4\3\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\3\4\1\uffff\2\4\3\uffff\3\4\6\uffff"+
 			"\11\4\2\uffff\1\4\1\uffff\3\4\5\uffff\1\4\1\7\3\uffff\2\4\3\uffff\3\4"+
 			"\1\uffff\1\4\4\uffff\6\4\1\uffff\3\4\1\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\7\4\2\uffff\7\4\2\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\7"
+			"\3\4\1\uffff\3\4\1\uffff\11\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
+			"\1\4\1\7"
 	};
 
 	static final short[] DFA394_eot = DFA.unpackEncodedString(DFA394_eotS);
@@ -41304,14 +41340,14 @@
 			"\1\4\3\uffff\5\4\3\uffff\1\4\2\uffff\1\3\1\uffff\1\4\1\2\16\uffff\1"+
 			"\4\13\uffff\1\4\1\uffff\1\4\7\uffff\3\4\5\uffff\1\2\3\uffff\1\4\1\uffff"+
 			"\1\4\5\uffff\1\4\1\3\10\uffff\1\4\12\uffff\3\4\1\2\1\uffff\3\4\1\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff"+
-			"\3\4\10\uffff\5\4\10\uffff\1\4\1\3",
+			"\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\10\uffff\5\4\10"+
+			"\uffff\1\4\1\3",
 			"",
 			"\1\4\3\uffff\5\4\3\uffff\1\4\2\uffff\1\3\1\uffff\1\4\1\2\16\uffff\1"+
 			"\4\13\uffff\1\4\1\uffff\1\4\7\uffff\3\4\5\uffff\1\2\3\uffff\1\4\1\uffff"+
 			"\1\4\5\uffff\1\4\1\3\10\uffff\1\4\12\uffff\3\4\1\2\1\uffff\3\4\1\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff"+
-			"\3\4\10\uffff\5\4\10\uffff\1\4\1\3",
+			"\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\10\uffff\5\4\10"+
+			"\uffff\1\4\1\3",
 			""
 	};
 
@@ -41428,9 +41464,8 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\3\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\5\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff"+
-			"\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\6\2\1\uffff\12\2\1\uffff"+
+			"\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
 			"",
 			""
 	};
@@ -41490,9 +41525,9 @@
 			"\2\2\2\uffff\5\2\3\uffff\2\2\1\uffff\1\1\1\uffff\1\2\5\uffff\3\2\7\uffff"+
 			"\1\2\2\uffff\2\2\2\uffff\2\2\3\uffff\1\2\1\uffff\1\2\6\uffff\4\2\2\uffff"+
 			"\1\2\6\uffff\3\2\5\uffff\1\2\1\1\10\uffff\1\2\2\uffff\2\2\2\uffff\1\2"+
-			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\4\2\1\uffff\1\2\1\uffff"+
-			"\3\2\1\3\1\2\1\uffff\4\2\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
-			"\5\2\6\uffff\1\2\1\uffff\1\2\1\1",
+			"\3\uffff\4\2\1\uffff\3\2\1\uffff\2\2\1\uffff\6\2\1\uffff\3\2\1\3\6\2"+
+			"\1\uffff\1\2\1\uffff\1\2\1\uffff\1\2\1\uffff\5\2\6\uffff\1\2\1\uffff"+
+			"\1\2\1\1",
 			"",
 			""
 	};
@@ -41551,15 +41586,15 @@
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\1\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\1\10\uffff\1\4\2\uffff\2\4\2\uffff\1\4"+
-			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\2\1\3\1\uffff\3\4\1\uffff\1\4"+
-			"\1\uffff\3\4\1\uffff\1\4\1\uffff\4\4\1\uffff\1\4\1\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\1",
+			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\2\1\3\1\uffff\5\4\1\uffff\3\4"+
+			"\1\uffff\6\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff"+
+			"\1\4\1\uffff\1\4\1\1",
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\1\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\1\10\uffff\1\4\2\uffff\2\4\2\uffff\1\4"+
-			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\5\1\3\4\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\4\1\uffff\4\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff"+
-			"\5\4\6\uffff\1\4\1\uffff\1\4\1\1",
+			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\5\1\3\6\4\1\uffff\3\4\1\uffff"+
+			"\6\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff\1\4\1\uffff"+
+			"\1\4\1\1",
 			"\1\4\1\uffff\1\6\35\uffff\1\3\7\uffff\1\3\26\uffff\1\6\105\uffff\1\6",
 			"",
 			"",
@@ -41680,15 +41715,15 @@
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\1\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\1\10\uffff\1\4\2\uffff\2\4\2\uffff\1\4"+
-			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\2\1\3\1\uffff\3\4\1\uffff\1\4"+
-			"\1\uffff\3\4\1\uffff\1\4\1\uffff\4\4\1\uffff\1\4\1\uffff\1\4\1\uffff"+
-			"\1\4\1\uffff\5\4\6\uffff\1\4\1\uffff\1\4\1\1",
+			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\2\1\3\1\uffff\5\4\1\uffff\3\4"+
+			"\1\uffff\6\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff"+
+			"\1\4\1\uffff\1\4\1\1",
 			"\2\4\2\uffff\5\4\3\uffff\2\4\1\uffff\1\1\1\uffff\1\4\5\uffff\3\4\7\uffff"+
 			"\1\4\2\uffff\2\4\2\uffff\2\4\3\uffff\1\4\1\uffff\1\4\6\uffff\4\4\2\uffff"+
 			"\1\4\6\uffff\3\4\5\uffff\1\4\1\1\10\uffff\1\4\2\uffff\2\4\2\uffff\1\4"+
-			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\5\1\3\4\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\4\1\uffff\4\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff"+
-			"\5\4\6\uffff\1\4\1\uffff\1\4\1\1",
+			"\3\uffff\4\4\1\uffff\3\4\1\uffff\1\4\1\5\1\3\6\4\1\uffff\3\4\1\uffff"+
+			"\6\4\1\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\5\4\6\uffff\1\4\1\uffff"+
+			"\1\4\1\1",
 			"\1\4\1\uffff\1\6\35\uffff\1\3\7\uffff\1\3\26\uffff\1\6\105\uffff\1\6",
 			"",
 			"",
@@ -41752,14 +41787,14 @@
 			"\2\uffff\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff"+
 			"\3\3\5\uffff\6\3\1\uffff\2\3\3\uffff\1\3\1\uffff\3\3\5\uffff\1\3\1\1"+
 			"\3\uffff\2\3\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff"+
-			"\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\3\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
+			"\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff\1\3\2\uffff"+
+			"\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"\3\3\2\uffff\5\3\3\uffff\1\3\1\uffff\1\2\1\1\1\uffff\1\3\6\uffff\1\3"+
 			"\2\uffff\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff"+
 			"\3\3\5\uffff\6\3\1\uffff\2\3\3\uffff\1\3\1\uffff\3\3\5\uffff\1\3\1\1"+
 			"\3\uffff\2\3\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff"+
-			"\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\3\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
+			"\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\3\uffff\1\3\2\uffff"+
+			"\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"",
 			""
 	};
@@ -42215,16 +42250,14 @@
 			"\2\uffff\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff"+
 			"\1\3\1\uffff\1\3\6\uffff\5\3\1\uffff\2\3\5\uffff\3\3\5\uffff\1\3\1\1"+
 			"\4\uffff\1\3\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff"+
-			"\2\3\2\uffff\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff"+
-			"\3\3\1\uffff\1\2\1\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff"+
-			"\1\3\1\1",
+			"\2\3\2\uffff\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\1\uffff\1\2\1\uffff"+
+			"\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\1\uffff\1\2\1\1\1\uffff\1\4\6\uffff\1\4"+
 			"\2\uffff\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\1\4\3\uffff\2\4\3\uffff"+
 			"\1\4\1\uffff\1\4\6\uffff\5\4\1\uffff\2\4\5\uffff\3\4\5\uffff\1\4\1\1"+
 			"\4\uffff\1\4\3\uffff\3\4\1\uffff\1\4\4\uffff\5\4\2\uffff\3\4\1\uffff"+
-			"\2\4\2\uffff\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff"+
-			"\3\4\1\uffff\1\2\1\uffff\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff"+
-			"\1\4\1\1",
+			"\2\4\2\uffff\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\1\uffff\1\2\1\uffff"+
+			"\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
 			"",
 			"",
 			""
@@ -42285,14 +42318,14 @@
 			"\1\3\3\uffff\1\3\1\uffff\2\3\1\uffff\1\3\3\uffff\2\3\3\uffff\1\3\1\uffff"+
 			"\1\3\6\uffff\5\3\1\uffff\2\3\5\uffff\3\3\5\uffff\1\3\1\1\4\uffff\1\3"+
 			"\3\uffff\3\3\1\uffff\1\3\4\uffff\5\3\2\uffff\3\3\1\uffff\2\3\2\uffff"+
-			"\1\3\1\uffff\1\3\1\uffff\1\3\1\uffff\3\3\1\uffff\1\3\1\uffff\3\3\1\uffff"+
-			"\1\2\1\uffff\1\3\2\uffff\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
+			"\1\3\1\uffff\3\3\1\uffff\3\3\1\uffff\5\3\1\uffff\1\2\1\uffff\1\3\2\uffff"+
+			"\7\3\2\uffff\2\3\2\uffff\1\3\1\uffff\1\3\1\1",
 			"\3\4\2\uffff\5\4\3\uffff\1\4\2\uffff\1\1\1\uffff\1\4\6\uffff\1\4\2\uffff"+
 			"\1\4\3\uffff\1\4\1\uffff\2\4\1\uffff\1\4\3\uffff\2\4\3\uffff\1\4\1\uffff"+
 			"\1\4\6\uffff\5\4\1\uffff\2\4\5\uffff\3\4\5\uffff\1\4\1\1\4\uffff\1\4"+
 			"\3\uffff\3\4\1\uffff\1\4\4\uffff\5\4\2\uffff\3\4\1\uffff\2\4\2\uffff"+
-			"\1\4\1\uffff\1\4\1\uffff\1\4\1\uffff\3\4\1\uffff\1\4\1\uffff\3\4\1\uffff"+
-			"\1\2\1\uffff\1\4\2\uffff\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
+			"\1\4\1\uffff\3\4\1\uffff\3\4\1\uffff\5\4\1\uffff\1\2\1\uffff\1\4\2\uffff"+
+			"\7\4\2\uffff\2\4\2\uffff\1\4\1\uffff\1\4\1\1",
 			"",
 			"",
 			""
@@ -42339,8 +42372,8 @@
 	public static final BitSet FOLLOW_ws_in_styleSheet99 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
 	public static final BitSet FOLLOW_charSet_in_styleSheet109 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEF9B9C0C8060E04L,0x0000000001807D57L});
 	public static final BitSet FOLLOW_ws_in_styleSheet111 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
-	public static final BitSet FOLLOW_imports_in_styleSheet125 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C0C8020E04L,0x0000000000807D57L});
-	public static final BitSet FOLLOW_namespaces_in_styleSheet136 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C0C8020E04L,0x0000000000807D57L});
+	public static final BitSet FOLLOW_imports_in_styleSheet125 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
+	public static final BitSet FOLLOW_namespaces_in_styleSheet136 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
 	public static final BitSet FOLLOW_body_in_styleSheet147 = new BitSet(new long[]{0x0000000000000000L});
 	public static final BitSet FOLLOW_EOF_in_styleSheet155 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_namespace_in_namespaces172 = new BitSet(new long[]{0x0000000000200002L,0x0000000000060000L,0x0000000001000000L});
@@ -42363,63 +42396,63 @@
 	public static final BitSet FOLLOW_ws_in_imports309 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
 	public static final BitSet FOLLOW_SEMI_in_imports312 = new BitSet(new long[]{0x0020000000200002L,0x4040000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_imports314 = new BitSet(new long[]{0x0020000000000002L,0x4040000000000000L});
-	public static final BitSet FOLLOW_sass_use_in_imports347 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000004L});
-	public static final BitSet FOLLOW_ws_in_imports349 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_imports352 = new BitSet(new long[]{0x0020000000200002L,0x4040000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_imports354 = new BitSet(new long[]{0x0020000000000002L,0x4040000000000000L});
-	public static final BitSet FOLLOW_sass_forward_in_imports387 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000004L});
-	public static final BitSet FOLLOW_ws_in_imports389 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_imports392 = new BitSet(new long[]{0x0020000000200002L,0x4040000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_imports394 = new BitSet(new long[]{0x0020000000000002L,0x4040000000000000L});
-	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem430 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
-	public static final BitSet FOLLOW_ws_in_importItem432 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
-	public static final BitSet FOLLOW_resourceIdentifier_in_importItem435 = new BitSet(new long[]{0xE028848000A47C42L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_importItem445 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_importItem448 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem481 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
-	public static final BitSet FOLLOW_ws_in_importItem483 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
-	public static final BitSet FOLLOW_resourceIdentifier_in_importItem486 = new BitSet(new long[]{0xE028848000B47C42L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_importItem489 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_importItem492 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
-	public static final BitSet FOLLOW_ws_in_importItem494 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
-	public static final BitSet FOLLOW_resourceIdentifier_in_importItem497 = new BitSet(new long[]{0xE028848000B47C42L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_importItem509 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_importItem512 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem536 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001040020L});
-	public static final BitSet FOLLOW_ws_in_importItem538 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L,0x0000000000040020L});
-	public static final BitSet FOLLOW_LPAREN_in_importItem542 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_less_import_types_in_importItem544 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_importItem546 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
-	public static final BitSet FOLLOW_ws_in_importItem548 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
-	public static final BitSet FOLLOW_resourceIdentifier_in_importItem553 = new BitSet(new long[]{0xE028848000A47C42L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_importItem563 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_importItem566 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_USE_in_sass_use595 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use597 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
-	public static final BitSet FOLLOW_resourceIdentifier_in_sass_use599 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use602 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_sass_use_as_in_sass_use604 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use609 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_sass_use_with_in_sass_use611 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_sass_use_as636 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use_as638 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_sass_use_as640 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_sass_use_with663 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with665 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_sass_use_with668 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with670 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_sass_use_with_declaration_in_sass_use_with673 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with677 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_use_with680 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with682 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_sass_use_with_declaration_in_sass_use_with685 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with690 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_sass_use_with693 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_variable_in_sass_use_with_declaration714 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with_declaration716 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_sass_use_with_declaration719 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_use_with_declaration721 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_sass_use_with_declaration724 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_use_in_imports349 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000004L});
+	public static final BitSet FOLLOW_ws_in_imports351 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
+	public static final BitSet FOLLOW_SEMI_in_imports354 = new BitSet(new long[]{0x0020000000200002L,0x4040000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_imports356 = new BitSet(new long[]{0x0020000000000002L,0x4040000000000000L});
+	public static final BitSet FOLLOW_sass_forward_in_imports391 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000004L});
+	public static final BitSet FOLLOW_ws_in_imports393 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
+	public static final BitSet FOLLOW_SEMI_in_imports396 = new BitSet(new long[]{0x0020000000200002L,0x4040000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_imports398 = new BitSet(new long[]{0x0020000000000002L,0x4040000000000000L});
+	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem434 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
+	public static final BitSet FOLLOW_ws_in_importItem436 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
+	public static final BitSet FOLLOW_resourceIdentifier_in_importItem439 = new BitSet(new long[]{0xE028848000A47C42L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_importItem449 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_importItem452 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem485 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
+	public static final BitSet FOLLOW_ws_in_importItem487 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
+	public static final BitSet FOLLOW_resourceIdentifier_in_importItem490 = new BitSet(new long[]{0xE028848000B47C42L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_importItem493 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_importItem496 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
+	public static final BitSet FOLLOW_ws_in_importItem498 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
+	public static final BitSet FOLLOW_resourceIdentifier_in_importItem501 = new BitSet(new long[]{0xE028848000B47C42L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_importItem513 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_importItem516 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IMPORT_SYM_in_importItem540 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001040020L});
+	public static final BitSet FOLLOW_ws_in_importItem542 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L,0x0000000000040020L});
+	public static final BitSet FOLLOW_LPAREN_in_importItem546 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_less_import_types_in_importItem548 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_importItem550 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001040020L});
+	public static final BitSet FOLLOW_ws_in_importItem552 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
+	public static final BitSet FOLLOW_resourceIdentifier_in_importItem557 = new BitSet(new long[]{0xE028848000A47C42L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_importItem567 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_importItem570 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_USE_in_sass_use597 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use599 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
+	public static final BitSet FOLLOW_resourceIdentifier_in_sass_use601 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use604 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_sass_use_as_in_sass_use606 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use611 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_sass_use_with_in_sass_use613 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_sass_use_as638 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use_as640 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_sass_use_as642 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_sass_use_with665 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with667 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_sass_use_with670 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with672 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_sass_use_with_declaration_in_sass_use_with675 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with679 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_sass_use_with682 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with684 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_sass_use_with_declaration_in_sass_use_with687 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with692 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_sass_use_with695 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_variable_in_sass_use_with_declaration716 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with_declaration718 = new BitSet(new long[]{0x0000000000080000L});
+	public static final BitSet FOLLOW_COLON_in_sass_use_with_declaration721 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_use_with_declaration723 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_sass_use_with_declaration726 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_SASS_FORWARD_in_sass_forward752 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward754 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040020L});
 	public static final BitSet FOLLOW_resourceIdentifier_in_sass_forward756 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
@@ -42435,19 +42468,19 @@
 	public static final BitSet FOLLOW_IDENT_in_sass_forward_as817 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IDENT_in_sass_forward_with840 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_with842 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_sass_forward_with845 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_forward_with847 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_LPAREN_in_sass_forward_with845 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_forward_with847 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
 	public static final BitSet FOLLOW_sass_forward_with_declaration_in_sass_forward_with850 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_with854 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_forward_with857 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_forward_with859 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_COMMA_in_sass_forward_with857 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_forward_with859 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
 	public static final BitSet FOLLOW_sass_forward_with_declaration_in_sass_forward_with862 = new BitSet(new long[]{0x0000000000300000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_with867 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_RPAREN_in_sass_forward_with870 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_variable_in_sass_forward_with_declaration891 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_with_declaration893 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_sass_forward_with_declaration896 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_forward_with_declaration898 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_sass_forward_with_declaration896 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_forward_with_declaration898 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_expression_in_sass_forward_with_declaration901 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IDENT_in_sass_forward_hide924 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_hide926 = new BitSet(new long[]{0x0008000000000000L});
@@ -42463,24 +42496,24 @@
 	public static final BitSet FOLLOW_COMMA_in_sass_forward_show974 = new BitSet(new long[]{0x0008000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_forward_show976 = new BitSet(new long[]{0x0008000000000000L});
 	public static final BitSet FOLLOW_IDENT_in_sass_forward_show979 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_MEDIA_SYM_in_media998 = new BitSet(new long[]{0xE028848000A47C40L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_media1000 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_MEDIA_SYM_in_media998 = new BitSet(new long[]{0xE028848000A47C40L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_media1000 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
 	public static final BitSet FOLLOW_mediaQueryList_in_media1018 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_media1026 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_media1033 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEB9B9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_media1035 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_media1038 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_media1033 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEF9B9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_media1035 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_media1038 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_mediaBody_in_media1048 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_media1055 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_mediaBodyItem_in_mediaBody1089 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_mediaBodyItem_in_mediaBody1089 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001A07D57L});
 	public static final BitSet FOLLOW_ws_in_mediaBody1099 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_mediaBody1102 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_mediaBody1106 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_SEMI_in_mediaBody1133 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_mediaBody1135 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_SEMI_in_mediaBody1102 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_mediaBody1106 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_SEMI_in_mediaBody1133 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_mediaBody1135 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_sass_extend_in_mediaBody1154 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000004L});
-	public static final BitSet FOLLOW_ws_in_mediaBody1157 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_SEMI_in_mediaBody1162 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_ws_in_mediaBody1157 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_SEMI_in_mediaBody1162 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_cp_mixin_declaration_in_mediaBodyItem1236 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_mixin_call_in_mediaBodyItem1269 = new BitSet(new long[]{0x0010000000200002L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_mediaBodyItem1272 = new BitSet(new long[]{0x0010000000000000L});
@@ -42502,8 +42535,8 @@
 	public static final BitSet FOLLOW_supportsAtRule_in_mediaBodyItem1468 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_mediaQuery_in_mediaQueryList1482 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_mediaQueryList1494 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_mediaQueryList1497 = new BitSet(new long[]{0xE028848000A47C40L,0xAEA9B9C008460A80L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_mediaQueryList1499 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_COMMA_in_mediaQueryList1497 = new BitSet(new long[]{0xE028848000A47C40L,0xEEE9B9C008460A80L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_mediaQueryList1499 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
 	public static final BitSet FOLLOW_mediaQuery_in_mediaQueryList1502 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_mediaQueryOperator_in_mediaQuery1521 = new BitSet(new long[]{0x0008840000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_mediaQuery1523 = new BitSet(new long[]{0x0008840000000000L});
@@ -42523,28 +42556,28 @@
 	public static final BitSet FOLLOW_IDENT_in_mediaType1620 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_GEN_in_mediaType1624 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_mediaType1630 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LPAREN_in_mediaExpression1655 = new BitSet(new long[]{0xE028848000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_mediaExpression1657 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_LPAREN_in_mediaExpression1655 = new BitSet(new long[]{0xE028848000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_mediaExpression1657 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
 	public static final BitSet FOLLOW_mediaFeature_in_mediaExpression1660 = new BitSet(new long[]{0x0000000000280000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_mediaFeatureValue_in_mediaExpression1662 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_mediaExpression1665 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_RPAREN_in_mediaExpression1668 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_mediaExpression1685 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_ws_in_mediaFeatureValue1706 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_mediaFeatureValue1709 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_mediaFeatureValue1711 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_mediaFeatureValue1709 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_mediaFeatureValue1711 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_expression_in_mediaFeatureValue1730 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_expression_in_mediaFeatureValue1750 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IDENT_in_mediaFeature1770 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_GEN_in_mediaFeature1774 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_variable_in_mediaFeature1782 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_mediaFeature1786 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_bodyItem_in_body1820 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001807D57L});
+	public static final BitSet FOLLOW_bodyItem_in_body1820 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001807D57L});
 	public static final BitSet FOLLOW_ws_in_body1830 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_body1833 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001807D57L});
-	public static final BitSet FOLLOW_ws_in_body1837 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000807D57L});
-	public static final BitSet FOLLOW_SEMI_in_body1864 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xAEB9B9C0C8060E04L,0x0000000001807D57L});
-	public static final BitSet FOLLOW_ws_in_body1866 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xAEB9B9C0C8020E04L,0x0000000000807D57L});
+	public static final BitSet FOLLOW_SEMI_in_body1833 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001807D57L});
+	public static final BitSet FOLLOW_ws_in_body1837 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
+	public static final BitSet FOLLOW_SEMI_in_body1864 = new BitSet(new long[]{0xF028CC80E0AC7CC2L,0xEEF9B9C0C8060E04L,0x0000000001807D57L});
+	public static final BitSet FOLLOW_ws_in_body1866 = new BitSet(new long[]{0xF028CC80E08C7CC2L,0xEEF9B9C0C8020E04L,0x0000000000807D57L});
 	public static final BitSet FOLLOW_cp_mixin_declaration_in_bodyItem1946 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_mixin_call_in_bodyItem1979 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_mixin_call_in_bodyItem1998 = new BitSet(new long[]{0x0000000000000002L});
@@ -42560,9 +42593,9 @@
 	public static final BitSet FOLLOW_ws_in_supportsAtRule2145 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400080L});
 	public static final BitSet FOLLOW_supportsCondition_in_supportsAtRule2148 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_supportsAtRule2150 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_supportsAtRule2153 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEB9B9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_supportsAtRule2155 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_supportsAtRule2158 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_supportsAtRule2153 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEF9B9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_supportsAtRule2155 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_supportsAtRule2158 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_mediaBody_in_supportsAtRule2160 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_supportsAtRule2163 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_NOT_in_supportsCondition2176 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
@@ -42583,8 +42616,8 @@
 	public static final BitSet FOLLOW_key_or_in_supportsDisjunction2301 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_supportsDisjunction2303 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
 	public static final BitSet FOLLOW_supportsInParens_in_supportsDisjunction2305 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LPAREN_in_supportsInParens2325 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C0C8460E84L,0x0000000001A07D53L});
-	public static final BitSet FOLLOW_ws_in_supportsInParens2327 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C0C8420E84L,0x0000000000A07D53L});
+	public static final BitSet FOLLOW_LPAREN_in_supportsInParens2325 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C0C8460E84L,0x0000000001A07D53L});
+	public static final BitSet FOLLOW_ws_in_supportsInParens2327 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C0C8420E84L,0x0000000000A07D53L});
 	public static final BitSet FOLLOW_supportsCondition_in_supportsInParens2331 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_supportsFeature_in_supportsInParens2335 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_supportsInParens2338 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
@@ -42604,8 +42637,8 @@
 	public static final BitSet FOLLOW_STRING_in_atRuleId2460 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_variable_in_atRuleId2468 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_atRuleId2472 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_AT_IDENT_in_generic_at_rule2488 = new BitSet(new long[]{0xE828808000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C23L});
-	public static final BitSet FOLLOW_ws_in_generic_at_rule2490 = new BitSet(new long[]{0xE828808000847C40L,0xAEA9B9C008020A00L,0x0000000000807C23L});
+	public static final BitSet FOLLOW_AT_IDENT_in_generic_at_rule2488 = new BitSet(new long[]{0xE828808000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C23L});
+	public static final BitSet FOLLOW_ws_in_generic_at_rule2490 = new BitSet(new long[]{0xE828808000847C40L,0xEEE9B9C008020A00L,0x0000000000807C23L});
 	public static final BitSet FOLLOW_atRuleId_in_generic_at_rule2495 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_generic_at_rule2497 = new BitSet(new long[]{0x0800000000000000L});
 	public static final BitSet FOLLOW_LBRACE_in_generic_at_rule2511 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
@@ -42619,12 +42652,12 @@
 	public static final BitSet FOLLOW_ws_in_moz_document2560 = new BitSet(new long[]{0x0000000000000000L,0x0000000000007000L,0x0000000000040000L});
 	public static final BitSet FOLLOW_moz_document_function_in_moz_document2563 = new BitSet(new long[]{0x0800000000300000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_moz_document2565 = new BitSet(new long[]{0x0800000000100000L});
-	public static final BitSet FOLLOW_LBRACE_in_moz_document2572 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEB9B9C4C8060E04L,0x0000000001807D57L});
-	public static final BitSet FOLLOW_ws_in_moz_document2574 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEB9B9C4C8020E04L,0x0000000000807D57L});
+	public static final BitSet FOLLOW_LBRACE_in_moz_document2572 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEF9B9C4C8060E04L,0x0000000001807D57L});
+	public static final BitSet FOLLOW_ws_in_moz_document2574 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEF9B9C4C8020E04L,0x0000000000807D57L});
 	public static final BitSet FOLLOW_body_in_moz_document2579 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_moz_document2584 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_WEBKIT_KEYFRAMES_SYM_in_webkitKeyframes2621 = new BitSet(new long[]{0xE028808000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C23L});
-	public static final BitSet FOLLOW_ws_in_webkitKeyframes2623 = new BitSet(new long[]{0xE028808000847C40L,0xAEA9B9C008020A00L,0x0000000000807C23L});
+	public static final BitSet FOLLOW_WEBKIT_KEYFRAMES_SYM_in_webkitKeyframes2621 = new BitSet(new long[]{0xE028808000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C23L});
+	public static final BitSet FOLLOW_ws_in_webkitKeyframes2623 = new BitSet(new long[]{0xE028808000847C40L,0xEEE9B9C008020A00L,0x0000000000807C23L});
 	public static final BitSet FOLLOW_atRuleId_in_webkitKeyframes2626 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_webkitKeyframes2628 = new BitSet(new long[]{0x0800000000000000L});
 	public static final BitSet FOLLOW_LBRACE_in_webkitKeyframes2632 = new BitSet(new long[]{0x0008000000200000L,0x0000100410040000L,0x0000000001000000L});
@@ -42634,9 +42667,9 @@
 	public static final BitSet FOLLOW_RBRACE_in_webkitKeyframes2650 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_webkitKeyframeSelectors_in_webkitKeyframesBlock2662 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_webkitKeyframesBlock2664 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_webkitKeyframesBlock2668 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_webkitKeyframesBlock2671 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_webkitKeyframesBlock2674 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_webkitKeyframesBlock2668 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_webkitKeyframesBlock2671 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_webkitKeyframesBlock2674 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declarations_in_webkitKeyframesBlock2678 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_webkitKeyframesBlock2682 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_sass_content_in_webkitKeyframesBlock2699 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000004L});
@@ -42656,14 +42689,14 @@
 	public static final BitSet FOLLOW_ws_in_page2789 = new BitSet(new long[]{0x0800000000080000L});
 	public static final BitSet FOLLOW_pseudoPage_in_page2796 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_page2798 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_page2811 = new BitSet(new long[]{0xE028848000A47CC0L,0xAEA9B9C408060E00L,0x0000000001A07C17L});
-	public static final BitSet FOLLOW_ws_in_page2853 = new BitSet(new long[]{0xE028848000847CC0L,0xAEA9B9C008020E00L,0x0000000000A07C17L});
-	public static final BitSet FOLLOW_SEMI_in_page2860 = new BitSet(new long[]{0xE028848000A47CC0L,0xAEA9B9C008060E00L,0x0000000001A07C13L});
-	public static final BitSet FOLLOW_ws_in_page2862 = new BitSet(new long[]{0xE028848000847CC0L,0xAEA9B9C008020E00L,0x0000000000A07C13L});
-	public static final BitSet FOLLOW_SEMI_in_page2869 = new BitSet(new long[]{0xE028848000A47CC0L,0xAEA9B9C008060E00L,0x0000000001A07C13L});
-	public static final BitSet FOLLOW_ws_in_page2871 = new BitSet(new long[]{0xE028848000847CC0L,0xAEA9B9C008020E00L,0x0000000000A07C13L});
-	public static final BitSet FOLLOW_propertyDeclaration_in_page2878 = new BitSet(new long[]{0xE028848000A47CC0L,0xAEA9B9C408060E00L,0x0000000001A07C17L});
-	public static final BitSet FOLLOW_margin_in_page2881 = new BitSet(new long[]{0xE028848000A47CC0L,0xAEA9B9C408060E00L,0x0000000001A07C17L});
+	public static final BitSet FOLLOW_LBRACE_in_page2811 = new BitSet(new long[]{0xE028848000A47CC0L,0xEEE9B9C408060E00L,0x0000000001A07C17L});
+	public static final BitSet FOLLOW_ws_in_page2853 = new BitSet(new long[]{0xE028848000847CC0L,0xEEE9B9C008020E00L,0x0000000000A07C17L});
+	public static final BitSet FOLLOW_SEMI_in_page2860 = new BitSet(new long[]{0xE028848000A47CC0L,0xEEE9B9C008060E00L,0x0000000001A07C13L});
+	public static final BitSet FOLLOW_ws_in_page2862 = new BitSet(new long[]{0xE028848000847CC0L,0xEEE9B9C008020E00L,0x0000000000A07C13L});
+	public static final BitSet FOLLOW_SEMI_in_page2869 = new BitSet(new long[]{0xE028848000A47CC0L,0xEEE9B9C008060E00L,0x0000000001A07C13L});
+	public static final BitSet FOLLOW_ws_in_page2871 = new BitSet(new long[]{0xE028848000847CC0L,0xEEE9B9C008020E00L,0x0000000000A07C13L});
+	public static final BitSet FOLLOW_propertyDeclaration_in_page2878 = new BitSet(new long[]{0xE028848000A47CC0L,0xEEE9B9C408060E00L,0x0000000001A07C17L});
+	public static final BitSet FOLLOW_margin_in_page2881 = new BitSet(new long[]{0xE028848000A47CC0L,0xEEE9B9C408060E00L,0x0000000001A07C17L});
 	public static final BitSet FOLLOW_SEMI_in_page2899 = new BitSet(new long[]{0x0000000000200000L,0x0000000400040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_page2914 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_page2925 = new BitSet(new long[]{0x0000000000000002L});
@@ -42671,23 +42704,23 @@
 	public static final BitSet FOLLOW_ws_in_counterStyle2944 = new BitSet(new long[]{0x0008000000000000L});
 	public static final BitSet FOLLOW_IDENT_in_counterStyle2947 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_counterStyle2949 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_counterStyle2960 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_counterStyle2962 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToDeclarationsRule_in_counterStyle2965 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_counterStyle2960 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_counterStyle2962 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToDeclarationsRule_in_counterStyle2965 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declarations_in_counterStyle2969 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_counterStyle2980 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_FONT_FACE_SYM_in_fontFace2997 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_fontFace2999 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_fontFace3010 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_fontFace3012 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToDeclarationsRule_in_fontFace3015 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_fontFace3010 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_fontFace3012 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToDeclarationsRule_in_fontFace3015 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declarations_in_fontFace3019 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_fontFace3030 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_margin_sym_in_margin3044 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_margin3046 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_margin3049 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_margin3051 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToDeclarationsRule_in_margin3054 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_margin3049 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_margin3051 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToDeclarationsRule_in_margin3054 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declarations_in_margin3056 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_margin3059 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_COLON_in_pseudoPage3268 = new BitSet(new long[]{0x0008000000000000L});
@@ -42701,9 +42734,9 @@
 	public static final BitSet FOLLOW_sass_map_name_in_sass_map3425 = new BitSet(new long[]{0x0000000000080000L});
 	public static final BitSet FOLLOW_COLON_in_sass_map3427 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_map3429 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_sass_map3432 = new BitSet(new long[]{0xE028848000B47CC0L,0xAEA9BBC008860E00L,0x0000000001A07C23L});
-	public static final BitSet FOLLOW_ws_in_sass_map3434 = new BitSet(new long[]{0xE028848000947CC0L,0xAEA9BBC008820E00L,0x0000000000A07C23L});
-	public static final BitSet FOLLOW_syncToFollow_in_sass_map3437 = new BitSet(new long[]{0xE028848000947CC0L,0xAEA9BBC008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_LPAREN_in_sass_map3432 = new BitSet(new long[]{0xE028848000B47CC0L,0xEEE9BBC008860E00L,0x0000000001A07C23L});
+	public static final BitSet FOLLOW_ws_in_sass_map3434 = new BitSet(new long[]{0xE028848000947CC0L,0xEEE9BBC008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_syncToFollow_in_sass_map3437 = new BitSet(new long[]{0xE028848000947CC0L,0xEEE9BBC008820E00L,0x0000000000A07C23L});
 	public static final BitSet FOLLOW_sass_map_pairs_in_sass_map3456 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_RPAREN_in_sass_map3463 = new BitSet(new long[]{0x0000000000200002L,0x0100400000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_map3467 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
@@ -42711,12 +42744,12 @@
 	public static final BitSet FOLLOW_ws_in_sass_map3476 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
 	public static final BitSet FOLLOW_SASS_GLOBAL_in_sass_map3479 = new BitSet(new long[]{0x0000000000200002L,0x0100400000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_cp_variable_in_sass_map_name3503 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_map_pair_in_sass_map_pairs3537 = new BitSet(new long[]{0xE028848000B47CC2L,0xAEA9B9C008860E00L,0x0000000001A07C23L});
+	public static final BitSet FOLLOW_sass_map_pair_in_sass_map_pairs3537 = new BitSet(new long[]{0xE028848000B47CC2L,0xEEE9B9C008860E00L,0x0000000001A07C23L});
 	public static final BitSet FOLLOW_ws_in_sass_map_pairs3547 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_map_pairs3550 = new BitSet(new long[]{0xE028848000B47CC2L,0xAEA9B9C008860E00L,0x0000000001A07C23L});
-	public static final BitSet FOLLOW_ws_in_sass_map_pairs3554 = new BitSet(new long[]{0xE028848000947CC2L,0xAEA9B9C008820E00L,0x0000000000A07C23L});
-	public static final BitSet FOLLOW_COMMA_in_sass_map_pairs3581 = new BitSet(new long[]{0xE028848000B47CC2L,0xAEA9B9C008860E00L,0x0000000001A07C23L});
-	public static final BitSet FOLLOW_ws_in_sass_map_pairs3583 = new BitSet(new long[]{0xE028848000947CC2L,0xAEA9B9C008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_COMMA_in_sass_map_pairs3550 = new BitSet(new long[]{0xE028848000B47CC2L,0xEEE9B9C008860E00L,0x0000000001A07C23L});
+	public static final BitSet FOLLOW_ws_in_sass_map_pairs3554 = new BitSet(new long[]{0xE028848000947CC2L,0xEEE9B9C008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_COMMA_in_sass_map_pairs3581 = new BitSet(new long[]{0xE028848000B47CC2L,0xEEE9B9C008860E00L,0x0000000001A07C23L});
+	public static final BitSet FOLLOW_ws_in_sass_map_pairs3583 = new BitSet(new long[]{0xE028848000947CC2L,0xEEE9B9C008820E00L,0x0000000000A07C23L});
 	public static final BitSet FOLLOW_NUMBER_in_sass_map_pair3619 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_STRING_in_sass_map_pair3622 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000020L});
 	public static final BitSet FOLLOW_ws_in_sass_map_pair3625 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
@@ -42725,8 +42758,8 @@
 	public static final BitSet FOLLOW_property_in_sass_map_pair3641 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_sass_map_in_sass_map_pair3643 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_map_pair3646 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_sass_map_pair3649 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_map_pair3651 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_sass_map_pair3649 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_map_pair3651 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_expression_in_sass_map_pair3654 = new BitSet(new long[]{0x0010000000200002L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_sass_map_pair3657 = new BitSet(new long[]{0x0010000000000000L});
 	public static final BitSet FOLLOW_prio_in_sass_map_pair3660 = new BitSet(new long[]{0x0000000000000002L});
@@ -42746,18 +42779,18 @@
 	public static final BitSet FOLLOW_RPAREN_in_rule3756 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_selectorsGroup_in_rule3774 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_rule3786 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_rule3793 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_rule3795 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_rule3798 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_LBRACE_in_rule3793 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_rule3795 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_rule3798 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declarations_in_rule3808 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
 	public static final BitSet FOLLOW_RBRACE_in_rule3815 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SEMI_in_declarations3849 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C0C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_declarations3851 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_SEMI_in_declarations3849 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C0C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_declarations3851 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C0C8020E04L,0x0000000000A07D57L});
 	public static final BitSet FOLLOW_declaration_in_declarations3857 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000004L});
 	public static final BitSet FOLLOW_ws_in_declarations3862 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_declarations3866 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C0C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_declarations3868 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C0C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_ws_in_declarations3874 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C0C8020E04L,0x0000000000A07D53L});
+	public static final BitSet FOLLOW_SEMI_in_declarations3866 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C0C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_declarations3868 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C0C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_ws_in_declarations3874 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C0C8020E04L,0x0000000000A07D53L});
 	public static final BitSet FOLLOW_declaration_in_declarations3877 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000004L});
 	public static final BitSet FOLLOW_ws_in_declarations3883 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
 	public static final BitSet FOLLOW_SEMI_in_declarations3887 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000004L});
@@ -42865,8 +42898,8 @@
 	public static final BitSet FOLLOW_set_in_pseudo5425 = new BitSet(new long[]{0x0008840000000000L,0x0000000000400000L});
 	public static final BitSet FOLLOW_set_in_pseudo5488 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040080L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_pseudo5545 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_pseudo5548 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9BBF0B8860E0DL,0x0000000001A67F33L});
-	public static final BitSet FOLLOW_ws_in_pseudo5550 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9BBF0B8820E0DL,0x0000000000A67F33L});
+	public static final BitSet FOLLOW_LPAREN_in_pseudo5548 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9BBF0B8860E0DL,0x0000000001A67F33L});
+	public static final BitSet FOLLOW_ws_in_pseudo5550 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9BBF0B8820E0DL,0x0000000000A67F33L});
 	public static final BitSet FOLLOW_expression_in_pseudo5556 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_pseudo5558 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_STAR_in_pseudo5564 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
@@ -42892,17 +42925,17 @@
 	public static final BitSet FOLLOW_ws_in_pseudo5752 = new BitSet(new long[]{0x1008CC00E0080080L,0x00100200C0000404L,0x0000000000000110L});
 	public static final BitSet FOLLOW_selectorsGroup_in_pseudo5755 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_RPAREN_in_pseudo5758 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_STAR_in_propertyDeclaration5794 = new BitSet(new long[]{0xE028848000847CC0L,0xAEA9B9C008020E00L,0x0000000000A07C03L});
+	public static final BitSet FOLLOW_STAR_in_propertyDeclaration5794 = new BitSet(new long[]{0xE028848000847CC0L,0xEEE9B9C008020E00L,0x0000000000A07C03L});
 	public static final BitSet FOLLOW_property_in_propertyDeclaration5797 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_propertyDeclaration5799 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_propertyDeclaration5802 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_propertyDeclaration5804 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_propertyDeclaration5802 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_propertyDeclaration5804 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_propertyValue_in_propertyDeclaration5807 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_STAR_in_propertyDeclaration5816 = new BitSet(new long[]{0xE028848000847CC0L,0xAEA9B9C008020E00L,0x0000000000A07C03L});
+	public static final BitSet FOLLOW_STAR_in_propertyDeclaration5816 = new BitSet(new long[]{0xE028848000847CC0L,0xEEE9B9C008020E00L,0x0000000000A07C03L});
 	public static final BitSet FOLLOW_property_in_propertyDeclaration5819 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_propertyDeclaration5821 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_propertyDeclaration5824 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_propertyDeclaration5826 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_propertyDeclaration5824 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_propertyDeclaration5826 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_propertyValue_in_propertyDeclaration5829 = new BitSet(new long[]{0x0010000000200002L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_propertyDeclaration5832 = new BitSet(new long[]{0x0010000000000000L});
 	public static final BitSet FOLLOW_prio_in_propertyDeclaration5835 = new BitSet(new long[]{0x0000000000000002L});
@@ -42912,14 +42945,14 @@
 	public static final BitSet FOLLOW_set_in_expressionPredicate5974 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_SEMI_in_syncTo_SEMI6075 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IMPORTANT_SYM_in_prio6120 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_term_in_expression6137 = new BitSet(new long[]{0xF028C5A240B47CE2L,0xAEA9B9F0B8860E0DL,0x0000000001A67F2BL});
-	public static final BitSet FOLLOW_ws_in_expression6169 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_term_in_expression6137 = new BitSet(new long[]{0xF028C5A240B47CE2L,0xEEE9B9F0B8860E0DL,0x0000000001A67F2BL});
+	public static final BitSet FOLLOW_ws_in_expression6169 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_ws_in_expression6174 = new BitSet(new long[]{0x0000000000100000L,0x0000000000000000L,0x0000000000000008L});
-	public static final BitSet FOLLOW_operator_in_expression6177 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_expression6179 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_term_in_expression6188 = new BitSet(new long[]{0xF028C5A240B47CE2L,0xAEA9B9F0B8860E0DL,0x0000000001A67F2BL});
-	public static final BitSet FOLLOW_unaryOperator_in_term6213 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F038860A0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_term6215 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F038820A0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_operator_in_expression6177 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_expression6179 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_term_in_expression6188 = new BitSet(new long[]{0xF028C5A240B47CE2L,0xEEE9B9F0B8860E0DL,0x0000000001A67F2BL});
+	public static final BitSet FOLLOW_unaryOperator_in_term6213 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F038860A0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_term6215 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F038820A0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_function_in_term6244 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_VARIABLE_in_term6257 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IDENT_in_term6271 = new BitSet(new long[]{0x0000000000000002L});
@@ -42957,8 +42990,8 @@
 	public static final BitSet FOLLOW_PERCENTAGE_SYMBOL_in_cp_term_symbol6634 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_functionName_in_function6650 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_function6652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_function6657 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9BBF0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_function6659 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9BBF0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_LPAREN_in_function6657 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9BBF0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_function6659 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9BBF0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_fnAttributes_in_function6686 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
 	public static final BitSet FOLLOW_RPAREN_in_function6717 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_IDENT_in_functionName6769 = new BitSet(new long[]{0x0000000000080000L});
@@ -42968,15 +43001,15 @@
 	public static final BitSet FOLLOW_IDENT_in_functionName6780 = new BitSet(new long[]{0x0000000080000002L});
 	public static final BitSet FOLLOW_fnAttribute_in_fnAttributes6804 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000004L});
 	public static final BitSet FOLLOW_ws_in_fnAttributes6807 = new BitSet(new long[]{0x0000000000100000L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_COMMA_in_fnAttributes6811 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_SEMI_in_fnAttributes6817 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_fnAttributes6820 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COMMA_in_fnAttributes6811 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_SEMI_in_fnAttributes6817 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_fnAttributes6820 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_fnAttribute_in_fnAttributes6823 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000004L});
 	public static final BitSet FOLLOW_ws_in_fnAttributes6827 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_fnAttributeName_in_fnAttribute6864 = new BitSet(new long[]{0x0000000000280000L,0x0000000002040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_fnAttribute6866 = new BitSet(new long[]{0x0000000000080000L,0x0000000002000000L});
-	public static final BitSet FOLLOW_set_in_fnAttribute6869 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8860E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_fnAttribute6875 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_set_in_fnAttribute6869 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8860E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_fnAttribute6875 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_fnAttributeValue_in_fnAttribute6878 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_expression_in_fnAttribute6895 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_expression_in_fnAttribute6907 = new BitSet(new long[]{0x0000000000000002L});
@@ -42984,340 +43017,340 @@
 	public static final BitSet FOLLOW_DOT_in_fnAttributeName6933 = new BitSet(new long[]{0x0008000000000000L});
 	public static final BitSet FOLLOW_IDENT_in_fnAttributeName6935 = new BitSet(new long[]{0x0000000080000002L});
 	public static final BitSet FOLLOW_cp_variable_in_fnAttributeName6955 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_term_in_fnAttributeValue6978 = new BitSet(new long[]{0xF028C5A240A47CE2L,0xAEA9B9F0B8860E0DL,0x0000000001A67F2BL});
-	public static final BitSet FOLLOW_ws_in_fnAttributeValue7010 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_term_in_fnAttributeValue6978 = new BitSet(new long[]{0xF028C5A240A47CE2L,0xEEE9B9F0B8860E0DL,0x0000000001A67F2BL});
+	public static final BitSet FOLLOW_ws_in_fnAttributeValue7010 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_ws_in_fnAttributeValue7015 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-	public static final BitSet FOLLOW_SOLIDUS_in_fnAttributeValue7018 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_fnAttributeValue7020 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_term_in_fnAttributeValue7029 = new BitSet(new long[]{0xF028C5A240A47CE2L,0xAEA9B9F0B8860E0DL,0x0000000001A67F2BL});
+	public static final BitSet FOLLOW_SOLIDUS_in_fnAttributeValue7018 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_fnAttributeValue7020 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_term_in_fnAttributeValue7029 = new BitSet(new long[]{0xF028C5A240A47CE2L,0xEEE9B9F0B8860E0DL,0x0000000001A67F2BL});
 	public static final BitSet FOLLOW_cp_math_expression_in_fnAttributeValue7050 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_HASH_in_hexColor7064 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_variable_in_cp_variable_declaration7124 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7126 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_cp_variable_declaration7129 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7131 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_cp_variable_declaration7129 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7131 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_expression_list_in_cp_variable_declaration7134 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_variable_in_cp_variable_declaration7156 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7158 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_cp_variable_declaration7161 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7163 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_COLON_in_cp_variable_declaration7161 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7163 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_cp_expression_list_in_cp_variable_declaration7166 = new BitSet(new long[]{0x0000000000200002L,0x0100400000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7170 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
 	public static final BitSet FOLLOW_SASS_DEFAULT_in_cp_variable_declaration7173 = new BitSet(new long[]{0x0000000000200002L,0x0100400000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_cp_variable_declaration7179 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
 	public static final BitSet FOLLOW_SASS_GLOBAL_in_cp_variable_declaration7182 = new BitSet(new long[]{0x0000000000200002L,0x0100400000040000L,0x0000000001000000L});
 	public static final BitSet FOLLOW_set_in_cp_variable7222 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_VAR_in_cp_variable7406 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_cp_variable7410 = new BitSet(new long[]{0x0000000080000000L});
-	public static final BitSet FOLLOW_DOT_in_cp_variable7412 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
-	public static final BitSet FOLLOW_SASS_VAR_in_cp_variable7414 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_expression_in_cp_expression_list7444 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_expression_list7463 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_cp_expression_list7466 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression_list7468 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_cp_expression_list7471 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_LBRACE_in_cp_expression7507 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_cp_expression7509 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_cp_expression7512 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_declarations_in_cp_expression7514 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_cp_expression7517 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7533 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xAEA9B9F0B8C60E9FL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression7557 = new BitSet(new long[]{0x0008180006000000L,0x0000000000000012L});
-	public static final BitSet FOLLOW_cp_expression_operator_in_cp_expression7560 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression7562 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7566 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xAEA9B9F0B8C60E9FL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression7585 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7588 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xAEA9B9F0B8C60E9FL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_expression7606 = new BitSet(new long[]{0xE028848000B47CC0L,0xAEA9BBC008860E00L,0x0000000001A07C23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression7608 = new BitSet(new long[]{0xE028848000947CC0L,0xAEA9BBC008820E00L,0x0000000000A07C23L});
-	public static final BitSet FOLLOW_syncToFollow_in_cp_expression7611 = new BitSet(new long[]{0xE028848000947CC0L,0xAEA9BBC008820E00L,0x0000000000A07C23L});
-	public static final BitSet FOLLOW_sass_map_pairs_in_cp_expression7613 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_expression7616 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_key_or_in_cp_expression_operator7637 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_key_and_in_cp_expression_operator7641 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_CP_EQ_in_cp_expression_operator7646 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_CP_NOT_EQ_in_cp_expression_operator7650 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LESS_in_cp_expression_operator7654 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LESS_OR_EQ_in_cp_expression_operator7658 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_GREATER_in_cp_expression_operator7662 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_GREATER_OR_EQ_in_cp_expression_operator7666 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_NOT_in_cp_expression_atom7692 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8860E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression_atom7694 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_cp_expression_atom7725 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_expression_atom7741 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9BBF0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_expression_atom7743 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9BBF0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_list_in_cp_expression_atom7747 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_expression_atom7749 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_expression_atom7754 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expressions7786 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expressions7793 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expressions7795 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_cp_math_expression_atom_in_cp_math_expression7829 = new BitSet(new long[]{0x0000000000200002L,0x0000000080040400L,0x0000000001000018L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expression7871 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000400L,0x0000000000000018L});
-	public static final BitSet FOLLOW_set_in_cp_math_expression7874 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8860E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expression7884 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_atom_in_cp_math_expression7887 = new BitSet(new long[]{0x0000000000200002L,0x0000000080040400L,0x0000000001000018L});
-	public static final BitSet FOLLOW_term_in_cp_math_expression_atom7920 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IMPORTANT_SYM_in_cp_math_expression_atom7928 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_unaryOperator_in_cp_math_expression_atom7939 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7941 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_math_expression_atom7947 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8860E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7949 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expression_atom7952 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7954 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_math_expression_atom7957 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_declaration7997 = new BitSet(new long[]{0x0808000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_DOT_in_cp_mixin_declaration8004 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_declaration8006 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_HASH_in_cp_mixin_declaration8011 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8014 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_declaration8017 = new BitSet(new long[]{0xE028008001A47C40L,0xAEA9BBC008060A20L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8019 = new BitSet(new long[]{0xE028008001847C40L,0xAEA9BBC008020A20L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_args_list_in_cp_mixin_declaration8022 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_declaration8025 = new BitSet(new long[]{0x0808000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8030 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_less_mixin_guarded_in_cp_mixin_declaration8033 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_SASS_MIXIN_in_cp_mixin_declaration8057 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8059 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_declaration8061 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8064 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_declaration8067 = new BitSet(new long[]{0xE028008001A47C40L,0xAEA9BBC008060A20L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8069 = new BitSet(new long[]{0xE028008001847C40L,0xAEA9BBC008020A20L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_args_list_in_cp_mixin_declaration8072 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_declaration8075 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8089 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_block_in_cp_mixin_declaration8092 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_DOT_in_cp_mixin_call8128 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8130 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_HASH_in_cp_mixin_call8134 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_AT_IDENT_in_cp_mixin_call8138 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_call8142 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8158 = new BitSet(new long[]{0x0000080000000000L,0x0000000080000000L,0x0000000000000100L});
-	public static final BitSet FOLLOW_combinator_in_cp_mixin_call8161 = new BitSet(new long[]{0x0000400080200040L,0x0000000000040004L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8163 = new BitSet(new long[]{0x0000400080000040L,0x0000000000000004L});
-	public static final BitSet FOLLOW_DOT_in_cp_mixin_call8167 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8169 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_HASH_in_cp_mixin_call8173 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_AT_IDENT_in_cp_mixin_call8177 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_call8181 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
-	public static final BitSet FOLLOW_pseudo_in_cp_mixin_call8191 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8203 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_call8206 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9BBF0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8208 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9BBF0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_mixin_call_args_in_cp_mixin_call8211 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_call8214 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_INCLUDE_in_cp_mixin_call8239 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8241 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8243 = new BitSet(new long[]{0x0800000000200002L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8246 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_call8249 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9BBF0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8251 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9BBF0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_mixin_call_args_in_cp_mixin_call8254 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_call8257 = new BitSet(new long[]{0x0800000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call8262 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_cp_mixin_block_in_cp_mixin_call8265 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LBRACE_in_cp_mixin_block8294 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4D8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_block8296 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4D8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_cp_mixin_block8299 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4D8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_declarations_in_cp_mixin_block8310 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_webkitKeyframesBlock_in_cp_mixin_block8325 = new BitSet(new long[]{0x0008000000200000L,0x0000100410040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_block8327 = new BitSet(new long[]{0x0008000000000000L,0x0000100410000000L});
-	public static final BitSet FOLLOW_RBRACE_in_cp_mixin_block8339 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_cp_mixin_name8360 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8391 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_set_in_cp_mixin_call_args8395 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call_args8403 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8406 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_CP_DOTS_in_cp_mixin_call_args8412 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000004L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call_args8414 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000004L});
-	public static final BitSet FOLLOW_SEMI_in_cp_mixin_call_args8419 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_variable_in_cp_mixin_call_arg8451 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8453 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_cp_mixin_call_arg8456 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8458 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_cp_mixin_call_arg8461 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_cp_expression_in_cp_mixin_call_arg8473 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8481 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_arg_in_cp_args_list8528 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000020L,0x0000000000000004L});
-	public static final BitSet FOLLOW_set_in_cp_args_list8532 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_cp_args_list8542 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_arg_in_cp_args_list8545 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000020L,0x0000000000000004L});
-	public static final BitSet FOLLOW_set_in_cp_args_list8552 = new BitSet(new long[]{0x0000000001200002L,0x0000000000040020L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_args_list8560 = new BitSet(new long[]{0x0000000001000002L,0x0000000000000020L});
-	public static final BitSet FOLLOW_set_in_cp_args_list8568 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_args_list8576 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_set_in_cp_args_list8593 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_args_list8601 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_variable_in_cp_arg8624 = new BitSet(new long[]{0x0000000000280002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_arg8626 = new BitSet(new long[]{0x0000000000080002L});
-	public static final BitSet FOLLOW_COLON_in_cp_arg8631 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_cp_arg8633 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_cp_arg8636 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_cp_arg8638 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_cp_arg8651 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_less_when_in_less_mixin_guarded8674 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8676 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400080L});
-	public static final BitSet FOLLOW_less_condition_in_less_mixin_guarded8679 = new BitSet(new long[]{0x0008000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8682 = new BitSet(new long[]{0x0008000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_less_mixin_guarded8686 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_key_and_in_less_mixin_guarded8690 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8693 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400080L});
-	public static final BitSet FOLLOW_less_condition_in_less_mixin_guarded8696 = new BitSet(new long[]{0x0008000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_NOT_in_less_condition8722 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_condition8724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_less_condition8733 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_less_condition8735 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_variable_in_less_condition8762 = new BitSet(new long[]{0x0000180000200000L,0x0000020002040012L,0x0000000001000000L});
-	public static final BitSet FOLLOW_less_function_in_condition_in_less_condition8766 = new BitSet(new long[]{0x0000180000200000L,0x0000020002040012L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_condition8769 = new BitSet(new long[]{0x0000180000000000L,0x0000020002000012L});
-	public static final BitSet FOLLOW_less_condition_operator_in_less_condition8773 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xAEA9B9F0B8860E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_less_condition8775 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_less_condition8778 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_less_condition8796 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_less_fn_name_in_less_function_in_condition8818 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_function_in_condition8820 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_less_function_in_condition8823 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_less_function_in_condition8825 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_variable_in_less_function_in_condition8828 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_function_in_condition8830 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_less_function_in_condition8833 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_less_fn_name8855 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_less_selector_interpolation_in_less_selector_interpolation_exp8918 = new BitSet(new long[]{0x0008000040000082L,0x0000000000000401L});
-	public static final BitSet FOLLOW_less_selector_interpolation_exp_in_less_selector_interpolation_exp8921 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_AT_SIGN_in_less_selector_interpolation8964 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_less_selector_interpolation8966 = new BitSet(new long[]{0x0008000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_selector_interpolation8968 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_less_selector_interpolation8971 = new BitSet(new long[]{0x0000000000200000L,0x0000000400040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_less_selector_interpolation8973 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_less_selector_interpolation8976 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_sass_selector_interpolation_exp9003 = new BitSet(new long[]{0x0008800040000002L,0x0000000000000401L});
-	public static final BitSet FOLLOW_sass_selector_interpolation_exp_in_sass_selector_interpolation_exp9006 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_HASH_SYMBOL_in_sass_interpolation_expression_var9053 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_sass_interpolation_expression_var9055 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_WS_in_sass_interpolation_expression_var9057 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_sass_interpolation_expression_var9060 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_WS_in_sass_interpolation_expression_var9062 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_sass_interpolation_expression_var9065 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_property_in_sass_nested_properties9105 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_nested_properties9107 = new BitSet(new long[]{0x0000000000080000L});
-	public static final BitSet FOLLOW_COLON_in_sass_nested_properties9110 = new BitSet(new long[]{0xF828C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_nested_properties9112 = new BitSet(new long[]{0xF828C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_propertyValue_in_sass_nested_properties9116 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_nested_properties9118 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_sass_nested_properties9123 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_sass_nested_properties9125 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_syncToFollow_in_sass_nested_properties9128 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_declarations_in_sass_nested_properties9130 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_sass_nested_properties9133 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_EXTEND_in_sass_extend9154 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_extend9156 = new BitSet(new long[]{0x1008C400E0080080L,0x0010000040000404L,0x0000000000000010L});
-	public static final BitSet FOLLOW_simpleSelectorSequence_in_sass_extend9158 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_extend9161 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_extend9164 = new BitSet(new long[]{0x1008C400E0280080L,0x0010000040040404L,0x0000000001000010L});
-	public static final BitSet FOLLOW_ws_in_sass_extend9166 = new BitSet(new long[]{0x1008C400E0080080L,0x0010000040000404L,0x0000000000000010L});
-	public static final BitSet FOLLOW_simpleSelectorSequence_in_sass_extend9169 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_extend9174 = new BitSet(new long[]{0x0000000000000000L,0x1000000000000000L});
-	public static final BitSet FOLLOW_SASS_OPTIONAL_in_sass_extend9176 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_EXTEND_ONLY_SELECTOR_in_sass_extend_only_selector9199 = new BitSet(new long[]{0x0008800000000002L,0x0000000000000400L});
-	public static final BitSet FOLLOW_sass_selector_interpolation_exp_in_sass_extend_only_selector9201 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_set_in_sass_debug9223 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_debug9233 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_sass_debug9235 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_ERROR_in_sass_error9256 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_error9258 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
-	public static final BitSet FOLLOW_STRING_in_sass_error9260 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_if_in_sass_control9281 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_for_in_sass_control9285 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_each_in_sass_control9289 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_sass_while_in_sass_control9293 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_IF_in_sass_if9314 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_if9316 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_sass_control_expression_in_sass_if9319 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_if9321 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_if9324 = new BitSet(new long[]{0x0000000000200002L,0x0003000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_if9327 = new BitSet(new long[]{0x0000000000000000L,0x0003000000000000L});
-	public static final BitSet FOLLOW_sass_else_in_sass_if9330 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_ELSE_in_sass_else9353 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_else9355 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_else9358 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_ELSE_in_sass_else9372 = new BitSet(new long[]{0x0008000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_else9374 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_sass_else9379 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_SASS_ELSEIF_in_sass_else9386 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_else9389 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_sass_control_expression_in_sass_else9392 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_else9394 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_else9397 = new BitSet(new long[]{0x0000000000200002L,0x0003000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_else9400 = new BitSet(new long[]{0x0000000000000000L,0x0003000000000000L});
-	public static final BitSet FOLLOW_sass_else_in_sass_else9403 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_expression_in_sass_control_expression9426 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_FOR_in_sass_for9447 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9449 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_variable_in_sass_for9451 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9453 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_sass_for9457 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9461 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_sass_for9463 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9465 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_sass_for9469 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9473 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8820E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_math_expression_in_sass_for9475 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_for9477 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_for9480 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_EACH_in_sass_each9501 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_each9503 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_sass_each_variables_in_sass_each9505 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_each9507 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_IDENT_in_sass_each9511 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_each9515 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_list_in_sass_each9518 = new BitSet(new long[]{0xF838C5A240B47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_each9521 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_each9524 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_sass_each9528 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_each9534 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_variable_in_sass_each_variables9555 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_each_variables9567 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_sass_each_variables9570 = new BitSet(new long[]{0xE028008000A47C40L,0xAEA9B9C008060A00L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_each_variables9572 = new BitSet(new long[]{0xE028008000847C40L,0xAEA9B9C008020A00L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_variable_in_sass_each_variables9575 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_SASS_WHILE_in_sass_while9600 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_while9602 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_sass_control_expression_in_sass_while9604 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_while9606 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_sass_control_block_in_sass_while9609 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_LBRACE_in_sass_control_block9630 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_sass_control_block9632 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_declarations_in_sass_control_block9635 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_sass_control_block9638 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_FUNCTION_in_sass_function_declaration9680 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_function_declaration9682 = new BitSet(new long[]{0x0008000000000000L});
-	public static final BitSet FOLLOW_sass_function_name_in_sass_function_declaration9684 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_function_declaration9686 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_sass_function_declaration9689 = new BitSet(new long[]{0xE028008001A47C40L,0xAEA9BBC008060A20L,0x0000000001807C03L});
-	public static final BitSet FOLLOW_ws_in_sass_function_declaration9691 = new BitSet(new long[]{0xE028008001847C40L,0xAEA9BBC008020A20L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_cp_args_list_in_sass_function_declaration9694 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
-	public static final BitSet FOLLOW_RPAREN_in_sass_function_declaration9697 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_function_declaration9699 = new BitSet(new long[]{0x0800000000000000L});
-	public static final BitSet FOLLOW_LBRACE_in_sass_function_declaration9702 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xAEBDB9C4C8060E04L,0x0000000001A07D57L});
-	public static final BitSet FOLLOW_ws_in_sass_function_declaration9704 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xAEBDB9C4C8020E04L,0x0000000000A07D57L});
-	public static final BitSet FOLLOW_declarations_in_sass_function_declaration9707 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-	public static final BitSet FOLLOW_RBRACE_in_sass_function_declaration9710 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_sass_function_name9731 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_RETURN_in_sass_function_return9752 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_sass_function_return9754 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_sass_function_return9756 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_SASS_CONTENT_in_sass_content9777 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_less_import_types9796 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_less_when9819 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_key_and9838 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_key_or9856 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_IDENT_in_key_only9874 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred1_Css3439 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_synpred1_Css3442 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred2_Css3503 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_synpred2_Css3506 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred3_Css3557 = new BitSet(new long[]{0xE028848000847C40L,0xAEA9B9C008420A80L,0x0000000000807C03L});
-	public static final BitSet FOLLOW_mediaQueryList_in_synpred3_Css3560 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_VAR_in_cp_variable7413 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_cp_variable7417 = new BitSet(new long[]{0x0000000080000000L});
+	public static final BitSet FOLLOW_DOT_in_cp_variable7419 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
+	public static final BitSet FOLLOW_SASS_VAR_in_cp_variable7421 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_expression_in_cp_expression_list7451 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_expression_list7470 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_cp_expression_list7473 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression_list7475 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_cp_expression_list7478 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_LBRACE_in_cp_expression7514 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_cp_expression7516 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_cp_expression7519 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_declarations_in_cp_expression7521 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_cp_expression7524 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7540 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xEEE9B9F0B8C60E9FL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression7564 = new BitSet(new long[]{0x0008180006000000L,0x0000000000000012L});
+	public static final BitSet FOLLOW_cp_expression_operator_in_cp_expression7567 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression7569 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7573 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xEEE9B9F0B8C60E9FL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression7592 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_atom_in_cp_expression7595 = new BitSet(new long[]{0xF038DDA246A47CE2L,0xEEE9B9F0B8C60E9FL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_expression7613 = new BitSet(new long[]{0xE028848000B47CC0L,0xEEE9BBC008860E00L,0x0000000001A07C23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression7615 = new BitSet(new long[]{0xE028848000947CC0L,0xEEE9BBC008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_syncToFollow_in_cp_expression7618 = new BitSet(new long[]{0xE028848000947CC0L,0xEEE9BBC008820E00L,0x0000000000A07C23L});
+	public static final BitSet FOLLOW_sass_map_pairs_in_cp_expression7620 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_expression7623 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_key_or_in_cp_expression_operator7644 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_key_and_in_cp_expression_operator7648 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_CP_EQ_in_cp_expression_operator7653 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_CP_NOT_EQ_in_cp_expression_operator7657 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LESS_in_cp_expression_operator7661 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LESS_OR_EQ_in_cp_expression_operator7665 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_GREATER_in_cp_expression_operator7669 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_GREATER_OR_EQ_in_cp_expression_operator7673 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_NOT_in_cp_expression_atom7699 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8860E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression_atom7701 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_cp_expression_atom7732 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_expression_atom7748 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9BBF0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_expression_atom7750 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9BBF0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_list_in_cp_expression_atom7754 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_expression_atom7756 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_expression_atom7761 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expressions7793 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expressions7800 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expressions7802 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_cp_math_expression_atom_in_cp_math_expression7836 = new BitSet(new long[]{0x0000000000200002L,0x0000000080040400L,0x0000000001000018L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expression7878 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000400L,0x0000000000000018L});
+	public static final BitSet FOLLOW_set_in_cp_math_expression7881 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8860E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expression7891 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_atom_in_cp_math_expression7894 = new BitSet(new long[]{0x0000000000200002L,0x0000000080040400L,0x0000000001000018L});
+	public static final BitSet FOLLOW_term_in_cp_math_expression_atom7927 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IMPORTANT_SYM_in_cp_math_expression_atom7935 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_unaryOperator_in_cp_math_expression_atom7946 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7948 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_math_expression_atom7954 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8860E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7956 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_cp_math_expression_atom7959 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_math_expression_atom7961 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_math_expression_atom7964 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_declaration8004 = new BitSet(new long[]{0x0808000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_DOT_in_cp_mixin_declaration8011 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_declaration8013 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_HASH_in_cp_mixin_declaration8018 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8021 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_declaration8024 = new BitSet(new long[]{0xE028008001A47C40L,0xEEE9BBC008060A20L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8026 = new BitSet(new long[]{0xE028008001847C40L,0xEEE9BBC008020A20L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_args_list_in_cp_mixin_declaration8029 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_declaration8032 = new BitSet(new long[]{0x0808000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8037 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_less_mixin_guarded_in_cp_mixin_declaration8040 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_SASS_MIXIN_in_cp_mixin_declaration8064 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8066 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_declaration8068 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8071 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_declaration8074 = new BitSet(new long[]{0xE028008001A47C40L,0xEEE9BBC008060A20L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8076 = new BitSet(new long[]{0xE028008001847C40L,0xEEE9BBC008020A20L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_args_list_in_cp_mixin_declaration8079 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_declaration8082 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_declaration8096 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_block_in_cp_mixin_declaration8099 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_DOT_in_cp_mixin_call8135 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8137 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_HASH_in_cp_mixin_call8141 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_AT_IDENT_in_cp_mixin_call8145 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_call8149 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8165 = new BitSet(new long[]{0x0000080000000000L,0x0000000080000000L,0x0000000000000100L});
+	public static final BitSet FOLLOW_combinator_in_cp_mixin_call8168 = new BitSet(new long[]{0x0000400080200040L,0x0000000000040004L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8170 = new BitSet(new long[]{0x0000400080000040L,0x0000000000000004L});
+	public static final BitSet FOLLOW_DOT_in_cp_mixin_call8174 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8176 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_HASH_in_cp_mixin_call8180 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_AT_IDENT_in_cp_mixin_call8184 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_LESS_AND_in_cp_mixin_call8188 = new BitSet(new long[]{0x0000080020280002L,0x0000000080040080L,0x0000000001000100L});
+	public static final BitSet FOLLOW_pseudo_in_cp_mixin_call8198 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8210 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_call8213 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9BBF0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8215 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9BBF0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_mixin_call_args_in_cp_mixin_call8218 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_call8221 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_INCLUDE_in_cp_mixin_call8246 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8248 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_name_in_cp_mixin_call8250 = new BitSet(new long[]{0x0800000000200002L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8253 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_cp_mixin_call8256 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9BBF0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8258 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9BBF0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_mixin_call_args_in_cp_mixin_call8261 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_cp_mixin_call8264 = new BitSet(new long[]{0x0800000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call8269 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_cp_mixin_block_in_cp_mixin_call8272 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LBRACE_in_cp_mixin_block8301 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4D8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_block8303 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4D8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_cp_mixin_block8306 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4D8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_declarations_in_cp_mixin_block8317 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_webkitKeyframesBlock_in_cp_mixin_block8332 = new BitSet(new long[]{0x0008000000200000L,0x0000100410040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_block8334 = new BitSet(new long[]{0x0008000000000000L,0x0000100410000000L});
+	public static final BitSet FOLLOW_RBRACE_in_cp_mixin_block8346 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_cp_mixin_name8367 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8398 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000000L,0x0000000000000004L});
+	public static final BitSet FOLLOW_set_in_cp_mixin_call_args8402 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call_args8410 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_mixin_call_arg_in_cp_mixin_call_args8413 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000000L,0x0000000000000004L});
+	public static final BitSet FOLLOW_CP_DOTS_in_cp_mixin_call_args8419 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000004L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call_args8421 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000004L});
+	public static final BitSet FOLLOW_SEMI_in_cp_mixin_call_args8426 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_variable_in_cp_mixin_call_arg8458 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8460 = new BitSet(new long[]{0x0000000000080000L});
+	public static final BitSet FOLLOW_COLON_in_cp_mixin_call_arg8463 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8465 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_cp_mixin_call_arg8468 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_cp_expression_in_cp_mixin_call_arg8480 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_mixin_call_arg8488 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_arg_in_cp_args_list8535 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000020L,0x0000000000000004L});
+	public static final BitSet FOLLOW_set_in_cp_args_list8539 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_cp_args_list8549 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_arg_in_cp_args_list8552 = new BitSet(new long[]{0x0000000001100002L,0x0000000000000020L,0x0000000000000004L});
+	public static final BitSet FOLLOW_set_in_cp_args_list8559 = new BitSet(new long[]{0x0000000001200002L,0x0000000000040020L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_args_list8567 = new BitSet(new long[]{0x0000000001000002L,0x0000000000000020L});
+	public static final BitSet FOLLOW_set_in_cp_args_list8575 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_args_list8583 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_set_in_cp_args_list8600 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_args_list8608 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_variable_in_cp_arg8631 = new BitSet(new long[]{0x0000000000280002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_arg8633 = new BitSet(new long[]{0x0000000000080002L});
+	public static final BitSet FOLLOW_COLON_in_cp_arg8638 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_cp_arg8640 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_cp_arg8643 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_cp_arg8645 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_cp_arg8658 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_less_when_in_less_mixin_guarded8681 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8683 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400080L});
+	public static final BitSet FOLLOW_less_condition_in_less_mixin_guarded8686 = new BitSet(new long[]{0x0008000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8689 = new BitSet(new long[]{0x0008000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_less_mixin_guarded8693 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_key_and_in_less_mixin_guarded8697 = new BitSet(new long[]{0x0000000000200000L,0x0000000000440080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_mixin_guarded8700 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400080L});
+	public static final BitSet FOLLOW_less_condition_in_less_mixin_guarded8703 = new BitSet(new long[]{0x0008000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_NOT_in_less_condition8729 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_condition8731 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_less_condition8740 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_less_condition8742 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_variable_in_less_condition8769 = new BitSet(new long[]{0x0000180000200000L,0x0000020002040012L,0x0000000001000000L});
+	public static final BitSet FOLLOW_less_function_in_condition_in_less_condition8773 = new BitSet(new long[]{0x0000180000200000L,0x0000020002040012L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_condition8776 = new BitSet(new long[]{0x0000180000000000L,0x0000020002000012L});
+	public static final BitSet FOLLOW_less_condition_operator_in_less_condition8780 = new BitSet(new long[]{0xF038C5A240A47CE0L,0xEEE9B9F0B8860E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_less_condition8782 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_less_condition8785 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_less_condition8803 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_less_fn_name_in_less_function_in_condition8825 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_function_in_condition8827 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_less_function_in_condition8830 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_less_function_in_condition8832 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_variable_in_less_function_in_condition8835 = new BitSet(new long[]{0x0000000000200000L,0x0000020000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_function_in_condition8837 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_less_function_in_condition8840 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_less_fn_name8862 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_less_selector_interpolation_in_less_selector_interpolation_exp8925 = new BitSet(new long[]{0x0008000040000082L,0x0000000000000401L});
+	public static final BitSet FOLLOW_less_selector_interpolation_exp_in_less_selector_interpolation_exp8928 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_AT_SIGN_in_less_selector_interpolation8971 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_LBRACE_in_less_selector_interpolation8973 = new BitSet(new long[]{0x0008000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_selector_interpolation8975 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_less_selector_interpolation8978 = new BitSet(new long[]{0x0000000000200000L,0x0000000400040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_less_selector_interpolation8980 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_less_selector_interpolation8983 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_interpolation_expression_var_in_sass_selector_interpolation_exp9010 = new BitSet(new long[]{0x0008800040000002L,0x0000000000000401L});
+	public static final BitSet FOLLOW_sass_selector_interpolation_exp_in_sass_selector_interpolation_exp9013 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_HASH_SYMBOL_in_sass_interpolation_expression_var9060 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_LBRACE_in_sass_interpolation_expression_var9062 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_WS_in_sass_interpolation_expression_var9064 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_sass_interpolation_expression_var9067 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_WS_in_sass_interpolation_expression_var9069 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_sass_interpolation_expression_var9072 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_property_in_sass_nested_properties9112 = new BitSet(new long[]{0x0000000000280000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_nested_properties9114 = new BitSet(new long[]{0x0000000000080000L});
+	public static final BitSet FOLLOW_COLON_in_sass_nested_properties9117 = new BitSet(new long[]{0xF828C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_nested_properties9119 = new BitSet(new long[]{0xF828C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_propertyValue_in_sass_nested_properties9123 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_nested_properties9125 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_LBRACE_in_sass_nested_properties9130 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_sass_nested_properties9132 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_syncToFollow_in_sass_nested_properties9135 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_declarations_in_sass_nested_properties9137 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_sass_nested_properties9140 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_EXTEND_in_sass_extend9161 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_extend9163 = new BitSet(new long[]{0x1008C400E0080080L,0x0010000040000404L,0x0000000000000010L});
+	public static final BitSet FOLLOW_simpleSelectorSequence_in_sass_extend9165 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_extend9168 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_sass_extend9171 = new BitSet(new long[]{0x1008C400E0280080L,0x0010000040040404L,0x0000000001000010L});
+	public static final BitSet FOLLOW_ws_in_sass_extend9173 = new BitSet(new long[]{0x1008C400E0080080L,0x0010000040000404L,0x0000000000000010L});
+	public static final BitSet FOLLOW_simpleSelectorSequence_in_sass_extend9176 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_extend9181 = new BitSet(new long[]{0x0000000000000000L,0x1000000000000000L});
+	public static final BitSet FOLLOW_SASS_OPTIONAL_in_sass_extend9183 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_EXTEND_ONLY_SELECTOR_in_sass_extend_only_selector9206 = new BitSet(new long[]{0x0008800000000002L,0x0000000000000400L});
+	public static final BitSet FOLLOW_sass_selector_interpolation_exp_in_sass_extend_only_selector9208 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_set_in_sass_debug9230 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_debug9240 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_sass_debug9242 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_ERROR_in_sass_error9263 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_error9265 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
+	public static final BitSet FOLLOW_STRING_in_sass_error9267 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_if_in_sass_control9288 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_for_in_sass_control9292 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_each_in_sass_control9296 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_sass_while_in_sass_control9300 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_IF_in_sass_if9321 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_if9323 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_sass_control_expression_in_sass_if9326 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_if9328 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_if9331 = new BitSet(new long[]{0x0000000000200002L,0x0003000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_if9334 = new BitSet(new long[]{0x0000000000000000L,0x0003000000000000L});
+	public static final BitSet FOLLOW_sass_else_in_sass_if9337 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_ELSE_in_sass_else9360 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_else9362 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_else9365 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_ELSE_in_sass_else9379 = new BitSet(new long[]{0x0008000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_else9381 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_sass_else9386 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_SASS_ELSEIF_in_sass_else9393 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_else9396 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_sass_control_expression_in_sass_else9399 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_else9401 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_else9404 = new BitSet(new long[]{0x0000000000200002L,0x0003000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_else9407 = new BitSet(new long[]{0x0000000000000000L,0x0003000000000000L});
+	public static final BitSet FOLLOW_sass_else_in_sass_else9410 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_expression_in_sass_control_expression9433 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_FOR_in_sass_for9454 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9456 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_variable_in_sass_for9458 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9460 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_sass_for9464 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9468 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_sass_for9470 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9472 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_sass_for9476 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9480 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8820E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_math_expression_in_sass_for9482 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_for9484 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_for9487 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_EACH_in_sass_each9508 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_each9510 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_sass_each_variables_in_sass_each9512 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_each9514 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_IDENT_in_sass_each9518 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_each9522 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_list_in_sass_each9525 = new BitSet(new long[]{0xF838C5A240B47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_each9528 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_sass_each9531 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_sass_each9535 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_each9541 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_variable_in_sass_each_variables9562 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_each_variables9574 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_sass_each_variables9577 = new BitSet(new long[]{0xE028008000A47C40L,0xEEE9B9C008060A00L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_each_variables9579 = new BitSet(new long[]{0xE028008000847C40L,0xEEE9B9C008020A00L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_variable_in_sass_each_variables9582 = new BitSet(new long[]{0x0000000000300002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_SASS_WHILE_in_sass_while9607 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_while9609 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_sass_control_expression_in_sass_while9611 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_while9613 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_sass_control_block_in_sass_while9616 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_LBRACE_in_sass_control_block9637 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_sass_control_block9639 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_declarations_in_sass_control_block9642 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_sass_control_block9645 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_FUNCTION_in_sass_function_declaration9687 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_function_declaration9689 = new BitSet(new long[]{0x0008000000000000L});
+	public static final BitSet FOLLOW_sass_function_name_in_sass_function_declaration9691 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_function_declaration9693 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_sass_function_declaration9696 = new BitSet(new long[]{0xE028008001A47C40L,0xEEE9BBC008060A20L,0x0000000001807C03L});
+	public static final BitSet FOLLOW_ws_in_sass_function_declaration9698 = new BitSet(new long[]{0xE028008001847C40L,0xEEE9BBC008020A20L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_cp_args_list_in_sass_function_declaration9701 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+	public static final BitSet FOLLOW_RPAREN_in_sass_function_declaration9704 = new BitSet(new long[]{0x0800000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_function_declaration9706 = new BitSet(new long[]{0x0800000000000000L});
+	public static final BitSet FOLLOW_LBRACE_in_sass_function_declaration9709 = new BitSet(new long[]{0xF028CC80E0AC7CC0L,0xEEFDB9C4C8060E04L,0x0000000001A07D57L});
+	public static final BitSet FOLLOW_ws_in_sass_function_declaration9711 = new BitSet(new long[]{0xF028CC80E08C7CC0L,0xEEFDB9C4C8020E04L,0x0000000000A07D57L});
+	public static final BitSet FOLLOW_declarations_in_sass_function_declaration9714 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+	public static final BitSet FOLLOW_RBRACE_in_sass_function_declaration9717 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_sass_function_name9738 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_RETURN_in_sass_function_return9759 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_sass_function_return9761 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_sass_function_return9763 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_SASS_CONTENT_in_sass_content9784 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_less_import_types9803 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_less_when9826 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_key_and9845 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_key_or9863 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_IDENT_in_key_only9881 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred1_Css3443 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_synpred1_Css3446 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred2_Css3507 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_synpred2_Css3510 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred3_Css3561 = new BitSet(new long[]{0xE028848000847C40L,0xEEE9B9C008420A80L,0x0000000000807C03L});
+	public static final BitSet FOLLOW_mediaQueryList_in_synpred3_Css3564 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_ws_in_synpred4_Css31093 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
 	public static final BitSet FOLLOW_SEMI_in_synpred4_Css31096 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_SASS_MIXIN_in_synpred5_Css31194 = new BitSet(new long[]{0x0000000000000002L});
@@ -43415,10 +43448,10 @@
 	public static final BitSet FOLLOW_ws_in_synpred34_Css34462 = new BitSet(new long[]{0x1000C000A0080000L,0x0010000000000004L});
 	public static final BitSet FOLLOW_esPred_in_synpred34_Css34465 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_PIPE_in_synpred35_Css34576 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred36_Css36144 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_ws_in_synpred36_Css36144 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_ws_in_synpred36_Css36149 = new BitSet(new long[]{0x0000000000100000L,0x0000000000000000L,0x0000000000000008L});
-	public static final BitSet FOLLOW_operator_in_synpred36_Css36152 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_synpred36_Css36154 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_operator_in_synpred36_Css36152 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_synpred36_Css36154 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_term_in_synpred36_Css36163 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_functionName_in_synpred37_Css36236 = new BitSet(new long[]{0x0000000000200000L,0x0000000000040080L,0x0000000001000000L});
 	public static final BitSet FOLLOW_ws_in_synpred37_Css36238 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
@@ -43427,30 +43460,30 @@
 	public static final BitSet FOLLOW_ws_in_synpred38_Css36853 = new BitSet(new long[]{0x0000000000080000L,0x0000000002000000L});
 	public static final BitSet FOLLOW_set_in_synpred38_Css36856 = new BitSet(new long[]{0x0000000000000002L});
 	public static final BitSet FOLLOW_cp_expression_in_synpred39_Css36891 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred40_Css36985 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_ws_in_synpred40_Css36985 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_ws_in_synpred40_Css36990 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-	public static final BitSet FOLLOW_SOLIDUS_in_synpred40_Css36993 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xAEA9B9F0B8860E0DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_synpred40_Css36995 = new BitSet(new long[]{0xF028C5A240847CE0L,0xAEA9B9F0B8820E0DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_SOLIDUS_in_synpred40_Css36993 = new BitSet(new long[]{0xF028C5A240A47CE0L,0xEEE9B9F0B8860E0DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_synpred40_Css36995 = new BitSet(new long[]{0xF028C5A240847CE0L,0xEEE9B9F0B8820E0DL,0x0000000000A67F23L});
 	public static final BitSet FOLLOW_term_in_synpred40_Css37004 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred42_Css37452 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_synpred42_Css37455 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xAEA9B9F0B8C60E8DL,0x0000000001A67F23L});
-	public static final BitSet FOLLOW_ws_in_synpred42_Css37457 = new BitSet(new long[]{0xF838C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_in_synpred42_Css37460 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_expression_atom_in_synpred43_Css37527 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred44_Css37550 = new BitSet(new long[]{0x0008180006000000L,0x0000000000000012L});
-	public static final BitSet FOLLOW_cp_expression_operator_in_synpred44_Css37553 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred45_Css37579 = new BitSet(new long[]{0xF038C5A240847CE0L,0xAEA9B9F0B8C20E8DL,0x0000000000A67F23L});
-	public static final BitSet FOLLOW_cp_expression_atom_in_synpred45_Css37582 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_cp_math_expression_in_synpred46_Css37722 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred47_Css37855 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000400L,0x0000000000000018L});
-	public static final BitSet FOLLOW_set_in_synpred47_Css37858 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred48_Css38147 = new BitSet(new long[]{0x0000080000000000L,0x0000000080000000L,0x0000000000000100L});
-	public static final BitSet FOLLOW_combinator_in_synpred48_Css38150 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
-	public static final BitSet FOLLOW_ws_in_synpred48_Css38152 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_pseudo_in_synpred49_Css38188 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred50_Css38196 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-	public static final BitSet FOLLOW_LPAREN_in_synpred50_Css38199 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_webkitKeyframeSelectors_in_synpred51_Css38315 = new BitSet(new long[]{0x0000000000000002L});
-	public static final BitSet FOLLOW_ws_in_synpred52_Css39560 = new BitSet(new long[]{0x0000000000100000L});
-	public static final BitSet FOLLOW_COMMA_in_synpred52_Css39563 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred42_Css37459 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_synpred42_Css37462 = new BitSet(new long[]{0xF838C5A240A47CE0L,0xEEE9B9F0B8C60E8DL,0x0000000001A67F23L});
+	public static final BitSet FOLLOW_ws_in_synpred42_Css37464 = new BitSet(new long[]{0xF838C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_in_synpred42_Css37467 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_expression_atom_in_synpred43_Css37534 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred44_Css37557 = new BitSet(new long[]{0x0008180006000000L,0x0000000000000012L});
+	public static final BitSet FOLLOW_cp_expression_operator_in_synpred44_Css37560 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred45_Css37586 = new BitSet(new long[]{0xF038C5A240847CE0L,0xEEE9B9F0B8C20E8DL,0x0000000000A67F23L});
+	public static final BitSet FOLLOW_cp_expression_atom_in_synpred45_Css37589 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_cp_math_expression_in_synpred46_Css37729 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred47_Css37862 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000400L,0x0000000000000018L});
+	public static final BitSet FOLLOW_set_in_synpred47_Css37865 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred48_Css38154 = new BitSet(new long[]{0x0000080000000000L,0x0000000080000000L,0x0000000000000100L});
+	public static final BitSet FOLLOW_combinator_in_synpred48_Css38157 = new BitSet(new long[]{0x0000000000200002L,0x0000000000040000L,0x0000000001000000L});
+	public static final BitSet FOLLOW_ws_in_synpred48_Css38159 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_pseudo_in_synpred49_Css38195 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred50_Css38203 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+	public static final BitSet FOLLOW_LPAREN_in_synpred50_Css38206 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_webkitKeyframeSelectors_in_synpred51_Css38322 = new BitSet(new long[]{0x0000000000000002L});
+	public static final BitSet FOLLOW_ws_in_synpred52_Css39567 = new BitSet(new long[]{0x0000000000100000L});
+	public static final BitSet FOLLOW_COMMA_in_synpred52_Css39570 = new BitSet(new long[]{0x0000000000000002L});
 }
diff --git a/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/PropertyCategory.java b/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/PropertyCategory.java
index 7ac45bb..4c75acb 100644
--- a/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/PropertyCategory.java
+++ b/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/PropertyCategory.java
@@ -54,7 +54,8 @@
     MARQUEE,
     MULTI_COLUMN_LAYOUT,
     PAGED_MEDIA,
-    POSITIONING,    
+    POSITIONING,
+    SIZING,
     RUBY,
     SPEECH,
     TEXT,
diff --git a/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/TokenAcceptor.java b/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/TokenAcceptor.java
index c04e8bc..10efb0e 100644
--- a/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/TokenAcceptor.java
+++ b/ide/css.lib/src/org/netbeans/modules/css/lib/api/properties/TokenAcceptor.java
@@ -21,6 +21,7 @@
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.util.*;
+import java.util.regex.Pattern;
 import org.netbeans.modules.css.lib.api.CssTokenId;
 import org.netbeans.modules.web.common.api.LexerUtils;
 import org.openide.util.Lookup;
@@ -186,14 +187,42 @@
 
     public static class HashColor extends TokenAcceptor {
 
+        private static final Pattern COLOR_PATTERN = Pattern.compile("#[0-9a-fA-F]{3,8}");
+
         public HashColor(String id) {
             super(id);
         }
 
         @Override
         public boolean accepts(Token token) {
-            int len = token.image().length();
-            return token.tokenId() == CssTokenId.HASH && (len == 4 || len == 7); //three of six hex digits after hash sign are allowed
+            if(token.tokenId() != CssTokenId.HASH) {
+                return false;
+            }
+            CharSequence cs = token.image();
+            // Variants:
+            // #RGB
+            // #RRGGBB
+            // #RGBA
+            // #RRGGBBAA
+            int len = cs.length();
+            if(len != 4 && len != 7 && len != 5 && len != 9) {
+                return false;
+            }
+            if (cs.charAt(0) != '#') {
+                return false;
+            }
+            for (int i = 1; i < len; i++) {
+                if (!hexChar(cs.charAt(i))) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        private static boolean hexChar(int val) {
+            return (val >= '0' && val <= '9')
+                    || ( val >= 'a' && val <= 'f')
+                    || (val >= 'A' && val <= 'F');
         }
     }
 
diff --git a/ide/css.lib/test/unit/src/org/netbeans/modules/css/lib/Css3ParserLessTest.java b/ide/css.lib/test/unit/src/org/netbeans/modules/css/lib/Css3ParserLessTest.java
index 65a2ef0..50830b9 100644
--- a/ide/css.lib/test/unit/src/org/netbeans/modules/css/lib/Css3ParserLessTest.java
+++ b/ide/css.lib/test/unit/src/org/netbeans/modules/css/lib/Css3ParserLessTest.java
@@ -943,4 +943,12 @@
                 + "  #gradient > .vertical(rgba(40,50,60,0), rgba(40,50,60,0.075), 0, 100%);\n"
                 + "}");
     }
+
+    public void testScssUseForward() {
+        assertParses("@use: blue;\n");
+        assertParses("@forward: darken(@demo, 10%);");
+        assertParses("a { color: @use }");
+        assertParses("a { color: @forward }");
+        assertParses(".@{my-selector} { font-weight: bold }", true);
+    }
 }
diff --git a/ide/css.model/nbproject/org-netbeans-modules-css-model.sig b/ide/css.model/nbproject/org-netbeans-modules-css-model.sig
index 02e653d..7201a35 100644
--- a/ide/css.model/nbproject/org-netbeans-modules-css-model.sig
+++ b/ide/css.model/nbproject/org-netbeans-modules-css-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPStructureItem.java b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPStructureItem.java
index b3d53e4..a544e48 100644
--- a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPStructureItem.java
+++ b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPStructureItem.java
@@ -46,7 +46,7 @@
         this.handle = element.getHandle();
         this.range = element.getRange();
 
-        this.cslHandle = new CPCslElementHandle(handle.getFile(), handle.getName());
+        this.cslHandle = new CPCslElementHandle(handle.getFile(), handle.getName(), element.getRange(), element.getType());
     }
 
     @Override
diff --git a/ide/css.prep/test/qa-functional/src/org/netbeans/modules/css/prep/GeneralCSSPrep.java b/ide/css.prep/test/qa-functional/src/org/netbeans/modules/css/prep/GeneralCSSPrep.java
index b078808..3c812c0 100644
--- a/ide/css.prep/test/qa-functional/src/org/netbeans/modules/css/prep/GeneralCSSPrep.java
+++ b/ide/css.prep/test/qa-functional/src/org/netbeans/modules/css/prep/GeneralCSSPrep.java
@@ -227,7 +227,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/ide/css.visual/nbproject/org-netbeans-modules-css-visual.sig b/ide/css.visual/nbproject/org-netbeans-modules-css-visual.sig
index 8a61f30..e2ee49c 100644
--- a/ide/css.visual/nbproject/org-netbeans-modules-css-visual.sig
+++ b/ide/css.visual/nbproject/org-netbeans-modules-css-visual.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.49
+#Version 3.50
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/css.visual/src/org/netbeans/modules/css/visual/CreateRulePanel.java b/ide/css.visual/src/org/netbeans/modules/css/visual/CreateRulePanel.java
index 297cd7a..78c38b2 100644
--- a/ide/css.visual/src/org/netbeans/modules/css/visual/CreateRulePanel.java
+++ b/ide/css.visual/src/org/netbeans/modules/css/visual/CreateRulePanel.java
@@ -966,7 +966,7 @@
     private static void saveDocumentIfNotOpened(Document document) throws IOException {
 
         Object o = document.getProperty(Document.StreamDescriptionProperty);
-        if (o == null || !(o instanceof DataObject)) {
+        if (!(o instanceof DataObject)) {
             return;
         }
         DataObject dobj = (DataObject) o;
diff --git a/ide/css.visual/src/org/netbeans/modules/css/visual/SelectorsGroupEditor.java b/ide/css.visual/src/org/netbeans/modules/css/visual/SelectorsGroupEditor.java
index 29578d4..48ee7a3 100644
--- a/ide/css.visual/src/org/netbeans/modules/css/visual/SelectorsGroupEditor.java
+++ b/ide/css.visual/src/org/netbeans/modules/css/visual/SelectorsGroupEditor.java
@@ -569,7 +569,7 @@
             }
         }else if(ruleType.equals(ELEMENT_ID_TYPE)){
             if(!selectElementIdTextField.getText().trim().equals("")){
-                rule = "#" + selectElementIdTextField.getText().trim();;
+                rule = "#" + selectElementIdTextField.getText().trim();
             }
         }
         if((rule != null) && (!selectedRules.contains(rule))){
@@ -607,7 +607,7 @@
             }
         }else if(ruleType.equals(ELEMENT_ID_TYPE)){
             if(!selectElementIdTextField.getText().trim().equals("")){
-                rule = "#" + selectElementIdTextField.getText().trim();;
+                rule = "#" + selectElementIdTextField.getText().trim();
             }
         }
         return rule;
diff --git a/ide/db.core/nbproject/org-netbeans-modules-db-core.sig b/ide/db.core/nbproject/org-netbeans-modules-db-core.sig
index ec04c5e..3a32544 100644
--- a/ide/db.core/nbproject/org-netbeans-modules-db-core.sig
+++ b/ide/db.core/nbproject/org-netbeans-modules-db-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54
+#Version 1.55
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/ide/db.dataview/nbproject/org-netbeans-modules-db-dataview.sig b/ide/db.dataview/nbproject/org-netbeans-modules-db-dataview.sig
index 7b4314c..00fad1d 100644
--- a/ide/db.dataview/nbproject/org-netbeans-modules-db-dataview.sig
+++ b/ide/db.dataview/nbproject/org-netbeans-modules-db-dataview.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/BlobFieldTableCellEditor.java b/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/BlobFieldTableCellEditor.java
index 3be60b6..a43bd93 100644
--- a/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/BlobFieldTableCellEditor.java
+++ b/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/BlobFieldTableCellEditor.java
@@ -272,9 +272,9 @@
         }
         is.close();
         os.close();
-        if (t != null && t instanceof RuntimeException) {
+        if (t instanceof RuntimeException) {
             throw (RuntimeException) t;
-        } else if (t != null && t instanceof IOException) {
+        } else if (t instanceof IOException) {
             throw (IOException) t;
         } else if (t != null) {
             throw new RuntimeException(t);
diff --git a/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/ClobFieldTableCellEditor.java b/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/ClobFieldTableCellEditor.java
index 97baa13..ae24577 100644
--- a/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/ClobFieldTableCellEditor.java
+++ b/ide/db.dataview/src/org/netbeans/modules/db/dataview/table/celleditor/ClobFieldTableCellEditor.java
@@ -275,9 +275,9 @@
         }
         in.close();
         out.close();
-        if (t != null && t instanceof RuntimeException) {
+        if (t instanceof RuntimeException) {
             throw (RuntimeException) t;
-        } else if (t != null && t instanceof IOException) {
+        } else if (t instanceof IOException) {
             throw (IOException) t;
         } else if (t != null) {
             throw new RuntimeException(t);
diff --git a/ide/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/util/DateTypeTest.java b/ide/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/util/DateTypeTest.java
index 1ed0d68..2238147 100644
--- a/ide/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/util/DateTypeTest.java
+++ b/ide/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/util/DateTypeTest.java
@@ -21,10 +21,7 @@
 
 import java.sql.Date;
 import java.sql.Timestamp;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
-import java.util.Locale;
 import java.util.TimeZone;
 import org.netbeans.junit.NbTestCase;
 
@@ -33,7 +30,6 @@
  * @author navaneeth
  */
 public class DateTypeTest extends NbTestCase {
-    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
     private long now = System.currentTimeMillis();
     private long expectedMillis = 0l;
     private DateType type = null;
@@ -106,21 +102,6 @@
         Date expectedDate = new Date(GMT_2002_0801 - TimeZone.getDefault().getOffset(GMT_2002_0801));
         assertEquals("Should accept", expectedDate, DateType.convert("2002-08-01"));
 
-        // August 1, 2002 12:00 PM CDT
-        expectedDate = new Date(expectedDate.getTime() + 12 * 60 * 60 * 1000L // time (daylight
-                // savings)
-                );
-        DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG,
-                Locale.UK);
-        fmt.setTimeZone(TimeZone.getDefault());
-        assertEquals("Make sure 'expected' is as expected",
-                "01 August 2002 12:00:00 "
-                + TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT, Locale.UK),
-                fmt.format(expectedDate));
-
-        String toConvert = DATE_FORMAT.format(expectedDate);
-        assertEquals("Check format", "2002-08-01", toConvert);
-
         String tExpected = "2002-08-01";
         String converted = DateType.convert(tExpected).toString();
         assertEquals(tExpected, converted);
diff --git a/ide/db.metadata.model/external/binaries-list b/ide/db.metadata.model/external/binaries-list
index 23a6dd9..41f5d4e 100644
--- a/ide/db.metadata.model/external/binaries-list
+++ b/ide/db.metadata.model/external/binaries-list
@@ -16,4 +16,4 @@
 # under the License.
 
 7EFAD40EF52FBB1F08142F07A83B42D29E47D8CE org.apache.derby:derby:10.14.2.0
-9140BE77AAFA5050BF4BB936D560CBACB5A6B5C1 mysql:mysql-connector-java:5.1.48
+3FD5850719D7E82D50705D34CC6A0037FAB5731F com.mysql:mysql-connector-j:8.0.31
diff --git a/ide/db.metadata.model/external/mysql-connector-j-8.0.31-license.txt b/ide/db.metadata.model/external/mysql-connector-j-8.0.31-license.txt
new file mode 100644
index 0000000..eeaa4f5
--- /dev/null
+++ b/ide/db.metadata.model/external/mysql-connector-j-8.0.31-license.txt
@@ -0,0 +1,1392 @@
+Name: MySQL Connector/J
+Version: 8.0.31
+License: GPL-mysql-connector
+Type: compile-time
+Comment: Dependency required to run unit tests with DB support
+Description: MySQL Connector/J is the official JDBC driver for MySQL.
+Origin: https://dev.mysql.com/downloads/connector/j/
+
+Licensing Information User Manual
+
+MySQL Connector/J 8.0
+     __________________________________________________________________
+
+Introduction
+
+   This License Information User Manual contains Oracle's product license
+   and other licensing information, including licensing information for
+   third-party software which may be included in this distribution of
+   MySQL Connector/J 8.0.
+
+   Last updated: August 2022
+
+Licensing Information
+
+   This is a release of MySQL Connector/J 8.0, brought to you by the MySQL
+   team at Oracle. This software is released under version 2 of the GNU
+   General Public License (GPLv2), as set forth below, with the following
+   additional permissions:
+
+   This distribution of MySQL Connector/J 8.0 is distributed with certain
+   software that is licensed under separate terms, as designated in a
+   particular file or component or in the license documentation. Without
+   limiting your rights under the GPLv2, the authors of MySQL hereby grant
+   you an additional permission to link the program and your derivative
+   works with the separately licensed software that they have included
+   with the program.
+
+   Without limiting the foregoing grant of rights under the GPLv2 and
+   additional permission as to separately licensed software, this
+   Connector is also subject to the Universal FOSS Exception, version 1.0,
+   a copy of which is reproduced below and can also be found along with
+   its FAQ at http://oss.oracle.com/licenses/universal-foss-exception.
+
+   Copyright (c) 2017, 2022, Oracle and/or its affiliates.
+
+Election of GPLv2
+
+   For the avoidance of doubt, except that if any license choice other
+   than GPL or LGPL is available it will apply instead, Oracle elects to
+   use only the General Public License version 2 (GPLv2) at this time for
+   any software where a choice of GPL license versions is made available
+   with the language indicating that GPLv2 or any later version may be
+   used, or where a choice of which version of the GPL is applied is
+   otherwise unspecified.
+
+GNU General Public License Version 2.0, June 1991
+
+The following applies to all products licensed under the GNU General
+Public License, Version 2.0: You may not use the identified files
+except in compliance with the GNU General Public License, Version
+2.0 (the "License.") You may obtain a copy of the License at
+http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is
+also reproduced below. 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.
+
+
+  ======================================================================
+  ======================================================================
+
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim
+copies of this license document, but changing it is not
+allowed.
+
+                     Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on,
+we want its recipients to know that what they have is not the original,
+so that any problems introduced by others will not reflect on the
+original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software
+    interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as
+a special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new
+versions of the General Public License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Program does not specify a
+version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the
+author to ask for permission.  For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this.  Our decision will be guided by the
+two goals of preserving the free status of all derivatives of our free
+software and of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
+WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of
+
+    the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+    type 'show w'. This is free software, and you are welcome
+    to redistribute it under certain conditions; type 'show c'
+    for details.
+
+The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than 'show w' and
+'show c'; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  program 'Gnomovision' (which makes passes at compilers) written
+  by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library,
+you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the GNU Lesser General Public License instead of this License.
+
+   ======================================================================
+   ======================================================================
+
+The Universal FOSS Exception, Version 1.0
+
+   In addition to the rights set forth in the other license(s) included in
+   the distribution for this software, data, and/or documentation
+   (collectively the "Software", and such licenses collectively with this
+   additional permission the "Software License"), the copyright holders
+   wish to facilitate interoperability with other software, data, and/or
+   documentation distributed with complete corresponding source under a
+   license that is OSI-approved and/or categorized by the FSF as free
+   (collectively "Other FOSS"). We therefore hereby grant the following
+   additional permission with respect to the use and distribution of the
+   Software with Other FOSS, and the constants, function signatures, data
+   structures and other invocation methods used to run or interact with
+   each of them (as to each, such software's "Interfaces"):
+
+    i. The Software's Interfaces may, to the extent permitted by the
+       license of the Other FOSS, be copied into, used and distributed in
+       the Other FOSS in order to enable interoperability, without
+       requiring a change to the license of the Other FOSS other than as
+       to any Interfaces of the Software embedded therein. The Software's
+       Interfaces remain at all times under the Software License,
+       including without limitation as used in the Other FOSS (which upon
+       any such use also then contains a portion of the Software under the
+       Software License).
+
+   ii. The Other FOSS's Interfaces may, to the extent permitted by the
+       license of the Other FOSS, be copied into, used and distributed in
+       the Software in order to enable interoperability, without requiring
+       that such Interfaces be licensed under the terms of the Software
+       License or otherwise altering their original terms, if this does
+       not require any portion of the Software other than such Interfaces
+       to be licensed under the terms other than the Software License.
+
+   iii. If only Interfaces and no other code is copied between the
+       Software and the Other FOSS in either direction, the use and/or
+       distribution of the Software with the Other FOSS shall not be
+       deemed to require that the Other FOSS be licensed under the license
+       of the Software, other than as to any Interfaces of the Software
+       copied into the Other FOSS. This includes, by way of example and
+       without limitation, statically or dynamically linking the Software
+       together with Other FOSS after enabling interoperability using the
+       Interfaces of one or both, and distributing the resulting
+       combination under different licenses for the respective portions
+       thereof. For avoidance of doubt, a license which is OSI-approved or
+       categorized by the FSF as free, includes, for the purpose of this
+       permission, such licenses with additional permissions, and any
+       license that has previously been so approved or categorized as
+       free, even if now deprecated or otherwise no longer recognized as
+       approved or free. Nothing in this additional permission grants any
+       right to distribute any portion of the Software on terms other than
+       those of the Software License or grants any additional permission
+       of any kind for use or distribution of the Software in conjunction
+       with software other than Other FOSS.
+
+   ======================================================================
+   ======================================================================
+
+Licenses for Third-Party Components
+
+   The following sections contain licensing information for libraries that
+   may be included with this product. We are thankful to all individuals
+   that have created these. Standard licenses referenced herein are
+   detailed in the Standard Licenses section.
+
+c3p0 JDBC Library
+
+   The MySQL Connector/J implements interfaces that are included in c3p0,
+   although no part of c3p0 is included or distributed with MySQL.
+
+Copyright (C) 2019 Machinery For Change, Inc.
+
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of EITHER:
+ *
+ *     1) The GNU Lesser General Public License (LGPL), version 2.1, as
+ *        published by the Free Software Foundation
+ *
+ * OR
+ *
+ *     2) The Eclipse Public License (EPL), version 1.0
+ * You may choose which license to accept if you wish to redistribute
+ * or modify this work. You may offer derivatives of this work
+ * under the license you have chosen, or you may provide the same
+ * choice of license which you have been offered here.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received copies of both LGPL v2.1 and EPL v1.0
+ * along with this software; see the files LICENSE-EPL and LICENSE-LGPL.
+ * If not, the text of these licenses are currently available at
+ *
+ * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+ *  EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+
+   distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+   ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additionsto
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and such
+derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to
+its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other intellectual
+property rights of any other entity. Each Contributor disclaims any liability to
+Recipient for claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby assumes sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+     i) effectively disclaims on behalf of all Contributors all warranties
+        and conditions, express and implied, including warranties or conditions
+        of title and non-infringement, and implied warranties or conditions of
+        merchantability and fitness for a particular purpose;
+
+    ii) effectively excludes on behalf of all Contributors all liability for
+        damages, including direct, indirect, special, incidental and
+        consequential damages, such as lost profits;
+
+   iii) states that any provisions which differ from this Agreement are
+        offered by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such
+        Contributor, and informs licensees how to obtain it in a reasonable
+        manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement , including but not limited to the risks and costs
+of program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation
+may assign the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions) may always
+be distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property of
+any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
+
+   The LGPL v2.1 can be found in GNU Lesser General Public License Version
+   2.1, February 1999.
+
+   ======================================================================
+   ======================================================================
+
+Google Protocol Buffers
+
+Copyright 2008 Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+
+   ======================================================================
+   ======================================================================
+
+Unicode Data Files
+
+   Unicode Data Files
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. Distributed under
+the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files")
+or Unicode software and any associated documentation (the "Software") to deal
+in the Data Files or Software without restriction, including without
+limitation the rights to use, copy, modify, merge, publish, distribute,
+and/or sell copies of the Data Files or Software, and to permit persons to
+whom the Data Files or Software are furnished to do so, provided that (a) the
+above copyright notice(s) and this permission notice appear with all copies
+of the Data Files or Software, (b) both the above copyright notice(s) and
+this permission notice appear in associated documentation, and (c) there is
+clear notice in each modified Data File or in the Software as well as in the
+documentation associated with the Data File(s) or Software that the data or
+software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
+PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be
+used in advertising or otherwise to promote the sale, use or other dealings in
+these Data Files or Software without prior written authorization of the
+copyright holder.
+
+   ======================================================================
+   ======================================================================
+
+Standard Licenses
+
+GNU Lesser General Public License Version 2.1, February 1999
+
+The following applies to all products licensed under the
+GNU Lesser General Public License, Version 2.1: You may
+not use the identified files except in compliance with
+the GNU Lesser General Public License, Version 2.1 (the
+"License"). You may obtain a copy of the License at
+http://www.gnu.org/licenses/lgpl-2.1.html. A copy of the
+license is also reproduced below. 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.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs
+must be allowed to use the library.  A more frequent case is that
+a free library does the same job as widely used non-free libraries.
+In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended
+to apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+   ======================================================================
+   ======================================================================
+
+Written Offer for Source Code
+
+   For any software that you receive from Oracle in binary form which is
+   licensed under an open source license that gives you the right to
+   receive the source code for that binary, you can obtain a copy of the
+   applicable source code by visiting
+   http://www.oracle.com/goto/opensourcecode. If the source code for the
+   binary was not provided to you with the binary, you can also receive a
+   copy of the source code on physical media by submitting a written
+   request to the address listed below or by sending an email to Oracle
+   using the following link:
+   http://www.oracle.com/goto/opensourcecode/request.
+
+  Oracle America, Inc.
+  Attn: Senior Vice President
+  Development and Engineering Legal
+  500 Oracle Parkway, 10th Floor
+  Redwood Shores, CA 94065
+
+   Your request should include:
+
+     * The name of the binary for which you are requesting the source code
+
+     * The name and version number of the Oracle product containing the
+       binary
+
+     * The date you received the Oracle product
+
+     * Your name
+
+     * Your company name (if applicable)
+
+     * Your return mailing address and email, and
+
+     * A telephone number in the event we need to reach you.
+
+
+   We may charge you a fee to cover the cost of physical media and
+   processing.
+
+   Your request must be sent
+
+    a. within three (3) years of the date you received the Oracle product
+       that included the binary that is the subject of your request, or
+
+    b. in the case of code licensed under the GPL v3 for as long as Oracle
+       offers spare parts or customer support for that product model.
diff --git a/ide/db.metadata.model/external/mysql-connector-java-5.1.48-license.txt b/ide/db.metadata.model/external/mysql-connector-java-5.1.48-license.txt
deleted file mode 100644
index a5f1813..0000000
--- a/ide/db.metadata.model/external/mysql-connector-java-5.1.48-license.txt
+++ /dev/null
@@ -1,316 +0,0 @@
-Name: MySQL Connector/J
-Version: 5.1.48
-License: GPL
-Type: compile-time
-Comment: Dependency required to run unit tests with DB support
-Description: MySQL Connector/J is the official JDBC driver for MySQL.
-Origin: https://dev.mysql.com/downloads/connector/j/
-
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software
-    interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as
-a special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it
-    does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License as
-    published by     the Free Software Foundation; either version
-    2 of the License, or (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-    type `show w'. This is free software, and you are welcome
-    to redistribute it under certain conditions; type `show c'
-    for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and
-`show c'; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  program `Gnomovision' (which makes passes at compilers) written
-  by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use
-the GNU Lesser General Public License instead of this License.
-
diff --git a/ide/db.metadata.model/nbproject/org-netbeans-modules-db-metadata-model.sig b/ide/db.metadata.model/nbproject/org-netbeans-modules-db-metadata-model.sig
index cff1f46..eb7d244 100644
--- a/ide/db.metadata.model/nbproject/org-netbeans-modules-db-metadata-model.sig
+++ b/ide/db.metadata.model/nbproject/org-netbeans-modules-db-metadata-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.28
+#Version 1.29
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/db.metadata.model/nbproject/project.properties b/ide/db.metadata.model/nbproject/project.properties
index 2458413..ae79a54 100644
--- a/ide/db.metadata.model/nbproject/project.properties
+++ b/ide/db.metadata.model/nbproject/project.properties
@@ -18,7 +18,7 @@
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
-test.unit.cp.extra=external/derby-10.14.2.0.jar\:external/mysql-connector-java-5.1.48.jar
+test.unit.cp.extra=external/derby-10.14.2.0.jar\:external/mysql-connector-j-8.0.31.jar
 
 test.config.stableBTD.includes=**/*Test.class
 test.config.stableBTD.excludes=\
diff --git a/ide/db.metadata.model/src/org/netbeans/modules/db/metadata/model/jdbc/mysql/MySQLSchema.java b/ide/db.metadata.model/src/org/netbeans/modules/db/metadata/model/jdbc/mysql/MySQLSchema.java
index b9ea136..6b9e55d 100644
--- a/ide/db.metadata.model/src/org/netbeans/modules/db/metadata/model/jdbc/mysql/MySQLSchema.java
+++ b/ide/db.metadata.model/src/org/netbeans/modules/db/metadata/model/jdbc/mysql/MySQLSchema.java
@@ -35,7 +35,6 @@
 import org.netbeans.modules.db.metadata.model.jdbc.JDBCSchema;
 
 /**
- *
  * @author David, Jiri Rechtacek
  */
 public class MySQLSchema extends JDBCSchema {
@@ -50,19 +49,20 @@
     protected void createProcedures() {
         LOGGER.log(Level.FINE, "Initializing MySQL procedures in {0}", this);
         Map<String, Procedure> newProcedures = new LinkedHashMap<String, Procedure>();
-        // routines
+        // information_schema.routines
         try {
             DatabaseMetaData dmd = jdbcCatalog.getJDBCMetadata().getDmd();
             Statement stmt = dmd.getConnection().createStatement();
-            ResultSet rs = stmt.executeQuery("SELECT NAME, TYPE" // NOI18N
-                                            + " FROM mysql.proc WHERE DB='" + jdbcCatalog.getName() + "'" // NOI18N
-                                            + " AND ( TYPE = 'PROCEDURE' OR TYPE = 'FUNCTION' )"); // NOI18N
+            ResultSet rs = stmt.executeQuery("SELECT routine_name,routine_type" // NOI18N
+                                           + " FROM information_schema.routines" // NOI18N
+                                           + " WHERE routine_type IN ('PROCEDURE','FUNCTION')" // NOI18N
+                                           + " AND routine_schema='" + jdbcCatalog.getName() + "'"); // NOI18N
             try {
                 while (rs.next()) {
-                    String procedureName = rs.getString("NAME"); // NOI18N
+                    String procedureName = rs.getString("routine_name"); // NOI18N
                     Procedure procedure = createJDBCProcedure(procedureName).getProcedure();
                     newProcedures.put(procedureName, procedure);
-                    LOGGER.log(Level.FINE, "Created MySQL procedure: {0}, type: {1}", new Object[]{procedure, rs.getString("TYPE")});
+                    LOGGER.log(Level.FINE, "Created MySQL procedure: {0}, type: {1}", new Object[]{procedure, rs.getString("routine_type")});
                 }
             } finally {
                 if (rs != null) {
diff --git a/ide/db.metadata.model/test/unit/src/org/netbeans/modules/db/metadata/model/jdbc/JDBCMetadataMySQLTest.java b/ide/db.metadata.model/test/unit/src/org/netbeans/modules/db/metadata/model/jdbc/JDBCMetadataMySQLTest.java
index 13c98cd..98f89cb 100644
--- a/ide/db.metadata.model/test/unit/src/org/netbeans/modules/db/metadata/model/jdbc/JDBCMetadataMySQLTest.java
+++ b/ide/db.metadata.model/test/unit/src/org/netbeans/modules/db/metadata/model/jdbc/JDBCMetadataMySQLTest.java
@@ -77,7 +77,7 @@
     @Override
     public boolean canRun() {
         try {
-            Class.forName("com.mysql.jdbc.Driver");
+            Class.forName("com.mysql.cj.jdbc.Driver");
             return super.canRun();
         } catch (ClassNotFoundException e) {
             LOG.warning(String.format("Test %s in %s disabled, %s not available", this.getName(), this.getClass().getName(), e.getMessage()));
@@ -93,7 +93,7 @@
         mysqlUser = System.getProperty("mysql.user", "test");
         mysqlPassword = System.getProperty("mysql.password", "test");
         clearWorkDir();
-        Class.forName("com.mysql.jdbc.Driver");
+        Class.forName("com.mysql.cj.jdbc.Driver");
         conn = DriverManager.getConnection("jdbc:mysql://" + mysqlHost + ":" + mysqlPort, mysqlUser, mysqlPassword);
         stmt = conn.createStatement();
         stmt.executeUpdate("DROP DATABASE IF EXISTS test");
diff --git a/ide/db.mysql/external/binaries-list b/ide/db.mysql/external/binaries-list
index a0c50ec..323f53c 100644
--- a/ide/db.mysql/external/binaries-list
+++ b/ide/db.mysql/external/binaries-list
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-53DA6AFDC5F7B45CAAA5BC3627028B2041A36CEE mysql:mysql-connector-java:8.0.17
+3FD5850719D7E82D50705D34CC6A0037FAB5731F com.mysql:mysql-connector-j:8.0.31
diff --git a/ide/db.mysql/external/mysql-connector-j-8.0.31-license.txt b/ide/db.mysql/external/mysql-connector-j-8.0.31-license.txt
new file mode 100644
index 0000000..eeaa4f5
--- /dev/null
+++ b/ide/db.mysql/external/mysql-connector-j-8.0.31-license.txt
@@ -0,0 +1,1392 @@
+Name: MySQL Connector/J
+Version: 8.0.31
+License: GPL-mysql-connector
+Type: compile-time
+Comment: Dependency required to run unit tests with DB support
+Description: MySQL Connector/J is the official JDBC driver for MySQL.
+Origin: https://dev.mysql.com/downloads/connector/j/
+
+Licensing Information User Manual
+
+MySQL Connector/J 8.0
+     __________________________________________________________________
+
+Introduction
+
+   This License Information User Manual contains Oracle's product license
+   and other licensing information, including licensing information for
+   third-party software which may be included in this distribution of
+   MySQL Connector/J 8.0.
+
+   Last updated: August 2022
+
+Licensing Information
+
+   This is a release of MySQL Connector/J 8.0, brought to you by the MySQL
+   team at Oracle. This software is released under version 2 of the GNU
+   General Public License (GPLv2), as set forth below, with the following
+   additional permissions:
+
+   This distribution of MySQL Connector/J 8.0 is distributed with certain
+   software that is licensed under separate terms, as designated in a
+   particular file or component or in the license documentation. Without
+   limiting your rights under the GPLv2, the authors of MySQL hereby grant
+   you an additional permission to link the program and your derivative
+   works with the separately licensed software that they have included
+   with the program.
+
+   Without limiting the foregoing grant of rights under the GPLv2 and
+   additional permission as to separately licensed software, this
+   Connector is also subject to the Universal FOSS Exception, version 1.0,
+   a copy of which is reproduced below and can also be found along with
+   its FAQ at http://oss.oracle.com/licenses/universal-foss-exception.
+
+   Copyright (c) 2017, 2022, Oracle and/or its affiliates.
+
+Election of GPLv2
+
+   For the avoidance of doubt, except that if any license choice other
+   than GPL or LGPL is available it will apply instead, Oracle elects to
+   use only the General Public License version 2 (GPLv2) at this time for
+   any software where a choice of GPL license versions is made available
+   with the language indicating that GPLv2 or any later version may be
+   used, or where a choice of which version of the GPL is applied is
+   otherwise unspecified.
+
+GNU General Public License Version 2.0, June 1991
+
+The following applies to all products licensed under the GNU General
+Public License, Version 2.0: You may not use the identified files
+except in compliance with the GNU General Public License, Version
+2.0 (the "License.") You may obtain a copy of the License at
+http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is
+also reproduced below. 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.
+
+
+  ======================================================================
+  ======================================================================
+
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim
+copies of this license document, but changing it is not
+allowed.
+
+                     Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on,
+we want its recipients to know that what they have is not the original,
+so that any problems introduced by others will not reflect on the
+original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software
+    interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as
+a special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new
+versions of the General Public License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Program does not specify a
+version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the
+author to ask for permission.  For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this.  Our decision will be guided by the
+two goals of preserving the free status of all derivatives of our free
+software and of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
+WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of
+
+    the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+    type 'show w'. This is free software, and you are welcome
+    to redistribute it under certain conditions; type 'show c'
+    for details.
+
+The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than 'show w' and
+'show c'; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  program 'Gnomovision' (which makes passes at compilers) written
+  by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library,
+you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the GNU Lesser General Public License instead of this License.
+
+   ======================================================================
+   ======================================================================
+
+The Universal FOSS Exception, Version 1.0
+
+   In addition to the rights set forth in the other license(s) included in
+   the distribution for this software, data, and/or documentation
+   (collectively the "Software", and such licenses collectively with this
+   additional permission the "Software License"), the copyright holders
+   wish to facilitate interoperability with other software, data, and/or
+   documentation distributed with complete corresponding source under a
+   license that is OSI-approved and/or categorized by the FSF as free
+   (collectively "Other FOSS"). We therefore hereby grant the following
+   additional permission with respect to the use and distribution of the
+   Software with Other FOSS, and the constants, function signatures, data
+   structures and other invocation methods used to run or interact with
+   each of them (as to each, such software's "Interfaces"):
+
+    i. The Software's Interfaces may, to the extent permitted by the
+       license of the Other FOSS, be copied into, used and distributed in
+       the Other FOSS in order to enable interoperability, without
+       requiring a change to the license of the Other FOSS other than as
+       to any Interfaces of the Software embedded therein. The Software's
+       Interfaces remain at all times under the Software License,
+       including without limitation as used in the Other FOSS (which upon
+       any such use also then contains a portion of the Software under the
+       Software License).
+
+   ii. The Other FOSS's Interfaces may, to the extent permitted by the
+       license of the Other FOSS, be copied into, used and distributed in
+       the Software in order to enable interoperability, without requiring
+       that such Interfaces be licensed under the terms of the Software
+       License or otherwise altering their original terms, if this does
+       not require any portion of the Software other than such Interfaces
+       to be licensed under the terms other than the Software License.
+
+   iii. If only Interfaces and no other code is copied between the
+       Software and the Other FOSS in either direction, the use and/or
+       distribution of the Software with the Other FOSS shall not be
+       deemed to require that the Other FOSS be licensed under the license
+       of the Software, other than as to any Interfaces of the Software
+       copied into the Other FOSS. This includes, by way of example and
+       without limitation, statically or dynamically linking the Software
+       together with Other FOSS after enabling interoperability using the
+       Interfaces of one or both, and distributing the resulting
+       combination under different licenses for the respective portions
+       thereof. For avoidance of doubt, a license which is OSI-approved or
+       categorized by the FSF as free, includes, for the purpose of this
+       permission, such licenses with additional permissions, and any
+       license that has previously been so approved or categorized as
+       free, even if now deprecated or otherwise no longer recognized as
+       approved or free. Nothing in this additional permission grants any
+       right to distribute any portion of the Software on terms other than
+       those of the Software License or grants any additional permission
+       of any kind for use or distribution of the Software in conjunction
+       with software other than Other FOSS.
+
+   ======================================================================
+   ======================================================================
+
+Licenses for Third-Party Components
+
+   The following sections contain licensing information for libraries that
+   may be included with this product. We are thankful to all individuals
+   that have created these. Standard licenses referenced herein are
+   detailed in the Standard Licenses section.
+
+c3p0 JDBC Library
+
+   The MySQL Connector/J implements interfaces that are included in c3p0,
+   although no part of c3p0 is included or distributed with MySQL.
+
+Copyright (C) 2019 Machinery For Change, Inc.
+
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of EITHER:
+ *
+ *     1) The GNU Lesser General Public License (LGPL), version 2.1, as
+ *        published by the Free Software Foundation
+ *
+ * OR
+ *
+ *     2) The Eclipse Public License (EPL), version 1.0
+ * You may choose which license to accept if you wish to redistribute
+ * or modify this work. You may offer derivatives of this work
+ * under the license you have chosen, or you may provide the same
+ * choice of license which you have been offered here.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received copies of both LGPL v2.1 and EPL v1.0
+ * along with this software; see the files LICENSE-EPL and LICENSE-LGPL.
+ * If not, the text of these licenses are currently available at
+ *
+ * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+ *  EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+
+   distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+   ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additionsto
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and such
+derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to
+its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other intellectual
+property rights of any other entity. Each Contributor disclaims any liability to
+Recipient for claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby assumes sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+     i) effectively disclaims on behalf of all Contributors all warranties
+        and conditions, express and implied, including warranties or conditions
+        of title and non-infringement, and implied warranties or conditions of
+        merchantability and fitness for a particular purpose;
+
+    ii) effectively excludes on behalf of all Contributors all liability for
+        damages, including direct, indirect, special, incidental and
+        consequential damages, such as lost profits;
+
+   iii) states that any provisions which differ from this Agreement are
+        offered by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such
+        Contributor, and informs licensees how to obtain it in a reasonable
+        manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement , including but not limited to the risks and costs
+of program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation
+may assign the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions) may always
+be distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property of
+any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
+
+   The LGPL v2.1 can be found in GNU Lesser General Public License Version
+   2.1, February 1999.
+
+   ======================================================================
+   ======================================================================
+
+Google Protocol Buffers
+
+Copyright 2008 Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+
+   ======================================================================
+   ======================================================================
+
+Unicode Data Files
+
+   Unicode Data Files
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. Distributed under
+the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files")
+or Unicode software and any associated documentation (the "Software") to deal
+in the Data Files or Software without restriction, including without
+limitation the rights to use, copy, modify, merge, publish, distribute,
+and/or sell copies of the Data Files or Software, and to permit persons to
+whom the Data Files or Software are furnished to do so, provided that (a) the
+above copyright notice(s) and this permission notice appear with all copies
+of the Data Files or Software, (b) both the above copyright notice(s) and
+this permission notice appear in associated documentation, and (c) there is
+clear notice in each modified Data File or in the Software as well as in the
+documentation associated with the Data File(s) or Software that the data or
+software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
+PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be
+used in advertising or otherwise to promote the sale, use or other dealings in
+these Data Files or Software without prior written authorization of the
+copyright holder.
+
+   ======================================================================
+   ======================================================================
+
+Standard Licenses
+
+GNU Lesser General Public License Version 2.1, February 1999
+
+The following applies to all products licensed under the
+GNU Lesser General Public License, Version 2.1: You may
+not use the identified files except in compliance with
+the GNU Lesser General Public License, Version 2.1 (the
+"License"). You may obtain a copy of the License at
+http://www.gnu.org/licenses/lgpl-2.1.html. A copy of the
+license is also reproduced below. 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.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs
+must be allowed to use the library.  A more frequent case is that
+a free library does the same job as widely used non-free libraries.
+In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended
+to apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+   ======================================================================
+   ======================================================================
+
+Written Offer for Source Code
+
+   For any software that you receive from Oracle in binary form which is
+   licensed under an open source license that gives you the right to
+   receive the source code for that binary, you can obtain a copy of the
+   applicable source code by visiting
+   http://www.oracle.com/goto/opensourcecode. If the source code for the
+   binary was not provided to you with the binary, you can also receive a
+   copy of the source code on physical media by submitting a written
+   request to the address listed below or by sending an email to Oracle
+   using the following link:
+   http://www.oracle.com/goto/opensourcecode/request.
+
+  Oracle America, Inc.
+  Attn: Senior Vice President
+  Development and Engineering Legal
+  500 Oracle Parkway, 10th Floor
+  Redwood Shores, CA 94065
+
+   Your request should include:
+
+     * The name of the binary for which you are requesting the source code
+
+     * The name and version number of the Oracle product containing the
+       binary
+
+     * The date you received the Oracle product
+
+     * Your name
+
+     * Your company name (if applicable)
+
+     * Your return mailing address and email, and
+
+     * A telephone number in the event we need to reach you.
+
+
+   We may charge you a fee to cover the cost of physical media and
+   processing.
+
+   Your request must be sent
+
+    a. within three (3) years of the date you received the Oracle product
+       that included the binary that is the subject of your request, or
+
+    b. in the case of code licensed under the GPL v3 for as long as Oracle
+       offers spare parts or customer support for that product model.
diff --git a/ide/db.mysql/external/mysql-connector-java-8.0.17-license.txt b/ide/db.mysql/external/mysql-connector-java-8.0.17-license.txt
deleted file mode 100644
index f5de633..0000000
--- a/ide/db.mysql/external/mysql-connector-java-8.0.17-license.txt
+++ /dev/null
@@ -1,1933 +0,0 @@
-Name: MySQL Connector/J
-Version: 8.0.17
-License: GPL-mysql-connector
-Type: compile-time
-Comment: Dependency required to run unit tests with DB support
-Description: MySQL Connector/J is the official JDBC driver for MySQL.
-Origin: https://dev.mysql.com/downloads/connector/j/
-
-Licensing Information User Manual
-
-MySQL Connector/J 8.0
-     __________________________________________________________________
-
-Introduction
-
-   This License Information User Manual contains Oracle's product license
-   and other licensing information, including licensing information for
-   third-party software which may be included in this distribution of
-   MySQL Connector/J 8.0.
-
-   Last updated: June 2019
-
-Licensing Information
-
-   This is a release of MySQL Connector/J 8.0, brought to you by the MySQL
-   team at Oracle. This software is released under version 2 of the GNU
-   General Public License (GPLv2), as set forth below, with the following
-   additional permissions:
-
-   This distribution of MySQL Connector/J 8.0 is distributed with certain
-   software that is licensed under separate terms, as designated in a
-   particular file or component or in the license documentation. Without
-   limiting your rights under the GPLv2, the authors of MySQL hereby grant
-   you an additional permission to link the program and your derivative
-   works with the separately licensed software that they have included
-   with the program.
-
-   Without limiting the foregoing grant of rights under the GPLv2 and
-   additional permission as to separately licensed software, this
-   Connector is also subject to the Universal FOSS Exception, version 1.0,
-   a copy of which is reproduced below and can also be found along with
-   its FAQ at http://oss.oracle.com/licenses/universal-foss-exception.
-
-   Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights
-   reserved.
-
-Election of GPLv2
-
-   For the avoidance of doubt, except that if any license choice other
-   than GPL or LGPL is available it will apply instead, Oracle elects to
-   use only the General Public License version 2 (GPLv2) at this time for
-   any software where a choice of GPL license versions is made available
-   with the language indicating that GPLv2 or any later version may be
-   used, or where a choice of which version of the GPL is applied is
-   otherwise unspecified.
-
-GNU General Public License Version 2.0, June 1991
-
-The following applies to all products licensed under the GNU General
-Public License, Version 2.0: You may not use the identified files
-except in compliance with the GNU General Public License, Version
-2.0 (the "License.") You may obtain a copy of the License at
-http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is
-also reproduced below. 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.
-
-GNU GENERAL PUBLIC LICENSE
-Version 2, June 1991
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-Everyone is permitted to copy and distribute verbatim
-copies of this license document, but changing it is not
-allowed.
-
-                     Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to
-copy, distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on,
-we want its recipients to know that what they have is not the original,
-so that any problems introduced by others will not reflect on the
-original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software
-    interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as
-a special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-
-  9. The Free Software Foundation may publish revised and/or new
-versions of the General Public License from time to time.  Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Program does not specify a
-version number of this License, you may choose any version ever
-published by the Free Software Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the
-author to ask for permission.  For software which is copyrighted by the
-Free Software Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this.  Our decision will be guided by the
-two goals of preserving the free status of all derivatives of our free
-software and of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
-EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
-WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License as
-    published by the Free Software Foundation; either version 2 of
-
-    the License, or (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-    type 'show w'. This is free software, and you are welcome
-    to redistribute it under certain conditions; type 'show c'
-    for details.
-
-The hypothetical commands 'show w' and 'show c' should show the
-appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than 'show w' and
-'show c'; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  program 'Gnomovision' (which makes passes at compilers) written
-  by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library,
-you may consider it more useful to permit linking proprietary
-applications with the library.  If this is what you want to do, use
-the GNU Lesser General Public License instead of this License.
-
-The Universal FOSS Exception, Version 1.0
-
-   In addition to the rights set forth in the other license(s) included in
-   the distribution for this software, data, and/or documentation
-   (collectively the "Software", and such licenses collectively with this
-   additional permission the "Software License"), the copyright holders
-   wish to facilitate interoperability with other software, data, and/or
-   documentation distributed with complete corresponding source under a
-   license that is OSI-approved and/or categorized by the FSF as free
-   (collectively "Other FOSS"). We therefore hereby grant the following
-   additional permission with respect to the use and distribution of the
-   Software with Other FOSS, and the constants, function signatures, data
-   structures and other invocation methods used to run or interact with
-   each of them (as to each, such software's "Interfaces"):
-    i. The Software's Interfaces may, to the extent permitted by the
-       license of the Other FOSS, be copied into, used and distributed in
-       the Other FOSS in order to enable interoperability, without
-       requiring a change to the license of the Other FOSS other than as
-       to any Interfaces of the Software embedded therein. The Software's
-       Interfaces remain at all times under the Software License,
-       including without limitation as used in the Other FOSS (which upon
-       any such use also then contains a portion of the Software under the
-       Software License).
-   ii. The Other FOSS's Interfaces may, to the extent permitted by the
-       license of the Other FOSS, be copied into, used and distributed in
-       the Software in order to enable interoperability, without requiring
-       that such Interfaces be licensed under the terms of the Software
-       License or otherwise altering their original terms, if this does
-       not require any portion of the Software other than such Interfaces
-       to be licensed under the terms other than the Software License.
-   iii. If only Interfaces and no other code is copied between the
-       Software and the Other FOSS in either direction, the use and/or
-       distribution of the Software with the Other FOSS shall not be
-       deemed to require that the Other FOSS be licensed under the license
-       of the Software, other than as to any Interfaces of the Software
-       copied into the Other FOSS. This includes, by way of example and
-       without limitation, statically or dynamically linking the Software
-       together with Other FOSS after enabling interoperability using the
-       Interfaces of one or both, and distributing the resulting
-       combination under different licenses for the respective portions
-       thereof. For avoidance of doubt, a license which is OSI-approved or
-       categorized by the FSF as free, includes, for the purpose of this
-       permission, such licenses with additional permissions, and any
-       license that has previously been so approved or categorized as
-       free, even if now deprecated or otherwise no longer recognized as
-       approved or free. Nothing in this additional permission grants any
-       right to distribute any portion of the Software on terms other than
-       those of the Software License or grants any additional permission
-       of any kind for use or distribution of the Software in conjunction
-       with software other than Other FOSS.
-
-Licenses for Third-Party Components
-
-   The following sections contain licensing information for libraries that
-   we have included with the MySQL Connector/J 8.0 source and components
-   used to test MySQL Connector/J 8.0. Commonly used licenses referenced
-   herein can be found in Commonly Used Licenses. We are thankful to all
-   individuals that have created these.
-
-Ant-Contrib
-
-   The following software may be included in this product:
-Ant-Contrib
-Copyright (c) 2001-2003 Ant-Contrib project. All rights reserved.
-Licensed under the Apache 1.1 License Agreement, a copy of which is reproduced b
-elow.
-
-The Apache Software License, Version 1.1
-
-Copyright (c) 2001-2003 Ant-Contrib project.  All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
-
- 4. The name Ant-Contrib must not be used to endorse or promote
-    products derived from this software without prior written
-    permission. For written permission, please contact
-    ant-contrib-developers@lists.sourceforge.net.
-
-
- 5. Products derived from this software may not be called "Ant-Contrib"
-    nor may "Ant-Contrib" appear in their names without prior written
-    permission of the Ant-Contrib project.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR ITS
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
-c3p0 JDBC Library
-
-   This product may include a copy of c3p0-0.9.1-pre6.jar in both source
-   and object code in the following /src/lib/c3p0-0.9.1-pre6.jar. The
-   terms of the Oracle license do NOT apply to c3p0-0.9.1-pre6.jar; it is
-   licensed under the following license, separately from the Oracle
-   programs you receive. If you do not wish to install this library, you
-   may remove the file /src/lib/c3p0-0.9.1-pre6.jar, but the Oracle
-   program might not operate properly or at all without the library.
-
-   This component is licensed under GNU Lesser General Public License
-   Version 2.1, February 1999.
-
-Google Protocol Buffers
-
-   The following software may be included in this product:
-Copyright 2008 Google Inc.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Code generated by the Protocol Buffer compiler is owned by the owner
-of the input file used when generating it.  This code is not
-standalone and requires a support library to be linked with it.  This
-support library is itself covered by the above license.
-
-jboss-common-jdbc-wrapper.jar
-
-   This product may include a copy of jboss-common-jdbc-wrapper.jar in
-   both source and object code in the following
-   /src/lib/jboss-common-jdbc-wrapper.jar. The terms of the Oracle license
-   do NOT apply to jboss-common-jdbc-wrapper.jar; it is licensed under the
-   following license, separately from the Oracle programs you receive. If
-   you do not wish to install this library, you may remove the file
-   /src/lib/jboss-common-jdbc-wrapper.jar, but the Oracle program might
-   not operate properly or at all without the library.
-
-   This component is licensed under GNU Lesser General Public License
-   Version 2.1, February 1999.
-
-NanoXML
-
-   The following software may be included in this product:
-
-   NanoXML
-
- * Copyright (C) 2000-2002 Marc De Scheemaecker, All Rights Reserved.
- *
-
- * This software is provided 'as-is', without any express or implied warranty.
-
- * In no event will the authors be held liable for any damages arising from the
-
- * use of this software.
- *
-
- * Permission is granted to anyone to use this software for any purpose,
-
- * including commercial applications, and to alter it and redistribute it
-
- * freely, subject to the following restrictions:
- *
-
- *  1. The origin of this software must not be misrepresented; you must not
-
- *     claim that you wrote the original software. If you use this software in
-
- *     a product, an acknowledgment in the product documentation would be
-
- *     appreciated but is not required.
- *
-
- *  2. Altered source versions must be plainly marked as such, and must not be
-
- *     misrepresented as being the original software.
- *
-
- *  3. This notice may not be removed or altered from any source distribution.
- *
-
-rox.jar
-
-   The following software may be included in this product:
-
-   rox.jar
-Copyright (c) 2006, James Greenfield
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-
-    * Redistributions of source code must retain the above copyright notice, thi
-s
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    * Neither the name of the <ORGANIZATION> nor the names of its contributors
-      may be used to endorse or promote products derived from this software
-      without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIE
-D
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVI
-CES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Simple Logging Facade for Java (SLF4J)
-
-   The following software may be included in this product:
-Simple Logging Facade for Java (SLF4J)
-
-Copyright (c) 2004-2011 QOS.ch
-All rights reserved.
-
-Permission is hereby granted, free of charge,
-to any person obtaining a copy of this software
-and associated documentation files (the "Software"),
-to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify,
-merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom
-the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
-OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
-EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Unicode Data Files
-
-   The following software may be included in this product:
-
-   Unicode Data Files
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. Distributed under
-the Terms of Use in http://www.unicode.org/copyright.html.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of the Unicode data files and any associated documentation (the "Data Files")
-or Unicode software and any associated documentation (the "Software") to deal
-in the Data Files or Software without restriction, including without
-limitation the rights to use, copy, modify, merge, publish, distribute,
-and/or sell copies of the Data Files or Software, and to permit persons to
-whom the Data Files or Software are furnished to do so, provided that (a) the
-above copyright notice(s) and this permission notice appear with all copies
-of the Data Files or Software, (b) both the above copyright notice(s) and
-this permission notice appear in associated documentation, and (c) there is
-clear notice in each modified Data File or in the Software as well as in the
-documentation associated with the Data File(s) or Software that the data or
-software has been modified.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE
-DATA FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other
-dealings in these Data Files or Software without prior written authorization
-of the copyright holder.
-
-Commonly Used Licenses
-
-Artistic License (Perl) 1.0
-
-The "Artistic License"
-
-Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
-        "Package" refers to the collection of files distributed by the
-        Copyright Holder, and derivatives of that collection of files
-        created through textual modification.
-
-        "Standard Version" refers to such a Package if it has not been
-        modified, or has been modified in accordance with the wishes
-        of the Copyright Holder as specified below.
-
-        "Copyright Holder" is whoever is named in the copyright or
-        copyrights for the package.
-
-        "You" is you, if you're thinking about copying or distributing
-        this Package.
-
-        "Reasonable copying fee" is whatever you can justify on the
-        basis of media cost, duplication charges, time of people involved,
-        and so on.  (You will not be required to justify it to the
-        Copyright Holder, but only to the computing community at large
-        as a market that must bear the fee.)
-
-        "Freely Available" means that no fee is charged for the item
-        itself, though there may be fees involved in handling the item.
-        It also means that recipients of the item may redistribute it
-        under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder.  A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
-    a) place your modifications in the Public Domain or otherwise make them
-    Freely Available, such as by posting said modifications to Usenet or
-    an equivalent medium, or placing the modifications on a major archive
-    site such as uunet.uu.net, or by allowing the Copyright Holder to include
-    your modifications in the Standard Version of the Package.
-
-    b) use the modified Package only within your corporation or organization.
-
-    c) rename any non-standard executables so the names do not conflict
-    with standard executables, which must also be provided, and provide
-    a separate manual page for each non-standard executable that clearly
-    documents how it differs from the Standard Version.
-
-    d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
-    a) distribute a Standard Version of the executables and library files,
-    together with instructions (in the manual page or equivalent) on where
-    to get the Standard Version.
-
-    b) accompany the distribution with the machine-readable source of
-    the Package with your modifications.
-
-    c) give non-standard executables non-standard names, and clearly
-    document the differences in manual pages (or equivalent), together
-    with instructions on where to get the Standard Version.
-
-    d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package.  You may charge any fee you choose for support of this
-Package.  You may not charge a fee for this Package itself.  However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own.  You may embed this Package's interpreter within
-an executable of yours (by linking); this shall be construed as a mere
-form of aggregation, provided that the complete Standard Version of the
-interpreter is so embedded.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whoever generated
-them, and may be sold commercially, and may be aggregated with this
-Package.  If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you do
-not represent such an executable image as a Standard Version of this
-Package.
-
-7. C subroutines (or comparably compiled subroutines in other
-languages) supplied by you and linked into this Package in order to
-emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. Aggregation of this Package with a commercial distribution is always
-permitted provided that the use of this Package is embedded; that is,
-when no overt attempt is made to make this Package's interfaces visible
-to the end user of the commercial distribution.  Such use shall not be
-construed as a distribution of this Package.
-
-9. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-                                The End
-
-GNU Lesser General Public License Version 2.1, February 1999
-
-The following applies to all products licensed under the
-GNU Lesser General Public License, Version 2.1: You may
-not use the identified files except in compliance with
-the GNU Lesser General Public License, Version 2.1 (the
-"License"). You may obtain a copy of the License at
-http://www.gnu.org/licenses/lgpl-2.1.html. A copy of the
-license is also reproduced below. 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.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard.  To achieve this, non-free programs
-must be allowed to use the library.  A more frequent case is that
-a free library does the same job as widely used non-free libraries.
-In this case, there is little to gain by limiting the free library
-to free software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended
-to apply, and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James
-  Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-GNU Lesser General Public License Version 2, June 1991
-
-GNU LIBRARY GENERAL PUBLIC LICENSE
-
-Version 2, June 1991
-
-Copyright (C) 1991 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is numbered 2
-because it goes with version 2 of the ordinary GPL.]
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to
-share and change it. By contrast, the GNU General Public Licenses are
-intended to guarantee your freedom to share and change free software--to make
-sure the software is free for all its users.
-
-This license, the Library General Public License, applies to some specially
-designated Free Software Foundation software, and to any other libraries
-whose authors decide to use it. You can use it for your libraries, too.
-
-When we speak of free software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you have the freedom
-to distribute copies of free software (and charge for this service if you
-wish), that you receive source code or can get it if you want it, that you
-can change the software or use pieces of it in new free programs; and that
-you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to
-deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the library, or if you modify it.
-
-For example, if you distribute copies of the library, whether gratis or for a
-fee, you must give the recipients all the rights that we gave you. You must
-make sure that they, too, receive or can get the source code. If you link a
-program with the library, you must provide complete object files to the
-recipients so that they can relink them with the library, after making
-changes to the library and recompiling it. And you must show them these terms
-so they know their rights.
-
-Our method of protecting your rights has two steps: (1) copyright the
-library, and (2) offer you this license which gives you legal permission to
-copy, distribute and/or modify the library.
-
-Also, for each distributor's protection, we want to make certain that
-everyone understands that there is no warranty for this free library. If the
-library is modified by someone else and passed on, we want its recipients to
-know that what they have is not the original version, so that any problems
-introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We
-wish to avoid the danger that companies distributing free software will
-individually obtain patent licenses, thus in effect transforming the program
-into proprietary software. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-Most GNU software, including some libraries, is covered by the ordinary GNU
-General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary one;
-be sure to read it in full, and don't assume that anything in it is the same
-as in the ordinary license.
-
-The reason we have a separate public license for some libraries is that they
-blur the distinction we usually make between modifying or adding to a program
-and simply using it. Linking a program with a library, without changing the
-library, is in some sense simply using the library, and is analogous to
-running a utility program or application program. However, in a textual and
-legal sense, the linked executable is a combined work, a derivative of the
-original library, and the ordinary General Public License treats it as such.
-
-Because of this blurred distinction, using the ordinary General Public
-License for libraries did not effectively promote software sharing, because
-most developers did not use the libraries. We concluded that weaker
-conditions might promote sharing better.
-
-However, unrestricted linking of non-free programs would deprive the users of
-those programs of all benefit from the free status of the libraries
-themselves. This Library General Public License is intended to permit
-developers of non-free programs to use free libraries, while preserving your
-freedom as a user of such programs to change the free libraries that are
-incorporated in them. (We have not seen how to achieve this as regards
-changes in header files, but we have achieved it as regards changes in the
-actual functions of the Library.) The hope is that this will lead to faster
-development of free libraries.
-
-The precise terms and conditions for copying, distribution and modification
-follow. Pay close attention to the difference between a "work based on the
-library" and a "work that uses the library". The former contains code derived
-from the library, while the latter only works together with the library.
-
-Note that it is possible for a library to be covered by the ordinary General
-Public License rather than by this special one.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License Agreement applies to any software library which contains a
-notice placed by the copyright holder or other authorized party saying it may
-be distributed under the terms of this Library General Public License (also
-called "this License"). Each licensee is addressed as "you".
-
-A "library" means a collection of software functions and/or data prepared so
-as to be conveniently linked with application programs (which use some of
-those functions and data) to form executables.
-
-The "Library", below, refers to any such software library or work which has
-been distributed under these terms. A "work based on the Library" means
-either the Library or any derivative work under copyright law: that is to
-say, a work containing the Library or a portion of it, either verbatim or
-with modifications and/or translated straightforwardly into another language.
-(Hereinafter, translation is included without limitation in the term
-"modification".)
-
-"Source code" for a work means the preferred form of the work for making
-modifications to it. For a library, complete source code means all the source
-code for all modules it contains, plus any associated interface definition
-files, plus the scripts used to control compilation and installation of the
-library.
-
-Activities other than copying, distribution and modification are not covered
-by this License; they are outside its scope. The act of running a program
-using the Library is not restricted, and output from such a program is
-covered only if its contents constitute a work based on the Library
-(independent of the use of the Library in a tool for writing it). Whether
-that is true depends on what the Library does and what the program that uses
-the Library does.
-
-1. You may copy and distribute verbatim copies of the Library's complete
-source code as you receive it, in any medium, provided that you conspicuously
-and appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this
-License and to the absence of any warranty; and distribute a copy of this
-License along with the Library.
-
-You may charge a fee for the physical act of transferring a copy, and you may
-at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Library or any portion of it,
-thus forming a work based on the Library, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that you
-also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-    b) You must cause the files modified to carry prominent notices stating
-that you changed the files and the date of any change.
-    c) You must cause the whole of the work to be licensed at no charge to
-all third parties under the terms of this License.
-    d) If a facility in the modified Library refers to a function or a table
-of data to be supplied by an application program that uses the facility,
-other than as an argument passed when the facility is invoked, then you must
-make a good faith effort to ensure that, in the event an application does not
-supply such function or table, the facility still operates, and performs
-whatever part of its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has a
-purpose that is entirely well-defined independent of the application.
-Therefore, Subsection 2d requires that any application-supplied function or
-table used by this function must be optional: if the application does not
-supply it, the square root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Library, and can be reasonably
-considered independent and separate works in themselves, then this License,
-and its terms, do not apply to those sections when you distribute them as
-separate works. But when you distribute the same sections as part of a whole
-which is a work based on the Library, the distribution of the whole must be
-on the terms of this License, whose permissions for other licensees extend to
-the entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Library.
-
-In addition, mere aggregation of another work not based on the Library with
-the Library (or with a work based on the Library) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-
-3. You may opt to apply the terms of the ordinary GNU General Public License
-instead of this License to a given copy of the Library. To do this, you must
-alter all the notices that refer to this License, so that they refer to the
-ordinary GNU General Public License, version 2, instead of to this License.
-(If a newer version than version 2 of the ordinary GNU General Public License
-has appeared, then you can specify that version instead if you wish.) Do not
-make any other change in these notices.
-
-Once this change is made in a given copy, it is irreversible for that copy,
-so the ordinary GNU General Public License applies to all subsequent copies
-and derivative works made from that copy.
-
-This option is useful when you wish to copy part of the code of the Library
-into a program that is not a library.
-
-4. You may copy and distribute the Library (or a portion or derivative of it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you accompany it with the complete
-corresponding machine-readable source code, which must be distributed under
-the terms of Sections 1 and 2 above on a medium customarily used for software
-interchange.
-
-If distribution of object code is made by offering access to copy from a
-designated place, then offering equivalent access to copy the source code
-from the same place satisfies the requirement to distribute the source code,
-even though third parties are not compelled to copy the source along with the
-object code.
-
-5. A program that contains no derivative of any portion of the Library, but
-is designed to work with the Library by being compiled or linked with it, is
-called a "work that uses the Library". Such a work, in isolation, is not a
-derivative work of the Library, and therefore falls outside the scope of this
-License.
-
-However, linking a "work that uses the Library" with the Library creates an
-executable that is a derivative of the Library (because it contains portions
-of the Library), rather than a "work that uses the library". The executable
-is therefore covered by this License. Section 6 states terms for distribution
-of such executables.
-
-When a "work that uses the Library" uses material from a header file that is
-part of the Library, the object code for the work may be a derivative work of
-the Library even though the source code is not. Whether this is true is
-especially significant if the work can be linked without the Library, or if
-the work is itself a library. The threshold for this to be true is not
-precisely defined by law.
-
-If such an object file uses only numerical parameters, data structure layouts
-and accessors, and small macros and small inline functions (ten lines or less
-in length), then the use of the object file is unrestricted, regardless of
-whether it is legally a derivative work. (Executables containing this object
-code plus portions of the Library will still fall under Section 6.)
-
-Otherwise, if the work is a derivative of the Library, you may distribute the
-object code for the work under the terms of Section 6. Any executables
-containing that work also fall under Section 6, whether or not they are
-linked directly with the Library itself.
-
-6. As an exception to the Sections above, you may also compile or link a
-"work that uses the Library" with the Library to produce a work containing
-portions of the Library, and distribute that work under terms of your choice,
-provided that the terms permit modification of the work for the customer's
-own use and reverse engineering for debugging such modifications.
-
-You must give prominent notice with each copy of the work that the Library is
-used in it and that the Library and its use are covered by this License. You
-must supply a copy of this License. If the work during execution displays
-copyright notices, you must include the copyright notice for the Library
-among them, as well as a reference directing the user to the copy of this
-License. Also, you must do one of these things:
-
-    a) Accompany the work with the complete corresponding machine-readable
-source code for the Library including whatever changes were used in the work
-(which must be distributed under Sections 1 and 2 above); and, if the work is
-an executable linked with the Library, with the complete machine-readable
-"work that uses the Library", as object code and/or source code, so that the
-user can modify the Library and then relink to produce a modified executable
-containing the modified Library. (It is understood that the user who changes
-the contents of definitions files in the Library will not necessarily be able
-to recompile the application to use the modified definitions.)
-    b) Accompany the work with a written offer, valid for at least three
-years, to give the same user the materials specified in Subsection 6a, above,
-for a charge no more than the cost of performing this distribution.
-    c) If distribution of the work is made by offering access to copy from a
-designated place, offer equivalent access to copy the above specified
-materials from the same place.
-    d) Verify that the user has already received a copy of these materials or
-that you have already sent this user a copy.
-
-For an executable, the required form of the "work that uses the Library" must
-include any data and utility programs needed for reproducing the executable
-from it. However, as a special exception, the source code distributed need
-not include anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component itself
-accompanies the executable.
-
-It may happen that this requirement contradicts the license restrictions of
-other proprietary libraries that do not normally accompany the operating
-system. Such a contradiction means you cannot use both them and the Library
-together in an executable that you distribute.
-
-7. You may place library facilities that are a work based on the Library
-side-by-side in a single library together with other library facilities not
-covered by this License, and distribute such a combined library, provided
-that the separate distribution of the work based on the Library and of the
-other library facilities is otherwise permitted, and provided that you do
-these two things:
-
-    a) Accompany the combined library with a copy of the same work based on
-the Library, uncombined with any other library facilities. This must be
-distributed under the terms of the Sections above.
-    b) Give prominent notice with the combined library of the fact that part
-of it is a work based on the Library, and explaining where to find the
-accompanying uncombined form of the same work.
-
-8. You may not copy, modify, sublicense, link with, or distribute the Library
-except as expressly provided under this License. Any attempt otherwise to
-copy, modify, sublicense, link with, or distribute the Library is void, and
-will automatically terminate your rights under this License. However, parties
-who have received copies, or rights, from you under this License will not
-have their licenses terminated so long as such parties remain in full
-compliance.
-
-9. You are not required to accept this License, since you have not signed it.
-However, nothing else grants you permission to modify or distribute the
-Library or its derivative works. These actions are prohibited by law if you
-do not accept this License. Therefore, by modifying or distributing the
-Library (or any work based on the Library), you indicate your acceptance of
-this License to do so, and all its terms and conditions for copying,
-distributing or modifying the Library or works based on it.
-
-10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the original
-licensor to copy, distribute, link with or modify the Library subject to
-these terms and conditions. You may not impose any further restrictions on
-the recipients' exercise of the rights granted herein. You are not
-responsible for enforcing compliance by third parties to this License.
-
-11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not excuse
-you from the conditions of this License. If you cannot distribute so as to
-satisfy simultaneously your obligations under this License and any other
-pertinent obligations, then as a consequence you may not distribute the
-Library at all. For example, if a patent license would not permit
-royalty-free redistribution of the Library by all those who receive copies
-directly or indirectly through you, then the only way you could satisfy both
-it and this License would be to refrain entirely from distribution of the
-Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply, and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents
-or other property right claims or to contest validity of any such claims;
-this section has the sole purpose of protecting the integrity of the free
-software distribution system which is implemented by public license
-practices. Many people have made generous contributions to the wide range of
-software distributed through that system in reliance on consistent
-application of that system; it is up to the author/donor to decide if he or
-she is willing to distribute software through any other system and a licensee
-cannot impose that choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-12. If the distribution and/or use of the Library is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Library under this License may add an
-explicit geographical distribution limitation excluding those countries, so
-that distribution is permitted only in or among countries not thus excluded.
-In such case, this License incorporates the limitation as if written in the
-body of this License.
-
-13. The Free Software Foundation may publish revised and/or new versions of
-the Library General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and "any later
-version", you have the option of following the terms and conditions either of
-that version or of any later version published by the Free Software
-Foundation. If the Library does not specify a license version number, you may
-choose any version ever published by the Free Software Foundation.
-
-14. If you wish to incorporate parts of the Library into other free programs
-whose distribution conditions are incompatible with these, write to the
-author to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes make
-exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and of
-promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
-THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
-STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
-LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
-THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER
-SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-END OF TERMS AND CONDITIONS
-How to Apply These Terms to Your New Libraries
-
-If you develop a new library, and you want it to be of the greatest possible
-use to the public, we recommend making it free software that everyone can
-redistribute and change. You can do so by permitting redistribution under
-these terms (or, alternatively, under the terms of the ordinary General
-Public License).
-
-To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-one line to give the library's name and an idea of what it does.
-Copyright (C) year  name of author
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the
-Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-Boston, MA  02110-1301, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest in
-the library `Frob' (a library for tweaking knobs) written
-by James Random Hacker.
-
-signature of Ty Coon, 1 April 1990
-Ty Coon, President of Vice
-
-That's all there is to it!
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Written Offer for Source Code
-
-   For any software that you receive from Oracle in binary form which is
-   licensed under an open source license that gives you the right to
-   receive the source code for that binary, you can obtain a copy of the
-   applicable source code by visiting
-   http://www.oracle.com/goto/opensourcecode. If the source code for the
-   binary was not provided to you with the binary, you can also receive a
-   copy of the source code on physical media by submitting a written
-   request to the address listed below or by sending an email to Oracle
-   using the following link:
-   http://www.oracle.com/goto/opensourcecode/request.
-  Oracle America, Inc.
-  Attn: Senior Vice President
-  Development and Engineering Legal
-  500 Oracle Parkway, 10th Floor
-  Redwood Shores, CA 94065
-
-   Your request should include:
-
-     * The name of the binary for which you are requesting the source code
-
-     * The name and version number of the Oracle product containing the
-       binary
-
-     * The date you received the Oracle product
-
-     * Your name
-
-     * Your company name (if applicable)
-
-     * Your return mailing address and email, and
-
-     * A telephone number in the event we need to reach you.
-
-   We may charge you a fee to cover the cost of physical media and
-   processing.
-
-   Your request must be sent
-    a. within three (3) years of the date you received the Oracle product
-       that included the binary that is the subject of your request, or
-    b. in the case of code licensed under the GPL v3 for as long as Oracle
-       offers spare parts or customer support for that product model.
diff --git a/ide/db.mysql/nbproject/org-netbeans-modules-db-mysql.sig b/ide/db.mysql/nbproject/org-netbeans-modules-db-mysql.sig
index 3521621..c372bb5 100644
--- a/ide/db.mysql/nbproject/org-netbeans-modules-db-mysql.sig
+++ b/ide/db.mysql/nbproject/org-netbeans-modules-db-mysql.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.45.0
+#Version 0.46.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/db.mysql/nbproject/project.properties b/ide/db.mysql/nbproject/project.properties
index 6170256..4668ce5 100644
--- a/ide/db.mysql/nbproject/project.properties
+++ b/ide/db.mysql/nbproject/project.properties
@@ -18,4 +18,4 @@
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=0.47.0
 
-test.unit.cp.extra=external/mysql-connector-java-8.0.17.jar
+test.unit.cp.extra=external/mysql-connector-j-8.0.31.jar
diff --git a/ide/db.mysql/src/org/netbeans/modules/db/mysql/Database.java b/ide/db.mysql/src/org/netbeans/modules/db/mysql/Database.java
index 74181b3..db675dd 100644
--- a/ide/db.mysql/src/org/netbeans/modules/db/mysql/Database.java
+++ b/ide/db.mysql/src/org/netbeans/modules/db/mysql/Database.java
@@ -58,8 +58,8 @@
     
     @Override
     public boolean equals(Object other) {
-        return other != null && other instanceof Database &&
-                ((Database)other).getDbName().equals(getDbName());
+        return other instanceof Database &&
+               ((Database) other).getDbName().equals(getDbName());
     }
     
     @Override
diff --git a/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/ConnectionProcessor.java b/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/ConnectionProcessor.java
index c42d6de..62ac090 100644
--- a/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/ConnectionProcessor.java
+++ b/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/ConnectionProcessor.java
@@ -49,7 +49,7 @@
     // synchronized on this
     private Quoter quoter;
 
-    private final AtomicReference<Thread> taskThreadRef = new AtomicReference<Thread>();;
+    private final AtomicReference<Thread> taskThreadRef = new AtomicReference<Thread>();
 
     synchronized void setConnection(Connection conn) throws DatabaseException {
         this.conn = conn;
diff --git a/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/MySQLDatabaseServer.java b/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/MySQLDatabaseServer.java
index 1f24056..6ba3c29 100644
--- a/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/MySQLDatabaseServer.java
+++ b/ide/db.mysql/src/org/netbeans/modules/db/mysql/impl/MySQLDatabaseServer.java
@@ -89,7 +89,7 @@
     private static InputOutput OUTPUT = null;
 
     // guarded by static variable "lock"
-    private static volatile DatabaseServer DEFAULT;;
+    private static volatile DatabaseServer DEFAULT;
 
     private static final MySQLOptions OPTIONS = MySQLOptions.getDefault();
 
diff --git a/ide/db.mysql/src/org/netbeans/modules/db/mysql/util/DatabaseUtils.java b/ide/db.mysql/src/org/netbeans/modules/db/mysql/util/DatabaseUtils.java
index 3ec8387..f3928d0 100644
--- a/ide/db.mysql/src/org/netbeans/modules/db/mysql/util/DatabaseUtils.java
+++ b/ide/db.mysql/src/org/netbeans/modules/db/mysql/util/DatabaseUtils.java
@@ -331,7 +331,7 @@
     }
 
     public static boolean isCommunicationsException(DatabaseException dbe) {
-        if (dbe.getCause() == null || !(dbe.getCause() instanceof SQLException)) {
+        if (!(dbe.getCause() instanceof SQLException)) {
             return false;
         }
 
diff --git a/ide/db.sql.editor/nbproject/org-netbeans-modules-db-sql-editor.sig b/ide/db.sql.editor/nbproject/org-netbeans-modules-db-sql-editor.sig
index 917611c..abf80ad 100644
--- a/ide/db.sql.editor/nbproject/org-netbeans-modules-db-sql-editor.sig
+++ b/ide/db.sql.editor/nbproject/org-netbeans-modules-db-sql-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54.0
+#Version 1.55.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/db.sql.visualeditor/nbproject/org-netbeans-modules-db-sql-visualeditor.sig b/ide/db.sql.visualeditor/nbproject/org-netbeans-modules-db-sql-visualeditor.sig
index 2f167b1..b856c84 100644
--- a/ide/db.sql.visualeditor/nbproject/org-netbeans-modules-db-sql-visualeditor.sig
+++ b/ide/db.sql.visualeditor/nbproject/org-netbeans-modules-db-sql-visualeditor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.49.0
+#Version 2.50.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1970,7 +1970,7 @@
 CLSS public org.netbeans.modules.db.sql.visualeditor.querybuilder.QueryBuilderMetaData
 meth public java.lang.String getIdentifierQuoteString()
 meth public java.util.List<java.lang.String> getColumnNames(java.lang.String) throws java.sql.SQLException
-meth public void getColumnNames(java.lang.String,java.util.List)
+meth public void getColumnNames(java.lang.String,java.util.List<java.lang.String>)
 supr java.lang.Object
 hfds DEBUG,allColumnNames,importKcTable,metadata,queryBuilder
 
diff --git a/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderGraphFrame.java b/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderGraphFrame.java
index 03064c8..0574c3a 100644
--- a/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderGraphFrame.java
+++ b/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderGraphFrame.java
@@ -2039,7 +2039,7 @@
         public void select(Widget widget, Point localLocation, boolean invertSelection) {
 
             Object object = _scene.findObject(widget);
-            if ((object != null) && (object instanceof AbstractNode)) {
+            if (object instanceof AbstractNode) {
 		AbstractNode an = (AbstractNode)object;
 		_queryBuilder.setActivatedNodes(new Node[] { an });
                 _scene.userSelectionSuggested(Collections.singleton(object), invertSelection);
diff --git a/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderSqlTextArea.java b/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderSqlTextArea.java
index 0372da1..95e7056 100644
--- a/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderSqlTextArea.java
+++ b/ide/db.sql.visualeditor/src/org/netbeans/modules/db/sql/visualeditor/querybuilder/QueryBuilderSqlTextArea.java
@@ -395,7 +395,7 @@
 //     }
     
 //     private void processWords(String str){
-//         StringBuffer wordBuffer = new StringBuffer();;
+//         StringBuffer wordBuffer = new StringBuffer();
 //         stringIsParsed = false;
 //         for ( int i =0; i < str.length(); i++ ) {
 //             char strChar = str.charAt(i);
diff --git a/ide/db/nbproject/org-netbeans-modules-db.sig b/ide/db/nbproject/org-netbeans-modules-db.sig
index 0958c25..8b86b17 100644
--- a/ide/db/nbproject/org-netbeans-modules-db.sig
+++ b/ide/db/nbproject/org-netbeans-modules-db.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.86.0
+#Version 1.87.0
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.form b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.form
index d9dafb8..f0368cd 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.form
+++ b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.form
@@ -40,12 +40,12 @@
           <Group type="102" alignment="1" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
               <Group type="103" groupAlignment="1" attributes="0">
-                  <Component id="spParams" alignment="0" pref="419" max="32767" attributes="0"/>
-                  <Component id="spBody" alignment="0" pref="419" max="32767" attributes="0"/>
+                  <Component id="spParams" alignment="0" pref="826" max="32767" attributes="0"/>
+                  <Component id="spBody" alignment="0" pref="826" max="32767" attributes="0"/>
                   <Group type="102" alignment="0" attributes="0">
                       <Component id="lName" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
-                      <Component id="tfName" pref="362" max="32767" attributes="0"/>
+                      <Component id="tfName" pref="756" max="32767" attributes="0"/>
                   </Group>
                   <Component id="lParams" alignment="0" min="-2" max="-2" attributes="0"/>
                   <Component id="lBody" alignment="0" min="-2" max="-2" attributes="0"/>
@@ -65,11 +65,11 @@
               <EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
               <Component id="lParams" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="spParams" min="-2" pref="101" max="-2" attributes="0"/>
+              <Component id="spParams" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="32767" attributes="0"/>
               <Component id="lBody" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="spBody" min="-2" pref="206" max="-2" attributes="0"/>
+              <Component id="spBody" min="-2" pref="262" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
       </Group>
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.java b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.java
index 2d83a62..004b9a7 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.java
+++ b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ViewProcedureDialog.java
@@ -92,12 +92,12 @@
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(spParams, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
-                    .addComponent(spBody, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
+                    .addComponent(spParams, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 826, Short.MAX_VALUE)
+                    .addComponent(spBody, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 826, Short.MAX_VALUE)
                     .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                         .addComponent(lName)
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(tfName, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE))
+                        .addComponent(tfName, javax.swing.GroupLayout.DEFAULT_SIZE, 756, Short.MAX_VALUE))
                     .addComponent(lParams, javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(lBody, javax.swing.GroupLayout.Alignment.LEADING))
                 .addContainerGap())
@@ -112,11 +112,11 @@
                 .addGap(18, 18, 18)
                 .addComponent(lParams)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(spParams, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(spParams, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addComponent(lBody)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(spBody, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(spBody, javax.swing.GroupLayout.PREFERRED_SIZE, 262, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addContainerGap())
         );
 
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/node/Bundle.properties b/ide/db/src/org/netbeans/modules/db/explorer/node/Bundle.properties
index 0a679ed..63cd456 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/node/Bundle.properties
+++ b/ide/db/src/org/netbeans/modules/db/explorer/node/Bundle.properties
@@ -43,8 +43,8 @@
 ND_ProcedureParam=Stored Procedure Parameter
 ND_Root=Database Explorer Module Home
 ND_Schema=Schema
-ND_TableList=List of tables
-ND_SystemTableList=List of system tables
+ND_TableList=List of Tables
+ND_SystemTableList=List of System Tables
 ND_Table=Table
 ND_ViewList=List of Views
 ND_View=View
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNode.java b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNode.java
index f5100f2..828e71e 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNode.java
+++ b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNode.java
@@ -336,39 +336,49 @@
             String source = "";
             try {
                 String query = "";
-                String escapedName = "";
+                String escapedName = getName().replace("'", "''"); // NOI18N
                 boolean function = false;
                 switch (getType()) {
                     case Function:
                         function = true;
                     case Procedure:
-                        escapedName = getName().replace("'", "''");
-                        query = "SELECT param_list, returns, body, db FROM mysql.proc WHERE name = '"
-                                + escapedName + "';"; // NOI18N
-                        try (Statement stat = connection.getJDBCConnection().createStatement();
+                        query = "SELECT routine_schema,routine_definition,dtd_identifier,is_deterministic,sql_data_access,routine_comment," // NOI18N
+                              + "IFNULL((SELECT GROUP_CONCAT(CONCAT(" + (function ? "" : "parameter_mode,' ',") + "parameter_name,' ',dtd_identifier))" // NOI18N
+                              + " FROM information_schema.parameters" // NOI18N
+                              + " WHERE specific_name=routine_name AND ordinal_position>0 ORDER BY ordinal_position), '') AS routine_params" // NOI18N
+                              + " FROM information_schema.routines" // NOI18N
+                              + " WHERE routine_name='" + escapedName + "';"; // NOI18N
+                        try (Statement stat = connection.getJDBCConnection().createStatement(); 
                                 ResultSet rs = stat.executeQuery(query);) {
 
                             while (rs.next()) {
-                                String parent = rs.getString("db"); // NOI18N
+                                String parent = rs.getString("routine_schema"); // NOI18N
                                 if (parent != null && parent.trim().length() > 0) {
                                     parent += '.'; //  NOI18N
                                 } else {
                                     parent = "";
                                 }
-                                String params = rs.getString("param_list"); // NOI18N
 
-                                String returns = null;
-                                if (function) {
-                                    returns = rs.getString("returns"); // NOI18N
-                                }
-                                String body = rs.getString("body"); // NOI18N
-                                source = getTypeName(getType()) + " " + parent
-                                        + getName() + "\n" + // NOI18N
-                                        "(" + params + ")" + "\n"
-                                        + // NOI18N
-                                        (function ? "RETURNS " + returns + "\n" : "")
-                                        + // NOI18N                                   
-                                        body;
+                                //Concatenated list of routine parameters
+                                String params = rs.getString("routine_params"); // NOI18N
+
+                                //Data access characteristic: CONTAINS SQL, NO SQL, READS SQL DATA, or MODIFIES SQL DATA.
+                                String sql_data_access = rs.getString("sql_data_access"); // NOI18N
+
+                                //YES or NO, depending on whether the routine is defined with the DETERMINISTIC characteristic.
+                                String is_deterministic = rs.getString("is_deterministic"); // NOI18N
+
+                                //Routine comment
+                                String comment = rs.getString("routine_comment"); // NOI18N
+
+                                source = rs.getString("routine_definition"); // NOI18N
+
+                                source = getTypeName(getType()) + " " + parent + getName() + "(" + params + ")" + "\n" // NOI18N
+                                       + (function ? "RETURNS " + rs.getString("dtd_identifier") + "\n" : "") // NOI18N
+                                       + sql_data_access + "\n" // NOI18N
+                                       + (is_deterministic == "YES" ? "" : "NOT ") + "DETERMINISTIC\n" // NOI18N
+                                       + (comment.length() > 0 ? "COMMENT '" + comment +"'\n" : "") // NOI18N
+                                       + rs.getString("routine_definition"); // NOI18N
                             }
                         }
                         break;
@@ -415,7 +425,7 @@
                         }
                         break;
                     default:
-                        assert false : "Unknown type" + getType();
+                        assert false : "Unknown type " + getType(); // NOI18N
                 }
             } catch (SQLException ex) {
                 LOG.log(Level.INFO, "{0} while get source of {1} {2}", new Object[] {ex, getTypeName(getType()), getName()});
@@ -429,16 +439,19 @@
             String escapedName = "";
             String query = "";
             try {
+                boolean function = false;
                 switch (getType()) {
                     case Function:
+                        function = true;
                     case Procedure:
                         escapedName = getName().replace("'", "''");
-                        query = "SELECT param_list FROM mysql.proc WHERE name = '" // NOI18N
-                                + escapedName + "';"; // NOI18N
-                        try (Statement stat = connection.getJDBCConnection().createStatement();
+                        query = "SELECT GROUP_CONCAT(CONCAT(" + (function ? "" : "parameter_mode,' ',") + "parameter_name,' ',dtd_identifier)) AS routine_params" // NOI18N
+                              + " FROM information_schema.parameters" // NOI18N
+                              + " WHERE ordinal_position>0 AND specific_name='" + escapedName + "' ORDER BY ordinal_position;"; // NOI18N
+                        try (Statement stat = connection.getJDBCConnection().createStatement(); 
                                 ResultSet rs = stat.executeQuery(query);) {
                             while (rs.next()) {
-                                params = rs.getString("param_list"); // NOI18N
+                                params = rs.getString("routine_params"); // NOI18N
                             }
                         }
                         break;
@@ -485,11 +498,13 @@
                     case Function:
                     case Procedure:
                         escapedName = getName().replace("'", "''");
-                        query = "SELECT body FROM mysql.proc WHERE name = '" + escapedName + "';"; // NOI18N
-                        try (Statement stat = connection.getJDBCConnection().createStatement();
+                        query = "SELECT routine_definition" // NOI18N
+                              + " FROM information_schema.routines" // NOI18N
+                              + " WHERE routine_name='" + escapedName + "';"; // NOI18N
+                        try (Statement stat = connection.getJDBCConnection().createStatement(); 
                                 ResultSet rs = stat.executeQuery(query);) {
                             while (rs.next()) {
-                                body = rs.getString("body"); // NOI18N
+                                body = rs.getString("routine_definition"); // NOI18N
                             }
                         }
                         break;
@@ -505,7 +520,7 @@
                         }
                         break;
                     default:
-                        assert false : "Unknown type" + getType();
+                        assert false : "Unknown type " + getType(); // NOI18N
                 }
             } catch (SQLException ex) {
                 LOG.log(Level.INFO, "{0} while get body of {1} {2}", new Object[] {ex, getTypeName(getType()), getName()});
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNodeProvider.java b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNodeProvider.java
index c2da7f5..f8b4bd4 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNodeProvider.java
+++ b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureNodeProvider.java
@@ -157,16 +157,16 @@
                             public void run(Metadata metaData) {
                                 object2type = new HashMap<>();
                                 validObjects = new HashSet<>();
-                                String query = "SELECT NAME, TYPE" // NOI18N
-                                            + " FROM mysql.proc" // NOI18N
-                                            + " WHERE TYPE = 'PROCEDURE' OR TYPE = 'FUNCTION'"; // NOI18N
+                                String query = "SELECT routine_name,routine_type" // NOI18N
+                                            + " FROM information_schema.routines" // NOI18N
+                                            + " WHERE routine_type IN ('PROCEDURE','FUNCTION')"; // NOI18N
                                 try(Statement stmt = connection.getJDBCConnection().createStatement();
                                     ResultSet rs = stmt.executeQuery(query)) {
                                     while(rs.next()) {
                                         // name of procedure
-                                        String objectName = rs.getString("NAME"); // NOI18N
+                                        String objectName = rs.getString("routine_name"); // NOI18N
                                         // type of procedure
-                                        String objectType = rs.getString("TYPE"); // NOI18N
+                                        String objectType = rs.getString("routine_type"); // NOI18N
                                         if ("PROCEDURE".equals(objectType)) { // NOI18N
                                             object2type.put(objectName, ProcedureNode.Type.Procedure);
                                         } else if ("FUNCTION".equals(objectType)) { // NOI18N
@@ -174,7 +174,7 @@
                                         } else {
                                             assert false : "Unknown type " + objectType;
                                         }
-                                        // XXX: all procedurec are valid in MySQL
+                                        // XXX: all procedures are valid in MySQL
                                         validObjects.add(objectName);
                                     }
                                 } catch (SQLException ex) {
diff --git a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureParamNodeProvider.java b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureParamNodeProvider.java
index 14d2d27..ae00e3d 100644
--- a/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureParamNodeProvider.java
+++ b/ide/db/src/org/netbeans/modules/db/explorer/node/ProcedureParamNodeProvider.java
@@ -33,6 +33,7 @@
 import org.netbeans.modules.db.metadata.model.api.MetadataModelException;
 import org.netbeans.modules.db.metadata.model.api.Parameter;
 import org.netbeans.modules.db.metadata.model.api.Procedure;
+import org.netbeans.modules.db.metadata.model.api.Value;
 import org.openide.nodes.Node;
 import org.openide.util.Lookup;
 
@@ -83,7 +84,6 @@
                                 return ;
                             }
 
-                            /* TBD uncomment after issue 156304 is resolved.
                             Value returnValue = procedure.getReturnValue();
                             if (returnValue != null) {
                                 MetadataElementHandle<Value> h = MetadataElementHandle.create(returnValue);
@@ -97,7 +97,6 @@
                                     newList.add(ReturnValueNode.create(lookup, ProcedureParamNodeProvider.this));
                                 }
                             }
-                            */
 
                             Collection<Parameter> parameters = procedure.getParameters();
 
diff --git a/ide/dbapi/nbproject/org-netbeans-modules-dbapi.sig b/ide/dbapi/nbproject/org-netbeans-modules-dbapi.sig
index 1989297..33de8a5 100644
--- a/ide/dbapi/nbproject/org-netbeans-modules-dbapi.sig
+++ b/ide/dbapi/nbproject/org-netbeans-modules-dbapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51.0
+#Version 1.52.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/dbapi/nbproject/project.properties b/ide/dbapi/nbproject/project.properties
index 312a631..b6765ca 100644
--- a/ide/dbapi/nbproject/project.properties
+++ b/ide/dbapi/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 spec.version.base=1.53.0
diff --git a/ide/derby/nbproject/org-netbeans-modules-derby.sig b/ide/derby/nbproject/org-netbeans-modules-derby.sig
index be6b58b..cfdf85e 100644
--- a/ide/derby/nbproject/org-netbeans-modules-derby.sig
+++ b/ide/derby/nbproject/org-netbeans-modules-derby.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57
+#Version 1.58
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/diff/nbproject/org-netbeans-modules-diff.sig b/ide/diff/nbproject/org-netbeans-modules-diff.sig
index f764ddf..77a2d5a 100644
--- a/ide/diff/nbproject/org-netbeans-modules-diff.sig
+++ b/ide/diff/nbproject/org-netbeans-modules-diff.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.68.0
+#Version 1.69.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/diff/src/org/netbeans/modules/diff/EncodedReaderFactory.java b/ide/diff/src/org/netbeans/modules/diff/EncodedReaderFactory.java
index b1408aa..25c80b0 100644
--- a/ide/diff/src/org/netbeans/modules/diff/EncodedReaderFactory.java
+++ b/ide/diff/src/org/netbeans/modules/diff/EncodedReaderFactory.java
@@ -51,6 +51,7 @@
  * @author Martin Entlicher
  * @deprecated it is here only for compatibility with vcsgeneric modules, otherwise unused
  */
+@Deprecated
 public class EncodedReaderFactory {
     
     /** The FileObject attribute that defines the encoding of the FileObject content. */
diff --git a/ide/diff/src/org/netbeans/modules/merge/builtin/visualizer/MergeDialogComponent.java b/ide/diff/src/org/netbeans/modules/merge/builtin/visualizer/MergeDialogComponent.java
index 69abbdb..996cf0e 100644
--- a/ide/diff/src/org/netbeans/modules/merge/builtin/visualizer/MergeDialogComponent.java
+++ b/ide/diff/src/org/netbeans/modules/merge/builtin/visualizer/MergeDialogComponent.java
@@ -301,7 +301,7 @@
     
     public MergePanel getSelectedMergePanel() {
         Component selected = mergeTabbedPane.getSelectedComponent();
-        if (selected == null || !(selected instanceof MergePanel)) return null;
+        if (!(selected instanceof MergePanel)) return null;
         return ((MergePanel) selected);
     }
     
diff --git a/ide/dlight.nativeexecution.nb/nbproject/org-netbeans-modules-dlight-nativeexecution-nb.sig b/ide/dlight.nativeexecution.nb/nbproject/org-netbeans-modules-dlight-nativeexecution-nb.sig
index 00ab0f9..84b1b7c 100644
--- a/ide/dlight.nativeexecution.nb/nbproject/org-netbeans-modules-dlight-nativeexecution-nb.sig
+++ b/ide/dlight.nativeexecution.nb/nbproject/org-netbeans-modules-dlight-nativeexecution-nb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/dlight.nativeexecution/nbproject/org-netbeans-modules-dlight-nativeexecution.sig b/ide/dlight.nativeexecution/nbproject/org-netbeans-modules-dlight-nativeexecution.sig
index 2f484e9..2cbe680 100644
--- a/ide/dlight.nativeexecution/nbproject/org-netbeans-modules-dlight-nativeexecution.sig
+++ b/ide/dlight.nativeexecution/nbproject/org-netbeans-modules-dlight-nativeexecution.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.56.0
+#Version 1.57.0
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
@@ -247,6 +247,7 @@
 
 CLSS public final static !enum org.netbeans.modules.nativeexecution.api.HostInfo$CpuFamily
  outer org.netbeans.modules.nativeexecution.api.HostInfo
+fld public final static org.netbeans.modules.nativeexecution.api.HostInfo$CpuFamily AARCH64
 fld public final static org.netbeans.modules.nativeexecution.api.HostInfo$CpuFamily ARM
 fld public final static org.netbeans.modules.nativeexecution.api.HostInfo$CpuFamily SPARC
 fld public final static org.netbeans.modules.nativeexecution.api.HostInfo$CpuFamily UNKNOWN
diff --git a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/JschSupport.java b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/JschSupport.java
index a99497e..895840f 100644
--- a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/JschSupport.java
+++ b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/JschSupport.java
@@ -123,7 +123,7 @@
             } catch (JSchException ex) {
                 String message = ex.getMessage();
                 Throwable cause = ex.getCause();
-                if (cause != null && cause instanceof NullPointerException) {
+                if (cause instanceof NullPointerException) {
                     // Jsch bug... retry?
                     log.log(Level.INFO, "JSch exception opening channel to " + env + ". Retrying", ex); // NOI18N
                 } else if ("java.io.InterruptedIOException".equals(message)) { // NOI18N
diff --git a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/MacroMap.java b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/MacroMap.java
index 4450204..3731b56 100644
--- a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/MacroMap.java
+++ b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/MacroMap.java
@@ -237,7 +237,7 @@
 
         String oldpath = get(name);
         String newPath = path + (oldpath == null ? "" : (isWindows ? ';' : ':') + oldpath); // NOI18N
-        newPath = newPath.replaceAll("::", ":"); // NOI18N
+        newPath = newPath.replace("::", ":"); // NOI18N
         newPath = newPath.replaceAll("^:", ""); // NOI18N
         newPath = newPath.replaceAll(":$", ""); // NOI18N
         put(name, newPath);
diff --git a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/ShellValidationSupport.java b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/ShellValidationSupport.java
index b908a05..888aa36 100644
--- a/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/ShellValidationSupport.java
+++ b/ide/dlight.nativeexecution/src/org/netbeans/modules/nativeexecution/api/util/ShellValidationSupport.java
@@ -26,7 +26,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.netbeans.modules.nativeexecution.api.util.Shell.ShellType;
-import org.netbeans.modules.nativeexecution.spi.support.NativeExecutionUserNotification;;
+import org.netbeans.modules.nativeexecution.spi.support.NativeExecutionUserNotification;
 //import org.netbeans.modules.dlight.nativeexecution.ui.ShellValidationStatusPanel;
 //import org.openide.DialogDescriptor;
 //import org.openide.DialogDisplayer;
diff --git a/ide/dlight.terminal/nbproject/org-netbeans-modules-dlight-terminal.sig b/ide/dlight.terminal/nbproject/org-netbeans-modules-dlight-terminal.sig
index 901106b..778a918 100644
--- a/ide/dlight.terminal/nbproject/org-netbeans-modules-dlight-terminal.sig
+++ b/ide/dlight.terminal/nbproject/org-netbeans-modules-dlight-terminal.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.40.0
+#Version 1.41.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/dlight.terminal/nbproject/project.properties b/ide/dlight.terminal/nbproject/project.properties
index 2924e43..ade3b2e 100644
--- a/ide/dlight.terminal/nbproject/project.properties
+++ b/ide/dlight.terminal/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.42.0
diff --git a/ide/dlight.terminal/src/org/netbeans/modules/dlight/terminal/action/OpenInEditorActionProvider.java b/ide/dlight.terminal/src/org/netbeans/modules/dlight/terminal/action/OpenInEditorActionProvider.java
index a34f1cf..d9dc87c 100644
--- a/ide/dlight.terminal/src/org/netbeans/modules/dlight/terminal/action/OpenInEditorActionProvider.java
+++ b/ide/dlight.terminal/src/org/netbeans/modules/dlight/terminal/action/OpenInEditorActionProvider.java
@@ -85,7 +85,7 @@
             URL url = null;
             try {
 
-                if (key != null && (key instanceof String)) {
+                if (key instanceof String) {
                     ExecutionEnvironment env = ExecutionEnvironmentFactory.fromUniqueID((String) key);
                     if (env.isRemote()) {
                         url = new URL("rfs://" + key + filePath); //NOI18N
diff --git a/ide/docker.api/nbproject/org-netbeans-modules-docker-api.sig b/ide/docker.api/nbproject/org-netbeans-modules-docker-api.sig
index d34feb1..a463fa7 100644
--- a/ide/docker.api/nbproject/org-netbeans-modules-docker-api.sig
+++ b/ide/docker.api/nbproject/org-netbeans-modules-docker-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.37
+#Version 1.38
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/editor.actions/nbproject/project.properties b/ide/editor.actions/nbproject/project.properties
index e27a914..8851aff 100644
--- a/ide/editor.actions/nbproject/project.properties
+++ b/ide/editor.actions/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 javadoc.title=Editor Actions
 spec.version.base=1.50.0
 
diff --git a/ide/editor.actions/src/org/netbeans/modules/editor/actions/AddCaretAction.java b/ide/editor.actions/src/org/netbeans/modules/editor/actions/AddCaretAction.java
index 2a93d9f..cb47795 100644
--- a/ide/editor.actions/src/org/netbeans/modules/editor/actions/AddCaretAction.java
+++ b/ide/editor.actions/src/org/netbeans/modules/editor/actions/AddCaretAction.java
@@ -51,7 +51,7 @@
     protected void actionPerformed(ActionEvent evt, final JTextComponent target) {
         if (target != null) {
             Caret caret = target.getCaret();
-            if (caret != null && caret instanceof EditorCaret) {
+            if (caret instanceof EditorCaret) {
                 final EditorCaret editorCaret = (EditorCaret) caret;
                 final BaseDocument doc = (BaseDocument) target.getDocument();
                 final boolean upAction = EditorActionNames.addCaretUp.equals(actionName());
diff --git a/ide/editor.bracesmatching/nbproject/org-netbeans-modules-editor-bracesmatching.sig b/ide/editor.bracesmatching/nbproject/org-netbeans-modules-editor-bracesmatching.sig
index ae66200..73fb902 100644
--- a/ide/editor.bracesmatching/nbproject/org-netbeans-modules-editor-bracesmatching.sig
+++ b/ide/editor.bracesmatching/nbproject/org-netbeans-modules-editor-bracesmatching.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.56.0
+#Version 1.57.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.breadcrumbs/nbproject/org-netbeans-modules-editor-breadcrumbs.sig b/ide/editor.breadcrumbs/nbproject/org-netbeans-modules-editor-breadcrumbs.sig
index b1d0f31..c87149f 100644
--- a/ide/editor.breadcrumbs/nbproject/org-netbeans-modules-editor-breadcrumbs.sig
+++ b/ide/editor.breadcrumbs/nbproject/org-netbeans-modules-editor-breadcrumbs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.34
+#Version 1.35
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.codetemplates/nbproject/org-netbeans-modules-editor-codetemplates.sig b/ide/editor.codetemplates/nbproject/org-netbeans-modules-editor-codetemplates.sig
index 37e978e..3f4ebca 100644
--- a/ide/editor.codetemplates/nbproject/org-netbeans-modules-editor-codetemplates.sig
+++ b/ide/editor.codetemplates/nbproject/org-netbeans-modules-editor-codetemplates.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61.0
+#Version 1.62.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.completion/nbproject/org-netbeans-modules-editor-completion.sig b/ide/editor.completion/nbproject/org-netbeans-modules-editor-completion.sig
index 5573953..43dadc6 100644
--- a/ide/editor.completion/nbproject/org-netbeans-modules-editor-completion.sig
+++ b/ide/editor.completion/nbproject/org-netbeans-modules-editor-completion.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.62.0
+#Version 1.63.0
 
 CLSS public abstract interface !annotation java.lang.FunctionalInterface
  anno 0 java.lang.annotation.Documented()
diff --git a/ide/editor.completion/src/org/netbeans/modules/editor/completion/CompletionActionsMainMenu.java b/ide/editor.completion/src/org/netbeans/modules/editor/completion/CompletionActionsMainMenu.java
index 007bfe1..6110848 100644
--- a/ide/editor.completion/src/org/netbeans/modules/editor/completion/CompletionActionsMainMenu.java
+++ b/ide/editor.completion/src/org/netbeans/modules/editor/completion/CompletionActionsMainMenu.java
@@ -107,7 +107,7 @@
 
         presenter.setEnabled(action != null);
         JTextComponent comp = Utilities.getFocusedComponent();
-        if (comp != null && comp instanceof JEditorPane){
+        if (comp instanceof JEditorPane){
             addAccelerators(this, presenter, comp);
         } else {
             presenter.setAccelerator(getDefaultAccelerator());
diff --git a/ide/editor.deprecated.pre65formatting/nbproject/org-netbeans-modules-editor-deprecated-pre65formatting.sig b/ide/editor.deprecated.pre65formatting/nbproject/org-netbeans-modules-editor-deprecated-pre65formatting.sig
index 35cc456..209d466 100644
--- a/ide/editor.deprecated.pre65formatting/nbproject/org-netbeans-modules-editor-deprecated-pre65formatting.sig
+++ b/ide/editor.deprecated.pre65formatting/nbproject/org-netbeans-modules-editor-deprecated-pre65formatting.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48.0
+#Version 1.49.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/editor.document/nbproject/org-netbeans-modules-editor-document.sig b/ide/editor.document/nbproject/org-netbeans-modules-editor-document.sig
index 1df2583..2d4f6fa 100644
--- a/ide/editor.document/nbproject/org-netbeans-modules-editor-document.sig
+++ b/ide/editor.document/nbproject/org-netbeans-modules-editor-document.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.26.0
+#Version 1.27.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/editor.errorstripe.api/nbproject/org-netbeans-modules-editor-errorstripe-api.sig b/ide/editor.errorstripe.api/nbproject/org-netbeans-modules-editor-errorstripe-api.sig
index 72ea6b8..22e4a0b 100644
--- a/ide/editor.errorstripe.api/nbproject/org-netbeans-modules-editor-errorstripe-api.sig
+++ b/ide/editor.errorstripe.api/nbproject/org-netbeans-modules-editor-errorstripe-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.49.0
+#Version 2.50.0
 
 CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object>
 meth public abstract int compareTo({java.lang.Comparable%0})
diff --git a/ide/editor.errorstripe/src/org/netbeans/modules/editor/errorstripe/AnnotationView.java b/ide/editor.errorstripe/src/org/netbeans/modules/editor/errorstripe/AnnotationView.java
index ffc9ee9..61d33e1 100644
--- a/ide/editor.errorstripe/src/org/netbeans/modules/editor/errorstripe/AnnotationView.java
+++ b/ide/editor.errorstripe/src/org/netbeans/modules/editor/errorstripe/AnnotationView.java
@@ -500,7 +500,7 @@
             scrollPaneCandidade = scrollPaneCandidade.getParent();
         }
         
-        if (scrollPaneCandidade == null || !(scrollPaneCandidade instanceof JScrollPane) || scrollBar == null) {
+        if (!(scrollPaneCandidade instanceof JScrollPane) || scrollBar == null) {
             //no help for #54080:
             return getHeight() - HEIGHT_OFFSET;
         }
diff --git a/ide/editor.fold/nbproject/org-netbeans-modules-editor-fold.sig b/ide/editor.fold/nbproject/org-netbeans-modules-editor-fold.sig
index 76a970c..8022e20 100644
--- a/ide/editor.fold/nbproject/org-netbeans-modules-editor-fold.sig
+++ b/ide/editor.fold/nbproject/org-netbeans-modules-editor-fold.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.62
+#Version 1.63
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/editor.fold/src/org/netbeans/spi/editor/fold/FoldOperation.java b/ide/editor.fold/src/org/netbeans/spi/editor/fold/FoldOperation.java
index db8a1e9..a9bf94e 100644
--- a/ide/editor.fold/src/org/netbeans/spi/editor/fold/FoldOperation.java
+++ b/ide/editor.fold/src/org/netbeans/spi/editor/fold/FoldOperation.java
@@ -112,6 +112,7 @@
      * @deprecated please use {@link #addToHierarchy(org.netbeans.api.editor.fold.FoldType, int, int, java.lang.Boolean, org.netbeans.api.editor.fold.FoldTemplate, java.lang.String, java.lang.Object, org.netbeans.spi.editor.fold.FoldHierarchyTransaction)}.
      * This form of call does not support automatic state assignment and fold templates.
      */
+    @Deprecated
     public Fold addToHierarchy(FoldType type, String description, boolean collapsed,
     int startOffset, int endOffset, int startGuardedLength, int endGuardedLength,
     Object extraInfo, FoldHierarchyTransaction transaction)
diff --git a/ide/editor.guards/nbproject/org-netbeans-modules-editor-guards.sig b/ide/editor.guards/nbproject/org-netbeans-modules-editor-guards.sig
index c85d636..48898ae 100644
--- a/ide/editor.guards/nbproject/org-netbeans-modules-editor-guards.sig
+++ b/ide/editor.guards/nbproject/org-netbeans-modules-editor-guards.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.indent.project/nbproject/org-netbeans-modules-editor-indent-project.sig b/ide/editor.indent.project/nbproject/org-netbeans-modules-editor-indent-project.sig
index 14a4cb9..2923015 100644
--- a/ide/editor.indent.project/nbproject/org-netbeans-modules-editor-indent-project.sig
+++ b/ide/editor.indent.project/nbproject/org-netbeans-modules-editor-indent-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39
+#Version 1.40
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.indent.support/nbproject/org-netbeans-modules-editor-indent-support.sig b/ide/editor.indent.support/nbproject/org-netbeans-modules-editor-indent-support.sig
index 012ab73..cbd3519 100644
--- a/ide/editor.indent.support/nbproject/org-netbeans-modules-editor-indent-support.sig
+++ b/ide/editor.indent.support/nbproject/org-netbeans-modules-editor-indent-support.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59
+#Version 1.60
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.indent.support/nbproject/project.properties b/ide/editor.indent.support/nbproject/project.properties
index b32a9d4..92cd5ba 100644
--- a/ide/editor.indent.support/nbproject/project.properties
+++ b/ide/editor.indent.support/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/ide/editor.indent/nbproject/org-netbeans-modules-editor-indent.sig b/ide/editor.indent/nbproject/org-netbeans-modules-editor-indent.sig
index 451e43c..a62809d 100644
--- a/ide/editor.indent/nbproject/org-netbeans-modules-editor-indent.sig
+++ b/ide/editor.indent/nbproject/org-netbeans-modules-editor-indent.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60
+#Version 1.61
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.indent/src/org/netbeans/modules/editor/indent/TaskHandler.java b/ide/editor.indent/src/org/netbeans/modules/editor/indent/TaskHandler.java
index 804b98a..ec5a58e 100644
--- a/ide/editor.indent/src/org/netbeans/modules/editor/indent/TaskHandler.java
+++ b/ide/editor.indent/src/org/netbeans/modules/editor/indent/TaskHandler.java
@@ -561,9 +561,9 @@
         }
 
         private Lookup getLookup() {
-            if (indentTask != null && indentTask instanceof Lookup.Provider) {
+            if (indentTask instanceof Lookup.Provider) {
                 return ((Lookup.Provider)indentTask).getLookup();
-            } else if (reformatTask != null && reformatTask instanceof Lookup.Provider) {
+            } else if (reformatTask instanceof Lookup.Provider) {
                 return ((Lookup.Provider)reformatTask).getLookup();
             } else {
                 return null;
diff --git a/ide/editor.lib/nbproject/org-netbeans-modules-editor-lib.sig b/ide/editor.lib/nbproject/org-netbeans-modules-editor-lib.sig
index 4617968..0208764 100644
--- a/ide/editor.lib/nbproject/org-netbeans-modules-editor-lib.sig
+++ b/ide/editor.lib/nbproject/org-netbeans-modules-editor-lib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 4.24.0
+#Version 4.25.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/editor.lib/src/org/netbeans/editor/Abbrev.java b/ide/editor.lib/src/org/netbeans/editor/Abbrev.java
index e67ae40..05a5101 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Abbrev.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Abbrev.java
@@ -42,6 +42,7 @@
  * @deprecated Use Editor Code Templates API instead. This class is no longer
  *   functional.
  */
+@Deprecated
 public class Abbrev implements /* SettingsChangeListener,*/ PropertyChangeListener {
     
     /**
diff --git a/ide/editor.lib/src/org/netbeans/editor/ActionFactory.java b/ide/editor.lib/src/org/netbeans/editor/ActionFactory.java
index 30ad955..0c617b6 100644
--- a/ide/editor.lib/src/org/netbeans/editor/ActionFactory.java
+++ b/ide/editor.lib/src/org/netbeans/editor/ActionFactory.java
@@ -264,6 +264,7 @@
     /**
      * @deprecated use {@link CamelCaseInterceptor} instead
      */
+    @Deprecated
     public static class RemoveWordPreviousAction extends LocalBaseAction {
 
         public RemoveWordPreviousAction() {
@@ -303,6 +304,7 @@
     /**
      * @deprecated use {@link CamelCaseInterceptor} instead
      */
+    @Deprecated
     public static class RemoveWordNextAction extends LocalBaseAction {
 
         public RemoveWordNextAction() {
@@ -940,6 +942,7 @@
     /** Switch to overwrite mode or back to insert mode
      * @deprecated Replaced by ToggleTypingModeAction in editor.actions module
      */
+    @Deprecated
     public static class ToggleTypingModeAction extends LocalBaseAction {
 
         static final long serialVersionUID =-2431132686507799723L;
@@ -963,6 +966,7 @@
      * @deprecated Without any replacement. This action is not used anymore and
      * is no longer functional.
      */
+    @Deprecated
     public static class RunMacroAction extends BaseAction {
 
         static final long serialVersionUID =1L;
@@ -1094,6 +1098,7 @@
     /**
      * @deprecated Without any replacement. This action is not used anymore.
      */
+    @Deprecated
     public static class StartMacroRecordingAction extends LocalBaseAction {
     // Not registered by annotation since it's not actively used
 
@@ -1116,6 +1121,7 @@
      * @deprecated Without any replacement. This action is not used anymore and
      * is no longer functional.
      */
+    @Deprecated
     public static class StopMacroRecordingAction extends LocalBaseAction {
     // Not registered by annotation since it's not actively used
 
@@ -1148,6 +1154,7 @@
     }
 
     /** @deprecated Use Editor Code Templates API instead. */
+    @Deprecated
     public static class AbbrevExpandAction extends LocalBaseAction {
 
         static final long serialVersionUID =-2124569510083544403L;
@@ -1176,6 +1183,7 @@
     }
 
     /** @deprecated Use Editor Code Templates API instead. */
+    @Deprecated
     public static class AbbrevResetAction extends LocalBaseAction {
 
         static final long serialVersionUID =-2807497346060448395L;
@@ -2298,6 +2306,7 @@
      */
     //@EditorActionRegistration(name = BaseKit.toggleLineNumbersAction)
     // Registration in createActions() due to getPopupMenuItem()
+    @Deprecated
     public static class ToggleLineNumbersAction extends LocalBaseAction {
 
         static final long serialVersionUID =-3502499718130556526L;
@@ -2397,6 +2406,7 @@
     /** Expand a fold. Depends on the current caret position. 
      * @deprecated Implementation was adopted into editor.fold.nbui module. This implementation is kept for backward compatibility only
      */
+    @Deprecated
     public static class ExpandFold extends DeprecatedFoldAction {
         public ExpandFold() {
             super(BaseKit.expandFoldAction);
diff --git a/ide/editor.lib/src/org/netbeans/editor/Analyzer.java b/ide/editor.lib/src/org/netbeans/editor/Analyzer.java
index 18eb38a..1842d37 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Analyzer.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Analyzer.java
@@ -727,6 +727,7 @@
     /** createWhitespaceFillBuffer() with the non-capital 's' should be used.
      * @deprecated
      */
+    @Deprecated
     public static char[] createWhiteSpaceFillBuffer(int startCol, int endCol,
     int tabSize) {
         return createWhitespaceFillBuffer(startCol, endCol, tabSize);
diff --git a/ide/editor.lib/src/org/netbeans/editor/Annotations.java b/ide/editor.lib/src/org/netbeans/editor/Annotations.java
index bf7f64e..449f9e2 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Annotations.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Annotations.java
@@ -515,6 +515,7 @@
      * Return list of passive annotations which should be drawn on the background.
      * @deprecated The method name contains a typo. Use {@link getPassiveAnnotationsForLine} 
      */
+    @Deprecated
     public AnnotationDesc[] getPasiveAnnotations(int line) {
         return getPassiveAnnotationsForLine(line);
     }
@@ -1027,6 +1028,7 @@
          * Gets the array of all passive and visible annotations 
          * @deprecated The method name contains typo. Use {@link getPassive()} instead.
          */
+        @Deprecated
         public AnnotationDesc[] getPasive() {
             return getPassive();
         }
diff --git a/ide/editor.lib/src/org/netbeans/editor/BaseAction.java b/ide/editor.lib/src/org/netbeans/editor/BaseAction.java
index a8c6ce1e..9c592fe 100644
--- a/ide/editor.lib/src/org/netbeans/editor/BaseAction.java
+++ b/ide/editor.lib/src/org/netbeans/editor/BaseAction.java
@@ -71,6 +71,7 @@
      * Reset abbreviation accounting to empty string.
      * @deprecated Not used anymore.
      */
+    @Deprecated
     public static final int ABBREV_RESET = 4;
 
     /** Prevents adding the new undoable edit to the old one when the next
@@ -134,6 +135,7 @@
      * @deprecated this method is deprecated like the LocaleSupport which it uses by default.
      *   It should be replaced by implementing {@link #getShortDescriptionBundleClass()}
      */
+    @Deprecated
     protected Object findValue(String key){
         return LocaleSupport.getString(key);
     }
diff --git a/ide/editor.lib/src/org/netbeans/editor/BaseCaret.java b/ide/editor.lib/src/org/netbeans/editor/BaseCaret.java
index 5b9416b..0d4eb2b 100644
--- a/ide/editor.lib/src/org/netbeans/editor/BaseCaret.java
+++ b/ide/editor.lib/src/org/netbeans/editor/BaseCaret.java
@@ -1190,7 +1190,7 @@
      *
      * @deprecated use #setDot(int, boolean) preceded by <code>JComponent.scrollRectToVisible()</code>.
      */
-    
+    @Deprecated
     public void setDot(int offset, Rectangle scrollRect, int scrollPolicy, boolean expandFold) {
         if (LOG_EDT.isLoggable(Level.FINE)) { // Only permit operations in EDT
             if (!SwingUtilities.isEventDispatchThread()) {
@@ -1261,6 +1261,7 @@
      *
      * @deprecated use #setDot(int) preceded by <code>JComponent.scrollRectToVisible()</code>.
      */
+    @Deprecated
     public void setDot(int offset, Rectangle scrollRect, int scrollPolicy) {
         setDot(offset, scrollRect, scrollPolicy, true);
     }
@@ -1282,6 +1283,7 @@
      *
      * @deprecated use #setDot(int) preceded by <code>JComponent.scrollRectToVisible()</code>.
      */
+    @Deprecated
     public void moveDot(int offset, Rectangle scrollRect, int scrollPolicy) {
         if (LOG_EDT.isLoggable(Level.FINE)) { // Only permit operations in EDT
             if (!SwingUtilities.isEventDispatchThread()) {
@@ -1741,7 +1743,7 @@
         }
         JTextComponent c = component;
         int offset = c.viewToModel(new Point(x, y));
-        Rectangle r = null;;
+        Rectangle r = null;
         if (offset >= 0) {
             try {
                 r = c.modelToView(offset);
diff --git a/ide/editor.lib/src/org/netbeans/editor/BaseDocument.java b/ide/editor.lib/src/org/netbeans/editor/BaseDocument.java
index e645982..94010fe 100644
--- a/ide/editor.lib/src/org/netbeans/editor/BaseDocument.java
+++ b/ide/editor.lib/src/org/netbeans/editor/BaseDocument.java
@@ -194,6 +194,7 @@
      * Values: java.lang.Integer
      * @deprecated property no longer populated; deprecated without replacement.
      */
+    @Deprecated
     public static final String LINE_LIMIT_PROP = "line-limit"; // NOI18N
 
     /**
@@ -209,6 +210,7 @@
      * especially when processing lines by syntax scanner.
      * @deprecated property no longer populated; deprecated without replacement.
      */
+    @Deprecated
     public static final String LINE_BATCH_SIZE = "line-batch-size"; // NOI18N
 
     /** Line separator is marked by CR (Macintosh) */
@@ -464,6 +466,7 @@
      * @deprecated Use of editor kit's implementation classes is deprecated
      *   in favor of mime types.
      */
+    @Deprecated
     public BaseDocument(Class kitClass, boolean addToRegistry) {
         super(new EditorDocumentContent());
 
@@ -640,6 +643,7 @@
      * @deprecated Please use Lexer instead, for details see
      *   <a href="@org-netbeans-modules-lexer@/overview-summary.html">Lexer</a>.
      */
+    @Deprecated
     public SyntaxSupport getSyntaxSupport() {
         if (syntaxSupport == null) {
             EditorKit kit = getEditorKit();
@@ -1280,6 +1284,7 @@
     /** Fire the change event to repaint the given block of text.
      * @deprecated Please use <code>JTextComponent.getUI().damageRange()</code> instead.
      */
+    @Deprecated
     public void repaintBlock(int startOffset, int endOffset) {
         BaseDocumentEvent evt = getDocumentEvent(startOffset,
                 endOffset - startOffset, DocumentEvent.EventType.CHANGE, null);
@@ -1563,6 +1568,7 @@
      * @deprecated Please use Editor Indentation API instead, for details see
      *   <a href="@org-netbeans-modules-editor-indent@/overview-summary.html">Editor Indentation</a>.
      */
+    @Deprecated
     public int getShiftWidth() {
         return shiftWidth;
     }
@@ -1571,6 +1577,7 @@
      * @deprecated Don't use implementation class of editor kits. Use mime type,
      *   <code>MimePath</code> and <code>MimeLookup</code>.
      */
+    @Deprecated
     public final Class getKitClass() {
         return getEditorKit().getClass();
     }
@@ -1707,6 +1714,7 @@
      * 
      * @deprecated Please use {@link BaseDocument#runAtomic(java.lang.Runnable)} instead.
      */
+    @Deprecated
     @Override
     public final void atomicLock () {
         if (LOG.isLoggable(Level.FINER)) {
@@ -1766,6 +1774,7 @@
      * 
      * @deprecated Please use {@link BaseDocument#runAtomic(java.lang.Runnable)} instead.
      */
+    @Deprecated
     @Override
     public final synchronized void atomicUnlock () {
         atomicUnlockImpl ();
@@ -1996,6 +2005,7 @@
      *
      * @deprecated Use addPostModificationDocumentListener(DocumentListener)
      */
+    @Deprecated
     public void setPostModificationDocumentListener(DocumentListener listener) {
         this.postModificationDocumentListener = listener;
     }
diff --git a/ide/editor.lib/src/org/netbeans/editor/BaseDocumentEvent.java b/ide/editor.lib/src/org/netbeans/editor/BaseDocumentEvent.java
index baf3846..e5c8a66 100644
--- a/ide/editor.lib/src/org/netbeans/editor/BaseDocumentEvent.java
+++ b/ide/editor.lib/src/org/netbeans/editor/BaseDocumentEvent.java
@@ -157,6 +157,7 @@
     * modification event itself.
      * @deprecated
     */
+    @Deprecated
     public char[] getChars() {
         String text = getText();
         return (text != null) ? text.toCharArray() : null;
@@ -173,6 +174,7 @@
      * Get the line at which the insert/remove occured.
      * @deprecated
      */
+    @Deprecated
     public int getLine() {
         Element lineRoot = ((BaseDocument)getDocument()).getParagraphElement(0).getParentElement();
         int lineIndex = lineRoot.getElementIndex(getOffset());
diff --git a/ide/editor.lib/src/org/netbeans/editor/BaseKit.java b/ide/editor.lib/src/org/netbeans/editor/BaseKit.java
index cd1ba15..289b3ae 100644
--- a/ide/editor.lib/src/org/netbeans/editor/BaseKit.java
+++ b/ide/editor.lib/src/org/netbeans/editor/BaseKit.java
@@ -449,6 +449,7 @@
      * <code>MimeLookup</code> instead to find <code>EditorKit</code> for a mime
      * type.
      */
+    @Deprecated
     public static BaseKit getKit(Class kitClass) {
         if (kitClass != null && BaseKit.class.isAssignableFrom(kitClass) && BaseKit.class != kitClass) {
             String mimeType = KitsTracker.getInstance().findMimeType(kitClass);
@@ -556,6 +557,7 @@
      * @deprecated Please use Lexer instead, for details see
      *   <a href="@org-netbeans-modules-lexer@/overview-summary.html">Lexer</a>.
      */
+    @Deprecated
     public Syntax createSyntax(Document doc) {
         return new DefaultSyntax();
     }
@@ -566,6 +568,7 @@
      * @deprecated Please use Editor Indentation API instead, for details see
      *   <a href="@org-netbeans-modules-editor-indent@/overview-summary.html">Editor Indentation</a>.
      */
+    @Deprecated
     public Syntax createFormatSyntax(Document doc) {
         return createSyntax(doc);
     }
@@ -576,6 +579,7 @@
      * @deprecated Please use Lexer instead, for details see
      *   <a href="@org-netbeans-modules-lexer@/overview-summary.html">Lexer</a>.
      */
+    @Deprecated
     public SyntaxSupport createSyntaxSupport(BaseDocument doc) {
         return new SyntaxSupport(doc);
     }
@@ -606,6 +610,7 @@
      *  {@link #createPrintEditorUI(BaseDocument, boolean, boolean)} is being
      *  called instead.
      */
+    @Deprecated
     protected EditorUI createPrintEditorUI(BaseDocument doc) {
         return new EditorUI(doc);
     }
@@ -914,6 +919,7 @@
     /**
      * @deprecated Without any replacement. 
      */
+    @Deprecated
     protected Action[] getMacroActions() {
         return new Action[0];
     }                               
@@ -1049,6 +1055,7 @@
      *   <a href="@org-netbeans-modules-editor-lib2@/overview-summary.html">Editor Library 2</a>.
      */
 //    @EditorActionRegistration(name = defaultKeyTypedAction)
+    @Deprecated
     public static class DefaultKeyTypedAction extends LocalBaseAction {
 
         static final long serialVersionUID = 3069164318144463899L;
@@ -1436,6 +1443,7 @@
      * @deprecated Please do not subclass this class. Use Typing Hooks instead, for details see
      *   <a href="@org-netbeans-modules-editor-lib2@/overview-summary.html">Editor Library 2</a>.
      */
+    @Deprecated
     public static class InsertBreakAction extends LocalBaseAction {
 
         static final long serialVersionUID =7966576342334158659L;
@@ -2019,6 +2027,7 @@
      * @deprecated Please do not subclass this class. Use Typing Hooks instead, for details see
      *   <a href="@org-netbeans-modules-editor-lib2@/overview-summary.html">Editor Library 2</a>.
      */
+    @Deprecated
     public static class DeleteCharAction extends LocalBaseAction {
 
         protected boolean nextChar;
@@ -3705,6 +3714,7 @@
     /**
      * @deprecated use {@link CamelCaseInterceptor} instead
      */
+    @Deprecated
     public static class NextWordAction extends LocalBaseAction {
 
         static final long serialVersionUID =-5909906947175434032L;
@@ -3747,6 +3757,7 @@
     /**
      * @deprecated use {@link CamelCaseInterceptor} instead
      */
+    @Deprecated
     public static class PreviousWordAction extends LocalBaseAction {
 
         static final long serialVersionUID =-5465143382669785799L;
diff --git a/ide/editor.lib/src/org/netbeans/editor/CharSeq.java b/ide/editor.lib/src/org/netbeans/editor/CharSeq.java
index d10fb9a..74e92a3 100644
--- a/ide/editor.lib/src/org/netbeans/editor/CharSeq.java
+++ b/ide/editor.lib/src/org/netbeans/editor/CharSeq.java
@@ -29,7 +29,7 @@
  *  to obtain CharSequence instance from a document instead.
  */
 
-
+@Deprecated
 public interface CharSeq {
 
     /**
diff --git a/ide/editor.lib/src/org/netbeans/editor/DialogSupport.java b/ide/editor.lib/src/org/netbeans/editor/DialogSupport.java
index 887eb41..a935384 100644
--- a/ide/editor.lib/src/org/netbeans/editor/DialogSupport.java
+++ b/ide/editor.lib/src/org/netbeans/editor/DialogSupport.java
@@ -34,6 +34,7 @@
  * @deprecated See org.openide.spi.editor.lib2.DialogFactory. DialogSupport has
  * no public replacement.
  */
+@Deprecated
 public class DialogSupport {
 
     /** Noone needs to instantiate the dialog support */
diff --git a/ide/editor.lib/src/org/netbeans/editor/EditorDebug.java b/ide/editor.lib/src/org/netbeans/editor/EditorDebug.java
index 069b3f8..451093b 100644
--- a/ide/editor.lib/src/org/netbeans/editor/EditorDebug.java
+++ b/ide/editor.lib/src/org/netbeans/editor/EditorDebug.java
@@ -31,6 +31,7 @@
  * @version 0.10
  * @deprecated Should never have been made public. No replacement.
  */
+@Deprecated
 public class EditorDebug {
 
     private EditorDebug() {
diff --git a/ide/editor.lib/src/org/netbeans/editor/EditorState.java b/ide/editor.lib/src/org/netbeans/editor/EditorState.java
index 524f367..4e2bd75 100644
--- a/ide/editor.lib/src/org/netbeans/editor/EditorState.java
+++ b/ide/editor.lib/src/org/netbeans/editor/EditorState.java
@@ -37,6 +37,7 @@
  *     the states stored here are not persisted and therefore don't survive
  *     JVM restarts.
  */
+@Deprecated
 public class EditorState {
     private static HashMap state = new HashMap();
     
diff --git a/ide/editor.lib/src/org/netbeans/editor/EditorUI.java b/ide/editor.lib/src/org/netbeans/editor/EditorUI.java
index 2463c8e..d792b15 100644
--- a/ide/editor.lib/src/org/netbeans/editor/EditorUI.java
+++ b/ide/editor.lib/src/org/netbeans/editor/EditorUI.java
@@ -315,6 +315,7 @@
      * 
      * @deprecated Use Editor Settings API instead.
      */
+    @Deprecated
     protected static Map<String, Coloring> getSharedColoringMap(Class kitClass) {
         String mimeType = KitsTracker.getInstance().findMimeType(kitClass);
         return ColoringMap.get(mimeType).getMap();
@@ -647,6 +648,7 @@
      * @deprecated Use Editor Settings or Editor Settings Storage API instead.
      *   This method is never called.
      */
+    @Deprecated
     protected Map createColoringMap() {
         return Collections.emptyMap();
     }
@@ -676,6 +678,7 @@
      * 
      * @deprecated Use Editor Settings API instead.
      */
+    @Deprecated
     public Map<String, Coloring> getColoringMap() {
         // Return mutable map
         return new HashMap<String, Coloring>(getCMInternal());
@@ -697,6 +700,7 @@
      * 
      * @deprecated Use Editor Settings API instead.
      */
+    @Deprecated
     public Coloring getDefaultColoring() {
         final MimePath mimePath;
         if (component != null)
@@ -719,6 +723,7 @@
      *   requested name.
      * @deprecated Use Editor Settings API instead.
      */
+    @Deprecated
     public Coloring getColoring(String coloringName) {
         return getCMInternal().get(coloringName);
     }
@@ -1011,6 +1016,7 @@
     }
 
     /** @deprecated Use Editor Code Templates API instead. */
+    @Deprecated
     public Abbrev getAbbrev() {
         if (abbrev == null) {
             abbrev = new Abbrev(this, true, true);
@@ -1103,6 +1109,7 @@
     * is really updated, the method returns true.
     * @deprecated virtual size is no longer used and effects of this method are ignored
     */
+    @Deprecated
     public boolean updateVirtualWidth(int width) {
         return false;
     }
@@ -1115,6 +1122,7 @@
     * 0 can be used to update to the real height.
     * @deprecated virtual size is no longer used and effects of this method are ignored
     */
+    @Deprecated
     public boolean updateVirtualHeight(int height) {
         return false;
     }
@@ -1239,6 +1247,7 @@
      *
      * @deprecated use <code>JComponent.scrollRectToVisible()</code> instead of this method.
      */
+    @Deprecated
     public void scrollRectToVisible(final Rectangle r, final int scrollPolicy) {
         Utilities.runInEventDispatchThread(
             new Runnable() {
@@ -1499,6 +1508,7 @@
      * @param scrollPolicy policy to be used when scrolling.
      * @deprecated
      */
+    @Deprecated
     public void caretSetDot(int offset, Rectangle scrollRect, int scrollPolicy) {
         if (component != null) {
             Caret caret = component.getCaret();
@@ -1517,6 +1527,7 @@
      * @param scrollPolicy policy to be used when scrolling.
      * @deprecated
      */
+    @Deprecated
     public void caretMoveDot(int offset, Rectangle scrollRect, int scrollPolicy) {
         if (component != null) {
             Caret caret = component.getCaret();
diff --git a/ide/editor.lib/src/org/netbeans/editor/GapStart.java b/ide/editor.lib/src/org/netbeans/editor/GapStart.java
index 3a9a27c..58c4f1a 100644
--- a/ide/editor.lib/src/org/netbeans/editor/GapStart.java
+++ b/ide/editor.lib/src/org/netbeans/editor/GapStart.java
@@ -47,6 +47,7 @@
  *  by {@link org.netbeans.lib.editor.util.swing.DocumentUtilities#getText(javax.swing.text.Document)}.
  */
 
+@Deprecated
 public interface GapStart {
 
     /**
diff --git a/ide/editor.lib/src/org/netbeans/editor/GlyphGutter.java b/ide/editor.lib/src/org/netbeans/editor/GlyphGutter.java
index 228e27a..bc77cff 100644
--- a/ide/editor.lib/src/org/netbeans/editor/GlyphGutter.java
+++ b/ide/editor.lib/src/org/netbeans/editor/GlyphGutter.java
@@ -512,7 +512,7 @@
                         Element lineElementRoot = doc.getDefaultRootElement();
                         ParagraphViewDescriptor pViewDesc = lockedVH.getParagraphViewDescriptor(pViewIndex);
                         int pViewStartOffset = pViewDesc.getStartOffset();
-                        int lineIndex = lineElementRoot.getElementIndex(pViewStartOffset);;
+                        int lineIndex = lineElementRoot.getElementIndex(pViewStartOffset);
                         int lineEndOffset = lineElementRoot.getElement(lineIndex).getEndOffset();
                         int lineWithAnno = -1;
                         float rowHeight = lockedVH.getDefaultRowHeight();
@@ -898,7 +898,7 @@
                             Object defAction = a.getValue("default-action");
                             if (toInvoke == null && defAction != null && ((Boolean) defAction)) {
                                 Object supportedAnnotationTypes = a.getValue("default-action-excluded-annotation-types");
-                                if (supportedAnnotationTypes == null || !(supportedAnnotationTypes instanceof String[]) || Collections.disjoint(Arrays.asList((String[]) supportedAnnotationTypes), annotationTypes)) {
+                                if (!(supportedAnnotationTypes instanceof String[]) || Collections.disjoint(Arrays.asList((String[]) supportedAnnotationTypes), annotationTypes)) {
                                     toInvoke = a;
                                 }
                             }
diff --git a/ide/editor.lib/src/org/netbeans/editor/GuardedDocument.java b/ide/editor.lib/src/org/netbeans/editor/GuardedDocument.java
index 5318dcb..5b2b345 100644
--- a/ide/editor.lib/src/org/netbeans/editor/GuardedDocument.java
+++ b/ide/editor.lib/src/org/netbeans/editor/GuardedDocument.java
@@ -97,6 +97,7 @@
      * @deprecated The use of editor kit's implementation classes is deprecated
      *   in favor of mime types.
      */
+    @Deprecated
     public GuardedDocument(Class kitClass) {
         this(kitClass, true, new StyleContext());
     }
@@ -123,6 +124,7 @@
      * @deprecated The use of editor kit's implementation classes is deprecated
      *   in favor of mime types.
     */
+    @Deprecated
     public GuardedDocument(Class kitClass, boolean addToRegistry, StyleContext styles) {
         super(kitClass, addToRegistry);
         init(styles);
diff --git a/ide/editor.lib/src/org/netbeans/editor/ImplementationProvider.java b/ide/editor.lib/src/org/netbeans/editor/ImplementationProvider.java
index dadd7ba..4de797e 100644
--- a/ide/editor.lib/src/org/netbeans/editor/ImplementationProvider.java
+++ b/ide/editor.lib/src/org/netbeans/editor/ImplementationProvider.java
@@ -38,7 +38,7 @@
  * @since 10/2001
  * @deprecated See org.netbeans.spi.editor.lib2.EditorImplementationProvider
  */
-
+@Deprecated
 public abstract class ImplementationProvider {
 
     private static final ImplementationProvider PROVIDER = new ProviderBridge();
diff --git a/ide/editor.lib/src/org/netbeans/editor/JumpList.java b/ide/editor.lib/src/org/netbeans/editor/JumpList.java
index d5e21b0..4dae959 100644
--- a/ide/editor.lib/src/org/netbeans/editor/JumpList.java
+++ b/ide/editor.lib/src/org/netbeans/editor/JumpList.java
@@ -93,6 +93,7 @@
      * 
      * @deprecated Use {@link #addEntry(JTextComponent, int)} instead.
      */
+    @Deprecated
     public static void checkAddEntry(JTextComponent c, int pos) {
         addEntry(c, pos);
     }
diff --git a/ide/editor.lib/src/org/netbeans/editor/LineSeparatorConversion.java b/ide/editor.lib/src/org/netbeans/editor/LineSeparatorConversion.java
index 01a056a..54ad521 100644
--- a/ide/editor.lib/src/org/netbeans/editor/LineSeparatorConversion.java
+++ b/ide/editor.lib/src/org/netbeans/editor/LineSeparatorConversion.java
@@ -31,7 +31,7 @@
  * @version 1.00
  * @deprecated Use {@link org.netbeans.lib.editor.util.CharacterConversions} instead.
  */
-
+@Deprecated
 public class LineSeparatorConversion {
 
     /**
diff --git a/ide/editor.lib/src/org/netbeans/editor/LocaleSupport.java b/ide/editor.lib/src/org/netbeans/editor/LocaleSupport.java
index 1688bc6..3152b15 100644
--- a/ide/editor.lib/src/org/netbeans/editor/LocaleSupport.java
+++ b/ide/editor.lib/src/org/netbeans/editor/LocaleSupport.java
@@ -36,7 +36,7 @@
 * @author Miloslav Metelka
 * @version 1.00
 */
-
+@Deprecated
 public class LocaleSupport {
     
     private static final boolean debug
diff --git a/ide/editor.lib/src/org/netbeans/editor/MacroDialogSupport.java b/ide/editor.lib/src/org/netbeans/editor/MacroDialogSupport.java
index 01d4606..2656aae 100644
--- a/ide/editor.lib/src/org/netbeans/editor/MacroDialogSupport.java
+++ b/ide/editor.lib/src/org/netbeans/editor/MacroDialogSupport.java
@@ -33,6 +33,7 @@
  * @version 1.0
  * @deprecated Without any replacement. This class is no longer functional.
  */
+@Deprecated
 public class MacroDialogSupport implements ActionListener {
 
     JButton okButton;
diff --git a/ide/editor.lib/src/org/netbeans/editor/MacroSavePanel.java b/ide/editor.lib/src/org/netbeans/editor/MacroSavePanel.java
index 6fdcda5..fa7e9be 100644
--- a/ide/editor.lib/src/org/netbeans/editor/MacroSavePanel.java
+++ b/ide/editor.lib/src/org/netbeans/editor/MacroSavePanel.java
@@ -44,6 +44,7 @@
  * @version 1.0
  * @deprecated Without any replacement. This class is no longer functional.
  */
+@Deprecated
 public class MacroSavePanel extends javax.swing.JPanel {
     
     private final ResourceBundle bundle = NbBundle.getBundle(BaseKit.class);
diff --git a/ide/editor.lib/src/org/netbeans/editor/Mark.java b/ide/editor.lib/src/org/netbeans/editor/Mark.java
index 77f9d15..f93606c 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Mark.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Mark.java
@@ -32,6 +32,7 @@
 * @version 1.00
 * @deprecated Use {@link Position} instead.
 */
+@Deprecated
 public class Mark {
 
     private static final MarkComparator MARK_COMPARATOR = new MarkComparator();
diff --git a/ide/editor.lib/src/org/netbeans/editor/MarkFactory.java b/ide/editor.lib/src/org/netbeans/editor/MarkFactory.java
index ea640fc..3b7597f 100644
--- a/ide/editor.lib/src/org/netbeans/editor/MarkFactory.java
+++ b/ide/editor.lib/src/org/netbeans/editor/MarkFactory.java
@@ -42,6 +42,7 @@
      * ends.
      * @deprecated syntax marks are no longer used to hold lexer states.
      */
+    @Deprecated
     public static class SyntaxMark extends Mark {
 
         /** Syntax mark state info */
diff --git a/ide/editor.lib/src/org/netbeans/editor/Registry.java b/ide/editor.lib/src/org/netbeans/editor/Registry.java
index ce4401a..163db74 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Registry.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Registry.java
@@ -42,6 +42,7 @@
  * @deprecated Use <code>EditorRegistry</code> from 
  *   <a href="@org-netbeans-modules-editor-lib2@/overview-summary.html">Editor Library 2</a> instead.
  */
+@Deprecated
 public class Registry {
 
     /** List of the registered changes listeners */
diff --git a/ide/editor.lib/src/org/netbeans/editor/SegmentCache.java b/ide/editor.lib/src/org/netbeans/editor/SegmentCache.java
index 294de12..bc32ecf 100644
--- a/ide/editor.lib/src/org/netbeans/editor/SegmentCache.java
+++ b/ide/editor.lib/src/org/netbeans/editor/SegmentCache.java
@@ -28,6 +28,7 @@
  * @deprecated The caching is no longer performed as the object creation
  * in the present JVMs is fast. Simply use <code>new Segment()</code>.
  */
+@Deprecated
 public class SegmentCache {
     
     private static final SegmentCache SHARED = new SegmentCache();
diff --git a/ide/editor.lib/src/org/netbeans/editor/Utilities.java b/ide/editor.lib/src/org/netbeans/editor/Utilities.java
index 50134b2..fe3ba0e 100644
--- a/ide/editor.lib/src/org/netbeans/editor/Utilities.java
+++ b/ide/editor.lib/src/org/netbeans/editor/Utilities.java
@@ -158,6 +158,7 @@
     * @return position of the start of the row or -1 for invalid position
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getRowStart(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getLineStart(doc, offset);
@@ -175,6 +176,7 @@
     * @return position of the start of the row or -1 for invalid position
     * @deprecated Deprecated without replacement
     */
+    @Deprecated
     public static int getRowStart(BaseDocument doc, int offset, int lineShift)
     throws BadLocationException {
         checkOffsetValid(doc, offset);
@@ -214,6 +216,7 @@
     *   if there's no non-white character on that line.
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getRowLastNonWhite(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getLineLastNonWhitespace(doc, offset);
@@ -268,6 +271,7 @@
     * @return position of the end of the row or -1 for invalid position
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getRowEnd(JTextComponent c, int offset)
     throws BadLocationException {
         Rectangle2D r = modelToView(c, offset);
@@ -285,6 +289,7 @@
      * @throws BadLocationException
      * @deprecated use {@link LineDocumentUtils}
      */
+    @Deprecated
     public static int getRowEnd(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getLineEnd(doc, offset);
@@ -335,6 +340,7 @@
     *   the required x-coordinate value
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getPositionAbove(JTextComponent c, int offset, int x)
     throws BadLocationException {
         // Ignore returned bias
@@ -352,6 +358,7 @@
     *   the required x-coordinate value
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getPositionBelow(JTextComponent c, int offset, int x)
     throws BadLocationException {
         // Ignore returned bias
@@ -366,6 +373,7 @@
     * @param offset position in document from which the current line is determined
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getWordStart(JTextComponent c, int offset)
     throws BadLocationException {
         return getWordStart((BaseDocument)c.getDocument(), offset);
@@ -434,6 +442,7 @@
     * @return position of the first white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstWhiteFwd(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getNextWhitespace(doc, offset);
@@ -447,6 +456,7 @@
     * @return position of the first non-white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstWhiteFwd(BaseDocument doc, int offset, int limitPos)
     throws BadLocationException {
         return LineDocumentUtils.getNextWhitespace(doc, offset, limitPos);
@@ -458,6 +468,7 @@
     * @return position of the first non-white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstNonWhiteFwd(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getNextNonWhitespace(doc, offset);
@@ -471,6 +482,7 @@
     * @return position of the first non-white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstNonWhiteFwd(BaseDocument doc, int offset, int limitPos)
     throws BadLocationException {
         return LineDocumentUtils.getNextNonWhitespace(doc, offset, limitPos);
@@ -484,6 +496,7 @@
     * @return position of the first white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstWhiteBwd(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getPreviousWhitespace(doc, offset);
@@ -499,6 +512,7 @@
     * @return position of the first white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstWhiteBwd(BaseDocument doc, int offset, int limitPos)
     throws BadLocationException {
         return LineDocumentUtils.getPreviousWhitespace(doc, offset, limitPos);
@@ -512,6 +526,7 @@
     * @return position of the first non-white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstNonWhiteBwd(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getPreviousNonWhitespace(doc, offset);
@@ -527,6 +542,7 @@
     * @return position of the first non-white character or -1
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getFirstNonWhiteBwd(BaseDocument doc, int offset, int limitPos)
     throws BadLocationException {
         return LineDocumentUtils.getPreviousNonWhitespace(doc, offset, limitPos);
@@ -537,6 +553,7 @@
     * @param offset position in document where to start searching
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getLineOffset(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.getLineIndex(doc, offset);
@@ -547,6 +564,7 @@
     * @return start position of the line or -1 if lineIndex was invalid
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static int getRowStartFromLineOffset(BaseDocument doc, int lineIndex) {
         return LineDocumentUtils.getLineStartFromIndex(doc, lineIndex);
     }
@@ -808,6 +826,7 @@
     * @return whether the line is empty or not
     * @deprecated use {@link LineDocumentUtils#isLineEmpty(org.netbeans.api.editor.document.LineDocument, int)}.
     */
+    @Deprecated
     public static boolean isRowEmpty(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.isLineEmpty(doc, offset);
@@ -829,6 +848,7 @@
     * @return whether the line is empty or not
     * @deprecated use {@link LineDocumentUtils}
     */
+    @Deprecated
     public static boolean isRowWhite(BaseDocument doc, int offset)
     throws BadLocationException {
         return LineDocumentUtils.isLineWhitespace(doc, offset);
@@ -913,6 +933,7 @@
     /** @deprecated
      * @see Formatter.insertTabString()
      */
+    @Deprecated
     public static String getTabInsertString(BaseDocument doc, int offset)
     throws BadLocationException {
         int col = getVisualColumn(doc, offset);
@@ -1337,6 +1358,7 @@
      * @deprecated Use java.util.logging.Logger instead with the proper name,
      * log level and message.
      */
+    @Deprecated
     public static void annotateLoggable(Throwable t) {
         Logger.getLogger("org.netbeans.editor").log(Level.INFO, null, t); //NOI18N
     }
diff --git a/ide/editor.lib/src/org/netbeans/editor/WeakEventListenerList.java b/ide/editor.lib/src/org/netbeans/editor/WeakEventListenerList.java
index 51e0786..f255d87 100644
--- a/ide/editor.lib/src/org/netbeans/editor/WeakEventListenerList.java
+++ b/ide/editor.lib/src/org/netbeans/editor/WeakEventListenerList.java
@@ -192,7 +192,7 @@
         for (int i = 0; i < listenerSize; i += 2) {
             Class t = (Class)listenerList[i];
             EventListener l = (EventListener)((WeakReference)listenerList[i + 1]).get();
-            if ((l != null) && (l instanceof Serializable)) {
+            if (l instanceof Serializable) {
                 os.writeObject(t.getName());
                 os.writeObject(l);
             }
diff --git a/ide/editor.lib/src/org/netbeans/editor/ext/ExtCaret.java b/ide/editor.lib/src/org/netbeans/editor/ext/ExtCaret.java
index 77d955c..c039e64 100644
--- a/ide/editor.lib/src/org/netbeans/editor/ext/ExtCaret.java
+++ b/ide/editor.lib/src/org/netbeans/editor/ext/ExtCaret.java
@@ -39,6 +39,7 @@
      * @deprecated Please use Braces Matching SPI instead, for details see
      *   <a href="@org-netbeans-modules-editor-bracesmatching@/overview-summary.html">Editor Braces Matching</a>.
      */
+    @Deprecated
     protected void updateMatchBrace() {
     }
 
@@ -51,6 +52,7 @@
      * @deprecated Please use Braces Matching SPI instead, for details see
      *   <a href="@org-netbeans-modules-editor-bracesmatching@/overview-summary.html">Editor Braces Matching</a>.
      */
+    @Deprecated
     public void requestMatchBraceUpdateSync() {
     }
     
diff --git a/ide/editor.lib/src/org/netbeans/editor/ext/ExtKit.java b/ide/editor.lib/src/org/netbeans/editor/ext/ExtKit.java
index 73f3598..20074ae 100644
--- a/ide/editor.lib/src/org/netbeans/editor/ext/ExtKit.java
+++ b/ide/editor.lib/src/org/netbeans/editor/ext/ExtKit.java
@@ -78,6 +78,7 @@
      * its name is defined here for clarity
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String findAction = "find"; // NOI18N
 
     /** Open replace dialog action - this action is defined in view package, but
@@ -113,11 +114,13 @@
     /** Advanced code selection technique
      * @deprecated this action name is not actively used by ExtKit and will be removed in future releases.
      */
+    @Deprecated
     public static final String codeSelectAction = "code-select"; // NOI18N
 
     /** Action used when escape is pressed. By default it hides popup-menu
      * @deprecated this action name is not actively used by ExtKit and will be removed in future releases.
      */
+    @Deprecated
     public static final String escapeAction = "escape"; // NOI18N
 
     /** Find the completion help and show it in the completion pane. */
@@ -317,7 +320,7 @@
                         }
                         item.setEnabled(a.isEnabled());
                         Object helpID = a.getValue ("helpID"); // NOI18N
-                        if (helpID != null && (helpID instanceof String))
+                        if (helpID instanceof String)
                             item.putClientProperty ("HelpID", helpID); // NOI18N
                     }
                 }
@@ -487,6 +490,7 @@
      * Action to go to the declaration of the variable under the caret.
      * @deprecated this action is no longer used. It is reimplemented in editor.actions module.
      */
+    @Deprecated
     public static class GotoDeclarationAction extends BaseKitLocalizedAction {
 
         static final long serialVersionUID =-6440495023918097760L;
@@ -586,6 +590,7 @@
      * @deprecated Please use Braces Matching SPI instead, for details see
      *   <a href="@org-netbeans-modules-editor-bracesmatching@/overview-summary.html">Editor Braces Matching</a>.
      */
+    @Deprecated
     public static class MatchBraceAction extends BaseKitLocalizedAction {
 // XXX: remove
 //        boolean select;
@@ -642,6 +647,7 @@
     /**
      * @deprecated this action is deprecated and will be removed in future releases.
      */
+    @Deprecated
     public static class CodeSelectAction extends BaseKitLocalizedAction {
 
         static final long serialVersionUID =4033474080778585860L;
@@ -1036,6 +1042,7 @@
 //            name = defaultKeyTypedAction,
 //            shortDescription = editorBundleHash + defaultKeyTypedAction
 //    )
+    @Deprecated
     public static class ExtDefaultKeyTypedAction extends DefaultKeyTypedAction {
 
         static final long serialVersionUID =5273032708909044812L;
@@ -1094,6 +1101,7 @@
      * @deprecated Please use Editor Code Completion API instead, for details see
      *   <a href="@org-netbeans-modules-editor-completion@/overview-summary.html">Editor Code Completion</a>.
      */
+    @Deprecated
     @EditorActionRegistration(
             name = completionShowAction,
             shortDescription = editorBundleHash + completionShowAction
@@ -1114,6 +1122,7 @@
      * @deprecated Please use Editor Code Completion API instead, for details see
      *   <a href="@org-netbeans-modules-editor-completion@/overview-summary.html">Editor Code Completion</a>.
      */
+    @Deprecated
     @EditorActionRegistration(
             name = allCompletionShowAction,
             shortDescription = editorBundleHash + allCompletionShowAction
@@ -1132,6 +1141,7 @@
      * @deprecated Please use Editor Code Completion API instead, for details see
      *   <a href="@org-netbeans-modules-editor-completion@/overview-summary.html">Editor Code Completion</a>.
      */
+    @Deprecated
     @EditorActionRegistration(
             name = documentationShowAction,
             shortDescription = editorBundleHash + documentationShowAction
@@ -1150,6 +1160,7 @@
      * @deprecated Please use Editor Code Completion API instead, for details see
      *   <a href="@org-netbeans-modules-editor-completion@/overview-summary.html">Editor Code Completion</a>.
      */
+    @Deprecated
     @EditorActionRegistration(
             name = completionTooltipShowAction,
             shortDescription = editorBundleHash + completionTooltipShowAction
@@ -1168,7 +1179,8 @@
      * @deprecated Please do not subclass this class. Use Typing Hooks instead, for details see
      *   <a href="@org-netbeans-modules-editor-lib2@/overview-summary.html">Editor Library 2</a>.
      */
-  public static class ExtDeleteCharAction extends DeleteCharAction {
+    @Deprecated
+    public static class ExtDeleteCharAction extends DeleteCharAction {
 
     public ExtDeleteCharAction(String nm, boolean nextChar) {
       super(nm, nextChar);
diff --git a/ide/editor.lib/src/org/netbeans/modules/editor/lib/drawing/DrawLayer.java b/ide/editor.lib/src/org/netbeans/modules/editor/lib/drawing/DrawLayer.java
index 9a3e3d7..80a8e10 100644
--- a/ide/editor.lib/src/org/netbeans/modules/editor/lib/drawing/DrawLayer.java
+++ b/ide/editor.lib/src/org/netbeans/modules/editor/lib/drawing/DrawLayer.java
@@ -38,7 +38,7 @@
 * @version 1.00
 */
 
-
+@Deprecated
 /* package */ interface DrawLayer {
 
     /**
diff --git a/ide/editor.lib2/nbproject/org-netbeans-modules-editor-lib2.sig b/ide/editor.lib2/nbproject/org-netbeans-modules-editor-lib2.sig
index 53fa412..42dbaa4 100644
--- a/ide/editor.lib2/nbproject/org-netbeans-modules-editor-lib2.sig
+++ b/ide/editor.lib2/nbproject/org-netbeans-modules-editor-lib2.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.37.0
+#Version 2.38.0
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/editor.lib2/src/org/netbeans/api/editor/caret/EditorCaret.java b/ide/editor.lib2/src/org/netbeans/api/editor/caret/EditorCaret.java
index 926c5e3..39a459d 100644
--- a/ide/editor.lib2/src/org/netbeans/api/editor/caret/EditorCaret.java
+++ b/ide/editor.lib2/src/org/netbeans/api/editor/caret/EditorCaret.java
@@ -2394,7 +2394,7 @@
         }
         JTextComponent c = component;
         int offset = c.viewToModel(new Point(x, y));
-        Rectangle r = null;;
+        Rectangle r = null;
         if (offset >= 0) {
             try {
                 r = c.modelToView(offset);
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/CaretUndoEdit.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/CaretUndoEdit.java
index de47ce7..67b8feb 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/CaretUndoEdit.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/CaretUndoEdit.java
@@ -274,7 +274,7 @@
         protected void restoreEditorCaret(EditorCaret caret) throws BadLocationException {
             List<Position> dotAndMarkPosPairs;
             Position dotPos = doc.createPosition(getOffset(dotOffsetAndBias));
-            List<Position.Bias> biases = addBias(null, dotOffsetAndBias, 0);;
+            List<Position.Bias> biases = addBias(null, dotOffsetAndBias, 0);
             int biasIndex = 1;
             if (markOffsetAndBias != COMPLEX_POSITIONS_MARKER) {
                 Position markPos = doc.createPosition(getOffset(markOffsetAndBias));
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorActionRegistrationProcessor.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorActionRegistrationProcessor.java
index b2b768bf..3120316 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorActionRegistrationProcessor.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorActionRegistrationProcessor.java
@@ -236,10 +236,11 @@
         int popupPosition = annotation.popupPosition();
         if (popupPosition != Integer.MAX_VALUE) {
             StringBuilder popupPresenterFilePath = new StringBuilder(50);
-            popupPresenterFilePath.append("Editors/Popup/");
+            popupPresenterFilePath.append("Editors/");
             if (mimeType.length() > 0) {
                 popupPresenterFilePath.append(mimeType).append("/");
             }
+            popupPresenterFilePath.append("Popup/");
             if (popupPath.length() > 0) {
                 popupPresenterFilePath.append(popupPath).append('/');
             }
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java
index 41fe69e..f02eb86 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java
@@ -94,6 +94,7 @@
      * 
      * @deprecated Use Editor Settings and Editor Settings Storage APIs instead.
      */
+    @Deprecated
     public static final String ABBREV_MAP = "abbrev-map"; // NOI18N
 
     /** Map of macro definitions. The second string (value) contains
@@ -106,6 +107,7 @@
      * @deprecated Not supported anymore. There is no public API for accessing
      *   editor macros.
      */
+    @Deprecated
     public static final String MACRO_MAP = "macro-map"; // NOI18N
 
     /** Map of the action abbreviations. The second string (value) is
@@ -121,6 +123,7 @@
      * @deprecated Not supported anymore. For code templates use
      *   Editor Settings, Editor Settings Storage and Editor Code Templates APIs.
      */
+    @Deprecated
     public static final String ABBREV_ACTION_MAP = "abbrev-action-map"; // NOI18N
 
     /** Acceptor checking whether abbreviation should be attempted
@@ -170,6 +173,7 @@
      *   or org.netbeans.editor.MultiKeyBinding instances
      * @deprecated Use Editor Settings and Editor Settings Storage APIs instead.
      */
+    @Deprecated
     public static final String KEY_BINDING_LIST = "key-bindings"; // NOI18N
 
     /** Whether the input-methods should be enabled.
@@ -309,6 +313,7 @@
     * Values: java.lang.Boolean
     * @deprecated As of 05/09/2001
     */
+    @Deprecated
     public static final String HOME_KEY_COLUMN_ONE = "home-key-column-one"; // NOI18N
 
     /** Finder for finding the next word. If it's not set,
@@ -427,75 +432,89 @@
      * Values: java.util.List instances
      * @deprecated Use Editor Settings and Editor Settings Storage APIs instead.
      */
+    @Deprecated
     public static final String COLORING_NAME_LIST = "coloring-name-list"; // NOI18N
 
     /** Suffix added to the coloring settings. The resulting name is used
      * as the name of the setting.
      * @deprecated Use Editor Settings and Editor Settings Storage APIs instead.
      */
+    @Deprecated
     public static final String COLORING_NAME_SUFFIX = "-coloring"; // NOI18N
 
     /** Suffix added to the print coloring settings. The resulting name is used
      * as the name of the setting.
      * @deprecated Use Editor Settings and Editor Settings Storage APIs instead.
      */
+    @Deprecated
     public static final String COLORING_NAME_PRINT_SUFFIX = "-print-coloring"; // NOI18N
 
 
     /** Default coloring for the drawing. 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String DEFAULT_COLORING = "default"; // NOI18N
 
     /** Coloring that will be used for line numbers displayed on the left
      * side on the screen.
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String LINE_NUMBER_COLORING = "line-number"; // NOI18N
     
     /** Coloring used for guarded blocks 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String GUARDED_COLORING = "guarded"; // NOI18N
 
     /** Coloring that will be used for code folding icons displayed in editor
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String CODE_FOLDING_COLORING = "code-folding"; // NOI18N
 
     /** Coloring that will be used for code folding side bar
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String CODE_FOLDING_BAR_COLORING = "code-folding-bar"; // NOI18N
     
     /** Coloring used for selection 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String SELECTION_COLORING = "selection"; // NOI18N
 
     /** Coloring used for highlight search 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String HIGHLIGHT_SEARCH_COLORING = "highlight-search"; // NOI18N
 
     /** Coloring used for incremental search 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String INC_SEARCH_COLORING = "inc-search"; // NOI18N
 
     /** Coloring used for block search
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String BLOCK_SEARCH_COLORING = "block-search"; // NOI18N
     
     /** Coloring used for the status bar 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String STATUS_BAR_COLORING = "status-bar"; // NOI18N
 
     /** Coloring used to mark important text in the status bar 
      * @deprecated Use {@link org.netbeans.api.editor.settings.FontColorNames} instead.
      */
+    @Deprecated
     public static final String STATUS_BAR_BOLD_COLORING = "status-bar-bold"; // NOI18N
 
     
@@ -536,12 +555,14 @@
      * Coloring used to highlight the row where the caret resides
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String HIGHLIGHT_CARET_ROW_COLORING = "highlight-caret-row"; // NOI18N
 
     /** 
      * Coloring used to highlight the matching brace
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String HIGHLIGHT_MATCH_BRACE_COLORING = "highlight-match-brace"; // NOI18N
 
     /** Delay (milliseconds) after which the matching brace
@@ -549,6 +570,7 @@
      * if the user holds the arrow key pressed.
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String HIGHLIGHT_MATCH_BRACE_DELAY = "highlight-match-brace-delay"; // NOI18N
 
     /** Whether the fast and simple matching should be used for higlighting
@@ -556,6 +578,7 @@
      * and string and character constants in the search.
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String CARET_SIMPLE_MATCH_BRACE = "caret-simple-match-brace"; // NOI18N
 
     /** The delay after which the completion window is refreshed.
@@ -583,17 +606,20 @@
      * Values: java.lang.Boolean
      * @deprecated replaced by FAST_IMPORT_SELECTION
      */
+    @Deprecated
     public static final String FAST_IMPORT_PACKAGE = "fast-import-package"; // NOI18N
     
     /**
      * The Code Completion DB is always updated after mounting a new filesystem.
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String ALWAYS = "pd_always";//NOI18N
     /** 
      * The Code Completion DB is never updated after mounting a new filesystem.
      * @deprecated Without any replacement.
      */
+    @Deprecated
     public static final String NEVER = "pd_never";//NOI18N
     
 }
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/highlighting/CheckedHighlightsSequence.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/highlighting/CheckedHighlightsSequence.java
index c191a6b..2da6c43 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/highlighting/CheckedHighlightsSequence.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/highlighting/CheckedHighlightsSequence.java
@@ -50,6 +50,7 @@
      * @param containerDebugId
      * @deprecated Use the other constructor and setContainerDebugId
      */
+    @Deprecated
     public CheckedHighlightsSequence(HighlightsSequence seq, int startOffset, int endOffset, String containerDebugId) {
         assert seq != null : "seq must not be null"; //NOI18N
         assert 0 <= startOffset : "startOffset must be greater than or equal to zero"; //NOI18N
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/PrependedTextView.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/PrependedTextView.java
index 472c8f2..e1b8b46 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/PrependedTextView.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/PrependedTextView.java
@@ -32,15 +32,12 @@
 import javax.swing.text.View;
 import org.netbeans.spi.editor.highlighting.HighlightsSequence;
 
-/**
- * TODO
- */
+
 public final class PrependedTextView extends EditorView {
 
     private final AttributeSet attributes;
     private final EditorView delegate;
     private final TextLayout prependedTextLayout;
-    private final double leftShift;
     private final double prependedTextWidth;
 
     public PrependedTextView(DocumentViewOp op, AttributeSet attributes, EditorView delegate) {
@@ -49,10 +46,13 @@
         this.delegate = delegate;
         Font font = ViewUtils.getFont(attributes, op.getDefaultHintFont());
         prependedTextLayout = op.createTextLayout((String) attributes.getAttribute(ViewUtils.KEY_VIRTUAL_TEXT_PREPEND), font);
-        Rectangle2D textBounds = prependedTextLayout.getBounds(); //TODO: allocation!
+        // Advance represents the width of the full string, including leading
+        // and trailing spaces
+        float width = prependedTextLayout.getAdvance();
+        // The prependTextWidth is rounded to full char widths, so that layout
+        // is not destroyed too much
         double em = op.getDefaultCharWidth();
-        leftShift = em / 2;
-        prependedTextWidth = Math.ceil(textBounds.getWidth() + em);
+        prependedTextWidth = Math.ceil(width / em) * em;
     }
 
     @Override
@@ -93,7 +93,7 @@
         }
 
         g.setColor(Color.gray);
-        span.setRect(span.getX() + leftShift, span.getY(), prependedTextWidth - 2 * leftShift, span.getHeight());
+        span.setRect(span.getX(), span.getY(), prependedTextWidth, span.getHeight());
         HighlightsViewUtils.paintTextLayout(g, span, prependedTextLayout, getDocumentView());
     }
 
diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/ViewStats.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/ViewStats.java
index f5f6681..d794d31 100644
--- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/ViewStats.java
+++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/view/ViewStats.java
@@ -75,7 +75,7 @@
     }
 
     public static void incrementStaleViewCreations() {
-        staleViewCreationCount++;;
+        staleViewCreationCount++;
         if (LOG.isLoggable(Level.FINE)) {
             if (LOG.isLoggable(Level.FINEST) ||
                 (staleViewCreationCount % STALE_VIEW_CREATION_TIMEOUT) == 0)
diff --git a/ide/editor.macros/nbproject/project.properties b/ide/editor.macros/nbproject/project.properties
index ea8c836..a2c11ff 100644
--- a/ide/editor.macros/nbproject/project.properties
+++ b/ide/editor.macros/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 spec.version.base=1.50.0
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/editor.plain.lib/nbproject/org-netbeans-modules-editor-plain-lib.sig b/ide/editor.plain.lib/nbproject/org-netbeans-modules-editor-plain-lib.sig
index 6d83d6d..f56c2e4 100644
--- a/ide/editor.plain.lib/nbproject/org-netbeans-modules-editor-plain-lib.sig
+++ b/ide/editor.plain.lib/nbproject/org-netbeans-modules-editor-plain-lib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/ide/editor.plain/src/org/netbeans/modules/editor/plain/PlainKit.java b/ide/editor.plain/src/org/netbeans/modules/editor/plain/PlainKit.java
index a190f32..e83124c 100644
--- a/ide/editor.plain/src/org/netbeans/modules/editor/plain/PlainKit.java
+++ b/ide/editor.plain/src/org/netbeans/modules/editor/plain/PlainKit.java
@@ -34,6 +34,7 @@
  * @deprecated If you need this class you are doing something wrong, 
  *   please ask on nbdev@netbeans.org.
  */
+@Deprecated
 public class PlainKit extends NbEditorKit {
 
     public static final String PLAIN_MIME_TYPE = "text/plain"; // NOI18N
diff --git a/ide/editor.search/src/org/netbeans/modules/editor/search/EditorFindSupport.java b/ide/editor.search/src/org/netbeans/modules/editor/search/EditorFindSupport.java
index 3dcecb7..dd6d34f 100644
--- a/ide/editor.search/src/org/netbeans/modules/editor/search/EditorFindSupport.java
+++ b/ide/editor.search/src/org/netbeans/modules/editor/search/EditorFindSupport.java
@@ -521,7 +521,7 @@
         incSearchReset();
         props = getValidFindProperties(props);
         boolean back = isBackSearch(props, oppositeDir);
-        if (props.get(FIND_WHAT) == null || !(props.get(FIND_WHAT) instanceof String)) {
+        if (!(props.get(FIND_WHAT) instanceof String)) {
             return null;
         }
         String findWhat = (String) props.get(FIND_WHAT);
diff --git a/ide/editor.search/src/org/netbeans/modules/editor/search/SearchNbEditorKit.java b/ide/editor.search/src/org/netbeans/modules/editor/search/SearchNbEditorKit.java
index ba8b7dd..0f94e20 100644
--- a/ide/editor.search/src/org/netbeans/modules/editor/search/SearchNbEditorKit.java
+++ b/ide/editor.search/src/org/netbeans/modules/editor/search/SearchNbEditorKit.java
@@ -124,7 +124,7 @@
 
     public static void openFindIfNecessary(JTextComponent component, ActionEvent evt) {
         Object findWhat = EditorFindSupport.getInstance().getFindProperty(EditorFindSupport.FIND_WHAT);
-        if (findWhat == null || !(findWhat instanceof String) || ((String) findWhat).isEmpty()) {
+        if (!(findWhat instanceof String) || ((String) findWhat).isEmpty()) {
 
             Action findAction = ((BaseKit) component.getUI().getEditorKit(
                     component)).getActionByName("find");
diff --git a/ide/editor.settings.lib/nbproject/org-netbeans-modules-editor-settings-lib.sig b/ide/editor.settings.lib/nbproject/org-netbeans-modules-editor-settings-lib.sig
index 167a893..b44253d 100644
--- a/ide/editor.settings.lib/nbproject/org-netbeans-modules-editor-settings-lib.sig
+++ b/ide/editor.settings.lib/nbproject/org-netbeans-modules-editor-settings-lib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.68.0
+#Version 1.69.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.settings.storage/nbproject/org-netbeans-modules-editor-settings-storage.sig b/ide/editor.settings.storage/nbproject/org-netbeans-modules-editor-settings-storage.sig
index ddc32be..dabd3e1 100644
--- a/ide/editor.settings.storage/nbproject/org-netbeans-modules-editor-settings-storage.sig
+++ b/ide/editor.settings.storage/nbproject/org-netbeans-modules-editor-settings-storage.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.69.0
+#Version 1.70.0
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/ide/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/api/EditorSettings.java b/ide/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/api/EditorSettings.java
index b5bdb4a..10bf53e 100644
--- a/ide/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/api/EditorSettings.java
+++ b/ide/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/api/EditorSettings.java
@@ -84,6 +84,7 @@
      * general contract clients should listen on mime type specific Lookup for
      * changes in editor settings.
      */
+    @Deprecated
     public static final String PROP_DEFAULT_FONT_COLORS = "defaultFontColors"; //NOI18N
     
     /** 
@@ -93,6 +94,7 @@
      * general contract clients should listen on mime type specific Lookup for
      * changes in editor settings.
      */
+    @Deprecated
     public static final String PROP_EDITOR_FONT_COLORS = EditorSettingsImpl.PROP_EDITOR_FONT_COLORS;
 
     /**
@@ -138,6 +140,7 @@
      * 
      * @deprecated Use getFontColorSettings(new String[0]).getAllFontColors(profile) instead.
      */
+    @Deprecated
     public abstract Collection<AttributeSet> getDefaultFontColors (
 	String profile
     );
@@ -151,6 +154,7 @@
      * 
      * @deprecated Use getFontColorSettings(new String[0]).getAllFontColorsDefaults(profile) instead.
      */
+    @Deprecated
     public abstract Collection<AttributeSet> getDefaultFontColorDefaults (
 	String profile
     );
@@ -163,6 +167,7 @@
      * 
      * @deprecated Use getFontColorSettings(new String[0]).setAllFontColors(profile, fontColors) instead.
      */
+    @Deprecated
     public abstract void setDefaultFontColors (
 	String profile,
 	Collection<AttributeSet> fontColors
diff --git a/ide/editor.settings/nbproject/org-netbeans-modules-editor-settings.sig b/ide/editor.settings/nbproject/org-netbeans-modules-editor-settings.sig
index 68a18ea..536bf76 100644
--- a/ide/editor.settings/nbproject/org-netbeans-modules-editor-settings.sig
+++ b/ide/editor.settings/nbproject/org-netbeans-modules-editor-settings.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.74
+#Version 1.75
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.structure/nbproject/org-netbeans-modules-editor-structure.sig b/ide/editor.structure/nbproject/org-netbeans-modules-editor-structure.sig
index 3a48635..988d485 100644
--- a/ide/editor.structure/nbproject/org-netbeans-modules-editor-structure.sig
+++ b/ide/editor.structure/nbproject/org-netbeans-modules-editor-structure.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64.0
+#Version 1.65.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/editor.structure/nbproject/project.properties b/ide/editor.structure/nbproject/project.properties
index 649b506..ecb1144 100644
--- a/ide/editor.structure/nbproject/project.properties
+++ b/ide/editor.structure/nbproject/project.properties
@@ -19,7 +19,7 @@
 
 javac.compilerargs=-Xlint:unchecked
 
-javac.source=1.6
+javac.source=1.8
 
 spec.version.base=1.66.0
 
diff --git a/ide/editor.tools.storage/nbproject/org-netbeans-modules-editor-tools-storage.sig b/ide/editor.tools.storage/nbproject/org-netbeans-modules-editor-tools-storage.sig
index c0a09a1..f972a7f 100644
--- a/ide/editor.tools.storage/nbproject/org-netbeans-modules-editor-tools-storage.sig
+++ b/ide/editor.tools.storage/nbproject/org-netbeans-modules-editor-tools-storage.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.25
+#Version 1.26
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/editor.util/nbproject/org-netbeans-modules-editor-util.sig b/ide/editor.util/nbproject/org-netbeans-modules-editor-util.sig
index b4a200e..e0f8c16 100644
--- a/ide/editor.util/nbproject/org-netbeans-modules-editor-util.sig
+++ b/ide/editor.util/nbproject/org-netbeans-modules-editor-util.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.82
+#Version 1.83
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/editor.util/src/org/netbeans/lib/editor/util/CharSubSequence.java b/ide/editor.util/src/org/netbeans/lib/editor/util/CharSubSequence.java
index 6a12a08..2a5066c 100644
--- a/ide/editor.util/src/org/netbeans/lib/editor/util/CharSubSequence.java
+++ b/ide/editor.util/src/org/netbeans/lib/editor/util/CharSubSequence.java
@@ -36,6 +36,7 @@
      *  of the given text.
      * @deprecated use {@link CharSequenceUtilities#checkIndexesValid(CharSequence, int, int)}
      */
+    @Deprecated
     public static void checkIndexesValid(CharSequence text, int start, int end) {
         CharSequenceUtilities.checkIndexesValid(text, start, end);
     }
diff --git a/ide/editor.util/src/org/netbeans/lib/editor/util/GapList.java b/ide/editor.util/src/org/netbeans/lib/editor/util/GapList.java
index 1dc7c23..f0c99ee 100644
--- a/ide/editor.util/src/org/netbeans/lib/editor/util/GapList.java
+++ b/ide/editor.util/src/org/netbeans/lib/editor/util/GapList.java
@@ -311,6 +311,7 @@
     /**
      * @deprecated use {@link #copyElements(int, int, Object[], int)} which performs the same operation
      */
+    @Deprecated
     public void copyItems(int startIndex, int endIndex,
     Object[] dest, int destIndex) {
         copyElements(startIndex, endIndex, dest, destIndex);
diff --git a/ide/editor.util/src/org/netbeans/lib/editor/util/swing/DocumentUtilities.java b/ide/editor.util/src/org/netbeans/lib/editor/util/swing/DocumentUtilities.java
index 0d7d1ce..05cecf0 100644
--- a/ide/editor.util/src/org/netbeans/lib/editor/util/swing/DocumentUtilities.java
+++ b/ide/editor.util/src/org/netbeans/lib/editor/util/swing/DocumentUtilities.java
@@ -270,6 +270,7 @@
      * @deprecated
      * @see #isTypingModification(Document)
      */
+    @Deprecated
     public static boolean isTypingModification(DocumentEvent evt) {
         return isTypingModification(evt.getDocument());
     }
diff --git a/ide/editor/nbproject/org-netbeans-modules-editor.sig b/ide/editor/nbproject/org-netbeans-modules-editor.sig
index dee8a87..144c072 100644
--- a/ide/editor/nbproject/org-netbeans-modules-editor.sig
+++ b/ide/editor/nbproject/org-netbeans-modules-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.104.0
+#Version 1.105.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/editor/src/org/netbeans/modules/editor/MainMenuAction.java b/ide/editor/src/org/netbeans/modules/editor/MainMenuAction.java
index 39c8052..7a90395 100644
--- a/ide/editor/src/org/netbeans/modules/editor/MainMenuAction.java
+++ b/ide/editor/src/org/netbeans/modules/editor/MainMenuAction.java
@@ -245,7 +245,7 @@
         
         presenter.setEnabled(action != null);
         JTextComponent comp = Utilities.getFocusedComponent();
-        if (comp != null && comp instanceof JEditorPane){
+        if (comp instanceof JEditorPane){
             addAccelerators(action, presenter, comp);
         } else {
             presenter.setAccelerator(getDefaultAccelerator());
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbDialogSupport.java b/ide/editor/src/org/netbeans/modules/editor/NbDialogSupport.java
index 94712d7..72e26f2 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbDialogSupport.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbDialogSupport.java
@@ -30,6 +30,7 @@
  * @version 1.0
  * @deprecated Without any replacement.
  */
+@Deprecated
 public class NbDialogSupport extends NbDialogFactory implements DialogSupport.DialogFactory {
     public NbDialogSupport() {
         
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java b/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
index 2f570f0..c9c0003 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
@@ -81,6 +81,7 @@
      * @deprecated Use of editor kit's implementation classes is deprecated
      *   in favor of mime types.
      */
+    @Deprecated
     public NbEditorDocument(Class kitClass) {
         super(kitClass);
         init();
@@ -144,7 +145,7 @@
                                        boolean replace) {
         if (s != null) {
             Object val = s.getAttribute(NbDocument.GUARDED);
-            if (val != null && val instanceof Boolean) {
+            if (val instanceof Boolean) {
                 if (((Boolean)val).booleanValue() == true) { // want make guarded
                     super.setCharacterAttributes(offset, length, guardedSet, replace);
                 } else { // want make unguarded
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbEditorKit.java b/ide/editor/src/org/netbeans/modules/editor/NbEditorKit.java
index b5234cf..fac7ccd 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbEditorKit.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbEditorKit.java
@@ -276,6 +276,7 @@
      */
     //@EditorActionRegistration(name = toggleToolbarAction)
     // Registration in createActions() due to getPopupMenuItem()
+    @Deprecated
     public static class ToggleToolbarAction extends BaseAction {
 
         public ToggleToolbarAction() {
@@ -766,7 +767,7 @@
                     } else {
                         item.setEnabled(action.isEnabled());
                         Object helpID = action.getValue ("helpID"); // NOI18N
-                        if (helpID != null && (helpID instanceof String)) {
+                        if ((helpID instanceof String)) {
                             item.putClientProperty ("HelpID", helpID); // NOI18N
                         }
                         assignAccelerator(component.getKeymap(), action, item);
@@ -855,6 +856,7 @@
     /**
      * @deprecated Without any replacement. This class is no longer functional.
      */
+    @Deprecated
     public class NbStopMacroRecordingAction extends ActionFactory.StopMacroRecordingAction {
         protected @Override MacroDialogSupport getMacroDialogSupport(Class kitClass){
             return super.getMacroDialogSupport(kitClass);
@@ -905,6 +907,7 @@
      */
     //@EditorActionRegistration(name = BaseKit.toggleLineNumbersAction)
     // Registration in createActions() due to getPopupMenuItem() in predecessor
+    @Deprecated
     public static final class NbToggleLineNumbersAction extends ActionFactory.ToggleLineNumbersAction {
 
         public NbToggleLineNumbersAction() {
@@ -1060,7 +1063,7 @@
                         Mnemonics.setLocalizedText(item, itemText);
                         addAcceleretors(a, item, target);
                         Object helpID = a.getValue ("helpID"); // NOI18N
-                        if (helpID != null && (helpID instanceof String))
+                        if ((helpID instanceof String))
                             item.putClientProperty ("HelpID", helpID); // NOI18N
                     }
                 }
@@ -1243,7 +1246,7 @@
                     addAcceleretors(nonContextAction, item, target);
                     item.setEnabled(action.isEnabled());
                     Object helpID = action.getValue ("helpID"); // NOI18N
-                    if (helpID != null && (helpID instanceof String)) {
+                    if (helpID instanceof String) {
                         item.putClientProperty ("HelpID", helpID); // NOI18N
                     }
                 }
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbEditorUI.java b/ide/editor/src/org/netbeans/modules/editor/NbEditorUI.java
index a7cf4c1..be23292 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbEditorUI.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbEditorUI.java
@@ -95,6 +95,7 @@
      *
      * @deprecated - use {@link #attachSystemActionPerformer(String)} instead
      */
+    @Deprecated
     protected SystemActionUpdater createSystemActionUpdater(
         String editorActionName, boolean updatePerformer, boolean syncEnabling) {
         return new SystemActionUpdater(editorActionName, updatePerformer, syncEnabling);
@@ -628,6 +629,7 @@
      *
      * @deprecated use SystemActionPerformer instead
      */
+    @Deprecated
     public final class SystemActionUpdater
         implements PropertyChangeListener, ActionPerformer {
 
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbEditorUtilities.java b/ide/editor/src/org/netbeans/modules/editor/NbEditorUtilities.java
index c37762c..08ac66e 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbEditorUtilities.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbEditorUtilities.java
@@ -126,6 +126,7 @@
     * @return the line object
     * @deprecated Replaced by more generic method having {@link javax.swing.text.Document} parameter.
     */
+    @Deprecated
     public static Line getLine(BaseDocument doc, int offset, boolean original) {
         DataObject dob = getDataObject(doc);
         if (dob != null) {
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbImplementationProvider.java b/ide/editor/src/org/netbeans/modules/editor/NbImplementationProvider.java
index aa6c88a..fbe3270 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbImplementationProvider.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbImplementationProvider.java
@@ -34,6 +34,7 @@
  * @since 10/2001
  * @deprecated Without any replacement.
  */
+@Deprecated
 public class NbImplementationProvider extends ImplementationProvider {
 
     public static final String GLYPH_GUTTER_ACTIONS_FOLDER_NAME = 
diff --git a/ide/editor/src/org/netbeans/modules/editor/impl/CustomizableSideBar.java b/ide/editor/src/org/netbeans/modules/editor/impl/CustomizableSideBar.java
index 17b457a..5912f59 100644
--- a/ide/editor/src/org/netbeans/modules/editor/impl/CustomizableSideBar.java
+++ b/ide/editor/src/org/netbeans/modules/editor/impl/CustomizableSideBar.java
@@ -474,7 +474,7 @@
                 position = fo.getAttribute("position"); // NOI18N
             }
             
-            if (position != null && position instanceof String) {
+            if (position instanceof String) {
                 String positionName = (String) position;
                 
                 if (WEST_NAME.equals(positionName)) {
@@ -503,7 +503,7 @@
             
             Object scrollable = fo.getAttribute("scrollable"); // NOI18N
             
-            if (scrollable != null && scrollable instanceof Boolean) {
+            if (scrollable instanceof Boolean) {
                 this.scrollable = ((Boolean) scrollable).booleanValue();
             } else {
                 this.scrollable = true;
diff --git a/ide/editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties b/ide/editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
index 5186731..834a5bc 100644
--- a/ide/editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
+++ b/ide/editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
@@ -33,7 +33,7 @@
 
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}:\
diff --git a/ide/extbrowser/nbproject/org-netbeans-modules-extbrowser.sig b/ide/extbrowser/nbproject/org-netbeans-modules-extbrowser.sig
index 2557256..8496a79 100644
--- a/ide/extbrowser/nbproject/org-netbeans-modules-extbrowser.sig
+++ b/ide/extbrowser/nbproject/org-netbeans-modules-extbrowser.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.70
+#Version 1.71
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/extbrowser/src/org/netbeans/modules/extbrowser/ExtWebBrowser.java b/ide/extbrowser/src/org/netbeans/modules/extbrowser/ExtWebBrowser.java
index 6e415cb..53e86a0 100644
--- a/ide/extbrowser/src/org/netbeans/modules/extbrowser/ExtWebBrowser.java
+++ b/ide/extbrowser/src/org/netbeans/modules/extbrowser/ExtWebBrowser.java
@@ -243,7 +243,7 @@
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(ExtWebBrowser.PROP_BROWSER_EXECUTABLE)) {
             Object np = evt.getNewValue();
-            if ((np != null) && (np instanceof NbProcessDescriptor)) {
+            if (np instanceof NbProcessDescriptor) {
                 String processName = ((NbProcessDescriptor)np).getProcessName();
                 if (err.isLoggable(Level.FINE)) {
                     err.log(Level.FINE, "" + System.currentTimeMillis() + "> propertychange: " + processName);
diff --git a/ide/extbrowser/src/org/netbeans/modules/extbrowser/SystemDefaultBrowser.java b/ide/extbrowser/src/org/netbeans/modules/extbrowser/SystemDefaultBrowser.java
index 244c226..7fed37b 100644
--- a/ide/extbrowser/src/org/netbeans/modules/extbrowser/SystemDefaultBrowser.java
+++ b/ide/extbrowser/src/org/netbeans/modules/extbrowser/SystemDefaultBrowser.java
@@ -179,7 +179,7 @@
             return;
         }
         final HtmlBrowser.Impl impl = createHtmlBrowserImpl();
-        final ExtBrowserImpl extImpl = impl != null && impl instanceof ExtBrowserImpl ? (ExtBrowserImpl)impl : null;
+        final ExtBrowserImpl extImpl = impl instanceof ExtBrowserImpl ? (ExtBrowserImpl)impl : null;
         if (extImpl != null) {
             RP.post(new Runnable() {
                 @Override
diff --git a/ide/extexecution.base/nbproject/org-netbeans-modules-extexecution-base.sig b/ide/extexecution.base/nbproject/org-netbeans-modules-extexecution-base.sig
index fea8376..084bfa4 100644
--- a/ide/extexecution.base/nbproject/org-netbeans-modules-extexecution-base.sig
+++ b/ide/extexecution.base/nbproject/org-netbeans-modules-extexecution-base.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.23
+#Version 1.24
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/extexecution.base/src/org/netbeans/api/extexecution/base/ExplicitProcessParameters.java b/ide/extexecution.base/src/org/netbeans/api/extexecution/base/ExplicitProcessParameters.java
index 235e139..d8fda1b 100644
--- a/ide/extexecution.base/src/org/netbeans/api/extexecution/base/ExplicitProcessParameters.java
+++ b/ide/extexecution.base/src/org/netbeans/api/extexecution/base/ExplicitProcessParameters.java
@@ -259,7 +259,7 @@
     public static ExplicitProcessParameters buildExplicitParameters(Collection<? extends ExplicitProcessParameters> items) {
         List<? extends ExplicitProcessParameters> all = new ArrayList<>(items);
         Collections.sort(all, (a, b) -> a.position - b.position);
-        Builder b = builder();;
+        Builder b = builder();
         for (ExplicitProcessParameters item : all) {
             b.combine(item);
         }
diff --git a/ide/extexecution.impl/nbproject/project.properties b/ide/extexecution.impl/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/ide/extexecution.impl/nbproject/project.properties
+++ b/ide/extexecution.impl/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/extexecution/nbproject/org-netbeans-modules-extexecution.sig b/ide/extexecution/nbproject/org-netbeans-modules-extexecution.sig
index 8cd8e53..02fd6c3 100644
--- a/ide/extexecution/nbproject/org-netbeans-modules-extexecution.sig
+++ b/ide/extexecution/nbproject/org-netbeans-modules-extexecution.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.66
+#Version 1.67
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/ExecutionDescriptor.java b/ide/extexecution/src/org/netbeans/api/extexecution/ExecutionDescriptor.java
index 4f12087..60739fa 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/ExecutionDescriptor.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/ExecutionDescriptor.java
@@ -397,6 +397,7 @@
      *             processor to use for standard output
      * @deprecated use {@link #outProcessorFactory(org.netbeans.api.extexecution.ExecutionDescriptor.InputProcessorFactory2)}
      */
+    @Deprecated
     @NonNull
     @CheckReturnValue
     public ExecutionDescriptor outProcessorFactory(@NullAllowed InputProcessorFactory outProcessorFactory) {
@@ -471,6 +472,7 @@
      *             processor to use for standard error output
      * @deprecated use {@link #errProcessorFactory(org.netbeans.api.extexecution.ExecutionDescriptor.InputProcessorFactory2)}
      */
+    @Deprecated
     @NonNull
     @CheckReturnValue
     public ExecutionDescriptor errProcessorFactory(@NullAllowed InputProcessorFactory errProcessorFactory) {
@@ -812,6 +814,7 @@
      * Factory creating the input processor.
      * @deprecated use {@link InputProcessorFactory2}
      */
+    @Deprecated
     public interface InputProcessorFactory {
 
         /**
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessBuilder.java b/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessBuilder.java
index ff1d815..304b463 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessBuilder.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessBuilder.java
@@ -47,6 +47,7 @@
  * @see #call()
  * @deprecated use {@link org.netbeans.api.extexecution.base.ProcessBuilder#getLocal()}
  */
+@Deprecated
 public final class ExternalProcessBuilder implements Callable<Process> {
 
     private static final Logger LOGGER = Logger.getLogger(ExternalProcessBuilder.class.getName());
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessSupport.java b/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessSupport.java
index 0091e6c..52753a9 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessSupport.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/ExternalProcessSupport.java
@@ -34,6 +34,7 @@
  * @since 1.16
  * @deprecated use {@link Processes}
  */
+@Deprecated
 public final class ExternalProcessSupport {
 
     private ExternalProcessSupport() {
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/ProcessBuilder.java b/ide/extexecution/src/org/netbeans/api/extexecution/ProcessBuilder.java
index 75602a5..76c7b43 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/ProcessBuilder.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/ProcessBuilder.java
@@ -53,6 +53,7 @@
  * @since 1.28
  * @deprecated use {@link org.netbeans.api.extexecution.base.ProcessBuilder}
  */
+@Deprecated
 public final class ProcessBuilder implements Callable<Process> {
 
     private final ProcessBuilderImplementation implementation;
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessor.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessor.java
index ec9d428..5a1cf7e 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessor.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessor.java
@@ -33,6 +33,7 @@
  * @see InputReader
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.InputProcessor}
  */
+@Deprecated
 public interface InputProcessor extends Closeable {
 
     /**
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessors.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessors.java
index 54220ac..9b12903 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessors.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputProcessors.java
@@ -35,6 +35,7 @@
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.InputProcessors}
  *             and {@link org.netbeans.api.extexecution.print.InputProcessors}
  */
+@Deprecated
 public final class InputProcessors {
 
     private InputProcessors() {
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReader.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReader.java
index 8272c46..0a464c8 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReader.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReader.java
@@ -33,6 +33,7 @@
  * @author Petr Hejl
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.InputReader}
  */
+@Deprecated
 public interface InputReader extends Closeable {
 
     /**
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaderTask.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaderTask.java
index 2139c11..97aa70a 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaderTask.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaderTask.java
@@ -74,6 +74,7 @@
  * @author Petr Hejl
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.InputReaderTask}
  */
+@Deprecated
 public final class InputReaderTask implements Runnable, Cancellable {
 
     private final org.netbeans.api.extexecution.base.input.InputReaderTask delegate;
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaders.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaders.java
index d99706d..a4273c8 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaders.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/InputReaders.java
@@ -38,6 +38,7 @@
  * @author Petr Hejl
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.InputReaders}
  */
+@Deprecated
 public final class InputReaders {
 
     private InputReaders() {
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessor.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessor.java
index c7b89ba..6430504 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessor.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessor.java
@@ -34,6 +34,7 @@
  * @see InputReader
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.LineProcessor}
  */
+@Deprecated
 public interface LineProcessor extends Closeable {
 
     /**
diff --git a/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessors.java b/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessors.java
index 726452a..8b8dd9e 100644
--- a/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessors.java
+++ b/ide/extexecution/src/org/netbeans/api/extexecution/input/LineProcessors.java
@@ -38,6 +38,7 @@
  * @deprecated use {@link org.netbeans.api.extexecution.base.input.LineProcessors}
  *             and {@link org.netbeans.api.extexecution.print.LineProcessors}
  */
+@Deprecated
 public final class LineProcessors {
 
     private LineProcessors() {
diff --git a/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderFactory.java b/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderFactory.java
index 62bb3ea..05e9e50 100644
--- a/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderFactory.java
+++ b/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderFactory.java
@@ -29,6 +29,7 @@
  * @deprecated use {@link org.netbeans.spi.extexecution.base.ProcessBuilderFactory}
  *             and {@link org.netbeans.spi.extexecution.base.ProcessBuilderImplementation}
  */
+@Deprecated
 public class ProcessBuilderFactory {
 
     private ProcessBuilderFactory() {
diff --git a/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderImplementation.java b/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderImplementation.java
index a990a14..c982e24 100644
--- a/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderImplementation.java
+++ b/ide/extexecution/src/org/netbeans/spi/extexecution/ProcessBuilderImplementation.java
@@ -42,6 +42,7 @@
  * @deprecated use {@link org.netbeans.spi.extexecution.base.ProcessBuilderImplementation}
  *             and {@link org.netbeans.spi.extexecution.base.ProcessBuilderFactory}
  */
+@Deprecated
 public interface ProcessBuilderImplementation {
 
     /**
diff --git a/ide/extexecution/src/org/netbeans/spi/extexecution/destroy/ProcessDestroyPerformer.java b/ide/extexecution/src/org/netbeans/spi/extexecution/destroy/ProcessDestroyPerformer.java
index 8a88f93..d5e1520 100644
--- a/ide/extexecution/src/org/netbeans/spi/extexecution/destroy/ProcessDestroyPerformer.java
+++ b/ide/extexecution/src/org/netbeans/spi/extexecution/destroy/ProcessDestroyPerformer.java
@@ -41,6 +41,7 @@
  * @since 1.16
  * @deprecated use {@link ProcessesImplementation} and {@link Processes}
  */
+@Deprecated
 public interface ProcessDestroyPerformer {
 
     /**
diff --git a/ide/git/nbproject/org-netbeans-modules-git.sig b/ide/git/nbproject/org-netbeans-modules-git.sig
index 5a5f2b1..68dc1fe 100644
--- a/ide/git/nbproject/org-netbeans-modules-git.sig
+++ b/ide/git/nbproject/org-netbeans-modules-git.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39.0
+#Version 1.40.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/git/src/org/netbeans/modules/git/ui/conflicts/ResolveConflictsAction.java b/ide/git/src/org/netbeans/modules/git/ui/conflicts/ResolveConflictsAction.java
index 1c8dd50..c6ad51c 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/conflicts/ResolveConflictsAction.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/conflicts/ResolveConflictsAction.java
@@ -64,7 +64,7 @@
     protected Task performAction (File repository, File[] roots, VCSContext context) {
         final File[] files = Git.getInstance().getFileStatusCache().listFiles(roots, EnumSet.of(Status.IN_CONFLICT));
         if (files.length > 0) {
-            GitProgressSupport supp = new ResolveConflictsExecutor(files);;
+            GitProgressSupport supp = new ResolveConflictsExecutor(files);
             supp.start(Git.getInstance().getRequestProcessor(repository), repository, NbBundle.getMessage(ResolveConflictsAction.class, "MSG_PreparingMerge")); //NOI18N
             return supp.getTask();
         } else {
diff --git a/ide/git/src/org/netbeans/modules/git/ui/history/SearchExecutor.java b/ide/git/src/org/netbeans/modules/git/ui/history/SearchExecutor.java
index aca0105..f73f712 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/history/SearchExecutor.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/history/SearchExecutor.java
@@ -55,7 +55,7 @@
     private final String toRevision;
     private final Date from;
     private final Date to;
-    static final int DEFAULT_LIMIT = 10;
+    static final int DEFAULT_LIMIT = 50;
     static final int UNLIMITTED = -1;
     private final SearchCriteria sc;
     private final Mode mode;
diff --git a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.form b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.form
index 88e654a..fb892f9 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.form
+++ b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.form
@@ -92,7 +92,6 @@
     </Container>
     <Container class="javax.swing.JToolBar" name="jToolBar1">
       <Properties>
-        <Property name="floatable" type="boolean" value="false"/>
         <Property name="rollover" type="boolean" value="true"/>
       </Properties>
       <AuxValues>
@@ -192,7 +191,6 @@
               <ResourceString bundle="org/netbeans/modules/git/ui/history/Bundle.properties" key="LBL_TT_SearchHistoryPanel_AllInfo" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
             </Property>
             <Property name="horizontalTextPosition" type="int" value="4"/>
-            <Property name="opaque" type="boolean" value="false"/>
           </Properties>
           <Events>
             <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileInfoCheckBoxActionPerformed"/>
diff --git a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.java b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.java
index ed28a8b..72ec45c 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryPanel.java
@@ -327,6 +327,7 @@
         fileInfoCheckBox.setEnabled(tbSummary.isSelected());
 
         searchCriteriaPanel.setVisible(criteriaVisible);
+        bSearch.setVisible(criteriaVisible);
         expandCriteriaButton.setIcon(criteriaVisible ? ICON_EXPANDED : ICON_COLLAPSED);
         if (criteria.getLimit() <= 0) {
             criteria.setLimit(SearchExecutor.UNLIMITTED);
@@ -600,9 +601,10 @@
 }//GEN-LAST:event_fileInfoCheckBoxActionPerformed
 
     private void expandCriteriaButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_expandCriteriaButtonActionPerformed
-        searchCriteriaPanel.setVisible(!searchCriteriaPanel.isVisible());
-        expandCriteriaButton.setIcon(searchCriteriaPanel.isVisible() ? ICON_EXPANDED : ICON_COLLAPSED);
-        criteriaVisible = searchCriteriaPanel.isVisible();
+        criteriaVisible = !searchCriteriaPanel.isVisible();
+        searchCriteriaPanel.setVisible(criteriaVisible);
+        bSearch.setVisible(criteriaVisible);
+        expandCriteriaButton.setIcon(criteriaVisible ? ICON_EXPANDED : ICON_COLLAPSED);
     }//GEN-LAST:event_expandCriteriaButtonActionPerformed
 
     private void cmbFilterKindActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbFilterKindActionPerformed
diff --git a/ide/git/src/org/netbeans/modules/git/ui/tag/CreateTagAction.java b/ide/git/src/org/netbeans/modules/git/ui/tag/CreateTagAction.java
index 995bea1..ed519c1 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/tag/CreateTagAction.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/tag/CreateTagAction.java
@@ -48,6 +48,16 @@
 public class CreateTagAction extends SingleRepositoryAction {
 
     private static final Logger LOG = Logger.getLogger(CreateTagAction.class.getName());
+    private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/tag.png"; //NOI18N
+
+    public CreateTagAction() {
+        super(ICON_RESOURCE);
+    }
+
+    @Override
+    protected String iconResource() {
+        return ICON_RESOURCE;
+    }
 
     @Override
     protected void performAction (File repository, File[] roots, VCSContext context) {
diff --git a/ide/git/src/org/netbeans/modules/git/ui/tag/ManageTagsAction.java b/ide/git/src/org/netbeans/modules/git/ui/tag/ManageTagsAction.java
index 7341b94..906c67f 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/tag/ManageTagsAction.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/tag/ManageTagsAction.java
@@ -47,6 +47,16 @@
 public class ManageTagsAction extends SingleRepositoryAction {
 
     private static final Logger LOG = Logger.getLogger(ManageTagsAction.class.getName());
+    private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/tags.png"; //NOI18N
+
+    public ManageTagsAction() {
+        super(ICON_RESOURCE);
+    }
+
+    @Override
+    protected String iconResource() {
+        return ICON_RESOURCE;
+    }
 
     @Override
     protected void performAction (File repository, File[] roots, VCSContext context) {
diff --git a/ide/go.lang/build.xml b/ide/go.lang/build.xml
new file mode 100644
index 0000000..6f6bcdb
--- /dev/null
+++ b/ide/go.lang/build.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="ide/go.lang" default="build" basedir=".">
+    <description>Builds, tests, and runs the project org.netbeans.modules.languages.golang</description>
+    <import file="../../nbbuild/templates/projectized.xml"/>
+
+    <target name="download-golang-grammar" depends="init">
+        <property name="apache.license.header">
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+</property>
+        <property name="golang.additionalheader">
+
+@header{
+${apache.license.header}
+package org.antlr.parser.golang;
+
+}
+
+</property>
+
+        <property name="golang.outdir" location="${src.dir}/org/antlr/parser/golang"/>
+        <mkdir dir="${golang.outdir}"/>
+
+        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${golang.grammar.version}/golang/GoLexer.g4" dest="${golang.outdir}"/>
+        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${golang.grammar.version}/golang/GoParser.g4" dest="${golang.outdir}"/>
+        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${golang.grammar.version}/golang/Java/GoParserBase.java" dest="${golang.outdir}"/>
+
+        <replace file="${golang.outdir}/GoParserBase.java">
+              <replacetoken><![CDATA[import java.util.List;]]></replacetoken>
+  <replacevalue><![CDATA[package org.antlr.parser.golang;
+import java.util.List;]]></replacevalue>
+        </replace>
+
+        <replaceregexp match="(parser|lexer) grammar ([^;]+);([\n\r]*)"
+                       replace="\1 grammar \2;${golang.additionalheader}"
+                       flags="g"
+        >
+            <fileset dir="${golang.outdir}" includes="GoParser.g4 GoLexer.g4" />
+        </replaceregexp>
+    </target>
+
+    <target name="generate-golang-parser" description="Regenerate the Go parser" depends="init">
+        <property name="golang.outdir" location="${src.dir}/org/antlr/parser/golang"/>
+        <path id="antlr4.tool">
+            <fileset dir="../../ide/libs.antlr4.runtime/external" includes="*.jar"/>
+            <fileset dir="../../ide/libs.antlr3.runtime/external" includes="antlr-runtime-*.jar"/>
+        </path>
+
+        <java classname="org.antlr.v4.Tool" classpathref="antlr4.tool" fork="true" dir="${golang.outdir}">
+            <arg value="-o"/>
+            <arg value="${golang.outdir}"/>
+            <arg value="-visitor"/>
+            <arg value="GoLexer.g4"/>
+            <arg value="GoParser.g4"/>
+        </java>
+
+        <delete dir="${golang.outdir}" includes="*.tokens"/>
+        <delete dir="${golang.outdir}" includes="*.interp"/>
+
+    </target>
+</project>
diff --git a/ide/go.lang/licenseinfo.xml b/ide/go.lang/licenseinfo.xml
new file mode 100644
index 0000000..0db674a
--- /dev/null
+++ b/ide/go.lang/licenseinfo.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<licenseinfo>
+    <fileset>
+        <file>src/org/antlr/parser/golang/GoLexer.g4</file>
+        <file>src/org/antlr/parser/golang/GoParser.g4</file>
+        <file>src/org/antlr/parser/golang/GoParserBase.java</file>
+        <license ref="BSD-antlr-go-grammar" />
+    </fileset>
+</licenseinfo>
diff --git a/ide/go.lang/manifest.mf b/ide/go.lang/manifest.mf
new file mode 100644
index 0000000..57d2f85
--- /dev/null
+++ b/ide/go.lang/manifest.mf
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+OpenIDE-Module: org.netbeans.modules.go.lang
+OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/go/lang/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+AutoUpdate-Show-In-Client: true
diff --git a/nbbuild/travis/hide-logs.sh b/ide/go.lang/nbproject/project.properties
old mode 100755
new mode 100644
similarity index 77%
copy from nbbuild/travis/hide-logs.sh
copy to ide/go.lang/nbproject/project.properties
index b0030f5..471cf8b
--- a/nbbuild/travis/hide-logs.sh
+++ b/ide/go.lang/nbproject/project.properties
@@ -1,5 +1,3 @@
-#!/bin/bash
-
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -16,13 +14,9 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+javac.source=1.8
 
-"$@" > "/tmp/command_log.txt" 2>&1
-
-RESULT=$?
-
-if [ $RESULT -ne 0 ] ; then
-    echo "$(</tmp/command_log.txt)"
-fi
-
-exit $RESULT
+# As of 2nd Jan 2023, we use the Grammar from:
+# https://github.com/antlr/grammars-v4/tree/4794c0c5371ce6b0711a306256f8f7706394ec6d/golang
+#
+golang.grammar.version=4794c0c5371ce6b0711a306256f8f7706394ec6d
diff --git a/ide/go.lang/nbproject/project.xml b/ide/go.lang/nbproject/project.xml
new file mode 100644
index 0000000..040da00
--- /dev/null
+++ b/ide/go.lang/nbproject/project.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+            <code-name-base>org.netbeans.modules.go.lang</code-name-base>
+            <module-dependencies>
+                <dependency>
+                    <code-name-base>org.netbeans.libs.antlr4.runtime</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
+                    </run-dependency>
+                </dependency>
+            </module-dependencies>
+            <public-packages>
+                <package>org.antlr.parser.golang</package>
+            </public-packages>
+        </data>
+    </configuration>
+</project>
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoLexer.g4 b/ide/go.lang/src/org/antlr/parser/golang/GoLexer.g4
new file mode 100644
index 0000000..eca61ef
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoLexer.g4
@@ -0,0 +1,550 @@
+/*
+ [The "BSD licence"]
+ Copyright (c) 2017 Sasa Coh, Michał Błotniak
+ Copyright (c) 2019 Ivan Kochurkin, kvanttt@gmail.com, Positive Technologies
+ Copyright (c) 2019 Dmitry Rassadin, flipparassa@gmail.com, Positive Technologies
+ Copyright (c) 2021 Martin Mirchev, mirchevmartin2203@gmail.com
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * A Go grammar for ANTLR 4 derived from the Go Language Specification
+ * https://golang.org/ref/spec
+ */
+
+lexer grammar GoLexer;
+
+@header{
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+}
+
+// Keywords
+
+BREAK                  : 'break' -> mode(NLSEMI);
+DEFAULT                : 'default';
+FUNC                   : 'func';
+INTERFACE              : 'interface';
+SELECT                 : 'select';
+CASE                   : 'case';
+DEFER                  : 'defer';
+GO                     : 'go';
+MAP                    : 'map';
+STRUCT                 : 'struct';
+CHAN                   : 'chan';
+ELSE                   : 'else';
+GOTO                   : 'goto';
+PACKAGE                : 'package';
+SWITCH                 : 'switch';
+CONST                  : 'const';
+FALLTHROUGH            : 'fallthrough' -> mode(NLSEMI);
+IF                     : 'if';
+RANGE                  : 'range';
+TYPE                   : 'type';
+CONTINUE               : 'continue' -> mode(NLSEMI);
+FOR                    : 'for';
+IMPORT                 : 'import';
+RETURN                 : 'return' -> mode(NLSEMI);
+VAR                    : 'var';
+
+NIL_LIT                : 'nil' -> mode(NLSEMI);
+
+IDENTIFIER             : LETTER (LETTER | UNICODE_DIGIT)* -> mode(NLSEMI);
+
+// Punctuation
+
+L_PAREN                : '(';
+R_PAREN                : ')' -> mode(NLSEMI);
+L_CURLY                : '{';
+R_CURLY                : '}' -> mode(NLSEMI);
+L_BRACKET              : '[';
+R_BRACKET              : ']' -> mode(NLSEMI);
+ASSIGN                 : '=';
+COMMA                  : ',';
+SEMI                   : ';';
+COLON                  : ':';
+DOT                    : '.';
+PLUS_PLUS              : '++' -> mode(NLSEMI);
+MINUS_MINUS            : '--' -> mode(NLSEMI);
+DECLARE_ASSIGN         : ':=';
+ELLIPSIS               : '...';
+
+// Logical
+
+LOGICAL_OR             : '||';
+LOGICAL_AND            : '&&';
+
+// Relation operators
+
+EQUALS                 : '==';
+NOT_EQUALS             : '!=';
+LESS                   : '<';
+LESS_OR_EQUALS         : '<=';
+GREATER                : '>';
+GREATER_OR_EQUALS      : '>=';
+
+// Arithmetic operators
+
+OR                     : '|';
+DIV                    : '/';
+MOD                    : '%';
+LSHIFT                 : '<<';
+RSHIFT                 : '>>';
+BIT_CLEAR              : '&^';
+
+// Unary operators
+
+EXCLAMATION            : '!';
+
+// Mixed operators
+
+PLUS                   : '+';
+MINUS                  : '-';
+CARET                  : '^';
+STAR                   : '*';
+AMPERSAND              : '&';
+RECEIVE                : '<-';
+
+// Number literals
+
+DECIMAL_LIT            : ('0' | [1-9] ('_'? [0-9])*) -> mode(NLSEMI);
+BINARY_LIT             : '0' [bB] ('_'? BIN_DIGIT)+ -> mode(NLSEMI);
+OCTAL_LIT              : '0' [oO]? ('_'? OCTAL_DIGIT)+ -> mode(NLSEMI);
+HEX_LIT                : '0' [xX]  ('_'? HEX_DIGIT)+ -> mode(NLSEMI);
+
+
+FLOAT_LIT : (DECIMAL_FLOAT_LIT | HEX_FLOAT_LIT) -> mode(NLSEMI);
+
+DECIMAL_FLOAT_LIT      : DECIMALS ('.' DECIMALS? EXPONENT? | EXPONENT)
+                       | '.' DECIMALS EXPONENT?
+                       ;
+
+HEX_FLOAT_LIT          : '0' [xX] HEX_MANTISSA HEX_EXPONENT
+                       ;
+
+fragment HEX_MANTISSA  : ('_'? HEX_DIGIT)+ ('.' ( '_'? HEX_DIGIT )*)?
+                       | '.' HEX_DIGIT ('_'? HEX_DIGIT)*;
+
+fragment HEX_EXPONENT  : [pP] [+-]? DECIMALS;
+
+
+IMAGINARY_LIT          : (DECIMAL_LIT | BINARY_LIT |  OCTAL_LIT | HEX_LIT | FLOAT_LIT) 'i' -> mode(NLSEMI);
+
+// Rune literals
+
+fragment RUNE               : '\'' (UNICODE_VALUE | BYTE_VALUE) '\'';//: '\'' (~[\n\\] | ESCAPED_VALUE) '\'';
+
+RUNE_LIT                : RUNE -> mode(NLSEMI);
+
+
+
+BYTE_VALUE : OCTAL_BYTE_VALUE | HEX_BYTE_VALUE;
+
+OCTAL_BYTE_VALUE: '\\' OCTAL_DIGIT OCTAL_DIGIT OCTAL_DIGIT;
+
+HEX_BYTE_VALUE: '\\' 'x'  HEX_DIGIT HEX_DIGIT;
+
+LITTLE_U_VALUE: '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
+
+BIG_U_VALUE: '\\' 'U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
+
+// String literals
+
+RAW_STRING_LIT         : '`' ~'`'*                      '`' -> mode(NLSEMI);
+INTERPRETED_STRING_LIT : '"' (~["\\] | ESCAPED_VALUE)*  '"' -> mode(NLSEMI);
+
+// Hidden tokens
+
+WS                     : [ \t]+             -> channel(HIDDEN);
+COMMENT                : '/*' .*? '*/'      -> channel(HIDDEN);
+TERMINATOR             : [\r\n]+            -> channel(HIDDEN);
+LINE_COMMENT           : '//' ~[\r\n]*      -> channel(HIDDEN);
+
+fragment UNICODE_VALUE: ~[\r\n'] | LITTLE_U_VALUE | BIG_U_VALUE | ESCAPED_VALUE;
+
+// Fragments
+
+fragment ESCAPED_VALUE
+    : '\\' ('u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
+           | 'U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
+           | [abfnrtv\\'"]
+           | OCTAL_DIGIT OCTAL_DIGIT OCTAL_DIGIT
+           | 'x' HEX_DIGIT HEX_DIGIT)
+    ;
+
+fragment DECIMALS
+    : [0-9] ('_'? [0-9])*
+    ;
+
+fragment OCTAL_DIGIT
+    : [0-7]
+    ;
+
+fragment HEX_DIGIT
+    : [0-9a-fA-F]
+    ;
+
+fragment BIN_DIGIT
+    : [01]
+    ;
+
+fragment EXPONENT
+    : [eE] [+-]? DECIMALS
+    ;
+
+fragment LETTER
+    : UNICODE_LETTER
+    | '_'
+    ;
+
+fragment UNICODE_DIGIT
+    : [\p{Nd}]
+
+    /*  [\u0030-\u0039]
+    | [\u0660-\u0669]
+    | [\u06F0-\u06F9]
+    | [\u0966-\u096F]
+    | [\u09E6-\u09EF]
+    | [\u0A66-\u0A6F]
+    | [\u0AE6-\u0AEF]
+    | [\u0B66-\u0B6F]
+    | [\u0BE7-\u0BEF]
+    | [\u0C66-\u0C6F]
+    | [\u0CE6-\u0CEF]
+    | [\u0D66-\u0D6F]
+    | [\u0E50-\u0E59]
+    | [\u0ED0-\u0ED9]
+    | [\u0F20-\u0F29]
+    | [\u1040-\u1049]
+    | [\u1369-\u1371]
+    | [\u17E0-\u17E9]
+    | [\u1810-\u1819]
+    | [\uFF10-\uFF19]*/
+    ;
+
+fragment UNICODE_LETTER
+    : [\p{L}]
+    /*  [\u0041-\u005A]
+    | [\u0061-\u007A]
+    | [\u00AA]
+    | [\u00B5]
+    | [\u00BA]
+    | [\u00C0-\u00D6]
+    | [\u00D8-\u00F6]
+    | [\u00F8-\u021F]
+    | [\u0222-\u0233]
+    | [\u0250-\u02AD]
+    | [\u02B0-\u02B8]
+    | [\u02BB-\u02C1]
+    | [\u02D0-\u02D1]
+    | [\u02E0-\u02E4]
+    | [\u02EE]
+    | [\u037A]
+    | [\u0386]
+    | [\u0388-\u038A]
+    | [\u038C]
+    | [\u038E-\u03A1]
+    | [\u03A3-\u03CE]
+    | [\u03D0-\u03D7]
+    | [\u03DA-\u03F3]
+    | [\u0400-\u0481]
+    | [\u048C-\u04C4]
+    | [\u04C7-\u04C8]
+    | [\u04CB-\u04CC]
+    | [\u04D0-\u04F5]
+    | [\u04F8-\u04F9]
+    | [\u0531-\u0556]
+    | [\u0559]
+    | [\u0561-\u0587]
+    | [\u05D0-\u05EA]
+    | [\u05F0-\u05F2]
+    | [\u0621-\u063A]
+    | [\u0640-\u064A]
+    | [\u0671-\u06D3]
+    | [\u06D5]
+    | [\u06E5-\u06E6]
+    | [\u06FA-\u06FC]
+    | [\u0710]
+    | [\u0712-\u072C]
+    | [\u0780-\u07A5]
+    | [\u0905-\u0939]
+    | [\u093D]
+    | [\u0950]
+    | [\u0958-\u0961]
+    | [\u0985-\u098C]
+    | [\u098F-\u0990]
+    | [\u0993-\u09A8]
+    | [\u09AA-\u09B0]
+    | [\u09B2]
+    | [\u09B6-\u09B9]
+    | [\u09DC-\u09DD]
+    | [\u09DF-\u09E1]
+    | [\u09F0-\u09F1]
+    | [\u0A05-\u0A0A]
+    | [\u0A0F-\u0A10]
+    | [\u0A13-\u0A28]
+    | [\u0A2A-\u0A30]
+    | [\u0A32-\u0A33]
+    | [\u0A35-\u0A36]
+    | [\u0A38-\u0A39]
+    | [\u0A59-\u0A5C]
+    | [\u0A5E]
+    | [\u0A72-\u0A74]
+    | [\u0A85-\u0A8B]
+    | [\u0A8D]
+    | [\u0A8F-\u0A91]
+    | [\u0A93-\u0AA8]
+    | [\u0AAA-\u0AB0]
+    | [\u0AB2-\u0AB3]
+    | [\u0AB5-\u0AB9]
+    | [\u0ABD]
+    | [\u0AD0]
+    | [\u0AE0]
+    | [\u0B05-\u0B0C]
+    | [\u0B0F-\u0B10]
+    | [\u0B13-\u0B28]
+    | [\u0B2A-\u0B30]
+    | [\u0B32-\u0B33]
+    | [\u0B36-\u0B39]
+    | [\u0B3D]
+    | [\u0B5C-\u0B5D]
+    | [\u0B5F-\u0B61]
+    | [\u0B85-\u0B8A]
+    | [\u0B8E-\u0B90]
+    | [\u0B92-\u0B95]
+    | [\u0B99-\u0B9A]
+    | [\u0B9C]
+    | [\u0B9E-\u0B9F]
+    | [\u0BA3-\u0BA4]
+    | [\u0BA8-\u0BAA]
+    | [\u0BAE-\u0BB5]
+    | [\u0BB7-\u0BB9]
+    | [\u0C05-\u0C0C]
+    | [\u0C0E-\u0C10]
+    | [\u0C12-\u0C28]
+    | [\u0C2A-\u0C33]
+    | [\u0C35-\u0C39]
+    | [\u0C60-\u0C61]
+    | [\u0C85-\u0C8C]
+    | [\u0C8E-\u0C90]
+    | [\u0C92-\u0CA8]
+    | [\u0CAA-\u0CB3]
+    | [\u0CB5-\u0CB9]
+    | [\u0CDE]
+    | [\u0CE0-\u0CE1]
+    | [\u0D05-\u0D0C]
+    | [\u0D0E-\u0D10]
+    | [\u0D12-\u0D28]
+    | [\u0D2A-\u0D39]
+    | [\u0D60-\u0D61]
+    | [\u0D85-\u0D96]
+    | [\u0D9A-\u0DB1]
+    | [\u0DB3-\u0DBB]
+    | [\u0DBD]
+    | [\u0DC0-\u0DC6]
+    | [\u0E01-\u0E30]
+    | [\u0E32-\u0E33]
+    | [\u0E40-\u0E46]
+    | [\u0E81-\u0E82]
+    | [\u0E84]
+    | [\u0E87-\u0E88]
+    | [\u0E8A]
+    | [\u0E8D]
+    | [\u0E94-\u0E97]
+    | [\u0E99-\u0E9F]
+    | [\u0EA1-\u0EA3]
+    | [\u0EA5]
+    | [\u0EA7]
+    | [\u0EAA-\u0EAB]
+    | [\u0EAD-\u0EB0]
+    | [\u0EB2-\u0EB3]
+    | [\u0EBD-\u0EC4]
+    | [\u0EC6]
+    | [\u0EDC-\u0EDD]
+    | [\u0F00]
+    | [\u0F40-\u0F6A]
+    | [\u0F88-\u0F8B]
+    | [\u1000-\u1021]
+    | [\u1023-\u1027]
+    | [\u1029-\u102A]
+    | [\u1050-\u1055]
+    | [\u10A0-\u10C5]
+    | [\u10D0-\u10F6]
+    | [\u1100-\u1159]
+    | [\u115F-\u11A2]
+    | [\u11A8-\u11F9]
+    | [\u1200-\u1206]
+    | [\u1208-\u1246]
+    | [\u1248]
+    | [\u124A-\u124D]
+    | [\u1250-\u1256]
+    | [\u1258]
+    | [\u125A-\u125D]
+    | [\u1260-\u1286]
+    | [\u1288]
+    | [\u128A-\u128D]
+    | [\u1290-\u12AE]
+    | [\u12B0]
+    | [\u12B2-\u12B5]
+    | [\u12B8-\u12BE]
+    | [\u12C0]
+    | [\u12C2-\u12C5]
+    | [\u12C8-\u12CE]
+    | [\u12D0-\u12D6]
+    | [\u12D8-\u12EE]
+    | [\u12F0-\u130E]
+    | [\u1310]
+    | [\u1312-\u1315]
+    | [\u1318-\u131E]
+    | [\u1320-\u1346]
+    | [\u1348-\u135A]
+    | [\u13A0-\u13B0]
+    | [\u13B1-\u13F4]
+    | [\u1401-\u1676]
+    | [\u1681-\u169A]
+    | [\u16A0-\u16EA]
+    | [\u1780-\u17B3]
+    | [\u1820-\u1877]
+    | [\u1880-\u18A8]
+    | [\u1E00-\u1E9B]
+    | [\u1EA0-\u1EE0]
+    | [\u1EE1-\u1EF9]
+    | [\u1F00-\u1F15]
+    | [\u1F18-\u1F1D]
+    | [\u1F20-\u1F39]
+    | [\u1F3A-\u1F45]
+    | [\u1F48-\u1F4D]
+    | [\u1F50-\u1F57]
+    | [\u1F59]
+    | [\u1F5B]
+    | [\u1F5D]
+    | [\u1F5F-\u1F7D]
+    | [\u1F80-\u1FB4]
+    | [\u1FB6-\u1FBC]
+    | [\u1FBE]
+    | [\u1FC2-\u1FC4]
+    | [\u1FC6-\u1FCC]
+    | [\u1FD0-\u1FD3]
+    | [\u1FD6-\u1FDB]
+    | [\u1FE0-\u1FEC]
+    | [\u1FF2-\u1FF4]
+    | [\u1FF6-\u1FFC]
+    | [\u207F]
+    | [\u2102]
+    | [\u2107]
+    | [\u210A-\u2113]
+    | [\u2115]
+    | [\u2119-\u211D]
+    | [\u2124]
+    | [\u2126]
+    | [\u2128]
+    | [\u212A-\u212D]
+    | [\u212F-\u2131]
+    | [\u2133-\u2139]
+    | [\u2160-\u2183]
+    | [\u3005-\u3007]
+    | [\u3021-\u3029]
+    | [\u3031-\u3035]
+    | [\u3038-\u303A]
+    | [\u3041-\u3094]
+    | [\u309D-\u309E]
+    | [\u30A1-\u30FA]
+    | [\u30FC-\u30FE]
+    | [\u3105-\u312C]
+    | [\u3131-\u318E]
+    | [\u31A0-\u31B7]
+    | [\u3400]
+    | [\u4DB5]
+    | [\u4E00]
+    | [\u9FA5]
+    | [\uA000-\uA48C]
+    | [\uAC00]
+    | [\uD7A3]
+    | [\uF900-\uFA2D]
+    | [\uFB00-\uFB06]
+    | [\uFB13-\uFB17]
+    | [\uFB1D]
+    | [\uFB1F-\uFB28]
+    | [\uFB2A-\uFB36]
+    | [\uFB38-\uFB3C]
+    | [\uFB3E]
+    | [\uFB40-\uFB41]
+    | [\uFB43-\uFB44]
+    | [\uFB46-\uFBB1]
+    | [\uFBD3-\uFD3D]
+    | [\uFD50-\uFD8F]
+    | [\uFD92-\uFDC7]
+    | [\uFDF0-\uFDFB]
+    | [\uFE70-\uFE72]
+    | [\uFE74]
+    | [\uFE76-\uFEFC]
+    | [\uFF21-\uFF3A]
+    | [\uFF41-\uFF5A]
+    | [\uFF66-\uFFBE]
+    | [\uFFC2-\uFFC7]
+    | [\uFFCA-\uFFCF]
+    | [\uFFD2-\uFFD7]
+    | [\uFFDA-\uFFDC]
+    */
+    ;
+
+
+mode NLSEMI;
+
+
+// Treat whitespace as normal
+WS_NLSEMI                     : [ \t]+             -> channel(HIDDEN);
+// Ignore any comments that only span one line
+COMMENT_NLSEMI                : '/*' ~[\r\n]*? '*/'      -> channel(HIDDEN);
+LINE_COMMENT_NLSEMI : '//' ~[\r\n]*      -> channel(HIDDEN);
+// Emit an EOS token for any newlines, semicolon, multiline comments or the EOF and 
+//return to normal lexing
+EOS:              ([\r\n]+ | ';' | '/*' .*? '*/' | EOF)            -> mode(DEFAULT_MODE);
+// Did not find an EOS, so go back to normal lexing
+OTHER: -> mode(DEFAULT_MODE), channel(HIDDEN);
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoLexer.java b/ide/go.lang/src/org/antlr/parser/golang/GoLexer.java
new file mode 100644
index 0000000..080b6b8
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoLexer.java
@@ -0,0 +1,899 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
+public class GoLexer extends Lexer {
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		BREAK=1, DEFAULT=2, FUNC=3, INTERFACE=4, SELECT=5, CASE=6, DEFER=7, GO=8, 
+		MAP=9, STRUCT=10, CHAN=11, ELSE=12, GOTO=13, PACKAGE=14, SWITCH=15, CONST=16, 
+		FALLTHROUGH=17, IF=18, RANGE=19, TYPE=20, CONTINUE=21, FOR=22, IMPORT=23, 
+		RETURN=24, VAR=25, NIL_LIT=26, IDENTIFIER=27, L_PAREN=28, R_PAREN=29, 
+		L_CURLY=30, R_CURLY=31, L_BRACKET=32, R_BRACKET=33, ASSIGN=34, COMMA=35, 
+		SEMI=36, COLON=37, DOT=38, PLUS_PLUS=39, MINUS_MINUS=40, DECLARE_ASSIGN=41, 
+		ELLIPSIS=42, LOGICAL_OR=43, LOGICAL_AND=44, EQUALS=45, NOT_EQUALS=46, 
+		LESS=47, LESS_OR_EQUALS=48, GREATER=49, GREATER_OR_EQUALS=50, OR=51, DIV=52, 
+		MOD=53, LSHIFT=54, RSHIFT=55, BIT_CLEAR=56, EXCLAMATION=57, PLUS=58, MINUS=59, 
+		CARET=60, STAR=61, AMPERSAND=62, RECEIVE=63, DECIMAL_LIT=64, BINARY_LIT=65, 
+		OCTAL_LIT=66, HEX_LIT=67, FLOAT_LIT=68, DECIMAL_FLOAT_LIT=69, HEX_FLOAT_LIT=70, 
+		IMAGINARY_LIT=71, RUNE_LIT=72, BYTE_VALUE=73, OCTAL_BYTE_VALUE=74, HEX_BYTE_VALUE=75, 
+		LITTLE_U_VALUE=76, BIG_U_VALUE=77, RAW_STRING_LIT=78, INTERPRETED_STRING_LIT=79, 
+		WS=80, COMMENT=81, TERMINATOR=82, LINE_COMMENT=83, WS_NLSEMI=84, COMMENT_NLSEMI=85, 
+		LINE_COMMENT_NLSEMI=86, EOS=87, OTHER=88;
+	public static final int
+		NLSEMI=1;
+	public static String[] channelNames = {
+		"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+	};
+
+	public static String[] modeNames = {
+		"DEFAULT_MODE", "NLSEMI"
+	};
+
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER", "GO", 
+			"MAP", "STRUCT", "CHAN", "ELSE", "GOTO", "PACKAGE", "SWITCH", "CONST", 
+			"FALLTHROUGH", "IF", "RANGE", "TYPE", "CONTINUE", "FOR", "IMPORT", "RETURN", 
+			"VAR", "NIL_LIT", "IDENTIFIER", "L_PAREN", "R_PAREN", "L_CURLY", "R_CURLY", 
+			"L_BRACKET", "R_BRACKET", "ASSIGN", "COMMA", "SEMI", "COLON", "DOT", 
+			"PLUS_PLUS", "MINUS_MINUS", "DECLARE_ASSIGN", "ELLIPSIS", "LOGICAL_OR", 
+			"LOGICAL_AND", "EQUALS", "NOT_EQUALS", "LESS", "LESS_OR_EQUALS", "GREATER", 
+			"GREATER_OR_EQUALS", "OR", "DIV", "MOD", "LSHIFT", "RSHIFT", "BIT_CLEAR", 
+			"EXCLAMATION", "PLUS", "MINUS", "CARET", "STAR", "AMPERSAND", "RECEIVE", 
+			"DECIMAL_LIT", "BINARY_LIT", "OCTAL_LIT", "HEX_LIT", "FLOAT_LIT", "DECIMAL_FLOAT_LIT", 
+			"HEX_FLOAT_LIT", "HEX_MANTISSA", "HEX_EXPONENT", "IMAGINARY_LIT", "RUNE", 
+			"RUNE_LIT", "BYTE_VALUE", "OCTAL_BYTE_VALUE", "HEX_BYTE_VALUE", "LITTLE_U_VALUE", 
+			"BIG_U_VALUE", "RAW_STRING_LIT", "INTERPRETED_STRING_LIT", "WS", "COMMENT", 
+			"TERMINATOR", "LINE_COMMENT", "UNICODE_VALUE", "ESCAPED_VALUE", "DECIMALS", 
+			"OCTAL_DIGIT", "HEX_DIGIT", "BIN_DIGIT", "EXPONENT", "LETTER", "UNICODE_DIGIT", 
+			"UNICODE_LETTER", "WS_NLSEMI", "COMMENT_NLSEMI", "LINE_COMMENT_NLSEMI", 
+			"EOS", "OTHER"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
+
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "'break'", "'default'", "'func'", "'interface'", "'select'", "'case'", 
+			"'defer'", "'go'", "'map'", "'struct'", "'chan'", "'else'", "'goto'", 
+			"'package'", "'switch'", "'const'", "'fallthrough'", "'if'", "'range'", 
+			"'type'", "'continue'", "'for'", "'import'", "'return'", "'var'", "'nil'", 
+			null, "'('", "')'", "'{'", "'}'", "'['", "']'", "'='", "','", "';'", 
+			"':'", "'.'", "'++'", "'--'", "':='", "'...'", "'||'", "'&&'", "'=='", 
+			"'!='", "'<'", "'<='", "'>'", "'>='", "'|'", "'/'", "'%'", "'<<'", "'>>'", 
+			"'&^'", "'!'", "'+'", "'-'", "'^'", "'*'", "'&'", "'<-'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, "BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER", 
+			"GO", "MAP", "STRUCT", "CHAN", "ELSE", "GOTO", "PACKAGE", "SWITCH", "CONST", 
+			"FALLTHROUGH", "IF", "RANGE", "TYPE", "CONTINUE", "FOR", "IMPORT", "RETURN", 
+			"VAR", "NIL_LIT", "IDENTIFIER", "L_PAREN", "R_PAREN", "L_CURLY", "R_CURLY", 
+			"L_BRACKET", "R_BRACKET", "ASSIGN", "COMMA", "SEMI", "COLON", "DOT", 
+			"PLUS_PLUS", "MINUS_MINUS", "DECLARE_ASSIGN", "ELLIPSIS", "LOGICAL_OR", 
+			"LOGICAL_AND", "EQUALS", "NOT_EQUALS", "LESS", "LESS_OR_EQUALS", "GREATER", 
+			"GREATER_OR_EQUALS", "OR", "DIV", "MOD", "LSHIFT", "RSHIFT", "BIT_CLEAR", 
+			"EXCLAMATION", "PLUS", "MINUS", "CARET", "STAR", "AMPERSAND", "RECEIVE", 
+			"DECIMAL_LIT", "BINARY_LIT", "OCTAL_LIT", "HEX_LIT", "FLOAT_LIT", "DECIMAL_FLOAT_LIT", 
+			"HEX_FLOAT_LIT", "IMAGINARY_LIT", "RUNE_LIT", "BYTE_VALUE", "OCTAL_BYTE_VALUE", 
+			"HEX_BYTE_VALUE", "LITTLE_U_VALUE", "BIG_U_VALUE", "RAW_STRING_LIT", 
+			"INTERPRETED_STRING_LIT", "WS", "COMMENT", "TERMINATOR", "LINE_COMMENT", 
+			"WS_NLSEMI", "COMMENT_NLSEMI", "LINE_COMMENT_NLSEMI", "EOS", "OTHER"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+
+	public GoLexer(CharStream input) {
+		super(input);
+		_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	@Override
+	public String getGrammarFileName() { return "GoLexer.g4"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public String[] getChannelNames() { return channelNames; }
+
+	@Override
+	public String[] getModeNames() { return modeNames; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public static final String _serializedATN =
+		"\u0004\u0000X\u0347\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000\u0007"+
+		"\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007"+
+		"\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007"+
+		"\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n"+
+		"\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002"+
+		"\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002"+
+		"\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002"+
+		"\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002"+
+		"\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002"+
+		"\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002"+
+		"\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002"+
+		" \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002"+
+		"%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002"+
+		"*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002"+
+		"/\u0007/\u00020\u00070\u00021\u00071\u00022\u00072\u00023\u00073\u0002"+
+		"4\u00074\u00025\u00075\u00026\u00076\u00027\u00077\u00028\u00078\u0002"+
+		"9\u00079\u0002:\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002"+
+		">\u0007>\u0002?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002"+
+		"C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002"+
+		"H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002"+
+		"M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002"+
+		"R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002"+
+		"W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002"+
+		"\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002"+
+		"a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002d\u0007d\u0001\u0000\u0001\u0000"+
+		"\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
+		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
+		"\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
+		"\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
+		"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004"+
+		"\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+
+		"\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006"+
+		"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+
+		"\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001"+
+		"\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001"+
+		"\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
+		"\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+
+		"\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e"+
+		"\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f"+
+		"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+
+		"\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010"+
+		"\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010"+
+		"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+
+		"\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013"+
+		"\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+
+		"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+
+		"\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016"+
+		"\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+
+		"\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017"+
+		"\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+
+		"\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+
+		"\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u0178\b\u001a"+
+		"\n\u001a\f\u001a\u017b\t\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+
+		"\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+
+		"\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001"+
+		"\u001f\u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001"+
+		"#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+
+		"&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001)"+
+		"\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+
+		",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001/\u0001/\u0001"+
+		"/\u00010\u00010\u00011\u00011\u00011\u00012\u00012\u00013\u00013\u0001"+
+		"4\u00014\u00015\u00015\u00015\u00016\u00016\u00016\u00017\u00017\u0001"+
+		"7\u00018\u00018\u00019\u00019\u0001:\u0001:\u0001;\u0001;\u0001<\u0001"+
+		"<\u0001=\u0001=\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0003?\u01e3"+
+		"\b?\u0001?\u0005?\u01e6\b?\n?\f?\u01e9\t?\u0003?\u01eb\b?\u0001?\u0001"+
+		"?\u0001@\u0001@\u0001@\u0003@\u01f2\b@\u0001@\u0004@\u01f5\b@\u000b@\f"+
+		"@\u01f6\u0001@\u0001@\u0001A\u0001A\u0003A\u01fd\bA\u0001A\u0003A\u0200"+
+		"\bA\u0001A\u0004A\u0203\bA\u000bA\fA\u0204\u0001A\u0001A\u0001B\u0001"+
+		"B\u0001B\u0003B\u020c\bB\u0001B\u0004B\u020f\bB\u000bB\fB\u0210\u0001"+
+		"B\u0001B\u0001C\u0001C\u0003C\u0217\bC\u0001C\u0001C\u0001D\u0001D\u0001"+
+		"D\u0003D\u021e\bD\u0001D\u0003D\u0221\bD\u0001D\u0003D\u0224\bD\u0001"+
+		"D\u0001D\u0001D\u0003D\u0229\bD\u0003D\u022b\bD\u0001E\u0001E\u0001E\u0001"+
+		"E\u0001E\u0001F\u0003F\u0233\bF\u0001F\u0004F\u0236\bF\u000bF\fF\u0237"+
+		"\u0001F\u0001F\u0003F\u023c\bF\u0001F\u0005F\u023f\bF\nF\fF\u0242\tF\u0003"+
+		"F\u0244\bF\u0001F\u0001F\u0001F\u0003F\u0249\bF\u0001F\u0005F\u024c\b"+
+		"F\nF\fF\u024f\tF\u0003F\u0251\bF\u0001G\u0001G\u0003G\u0255\bG\u0001G"+
+		"\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0003H\u025e\bH\u0001H\u0001"+
+		"H\u0001H\u0001H\u0001I\u0001I\u0001I\u0003I\u0267\bI\u0001I\u0001I\u0001"+
+		"J\u0001J\u0001J\u0001J\u0001K\u0001K\u0003K\u0271\bK\u0001L\u0001L\u0001"+
+		"L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001"+
+		"N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+
+		"O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001P\u0001P\u0005P\u0291\bP\nP"+
+		"\fP\u0294\tP\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0005Q\u029d"+
+		"\bQ\nQ\fQ\u02a0\tQ\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0004R\u02a7\bR"+
+		"\u000bR\fR\u02a8\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0005S\u02b1"+
+		"\bS\nS\fS\u02b4\tS\u0001S\u0001S\u0001S\u0001S\u0001S\u0001T\u0004T\u02bc"+
+		"\bT\u000bT\fT\u02bd\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0005U\u02c6"+
+		"\bU\nU\fU\u02c9\tU\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0003V\u02d1"+
+		"\bV\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+
+		"W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+
+		"W\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0003W\u02ed\bW\u0001X\u0001"+
+		"X\u0003X\u02f1\bX\u0001X\u0005X\u02f4\bX\nX\fX\u02f7\tX\u0001Y\u0001Y"+
+		"\u0001Z\u0001Z\u0001[\u0001[\u0001\\\u0001\\\u0003\\\u0301\b\\\u0001\\"+
+		"\u0001\\\u0001]\u0001]\u0003]\u0307\b]\u0001^\u0001^\u0001_\u0001_\u0001"+
+		"`\u0004`\u030e\b`\u000b`\f`\u030f\u0001`\u0001`\u0001a\u0001a\u0001a\u0001"+
+		"a\u0005a\u0318\ba\na\fa\u031b\ta\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+
+		"b\u0001b\u0001b\u0001b\u0005b\u0326\bb\nb\fb\u0329\tb\u0001b\u0001b\u0001"+
+		"c\u0004c\u032e\bc\u000bc\fc\u032f\u0001c\u0001c\u0001c\u0001c\u0001c\u0005"+
+		"c\u0337\bc\nc\fc\u033a\tc\u0001c\u0001c\u0001c\u0003c\u033f\bc\u0001c"+
+		"\u0001c\u0001d\u0001d\u0001d\u0001d\u0001d\u0003\u02b2\u0319\u0338\u0000"+
+		"e\u0002\u0001\u0004\u0002\u0006\u0003\b\u0004\n\u0005\f\u0006\u000e\u0007"+
+		"\u0010\b\u0012\t\u0014\n\u0016\u000b\u0018\f\u001a\r\u001c\u000e\u001e"+
+		"\u000f \u0010\"\u0011$\u0012&\u0013(\u0014*\u0015,\u0016.\u00170\u0018"+
+		"2\u00194\u001a6\u001b8\u001c:\u001d<\u001e>\u001f@ B!D\"F#H$J%L&N\'P("+
+		"R)T*V+X,Z-\\.^/`0b1d2f3h4j5l6n7p8r9t:v;x<z=|>~?\u0080@\u0082A\u0084B\u0086"+
+		"C\u0088D\u008aE\u008cF\u008e\u0000\u0090\u0000\u0092G\u0094\u0000\u0096"+
+		"H\u0098I\u009aJ\u009cK\u009eL\u00a0M\u00a2N\u00a4O\u00a6P\u00a8Q\u00aa"+
+		"R\u00acS\u00ae\u0000\u00b0\u0000\u00b2\u0000\u00b4\u0000\u00b6\u0000\u00b8"+
+		"\u0000\u00ba\u0000\u00bc\u0000\u00be\u0000\u00c0\u0000\u00c2T\u00c4U\u00c6"+
+		"V\u00c8W\u00caX\u0002\u0000\u0001\u0013\u0001\u000019\u0001\u000009\u0002"+
+		"\u0000BBbb\u0002\u0000OOoo\u0002\u0000XXxx\u0002\u0000PPpp\u0002\u0000"+
+		"++--\u0001\u0000``\u0002\u0000\"\"\\\\\u0002\u0000\t\t  \u0002\u0000\n"+
+		"\n\r\r\u0003\u0000\n\n\r\r\'\'\t\u0000\"\"\'\'\\\\abffnnrrttvv\u0001\u0000"+
+		"07\u0003\u000009AFaf\u0001\u000001\u0002\u0000EEee>\u000009\u0660\u0669"+
+		"\u06f0\u06f9\u07c0\u07c9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef"+
+		"\u0b66\u0b6f\u0be6\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0de6\u0def"+
+		"\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29\u1040\u1049\u1090\u1099\u17e0\u17e9"+
+		"\u1810\u1819\u1946\u194f\u19d0\u19d9\u1a80\u1a89\u1a90\u1a99\u1b50\u1b59"+
+		"\u1bb0\u1bb9\u1c40\u1c49\u1c50\u1c59\u8000\ua620\u8000\ua629\u8000\ua8d0"+
+		"\u8000\ua8d9\u8000\ua900\u8000\ua909\u8000\ua9d0\u8000\ua9d9\u8000\ua9f0"+
+		"\u8000\ua9f9\u8000\uaa50\u8000\uaa59\u8000\uabf0\u8000\uabf9\u8000\uff10"+
+		"\u8000\uff19\u8001\u04a0\u8001\u04a9\u8001\u0d30\u8001\u0d39\u8001\u1066"+
+		"\u8001\u106f\u8001\u10f0\u8001\u10f9\u8001\u1136\u8001\u113f\u8001\u11d0"+
+		"\u8001\u11d9\u8001\u12f0\u8001\u12f9\u8001\u1450\u8001\u1459\u8001\u14d0"+
+		"\u8001\u14d9\u8001\u1650\u8001\u1659\u8001\u16c0\u8001\u16c9\u8001\u1730"+
+		"\u8001\u1739\u8001\u18e0\u8001\u18e9\u8001\u1950\u8001\u1959\u8001\u1c50"+
+		"\u8001\u1c59\u8001\u1d50\u8001\u1d59\u8001\u1da0\u8001\u1da9\u8001\u6a60"+
+		"\u8001\u6a69\u8001\u6ac0\u8001\u6ac9\u8001\u6b50\u8001\u6b59\u8001\ud7ce"+
+		"\u8001\ud7ff\u8001\ue140\u8001\ue149\u8001\ue2f0\u8001\ue2f9\u8001\ue950"+
+		"\u8001\ue959\u8001\ufbf0\u8001\ufbf9\u0288\u0000AZaz\u00aa\u00aa\u00b5"+
+		"\u00b5\u00ba\u00ba\u00c0\u00d6\u00d8\u00f6\u00f8\u02c1\u02c6\u02d1\u02e0"+
+		"\u02e4\u02ec\u02ec\u02ee\u02ee\u0370\u0374\u0376\u0377\u037a\u037d\u037f"+
+		"\u037f\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03f5\u03f7"+
+		"\u0481\u048a\u052f\u0531\u0556\u0559\u0559\u0560\u0588\u05d0\u05ea\u05ef"+
+		"\u05f2\u0620\u064a\u066e\u066f\u0671\u06d3\u06d5\u06d5\u06e5\u06e6\u06ee"+
+		"\u06ef\u06fa\u06fc\u06ff\u06ff\u0710\u0710\u0712\u072f\u074d\u07a5\u07b1"+
+		"\u07b1\u07ca\u07ea\u07f4\u07f5\u07fa\u07fa\u0800\u0815\u081a\u081a\u0824"+
+		"\u0824\u0828\u0828\u0840\u0858\u0860\u086a\u0870\u0887\u0889\u088e\u08a0"+
+		"\u08c9\u0904\u0939\u093d\u093d\u0950\u0950\u0958\u0961\u0971\u0980\u0985"+
+		"\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bd"+
+		"\u09bd\u09ce\u09ce\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u09fc\u09fc\u0a05"+
+		"\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38"+
+		"\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8d\u0a8f\u0a91\u0a93"+
+		"\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ad0\u0ad0\u0ae0"+
+		"\u0ae1\u0af9\u0af9\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32"+
+		"\u0b33\u0b35\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b71\u0b71\u0b83"+
+		"\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e"+
+		"\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb9\u0bd0\u0bd0\u0c05\u0c0c\u0c0e"+
+		"\u0c10\u0c12\u0c28\u0c2a\u0c39\u0c3d\u0c3d\u0c58\u0c5a\u0c5d\u0c5d\u0c60"+
+		"\u0c61\u0c80\u0c80\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5"+
+		"\u0cb9\u0cbd\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04\u0d0c\u0d0e"+
+		"\u0d10\u0d12\u0d3a\u0d3d\u0d3d\u0d4e\u0d4e\u0d54\u0d56\u0d5f\u0d61\u0d7a"+
+		"\u0d7f\u0d85\u0d96\u0d9a\u0db1\u0db3\u0dbb\u0dbd\u0dbd\u0dc0\u0dc6\u0e01"+
+		"\u0e30\u0e32\u0e33\u0e40\u0e46\u0e81\u0e82\u0e84\u0e84\u0e86\u0e8a\u0e8c"+
+		"\u0ea3\u0ea5\u0ea5\u0ea7\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0ec6"+
+		"\u0ec6\u0edc\u0edf\u0f00\u0f00\u0f40\u0f47\u0f49\u0f6c\u0f88\u0f8c\u1000"+
+		"\u102a\u103f\u103f\u1050\u1055\u105a\u105d\u1061\u1061\u1065\u1066\u106e"+
+		"\u1070\u1075\u1081\u108e\u108e\u10a0\u10c5\u10c7\u10c7\u10cd\u10cd\u10d0"+
+		"\u10fa\u10fc\u1248\u124a\u124d\u1250\u1256\u1258\u1258\u125a\u125d\u1260"+
+		"\u1288\u128a\u128d\u1290\u12b0\u12b2\u12b5\u12b8\u12be\u12c0\u12c0\u12c2"+
+		"\u12c5\u12c8\u12d6\u12d8\u1310\u1312\u1315\u1318\u135a\u1380\u138f\u13a0"+
+		"\u13f5\u13f8\u13fd\u1401\u166c\u166f\u167f\u1681\u169a\u16a0\u16ea\u16f1"+
+		"\u16f8\u1700\u1711\u171f\u1731\u1740\u1751\u1760\u176c\u176e\u1770\u1780"+
+		"\u17b3\u17d7\u17d7\u17dc\u17dc\u1820\u1878\u1880\u1884\u1887\u18a8\u18aa"+
+		"\u18aa\u18b0\u18f5\u1900\u191e\u1950\u196d\u1970\u1974\u1980\u19ab\u19b0"+
+		"\u19c9\u1a00\u1a16\u1a20\u1a54\u1aa7\u1aa7\u1b05\u1b33\u1b45\u1b4c\u1b83"+
+		"\u1ba0\u1bae\u1baf\u1bba\u1be5\u1c00\u1c23\u1c4d\u1c4f\u1c5a\u1c7d\u1c80"+
+		"\u1c88\u1c90\u1cba\u1cbd\u1cbf\u1ce9\u1cec\u1cee\u1cf3\u1cf5\u1cf6\u1cfa"+
+		"\u1cfa\u1d00\u1dbf\u1e00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50"+
+		"\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6"+
+		"\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0"+
+		"\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2071\u2071\u207f\u207f\u2090\u209c\u2102"+
+		"\u2102\u2107\u2107\u210a\u2113\u2115\u2115\u2119\u211d\u2124\u2124\u2126"+
+		"\u2126\u2128\u2128\u212a\u212d\u212f\u2139\u213c\u213f\u2145\u2149\u214e"+
+		"\u214e\u2183\u2184\u2c00\u2ce4\u2ceb\u2cee\u2cf2\u2cf3\u2d00\u2d25\u2d27"+
+		"\u2d27\u2d2d\u2d2d\u2d30\u2d67\u2d6f\u2d6f\u2d80\u2d96\u2da0\u2da6\u2da8"+
+		"\u2dae\u2db0\u2db6\u2db8\u2dbe\u2dc0\u2dc6\u2dc8\u2dce\u2dd0\u2dd6\u2dd8"+
+		"\u2dde\u2e2f\u2e2f\u3005\u3006\u3031\u3035\u303b\u303c\u3041\u3096\u309d"+
+		"\u309f\u30a1\u30fa\u30fc\u30ff\u3105\u312f\u3131\u318e\u31a0\u31bf\u31f0"+
+		"\u31ff\u3400\u4dbf\u4e00\u8000\ua48c\u8000\ua4d0\u8000\ua4fd\u8000\ua500"+
+		"\u8000\ua60c\u8000\ua610\u8000\ua61f\u8000\ua62a\u8000\ua62b\u8000\ua640"+
+		"\u8000\ua66e\u8000\ua67f\u8000\ua69d\u8000\ua6a0\u8000\ua6e5\u8000\ua717"+
+		"\u8000\ua71f\u8000\ua722\u8000\ua788\u8000\ua78b\u8000\ua7ca\u8000\ua7d0"+
+		"\u8000\ua7d1\u8000\ua7d3\u8000\ua7d3\u8000\ua7d5\u8000\ua7d9\u8000\ua7f2"+
+		"\u8000\ua801\u8000\ua803\u8000\ua805\u8000\ua807\u8000\ua80a\u8000\ua80c"+
+		"\u8000\ua822\u8000\ua840\u8000\ua873\u8000\ua882\u8000\ua8b3\u8000\ua8f2"+
+		"\u8000\ua8f7\u8000\ua8fb\u8000\ua8fb\u8000\ua8fd\u8000\ua8fe\u8000\ua90a"+
+		"\u8000\ua925\u8000\ua930\u8000\ua946\u8000\ua960\u8000\ua97c\u8000\ua984"+
+		"\u8000\ua9b2\u8000\ua9cf\u8000\ua9cf\u8000\ua9e0\u8000\ua9e4\u8000\ua9e6"+
+		"\u8000\ua9ef\u8000\ua9fa\u8000\ua9fe\u8000\uaa00\u8000\uaa28\u8000\uaa40"+
+		"\u8000\uaa42\u8000\uaa44\u8000\uaa4b\u8000\uaa60\u8000\uaa76\u8000\uaa7a"+
+		"\u8000\uaa7a\u8000\uaa7e\u8000\uaaaf\u8000\uaab1\u8000\uaab1\u8000\uaab5"+
+		"\u8000\uaab6\u8000\uaab9\u8000\uaabd\u8000\uaac0\u8000\uaac0\u8000\uaac2"+
+		"\u8000\uaac2\u8000\uaadb\u8000\uaadd\u8000\uaae0\u8000\uaaea\u8000\uaaf2"+
+		"\u8000\uaaf4\u8000\uab01\u8000\uab06\u8000\uab09\u8000\uab0e\u8000\uab11"+
+		"\u8000\uab16\u8000\uab20\u8000\uab26\u8000\uab28\u8000\uab2e\u8000\uab30"+
+		"\u8000\uab5a\u8000\uab5c\u8000\uab69\u8000\uab70\u8000\uabe2\u8000\uac00"+
+		"\u8000\ud7a3\u8000\ud7b0\u8000\ud7c6\u8000\ud7cb\u8000\ud7fb\u8000\uf900"+
+		"\u8000\ufa6d\u8000\ufa70\u8000\ufad9\u8000\ufb00\u8000\ufb06\u8000\ufb13"+
+		"\u8000\ufb17\u8000\ufb1d\u8000\ufb1d\u8000\ufb1f\u8000\ufb28\u8000\ufb2a"+
+		"\u8000\ufb36\u8000\ufb38\u8000\ufb3c\u8000\ufb3e\u8000\ufb3e\u8000\ufb40"+
+		"\u8000\ufb41\u8000\ufb43\u8000\ufb44\u8000\ufb46\u8000\ufbb1\u8000\ufbd3"+
+		"\u8000\ufd3d\u8000\ufd50\u8000\ufd8f\u8000\ufd92\u8000\ufdc7\u8000\ufdf0"+
+		"\u8000\ufdfb\u8000\ufe70\u8000\ufe74\u8000\ufe76\u8000\ufefc\u8000\uff21"+
+		"\u8000\uff3a\u8000\uff41\u8000\uff5a\u8000\uff66\u8000\uffbe\u8000\uffc2"+
+		"\u8000\uffc7\u8000\uffca\u8000\uffcf\u8000\uffd2\u8000\uffd7\u8000\uffda"+
+		"\u8000\uffdc\u8001\u0000\u8001\u000b\u8001\r\u8001&\u8001(\u8001:\u8001"+
+		"<\u8001=\u8001?\u8001M\u8001P\u8001]\u8001\u0080\u8001\u00fa\u8001\u0280"+
+		"\u8001\u029c\u8001\u02a0\u8001\u02d0\u8001\u0300\u8001\u031f\u8001\u032d"+
+		"\u8001\u0340\u8001\u0342\u8001\u0349\u8001\u0350\u8001\u0375\u8001\u0380"+
+		"\u8001\u039d\u8001\u03a0\u8001\u03c3\u8001\u03c8\u8001\u03cf\u8001\u0400"+
+		"\u8001\u049d\u8001\u04b0\u8001\u04d3\u8001\u04d8\u8001\u04fb\u8001\u0500"+
+		"\u8001\u0527\u8001\u0530\u8001\u0563\u8001\u0570\u8001\u057a\u8001\u057c"+
+		"\u8001\u058a\u8001\u058c\u8001\u0592\u8001\u0594\u8001\u0595\u8001\u0597"+
+		"\u8001\u05a1\u8001\u05a3\u8001\u05b1\u8001\u05b3\u8001\u05b9\u8001\u05bb"+
+		"\u8001\u05bc\u8001\u0600\u8001\u0736\u8001\u0740\u8001\u0755\u8001\u0760"+
+		"\u8001\u0767\u8001\u0780\u8001\u0785\u8001\u0787\u8001\u07b0\u8001\u07b2"+
+		"\u8001\u07ba\u8001\u0800\u8001\u0805\u8001\u0808\u8001\u0808\u8001\u080a"+
+		"\u8001\u0835\u8001\u0837\u8001\u0838\u8001\u083c\u8001\u083c\u8001\u083f"+
+		"\u8001\u0855\u8001\u0860\u8001\u0876\u8001\u0880\u8001\u089e\u8001\u08e0"+
+		"\u8001\u08f2\u8001\u08f4\u8001\u08f5\u8001\u0900\u8001\u0915\u8001\u0920"+
+		"\u8001\u0939\u8001\u0980\u8001\u09b7\u8001\u09be\u8001\u09bf\u8001\u0a00"+
+		"\u8001\u0a00\u8001\u0a10\u8001\u0a13\u8001\u0a15\u8001\u0a17\u8001\u0a19"+
+		"\u8001\u0a35\u8001\u0a60\u8001\u0a7c\u8001\u0a80\u8001\u0a9c\u8001\u0ac0"+
+		"\u8001\u0ac7\u8001\u0ac9\u8001\u0ae4\u8001\u0b00\u8001\u0b35\u8001\u0b40"+
+		"\u8001\u0b55\u8001\u0b60\u8001\u0b72\u8001\u0b80\u8001\u0b91\u8001\u0c00"+
+		"\u8001\u0c48\u8001\u0c80\u8001\u0cb2\u8001\u0cc0\u8001\u0cf2\u8001\u0d00"+
+		"\u8001\u0d23\u8001\u0e80\u8001\u0ea9\u8001\u0eb0\u8001\u0eb1\u8001\u0f00"+
+		"\u8001\u0f1c\u8001\u0f27\u8001\u0f27\u8001\u0f30\u8001\u0f45\u8001\u0f70"+
+		"\u8001\u0f81\u8001\u0fb0\u8001\u0fc4\u8001\u0fe0\u8001\u0ff6\u8001\u1003"+
+		"\u8001\u1037\u8001\u1071\u8001\u1072\u8001\u1075\u8001\u1075\u8001\u1083"+
+		"\u8001\u10af\u8001\u10d0\u8001\u10e8\u8001\u1103\u8001\u1126\u8001\u1144"+
+		"\u8001\u1144\u8001\u1147\u8001\u1147\u8001\u1150\u8001\u1172\u8001\u1176"+
+		"\u8001\u1176\u8001\u1183\u8001\u11b2\u8001\u11c1\u8001\u11c4\u8001\u11da"+
+		"\u8001\u11da\u8001\u11dc\u8001\u11dc\u8001\u1200\u8001\u1211\u8001\u1213"+
+		"\u8001\u122b\u8001\u1280\u8001\u1286\u8001\u1288\u8001\u1288\u8001\u128a"+
+		"\u8001\u128d\u8001\u128f\u8001\u129d\u8001\u129f\u8001\u12a8\u8001\u12b0"+
+		"\u8001\u12de\u8001\u1305\u8001\u130c\u8001\u130f\u8001\u1310\u8001\u1313"+
+		"\u8001\u1328\u8001\u132a\u8001\u1330\u8001\u1332\u8001\u1333\u8001\u1335"+
+		"\u8001\u1339\u8001\u133d\u8001\u133d\u8001\u1350\u8001\u1350\u8001\u135d"+
+		"\u8001\u1361\u8001\u1400\u8001\u1434\u8001\u1447\u8001\u144a\u8001\u145f"+
+		"\u8001\u1461\u8001\u1480\u8001\u14af\u8001\u14c4\u8001\u14c5\u8001\u14c7"+
+		"\u8001\u14c7\u8001\u1580\u8001\u15ae\u8001\u15d8\u8001\u15db\u8001\u1600"+
+		"\u8001\u162f\u8001\u1644\u8001\u1644\u8001\u1680\u8001\u16aa\u8001\u16b8"+
+		"\u8001\u16b8\u8001\u1700\u8001\u171a\u8001\u1740\u8001\u1746\u8001\u1800"+
+		"\u8001\u182b\u8001\u18a0\u8001\u18df\u8001\u18ff\u8001\u1906\u8001\u1909"+
+		"\u8001\u1909\u8001\u190c\u8001\u1913\u8001\u1915\u8001\u1916\u8001\u1918"+
+		"\u8001\u192f\u8001\u193f\u8001\u193f\u8001\u1941\u8001\u1941\u8001\u19a0"+
+		"\u8001\u19a7\u8001\u19aa\u8001\u19d0\u8001\u19e1\u8001\u19e1\u8001\u19e3"+
+		"\u8001\u19e3\u8001\u1a00\u8001\u1a00\u8001\u1a0b\u8001\u1a32\u8001\u1a3a"+
+		"\u8001\u1a3a\u8001\u1a50\u8001\u1a50\u8001\u1a5c\u8001\u1a89\u8001\u1a9d"+
+		"\u8001\u1a9d\u8001\u1ab0\u8001\u1af8\u8001\u1c00\u8001\u1c08\u8001\u1c0a"+
+		"\u8001\u1c2e\u8001\u1c40\u8001\u1c40\u8001\u1c72\u8001\u1c8f\u8001\u1d00"+
+		"\u8001\u1d06\u8001\u1d08\u8001\u1d09\u8001\u1d0b\u8001\u1d30\u8001\u1d46"+
+		"\u8001\u1d46\u8001\u1d60\u8001\u1d65\u8001\u1d67\u8001\u1d68\u8001\u1d6a"+
+		"\u8001\u1d89\u8001\u1d98\u8001\u1d98\u8001\u1ee0\u8001\u1ef2\u8001\u1fb0"+
+		"\u8001\u1fb0\u8001\u2000\u8001\u2399\u8001\u2480\u8001\u2543\u8001\u2f90"+
+		"\u8001\u2ff0\u8001\u3000\u8001\u342e\u8001\u4400\u8001\u4646\u8001\u6800"+
+		"\u8001\u6a38\u8001\u6a40\u8001\u6a5e\u8001\u6a70\u8001\u6abe\u8001\u6ad0"+
+		"\u8001\u6aed\u8001\u6b00\u8001\u6b2f\u8001\u6b40\u8001\u6b43\u8001\u6b63"+
+		"\u8001\u6b77\u8001\u6b7d\u8001\u6b8f\u8001\u6e40\u8001\u6e7f\u8001\u6f00"+
+		"\u8001\u6f4a\u8001\u6f50\u8001\u6f50\u8001\u6f93\u8001\u6f9f\u8001\u6fe0"+
+		"\u8001\u6fe1\u8001\u6fe3\u8001\u6fe3\u8001\u7000\u8001\u87f7\u8001\u8800"+
+		"\u8001\u8cd5\u8001\u8d00\u8001\u8d08\u8001\uaff0\u8001\uaff3\u8001\uaff5"+
+		"\u8001\uaffb\u8001\uaffd\u8001\uaffe\u8001\ub000\u8001\ub122\u8001\ub150"+
+		"\u8001\ub152\u8001\ub164\u8001\ub167\u8001\ub170\u8001\ub2fb\u8001\ubc00"+
+		"\u8001\ubc6a\u8001\ubc70\u8001\ubc7c\u8001\ubc80\u8001\ubc88\u8001\ubc90"+
+		"\u8001\ubc99\u8001\ud400\u8001\ud454\u8001\ud456\u8001\ud49c\u8001\ud49e"+
+		"\u8001\ud49f\u8001\ud4a2\u8001\ud4a2\u8001\ud4a5\u8001\ud4a6\u8001\ud4a9"+
+		"\u8001\ud4ac\u8001\ud4ae\u8001\ud4b9\u8001\ud4bb\u8001\ud4bb\u8001\ud4bd"+
+		"\u8001\ud4c3\u8001\ud4c5\u8001\ud505\u8001\ud507\u8001\ud50a\u8001\ud50d"+
+		"\u8001\ud514\u8001\ud516\u8001\ud51c\u8001\ud51e\u8001\ud539\u8001\ud53b"+
+		"\u8001\ud53e\u8001\ud540\u8001\ud544\u8001\ud546\u8001\ud546\u8001\ud54a"+
+		"\u8001\ud550\u8001\ud552\u8001\ud6a5\u8001\ud6a8\u8001\ud6c0\u8001\ud6c2"+
+		"\u8001\ud6da\u8001\ud6dc\u8001\ud6fa\u8001\ud6fc\u8001\ud714\u8001\ud716"+
+		"\u8001\ud734\u8001\ud736\u8001\ud74e\u8001\ud750\u8001\ud76e\u8001\ud770"+
+		"\u8001\ud788\u8001\ud78a\u8001\ud7a8\u8001\ud7aa\u8001\ud7c2\u8001\ud7c4"+
+		"\u8001\ud7cb\u8001\udf00\u8001\udf1e\u8001\ue100\u8001\ue12c\u8001\ue137"+
+		"\u8001\ue13d\u8001\ue14e\u8001\ue14e\u8001\ue290\u8001\ue2ad\u8001\ue2c0"+
+		"\u8001\ue2eb\u8001\ue7e0\u8001\ue7e6\u8001\ue7e8\u8001\ue7eb\u8001\ue7ed"+
+		"\u8001\ue7ee\u8001\ue7f0\u8001\ue7fe\u8001\ue800\u8001\ue8c4\u8001\ue900"+
+		"\u8001\ue943\u8001\ue94b\u8001\ue94b\u8001\uee00\u8001\uee03\u8001\uee05"+
+		"\u8001\uee1f\u8001\uee21\u8001\uee22\u8001\uee24\u8001\uee24\u8001\uee27"+
+		"\u8001\uee27\u8001\uee29\u8001\uee32\u8001\uee34\u8001\uee37\u8001\uee39"+
+		"\u8001\uee39\u8001\uee3b\u8001\uee3b\u8001\uee42\u8001\uee42\u8001\uee47"+
+		"\u8001\uee47\u8001\uee49\u8001\uee49\u8001\uee4b\u8001\uee4b\u8001\uee4d"+
+		"\u8001\uee4f\u8001\uee51\u8001\uee52\u8001\uee54\u8001\uee54\u8001\uee57"+
+		"\u8001\uee57\u8001\uee59\u8001\uee59\u8001\uee5b\u8001\uee5b\u8001\uee5d"+
+		"\u8001\uee5d\u8001\uee5f\u8001\uee5f\u8001\uee61\u8001\uee62\u8001\uee64"+
+		"\u8001\uee64\u8001\uee67\u8001\uee6a\u8001\uee6c\u8001\uee72\u8001\uee74"+
+		"\u8001\uee77\u8001\uee79\u8001\uee7c\u8001\uee7e\u8001\uee7e\u8001\uee80"+
+		"\u8001\uee89\u8001\uee8b\u8001\uee9b\u8001\ueea1\u8001\ueea3\u8001\ueea5"+
+		"\u8001\ueea9\u8001\ueeab\u8001\ueebb\u8002\u0000\u8002\ua6df\u8002\ua700"+
+		"\u8002\ub738\u8002\ub740\u8002\ub81d\u8002\ub820\u8002\ucea1\u8002\uceb0"+
+		"\u8002\uebe0\u8002\uf800\u8002\ufa1d\u8003\u0000\u8003\u134a\u0373\u0000"+
+		"\u0002\u0001\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000\u0000"+
+		"\u0006\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000\u0000\u0000\n"+
+		"\u0001\u0000\u0000\u0000\u0000\f\u0001\u0000\u0000\u0000\u0000\u000e\u0001"+
+		"\u0000\u0000\u0000\u0000\u0010\u0001\u0000\u0000\u0000\u0000\u0012\u0001"+
+		"\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000\u0000\u0016\u0001"+
+		"\u0000\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000\u0000\u001a\u0001"+
+		"\u0000\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000\u0000\u001e\u0001"+
+		"\u0000\u0000\u0000\u0000 \u0001\u0000\u0000\u0000\u0000\"\u0001\u0000"+
+		"\u0000\u0000\u0000$\u0001\u0000\u0000\u0000\u0000&\u0001\u0000\u0000\u0000"+
+		"\u0000(\u0001\u0000\u0000\u0000\u0000*\u0001\u0000\u0000\u0000\u0000,"+
+		"\u0001\u0000\u0000\u0000\u0000.\u0001\u0000\u0000\u0000\u00000\u0001\u0000"+
+		"\u0000\u0000\u00002\u0001\u0000\u0000\u0000\u00004\u0001\u0000\u0000\u0000"+
+		"\u00006\u0001\u0000\u0000\u0000\u00008\u0001\u0000\u0000\u0000\u0000:"+
+		"\u0001\u0000\u0000\u0000\u0000<\u0001\u0000\u0000\u0000\u0000>\u0001\u0000"+
+		"\u0000\u0000\u0000@\u0001\u0000\u0000\u0000\u0000B\u0001\u0000\u0000\u0000"+
+		"\u0000D\u0001\u0000\u0000\u0000\u0000F\u0001\u0000\u0000\u0000\u0000H"+
+		"\u0001\u0000\u0000\u0000\u0000J\u0001\u0000\u0000\u0000\u0000L\u0001\u0000"+
+		"\u0000\u0000\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000\u0000"+
+		"\u0000R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000V"+
+		"\u0001\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000"+
+		"\u0000\u0000\u0000\\\u0001\u0000\u0000\u0000\u0000^\u0001\u0000\u0000"+
+		"\u0000\u0000`\u0001\u0000\u0000\u0000\u0000b\u0001\u0000\u0000\u0000\u0000"+
+		"d\u0001\u0000\u0000\u0000\u0000f\u0001\u0000\u0000\u0000\u0000h\u0001"+
+		"\u0000\u0000\u0000\u0000j\u0001\u0000\u0000\u0000\u0000l\u0001\u0000\u0000"+
+		"\u0000\u0000n\u0001\u0000\u0000\u0000\u0000p\u0001\u0000\u0000\u0000\u0000"+
+		"r\u0001\u0000\u0000\u0000\u0000t\u0001\u0000\u0000\u0000\u0000v\u0001"+
+		"\u0000\u0000\u0000\u0000x\u0001\u0000\u0000\u0000\u0000z\u0001\u0000\u0000"+
+		"\u0000\u0000|\u0001\u0000\u0000\u0000\u0000~\u0001\u0000\u0000\u0000\u0000"+
+		"\u0080\u0001\u0000\u0000\u0000\u0000\u0082\u0001\u0000\u0000\u0000\u0000"+
+		"\u0084\u0001\u0000\u0000\u0000\u0000\u0086\u0001\u0000\u0000\u0000\u0000"+
+		"\u0088\u0001\u0000\u0000\u0000\u0000\u008a\u0001\u0000\u0000\u0000\u0000"+
+		"\u008c\u0001\u0000\u0000\u0000\u0000\u0092\u0001\u0000\u0000\u0000\u0000"+
+		"\u0096\u0001\u0000\u0000\u0000\u0000\u0098\u0001\u0000\u0000\u0000\u0000"+
+		"\u009a\u0001\u0000\u0000\u0000\u0000\u009c\u0001\u0000\u0000\u0000\u0000"+
+		"\u009e\u0001\u0000\u0000\u0000\u0000\u00a0\u0001\u0000\u0000\u0000\u0000"+
+		"\u00a2\u0001\u0000\u0000\u0000\u0000\u00a4\u0001\u0000\u0000\u0000\u0000"+
+		"\u00a6\u0001\u0000\u0000\u0000\u0000\u00a8\u0001\u0000\u0000\u0000\u0000"+
+		"\u00aa\u0001\u0000\u0000\u0000\u0000\u00ac\u0001\u0000\u0000\u0000\u0001"+
+		"\u00c2\u0001\u0000\u0000\u0000\u0001\u00c4\u0001\u0000\u0000\u0000\u0001"+
+		"\u00c6\u0001\u0000\u0000\u0000\u0001\u00c8\u0001\u0000\u0000\u0000\u0001"+
+		"\u00ca\u0001\u0000\u0000\u0000\u0002\u00cc\u0001\u0000\u0000\u0000\u0004"+
+		"\u00d4\u0001\u0000\u0000\u0000\u0006\u00dc\u0001\u0000\u0000\u0000\b\u00e1"+
+		"\u0001\u0000\u0000\u0000\n\u00eb\u0001\u0000\u0000\u0000\f\u00f2\u0001"+
+		"\u0000\u0000\u0000\u000e\u00f7\u0001\u0000\u0000\u0000\u0010\u00fd\u0001"+
+		"\u0000\u0000\u0000\u0012\u0100\u0001\u0000\u0000\u0000\u0014\u0104\u0001"+
+		"\u0000\u0000\u0000\u0016\u010b\u0001\u0000\u0000\u0000\u0018\u0110\u0001"+
+		"\u0000\u0000\u0000\u001a\u0115\u0001\u0000\u0000\u0000\u001c\u011a\u0001"+
+		"\u0000\u0000\u0000\u001e\u0122\u0001\u0000\u0000\u0000 \u0129\u0001\u0000"+
+		"\u0000\u0000\"\u012f\u0001\u0000\u0000\u0000$\u013d\u0001\u0000\u0000"+
+		"\u0000&\u0140\u0001\u0000\u0000\u0000(\u0146\u0001\u0000\u0000\u0000*"+
+		"\u014b\u0001\u0000\u0000\u0000,\u0156\u0001\u0000\u0000\u0000.\u015a\u0001"+
+		"\u0000\u0000\u00000\u0161\u0001\u0000\u0000\u00002\u016a\u0001\u0000\u0000"+
+		"\u00004\u016e\u0001\u0000\u0000\u00006\u0174\u0001\u0000\u0000\u00008"+
+		"\u017e\u0001\u0000\u0000\u0000:\u0180\u0001\u0000\u0000\u0000<\u0184\u0001"+
+		"\u0000\u0000\u0000>\u0186\u0001\u0000\u0000\u0000@\u018a\u0001\u0000\u0000"+
+		"\u0000B\u018c\u0001\u0000\u0000\u0000D\u0190\u0001\u0000\u0000\u0000F"+
+		"\u0192\u0001\u0000\u0000\u0000H\u0194\u0001\u0000\u0000\u0000J\u0196\u0001"+
+		"\u0000\u0000\u0000L\u0198\u0001\u0000\u0000\u0000N\u019a\u0001\u0000\u0000"+
+		"\u0000P\u019f\u0001\u0000\u0000\u0000R\u01a4\u0001\u0000\u0000\u0000T"+
+		"\u01a7\u0001\u0000\u0000\u0000V\u01ab\u0001\u0000\u0000\u0000X\u01ae\u0001"+
+		"\u0000\u0000\u0000Z\u01b1\u0001\u0000\u0000\u0000\\\u01b4\u0001\u0000"+
+		"\u0000\u0000^\u01b7\u0001\u0000\u0000\u0000`\u01b9\u0001\u0000\u0000\u0000"+
+		"b\u01bc\u0001\u0000\u0000\u0000d\u01be\u0001\u0000\u0000\u0000f\u01c1"+
+		"\u0001\u0000\u0000\u0000h\u01c3\u0001\u0000\u0000\u0000j\u01c5\u0001\u0000"+
+		"\u0000\u0000l\u01c7\u0001\u0000\u0000\u0000n\u01ca\u0001\u0000\u0000\u0000"+
+		"p\u01cd\u0001\u0000\u0000\u0000r\u01d0\u0001\u0000\u0000\u0000t\u01d2"+
+		"\u0001\u0000\u0000\u0000v\u01d4\u0001\u0000\u0000\u0000x\u01d6\u0001\u0000"+
+		"\u0000\u0000z\u01d8\u0001\u0000\u0000\u0000|\u01da\u0001\u0000\u0000\u0000"+
+		"~\u01dc\u0001\u0000\u0000\u0000\u0080\u01ea\u0001\u0000\u0000\u0000\u0082"+
+		"\u01ee\u0001\u0000\u0000\u0000\u0084\u01fa\u0001\u0000\u0000\u0000\u0086"+
+		"\u0208\u0001\u0000\u0000\u0000\u0088\u0216\u0001\u0000\u0000\u0000\u008a"+
+		"\u022a\u0001\u0000\u0000\u0000\u008c\u022c\u0001\u0000\u0000\u0000\u008e"+
+		"\u0250\u0001\u0000\u0000\u0000\u0090\u0252\u0001\u0000\u0000\u0000\u0092"+
+		"\u025d\u0001\u0000\u0000\u0000\u0094\u0263\u0001\u0000\u0000\u0000\u0096"+
+		"\u026a\u0001\u0000\u0000\u0000\u0098\u0270\u0001\u0000\u0000\u0000\u009a"+
+		"\u0272\u0001\u0000\u0000\u0000\u009c\u0277\u0001\u0000\u0000\u0000\u009e"+
+		"\u027c\u0001\u0000\u0000\u0000\u00a0\u0283\u0001\u0000\u0000\u0000\u00a2"+
+		"\u028e\u0001\u0000\u0000\u0000\u00a4\u0299\u0001\u0000\u0000\u0000\u00a6"+
+		"\u02a6\u0001\u0000\u0000\u0000\u00a8\u02ac\u0001\u0000\u0000\u0000\u00aa"+
+		"\u02bb\u0001\u0000\u0000\u0000\u00ac\u02c1\u0001\u0000\u0000\u0000\u00ae"+
+		"\u02d0\u0001\u0000\u0000\u0000\u00b0\u02d2\u0001\u0000\u0000\u0000\u00b2"+
+		"\u02ee\u0001\u0000\u0000\u0000\u00b4\u02f8\u0001\u0000\u0000\u0000\u00b6"+
+		"\u02fa\u0001\u0000\u0000\u0000\u00b8\u02fc\u0001\u0000\u0000\u0000\u00ba"+
+		"\u02fe\u0001\u0000\u0000\u0000\u00bc\u0306\u0001\u0000\u0000\u0000\u00be"+
+		"\u0308\u0001\u0000\u0000\u0000\u00c0\u030a\u0001\u0000\u0000\u0000\u00c2"+
+		"\u030d\u0001\u0000\u0000\u0000\u00c4\u0313\u0001\u0000\u0000\u0000\u00c6"+
+		"\u0321\u0001\u0000\u0000\u0000\u00c8\u033e\u0001\u0000\u0000\u0000\u00ca"+
+		"\u0342\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005b\u0000\u0000\u00cd\u00ce"+
+		"\u0005r\u0000\u0000\u00ce\u00cf\u0005e\u0000\u0000\u00cf\u00d0\u0005a"+
+		"\u0000\u0000\u00d0\u00d1\u0005k\u0000\u0000\u00d1\u00d2\u0001\u0000\u0000"+
+		"\u0000\u00d2\u00d3\u0006\u0000\u0000\u0000\u00d3\u0003\u0001\u0000\u0000"+
+		"\u0000\u00d4\u00d5\u0005d\u0000\u0000\u00d5\u00d6\u0005e\u0000\u0000\u00d6"+
+		"\u00d7\u0005f\u0000\u0000\u00d7\u00d8\u0005a\u0000\u0000\u00d8\u00d9\u0005"+
+		"u\u0000\u0000\u00d9\u00da\u0005l\u0000\u0000\u00da\u00db\u0005t\u0000"+
+		"\u0000\u00db\u0005\u0001\u0000\u0000\u0000\u00dc\u00dd\u0005f\u0000\u0000"+
+		"\u00dd\u00de\u0005u\u0000\u0000\u00de\u00df\u0005n\u0000\u0000\u00df\u00e0"+
+		"\u0005c\u0000\u0000\u00e0\u0007\u0001\u0000\u0000\u0000\u00e1\u00e2\u0005"+
+		"i\u0000\u0000\u00e2\u00e3\u0005n\u0000\u0000\u00e3\u00e4\u0005t\u0000"+
+		"\u0000\u00e4\u00e5\u0005e\u0000\u0000\u00e5\u00e6\u0005r\u0000\u0000\u00e6"+
+		"\u00e7\u0005f\u0000\u0000\u00e7\u00e8\u0005a\u0000\u0000\u00e8\u00e9\u0005"+
+		"c\u0000\u0000\u00e9\u00ea\u0005e\u0000\u0000\u00ea\t\u0001\u0000\u0000"+
+		"\u0000\u00eb\u00ec\u0005s\u0000\u0000\u00ec\u00ed\u0005e\u0000\u0000\u00ed"+
+		"\u00ee\u0005l\u0000\u0000\u00ee\u00ef\u0005e\u0000\u0000\u00ef\u00f0\u0005"+
+		"c\u0000\u0000\u00f0\u00f1\u0005t\u0000\u0000\u00f1\u000b\u0001\u0000\u0000"+
+		"\u0000\u00f2\u00f3\u0005c\u0000\u0000\u00f3\u00f4\u0005a\u0000\u0000\u00f4"+
+		"\u00f5\u0005s\u0000\u0000\u00f5\u00f6\u0005e\u0000\u0000\u00f6\r\u0001"+
+		"\u0000\u0000\u0000\u00f7\u00f8\u0005d\u0000\u0000\u00f8\u00f9\u0005e\u0000"+
+		"\u0000\u00f9\u00fa\u0005f\u0000\u0000\u00fa\u00fb\u0005e\u0000\u0000\u00fb"+
+		"\u00fc\u0005r\u0000\u0000\u00fc\u000f\u0001\u0000\u0000\u0000\u00fd\u00fe"+
+		"\u0005g\u0000\u0000\u00fe\u00ff\u0005o\u0000\u0000\u00ff\u0011\u0001\u0000"+
+		"\u0000\u0000\u0100\u0101\u0005m\u0000\u0000\u0101\u0102\u0005a\u0000\u0000"+
+		"\u0102\u0103\u0005p\u0000\u0000\u0103\u0013\u0001\u0000\u0000\u0000\u0104"+
+		"\u0105\u0005s\u0000\u0000\u0105\u0106\u0005t\u0000\u0000\u0106\u0107\u0005"+
+		"r\u0000\u0000\u0107\u0108\u0005u\u0000\u0000\u0108\u0109\u0005c\u0000"+
+		"\u0000\u0109\u010a\u0005t\u0000\u0000\u010a\u0015\u0001\u0000\u0000\u0000"+
+		"\u010b\u010c\u0005c\u0000\u0000\u010c\u010d\u0005h\u0000\u0000\u010d\u010e"+
+		"\u0005a\u0000\u0000\u010e\u010f\u0005n\u0000\u0000\u010f\u0017\u0001\u0000"+
+		"\u0000\u0000\u0110\u0111\u0005e\u0000\u0000\u0111\u0112\u0005l\u0000\u0000"+
+		"\u0112\u0113\u0005s\u0000\u0000\u0113\u0114\u0005e\u0000\u0000\u0114\u0019"+
+		"\u0001\u0000\u0000\u0000\u0115\u0116\u0005g\u0000\u0000\u0116\u0117\u0005"+
+		"o\u0000\u0000\u0117\u0118\u0005t\u0000\u0000\u0118\u0119\u0005o\u0000"+
+		"\u0000\u0119\u001b\u0001\u0000\u0000\u0000\u011a\u011b\u0005p\u0000\u0000"+
+		"\u011b\u011c\u0005a\u0000\u0000\u011c\u011d\u0005c\u0000\u0000\u011d\u011e"+
+		"\u0005k\u0000\u0000\u011e\u011f\u0005a\u0000\u0000\u011f\u0120\u0005g"+
+		"\u0000\u0000\u0120\u0121\u0005e\u0000\u0000\u0121\u001d\u0001\u0000\u0000"+
+		"\u0000\u0122\u0123\u0005s\u0000\u0000\u0123\u0124\u0005w\u0000\u0000\u0124"+
+		"\u0125\u0005i\u0000\u0000\u0125\u0126\u0005t\u0000\u0000\u0126\u0127\u0005"+
+		"c\u0000\u0000\u0127\u0128\u0005h\u0000\u0000\u0128\u001f\u0001\u0000\u0000"+
+		"\u0000\u0129\u012a\u0005c\u0000\u0000\u012a\u012b\u0005o\u0000\u0000\u012b"+
+		"\u012c\u0005n\u0000\u0000\u012c\u012d\u0005s\u0000\u0000\u012d\u012e\u0005"+
+		"t\u0000\u0000\u012e!\u0001\u0000\u0000\u0000\u012f\u0130\u0005f\u0000"+
+		"\u0000\u0130\u0131\u0005a\u0000\u0000\u0131\u0132\u0005l\u0000\u0000\u0132"+
+		"\u0133\u0005l\u0000\u0000\u0133\u0134\u0005t\u0000\u0000\u0134\u0135\u0005"+
+		"h\u0000\u0000\u0135\u0136\u0005r\u0000\u0000\u0136\u0137\u0005o\u0000"+
+		"\u0000\u0137\u0138\u0005u\u0000\u0000\u0138\u0139\u0005g\u0000\u0000\u0139"+
+		"\u013a\u0005h\u0000\u0000\u013a\u013b\u0001\u0000\u0000\u0000\u013b\u013c"+
+		"\u0006\u0010\u0000\u0000\u013c#\u0001\u0000\u0000\u0000\u013d\u013e\u0005"+
+		"i\u0000\u0000\u013e\u013f\u0005f\u0000\u0000\u013f%\u0001\u0000\u0000"+
+		"\u0000\u0140\u0141\u0005r\u0000\u0000\u0141\u0142\u0005a\u0000\u0000\u0142"+
+		"\u0143\u0005n\u0000\u0000\u0143\u0144\u0005g\u0000\u0000\u0144\u0145\u0005"+
+		"e\u0000\u0000\u0145\'\u0001\u0000\u0000\u0000\u0146\u0147\u0005t\u0000"+
+		"\u0000\u0147\u0148\u0005y\u0000\u0000\u0148\u0149\u0005p\u0000\u0000\u0149"+
+		"\u014a\u0005e\u0000\u0000\u014a)\u0001\u0000\u0000\u0000\u014b\u014c\u0005"+
+		"c\u0000\u0000\u014c\u014d\u0005o\u0000\u0000\u014d\u014e\u0005n\u0000"+
+		"\u0000\u014e\u014f\u0005t\u0000\u0000\u014f\u0150\u0005i\u0000\u0000\u0150"+
+		"\u0151\u0005n\u0000\u0000\u0151\u0152\u0005u\u0000\u0000\u0152\u0153\u0005"+
+		"e\u0000\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0155\u0006\u0014"+
+		"\u0000\u0000\u0155+\u0001\u0000\u0000\u0000\u0156\u0157\u0005f\u0000\u0000"+
+		"\u0157\u0158\u0005o\u0000\u0000\u0158\u0159\u0005r\u0000\u0000\u0159-"+
+		"\u0001\u0000\u0000\u0000\u015a\u015b\u0005i\u0000\u0000\u015b\u015c\u0005"+
+		"m\u0000\u0000\u015c\u015d\u0005p\u0000\u0000\u015d\u015e\u0005o\u0000"+
+		"\u0000\u015e\u015f\u0005r\u0000\u0000\u015f\u0160\u0005t\u0000\u0000\u0160"+
+		"/\u0001\u0000\u0000\u0000\u0161\u0162\u0005r\u0000\u0000\u0162\u0163\u0005"+
+		"e\u0000\u0000\u0163\u0164\u0005t\u0000\u0000\u0164\u0165\u0005u\u0000"+
+		"\u0000\u0165\u0166\u0005r\u0000\u0000\u0166\u0167\u0005n\u0000\u0000\u0167"+
+		"\u0168\u0001\u0000\u0000\u0000\u0168\u0169\u0006\u0017\u0000\u0000\u0169"+
+		"1\u0001\u0000\u0000\u0000\u016a\u016b\u0005v\u0000\u0000\u016b\u016c\u0005"+
+		"a\u0000\u0000\u016c\u016d\u0005r\u0000\u0000\u016d3\u0001\u0000\u0000"+
+		"\u0000\u016e\u016f\u0005n\u0000\u0000\u016f\u0170\u0005i\u0000\u0000\u0170"+
+		"\u0171\u0005l\u0000\u0000\u0171\u0172\u0001\u0000\u0000\u0000\u0172\u0173"+
+		"\u0006\u0019\u0000\u0000\u01735\u0001\u0000\u0000\u0000\u0174\u0179\u0003"+
+		"\u00bc]\u0000\u0175\u0178\u0003\u00bc]\u0000\u0176\u0178\u0003\u00be^"+
+		"\u0000\u0177\u0175\u0001\u0000\u0000\u0000\u0177\u0176\u0001\u0000\u0000"+
+		"\u0000\u0178\u017b\u0001\u0000\u0000\u0000\u0179\u0177\u0001\u0000\u0000"+
+		"\u0000\u0179\u017a\u0001\u0000\u0000\u0000\u017a\u017c\u0001\u0000\u0000"+
+		"\u0000\u017b\u0179\u0001\u0000\u0000\u0000\u017c\u017d\u0006\u001a\u0000"+
+		"\u0000\u017d7\u0001\u0000\u0000\u0000\u017e\u017f\u0005(\u0000\u0000\u017f"+
+		"9\u0001\u0000\u0000\u0000\u0180\u0181\u0005)\u0000\u0000\u0181\u0182\u0001"+
+		"\u0000\u0000\u0000\u0182\u0183\u0006\u001c\u0000\u0000\u0183;\u0001\u0000"+
+		"\u0000\u0000\u0184\u0185\u0005{\u0000\u0000\u0185=\u0001\u0000\u0000\u0000"+
+		"\u0186\u0187\u0005}\u0000\u0000\u0187\u0188\u0001\u0000\u0000\u0000\u0188"+
+		"\u0189\u0006\u001e\u0000\u0000\u0189?\u0001\u0000\u0000\u0000\u018a\u018b"+
+		"\u0005[\u0000\u0000\u018bA\u0001\u0000\u0000\u0000\u018c\u018d\u0005]"+
+		"\u0000\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u018f\u0006 \u0000"+
+		"\u0000\u018fC\u0001\u0000\u0000\u0000\u0190\u0191\u0005=\u0000\u0000\u0191"+
+		"E\u0001\u0000\u0000\u0000\u0192\u0193\u0005,\u0000\u0000\u0193G\u0001"+
+		"\u0000\u0000\u0000\u0194\u0195\u0005;\u0000\u0000\u0195I\u0001\u0000\u0000"+
+		"\u0000\u0196\u0197\u0005:\u0000\u0000\u0197K\u0001\u0000\u0000\u0000\u0198"+
+		"\u0199\u0005.\u0000\u0000\u0199M\u0001\u0000\u0000\u0000\u019a\u019b\u0005"+
+		"+\u0000\u0000\u019b\u019c\u0005+\u0000\u0000\u019c\u019d\u0001\u0000\u0000"+
+		"\u0000\u019d\u019e\u0006&\u0000\u0000\u019eO\u0001\u0000\u0000\u0000\u019f"+
+		"\u01a0\u0005-\u0000\u0000\u01a0\u01a1\u0005-\u0000\u0000\u01a1\u01a2\u0001"+
+		"\u0000\u0000\u0000\u01a2\u01a3\u0006\'\u0000\u0000\u01a3Q\u0001\u0000"+
+		"\u0000\u0000\u01a4\u01a5\u0005:\u0000\u0000\u01a5\u01a6\u0005=\u0000\u0000"+
+		"\u01a6S\u0001\u0000\u0000\u0000\u01a7\u01a8\u0005.\u0000\u0000\u01a8\u01a9"+
+		"\u0005.\u0000\u0000\u01a9\u01aa\u0005.\u0000\u0000\u01aaU\u0001\u0000"+
+		"\u0000\u0000\u01ab\u01ac\u0005|\u0000\u0000\u01ac\u01ad\u0005|\u0000\u0000"+
+		"\u01adW\u0001\u0000\u0000\u0000\u01ae\u01af\u0005&\u0000\u0000\u01af\u01b0"+
+		"\u0005&\u0000\u0000\u01b0Y\u0001\u0000\u0000\u0000\u01b1\u01b2\u0005="+
+		"\u0000\u0000\u01b2\u01b3\u0005=\u0000\u0000\u01b3[\u0001\u0000\u0000\u0000"+
+		"\u01b4\u01b5\u0005!\u0000\u0000\u01b5\u01b6\u0005=\u0000\u0000\u01b6]"+
+		"\u0001\u0000\u0000\u0000\u01b7\u01b8\u0005<\u0000\u0000\u01b8_\u0001\u0000"+
+		"\u0000\u0000\u01b9\u01ba\u0005<\u0000\u0000\u01ba\u01bb\u0005=\u0000\u0000"+
+		"\u01bba\u0001\u0000\u0000\u0000\u01bc\u01bd\u0005>\u0000\u0000\u01bdc"+
+		"\u0001\u0000\u0000\u0000\u01be\u01bf\u0005>\u0000\u0000\u01bf\u01c0\u0005"+
+		"=\u0000\u0000\u01c0e\u0001\u0000\u0000\u0000\u01c1\u01c2\u0005|\u0000"+
+		"\u0000\u01c2g\u0001\u0000\u0000\u0000\u01c3\u01c4\u0005/\u0000\u0000\u01c4"+
+		"i\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005%\u0000\u0000\u01c6k\u0001"+
+		"\u0000\u0000\u0000\u01c7\u01c8\u0005<\u0000\u0000\u01c8\u01c9\u0005<\u0000"+
+		"\u0000\u01c9m\u0001\u0000\u0000\u0000\u01ca\u01cb\u0005>\u0000\u0000\u01cb"+
+		"\u01cc\u0005>\u0000\u0000\u01cco\u0001\u0000\u0000\u0000\u01cd\u01ce\u0005"+
+		"&\u0000\u0000\u01ce\u01cf\u0005^\u0000\u0000\u01cfq\u0001\u0000\u0000"+
+		"\u0000\u01d0\u01d1\u0005!\u0000\u0000\u01d1s\u0001\u0000\u0000\u0000\u01d2"+
+		"\u01d3\u0005+\u0000\u0000\u01d3u\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+
+		"-\u0000\u0000\u01d5w\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005^\u0000"+
+		"\u0000\u01d7y\u0001\u0000\u0000\u0000\u01d8\u01d9\u0005*\u0000\u0000\u01d9"+
+		"{\u0001\u0000\u0000\u0000\u01da\u01db\u0005&\u0000\u0000\u01db}\u0001"+
+		"\u0000\u0000\u0000\u01dc\u01dd\u0005<\u0000\u0000\u01dd\u01de\u0005-\u0000"+
+		"\u0000\u01de\u007f\u0001\u0000\u0000\u0000\u01df\u01eb\u00050\u0000\u0000"+
+		"\u01e0\u01e7\u0007\u0000\u0000\u0000\u01e1\u01e3\u0005_\u0000\u0000\u01e2"+
+		"\u01e1\u0001\u0000\u0000\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3"+
+		"\u01e4\u0001\u0000\u0000\u0000\u01e4\u01e6\u0007\u0001\u0000\u0000\u01e5"+
+		"\u01e2\u0001\u0000\u0000\u0000\u01e6\u01e9\u0001\u0000\u0000\u0000\u01e7"+
+		"\u01e5\u0001\u0000\u0000\u0000\u01e7\u01e8\u0001\u0000\u0000\u0000\u01e8"+
+		"\u01eb\u0001\u0000\u0000\u0000\u01e9\u01e7\u0001\u0000\u0000\u0000\u01ea"+
+		"\u01df\u0001\u0000\u0000\u0000\u01ea\u01e0\u0001\u0000\u0000\u0000\u01eb"+
+		"\u01ec\u0001\u0000\u0000\u0000\u01ec\u01ed\u0006?\u0000\u0000\u01ed\u0081"+
+		"\u0001\u0000\u0000\u0000\u01ee\u01ef\u00050\u0000\u0000\u01ef\u01f4\u0007"+
+		"\u0002\u0000\u0000\u01f0\u01f2\u0005_\u0000\u0000\u01f1\u01f0\u0001\u0000"+
+		"\u0000\u0000\u01f1\u01f2\u0001\u0000\u0000\u0000\u01f2\u01f3\u0001\u0000"+
+		"\u0000\u0000\u01f3\u01f5\u0003\u00b8[\u0000\u01f4\u01f1\u0001\u0000\u0000"+
+		"\u0000\u01f5\u01f6\u0001\u0000\u0000\u0000\u01f6\u01f4\u0001\u0000\u0000"+
+		"\u0000\u01f6\u01f7\u0001\u0000\u0000\u0000\u01f7\u01f8\u0001\u0000\u0000"+
+		"\u0000\u01f8\u01f9\u0006@\u0000\u0000\u01f9\u0083\u0001\u0000\u0000\u0000"+
+		"\u01fa\u01fc\u00050\u0000\u0000\u01fb\u01fd\u0007\u0003\u0000\u0000\u01fc"+
+		"\u01fb\u0001\u0000\u0000\u0000\u01fc\u01fd\u0001\u0000\u0000\u0000\u01fd"+
+		"\u0202\u0001\u0000\u0000\u0000\u01fe\u0200\u0005_\u0000\u0000\u01ff\u01fe"+
+		"\u0001\u0000\u0000\u0000\u01ff\u0200\u0001\u0000\u0000\u0000\u0200\u0201"+
+		"\u0001\u0000\u0000\u0000\u0201\u0203\u0003\u00b4Y\u0000\u0202\u01ff\u0001"+
+		"\u0000\u0000\u0000\u0203\u0204\u0001\u0000\u0000\u0000\u0204\u0202\u0001"+
+		"\u0000\u0000\u0000\u0204\u0205\u0001\u0000\u0000\u0000\u0205\u0206\u0001"+
+		"\u0000\u0000\u0000\u0206\u0207\u0006A\u0000\u0000\u0207\u0085\u0001\u0000"+
+		"\u0000\u0000\u0208\u0209\u00050\u0000\u0000\u0209\u020e\u0007\u0004\u0000"+
+		"\u0000\u020a\u020c\u0005_\u0000\u0000\u020b\u020a\u0001\u0000\u0000\u0000"+
+		"\u020b\u020c\u0001\u0000\u0000\u0000\u020c\u020d\u0001\u0000\u0000\u0000"+
+		"\u020d\u020f\u0003\u00b6Z\u0000\u020e\u020b\u0001\u0000\u0000\u0000\u020f"+
+		"\u0210\u0001\u0000\u0000\u0000\u0210\u020e\u0001\u0000\u0000\u0000\u0210"+
+		"\u0211\u0001\u0000\u0000\u0000\u0211\u0212\u0001\u0000\u0000\u0000\u0212"+
+		"\u0213\u0006B\u0000\u0000\u0213\u0087\u0001\u0000\u0000\u0000\u0214\u0217"+
+		"\u0003\u008aD\u0000\u0215\u0217\u0003\u008cE\u0000\u0216\u0214\u0001\u0000"+
+		"\u0000\u0000\u0216\u0215\u0001\u0000\u0000\u0000\u0217\u0218\u0001\u0000"+
+		"\u0000\u0000\u0218\u0219\u0006C\u0000\u0000\u0219\u0089\u0001\u0000\u0000"+
+		"\u0000\u021a\u0223\u0003\u00b2X\u0000\u021b\u021d\u0005.\u0000\u0000\u021c"+
+		"\u021e\u0003\u00b2X\u0000\u021d\u021c\u0001\u0000\u0000\u0000\u021d\u021e"+
+		"\u0001\u0000\u0000\u0000\u021e\u0220\u0001\u0000\u0000\u0000\u021f\u0221"+
+		"\u0003\u00ba\\\u0000\u0220\u021f\u0001\u0000\u0000\u0000\u0220\u0221\u0001"+
+		"\u0000\u0000\u0000\u0221\u0224\u0001\u0000\u0000\u0000\u0222\u0224\u0003"+
+		"\u00ba\\\u0000\u0223\u021b\u0001\u0000\u0000\u0000\u0223\u0222\u0001\u0000"+
+		"\u0000\u0000\u0224\u022b\u0001\u0000\u0000\u0000\u0225\u0226\u0005.\u0000"+
+		"\u0000\u0226\u0228\u0003\u00b2X\u0000\u0227\u0229\u0003\u00ba\\\u0000"+
+		"\u0228\u0227\u0001\u0000\u0000\u0000\u0228\u0229\u0001\u0000\u0000\u0000"+
+		"\u0229\u022b\u0001\u0000\u0000\u0000\u022a\u021a\u0001\u0000\u0000\u0000"+
+		"\u022a\u0225\u0001\u0000\u0000\u0000\u022b\u008b\u0001\u0000\u0000\u0000"+
+		"\u022c\u022d\u00050\u0000\u0000\u022d\u022e\u0007\u0004\u0000\u0000\u022e"+
+		"\u022f\u0003\u008eF\u0000\u022f\u0230\u0003\u0090G\u0000\u0230\u008d\u0001"+
+		"\u0000\u0000\u0000\u0231\u0233\u0005_\u0000\u0000\u0232\u0231\u0001\u0000"+
+		"\u0000\u0000\u0232\u0233\u0001\u0000\u0000\u0000\u0233\u0234\u0001\u0000"+
+		"\u0000\u0000\u0234\u0236\u0003\u00b6Z\u0000\u0235\u0232\u0001\u0000\u0000"+
+		"\u0000\u0236\u0237\u0001\u0000\u0000\u0000\u0237\u0235\u0001\u0000\u0000"+
+		"\u0000\u0237\u0238\u0001\u0000\u0000\u0000\u0238\u0243\u0001\u0000\u0000"+
+		"\u0000\u0239\u0240\u0005.\u0000\u0000\u023a\u023c\u0005_\u0000\u0000\u023b"+
+		"\u023a\u0001\u0000\u0000\u0000\u023b\u023c\u0001\u0000\u0000\u0000\u023c"+
+		"\u023d\u0001\u0000\u0000\u0000\u023d\u023f\u0003\u00b6Z\u0000\u023e\u023b"+
+		"\u0001\u0000\u0000\u0000\u023f\u0242\u0001\u0000\u0000\u0000\u0240\u023e"+
+		"\u0001\u0000\u0000\u0000\u0240\u0241\u0001\u0000\u0000\u0000\u0241\u0244"+
+		"\u0001\u0000\u0000\u0000\u0242\u0240\u0001\u0000\u0000\u0000\u0243\u0239"+
+		"\u0001\u0000\u0000\u0000\u0243\u0244\u0001\u0000\u0000\u0000\u0244\u0251"+
+		"\u0001\u0000\u0000\u0000\u0245\u0246\u0005.\u0000\u0000\u0246\u024d\u0003"+
+		"\u00b6Z\u0000\u0247\u0249\u0005_\u0000\u0000\u0248\u0247\u0001\u0000\u0000"+
+		"\u0000\u0248\u0249\u0001\u0000\u0000\u0000\u0249\u024a\u0001\u0000\u0000"+
+		"\u0000\u024a\u024c\u0003\u00b6Z\u0000\u024b\u0248\u0001\u0000\u0000\u0000"+
+		"\u024c\u024f\u0001\u0000\u0000\u0000\u024d\u024b\u0001\u0000\u0000\u0000"+
+		"\u024d\u024e\u0001\u0000\u0000\u0000\u024e\u0251\u0001\u0000\u0000\u0000"+
+		"\u024f\u024d\u0001\u0000\u0000\u0000\u0250\u0235\u0001\u0000\u0000\u0000"+
+		"\u0250\u0245\u0001\u0000\u0000\u0000\u0251\u008f\u0001\u0000\u0000\u0000"+
+		"\u0252\u0254\u0007\u0005\u0000\u0000\u0253\u0255\u0007\u0006\u0000\u0000"+
+		"\u0254\u0253\u0001\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000\u0000"+
+		"\u0255\u0256\u0001\u0000\u0000\u0000\u0256\u0257\u0003\u00b2X\u0000\u0257"+
+		"\u0091\u0001\u0000\u0000\u0000\u0258\u025e\u0003\u0080?\u0000\u0259\u025e"+
+		"\u0003\u0082@\u0000\u025a\u025e\u0003\u0084A\u0000\u025b\u025e\u0003\u0086"+
+		"B\u0000\u025c\u025e\u0003\u0088C\u0000\u025d\u0258\u0001\u0000\u0000\u0000"+
+		"\u025d\u0259\u0001\u0000\u0000\u0000\u025d\u025a\u0001\u0000\u0000\u0000"+
+		"\u025d\u025b\u0001\u0000\u0000\u0000\u025d\u025c\u0001\u0000\u0000\u0000"+
+		"\u025e\u025f\u0001\u0000\u0000\u0000\u025f\u0260\u0005i\u0000\u0000\u0260"+
+		"\u0261\u0001\u0000\u0000\u0000\u0261\u0262\u0006H\u0000\u0000\u0262\u0093"+
+		"\u0001\u0000\u0000\u0000\u0263\u0266\u0005\'\u0000\u0000\u0264\u0267\u0003"+
+		"\u00aeV\u0000\u0265\u0267\u0003\u0098K\u0000\u0266\u0264\u0001\u0000\u0000"+
+		"\u0000\u0266\u0265\u0001\u0000\u0000\u0000\u0267\u0268\u0001\u0000\u0000"+
+		"\u0000\u0268\u0269\u0005\'\u0000\u0000\u0269\u0095\u0001\u0000\u0000\u0000"+
+		"\u026a\u026b\u0003\u0094I\u0000\u026b\u026c\u0001\u0000\u0000\u0000\u026c"+
+		"\u026d\u0006J\u0000\u0000\u026d\u0097\u0001\u0000\u0000\u0000\u026e\u0271"+
+		"\u0003\u009aL\u0000\u026f\u0271\u0003\u009cM\u0000\u0270\u026e\u0001\u0000"+
+		"\u0000\u0000\u0270\u026f\u0001\u0000\u0000\u0000\u0271\u0099\u0001\u0000"+
+		"\u0000\u0000\u0272\u0273\u0005\\\u0000\u0000\u0273\u0274\u0003\u00b4Y"+
+		"\u0000\u0274\u0275\u0003\u00b4Y\u0000\u0275\u0276\u0003\u00b4Y\u0000\u0276"+
+		"\u009b\u0001\u0000\u0000\u0000\u0277\u0278\u0005\\\u0000\u0000\u0278\u0279"+
+		"\u0005x\u0000\u0000\u0279\u027a\u0003\u00b6Z\u0000\u027a\u027b\u0003\u00b6"+
+		"Z\u0000\u027b\u009d\u0001\u0000\u0000\u0000\u027c\u027d\u0005\\\u0000"+
+		"\u0000\u027d\u027e\u0005u\u0000\u0000\u027e\u027f\u0003\u00b6Z\u0000\u027f"+
+		"\u0280\u0003\u00b6Z\u0000\u0280\u0281\u0003\u00b6Z\u0000\u0281\u0282\u0003"+
+		"\u00b6Z\u0000\u0282\u009f\u0001\u0000\u0000\u0000\u0283\u0284\u0005\\"+
+		"\u0000\u0000\u0284\u0285\u0005U\u0000\u0000\u0285\u0286\u0003\u00b6Z\u0000"+
+		"\u0286\u0287\u0003\u00b6Z\u0000\u0287\u0288\u0003\u00b6Z\u0000\u0288\u0289"+
+		"\u0003\u00b6Z\u0000\u0289\u028a\u0003\u00b6Z\u0000\u028a\u028b\u0003\u00b6"+
+		"Z\u0000\u028b\u028c\u0003\u00b6Z\u0000\u028c\u028d\u0003\u00b6Z\u0000"+
+		"\u028d\u00a1\u0001\u0000\u0000\u0000\u028e\u0292\u0005`\u0000\u0000\u028f"+
+		"\u0291\b\u0007\u0000\u0000\u0290\u028f\u0001\u0000\u0000\u0000\u0291\u0294"+
+		"\u0001\u0000\u0000\u0000\u0292\u0290\u0001\u0000\u0000\u0000\u0292\u0293"+
+		"\u0001\u0000\u0000\u0000\u0293\u0295\u0001\u0000\u0000\u0000\u0294\u0292"+
+		"\u0001\u0000\u0000\u0000\u0295\u0296\u0005`\u0000\u0000\u0296\u0297\u0001"+
+		"\u0000\u0000\u0000\u0297\u0298\u0006P\u0000\u0000\u0298\u00a3\u0001\u0000"+
+		"\u0000\u0000\u0299\u029e\u0005\"\u0000\u0000\u029a\u029d\b\b\u0000\u0000"+
+		"\u029b\u029d\u0003\u00b0W\u0000\u029c\u029a\u0001\u0000\u0000\u0000\u029c"+
+		"\u029b\u0001\u0000\u0000\u0000\u029d\u02a0\u0001\u0000\u0000\u0000\u029e"+
+		"\u029c\u0001\u0000\u0000\u0000\u029e\u029f\u0001\u0000\u0000\u0000\u029f"+
+		"\u02a1\u0001\u0000\u0000\u0000\u02a0\u029e\u0001\u0000\u0000\u0000\u02a1"+
+		"\u02a2\u0005\"\u0000\u0000\u02a2\u02a3\u0001\u0000\u0000\u0000\u02a3\u02a4"+
+		"\u0006Q\u0000\u0000\u02a4\u00a5\u0001\u0000\u0000\u0000\u02a5\u02a7\u0007"+
+		"\t\u0000\u0000\u02a6\u02a5\u0001\u0000\u0000\u0000\u02a7\u02a8\u0001\u0000"+
+		"\u0000\u0000\u02a8\u02a6\u0001\u0000\u0000\u0000\u02a8\u02a9\u0001\u0000"+
+		"\u0000\u0000\u02a9\u02aa\u0001\u0000\u0000\u0000\u02aa\u02ab\u0006R\u0001"+
+		"\u0000\u02ab\u00a7\u0001\u0000\u0000\u0000\u02ac\u02ad\u0005/\u0000\u0000"+
+		"\u02ad\u02ae\u0005*\u0000\u0000\u02ae\u02b2\u0001\u0000\u0000\u0000\u02af"+
+		"\u02b1\t\u0000\u0000\u0000\u02b0\u02af\u0001\u0000\u0000\u0000\u02b1\u02b4"+
+		"\u0001\u0000\u0000\u0000\u02b2\u02b3\u0001\u0000\u0000\u0000\u02b2\u02b0"+
+		"\u0001\u0000\u0000\u0000\u02b3\u02b5\u0001\u0000\u0000\u0000\u02b4\u02b2"+
+		"\u0001\u0000\u0000\u0000\u02b5\u02b6\u0005*\u0000\u0000\u02b6\u02b7\u0005"+
+		"/\u0000\u0000\u02b7\u02b8\u0001\u0000\u0000\u0000\u02b8\u02b9\u0006S\u0001"+
+		"\u0000\u02b9\u00a9\u0001\u0000\u0000\u0000\u02ba\u02bc\u0007\n\u0000\u0000"+
+		"\u02bb\u02ba\u0001\u0000\u0000\u0000\u02bc\u02bd\u0001\u0000\u0000\u0000"+
+		"\u02bd\u02bb\u0001\u0000\u0000\u0000\u02bd\u02be\u0001\u0000\u0000\u0000"+
+		"\u02be\u02bf\u0001\u0000\u0000\u0000\u02bf\u02c0\u0006T\u0001\u0000\u02c0"+
+		"\u00ab\u0001\u0000\u0000\u0000\u02c1\u02c2\u0005/\u0000\u0000\u02c2\u02c3"+
+		"\u0005/\u0000\u0000\u02c3\u02c7\u0001\u0000\u0000\u0000\u02c4\u02c6\b"+
+		"\n\u0000\u0000\u02c5\u02c4\u0001\u0000\u0000\u0000\u02c6\u02c9\u0001\u0000"+
+		"\u0000\u0000\u02c7\u02c5\u0001\u0000\u0000\u0000\u02c7\u02c8\u0001\u0000"+
+		"\u0000\u0000\u02c8\u02ca\u0001\u0000\u0000\u0000\u02c9\u02c7\u0001\u0000"+
+		"\u0000\u0000\u02ca\u02cb\u0006U\u0001\u0000\u02cb\u00ad\u0001\u0000\u0000"+
+		"\u0000\u02cc\u02d1\b\u000b\u0000\u0000\u02cd\u02d1\u0003\u009eN\u0000"+
+		"\u02ce\u02d1\u0003\u00a0O\u0000\u02cf\u02d1\u0003\u00b0W\u0000\u02d0\u02cc"+
+		"\u0001\u0000\u0000\u0000\u02d0\u02cd\u0001\u0000\u0000\u0000\u02d0\u02ce"+
+		"\u0001\u0000\u0000\u0000\u02d0\u02cf\u0001\u0000\u0000\u0000\u02d1\u00af"+
+		"\u0001\u0000\u0000\u0000\u02d2\u02ec\u0005\\\u0000\u0000\u02d3\u02d4\u0005"+
+		"u\u0000\u0000\u02d4\u02d5\u0003\u00b6Z\u0000\u02d5\u02d6\u0003\u00b6Z"+
+		"\u0000\u02d6\u02d7\u0003\u00b6Z\u0000\u02d7\u02d8\u0003\u00b6Z\u0000\u02d8"+
+		"\u02ed\u0001\u0000\u0000\u0000\u02d9\u02da\u0005U\u0000\u0000\u02da\u02db"+
+		"\u0003\u00b6Z\u0000\u02db\u02dc\u0003\u00b6Z\u0000\u02dc\u02dd\u0003\u00b6"+
+		"Z\u0000\u02dd\u02de\u0003\u00b6Z\u0000\u02de\u02df\u0003\u00b6Z\u0000"+
+		"\u02df\u02e0\u0003\u00b6Z\u0000\u02e0\u02e1\u0003\u00b6Z\u0000\u02e1\u02e2"+
+		"\u0003\u00b6Z\u0000\u02e2\u02ed\u0001\u0000\u0000\u0000\u02e3\u02ed\u0007"+
+		"\f\u0000\u0000\u02e4\u02e5\u0003\u00b4Y\u0000\u02e5\u02e6\u0003\u00b4"+
+		"Y\u0000\u02e6\u02e7\u0003\u00b4Y\u0000\u02e7\u02ed\u0001\u0000\u0000\u0000"+
+		"\u02e8\u02e9\u0005x\u0000\u0000\u02e9\u02ea\u0003\u00b6Z\u0000\u02ea\u02eb"+
+		"\u0003\u00b6Z\u0000\u02eb\u02ed\u0001\u0000\u0000\u0000\u02ec\u02d3\u0001"+
+		"\u0000\u0000\u0000\u02ec\u02d9\u0001\u0000\u0000\u0000\u02ec\u02e3\u0001"+
+		"\u0000\u0000\u0000\u02ec\u02e4\u0001\u0000\u0000\u0000\u02ec\u02e8\u0001"+
+		"\u0000\u0000\u0000\u02ed\u00b1\u0001\u0000\u0000\u0000\u02ee\u02f5\u0007"+
+		"\u0001\u0000\u0000\u02ef\u02f1\u0005_\u0000\u0000\u02f0\u02ef\u0001\u0000"+
+		"\u0000\u0000\u02f0\u02f1\u0001\u0000\u0000\u0000\u02f1\u02f2\u0001\u0000"+
+		"\u0000\u0000\u02f2\u02f4\u0007\u0001\u0000\u0000\u02f3\u02f0\u0001\u0000"+
+		"\u0000\u0000\u02f4\u02f7\u0001\u0000\u0000\u0000\u02f5\u02f3\u0001\u0000"+
+		"\u0000\u0000\u02f5\u02f6\u0001\u0000\u0000\u0000\u02f6\u00b3\u0001\u0000"+
+		"\u0000\u0000\u02f7\u02f5\u0001\u0000\u0000\u0000\u02f8\u02f9\u0007\r\u0000"+
+		"\u0000\u02f9\u00b5\u0001\u0000\u0000\u0000\u02fa\u02fb\u0007\u000e\u0000"+
+		"\u0000\u02fb\u00b7\u0001\u0000\u0000\u0000\u02fc\u02fd\u0007\u000f\u0000"+
+		"\u0000\u02fd\u00b9\u0001\u0000\u0000\u0000\u02fe\u0300\u0007\u0010\u0000"+
+		"\u0000\u02ff\u0301\u0007\u0006\u0000\u0000\u0300\u02ff\u0001\u0000\u0000"+
+		"\u0000\u0300\u0301\u0001\u0000\u0000\u0000\u0301\u0302\u0001\u0000\u0000"+
+		"\u0000\u0302\u0303\u0003\u00b2X\u0000\u0303\u00bb\u0001\u0000\u0000\u0000"+
+		"\u0304\u0307\u0003\u00c0_\u0000\u0305\u0307\u0005_\u0000\u0000\u0306\u0304"+
+		"\u0001\u0000\u0000\u0000\u0306\u0305\u0001\u0000\u0000\u0000\u0307\u00bd"+
+		"\u0001\u0000\u0000\u0000\u0308\u0309\u0007\u0011\u0000\u0000\u0309\u00bf"+
+		"\u0001\u0000\u0000\u0000\u030a\u030b\u0007\u0012\u0000\u0000\u030b\u00c1"+
+		"\u0001\u0000\u0000\u0000\u030c\u030e\u0007\t\u0000\u0000\u030d\u030c\u0001"+
+		"\u0000\u0000\u0000\u030e\u030f\u0001\u0000\u0000\u0000\u030f\u030d\u0001"+
+		"\u0000\u0000\u0000\u030f\u0310\u0001\u0000\u0000\u0000\u0310\u0311\u0001"+
+		"\u0000\u0000\u0000\u0311\u0312\u0006`\u0001\u0000\u0312\u00c3\u0001\u0000"+
+		"\u0000\u0000\u0313\u0314\u0005/\u0000\u0000\u0314\u0315\u0005*\u0000\u0000"+
+		"\u0315\u0319\u0001\u0000\u0000\u0000\u0316\u0318\b\n\u0000\u0000\u0317"+
+		"\u0316\u0001\u0000\u0000\u0000\u0318\u031b\u0001\u0000\u0000\u0000\u0319"+
+		"\u031a\u0001\u0000\u0000\u0000\u0319\u0317\u0001\u0000\u0000\u0000\u031a"+
+		"\u031c\u0001\u0000\u0000\u0000\u031b\u0319\u0001\u0000\u0000\u0000\u031c"+
+		"\u031d\u0005*\u0000\u0000\u031d\u031e\u0005/\u0000\u0000\u031e\u031f\u0001"+
+		"\u0000\u0000\u0000\u031f\u0320\u0006a\u0001\u0000\u0320\u00c5\u0001\u0000"+
+		"\u0000\u0000\u0321\u0322\u0005/\u0000\u0000\u0322\u0323\u0005/\u0000\u0000"+
+		"\u0323\u0327\u0001\u0000\u0000\u0000\u0324\u0326\b\n\u0000\u0000\u0325"+
+		"\u0324\u0001\u0000\u0000\u0000\u0326\u0329\u0001\u0000\u0000\u0000\u0327"+
+		"\u0325\u0001\u0000\u0000\u0000\u0327\u0328\u0001\u0000\u0000\u0000\u0328"+
+		"\u032a\u0001\u0000\u0000\u0000\u0329\u0327\u0001\u0000\u0000\u0000\u032a"+
+		"\u032b\u0006b\u0001\u0000\u032b\u00c7\u0001\u0000\u0000\u0000\u032c\u032e"+
+		"\u0007\n\u0000\u0000\u032d\u032c\u0001\u0000\u0000\u0000\u032e\u032f\u0001"+
+		"\u0000\u0000\u0000\u032f\u032d\u0001\u0000\u0000\u0000\u032f\u0330\u0001"+
+		"\u0000\u0000\u0000\u0330\u033f\u0001\u0000\u0000\u0000\u0331\u033f\u0005"+
+		";\u0000\u0000\u0332\u0333\u0005/\u0000\u0000\u0333\u0334\u0005*\u0000"+
+		"\u0000\u0334\u0338\u0001\u0000\u0000\u0000\u0335\u0337\t\u0000\u0000\u0000"+
+		"\u0336\u0335\u0001\u0000\u0000\u0000\u0337\u033a\u0001\u0000\u0000\u0000"+
+		"\u0338\u0339\u0001\u0000\u0000\u0000\u0338\u0336\u0001\u0000\u0000\u0000"+
+		"\u0339\u033b\u0001\u0000\u0000\u0000\u033a\u0338\u0001\u0000\u0000\u0000"+
+		"\u033b\u033c\u0005*\u0000\u0000\u033c\u033f\u0005/\u0000\u0000\u033d\u033f"+
+		"\u0005\u0000\u0000\u0001\u033e\u032d\u0001\u0000\u0000\u0000\u033e\u0331"+
+		"\u0001\u0000\u0000\u0000\u033e\u0332\u0001\u0000\u0000\u0000\u033e\u033d"+
+		"\u0001\u0000\u0000\u0000\u033f\u0340\u0001\u0000\u0000\u0000\u0340\u0341"+
+		"\u0006c\u0002\u0000\u0341\u00c9\u0001\u0000\u0000\u0000\u0342\u0343\u0001"+
+		"\u0000\u0000\u0000\u0343\u0344\u0001\u0000\u0000\u0000\u0344\u0345\u0006"+
+		"d\u0002\u0000\u0345\u0346\u0006d\u0001\u0000\u0346\u00cb\u0001\u0000\u0000"+
+		"\u00003\u0000\u0001\u0177\u0179\u01e2\u01e7\u01ea\u01f1\u01f6\u01fc\u01ff"+
+		"\u0204\u020b\u0210\u0216\u021d\u0220\u0223\u0228\u022a\u0232\u0237\u023b"+
+		"\u0240\u0243\u0248\u024d\u0250\u0254\u025d\u0266\u0270\u0292\u029c\u029e"+
+		"\u02a8\u02b2\u02bd\u02c7\u02d0\u02ec\u02f0\u02f5\u0300\u0306\u030f\u0319"+
+		"\u0327\u032f\u0338\u033e\u0003\u0002\u0001\u0000\u0000\u0001\u0000\u0002"+
+		"\u0000\u0000";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}
\ No newline at end of file
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParser.g4 b/ide/go.lang/src/org/antlr/parser/golang/GoParser.g4
new file mode 100644
index 0000000..69f5f6b
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParser.g4
@@ -0,0 +1,409 @@
+/*
+ [The "BSD licence"] Copyright (c) 2017 Sasa Coh, Michał Błotniak Copyright (c) 2019 Ivan Kochurkin,
+ kvanttt@gmail.com, Positive Technologies Copyright (c) 2019 Dmitry Rassadin,
+ flipparassa@gmail.com,Positive Technologies All rights reserved. Copyright (c) 2021 Martin Mirchev,
+ mirchevmartin2203@gmail.com
+
+ Redistribution and use in source and binary forms, with or without modification, are permitted
+ provided that the following conditions are met: 1. Redistributions of source code must retain the
+ above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in
+ binary form must reproduce the above copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided with the distribution. 3. The name
+ of the author may not be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * A Go grammar for ANTLR 4 derived from the Go Language Specification https://golang.org/ref/spec
+ */
+
+parser grammar GoParser;
+
+@header{
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+}
+
+options {
+	tokenVocab = GoLexer;
+	superClass = GoParserBase;
+}
+
+sourceFile:
+	packageClause eos (importDecl eos)* (
+		(functionDecl | methodDecl | declaration) eos
+	)* EOF;
+
+packageClause: PACKAGE packageName = IDENTIFIER;
+
+importDecl:
+	IMPORT (importSpec | L_PAREN (importSpec eos)* R_PAREN);
+
+importSpec: alias = (DOT | IDENTIFIER)? importPath;
+
+importPath: string_;
+
+declaration: constDecl | typeDecl | varDecl;
+
+constDecl: CONST (constSpec | L_PAREN (constSpec eos)* R_PAREN);
+
+constSpec: identifierList (type_? ASSIGN expressionList)?;
+
+identifierList: IDENTIFIER (COMMA IDENTIFIER)*;
+
+expressionList: expression (COMMA expression)*;
+
+typeDecl: TYPE (typeSpec | L_PAREN (typeSpec eos)* R_PAREN);
+
+typeSpec: IDENTIFIER ASSIGN? type_;
+
+// Function declarations
+
+functionDecl: FUNC IDENTIFIER (signature block?);
+
+methodDecl: FUNC receiver IDENTIFIER ( signature block?);
+
+receiver: parameters;
+
+varDecl: VAR (varSpec | L_PAREN (varSpec eos)* R_PAREN);
+
+varSpec:
+	identifierList (
+		type_ (ASSIGN expressionList)?
+		| ASSIGN expressionList
+	);
+
+block: L_CURLY statementList? R_CURLY;
+
+statementList: ((SEMI? | EOS? | {this.closingBracket()}?) statement eos)+;
+
+statement:
+	declaration
+	| labeledStmt
+	| simpleStmt
+	| goStmt
+	| returnStmt
+	| breakStmt
+	| continueStmt
+	| gotoStmt
+	| fallthroughStmt
+	| block
+	| ifStmt
+	| switchStmt
+	| selectStmt
+	| forStmt
+	| deferStmt;
+
+simpleStmt:
+	sendStmt
+	| incDecStmt
+	| assignment
+	| expressionStmt
+	| shortVarDecl;
+
+expressionStmt: expression;
+
+sendStmt: channel = expression RECEIVE expression;
+
+incDecStmt: expression (PLUS_PLUS | MINUS_MINUS);
+
+assignment: expressionList assign_op expressionList;
+
+assign_op: (
+		PLUS
+		| MINUS
+		| OR
+		| CARET
+		| STAR
+		| DIV
+		| MOD
+		| LSHIFT
+		| RSHIFT
+		| AMPERSAND
+		| BIT_CLEAR
+	)? ASSIGN;
+
+shortVarDecl: identifierList DECLARE_ASSIGN expressionList;
+
+emptyStmt: EOS | SEMI;
+
+labeledStmt: IDENTIFIER COLON statement?;
+
+returnStmt: RETURN expressionList?;
+
+breakStmt: BREAK IDENTIFIER?;
+
+continueStmt: CONTINUE IDENTIFIER?;
+
+gotoStmt: GOTO IDENTIFIER;
+
+fallthroughStmt: FALLTHROUGH;
+
+deferStmt: DEFER expression;
+
+ifStmt:
+	IF ( expression
+			| eos expression
+			| simpleStmt eos expression
+			) block (
+		ELSE (ifStmt | block)
+	)?;
+
+switchStmt: exprSwitchStmt | typeSwitchStmt;
+
+exprSwitchStmt:
+	SWITCH (expression?
+					| simpleStmt? eos expression?
+					) L_CURLY exprCaseClause* R_CURLY;
+
+exprCaseClause: exprSwitchCase COLON statementList?;
+
+exprSwitchCase: CASE expressionList | DEFAULT;
+
+typeSwitchStmt:
+	SWITCH ( typeSwitchGuard
+					| eos typeSwitchGuard
+					| simpleStmt eos typeSwitchGuard)
+					 L_CURLY typeCaseClause* R_CURLY;
+
+typeSwitchGuard: (IDENTIFIER DECLARE_ASSIGN)? primaryExpr DOT L_PAREN TYPE R_PAREN;
+
+typeCaseClause: typeSwitchCase COLON statementList?;
+
+typeSwitchCase: CASE typeList | DEFAULT;
+
+typeList: (type_ | NIL_LIT) (COMMA (type_ | NIL_LIT))*;
+
+selectStmt: SELECT L_CURLY commClause* R_CURLY;
+
+commClause: commCase COLON statementList?;
+
+commCase: CASE (sendStmt | recvStmt) | DEFAULT;
+
+recvStmt: (expressionList ASSIGN | identifierList DECLARE_ASSIGN)? recvExpr = expression;
+
+forStmt: FOR (expression? | forClause | rangeClause?) block;
+
+forClause:
+	initStmt = simpleStmt? eos expression? eos postStmt = simpleStmt?;
+
+rangeClause: (
+		expressionList ASSIGN
+		| identifierList DECLARE_ASSIGN
+	)? RANGE expression;
+
+goStmt: GO expression;
+
+type_: typeName | typeLit | L_PAREN type_ R_PAREN;
+
+typeName: qualifiedIdent | IDENTIFIER;
+
+typeLit:
+	arrayType
+	| structType
+	| pointerType
+	| functionType
+	| interfaceType
+	| sliceType
+	| mapType
+	| channelType;
+
+arrayType: L_BRACKET arrayLength R_BRACKET elementType;
+
+arrayLength: expression;
+
+elementType: type_;
+
+pointerType: STAR type_;
+
+interfaceType:
+	INTERFACE L_CURLY ((methodSpec | typeName) eos)* R_CURLY;
+
+sliceType: L_BRACKET R_BRACKET elementType;
+
+// It's possible to replace `type` with more restricted typeLit list and also pay attention to nil maps
+mapType: MAP L_BRACKET type_ R_BRACKET elementType;
+
+channelType: (CHAN | CHAN RECEIVE | RECEIVE CHAN) elementType;
+
+methodSpec:
+	IDENTIFIER parameters result
+	| IDENTIFIER parameters;
+
+functionType: FUNC signature;
+
+signature:
+	parameters result
+	| parameters;
+
+result: parameters | type_;
+
+parameters:
+	L_PAREN (parameterDecl (COMMA parameterDecl)* COMMA?)? R_PAREN;
+
+parameterDecl: identifierList? ELLIPSIS? type_;
+
+expression:
+	primaryExpr
+	| unary_op = (
+		PLUS
+		| MINUS
+		| EXCLAMATION
+		| CARET
+		| STAR
+		| AMPERSAND
+		| RECEIVE
+	) expression
+	| expression mul_op = (
+		STAR
+		| DIV
+		| MOD
+		| LSHIFT
+		| RSHIFT
+		| AMPERSAND
+		| BIT_CLEAR
+	) expression
+	| expression add_op = (PLUS | MINUS | OR | CARET) expression
+	| expression rel_op = (
+		EQUALS
+		| NOT_EQUALS
+		| LESS
+		| LESS_OR_EQUALS
+		| GREATER
+		| GREATER_OR_EQUALS
+	) expression
+	| expression LOGICAL_AND expression
+	| expression LOGICAL_OR expression;
+
+primaryExpr:
+	operand
+	| conversion
+	| methodExpr
+	| primaryExpr (
+		(DOT IDENTIFIER)
+		| index
+		| slice_
+		| typeAssertion
+		| arguments
+	);
+
+
+conversion: nonNamedType L_PAREN expression COMMA? R_PAREN;
+
+nonNamedType: typeLit | L_PAREN nonNamedType R_PAREN;
+
+operand: literal | operandName | L_PAREN expression R_PAREN;
+
+literal: basicLit | compositeLit | functionLit;
+
+basicLit:
+	NIL_LIT
+	| integer
+	| string_
+	| FLOAT_LIT;
+
+integer:
+	DECIMAL_LIT
+	| BINARY_LIT
+	| OCTAL_LIT
+	| HEX_LIT
+	| IMAGINARY_LIT
+	| RUNE_LIT;
+
+operandName: IDENTIFIER;
+
+qualifiedIdent: IDENTIFIER DOT IDENTIFIER;
+
+compositeLit: literalType literalValue;
+
+literalType:
+	structType
+	| arrayType
+	| L_BRACKET ELLIPSIS R_BRACKET elementType
+	| sliceType
+	| mapType
+	| typeName;
+
+literalValue: L_CURLY (elementList COMMA?)? R_CURLY;
+
+elementList: keyedElement (COMMA keyedElement)*;
+
+keyedElement: (key COLON)? element;
+
+key: expression | literalValue;
+
+element: expression | literalValue;
+
+structType: STRUCT L_CURLY (fieldDecl eos)* R_CURLY;
+
+fieldDecl: (
+		identifierList type_
+		| embeddedField
+	) tag = string_?;
+
+string_: RAW_STRING_LIT | INTERPRETED_STRING_LIT;
+
+embeddedField: STAR? typeName;
+
+functionLit: FUNC signature block; // function
+
+index: L_BRACKET expression R_BRACKET;
+
+slice_:
+	L_BRACKET (
+		expression? COLON expression?
+		| expression? COLON expression COLON expression
+	) R_BRACKET;
+
+typeAssertion: DOT L_PAREN type_ R_PAREN;
+
+arguments:
+	L_PAREN (
+		(expressionList | nonNamedType (COMMA expressionList)?) ELLIPSIS? COMMA?
+	)? R_PAREN;
+
+methodExpr: nonNamedType DOT IDENTIFIER;
+
+//receiverType: typeName | '(' ('*' typeName | receiverType) ')';
+
+receiverType: type_;
+
+eos:
+	SEMI
+	| EOF
+	| EOS
+	| {this.closingBracket()}?
+	;
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParser.java b/ide/go.lang/src/org/antlr/parser/golang/GoParser.java
new file mode 100644
index 0000000..9fc249c
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParser.java
@@ -0,0 +1,8244 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
+public class GoParser extends GoParserBase {
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		BREAK=1, DEFAULT=2, FUNC=3, INTERFACE=4, SELECT=5, CASE=6, DEFER=7, GO=8, 
+		MAP=9, STRUCT=10, CHAN=11, ELSE=12, GOTO=13, PACKAGE=14, SWITCH=15, CONST=16, 
+		FALLTHROUGH=17, IF=18, RANGE=19, TYPE=20, CONTINUE=21, FOR=22, IMPORT=23, 
+		RETURN=24, VAR=25, NIL_LIT=26, IDENTIFIER=27, L_PAREN=28, R_PAREN=29, 
+		L_CURLY=30, R_CURLY=31, L_BRACKET=32, R_BRACKET=33, ASSIGN=34, COMMA=35, 
+		SEMI=36, COLON=37, DOT=38, PLUS_PLUS=39, MINUS_MINUS=40, DECLARE_ASSIGN=41, 
+		ELLIPSIS=42, LOGICAL_OR=43, LOGICAL_AND=44, EQUALS=45, NOT_EQUALS=46, 
+		LESS=47, LESS_OR_EQUALS=48, GREATER=49, GREATER_OR_EQUALS=50, OR=51, DIV=52, 
+		MOD=53, LSHIFT=54, RSHIFT=55, BIT_CLEAR=56, EXCLAMATION=57, PLUS=58, MINUS=59, 
+		CARET=60, STAR=61, AMPERSAND=62, RECEIVE=63, DECIMAL_LIT=64, BINARY_LIT=65, 
+		OCTAL_LIT=66, HEX_LIT=67, FLOAT_LIT=68, DECIMAL_FLOAT_LIT=69, HEX_FLOAT_LIT=70, 
+		IMAGINARY_LIT=71, RUNE_LIT=72, BYTE_VALUE=73, OCTAL_BYTE_VALUE=74, HEX_BYTE_VALUE=75, 
+		LITTLE_U_VALUE=76, BIG_U_VALUE=77, RAW_STRING_LIT=78, INTERPRETED_STRING_LIT=79, 
+		WS=80, COMMENT=81, TERMINATOR=82, LINE_COMMENT=83, WS_NLSEMI=84, COMMENT_NLSEMI=85, 
+		LINE_COMMENT_NLSEMI=86, EOS=87, OTHER=88;
+	public static final int
+		RULE_sourceFile = 0, RULE_packageClause = 1, RULE_importDecl = 2, RULE_importSpec = 3, 
+		RULE_importPath = 4, RULE_declaration = 5, RULE_constDecl = 6, RULE_constSpec = 7, 
+		RULE_identifierList = 8, RULE_expressionList = 9, RULE_typeDecl = 10, 
+		RULE_typeSpec = 11, RULE_functionDecl = 12, RULE_methodDecl = 13, RULE_receiver = 14, 
+		RULE_varDecl = 15, RULE_varSpec = 16, RULE_block = 17, RULE_statementList = 18, 
+		RULE_statement = 19, RULE_simpleStmt = 20, RULE_expressionStmt = 21, RULE_sendStmt = 22, 
+		RULE_incDecStmt = 23, RULE_assignment = 24, RULE_assign_op = 25, RULE_shortVarDecl = 26, 
+		RULE_emptyStmt = 27, RULE_labeledStmt = 28, RULE_returnStmt = 29, RULE_breakStmt = 30, 
+		RULE_continueStmt = 31, RULE_gotoStmt = 32, RULE_fallthroughStmt = 33, 
+		RULE_deferStmt = 34, RULE_ifStmt = 35, RULE_switchStmt = 36, RULE_exprSwitchStmt = 37, 
+		RULE_exprCaseClause = 38, RULE_exprSwitchCase = 39, RULE_typeSwitchStmt = 40, 
+		RULE_typeSwitchGuard = 41, RULE_typeCaseClause = 42, RULE_typeSwitchCase = 43, 
+		RULE_typeList = 44, RULE_selectStmt = 45, RULE_commClause = 46, RULE_commCase = 47, 
+		RULE_recvStmt = 48, RULE_forStmt = 49, RULE_forClause = 50, RULE_rangeClause = 51, 
+		RULE_goStmt = 52, RULE_type_ = 53, RULE_typeName = 54, RULE_typeLit = 55, 
+		RULE_arrayType = 56, RULE_arrayLength = 57, RULE_elementType = 58, RULE_pointerType = 59, 
+		RULE_interfaceType = 60, RULE_sliceType = 61, RULE_mapType = 62, RULE_channelType = 63, 
+		RULE_methodSpec = 64, RULE_functionType = 65, RULE_signature = 66, RULE_result = 67, 
+		RULE_parameters = 68, RULE_parameterDecl = 69, RULE_expression = 70, RULE_primaryExpr = 71, 
+		RULE_conversion = 72, RULE_nonNamedType = 73, RULE_operand = 74, RULE_literal = 75, 
+		RULE_basicLit = 76, RULE_integer = 77, RULE_operandName = 78, RULE_qualifiedIdent = 79, 
+		RULE_compositeLit = 80, RULE_literalType = 81, RULE_literalValue = 82, 
+		RULE_elementList = 83, RULE_keyedElement = 84, RULE_key = 85, RULE_element = 86, 
+		RULE_structType = 87, RULE_fieldDecl = 88, RULE_string_ = 89, RULE_embeddedField = 90, 
+		RULE_functionLit = 91, RULE_index = 92, RULE_slice_ = 93, RULE_typeAssertion = 94, 
+		RULE_arguments = 95, RULE_methodExpr = 96, RULE_receiverType = 97, RULE_eos = 98;
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"sourceFile", "packageClause", "importDecl", "importSpec", "importPath", 
+			"declaration", "constDecl", "constSpec", "identifierList", "expressionList", 
+			"typeDecl", "typeSpec", "functionDecl", "methodDecl", "receiver", "varDecl", 
+			"varSpec", "block", "statementList", "statement", "simpleStmt", "expressionStmt", 
+			"sendStmt", "incDecStmt", "assignment", "assign_op", "shortVarDecl", 
+			"emptyStmt", "labeledStmt", "returnStmt", "breakStmt", "continueStmt", 
+			"gotoStmt", "fallthroughStmt", "deferStmt", "ifStmt", "switchStmt", "exprSwitchStmt", 
+			"exprCaseClause", "exprSwitchCase", "typeSwitchStmt", "typeSwitchGuard", 
+			"typeCaseClause", "typeSwitchCase", "typeList", "selectStmt", "commClause", 
+			"commCase", "recvStmt", "forStmt", "forClause", "rangeClause", "goStmt", 
+			"type_", "typeName", "typeLit", "arrayType", "arrayLength", "elementType", 
+			"pointerType", "interfaceType", "sliceType", "mapType", "channelType", 
+			"methodSpec", "functionType", "signature", "result", "parameters", "parameterDecl", 
+			"expression", "primaryExpr", "conversion", "nonNamedType", "operand", 
+			"literal", "basicLit", "integer", "operandName", "qualifiedIdent", "compositeLit", 
+			"literalType", "literalValue", "elementList", "keyedElement", "key", 
+			"element", "structType", "fieldDecl", "string_", "embeddedField", "functionLit", 
+			"index", "slice_", "typeAssertion", "arguments", "methodExpr", "receiverType", 
+			"eos"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
+
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "'break'", "'default'", "'func'", "'interface'", "'select'", "'case'", 
+			"'defer'", "'go'", "'map'", "'struct'", "'chan'", "'else'", "'goto'", 
+			"'package'", "'switch'", "'const'", "'fallthrough'", "'if'", "'range'", 
+			"'type'", "'continue'", "'for'", "'import'", "'return'", "'var'", "'nil'", 
+			null, "'('", "')'", "'{'", "'}'", "'['", "']'", "'='", "','", "';'", 
+			"':'", "'.'", "'++'", "'--'", "':='", "'...'", "'||'", "'&&'", "'=='", 
+			"'!='", "'<'", "'<='", "'>'", "'>='", "'|'", "'/'", "'%'", "'<<'", "'>>'", 
+			"'&^'", "'!'", "'+'", "'-'", "'^'", "'*'", "'&'", "'<-'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, "BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER", 
+			"GO", "MAP", "STRUCT", "CHAN", "ELSE", "GOTO", "PACKAGE", "SWITCH", "CONST", 
+			"FALLTHROUGH", "IF", "RANGE", "TYPE", "CONTINUE", "FOR", "IMPORT", "RETURN", 
+			"VAR", "NIL_LIT", "IDENTIFIER", "L_PAREN", "R_PAREN", "L_CURLY", "R_CURLY", 
+			"L_BRACKET", "R_BRACKET", "ASSIGN", "COMMA", "SEMI", "COLON", "DOT", 
+			"PLUS_PLUS", "MINUS_MINUS", "DECLARE_ASSIGN", "ELLIPSIS", "LOGICAL_OR", 
+			"LOGICAL_AND", "EQUALS", "NOT_EQUALS", "LESS", "LESS_OR_EQUALS", "GREATER", 
+			"GREATER_OR_EQUALS", "OR", "DIV", "MOD", "LSHIFT", "RSHIFT", "BIT_CLEAR", 
+			"EXCLAMATION", "PLUS", "MINUS", "CARET", "STAR", "AMPERSAND", "RECEIVE", 
+			"DECIMAL_LIT", "BINARY_LIT", "OCTAL_LIT", "HEX_LIT", "FLOAT_LIT", "DECIMAL_FLOAT_LIT", 
+			"HEX_FLOAT_LIT", "IMAGINARY_LIT", "RUNE_LIT", "BYTE_VALUE", "OCTAL_BYTE_VALUE", 
+			"HEX_BYTE_VALUE", "LITTLE_U_VALUE", "BIG_U_VALUE", "RAW_STRING_LIT", 
+			"INTERPRETED_STRING_LIT", "WS", "COMMENT", "TERMINATOR", "LINE_COMMENT", 
+			"WS_NLSEMI", "COMMENT_NLSEMI", "LINE_COMMENT_NLSEMI", "EOS", "OTHER"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+	@Override
+	public String getGrammarFileName() { return "java-escape"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public GoParser(TokenStream input) {
+		super(input);
+		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SourceFileContext extends ParserRuleContext {
+		public PackageClauseContext packageClause() {
+			return getRuleContext(PackageClauseContext.class,0);
+		}
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public TerminalNode EOF() { return getToken(GoParser.EOF, 0); }
+		public List<ImportDeclContext> importDecl() {
+			return getRuleContexts(ImportDeclContext.class);
+		}
+		public ImportDeclContext importDecl(int i) {
+			return getRuleContext(ImportDeclContext.class,i);
+		}
+		public List<FunctionDeclContext> functionDecl() {
+			return getRuleContexts(FunctionDeclContext.class);
+		}
+		public FunctionDeclContext functionDecl(int i) {
+			return getRuleContext(FunctionDeclContext.class,i);
+		}
+		public List<MethodDeclContext> methodDecl() {
+			return getRuleContexts(MethodDeclContext.class);
+		}
+		public MethodDeclContext methodDecl(int i) {
+			return getRuleContext(MethodDeclContext.class,i);
+		}
+		public List<DeclarationContext> declaration() {
+			return getRuleContexts(DeclarationContext.class);
+		}
+		public DeclarationContext declaration(int i) {
+			return getRuleContext(DeclarationContext.class,i);
+		}
+		public SourceFileContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_sourceFile; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSourceFile(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSourceFile(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSourceFile(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SourceFileContext sourceFile() throws RecognitionException {
+		SourceFileContext _localctx = new SourceFileContext(_ctx, getState());
+		enterRule(_localctx, 0, RULE_sourceFile);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(198);
+			packageClause();
+			setState(199);
+			eos();
+			setState(205);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==IMPORT) {
+				{
+				{
+				setState(200);
+				importDecl();
+				setState(201);
+				eos();
+				}
+				}
+				setState(207);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(217);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (((_la) & ~0x3f) == 0 && ((1L << _la) & 34668552L) != 0) {
+				{
+				{
+				setState(211);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
+				case 1:
+					{
+					setState(208);
+					functionDecl();
+					}
+					break;
+				case 2:
+					{
+					setState(209);
+					methodDecl();
+					}
+					break;
+				case 3:
+					{
+					setState(210);
+					declaration();
+					}
+					break;
+				}
+				setState(213);
+				eos();
+				}
+				}
+				setState(219);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(220);
+			match(EOF);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class PackageClauseContext extends ParserRuleContext {
+		public Token packageName;
+		public TerminalNode PACKAGE() { return getToken(GoParser.PACKAGE, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public PackageClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_packageClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterPackageClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitPackageClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitPackageClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final PackageClauseContext packageClause() throws RecognitionException {
+		PackageClauseContext _localctx = new PackageClauseContext(_ctx, getState());
+		enterRule(_localctx, 2, RULE_packageClause);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(222);
+			match(PACKAGE);
+			setState(223);
+			((PackageClauseContext)_localctx).packageName = match(IDENTIFIER);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ImportDeclContext extends ParserRuleContext {
+		public TerminalNode IMPORT() { return getToken(GoParser.IMPORT, 0); }
+		public List<ImportSpecContext> importSpec() {
+			return getRuleContexts(ImportSpecContext.class);
+		}
+		public ImportSpecContext importSpec(int i) {
+			return getRuleContext(ImportSpecContext.class,i);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public ImportDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_importDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterImportDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitImportDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitImportDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ImportDeclContext importDecl() throws RecognitionException {
+		ImportDeclContext _localctx = new ImportDeclContext(_ctx, getState());
+		enterRule(_localctx, 4, RULE_importDecl);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(225);
+			match(IMPORT);
+			setState(237);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case IDENTIFIER:
+			case DOT:
+			case RAW_STRING_LIT:
+			case INTERPRETED_STRING_LIT:
+				{
+				setState(226);
+				importSpec();
+				}
+				break;
+			case L_PAREN:
+				{
+				setState(227);
+				match(L_PAREN);
+				setState(233);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while ((((_la - 27)) & ~0x3f) == 0 && ((1L << (_la - 27)) & 6755399441057793L) != 0) {
+					{
+					{
+					setState(228);
+					importSpec();
+					setState(229);
+					eos();
+					}
+					}
+					setState(235);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(236);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ImportSpecContext extends ParserRuleContext {
+		public Token alias;
+		public ImportPathContext importPath() {
+			return getRuleContext(ImportPathContext.class,0);
+		}
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public ImportSpecContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_importSpec; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterImportSpec(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitImportSpec(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitImportSpec(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ImportSpecContext importSpec() throws RecognitionException {
+		ImportSpecContext _localctx = new ImportSpecContext(_ctx, getState());
+		enterRule(_localctx, 6, RULE_importSpec);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(240);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==IDENTIFIER || _la==DOT) {
+				{
+				setState(239);
+				((ImportSpecContext)_localctx).alias = _input.LT(1);
+				_la = _input.LA(1);
+				if ( !(_la==IDENTIFIER || _la==DOT) ) {
+					((ImportSpecContext)_localctx).alias = (Token)_errHandler.recoverInline(this);
+				}
+				else {
+					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+					_errHandler.reportMatch(this);
+					consume();
+				}
+				}
+			}
+
+			setState(242);
+			importPath();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ImportPathContext extends ParserRuleContext {
+		public String_Context string_() {
+			return getRuleContext(String_Context.class,0);
+		}
+		public ImportPathContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_importPath; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterImportPath(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitImportPath(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitImportPath(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ImportPathContext importPath() throws RecognitionException {
+		ImportPathContext _localctx = new ImportPathContext(_ctx, getState());
+		enterRule(_localctx, 8, RULE_importPath);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(244);
+			string_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class DeclarationContext extends ParserRuleContext {
+		public ConstDeclContext constDecl() {
+			return getRuleContext(ConstDeclContext.class,0);
+		}
+		public TypeDeclContext typeDecl() {
+			return getRuleContext(TypeDeclContext.class,0);
+		}
+		public VarDeclContext varDecl() {
+			return getRuleContext(VarDeclContext.class,0);
+		}
+		public DeclarationContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_declaration; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterDeclaration(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitDeclaration(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitDeclaration(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final DeclarationContext declaration() throws RecognitionException {
+		DeclarationContext _localctx = new DeclarationContext(_ctx, getState());
+		enterRule(_localctx, 10, RULE_declaration);
+		try {
+			setState(249);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case CONST:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(246);
+				constDecl();
+				}
+				break;
+			case TYPE:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(247);
+				typeDecl();
+				}
+				break;
+			case VAR:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(248);
+				varDecl();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ConstDeclContext extends ParserRuleContext {
+		public TerminalNode CONST() { return getToken(GoParser.CONST, 0); }
+		public List<ConstSpecContext> constSpec() {
+			return getRuleContexts(ConstSpecContext.class);
+		}
+		public ConstSpecContext constSpec(int i) {
+			return getRuleContext(ConstSpecContext.class,i);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public ConstDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_constDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterConstDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitConstDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitConstDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ConstDeclContext constDecl() throws RecognitionException {
+		ConstDeclContext _localctx = new ConstDeclContext(_ctx, getState());
+		enterRule(_localctx, 12, RULE_constDecl);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(251);
+			match(CONST);
+			setState(263);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case IDENTIFIER:
+				{
+				setState(252);
+				constSpec();
+				}
+				break;
+			case L_PAREN:
+				{
+				setState(253);
+				match(L_PAREN);
+				setState(259);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while (_la==IDENTIFIER) {
+					{
+					{
+					setState(254);
+					constSpec();
+					setState(255);
+					eos();
+					}
+					}
+					setState(261);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(262);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ConstSpecContext extends ParserRuleContext {
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public ConstSpecContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_constSpec; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterConstSpec(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitConstSpec(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitConstSpec(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ConstSpecContext constSpec() throws RecognitionException {
+		ConstSpecContext _localctx = new ConstSpecContext(_ctx, getState());
+		enterRule(_localctx, 14, RULE_constSpec);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(265);
+			identifierList();
+			setState(271);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
+			case 1:
+				{
+				setState(267);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -6917529022943457768L) != 0) {
+					{
+					setState(266);
+					type_();
+					}
+				}
+
+				setState(269);
+				match(ASSIGN);
+				setState(270);
+				expressionList();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class IdentifierListContext extends ParserRuleContext {
+		public List<TerminalNode> IDENTIFIER() { return getTokens(GoParser.IDENTIFIER); }
+		public TerminalNode IDENTIFIER(int i) {
+			return getToken(GoParser.IDENTIFIER, i);
+		}
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public IdentifierListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_identifierList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterIdentifierList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitIdentifierList(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitIdentifierList(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final IdentifierListContext identifierList() throws RecognitionException {
+		IdentifierListContext _localctx = new IdentifierListContext(_ctx, getState());
+		enterRule(_localctx, 16, RULE_identifierList);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(273);
+			match(IDENTIFIER);
+			setState(278);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,11,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					{
+					{
+					setState(274);
+					match(COMMA);
+					setState(275);
+					match(IDENTIFIER);
+					}
+					} 
+				}
+				setState(280);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,11,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExpressionListContext extends ParserRuleContext {
+		public List<ExpressionContext> expression() {
+			return getRuleContexts(ExpressionContext.class);
+		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public ExpressionListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_expressionList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExpressionList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExpressionList(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExpressionList(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExpressionListContext expressionList() throws RecognitionException {
+		ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState());
+		enterRule(_localctx, 18, RULE_expressionList);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(281);
+			expression(0);
+			setState(286);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					{
+					{
+					setState(282);
+					match(COMMA);
+					setState(283);
+					expression(0);
+					}
+					} 
+				}
+				setState(288);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeDeclContext extends ParserRuleContext {
+		public TerminalNode TYPE() { return getToken(GoParser.TYPE, 0); }
+		public List<TypeSpecContext> typeSpec() {
+			return getRuleContexts(TypeSpecContext.class);
+		}
+		public TypeSpecContext typeSpec(int i) {
+			return getRuleContext(TypeSpecContext.class,i);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public TypeDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeDeclContext typeDecl() throws RecognitionException {
+		TypeDeclContext _localctx = new TypeDeclContext(_ctx, getState());
+		enterRule(_localctx, 20, RULE_typeDecl);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(289);
+			match(TYPE);
+			setState(301);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case IDENTIFIER:
+				{
+				setState(290);
+				typeSpec();
+				}
+				break;
+			case L_PAREN:
+				{
+				setState(291);
+				match(L_PAREN);
+				setState(297);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while (_la==IDENTIFIER) {
+					{
+					{
+					setState(292);
+					typeSpec();
+					setState(293);
+					eos();
+					}
+					}
+					setState(299);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(300);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeSpecContext extends ParserRuleContext {
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public TypeSpecContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeSpec; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeSpec(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeSpec(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeSpec(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeSpecContext typeSpec() throws RecognitionException {
+		TypeSpecContext _localctx = new TypeSpecContext(_ctx, getState());
+		enterRule(_localctx, 22, RULE_typeSpec);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(303);
+			match(IDENTIFIER);
+			setState(305);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==ASSIGN) {
+				{
+				setState(304);
+				match(ASSIGN);
+				}
+			}
+
+			setState(307);
+			type_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class FunctionDeclContext extends ParserRuleContext {
+		public TerminalNode FUNC() { return getToken(GoParser.FUNC, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public SignatureContext signature() {
+			return getRuleContext(SignatureContext.class,0);
+		}
+		public BlockContext block() {
+			return getRuleContext(BlockContext.class,0);
+		}
+		public FunctionDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_functionDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterFunctionDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitFunctionDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitFunctionDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final FunctionDeclContext functionDecl() throws RecognitionException {
+		FunctionDeclContext _localctx = new FunctionDeclContext(_ctx, getState());
+		enterRule(_localctx, 24, RULE_functionDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(309);
+			match(FUNC);
+			setState(310);
+			match(IDENTIFIER);
+			{
+			setState(311);
+			signature();
+			setState(313);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
+			case 1:
+				{
+				setState(312);
+				block();
+				}
+				break;
+			}
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class MethodDeclContext extends ParserRuleContext {
+		public TerminalNode FUNC() { return getToken(GoParser.FUNC, 0); }
+		public ReceiverContext receiver() {
+			return getRuleContext(ReceiverContext.class,0);
+		}
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public SignatureContext signature() {
+			return getRuleContext(SignatureContext.class,0);
+		}
+		public BlockContext block() {
+			return getRuleContext(BlockContext.class,0);
+		}
+		public MethodDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_methodDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterMethodDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitMethodDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitMethodDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final MethodDeclContext methodDecl() throws RecognitionException {
+		MethodDeclContext _localctx = new MethodDeclContext(_ctx, getState());
+		enterRule(_localctx, 26, RULE_methodDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(315);
+			match(FUNC);
+			setState(316);
+			receiver();
+			setState(317);
+			match(IDENTIFIER);
+			{
+			setState(318);
+			signature();
+			setState(320);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
+			case 1:
+				{
+				setState(319);
+				block();
+				}
+				break;
+			}
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ReceiverContext extends ParserRuleContext {
+		public ParametersContext parameters() {
+			return getRuleContext(ParametersContext.class,0);
+		}
+		public ReceiverContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_receiver; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterReceiver(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitReceiver(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitReceiver(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ReceiverContext receiver() throws RecognitionException {
+		ReceiverContext _localctx = new ReceiverContext(_ctx, getState());
+		enterRule(_localctx, 28, RULE_receiver);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(322);
+			parameters();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class VarDeclContext extends ParserRuleContext {
+		public TerminalNode VAR() { return getToken(GoParser.VAR, 0); }
+		public List<VarSpecContext> varSpec() {
+			return getRuleContexts(VarSpecContext.class);
+		}
+		public VarSpecContext varSpec(int i) {
+			return getRuleContext(VarSpecContext.class,i);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public VarDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_varDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterVarDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitVarDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitVarDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final VarDeclContext varDecl() throws RecognitionException {
+		VarDeclContext _localctx = new VarDeclContext(_ctx, getState());
+		enterRule(_localctx, 30, RULE_varDecl);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(324);
+			match(VAR);
+			setState(336);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case IDENTIFIER:
+				{
+				setState(325);
+				varSpec();
+				}
+				break;
+			case L_PAREN:
+				{
+				setState(326);
+				match(L_PAREN);
+				setState(332);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while (_la==IDENTIFIER) {
+					{
+					{
+					setState(327);
+					varSpec();
+					setState(328);
+					eos();
+					}
+					}
+					setState(334);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(335);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class VarSpecContext extends ParserRuleContext {
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public VarSpecContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_varSpec; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterVarSpec(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitVarSpec(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitVarSpec(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final VarSpecContext varSpec() throws RecognitionException {
+		VarSpecContext _localctx = new VarSpecContext(_ctx, getState());
+		enterRule(_localctx, 32, RULE_varSpec);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(338);
+			identifierList();
+			setState(346);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case IDENTIFIER:
+			case L_PAREN:
+			case L_BRACKET:
+			case STAR:
+			case RECEIVE:
+				{
+				setState(339);
+				type_();
+				setState(342);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
+				case 1:
+					{
+					setState(340);
+					match(ASSIGN);
+					setState(341);
+					expressionList();
+					}
+					break;
+				}
+				}
+				break;
+			case ASSIGN:
+				{
+				setState(344);
+				match(ASSIGN);
+				setState(345);
+				expressionList();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class BlockContext extends ParserRuleContext {
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public StatementListContext statementList() {
+			return getRuleContext(StatementListContext.class,0);
+		}
+		public BlockContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_block; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterBlock(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitBlock(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitBlock(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final BlockContext block() throws RecognitionException {
+		BlockContext _localctx = new BlockContext(_ctx, getState());
+		enterRule(_localctx, 34, RULE_block);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(348);
+			match(L_CURLY);
+			setState(350);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
+			case 1:
+				{
+				setState(349);
+				statementList();
+				}
+				break;
+			}
+			setState(352);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class StatementListContext extends ParserRuleContext {
+		public List<StatementContext> statement() {
+			return getRuleContexts(StatementContext.class);
+		}
+		public StatementContext statement(int i) {
+			return getRuleContext(StatementContext.class,i);
+		}
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public List<TerminalNode> SEMI() { return getTokens(GoParser.SEMI); }
+		public TerminalNode SEMI(int i) {
+			return getToken(GoParser.SEMI, i);
+		}
+		public List<TerminalNode> EOS() { return getTokens(GoParser.EOS); }
+		public TerminalNode EOS(int i) {
+			return getToken(GoParser.EOS, i);
+		}
+		public StatementListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_statementList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterStatementList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitStatementList(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitStatementList(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final StatementListContext statementList() throws RecognitionException {
+		StatementListContext _localctx = new StatementListContext(_ctx, getState());
+		enterRule(_localctx, 36, RULE_statementList);
+		int _la;
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(366); 
+			_errHandler.sync(this);
+			_alt = 1;
+			do {
+				switch (_alt) {
+				case 1:
+					{
+					{
+					setState(361);
+					_errHandler.sync(this);
+					switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
+					case 1:
+						{
+						setState(355);
+						_errHandler.sync(this);
+						_la = _input.LA(1);
+						if (_la==SEMI) {
+							{
+							setState(354);
+							match(SEMI);
+							}
+						}
+
+						}
+						break;
+					case 2:
+						{
+						setState(358);
+						_errHandler.sync(this);
+						_la = _input.LA(1);
+						if (_la==EOS) {
+							{
+							setState(357);
+							match(EOS);
+							}
+						}
+
+						}
+						break;
+					case 3:
+						{
+						setState(360);
+						if (!(this.closingBracket())) throw new FailedPredicateException(this, "this.closingBracket()");
+						}
+						break;
+					}
+					setState(363);
+					statement();
+					setState(364);
+					eos();
+					}
+					}
+					break;
+				default:
+					throw new NoViableAltException(this);
+				}
+				setState(368); 
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class StatementContext extends ParserRuleContext {
+		public DeclarationContext declaration() {
+			return getRuleContext(DeclarationContext.class,0);
+		}
+		public LabeledStmtContext labeledStmt() {
+			return getRuleContext(LabeledStmtContext.class,0);
+		}
+		public SimpleStmtContext simpleStmt() {
+			return getRuleContext(SimpleStmtContext.class,0);
+		}
+		public GoStmtContext goStmt() {
+			return getRuleContext(GoStmtContext.class,0);
+		}
+		public ReturnStmtContext returnStmt() {
+			return getRuleContext(ReturnStmtContext.class,0);
+		}
+		public BreakStmtContext breakStmt() {
+			return getRuleContext(BreakStmtContext.class,0);
+		}
+		public ContinueStmtContext continueStmt() {
+			return getRuleContext(ContinueStmtContext.class,0);
+		}
+		public GotoStmtContext gotoStmt() {
+			return getRuleContext(GotoStmtContext.class,0);
+		}
+		public FallthroughStmtContext fallthroughStmt() {
+			return getRuleContext(FallthroughStmtContext.class,0);
+		}
+		public BlockContext block() {
+			return getRuleContext(BlockContext.class,0);
+		}
+		public IfStmtContext ifStmt() {
+			return getRuleContext(IfStmtContext.class,0);
+		}
+		public SwitchStmtContext switchStmt() {
+			return getRuleContext(SwitchStmtContext.class,0);
+		}
+		public SelectStmtContext selectStmt() {
+			return getRuleContext(SelectStmtContext.class,0);
+		}
+		public ForStmtContext forStmt() {
+			return getRuleContext(ForStmtContext.class,0);
+		}
+		public DeferStmtContext deferStmt() {
+			return getRuleContext(DeferStmtContext.class,0);
+		}
+		public StatementContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_statement; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterStatement(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitStatement(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitStatement(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final StatementContext statement() throws RecognitionException {
+		StatementContext _localctx = new StatementContext(_ctx, getState());
+		enterRule(_localctx, 38, RULE_statement);
+		try {
+			setState(385);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(370);
+				declaration();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(371);
+				labeledStmt();
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(372);
+				simpleStmt();
+				}
+				break;
+			case 4:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(373);
+				goStmt();
+				}
+				break;
+			case 5:
+				enterOuterAlt(_localctx, 5);
+				{
+				setState(374);
+				returnStmt();
+				}
+				break;
+			case 6:
+				enterOuterAlt(_localctx, 6);
+				{
+				setState(375);
+				breakStmt();
+				}
+				break;
+			case 7:
+				enterOuterAlt(_localctx, 7);
+				{
+				setState(376);
+				continueStmt();
+				}
+				break;
+			case 8:
+				enterOuterAlt(_localctx, 8);
+				{
+				setState(377);
+				gotoStmt();
+				}
+				break;
+			case 9:
+				enterOuterAlt(_localctx, 9);
+				{
+				setState(378);
+				fallthroughStmt();
+				}
+				break;
+			case 10:
+				enterOuterAlt(_localctx, 10);
+				{
+				setState(379);
+				block();
+				}
+				break;
+			case 11:
+				enterOuterAlt(_localctx, 11);
+				{
+				setState(380);
+				ifStmt();
+				}
+				break;
+			case 12:
+				enterOuterAlt(_localctx, 12);
+				{
+				setState(381);
+				switchStmt();
+				}
+				break;
+			case 13:
+				enterOuterAlt(_localctx, 13);
+				{
+				setState(382);
+				selectStmt();
+				}
+				break;
+			case 14:
+				enterOuterAlt(_localctx, 14);
+				{
+				setState(383);
+				forStmt();
+				}
+				break;
+			case 15:
+				enterOuterAlt(_localctx, 15);
+				{
+				setState(384);
+				deferStmt();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SimpleStmtContext extends ParserRuleContext {
+		public SendStmtContext sendStmt() {
+			return getRuleContext(SendStmtContext.class,0);
+		}
+		public IncDecStmtContext incDecStmt() {
+			return getRuleContext(IncDecStmtContext.class,0);
+		}
+		public AssignmentContext assignment() {
+			return getRuleContext(AssignmentContext.class,0);
+		}
+		public ExpressionStmtContext expressionStmt() {
+			return getRuleContext(ExpressionStmtContext.class,0);
+		}
+		public ShortVarDeclContext shortVarDecl() {
+			return getRuleContext(ShortVarDeclContext.class,0);
+		}
+		public SimpleStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_simpleStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSimpleStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSimpleStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSimpleStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SimpleStmtContext simpleStmt() throws RecognitionException {
+		SimpleStmtContext _localctx = new SimpleStmtContext(_ctx, getState());
+		enterRule(_localctx, 40, RULE_simpleStmt);
+		try {
+			setState(392);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(387);
+				sendStmt();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(388);
+				incDecStmt();
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(389);
+				assignment();
+				}
+				break;
+			case 4:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(390);
+				expressionStmt();
+				}
+				break;
+			case 5:
+				enterOuterAlt(_localctx, 5);
+				{
+				setState(391);
+				shortVarDecl();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExpressionStmtContext extends ParserRuleContext {
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public ExpressionStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_expressionStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExpressionStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExpressionStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExpressionStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExpressionStmtContext expressionStmt() throws RecognitionException {
+		ExpressionStmtContext _localctx = new ExpressionStmtContext(_ctx, getState());
+		enterRule(_localctx, 42, RULE_expressionStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(394);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SendStmtContext extends ParserRuleContext {
+		public ExpressionContext channel;
+		public TerminalNode RECEIVE() { return getToken(GoParser.RECEIVE, 0); }
+		public List<ExpressionContext> expression() {
+			return getRuleContexts(ExpressionContext.class);
+		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
+		public SendStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_sendStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSendStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSendStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSendStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SendStmtContext sendStmt() throws RecognitionException {
+		SendStmtContext _localctx = new SendStmtContext(_ctx, getState());
+		enterRule(_localctx, 44, RULE_sendStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(396);
+			((SendStmtContext)_localctx).channel = expression(0);
+			setState(397);
+			match(RECEIVE);
+			setState(398);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class IncDecStmtContext extends ParserRuleContext {
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public TerminalNode PLUS_PLUS() { return getToken(GoParser.PLUS_PLUS, 0); }
+		public TerminalNode MINUS_MINUS() { return getToken(GoParser.MINUS_MINUS, 0); }
+		public IncDecStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_incDecStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterIncDecStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitIncDecStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitIncDecStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final IncDecStmtContext incDecStmt() throws RecognitionException {
+		IncDecStmtContext _localctx = new IncDecStmtContext(_ctx, getState());
+		enterRule(_localctx, 46, RULE_incDecStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(400);
+			expression(0);
+			setState(401);
+			_la = _input.LA(1);
+			if ( !(_la==PLUS_PLUS || _la==MINUS_MINUS) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class AssignmentContext extends ParserRuleContext {
+		public List<ExpressionListContext> expressionList() {
+			return getRuleContexts(ExpressionListContext.class);
+		}
+		public ExpressionListContext expressionList(int i) {
+			return getRuleContext(ExpressionListContext.class,i);
+		}
+		public Assign_opContext assign_op() {
+			return getRuleContext(Assign_opContext.class,0);
+		}
+		public AssignmentContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_assignment; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterAssignment(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitAssignment(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitAssignment(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final AssignmentContext assignment() throws RecognitionException {
+		AssignmentContext _localctx = new AssignmentContext(_ctx, getState());
+		enterRule(_localctx, 48, RULE_assignment);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(403);
+			expressionList();
+			setState(404);
+			assign_op();
+			setState(405);
+			expressionList();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class Assign_opContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public TerminalNode PLUS() { return getToken(GoParser.PLUS, 0); }
+		public TerminalNode MINUS() { return getToken(GoParser.MINUS, 0); }
+		public TerminalNode OR() { return getToken(GoParser.OR, 0); }
+		public TerminalNode CARET() { return getToken(GoParser.CARET, 0); }
+		public TerminalNode STAR() { return getToken(GoParser.STAR, 0); }
+		public TerminalNode DIV() { return getToken(GoParser.DIV, 0); }
+		public TerminalNode MOD() { return getToken(GoParser.MOD, 0); }
+		public TerminalNode LSHIFT() { return getToken(GoParser.LSHIFT, 0); }
+		public TerminalNode RSHIFT() { return getToken(GoParser.RSHIFT, 0); }
+		public TerminalNode AMPERSAND() { return getToken(GoParser.AMPERSAND, 0); }
+		public TerminalNode BIT_CLEAR() { return getToken(GoParser.BIT_CLEAR, 0); }
+		public Assign_opContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_assign_op; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterAssign_op(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitAssign_op(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitAssign_op(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final Assign_opContext assign_op() throws RecognitionException {
+		Assign_opContext _localctx = new Assign_opContext(_ctx, getState());
+		enterRule(_localctx, 50, RULE_assign_op);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(408);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 9077005048965234688L) != 0) {
+				{
+				setState(407);
+				_la = _input.LA(1);
+				if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 9077005048965234688L) != 0) ) {
+				_errHandler.recoverInline(this);
+				}
+				else {
+					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+					_errHandler.reportMatch(this);
+					consume();
+				}
+				}
+			}
+
+			setState(410);
+			match(ASSIGN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ShortVarDeclContext extends ParserRuleContext {
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public TerminalNode DECLARE_ASSIGN() { return getToken(GoParser.DECLARE_ASSIGN, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public ShortVarDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_shortVarDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterShortVarDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitShortVarDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitShortVarDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ShortVarDeclContext shortVarDecl() throws RecognitionException {
+		ShortVarDeclContext _localctx = new ShortVarDeclContext(_ctx, getState());
+		enterRule(_localctx, 52, RULE_shortVarDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(412);
+			identifierList();
+			setState(413);
+			match(DECLARE_ASSIGN);
+			setState(414);
+			expressionList();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class EmptyStmtContext extends ParserRuleContext {
+		public TerminalNode EOS() { return getToken(GoParser.EOS, 0); }
+		public TerminalNode SEMI() { return getToken(GoParser.SEMI, 0); }
+		public EmptyStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_emptyStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterEmptyStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitEmptyStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitEmptyStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final EmptyStmtContext emptyStmt() throws RecognitionException {
+		EmptyStmtContext _localctx = new EmptyStmtContext(_ctx, getState());
+		enterRule(_localctx, 54, RULE_emptyStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(416);
+			_la = _input.LA(1);
+			if ( !(_la==SEMI || _la==EOS) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class LabeledStmtContext extends ParserRuleContext {
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public TerminalNode COLON() { return getToken(GoParser.COLON, 0); }
+		public StatementContext statement() {
+			return getRuleContext(StatementContext.class,0);
+		}
+		public LabeledStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_labeledStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterLabeledStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitLabeledStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitLabeledStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final LabeledStmtContext labeledStmt() throws RecognitionException {
+		LabeledStmtContext _localctx = new LabeledStmtContext(_ctx, getState());
+		enterRule(_localctx, 56, RULE_labeledStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(418);
+			match(IDENTIFIER);
+			setState(419);
+			match(COLON);
+			setState(421);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
+			case 1:
+				{
+				setState(420);
+				statement();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ReturnStmtContext extends ParserRuleContext {
+		public TerminalNode RETURN() { return getToken(GoParser.RETURN, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public ReturnStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_returnStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterReturnStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitReturnStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitReturnStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ReturnStmtContext returnStmt() throws RecognitionException {
+		ReturnStmtContext _localctx = new ReturnStmtContext(_ctx, getState());
+		enterRule(_localctx, 58, RULE_returnStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(423);
+			match(RETURN);
+			setState(425);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
+			case 1:
+				{
+				setState(424);
+				expressionList();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class BreakStmtContext extends ParserRuleContext {
+		public TerminalNode BREAK() { return getToken(GoParser.BREAK, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public BreakStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_breakStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterBreakStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitBreakStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitBreakStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final BreakStmtContext breakStmt() throws RecognitionException {
+		BreakStmtContext _localctx = new BreakStmtContext(_ctx, getState());
+		enterRule(_localctx, 60, RULE_breakStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(427);
+			match(BREAK);
+			setState(429);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) {
+			case 1:
+				{
+				setState(428);
+				match(IDENTIFIER);
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ContinueStmtContext extends ParserRuleContext {
+		public TerminalNode CONTINUE() { return getToken(GoParser.CONTINUE, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public ContinueStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_continueStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterContinueStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitContinueStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitContinueStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ContinueStmtContext continueStmt() throws RecognitionException {
+		ContinueStmtContext _localctx = new ContinueStmtContext(_ctx, getState());
+		enterRule(_localctx, 62, RULE_continueStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(431);
+			match(CONTINUE);
+			setState(433);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
+			case 1:
+				{
+				setState(432);
+				match(IDENTIFIER);
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class GotoStmtContext extends ParserRuleContext {
+		public TerminalNode GOTO() { return getToken(GoParser.GOTO, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public GotoStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_gotoStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterGotoStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitGotoStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitGotoStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final GotoStmtContext gotoStmt() throws RecognitionException {
+		GotoStmtContext _localctx = new GotoStmtContext(_ctx, getState());
+		enterRule(_localctx, 64, RULE_gotoStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(435);
+			match(GOTO);
+			setState(436);
+			match(IDENTIFIER);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class FallthroughStmtContext extends ParserRuleContext {
+		public TerminalNode FALLTHROUGH() { return getToken(GoParser.FALLTHROUGH, 0); }
+		public FallthroughStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_fallthroughStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterFallthroughStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitFallthroughStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitFallthroughStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final FallthroughStmtContext fallthroughStmt() throws RecognitionException {
+		FallthroughStmtContext _localctx = new FallthroughStmtContext(_ctx, getState());
+		enterRule(_localctx, 66, RULE_fallthroughStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(438);
+			match(FALLTHROUGH);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class DeferStmtContext extends ParserRuleContext {
+		public TerminalNode DEFER() { return getToken(GoParser.DEFER, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public DeferStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_deferStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterDeferStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitDeferStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitDeferStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final DeferStmtContext deferStmt() throws RecognitionException {
+		DeferStmtContext _localctx = new DeferStmtContext(_ctx, getState());
+		enterRule(_localctx, 68, RULE_deferStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(440);
+			match(DEFER);
+			setState(441);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class IfStmtContext extends ParserRuleContext {
+		public TerminalNode IF() { return getToken(GoParser.IF, 0); }
+		public List<BlockContext> block() {
+			return getRuleContexts(BlockContext.class);
+		}
+		public BlockContext block(int i) {
+			return getRuleContext(BlockContext.class,i);
+		}
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public EosContext eos() {
+			return getRuleContext(EosContext.class,0);
+		}
+		public SimpleStmtContext simpleStmt() {
+			return getRuleContext(SimpleStmtContext.class,0);
+		}
+		public TerminalNode ELSE() { return getToken(GoParser.ELSE, 0); }
+		public IfStmtContext ifStmt() {
+			return getRuleContext(IfStmtContext.class,0);
+		}
+		public IfStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_ifStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterIfStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitIfStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitIfStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final IfStmtContext ifStmt() throws RecognitionException {
+		IfStmtContext _localctx = new IfStmtContext(_ctx, getState());
+		enterRule(_localctx, 70, RULE_ifStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(443);
+			match(IF);
+			setState(452);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
+			case 1:
+				{
+				setState(444);
+				expression(0);
+				}
+				break;
+			case 2:
+				{
+				setState(445);
+				eos();
+				setState(446);
+				expression(0);
+				}
+				break;
+			case 3:
+				{
+				setState(448);
+				simpleStmt();
+				setState(449);
+				eos();
+				setState(450);
+				expression(0);
+				}
+				break;
+			}
+			setState(454);
+			block();
+			setState(460);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
+			case 1:
+				{
+				setState(455);
+				match(ELSE);
+				setState(458);
+				_errHandler.sync(this);
+				switch (_input.LA(1)) {
+				case IF:
+					{
+					setState(456);
+					ifStmt();
+					}
+					break;
+				case L_CURLY:
+					{
+					setState(457);
+					block();
+					}
+					break;
+				default:
+					throw new NoViableAltException(this);
+				}
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SwitchStmtContext extends ParserRuleContext {
+		public ExprSwitchStmtContext exprSwitchStmt() {
+			return getRuleContext(ExprSwitchStmtContext.class,0);
+		}
+		public TypeSwitchStmtContext typeSwitchStmt() {
+			return getRuleContext(TypeSwitchStmtContext.class,0);
+		}
+		public SwitchStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_switchStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSwitchStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSwitchStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSwitchStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SwitchStmtContext switchStmt() throws RecognitionException {
+		SwitchStmtContext _localctx = new SwitchStmtContext(_ctx, getState());
+		enterRule(_localctx, 72, RULE_switchStmt);
+		try {
+			setState(464);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(462);
+				exprSwitchStmt();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(463);
+				typeSwitchStmt();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExprSwitchStmtContext extends ParserRuleContext {
+		public TerminalNode SWITCH() { return getToken(GoParser.SWITCH, 0); }
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public EosContext eos() {
+			return getRuleContext(EosContext.class,0);
+		}
+		public List<ExprCaseClauseContext> exprCaseClause() {
+			return getRuleContexts(ExprCaseClauseContext.class);
+		}
+		public ExprCaseClauseContext exprCaseClause(int i) {
+			return getRuleContext(ExprCaseClauseContext.class,i);
+		}
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public SimpleStmtContext simpleStmt() {
+			return getRuleContext(SimpleStmtContext.class,0);
+		}
+		public ExprSwitchStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_exprSwitchStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExprSwitchStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExprSwitchStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExprSwitchStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExprSwitchStmtContext exprSwitchStmt() throws RecognitionException {
+		ExprSwitchStmtContext _localctx = new ExprSwitchStmtContext(_ctx, getState());
+		enterRule(_localctx, 74, RULE_exprSwitchStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(466);
+			match(SWITCH);
+			setState(477);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) {
+			case 1:
+				{
+				setState(468);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(467);
+					expression(0);
+					}
+				}
+
+				}
+				break;
+			case 2:
+				{
+				setState(471);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
+				case 1:
+					{
+					setState(470);
+					simpleStmt();
+					}
+					break;
+				}
+				setState(473);
+				eos();
+				setState(475);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(474);
+					expression(0);
+					}
+				}
+
+				}
+				break;
+			}
+			setState(479);
+			match(L_CURLY);
+			setState(483);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==DEFAULT || _la==CASE) {
+				{
+				{
+				setState(480);
+				exprCaseClause();
+				}
+				}
+				setState(485);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(486);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExprCaseClauseContext extends ParserRuleContext {
+		public ExprSwitchCaseContext exprSwitchCase() {
+			return getRuleContext(ExprSwitchCaseContext.class,0);
+		}
+		public TerminalNode COLON() { return getToken(GoParser.COLON, 0); }
+		public StatementListContext statementList() {
+			return getRuleContext(StatementListContext.class,0);
+		}
+		public ExprCaseClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_exprCaseClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExprCaseClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExprCaseClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExprCaseClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExprCaseClauseContext exprCaseClause() throws RecognitionException {
+		ExprCaseClauseContext _localctx = new ExprCaseClauseContext(_ctx, getState());
+		enterRule(_localctx, 76, RULE_exprCaseClause);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(488);
+			exprSwitchCase();
+			setState(489);
+			match(COLON);
+			setState(491);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) {
+			case 1:
+				{
+				setState(490);
+				statementList();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExprSwitchCaseContext extends ParserRuleContext {
+		public TerminalNode CASE() { return getToken(GoParser.CASE, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public TerminalNode DEFAULT() { return getToken(GoParser.DEFAULT, 0); }
+		public ExprSwitchCaseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_exprSwitchCase; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExprSwitchCase(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExprSwitchCase(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExprSwitchCase(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExprSwitchCaseContext exprSwitchCase() throws RecognitionException {
+		ExprSwitchCaseContext _localctx = new ExprSwitchCaseContext(_ctx, getState());
+		enterRule(_localctx, 78, RULE_exprSwitchCase);
+		try {
+			setState(496);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case CASE:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(493);
+				match(CASE);
+				setState(494);
+				expressionList();
+				}
+				break;
+			case DEFAULT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(495);
+				match(DEFAULT);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeSwitchStmtContext extends ParserRuleContext {
+		public TerminalNode SWITCH() { return getToken(GoParser.SWITCH, 0); }
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public TypeSwitchGuardContext typeSwitchGuard() {
+			return getRuleContext(TypeSwitchGuardContext.class,0);
+		}
+		public EosContext eos() {
+			return getRuleContext(EosContext.class,0);
+		}
+		public SimpleStmtContext simpleStmt() {
+			return getRuleContext(SimpleStmtContext.class,0);
+		}
+		public List<TypeCaseClauseContext> typeCaseClause() {
+			return getRuleContexts(TypeCaseClauseContext.class);
+		}
+		public TypeCaseClauseContext typeCaseClause(int i) {
+			return getRuleContext(TypeCaseClauseContext.class,i);
+		}
+		public TypeSwitchStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeSwitchStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeSwitchStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeSwitchStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeSwitchStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeSwitchStmtContext typeSwitchStmt() throws RecognitionException {
+		TypeSwitchStmtContext _localctx = new TypeSwitchStmtContext(_ctx, getState());
+		enterRule(_localctx, 80, RULE_typeSwitchStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(498);
+			match(SWITCH);
+			setState(507);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) {
+			case 1:
+				{
+				setState(499);
+				typeSwitchGuard();
+				}
+				break;
+			case 2:
+				{
+				setState(500);
+				eos();
+				setState(501);
+				typeSwitchGuard();
+				}
+				break;
+			case 3:
+				{
+				setState(503);
+				simpleStmt();
+				setState(504);
+				eos();
+				setState(505);
+				typeSwitchGuard();
+				}
+				break;
+			}
+			setState(509);
+			match(L_CURLY);
+			setState(513);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==DEFAULT || _la==CASE) {
+				{
+				{
+				setState(510);
+				typeCaseClause();
+				}
+				}
+				setState(515);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(516);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeSwitchGuardContext extends ParserRuleContext {
+		public PrimaryExprContext primaryExpr() {
+			return getRuleContext(PrimaryExprContext.class,0);
+		}
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode TYPE() { return getToken(GoParser.TYPE, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public TerminalNode DECLARE_ASSIGN() { return getToken(GoParser.DECLARE_ASSIGN, 0); }
+		public TypeSwitchGuardContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeSwitchGuard; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeSwitchGuard(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeSwitchGuard(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeSwitchGuard(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeSwitchGuardContext typeSwitchGuard() throws RecognitionException {
+		TypeSwitchGuardContext _localctx = new TypeSwitchGuardContext(_ctx, getState());
+		enterRule(_localctx, 82, RULE_typeSwitchGuard);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(520);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) {
+			case 1:
+				{
+				setState(518);
+				match(IDENTIFIER);
+				setState(519);
+				match(DECLARE_ASSIGN);
+				}
+				break;
+			}
+			setState(522);
+			primaryExpr(0);
+			setState(523);
+			match(DOT);
+			setState(524);
+			match(L_PAREN);
+			setState(525);
+			match(TYPE);
+			setState(526);
+			match(R_PAREN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeCaseClauseContext extends ParserRuleContext {
+		public TypeSwitchCaseContext typeSwitchCase() {
+			return getRuleContext(TypeSwitchCaseContext.class,0);
+		}
+		public TerminalNode COLON() { return getToken(GoParser.COLON, 0); }
+		public StatementListContext statementList() {
+			return getRuleContext(StatementListContext.class,0);
+		}
+		public TypeCaseClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeCaseClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeCaseClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeCaseClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeCaseClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeCaseClauseContext typeCaseClause() throws RecognitionException {
+		TypeCaseClauseContext _localctx = new TypeCaseClauseContext(_ctx, getState());
+		enterRule(_localctx, 84, RULE_typeCaseClause);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(528);
+			typeSwitchCase();
+			setState(529);
+			match(COLON);
+			setState(531);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) {
+			case 1:
+				{
+				setState(530);
+				statementList();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeSwitchCaseContext extends ParserRuleContext {
+		public TerminalNode CASE() { return getToken(GoParser.CASE, 0); }
+		public TypeListContext typeList() {
+			return getRuleContext(TypeListContext.class,0);
+		}
+		public TerminalNode DEFAULT() { return getToken(GoParser.DEFAULT, 0); }
+		public TypeSwitchCaseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeSwitchCase; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeSwitchCase(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeSwitchCase(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeSwitchCase(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeSwitchCaseContext typeSwitchCase() throws RecognitionException {
+		TypeSwitchCaseContext _localctx = new TypeSwitchCaseContext(_ctx, getState());
+		enterRule(_localctx, 86, RULE_typeSwitchCase);
+		try {
+			setState(536);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case CASE:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(533);
+				match(CASE);
+				setState(534);
+				typeList();
+				}
+				break;
+			case DEFAULT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(535);
+				match(DEFAULT);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeListContext extends ParserRuleContext {
+		public List<Type_Context> type_() {
+			return getRuleContexts(Type_Context.class);
+		}
+		public Type_Context type_(int i) {
+			return getRuleContext(Type_Context.class,i);
+		}
+		public List<TerminalNode> NIL_LIT() { return getTokens(GoParser.NIL_LIT); }
+		public TerminalNode NIL_LIT(int i) {
+			return getToken(GoParser.NIL_LIT, i);
+		}
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public TypeListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeList(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeList(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeListContext typeList() throws RecognitionException {
+		TypeListContext _localctx = new TypeListContext(_ctx, getState());
+		enterRule(_localctx, 88, RULE_typeList);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(540);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case IDENTIFIER:
+			case L_PAREN:
+			case L_BRACKET:
+			case STAR:
+			case RECEIVE:
+				{
+				setState(538);
+				type_();
+				}
+				break;
+			case NIL_LIT:
+				{
+				setState(539);
+				match(NIL_LIT);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			setState(549);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==COMMA) {
+				{
+				{
+				setState(542);
+				match(COMMA);
+				setState(545);
+				_errHandler.sync(this);
+				switch (_input.LA(1)) {
+				case FUNC:
+				case INTERFACE:
+				case MAP:
+				case STRUCT:
+				case CHAN:
+				case IDENTIFIER:
+				case L_PAREN:
+				case L_BRACKET:
+				case STAR:
+				case RECEIVE:
+					{
+					setState(543);
+					type_();
+					}
+					break;
+				case NIL_LIT:
+					{
+					setState(544);
+					match(NIL_LIT);
+					}
+					break;
+				default:
+					throw new NoViableAltException(this);
+				}
+				}
+				}
+				setState(551);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SelectStmtContext extends ParserRuleContext {
+		public TerminalNode SELECT() { return getToken(GoParser.SELECT, 0); }
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public List<CommClauseContext> commClause() {
+			return getRuleContexts(CommClauseContext.class);
+		}
+		public CommClauseContext commClause(int i) {
+			return getRuleContext(CommClauseContext.class,i);
+		}
+		public SelectStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_selectStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSelectStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSelectStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSelectStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SelectStmtContext selectStmt() throws RecognitionException {
+		SelectStmtContext _localctx = new SelectStmtContext(_ctx, getState());
+		enterRule(_localctx, 90, RULE_selectStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(552);
+			match(SELECT);
+			setState(553);
+			match(L_CURLY);
+			setState(557);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==DEFAULT || _la==CASE) {
+				{
+				{
+				setState(554);
+				commClause();
+				}
+				}
+				setState(559);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(560);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class CommClauseContext extends ParserRuleContext {
+		public CommCaseContext commCase() {
+			return getRuleContext(CommCaseContext.class,0);
+		}
+		public TerminalNode COLON() { return getToken(GoParser.COLON, 0); }
+		public StatementListContext statementList() {
+			return getRuleContext(StatementListContext.class,0);
+		}
+		public CommClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_commClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterCommClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitCommClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitCommClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final CommClauseContext commClause() throws RecognitionException {
+		CommClauseContext _localctx = new CommClauseContext(_ctx, getState());
+		enterRule(_localctx, 92, RULE_commClause);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(562);
+			commCase();
+			setState(563);
+			match(COLON);
+			setState(565);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
+			case 1:
+				{
+				setState(564);
+				statementList();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class CommCaseContext extends ParserRuleContext {
+		public TerminalNode CASE() { return getToken(GoParser.CASE, 0); }
+		public SendStmtContext sendStmt() {
+			return getRuleContext(SendStmtContext.class,0);
+		}
+		public RecvStmtContext recvStmt() {
+			return getRuleContext(RecvStmtContext.class,0);
+		}
+		public TerminalNode DEFAULT() { return getToken(GoParser.DEFAULT, 0); }
+		public CommCaseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_commCase; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterCommCase(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitCommCase(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitCommCase(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final CommCaseContext commCase() throws RecognitionException {
+		CommCaseContext _localctx = new CommCaseContext(_ctx, getState());
+		enterRule(_localctx, 94, RULE_commCase);
+		try {
+			setState(573);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case CASE:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(567);
+				match(CASE);
+				setState(570);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) {
+				case 1:
+					{
+					setState(568);
+					sendStmt();
+					}
+					break;
+				case 2:
+					{
+					setState(569);
+					recvStmt();
+					}
+					break;
+				}
+				}
+				break;
+			case DEFAULT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(572);
+				match(DEFAULT);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class RecvStmtContext extends ParserRuleContext {
+		public ExpressionContext recvExpr;
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public TerminalNode DECLARE_ASSIGN() { return getToken(GoParser.DECLARE_ASSIGN, 0); }
+		public RecvStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_recvStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterRecvStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitRecvStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitRecvStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final RecvStmtContext recvStmt() throws RecognitionException {
+		RecvStmtContext _localctx = new RecvStmtContext(_ctx, getState());
+		enterRule(_localctx, 96, RULE_recvStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(581);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) {
+			case 1:
+				{
+				setState(575);
+				expressionList();
+				setState(576);
+				match(ASSIGN);
+				}
+				break;
+			case 2:
+				{
+				setState(578);
+				identifierList();
+				setState(579);
+				match(DECLARE_ASSIGN);
+				}
+				break;
+			}
+			setState(583);
+			((RecvStmtContext)_localctx).recvExpr = expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ForStmtContext extends ParserRuleContext {
+		public TerminalNode FOR() { return getToken(GoParser.FOR, 0); }
+		public BlockContext block() {
+			return getRuleContext(BlockContext.class,0);
+		}
+		public ForClauseContext forClause() {
+			return getRuleContext(ForClauseContext.class,0);
+		}
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public RangeClauseContext rangeClause() {
+			return getRuleContext(RangeClauseContext.class,0);
+		}
+		public ForStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_forStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterForStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitForStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitForStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ForStmtContext forStmt() throws RecognitionException {
+		ForStmtContext _localctx = new ForStmtContext(_ctx, getState());
+		enterRule(_localctx, 98, RULE_forStmt);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(585);
+			match(FOR);
+			setState(593);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
+			case 1:
+				{
+				setState(587);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(586);
+					expression(0);
+					}
+				}
+
+				}
+				break;
+			case 2:
+				{
+				setState(589);
+				forClause();
+				}
+				break;
+			case 3:
+				{
+				setState(591);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183310598632L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(590);
+					rangeClause();
+					}
+				}
+
+				}
+				break;
+			}
+			setState(595);
+			block();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ForClauseContext extends ParserRuleContext {
+		public SimpleStmtContext initStmt;
+		public SimpleStmtContext postStmt;
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public List<SimpleStmtContext> simpleStmt() {
+			return getRuleContexts(SimpleStmtContext.class);
+		}
+		public SimpleStmtContext simpleStmt(int i) {
+			return getRuleContext(SimpleStmtContext.class,i);
+		}
+		public ForClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_forClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterForClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitForClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitForClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ForClauseContext forClause() throws RecognitionException {
+		ForClauseContext _localctx = new ForClauseContext(_ctx, getState());
+		enterRule(_localctx, 100, RULE_forClause);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(598);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
+			case 1:
+				{
+				setState(597);
+				((ForClauseContext)_localctx).initStmt = simpleStmt();
+				}
+				break;
+			}
+			setState(600);
+			eos();
+			setState(602);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) {
+			case 1:
+				{
+				setState(601);
+				expression(0);
+				}
+				break;
+			}
+			setState(604);
+			eos();
+			setState(606);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+				{
+				setState(605);
+				((ForClauseContext)_localctx).postStmt = simpleStmt();
+				}
+			}
+
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class RangeClauseContext extends ParserRuleContext {
+		public TerminalNode RANGE() { return getToken(GoParser.RANGE, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public TerminalNode ASSIGN() { return getToken(GoParser.ASSIGN, 0); }
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public TerminalNode DECLARE_ASSIGN() { return getToken(GoParser.DECLARE_ASSIGN, 0); }
+		public RangeClauseContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_rangeClause; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterRangeClause(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitRangeClause(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitRangeClause(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final RangeClauseContext rangeClause() throws RecognitionException {
+		RangeClauseContext _localctx = new RangeClauseContext(_ctx, getState());
+		enterRule(_localctx, 102, RULE_rangeClause);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(614);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
+			case 1:
+				{
+				setState(608);
+				expressionList();
+				setState(609);
+				match(ASSIGN);
+				}
+				break;
+			case 2:
+				{
+				setState(611);
+				identifierList();
+				setState(612);
+				match(DECLARE_ASSIGN);
+				}
+				break;
+			}
+			setState(616);
+			match(RANGE);
+			setState(617);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class GoStmtContext extends ParserRuleContext {
+		public TerminalNode GO() { return getToken(GoParser.GO, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public GoStmtContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_goStmt; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterGoStmt(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitGoStmt(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitGoStmt(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final GoStmtContext goStmt() throws RecognitionException {
+		GoStmtContext _localctx = new GoStmtContext(_ctx, getState());
+		enterRule(_localctx, 104, RULE_goStmt);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(619);
+			match(GO);
+			setState(620);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class Type_Context extends ParserRuleContext {
+		public TypeNameContext typeName() {
+			return getRuleContext(TypeNameContext.class,0);
+		}
+		public TypeLitContext typeLit() {
+			return getRuleContext(TypeLitContext.class,0);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public Type_Context(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_type_; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterType_(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitType_(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitType_(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final Type_Context type_() throws RecognitionException {
+		Type_Context _localctx = new Type_Context(_ctx, getState());
+		enterRule(_localctx, 106, RULE_type_);
+		try {
+			setState(628);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case IDENTIFIER:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(622);
+				typeName();
+				}
+				break;
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case L_BRACKET:
+			case STAR:
+			case RECEIVE:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(623);
+				typeLit();
+				}
+				break;
+			case L_PAREN:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(624);
+				match(L_PAREN);
+				setState(625);
+				type_();
+				setState(626);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeNameContext extends ParserRuleContext {
+		public QualifiedIdentContext qualifiedIdent() {
+			return getRuleContext(QualifiedIdentContext.class,0);
+		}
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public TypeNameContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeName; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeName(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeName(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeName(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeNameContext typeName() throws RecognitionException {
+		TypeNameContext _localctx = new TypeNameContext(_ctx, getState());
+		enterRule(_localctx, 108, RULE_typeName);
+		try {
+			setState(632);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(630);
+				qualifiedIdent();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(631);
+				match(IDENTIFIER);
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeLitContext extends ParserRuleContext {
+		public ArrayTypeContext arrayType() {
+			return getRuleContext(ArrayTypeContext.class,0);
+		}
+		public StructTypeContext structType() {
+			return getRuleContext(StructTypeContext.class,0);
+		}
+		public PointerTypeContext pointerType() {
+			return getRuleContext(PointerTypeContext.class,0);
+		}
+		public FunctionTypeContext functionType() {
+			return getRuleContext(FunctionTypeContext.class,0);
+		}
+		public InterfaceTypeContext interfaceType() {
+			return getRuleContext(InterfaceTypeContext.class,0);
+		}
+		public SliceTypeContext sliceType() {
+			return getRuleContext(SliceTypeContext.class,0);
+		}
+		public MapTypeContext mapType() {
+			return getRuleContext(MapTypeContext.class,0);
+		}
+		public ChannelTypeContext channelType() {
+			return getRuleContext(ChannelTypeContext.class,0);
+		}
+		public TypeLitContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeLit; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeLit(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeLit(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeLit(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeLitContext typeLit() throws RecognitionException {
+		TypeLitContext _localctx = new TypeLitContext(_ctx, getState());
+		enterRule(_localctx, 110, RULE_typeLit);
+		try {
+			setState(642);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(634);
+				arrayType();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(635);
+				structType();
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(636);
+				pointerType();
+				}
+				break;
+			case 4:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(637);
+				functionType();
+				}
+				break;
+			case 5:
+				enterOuterAlt(_localctx, 5);
+				{
+				setState(638);
+				interfaceType();
+				}
+				break;
+			case 6:
+				enterOuterAlt(_localctx, 6);
+				{
+				setState(639);
+				sliceType();
+				}
+				break;
+			case 7:
+				enterOuterAlt(_localctx, 7);
+				{
+				setState(640);
+				mapType();
+				}
+				break;
+			case 8:
+				enterOuterAlt(_localctx, 8);
+				{
+				setState(641);
+				channelType();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ArrayTypeContext extends ParserRuleContext {
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public ArrayLengthContext arrayLength() {
+			return getRuleContext(ArrayLengthContext.class,0);
+		}
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public ElementTypeContext elementType() {
+			return getRuleContext(ElementTypeContext.class,0);
+		}
+		public ArrayTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_arrayType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterArrayType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitArrayType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitArrayType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ArrayTypeContext arrayType() throws RecognitionException {
+		ArrayTypeContext _localctx = new ArrayTypeContext(_ctx, getState());
+		enterRule(_localctx, 112, RULE_arrayType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(644);
+			match(L_BRACKET);
+			setState(645);
+			arrayLength();
+			setState(646);
+			match(R_BRACKET);
+			setState(647);
+			elementType();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ArrayLengthContext extends ParserRuleContext {
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public ArrayLengthContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_arrayLength; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterArrayLength(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitArrayLength(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitArrayLength(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ArrayLengthContext arrayLength() throws RecognitionException {
+		ArrayLengthContext _localctx = new ArrayLengthContext(_ctx, getState());
+		enterRule(_localctx, 114, RULE_arrayLength);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(649);
+			expression(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ElementTypeContext extends ParserRuleContext {
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public ElementTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_elementType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterElementType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitElementType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitElementType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ElementTypeContext elementType() throws RecognitionException {
+		ElementTypeContext _localctx = new ElementTypeContext(_ctx, getState());
+		enterRule(_localctx, 116, RULE_elementType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(651);
+			type_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class PointerTypeContext extends ParserRuleContext {
+		public TerminalNode STAR() { return getToken(GoParser.STAR, 0); }
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public PointerTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_pointerType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterPointerType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitPointerType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitPointerType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final PointerTypeContext pointerType() throws RecognitionException {
+		PointerTypeContext _localctx = new PointerTypeContext(_ctx, getState());
+		enterRule(_localctx, 118, RULE_pointerType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(653);
+			match(STAR);
+			setState(654);
+			type_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class InterfaceTypeContext extends ParserRuleContext {
+		public TerminalNode INTERFACE() { return getToken(GoParser.INTERFACE, 0); }
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public List<MethodSpecContext> methodSpec() {
+			return getRuleContexts(MethodSpecContext.class);
+		}
+		public MethodSpecContext methodSpec(int i) {
+			return getRuleContext(MethodSpecContext.class,i);
+		}
+		public List<TypeNameContext> typeName() {
+			return getRuleContexts(TypeNameContext.class);
+		}
+		public TypeNameContext typeName(int i) {
+			return getRuleContext(TypeNameContext.class,i);
+		}
+		public InterfaceTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_interfaceType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterInterfaceType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitInterfaceType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitInterfaceType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final InterfaceTypeContext interfaceType() throws RecognitionException {
+		InterfaceTypeContext _localctx = new InterfaceTypeContext(_ctx, getState());
+		enterRule(_localctx, 120, RULE_interfaceType);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(656);
+			match(INTERFACE);
+			setState(657);
+			match(L_CURLY);
+			setState(666);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==IDENTIFIER) {
+				{
+				{
+				setState(660);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
+				case 1:
+					{
+					setState(658);
+					methodSpec();
+					}
+					break;
+				case 2:
+					{
+					setState(659);
+					typeName();
+					}
+					break;
+				}
+				setState(662);
+				eos();
+				}
+				}
+				setState(668);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(669);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SliceTypeContext extends ParserRuleContext {
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public ElementTypeContext elementType() {
+			return getRuleContext(ElementTypeContext.class,0);
+		}
+		public SliceTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_sliceType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSliceType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSliceType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSliceType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SliceTypeContext sliceType() throws RecognitionException {
+		SliceTypeContext _localctx = new SliceTypeContext(_ctx, getState());
+		enterRule(_localctx, 122, RULE_sliceType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(671);
+			match(L_BRACKET);
+			setState(672);
+			match(R_BRACKET);
+			setState(673);
+			elementType();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class MapTypeContext extends ParserRuleContext {
+		public TerminalNode MAP() { return getToken(GoParser.MAP, 0); }
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public ElementTypeContext elementType() {
+			return getRuleContext(ElementTypeContext.class,0);
+		}
+		public MapTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_mapType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterMapType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitMapType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitMapType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final MapTypeContext mapType() throws RecognitionException {
+		MapTypeContext _localctx = new MapTypeContext(_ctx, getState());
+		enterRule(_localctx, 124, RULE_mapType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(675);
+			match(MAP);
+			setState(676);
+			match(L_BRACKET);
+			setState(677);
+			type_();
+			setState(678);
+			match(R_BRACKET);
+			setState(679);
+			elementType();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ChannelTypeContext extends ParserRuleContext {
+		public ElementTypeContext elementType() {
+			return getRuleContext(ElementTypeContext.class,0);
+		}
+		public TerminalNode CHAN() { return getToken(GoParser.CHAN, 0); }
+		public TerminalNode RECEIVE() { return getToken(GoParser.RECEIVE, 0); }
+		public ChannelTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_channelType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterChannelType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitChannelType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitChannelType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ChannelTypeContext channelType() throws RecognitionException {
+		ChannelTypeContext _localctx = new ChannelTypeContext(_ctx, getState());
+		enterRule(_localctx, 126, RULE_channelType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(686);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
+			case 1:
+				{
+				setState(681);
+				match(CHAN);
+				}
+				break;
+			case 2:
+				{
+				setState(682);
+				match(CHAN);
+				setState(683);
+				match(RECEIVE);
+				}
+				break;
+			case 3:
+				{
+				setState(684);
+				match(RECEIVE);
+				setState(685);
+				match(CHAN);
+				}
+				break;
+			}
+			setState(688);
+			elementType();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class MethodSpecContext extends ParserRuleContext {
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public ParametersContext parameters() {
+			return getRuleContext(ParametersContext.class,0);
+		}
+		public ResultContext result() {
+			return getRuleContext(ResultContext.class,0);
+		}
+		public MethodSpecContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_methodSpec; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterMethodSpec(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitMethodSpec(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitMethodSpec(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final MethodSpecContext methodSpec() throws RecognitionException {
+		MethodSpecContext _localctx = new MethodSpecContext(_ctx, getState());
+		enterRule(_localctx, 128, RULE_methodSpec);
+		try {
+			setState(696);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(690);
+				match(IDENTIFIER);
+				setState(691);
+				parameters();
+				setState(692);
+				result();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(694);
+				match(IDENTIFIER);
+				setState(695);
+				parameters();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class FunctionTypeContext extends ParserRuleContext {
+		public TerminalNode FUNC() { return getToken(GoParser.FUNC, 0); }
+		public SignatureContext signature() {
+			return getRuleContext(SignatureContext.class,0);
+		}
+		public FunctionTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_functionType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterFunctionType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitFunctionType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitFunctionType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final FunctionTypeContext functionType() throws RecognitionException {
+		FunctionTypeContext _localctx = new FunctionTypeContext(_ctx, getState());
+		enterRule(_localctx, 130, RULE_functionType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(698);
+			match(FUNC);
+			setState(699);
+			signature();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class SignatureContext extends ParserRuleContext {
+		public ParametersContext parameters() {
+			return getRuleContext(ParametersContext.class,0);
+		}
+		public ResultContext result() {
+			return getRuleContext(ResultContext.class,0);
+		}
+		public SignatureContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_signature; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSignature(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSignature(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSignature(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final SignatureContext signature() throws RecognitionException {
+		SignatureContext _localctx = new SignatureContext(_ctx, getState());
+		enterRule(_localctx, 132, RULE_signature);
+		try {
+			setState(705);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(701);
+				parameters();
+				setState(702);
+				result();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(704);
+				parameters();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ResultContext extends ParserRuleContext {
+		public ParametersContext parameters() {
+			return getRuleContext(ParametersContext.class,0);
+		}
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public ResultContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_result; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterResult(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitResult(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitResult(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ResultContext result() throws RecognitionException {
+		ResultContext _localctx = new ResultContext(_ctx, getState());
+		enterRule(_localctx, 134, RULE_result);
+		try {
+			setState(709);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(707);
+				parameters();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(708);
+				type_();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ParametersContext extends ParserRuleContext {
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public List<ParameterDeclContext> parameterDecl() {
+			return getRuleContexts(ParameterDeclContext.class);
+		}
+		public ParameterDeclContext parameterDecl(int i) {
+			return getRuleContext(ParameterDeclContext.class,i);
+		}
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public ParametersContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_parameters; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterParameters(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitParameters(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitParameters(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ParametersContext parameters() throws RecognitionException {
+		ParametersContext _localctx = new ParametersContext(_ctx, getState());
+		enterRule(_localctx, 136, RULE_parameters);
+		int _la;
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(711);
+			match(L_PAREN);
+			setState(723);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & -6917524624896946664L) != 0) {
+				{
+				setState(712);
+				parameterDecl();
+				setState(717);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,74,_ctx);
+				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+					if ( _alt==1 ) {
+						{
+						{
+						setState(713);
+						match(COMMA);
+						setState(714);
+						parameterDecl();
+						}
+						} 
+					}
+					setState(719);
+					_errHandler.sync(this);
+					_alt = getInterpreter().adaptivePredict(_input,74,_ctx);
+				}
+				setState(721);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==COMMA) {
+					{
+					setState(720);
+					match(COMMA);
+					}
+				}
+
+				}
+			}
+
+			setState(725);
+			match(R_PAREN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ParameterDeclContext extends ParserRuleContext {
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public TerminalNode ELLIPSIS() { return getToken(GoParser.ELLIPSIS, 0); }
+		public ParameterDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_parameterDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterParameterDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitParameterDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitParameterDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ParameterDeclContext parameterDecl() throws RecognitionException {
+		ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState());
+		enterRule(_localctx, 138, RULE_parameterDecl);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(728);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) {
+			case 1:
+				{
+				setState(727);
+				identifierList();
+				}
+				break;
+			}
+			setState(731);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==ELLIPSIS) {
+				{
+				setState(730);
+				match(ELLIPSIS);
+				}
+			}
+
+			setState(733);
+			type_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ExpressionContext extends ParserRuleContext {
+		public Token unary_op;
+		public Token mul_op;
+		public Token add_op;
+		public Token rel_op;
+		public PrimaryExprContext primaryExpr() {
+			return getRuleContext(PrimaryExprContext.class,0);
+		}
+		public List<ExpressionContext> expression() {
+			return getRuleContexts(ExpressionContext.class);
+		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
+		public TerminalNode PLUS() { return getToken(GoParser.PLUS, 0); }
+		public TerminalNode MINUS() { return getToken(GoParser.MINUS, 0); }
+		public TerminalNode EXCLAMATION() { return getToken(GoParser.EXCLAMATION, 0); }
+		public TerminalNode CARET() { return getToken(GoParser.CARET, 0); }
+		public TerminalNode STAR() { return getToken(GoParser.STAR, 0); }
+		public TerminalNode AMPERSAND() { return getToken(GoParser.AMPERSAND, 0); }
+		public TerminalNode RECEIVE() { return getToken(GoParser.RECEIVE, 0); }
+		public TerminalNode DIV() { return getToken(GoParser.DIV, 0); }
+		public TerminalNode MOD() { return getToken(GoParser.MOD, 0); }
+		public TerminalNode LSHIFT() { return getToken(GoParser.LSHIFT, 0); }
+		public TerminalNode RSHIFT() { return getToken(GoParser.RSHIFT, 0); }
+		public TerminalNode BIT_CLEAR() { return getToken(GoParser.BIT_CLEAR, 0); }
+		public TerminalNode OR() { return getToken(GoParser.OR, 0); }
+		public TerminalNode EQUALS() { return getToken(GoParser.EQUALS, 0); }
+		public TerminalNode NOT_EQUALS() { return getToken(GoParser.NOT_EQUALS, 0); }
+		public TerminalNode LESS() { return getToken(GoParser.LESS, 0); }
+		public TerminalNode LESS_OR_EQUALS() { return getToken(GoParser.LESS_OR_EQUALS, 0); }
+		public TerminalNode GREATER() { return getToken(GoParser.GREATER, 0); }
+		public TerminalNode GREATER_OR_EQUALS() { return getToken(GoParser.GREATER_OR_EQUALS, 0); }
+		public TerminalNode LOGICAL_AND() { return getToken(GoParser.LOGICAL_AND, 0); }
+		public TerminalNode LOGICAL_OR() { return getToken(GoParser.LOGICAL_OR, 0); }
+		public ExpressionContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_expression; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterExpression(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitExpression(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitExpression(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ExpressionContext expression() throws RecognitionException {
+		return expression(0);
+	}
+
+	private ExpressionContext expression(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
+		ExpressionContext _prevctx = _localctx;
+		int _startState = 140;
+		enterRecursionRule(_localctx, 140, RULE_expression, _p);
+		int _la;
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(739);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,79,_ctx) ) {
+			case 1:
+				{
+				setState(736);
+				primaryExpr(0);
+				}
+				break;
+			case 2:
+				{
+				setState(737);
+				((ExpressionContext)_localctx).unary_op = _input.LT(1);
+				_la = _input.LA(1);
+				if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & -144115188075855872L) != 0) ) {
+					((ExpressionContext)_localctx).unary_op = (Token)_errHandler.recoverInline(this);
+				}
+				else {
+					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+					_errHandler.reportMatch(this);
+					consume();
+				}
+				setState(738);
+				expression(6);
+				}
+				break;
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(758);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,81,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					if ( _parseListeners!=null ) triggerExitRuleEvent();
+					_prevctx = _localctx;
+					{
+					setState(756);
+					_errHandler.sync(this);
+					switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) {
+					case 1:
+						{
+						_localctx = new ExpressionContext(_parentctx, _parentState);
+						pushNewRecursionContext(_localctx, _startState, RULE_expression);
+						setState(741);
+						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
+						setState(742);
+						((ExpressionContext)_localctx).mul_op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 7057140616089567232L) != 0) ) {
+							((ExpressionContext)_localctx).mul_op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(743);
+						expression(6);
+						}
+						break;
+					case 2:
+						{
+						_localctx = new ExpressionContext(_parentctx, _parentState);
+						pushNewRecursionContext(_localctx, _startState, RULE_expression);
+						setState(744);
+						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
+						setState(745);
+						((ExpressionContext)_localctx).add_op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 2019864432875667456L) != 0) ) {
+							((ExpressionContext)_localctx).add_op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(746);
+						expression(5);
+						}
+						break;
+					case 3:
+						{
+						_localctx = new ExpressionContext(_parentctx, _parentState);
+						pushNewRecursionContext(_localctx, _startState, RULE_expression);
+						setState(747);
+						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
+						setState(748);
+						((ExpressionContext)_localctx).rel_op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 2216615441596416L) != 0) ) {
+							((ExpressionContext)_localctx).rel_op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(749);
+						expression(4);
+						}
+						break;
+					case 4:
+						{
+						_localctx = new ExpressionContext(_parentctx, _parentState);
+						pushNewRecursionContext(_localctx, _startState, RULE_expression);
+						setState(750);
+						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
+						setState(751);
+						match(LOGICAL_AND);
+						setState(752);
+						expression(3);
+						}
+						break;
+					case 5:
+						{
+						_localctx = new ExpressionContext(_parentctx, _parentState);
+						pushNewRecursionContext(_localctx, _startState, RULE_expression);
+						setState(753);
+						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+						setState(754);
+						match(LOGICAL_OR);
+						setState(755);
+						expression(2);
+						}
+						break;
+					}
+					} 
+				}
+				setState(760);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,81,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class PrimaryExprContext extends ParserRuleContext {
+		public OperandContext operand() {
+			return getRuleContext(OperandContext.class,0);
+		}
+		public ConversionContext conversion() {
+			return getRuleContext(ConversionContext.class,0);
+		}
+		public MethodExprContext methodExpr() {
+			return getRuleContext(MethodExprContext.class,0);
+		}
+		public PrimaryExprContext primaryExpr() {
+			return getRuleContext(PrimaryExprContext.class,0);
+		}
+		public IndexContext index() {
+			return getRuleContext(IndexContext.class,0);
+		}
+		public Slice_Context slice_() {
+			return getRuleContext(Slice_Context.class,0);
+		}
+		public TypeAssertionContext typeAssertion() {
+			return getRuleContext(TypeAssertionContext.class,0);
+		}
+		public ArgumentsContext arguments() {
+			return getRuleContext(ArgumentsContext.class,0);
+		}
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public PrimaryExprContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_primaryExpr; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterPrimaryExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitPrimaryExpr(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitPrimaryExpr(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final PrimaryExprContext primaryExpr() throws RecognitionException {
+		return primaryExpr(0);
+	}
+
+	private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		PrimaryExprContext _localctx = new PrimaryExprContext(_ctx, _parentState);
+		PrimaryExprContext _prevctx = _localctx;
+		int _startState = 142;
+		enterRecursionRule(_localctx, 142, RULE_primaryExpr, _p);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(765);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) {
+			case 1:
+				{
+				setState(762);
+				operand();
+				}
+				break;
+			case 2:
+				{
+				setState(763);
+				conversion();
+				}
+				break;
+			case 3:
+				{
+				setState(764);
+				methodExpr();
+				}
+				break;
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(778);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					if ( _parseListeners!=null ) triggerExitRuleEvent();
+					_prevctx = _localctx;
+					{
+					{
+					_localctx = new PrimaryExprContext(_parentctx, _parentState);
+					pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
+					setState(767);
+					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+					setState(774);
+					_errHandler.sync(this);
+					switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) {
+					case 1:
+						{
+						{
+						setState(768);
+						match(DOT);
+						setState(769);
+						match(IDENTIFIER);
+						}
+						}
+						break;
+					case 2:
+						{
+						setState(770);
+						index();
+						}
+						break;
+					case 3:
+						{
+						setState(771);
+						slice_();
+						}
+						break;
+					case 4:
+						{
+						setState(772);
+						typeAssertion();
+						}
+						break;
+					case 5:
+						{
+						setState(773);
+						arguments();
+						}
+						break;
+					}
+					}
+					} 
+				}
+				setState(780);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ConversionContext extends ParserRuleContext {
+		public NonNamedTypeContext nonNamedType() {
+			return getRuleContext(NonNamedTypeContext.class,0);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public TerminalNode COMMA() { return getToken(GoParser.COMMA, 0); }
+		public ConversionContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_conversion; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterConversion(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitConversion(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitConversion(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ConversionContext conversion() throws RecognitionException {
+		ConversionContext _localctx = new ConversionContext(_ctx, getState());
+		enterRule(_localctx, 144, RULE_conversion);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(781);
+			nonNamedType();
+			setState(782);
+			match(L_PAREN);
+			setState(783);
+			expression(0);
+			setState(785);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==COMMA) {
+				{
+				setState(784);
+				match(COMMA);
+				}
+			}
+
+			setState(787);
+			match(R_PAREN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class NonNamedTypeContext extends ParserRuleContext {
+		public TypeLitContext typeLit() {
+			return getRuleContext(TypeLitContext.class,0);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public NonNamedTypeContext nonNamedType() {
+			return getRuleContext(NonNamedTypeContext.class,0);
+		}
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public NonNamedTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_nonNamedType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterNonNamedType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitNonNamedType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitNonNamedType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final NonNamedTypeContext nonNamedType() throws RecognitionException {
+		NonNamedTypeContext _localctx = new NonNamedTypeContext(_ctx, getState());
+		enterRule(_localctx, 146, RULE_nonNamedType);
+		try {
+			setState(794);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case L_BRACKET:
+			case STAR:
+			case RECEIVE:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(789);
+				typeLit();
+				}
+				break;
+			case L_PAREN:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(790);
+				match(L_PAREN);
+				setState(791);
+				nonNamedType();
+				setState(792);
+				match(R_PAREN);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class OperandContext extends ParserRuleContext {
+		public LiteralContext literal() {
+			return getRuleContext(LiteralContext.class,0);
+		}
+		public OperandNameContext operandName() {
+			return getRuleContext(OperandNameContext.class,0);
+		}
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public OperandContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_operand; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterOperand(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitOperand(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitOperand(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final OperandContext operand() throws RecognitionException {
+		OperandContext _localctx = new OperandContext(_ctx, getState());
+		enterRule(_localctx, 148, RULE_operand);
+		try {
+			setState(802);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(796);
+				literal();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(797);
+				operandName();
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(798);
+				match(L_PAREN);
+				setState(799);
+				expression(0);
+				setState(800);
+				match(R_PAREN);
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class LiteralContext extends ParserRuleContext {
+		public BasicLitContext basicLit() {
+			return getRuleContext(BasicLitContext.class,0);
+		}
+		public CompositeLitContext compositeLit() {
+			return getRuleContext(CompositeLitContext.class,0);
+		}
+		public FunctionLitContext functionLit() {
+			return getRuleContext(FunctionLitContext.class,0);
+		}
+		public LiteralContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_literal; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterLiteral(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitLiteral(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitLiteral(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final LiteralContext literal() throws RecognitionException {
+		LiteralContext _localctx = new LiteralContext(_ctx, getState());
+		enterRule(_localctx, 150, RULE_literal);
+		try {
+			setState(807);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case NIL_LIT:
+			case DECIMAL_LIT:
+			case BINARY_LIT:
+			case OCTAL_LIT:
+			case HEX_LIT:
+			case FLOAT_LIT:
+			case IMAGINARY_LIT:
+			case RUNE_LIT:
+			case RAW_STRING_LIT:
+			case INTERPRETED_STRING_LIT:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(804);
+				basicLit();
+				}
+				break;
+			case MAP:
+			case STRUCT:
+			case IDENTIFIER:
+			case L_BRACKET:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(805);
+				compositeLit();
+				}
+				break;
+			case FUNC:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(806);
+				functionLit();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class BasicLitContext extends ParserRuleContext {
+		public TerminalNode NIL_LIT() { return getToken(GoParser.NIL_LIT, 0); }
+		public IntegerContext integer() {
+			return getRuleContext(IntegerContext.class,0);
+		}
+		public String_Context string_() {
+			return getRuleContext(String_Context.class,0);
+		}
+		public TerminalNode FLOAT_LIT() { return getToken(GoParser.FLOAT_LIT, 0); }
+		public BasicLitContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_basicLit; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterBasicLit(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitBasicLit(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitBasicLit(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final BasicLitContext basicLit() throws RecognitionException {
+		BasicLitContext _localctx = new BasicLitContext(_ctx, getState());
+		enterRule(_localctx, 152, RULE_basicLit);
+		try {
+			setState(813);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case NIL_LIT:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(809);
+				match(NIL_LIT);
+				}
+				break;
+			case DECIMAL_LIT:
+			case BINARY_LIT:
+			case OCTAL_LIT:
+			case HEX_LIT:
+			case IMAGINARY_LIT:
+			case RUNE_LIT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(810);
+				integer();
+				}
+				break;
+			case RAW_STRING_LIT:
+			case INTERPRETED_STRING_LIT:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(811);
+				string_();
+				}
+				break;
+			case FLOAT_LIT:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(812);
+				match(FLOAT_LIT);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class IntegerContext extends ParserRuleContext {
+		public TerminalNode DECIMAL_LIT() { return getToken(GoParser.DECIMAL_LIT, 0); }
+		public TerminalNode BINARY_LIT() { return getToken(GoParser.BINARY_LIT, 0); }
+		public TerminalNode OCTAL_LIT() { return getToken(GoParser.OCTAL_LIT, 0); }
+		public TerminalNode HEX_LIT() { return getToken(GoParser.HEX_LIT, 0); }
+		public TerminalNode IMAGINARY_LIT() { return getToken(GoParser.IMAGINARY_LIT, 0); }
+		public TerminalNode RUNE_LIT() { return getToken(GoParser.RUNE_LIT, 0); }
+		public IntegerContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_integer; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterInteger(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitInteger(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitInteger(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final IntegerContext integer() throws RecognitionException {
+		IntegerContext _localctx = new IntegerContext(_ctx, getState());
+		enterRule(_localctx, 154, RULE_integer);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(815);
+			_la = _input.LA(1);
+			if ( !((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 399L) != 0) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class OperandNameContext extends ParserRuleContext {
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public OperandNameContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_operandName; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterOperandName(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitOperandName(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitOperandName(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final OperandNameContext operandName() throws RecognitionException {
+		OperandNameContext _localctx = new OperandNameContext(_ctx, getState());
+		enterRule(_localctx, 156, RULE_operandName);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(817);
+			match(IDENTIFIER);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class QualifiedIdentContext extends ParserRuleContext {
+		public List<TerminalNode> IDENTIFIER() { return getTokens(GoParser.IDENTIFIER); }
+		public TerminalNode IDENTIFIER(int i) {
+			return getToken(GoParser.IDENTIFIER, i);
+		}
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public QualifiedIdentContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_qualifiedIdent; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterQualifiedIdent(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitQualifiedIdent(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitQualifiedIdent(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final QualifiedIdentContext qualifiedIdent() throws RecognitionException {
+		QualifiedIdentContext _localctx = new QualifiedIdentContext(_ctx, getState());
+		enterRule(_localctx, 158, RULE_qualifiedIdent);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(819);
+			match(IDENTIFIER);
+			setState(820);
+			match(DOT);
+			setState(821);
+			match(IDENTIFIER);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class CompositeLitContext extends ParserRuleContext {
+		public LiteralTypeContext literalType() {
+			return getRuleContext(LiteralTypeContext.class,0);
+		}
+		public LiteralValueContext literalValue() {
+			return getRuleContext(LiteralValueContext.class,0);
+		}
+		public CompositeLitContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_compositeLit; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterCompositeLit(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitCompositeLit(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitCompositeLit(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final CompositeLitContext compositeLit() throws RecognitionException {
+		CompositeLitContext _localctx = new CompositeLitContext(_ctx, getState());
+		enterRule(_localctx, 160, RULE_compositeLit);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(823);
+			literalType();
+			setState(824);
+			literalValue();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class LiteralTypeContext extends ParserRuleContext {
+		public StructTypeContext structType() {
+			return getRuleContext(StructTypeContext.class,0);
+		}
+		public ArrayTypeContext arrayType() {
+			return getRuleContext(ArrayTypeContext.class,0);
+		}
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public TerminalNode ELLIPSIS() { return getToken(GoParser.ELLIPSIS, 0); }
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public ElementTypeContext elementType() {
+			return getRuleContext(ElementTypeContext.class,0);
+		}
+		public SliceTypeContext sliceType() {
+			return getRuleContext(SliceTypeContext.class,0);
+		}
+		public MapTypeContext mapType() {
+			return getRuleContext(MapTypeContext.class,0);
+		}
+		public TypeNameContext typeName() {
+			return getRuleContext(TypeNameContext.class,0);
+		}
+		public LiteralTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_literalType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterLiteralType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitLiteralType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitLiteralType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final LiteralTypeContext literalType() throws RecognitionException {
+		LiteralTypeContext _localctx = new LiteralTypeContext(_ctx, getState());
+		enterRule(_localctx, 162, RULE_literalType);
+		try {
+			setState(835);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(826);
+				structType();
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(827);
+				arrayType();
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(828);
+				match(L_BRACKET);
+				setState(829);
+				match(ELLIPSIS);
+				setState(830);
+				match(R_BRACKET);
+				setState(831);
+				elementType();
+				}
+				break;
+			case 4:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(832);
+				sliceType();
+				}
+				break;
+			case 5:
+				enterOuterAlt(_localctx, 5);
+				{
+				setState(833);
+				mapType();
+				}
+				break;
+			case 6:
+				enterOuterAlt(_localctx, 6);
+				{
+				setState(834);
+				typeName();
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class LiteralValueContext extends ParserRuleContext {
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public ElementListContext elementList() {
+			return getRuleContext(ElementListContext.class,0);
+		}
+		public TerminalNode COMMA() { return getToken(GoParser.COMMA, 0); }
+		public LiteralValueContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_literalValue; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterLiteralValue(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitLiteralValue(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitLiteralValue(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final LiteralValueContext literalValue() throws RecognitionException {
+		LiteralValueContext _localctx = new LiteralValueContext(_ctx, getState());
+		enterRule(_localctx, 164, RULE_literalValue);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(837);
+			match(L_CURLY);
+			setState(842);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115182237381096L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+				{
+				setState(838);
+				elementList();
+				setState(840);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==COMMA) {
+					{
+					setState(839);
+					match(COMMA);
+					}
+				}
+
+				}
+			}
+
+			setState(844);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ElementListContext extends ParserRuleContext {
+		public List<KeyedElementContext> keyedElement() {
+			return getRuleContexts(KeyedElementContext.class);
+		}
+		public KeyedElementContext keyedElement(int i) {
+			return getRuleContext(KeyedElementContext.class,i);
+		}
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public ElementListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_elementList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterElementList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitElementList(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitElementList(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ElementListContext elementList() throws RecognitionException {
+		ElementListContext _localctx = new ElementListContext(_ctx, getState());
+		enterRule(_localctx, 166, RULE_elementList);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(846);
+			keyedElement();
+			setState(851);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,93,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					{
+					{
+					setState(847);
+					match(COMMA);
+					setState(848);
+					keyedElement();
+					}
+					} 
+				}
+				setState(853);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,93,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class KeyedElementContext extends ParserRuleContext {
+		public ElementContext element() {
+			return getRuleContext(ElementContext.class,0);
+		}
+		public KeyContext key() {
+			return getRuleContext(KeyContext.class,0);
+		}
+		public TerminalNode COLON() { return getToken(GoParser.COLON, 0); }
+		public KeyedElementContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_keyedElement; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterKeyedElement(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitKeyedElement(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitKeyedElement(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final KeyedElementContext keyedElement() throws RecognitionException {
+		KeyedElementContext _localctx = new KeyedElementContext(_ctx, getState());
+		enterRule(_localctx, 168, RULE_keyedElement);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(857);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) {
+			case 1:
+				{
+				setState(854);
+				key();
+				setState(855);
+				match(COLON);
+				}
+				break;
+			}
+			setState(859);
+			element();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class KeyContext extends ParserRuleContext {
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public LiteralValueContext literalValue() {
+			return getRuleContext(LiteralValueContext.class,0);
+		}
+		public KeyContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_key; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterKey(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitKey(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitKey(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final KeyContext key() throws RecognitionException {
+		KeyContext _localctx = new KeyContext(_ctx, getState());
+		enterRule(_localctx, 170, RULE_key);
+		try {
+			setState(863);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case NIL_LIT:
+			case IDENTIFIER:
+			case L_PAREN:
+			case L_BRACKET:
+			case EXCLAMATION:
+			case PLUS:
+			case MINUS:
+			case CARET:
+			case STAR:
+			case AMPERSAND:
+			case RECEIVE:
+			case DECIMAL_LIT:
+			case BINARY_LIT:
+			case OCTAL_LIT:
+			case HEX_LIT:
+			case FLOAT_LIT:
+			case IMAGINARY_LIT:
+			case RUNE_LIT:
+			case RAW_STRING_LIT:
+			case INTERPRETED_STRING_LIT:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(861);
+				expression(0);
+				}
+				break;
+			case L_CURLY:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(862);
+				literalValue();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ElementContext extends ParserRuleContext {
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public LiteralValueContext literalValue() {
+			return getRuleContext(LiteralValueContext.class,0);
+		}
+		public ElementContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_element; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterElement(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitElement(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitElement(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ElementContext element() throws RecognitionException {
+		ElementContext _localctx = new ElementContext(_ctx, getState());
+		enterRule(_localctx, 172, RULE_element);
+		try {
+			setState(867);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case FUNC:
+			case INTERFACE:
+			case MAP:
+			case STRUCT:
+			case CHAN:
+			case NIL_LIT:
+			case IDENTIFIER:
+			case L_PAREN:
+			case L_BRACKET:
+			case EXCLAMATION:
+			case PLUS:
+			case MINUS:
+			case CARET:
+			case STAR:
+			case AMPERSAND:
+			case RECEIVE:
+			case DECIMAL_LIT:
+			case BINARY_LIT:
+			case OCTAL_LIT:
+			case HEX_LIT:
+			case FLOAT_LIT:
+			case IMAGINARY_LIT:
+			case RUNE_LIT:
+			case RAW_STRING_LIT:
+			case INTERPRETED_STRING_LIT:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(865);
+				expression(0);
+				}
+				break;
+			case L_CURLY:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(866);
+				literalValue();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class StructTypeContext extends ParserRuleContext {
+		public TerminalNode STRUCT() { return getToken(GoParser.STRUCT, 0); }
+		public TerminalNode L_CURLY() { return getToken(GoParser.L_CURLY, 0); }
+		public TerminalNode R_CURLY() { return getToken(GoParser.R_CURLY, 0); }
+		public List<FieldDeclContext> fieldDecl() {
+			return getRuleContexts(FieldDeclContext.class);
+		}
+		public FieldDeclContext fieldDecl(int i) {
+			return getRuleContext(FieldDeclContext.class,i);
+		}
+		public List<EosContext> eos() {
+			return getRuleContexts(EosContext.class);
+		}
+		public EosContext eos(int i) {
+			return getRuleContext(EosContext.class,i);
+		}
+		public StructTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_structType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterStructType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitStructType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitStructType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final StructTypeContext structType() throws RecognitionException {
+		StructTypeContext _localctx = new StructTypeContext(_ctx, getState());
+		enterRule(_localctx, 174, RULE_structType);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(869);
+			match(STRUCT);
+			setState(870);
+			match(L_CURLY);
+			setState(876);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			while (_la==IDENTIFIER || _la==STAR) {
+				{
+				{
+				setState(871);
+				fieldDecl();
+				setState(872);
+				eos();
+				}
+				}
+				setState(878);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+			}
+			setState(879);
+			match(R_CURLY);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class FieldDeclContext extends ParserRuleContext {
+		public String_Context tag;
+		public IdentifierListContext identifierList() {
+			return getRuleContext(IdentifierListContext.class,0);
+		}
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public EmbeddedFieldContext embeddedField() {
+			return getRuleContext(EmbeddedFieldContext.class,0);
+		}
+		public String_Context string_() {
+			return getRuleContext(String_Context.class,0);
+		}
+		public FieldDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_fieldDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterFieldDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitFieldDecl(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitFieldDecl(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final FieldDeclContext fieldDecl() throws RecognitionException {
+		FieldDeclContext _localctx = new FieldDeclContext(_ctx, getState());
+		enterRule(_localctx, 176, RULE_fieldDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(885);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) {
+			case 1:
+				{
+				setState(881);
+				identifierList();
+				setState(882);
+				type_();
+				}
+				break;
+			case 2:
+				{
+				setState(884);
+				embeddedField();
+				}
+				break;
+			}
+			setState(888);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) {
+			case 1:
+				{
+				setState(887);
+				((FieldDeclContext)_localctx).tag = string_();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class String_Context extends ParserRuleContext {
+		public TerminalNode RAW_STRING_LIT() { return getToken(GoParser.RAW_STRING_LIT, 0); }
+		public TerminalNode INTERPRETED_STRING_LIT() { return getToken(GoParser.INTERPRETED_STRING_LIT, 0); }
+		public String_Context(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_string_; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterString_(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitString_(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitString_(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final String_Context string_() throws RecognitionException {
+		String_Context _localctx = new String_Context(_ctx, getState());
+		enterRule(_localctx, 178, RULE_string_);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(890);
+			_la = _input.LA(1);
+			if ( !(_la==RAW_STRING_LIT || _la==INTERPRETED_STRING_LIT) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class EmbeddedFieldContext extends ParserRuleContext {
+		public TypeNameContext typeName() {
+			return getRuleContext(TypeNameContext.class,0);
+		}
+		public TerminalNode STAR() { return getToken(GoParser.STAR, 0); }
+		public EmbeddedFieldContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_embeddedField; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterEmbeddedField(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitEmbeddedField(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitEmbeddedField(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final EmbeddedFieldContext embeddedField() throws RecognitionException {
+		EmbeddedFieldContext _localctx = new EmbeddedFieldContext(_ctx, getState());
+		enterRule(_localctx, 180, RULE_embeddedField);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(893);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==STAR) {
+				{
+				setState(892);
+				match(STAR);
+				}
+			}
+
+			setState(895);
+			typeName();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class FunctionLitContext extends ParserRuleContext {
+		public TerminalNode FUNC() { return getToken(GoParser.FUNC, 0); }
+		public SignatureContext signature() {
+			return getRuleContext(SignatureContext.class,0);
+		}
+		public BlockContext block() {
+			return getRuleContext(BlockContext.class,0);
+		}
+		public FunctionLitContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_functionLit; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterFunctionLit(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitFunctionLit(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitFunctionLit(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final FunctionLitContext functionLit() throws RecognitionException {
+		FunctionLitContext _localctx = new FunctionLitContext(_ctx, getState());
+		enterRule(_localctx, 182, RULE_functionLit);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(897);
+			match(FUNC);
+			setState(898);
+			signature();
+			setState(899);
+			block();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class IndexContext extends ParserRuleContext {
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public ExpressionContext expression() {
+			return getRuleContext(ExpressionContext.class,0);
+		}
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public IndexContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_index; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterIndex(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitIndex(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitIndex(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final IndexContext index() throws RecognitionException {
+		IndexContext _localctx = new IndexContext(_ctx, getState());
+		enterRule(_localctx, 184, RULE_index);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(901);
+			match(L_BRACKET);
+			setState(902);
+			expression(0);
+			setState(903);
+			match(R_BRACKET);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class Slice_Context extends ParserRuleContext {
+		public TerminalNode L_BRACKET() { return getToken(GoParser.L_BRACKET, 0); }
+		public TerminalNode R_BRACKET() { return getToken(GoParser.R_BRACKET, 0); }
+		public List<TerminalNode> COLON() { return getTokens(GoParser.COLON); }
+		public TerminalNode COLON(int i) {
+			return getToken(GoParser.COLON, i);
+		}
+		public List<ExpressionContext> expression() {
+			return getRuleContexts(ExpressionContext.class);
+		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
+		public Slice_Context(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_slice_; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterSlice_(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitSlice_(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitSlice_(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final Slice_Context slice_() throws RecognitionException {
+		Slice_Context _localctx = new Slice_Context(_ctx, getState());
+		enterRule(_localctx, 186, RULE_slice_);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(905);
+			match(L_BRACKET);
+			setState(921);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,104,_ctx) ) {
+			case 1:
+				{
+				setState(907);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(906);
+					expression(0);
+					}
+				}
+
+				setState(909);
+				match(COLON);
+				setState(911);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(910);
+					expression(0);
+					}
+				}
+
+				}
+				break;
+			case 2:
+				{
+				setState(914);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+					{
+					setState(913);
+					expression(0);
+					}
+				}
+
+				setState(916);
+				match(COLON);
+				setState(917);
+				expression(0);
+				setState(918);
+				match(COLON);
+				setState(919);
+				expression(0);
+				}
+				break;
+			}
+			setState(923);
+			match(R_BRACKET);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class TypeAssertionContext extends ParserRuleContext {
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public TypeAssertionContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_typeAssertion; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterTypeAssertion(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitTypeAssertion(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitTypeAssertion(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final TypeAssertionContext typeAssertion() throws RecognitionException {
+		TypeAssertionContext _localctx = new TypeAssertionContext(_ctx, getState());
+		enterRule(_localctx, 188, RULE_typeAssertion);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(925);
+			match(DOT);
+			setState(926);
+			match(L_PAREN);
+			setState(927);
+			type_();
+			setState(928);
+			match(R_PAREN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ArgumentsContext extends ParserRuleContext {
+		public TerminalNode L_PAREN() { return getToken(GoParser.L_PAREN, 0); }
+		public TerminalNode R_PAREN() { return getToken(GoParser.R_PAREN, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
+		public NonNamedTypeContext nonNamedType() {
+			return getRuleContext(NonNamedTypeContext.class,0);
+		}
+		public TerminalNode ELLIPSIS() { return getToken(GoParser.ELLIPSIS, 0); }
+		public List<TerminalNode> COMMA() { return getTokens(GoParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(GoParser.COMMA, i);
+		}
+		public ArgumentsContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_arguments; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterArguments(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitArguments(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitArguments(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ArgumentsContext arguments() throws RecognitionException {
+		ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
+		enterRule(_localctx, 190, RULE_arguments);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(930);
+			match(L_PAREN);
+			setState(945);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & -144115183311122920L) != 0 || (((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 49567L) != 0) {
+				{
+				setState(937);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) {
+				case 1:
+					{
+					setState(931);
+					expressionList();
+					}
+					break;
+				case 2:
+					{
+					setState(932);
+					nonNamedType();
+					setState(935);
+					_errHandler.sync(this);
+					switch ( getInterpreter().adaptivePredict(_input,105,_ctx) ) {
+					case 1:
+						{
+						setState(933);
+						match(COMMA);
+						setState(934);
+						expressionList();
+						}
+						break;
+					}
+					}
+					break;
+				}
+				setState(940);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==ELLIPSIS) {
+					{
+					setState(939);
+					match(ELLIPSIS);
+					}
+				}
+
+				setState(943);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==COMMA) {
+					{
+					setState(942);
+					match(COMMA);
+					}
+				}
+
+				}
+			}
+
+			setState(947);
+			match(R_PAREN);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class MethodExprContext extends ParserRuleContext {
+		public NonNamedTypeContext nonNamedType() {
+			return getRuleContext(NonNamedTypeContext.class,0);
+		}
+		public TerminalNode DOT() { return getToken(GoParser.DOT, 0); }
+		public TerminalNode IDENTIFIER() { return getToken(GoParser.IDENTIFIER, 0); }
+		public MethodExprContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_methodExpr; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterMethodExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitMethodExpr(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitMethodExpr(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final MethodExprContext methodExpr() throws RecognitionException {
+		MethodExprContext _localctx = new MethodExprContext(_ctx, getState());
+		enterRule(_localctx, 192, RULE_methodExpr);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(949);
+			nonNamedType();
+			setState(950);
+			match(DOT);
+			setState(951);
+			match(IDENTIFIER);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class ReceiverTypeContext extends ParserRuleContext {
+		public Type_Context type_() {
+			return getRuleContext(Type_Context.class,0);
+		}
+		public ReceiverTypeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_receiverType; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterReceiverType(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitReceiverType(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitReceiverType(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final ReceiverTypeContext receiverType() throws RecognitionException {
+		ReceiverTypeContext _localctx = new ReceiverTypeContext(_ctx, getState());
+		enterRule(_localctx, 194, RULE_receiverType);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(953);
+			type_();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	@SuppressWarnings("CheckReturnValue")
+	public static class EosContext extends ParserRuleContext {
+		public TerminalNode SEMI() { return getToken(GoParser.SEMI, 0); }
+		public TerminalNode EOF() { return getToken(GoParser.EOF, 0); }
+		public TerminalNode EOS() { return getToken(GoParser.EOS, 0); }
+		public EosContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_eos; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).enterEos(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof GoParserListener ) ((GoParserListener)listener).exitEos(this);
+		}
+		@Override
+		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+			if ( visitor instanceof GoParserVisitor ) return ((GoParserVisitor<? extends T>)visitor).visitEos(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+
+	public final EosContext eos() throws RecognitionException {
+		EosContext _localctx = new EosContext(_ctx, getState());
+		enterRule(_localctx, 196, RULE_eos);
+		try {
+			setState(959);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(955);
+				match(SEMI);
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(956);
+				match(EOF);
+				}
+				break;
+			case 3:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(957);
+				match(EOS);
+				}
+				break;
+			case 4:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(958);
+				if (!(this.closingBracket())) throw new FailedPredicateException(this, "this.closingBracket()");
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
+		switch (ruleIndex) {
+		case 18:
+			return statementList_sempred((StatementListContext)_localctx, predIndex);
+		case 70:
+			return expression_sempred((ExpressionContext)_localctx, predIndex);
+		case 71:
+			return primaryExpr_sempred((PrimaryExprContext)_localctx, predIndex);
+		case 98:
+			return eos_sempred((EosContext)_localctx, predIndex);
+		}
+		return true;
+	}
+	private boolean statementList_sempred(StatementListContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 0:
+			return this.closingBracket();
+		}
+		return true;
+	}
+	private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 1:
+			return precpred(_ctx, 5);
+		case 2:
+			return precpred(_ctx, 4);
+		case 3:
+			return precpred(_ctx, 3);
+		case 4:
+			return precpred(_ctx, 2);
+		case 5:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+	private boolean primaryExpr_sempred(PrimaryExprContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 6:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+	private boolean eos_sempred(EosContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 7:
+			return this.closingBracket();
+		}
+		return true;
+	}
+
+	public static final String _serializedATN =
+		"\u0004\u0001X\u03c2\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
+		"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
+		"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
+		"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
+		"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
+		"\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
+		"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
+		"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
+		"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
+		"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
+		"#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
+		"(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+
+		"-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+
+		"2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+
+		"7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+
+		"<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+
+		"A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+
+		"F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+
+		"K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+
+		"P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+
+		"U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+
+		"Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+
+		"_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0001\u0000\u0001\u0000"+
+		"\u0001\u0000\u0001\u0000\u0001\u0000\u0005\u0000\u00cc\b\u0000\n\u0000"+
+		"\f\u0000\u00cf\t\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0003\u0000"+
+		"\u00d4\b\u0000\u0001\u0000\u0001\u0000\u0005\u0000\u00d8\b\u0000\n\u0000"+
+		"\f\u0000\u00db\t\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+
+		"\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
+		"\u0001\u0002\u0005\u0002\u00e8\b\u0002\n\u0002\f\u0002\u00eb\t\u0002\u0001"+
+		"\u0002\u0003\u0002\u00ee\b\u0002\u0001\u0003\u0003\u0003\u00f1\b\u0003"+
+		"\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
+		"\u0001\u0005\u0003\u0005\u00fa\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+
+		"\u0001\u0006\u0001\u0006\u0001\u0006\u0005\u0006\u0102\b\u0006\n\u0006"+
+		"\f\u0006\u0105\t\u0006\u0001\u0006\u0003\u0006\u0108\b\u0006\u0001\u0007"+
+		"\u0001\u0007\u0003\u0007\u010c\b\u0007\u0001\u0007\u0001\u0007\u0003\u0007"+
+		"\u0110\b\u0007\u0001\b\u0001\b\u0001\b\u0005\b\u0115\b\b\n\b\f\b\u0118"+
+		"\t\b\u0001\t\u0001\t\u0001\t\u0005\t\u011d\b\t\n\t\f\t\u0120\t\t\u0001"+
+		"\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0005\n\u0128\b\n\n\n\f\n\u012b"+
+		"\t\n\u0001\n\u0003\n\u012e\b\n\u0001\u000b\u0001\u000b\u0003\u000b\u0132"+
+		"\b\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0003"+
+		"\f\u013a\b\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0141\b\r"+
+		"\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
+		"\u0001\u000f\u0001\u000f\u0005\u000f\u014b\b\u000f\n\u000f\f\u000f\u014e"+
+		"\t\u000f\u0001\u000f\u0003\u000f\u0151\b\u000f\u0001\u0010\u0001\u0010"+
+		"\u0001\u0010\u0001\u0010\u0003\u0010\u0157\b\u0010\u0001\u0010\u0001\u0010"+
+		"\u0003\u0010\u015b\b\u0010\u0001\u0011\u0001\u0011\u0003\u0011\u015f\b"+
+		"\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0003\u0012\u0164\b\u0012\u0001"+
+		"\u0012\u0003\u0012\u0167\b\u0012\u0001\u0012\u0003\u0012\u016a\b\u0012"+
+		"\u0001\u0012\u0001\u0012\u0001\u0012\u0004\u0012\u016f\b\u0012\u000b\u0012"+
+		"\f\u0012\u0170\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
+		"\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
+		"\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u0182\b\u0013"+
+		"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014"+
+		"\u0189\b\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+
+		"\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+
+		"\u0001\u0018\u0001\u0018\u0001\u0019\u0003\u0019\u0199\b\u0019\u0001\u0019"+
+		"\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b"+
+		"\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u01a6\b\u001c"+
+		"\u0001\u001d\u0001\u001d\u0003\u001d\u01aa\b\u001d\u0001\u001e\u0001\u001e"+
+		"\u0003\u001e\u01ae\b\u001e\u0001\u001f\u0001\u001f\u0003\u001f\u01b2\b"+
+		"\u001f\u0001 \u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+
+		"#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0003#\u01c5"+
+		"\b#\u0001#\u0001#\u0001#\u0001#\u0003#\u01cb\b#\u0003#\u01cd\b#\u0001"+
+		"$\u0001$\u0003$\u01d1\b$\u0001%\u0001%\u0003%\u01d5\b%\u0001%\u0003%\u01d8"+
+		"\b%\u0001%\u0001%\u0003%\u01dc\b%\u0003%\u01de\b%\u0001%\u0001%\u0005"+
+		"%\u01e2\b%\n%\f%\u01e5\t%\u0001%\u0001%\u0001&\u0001&\u0001&\u0003&\u01ec"+
+		"\b&\u0001\'\u0001\'\u0001\'\u0003\'\u01f1\b\'\u0001(\u0001(\u0001(\u0001"+
+		"(\u0001(\u0001(\u0001(\u0001(\u0001(\u0003(\u01fc\b(\u0001(\u0001(\u0005"+
+		"(\u0200\b(\n(\f(\u0203\t(\u0001(\u0001(\u0001)\u0001)\u0003)\u0209\b)"+
+		"\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0003"+
+		"*\u0214\b*\u0001+\u0001+\u0001+\u0003+\u0219\b+\u0001,\u0001,\u0003,\u021d"+
+		"\b,\u0001,\u0001,\u0001,\u0003,\u0222\b,\u0005,\u0224\b,\n,\f,\u0227\t"+
+		",\u0001-\u0001-\u0001-\u0005-\u022c\b-\n-\f-\u022f\t-\u0001-\u0001-\u0001"+
+		".\u0001.\u0001.\u0003.\u0236\b.\u0001/\u0001/\u0001/\u0003/\u023b\b/\u0001"+
+		"/\u0003/\u023e\b/\u00010\u00010\u00010\u00010\u00010\u00010\u00030\u0246"+
+		"\b0\u00010\u00010\u00011\u00011\u00031\u024c\b1\u00011\u00011\u00031\u0250"+
+		"\b1\u00031\u0252\b1\u00011\u00011\u00012\u00032\u0257\b2\u00012\u0001"+
+		"2\u00032\u025b\b2\u00012\u00012\u00032\u025f\b2\u00013\u00013\u00013\u0001"+
+		"3\u00013\u00013\u00033\u0267\b3\u00013\u00013\u00013\u00014\u00014\u0001"+
+		"4\u00015\u00015\u00015\u00015\u00015\u00015\u00035\u0275\b5\u00016\u0001"+
+		"6\u00036\u0279\b6\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+
+		"7\u00037\u0283\b7\u00018\u00018\u00018\u00018\u00018\u00019\u00019\u0001"+
+		":\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0003<\u0295"+
+		"\b<\u0001<\u0001<\u0005<\u0299\b<\n<\f<\u029c\t<\u0001<\u0001<\u0001="+
+		"\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+
+		"?\u0001?\u0001?\u0001?\u0001?\u0003?\u02af\b?\u0001?\u0001?\u0001@\u0001"+
+		"@\u0001@\u0001@\u0001@\u0001@\u0003@\u02b9\b@\u0001A\u0001A\u0001A\u0001"+
+		"B\u0001B\u0001B\u0001B\u0003B\u02c2\bB\u0001C\u0001C\u0003C\u02c6\bC\u0001"+
+		"D\u0001D\u0001D\u0001D\u0005D\u02cc\bD\nD\fD\u02cf\tD\u0001D\u0003D\u02d2"+
+		"\bD\u0003D\u02d4\bD\u0001D\u0001D\u0001E\u0003E\u02d9\bE\u0001E\u0003"+
+		"E\u02dc\bE\u0001E\u0001E\u0001F\u0001F\u0001F\u0001F\u0003F\u02e4\bF\u0001"+
+		"F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+
+		"F\u0001F\u0001F\u0001F\u0001F\u0005F\u02f5\bF\nF\fF\u02f8\tF\u0001G\u0001"+
+		"G\u0001G\u0001G\u0003G\u02fe\bG\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+
+		"G\u0001G\u0003G\u0307\bG\u0005G\u0309\bG\nG\fG\u030c\tG\u0001H\u0001H"+
+		"\u0001H\u0001H\u0003H\u0312\bH\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+
+		"I\u0001I\u0003I\u031b\bI\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0003"+
+		"J\u0323\bJ\u0001K\u0001K\u0001K\u0003K\u0328\bK\u0001L\u0001L\u0001L\u0001"+
+		"L\u0003L\u032e\bL\u0001M\u0001M\u0001N\u0001N\u0001O\u0001O\u0001O\u0001"+
+		"O\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+
+		"Q\u0001Q\u0001Q\u0003Q\u0344\bQ\u0001R\u0001R\u0001R\u0003R\u0349\bR\u0003"+
+		"R\u034b\bR\u0001R\u0001R\u0001S\u0001S\u0001S\u0005S\u0352\bS\nS\fS\u0355"+
+		"\tS\u0001T\u0001T\u0001T\u0003T\u035a\bT\u0001T\u0001T\u0001U\u0001U\u0003"+
+		"U\u0360\bU\u0001V\u0001V\u0003V\u0364\bV\u0001W\u0001W\u0001W\u0001W\u0001"+
+		"W\u0005W\u036b\bW\nW\fW\u036e\tW\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+
+		"X\u0003X\u0376\bX\u0001X\u0003X\u0379\bX\u0001Y\u0001Y\u0001Z\u0003Z\u037e"+
+		"\bZ\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001\\"+
+		"\u0001\\\u0001]\u0001]\u0003]\u038c\b]\u0001]\u0001]\u0003]\u0390\b]\u0001"+
+		"]\u0003]\u0393\b]\u0001]\u0001]\u0001]\u0001]\u0001]\u0003]\u039a\b]\u0001"+
+		"]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001"+
+		"_\u0001_\u0003_\u03a8\b_\u0003_\u03aa\b_\u0001_\u0003_\u03ad\b_\u0001"+
+		"_\u0003_\u03b0\b_\u0003_\u03b2\b_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001"+
+		"`\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0003b\u03c0\bb\u0001b\u0000"+
+		"\u0002\u008c\u008ec\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014"+
+		"\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfh"+
+		"jlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092"+
+		"\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa"+
+		"\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2"+
+		"\u00c4\u0000\n\u0002\u0000\u001b\u001b&&\u0001\u0000\'(\u0002\u000038"+
+		":>\u0002\u0000$$WW\u0001\u00009?\u0002\u000048=>\u0002\u000033:<\u0001"+
+		"\u0000-2\u0002\u0000@CGH\u0001\u0000NO\u03fe\u0000\u00c6\u0001\u0000\u0000"+
+		"\u0000\u0002\u00de\u0001\u0000\u0000\u0000\u0004\u00e1\u0001\u0000\u0000"+
+		"\u0000\u0006\u00f0\u0001\u0000\u0000\u0000\b\u00f4\u0001\u0000\u0000\u0000"+
+		"\n\u00f9\u0001\u0000\u0000\u0000\f\u00fb\u0001\u0000\u0000\u0000\u000e"+
+		"\u0109\u0001\u0000\u0000\u0000\u0010\u0111\u0001\u0000\u0000\u0000\u0012"+
+		"\u0119\u0001\u0000\u0000\u0000\u0014\u0121\u0001\u0000\u0000\u0000\u0016"+
+		"\u012f\u0001\u0000\u0000\u0000\u0018\u0135\u0001\u0000\u0000\u0000\u001a"+
+		"\u013b\u0001\u0000\u0000\u0000\u001c\u0142\u0001\u0000\u0000\u0000\u001e"+
+		"\u0144\u0001\u0000\u0000\u0000 \u0152\u0001\u0000\u0000\u0000\"\u015c"+
+		"\u0001\u0000\u0000\u0000$\u016e\u0001\u0000\u0000\u0000&\u0181\u0001\u0000"+
+		"\u0000\u0000(\u0188\u0001\u0000\u0000\u0000*\u018a\u0001\u0000\u0000\u0000"+
+		",\u018c\u0001\u0000\u0000\u0000.\u0190\u0001\u0000\u0000\u00000\u0193"+
+		"\u0001\u0000\u0000\u00002\u0198\u0001\u0000\u0000\u00004\u019c\u0001\u0000"+
+		"\u0000\u00006\u01a0\u0001\u0000\u0000\u00008\u01a2\u0001\u0000\u0000\u0000"+
+		":\u01a7\u0001\u0000\u0000\u0000<\u01ab\u0001\u0000\u0000\u0000>\u01af"+
+		"\u0001\u0000\u0000\u0000@\u01b3\u0001\u0000\u0000\u0000B\u01b6\u0001\u0000"+
+		"\u0000\u0000D\u01b8\u0001\u0000\u0000\u0000F\u01bb\u0001\u0000\u0000\u0000"+
+		"H\u01d0\u0001\u0000\u0000\u0000J\u01d2\u0001\u0000\u0000\u0000L\u01e8"+
+		"\u0001\u0000\u0000\u0000N\u01f0\u0001\u0000\u0000\u0000P\u01f2\u0001\u0000"+
+		"\u0000\u0000R\u0208\u0001\u0000\u0000\u0000T\u0210\u0001\u0000\u0000\u0000"+
+		"V\u0218\u0001\u0000\u0000\u0000X\u021c\u0001\u0000\u0000\u0000Z\u0228"+
+		"\u0001\u0000\u0000\u0000\\\u0232\u0001\u0000\u0000\u0000^\u023d\u0001"+
+		"\u0000\u0000\u0000`\u0245\u0001\u0000\u0000\u0000b\u0249\u0001\u0000\u0000"+
+		"\u0000d\u0256\u0001\u0000\u0000\u0000f\u0266\u0001\u0000\u0000\u0000h"+
+		"\u026b\u0001\u0000\u0000\u0000j\u0274\u0001\u0000\u0000\u0000l\u0278\u0001"+
+		"\u0000\u0000\u0000n\u0282\u0001\u0000\u0000\u0000p\u0284\u0001\u0000\u0000"+
+		"\u0000r\u0289\u0001\u0000\u0000\u0000t\u028b\u0001\u0000\u0000\u0000v"+
+		"\u028d\u0001\u0000\u0000\u0000x\u0290\u0001\u0000\u0000\u0000z\u029f\u0001"+
+		"\u0000\u0000\u0000|\u02a3\u0001\u0000\u0000\u0000~\u02ae\u0001\u0000\u0000"+
+		"\u0000\u0080\u02b8\u0001\u0000\u0000\u0000\u0082\u02ba\u0001\u0000\u0000"+
+		"\u0000\u0084\u02c1\u0001\u0000\u0000\u0000\u0086\u02c5\u0001\u0000\u0000"+
+		"\u0000\u0088\u02c7\u0001\u0000\u0000\u0000\u008a\u02d8\u0001\u0000\u0000"+
+		"\u0000\u008c\u02e3\u0001\u0000\u0000\u0000\u008e\u02fd\u0001\u0000\u0000"+
+		"\u0000\u0090\u030d\u0001\u0000\u0000\u0000\u0092\u031a\u0001\u0000\u0000"+
+		"\u0000\u0094\u0322\u0001\u0000\u0000\u0000\u0096\u0327\u0001\u0000\u0000"+
+		"\u0000\u0098\u032d\u0001\u0000\u0000\u0000\u009a\u032f\u0001\u0000\u0000"+
+		"\u0000\u009c\u0331\u0001\u0000\u0000\u0000\u009e\u0333\u0001\u0000\u0000"+
+		"\u0000\u00a0\u0337\u0001\u0000\u0000\u0000\u00a2\u0343\u0001\u0000\u0000"+
+		"\u0000\u00a4\u0345\u0001\u0000\u0000\u0000\u00a6\u034e\u0001\u0000\u0000"+
+		"\u0000\u00a8\u0359\u0001\u0000\u0000\u0000\u00aa\u035f\u0001\u0000\u0000"+
+		"\u0000\u00ac\u0363\u0001\u0000\u0000\u0000\u00ae\u0365\u0001\u0000\u0000"+
+		"\u0000\u00b0\u0375\u0001\u0000\u0000\u0000\u00b2\u037a\u0001\u0000\u0000"+
+		"\u0000\u00b4\u037d\u0001\u0000\u0000\u0000\u00b6\u0381\u0001\u0000\u0000"+
+		"\u0000\u00b8\u0385\u0001\u0000\u0000\u0000\u00ba\u0389\u0001\u0000\u0000"+
+		"\u0000\u00bc\u039d\u0001\u0000\u0000\u0000\u00be\u03a2\u0001\u0000\u0000"+
+		"\u0000\u00c0\u03b5\u0001\u0000\u0000\u0000\u00c2\u03b9\u0001\u0000\u0000"+
+		"\u0000\u00c4\u03bf\u0001\u0000\u0000\u0000\u00c6\u00c7\u0003\u0002\u0001"+
+		"\u0000\u00c7\u00cd\u0003\u00c4b\u0000\u00c8\u00c9\u0003\u0004\u0002\u0000"+
+		"\u00c9\u00ca\u0003\u00c4b\u0000\u00ca\u00cc\u0001\u0000\u0000\u0000\u00cb"+
+		"\u00c8\u0001\u0000\u0000\u0000\u00cc\u00cf\u0001\u0000\u0000\u0000\u00cd"+
+		"\u00cb\u0001\u0000\u0000\u0000\u00cd\u00ce\u0001\u0000\u0000\u0000\u00ce"+
+		"\u00d9\u0001\u0000\u0000\u0000\u00cf\u00cd\u0001\u0000\u0000\u0000\u00d0"+
+		"\u00d4\u0003\u0018\f\u0000\u00d1\u00d4\u0003\u001a\r\u0000\u00d2\u00d4"+
+		"\u0003\n\u0005\u0000\u00d3\u00d0\u0001\u0000\u0000\u0000\u00d3\u00d1\u0001"+
+		"\u0000\u0000\u0000\u00d3\u00d2\u0001\u0000\u0000\u0000\u00d4\u00d5\u0001"+
+		"\u0000\u0000\u0000\u00d5\u00d6\u0003\u00c4b\u0000\u00d6\u00d8\u0001\u0000"+
+		"\u0000\u0000\u00d7\u00d3\u0001\u0000\u0000\u0000\u00d8\u00db\u0001\u0000"+
+		"\u0000\u0000\u00d9\u00d7\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000"+
+		"\u0000\u0000\u00da\u00dc\u0001\u0000\u0000\u0000\u00db\u00d9\u0001\u0000"+
+		"\u0000\u0000\u00dc\u00dd\u0005\u0000\u0000\u0001\u00dd\u0001\u0001\u0000"+
+		"\u0000\u0000\u00de\u00df\u0005\u000e\u0000\u0000\u00df\u00e0\u0005\u001b"+
+		"\u0000\u0000\u00e0\u0003\u0001\u0000\u0000\u0000\u00e1\u00ed\u0005\u0017"+
+		"\u0000\u0000\u00e2\u00ee\u0003\u0006\u0003\u0000\u00e3\u00e9\u0005\u001c"+
+		"\u0000\u0000\u00e4\u00e5\u0003\u0006\u0003\u0000\u00e5\u00e6\u0003\u00c4"+
+		"b\u0000\u00e6\u00e8\u0001\u0000\u0000\u0000\u00e7\u00e4\u0001\u0000\u0000"+
+		"\u0000\u00e8\u00eb\u0001\u0000\u0000\u0000\u00e9\u00e7\u0001\u0000\u0000"+
+		"\u0000\u00e9\u00ea\u0001\u0000\u0000\u0000\u00ea\u00ec\u0001\u0000\u0000"+
+		"\u0000\u00eb\u00e9\u0001\u0000\u0000\u0000\u00ec\u00ee\u0005\u001d\u0000"+
+		"\u0000\u00ed\u00e2\u0001\u0000\u0000\u0000\u00ed\u00e3\u0001\u0000\u0000"+
+		"\u0000\u00ee\u0005\u0001\u0000\u0000\u0000\u00ef\u00f1\u0007\u0000\u0000"+
+		"\u0000\u00f0\u00ef\u0001\u0000\u0000\u0000\u00f0\u00f1\u0001\u0000\u0000"+
+		"\u0000\u00f1\u00f2\u0001\u0000\u0000\u0000\u00f2\u00f3\u0003\b\u0004\u0000"+
+		"\u00f3\u0007\u0001\u0000\u0000\u0000\u00f4\u00f5\u0003\u00b2Y\u0000\u00f5"+
+		"\t\u0001\u0000\u0000\u0000\u00f6\u00fa\u0003\f\u0006\u0000\u00f7\u00fa"+
+		"\u0003\u0014\n\u0000\u00f8\u00fa\u0003\u001e\u000f\u0000\u00f9\u00f6\u0001"+
+		"\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000\u0000\u0000\u00f9\u00f8\u0001"+
+		"\u0000\u0000\u0000\u00fa\u000b\u0001\u0000\u0000\u0000\u00fb\u0107\u0005"+
+		"\u0010\u0000\u0000\u00fc\u0108\u0003\u000e\u0007\u0000\u00fd\u0103\u0005"+
+		"\u001c\u0000\u0000\u00fe\u00ff\u0003\u000e\u0007\u0000\u00ff\u0100\u0003"+
+		"\u00c4b\u0000\u0100\u0102\u0001\u0000\u0000\u0000\u0101\u00fe\u0001\u0000"+
+		"\u0000\u0000\u0102\u0105\u0001\u0000\u0000\u0000\u0103\u0101\u0001\u0000"+
+		"\u0000\u0000\u0103\u0104\u0001\u0000\u0000\u0000\u0104\u0106\u0001\u0000"+
+		"\u0000\u0000\u0105\u0103\u0001\u0000\u0000\u0000\u0106\u0108\u0005\u001d"+
+		"\u0000\u0000\u0107\u00fc\u0001\u0000\u0000\u0000\u0107\u00fd\u0001\u0000"+
+		"\u0000\u0000\u0108\r\u0001\u0000\u0000\u0000\u0109\u010f\u0003\u0010\b"+
+		"\u0000\u010a\u010c\u0003j5\u0000\u010b\u010a\u0001\u0000\u0000\u0000\u010b"+
+		"\u010c\u0001\u0000\u0000\u0000\u010c\u010d\u0001\u0000\u0000\u0000\u010d"+
+		"\u010e\u0005\"\u0000\u0000\u010e\u0110\u0003\u0012\t\u0000\u010f\u010b"+
+		"\u0001\u0000\u0000\u0000\u010f\u0110\u0001\u0000\u0000\u0000\u0110\u000f"+
+		"\u0001\u0000\u0000\u0000\u0111\u0116\u0005\u001b\u0000\u0000\u0112\u0113"+
+		"\u0005#\u0000\u0000\u0113\u0115\u0005\u001b\u0000\u0000\u0114\u0112\u0001"+
+		"\u0000\u0000\u0000\u0115\u0118\u0001\u0000\u0000\u0000\u0116\u0114\u0001"+
+		"\u0000\u0000\u0000\u0116\u0117\u0001\u0000\u0000\u0000\u0117\u0011\u0001"+
+		"\u0000\u0000\u0000\u0118\u0116\u0001\u0000\u0000\u0000\u0119\u011e\u0003"+
+		"\u008cF\u0000\u011a\u011b\u0005#\u0000\u0000\u011b\u011d\u0003\u008cF"+
+		"\u0000\u011c\u011a\u0001\u0000\u0000\u0000\u011d\u0120\u0001\u0000\u0000"+
+		"\u0000\u011e\u011c\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000"+
+		"\u0000\u011f\u0013\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000\u0000"+
+		"\u0000\u0121\u012d\u0005\u0014\u0000\u0000\u0122\u012e\u0003\u0016\u000b"+
+		"\u0000\u0123\u0129\u0005\u001c\u0000\u0000\u0124\u0125\u0003\u0016\u000b"+
+		"\u0000\u0125\u0126\u0003\u00c4b\u0000\u0126\u0128\u0001\u0000\u0000\u0000"+
+		"\u0127\u0124\u0001\u0000\u0000\u0000\u0128\u012b\u0001\u0000\u0000\u0000"+
+		"\u0129\u0127\u0001\u0000\u0000\u0000\u0129\u012a\u0001\u0000\u0000\u0000"+
+		"\u012a\u012c\u0001\u0000\u0000\u0000\u012b\u0129\u0001\u0000\u0000\u0000"+
+		"\u012c\u012e\u0005\u001d\u0000\u0000\u012d\u0122\u0001\u0000\u0000\u0000"+
+		"\u012d\u0123\u0001\u0000\u0000\u0000\u012e\u0015\u0001\u0000\u0000\u0000"+
+		"\u012f\u0131\u0005\u001b\u0000\u0000\u0130\u0132\u0005\"\u0000\u0000\u0131"+
+		"\u0130\u0001\u0000\u0000\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132"+
+		"\u0133\u0001\u0000\u0000\u0000\u0133\u0134\u0003j5\u0000\u0134\u0017\u0001"+
+		"\u0000\u0000\u0000\u0135\u0136\u0005\u0003\u0000\u0000\u0136\u0137\u0005"+
+		"\u001b\u0000\u0000\u0137\u0139\u0003\u0084B\u0000\u0138\u013a\u0003\""+
+		"\u0011\u0000\u0139\u0138\u0001\u0000\u0000\u0000\u0139\u013a\u0001\u0000"+
+		"\u0000\u0000\u013a\u0019\u0001\u0000\u0000\u0000\u013b\u013c\u0005\u0003"+
+		"\u0000\u0000\u013c\u013d\u0003\u001c\u000e\u0000\u013d\u013e\u0005\u001b"+
+		"\u0000\u0000\u013e\u0140\u0003\u0084B\u0000\u013f\u0141\u0003\"\u0011"+
+		"\u0000\u0140\u013f\u0001\u0000\u0000\u0000\u0140\u0141\u0001\u0000\u0000"+
+		"\u0000\u0141\u001b\u0001\u0000\u0000\u0000\u0142\u0143\u0003\u0088D\u0000"+
+		"\u0143\u001d\u0001\u0000\u0000\u0000\u0144\u0150\u0005\u0019\u0000\u0000"+
+		"\u0145\u0151\u0003 \u0010\u0000\u0146\u014c\u0005\u001c\u0000\u0000\u0147"+
+		"\u0148\u0003 \u0010\u0000\u0148\u0149\u0003\u00c4b\u0000\u0149\u014b\u0001"+
+		"\u0000\u0000\u0000\u014a\u0147\u0001\u0000\u0000\u0000\u014b\u014e\u0001"+
+		"\u0000\u0000\u0000\u014c\u014a\u0001\u0000\u0000\u0000\u014c\u014d\u0001"+
+		"\u0000\u0000\u0000\u014d\u014f\u0001\u0000\u0000\u0000\u014e\u014c\u0001"+
+		"\u0000\u0000\u0000\u014f\u0151\u0005\u001d\u0000\u0000\u0150\u0145\u0001"+
+		"\u0000\u0000\u0000\u0150\u0146\u0001\u0000\u0000\u0000\u0151\u001f\u0001"+
+		"\u0000\u0000\u0000\u0152\u015a\u0003\u0010\b\u0000\u0153\u0156\u0003j"+
+		"5\u0000\u0154\u0155\u0005\"\u0000\u0000\u0155\u0157\u0003\u0012\t\u0000"+
+		"\u0156\u0154\u0001\u0000\u0000\u0000\u0156\u0157\u0001\u0000\u0000\u0000"+
+		"\u0157\u015b\u0001\u0000\u0000\u0000\u0158\u0159\u0005\"\u0000\u0000\u0159"+
+		"\u015b\u0003\u0012\t\u0000\u015a\u0153\u0001\u0000\u0000\u0000\u015a\u0158"+
+		"\u0001\u0000\u0000\u0000\u015b!\u0001\u0000\u0000\u0000\u015c\u015e\u0005"+
+		"\u001e\u0000\u0000\u015d\u015f\u0003$\u0012\u0000\u015e\u015d\u0001\u0000"+
+		"\u0000\u0000\u015e\u015f\u0001\u0000\u0000\u0000\u015f\u0160\u0001\u0000"+
+		"\u0000\u0000\u0160\u0161\u0005\u001f\u0000\u0000\u0161#\u0001\u0000\u0000"+
+		"\u0000\u0162\u0164\u0005$\u0000\u0000\u0163\u0162\u0001\u0000\u0000\u0000"+
+		"\u0163\u0164\u0001\u0000\u0000\u0000\u0164\u016a\u0001\u0000\u0000\u0000"+
+		"\u0165\u0167\u0005W\u0000\u0000\u0166\u0165\u0001\u0000\u0000\u0000\u0166"+
+		"\u0167\u0001\u0000\u0000\u0000\u0167\u016a\u0001\u0000\u0000\u0000\u0168"+
+		"\u016a\u0004\u0012\u0000\u0000\u0169\u0163\u0001\u0000\u0000\u0000\u0169"+
+		"\u0166\u0001\u0000\u0000\u0000\u0169\u0168\u0001\u0000\u0000\u0000\u016a"+
+		"\u016b\u0001\u0000\u0000\u0000\u016b\u016c\u0003&\u0013\u0000\u016c\u016d"+
+		"\u0003\u00c4b\u0000\u016d\u016f\u0001\u0000\u0000\u0000\u016e\u0169\u0001"+
+		"\u0000\u0000\u0000\u016f\u0170\u0001\u0000\u0000\u0000\u0170\u016e\u0001"+
+		"\u0000\u0000\u0000\u0170\u0171\u0001\u0000\u0000\u0000\u0171%\u0001\u0000"+
+		"\u0000\u0000\u0172\u0182\u0003\n\u0005\u0000\u0173\u0182\u00038\u001c"+
+		"\u0000\u0174\u0182\u0003(\u0014\u0000\u0175\u0182\u0003h4\u0000\u0176"+
+		"\u0182\u0003:\u001d\u0000\u0177\u0182\u0003<\u001e\u0000\u0178\u0182\u0003"+
+		">\u001f\u0000\u0179\u0182\u0003@ \u0000\u017a\u0182\u0003B!\u0000\u017b"+
+		"\u0182\u0003\"\u0011\u0000\u017c\u0182\u0003F#\u0000\u017d\u0182\u0003"+
+		"H$\u0000\u017e\u0182\u0003Z-\u0000\u017f\u0182\u0003b1\u0000\u0180\u0182"+
+		"\u0003D\"\u0000\u0181\u0172\u0001\u0000\u0000\u0000\u0181\u0173\u0001"+
+		"\u0000\u0000\u0000\u0181\u0174\u0001\u0000\u0000\u0000\u0181\u0175\u0001"+
+		"\u0000\u0000\u0000\u0181\u0176\u0001\u0000\u0000\u0000\u0181\u0177\u0001"+
+		"\u0000\u0000\u0000\u0181\u0178\u0001\u0000\u0000\u0000\u0181\u0179\u0001"+
+		"\u0000\u0000\u0000\u0181\u017a\u0001\u0000\u0000\u0000\u0181\u017b\u0001"+
+		"\u0000\u0000\u0000\u0181\u017c\u0001\u0000\u0000\u0000\u0181\u017d\u0001"+
+		"\u0000\u0000\u0000\u0181\u017e\u0001\u0000\u0000\u0000\u0181\u017f\u0001"+
+		"\u0000\u0000\u0000\u0181\u0180\u0001\u0000\u0000\u0000\u0182\'\u0001\u0000"+
+		"\u0000\u0000\u0183\u0189\u0003,\u0016\u0000\u0184\u0189\u0003.\u0017\u0000"+
+		"\u0185\u0189\u00030\u0018\u0000\u0186\u0189\u0003*\u0015\u0000\u0187\u0189"+
+		"\u00034\u001a\u0000\u0188\u0183\u0001\u0000\u0000\u0000\u0188\u0184\u0001"+
+		"\u0000\u0000\u0000\u0188\u0185\u0001\u0000\u0000\u0000\u0188\u0186\u0001"+
+		"\u0000\u0000\u0000\u0188\u0187\u0001\u0000\u0000\u0000\u0189)\u0001\u0000"+
+		"\u0000\u0000\u018a\u018b\u0003\u008cF\u0000\u018b+\u0001\u0000\u0000\u0000"+
+		"\u018c\u018d\u0003\u008cF\u0000\u018d\u018e\u0005?\u0000\u0000\u018e\u018f"+
+		"\u0003\u008cF\u0000\u018f-\u0001\u0000\u0000\u0000\u0190\u0191\u0003\u008c"+
+		"F\u0000\u0191\u0192\u0007\u0001\u0000\u0000\u0192/\u0001\u0000\u0000\u0000"+
+		"\u0193\u0194\u0003\u0012\t\u0000\u0194\u0195\u00032\u0019\u0000\u0195"+
+		"\u0196\u0003\u0012\t\u0000\u01961\u0001\u0000\u0000\u0000\u0197\u0199"+
+		"\u0007\u0002\u0000\u0000\u0198\u0197\u0001\u0000\u0000\u0000\u0198\u0199"+
+		"\u0001\u0000\u0000\u0000\u0199\u019a\u0001\u0000\u0000\u0000\u019a\u019b"+
+		"\u0005\"\u0000\u0000\u019b3\u0001\u0000\u0000\u0000\u019c\u019d\u0003"+
+		"\u0010\b\u0000\u019d\u019e\u0005)\u0000\u0000\u019e\u019f\u0003\u0012"+
+		"\t\u0000\u019f5\u0001\u0000\u0000\u0000\u01a0\u01a1\u0007\u0003\u0000"+
+		"\u0000\u01a17\u0001\u0000\u0000\u0000\u01a2\u01a3\u0005\u001b\u0000\u0000"+
+		"\u01a3\u01a5\u0005%\u0000\u0000\u01a4\u01a6\u0003&\u0013\u0000\u01a5\u01a4"+
+		"\u0001\u0000\u0000\u0000\u01a5\u01a6\u0001\u0000\u0000\u0000\u01a69\u0001"+
+		"\u0000\u0000\u0000\u01a7\u01a9\u0005\u0018\u0000\u0000\u01a8\u01aa\u0003"+
+		"\u0012\t\u0000\u01a9\u01a8\u0001\u0000\u0000\u0000\u01a9\u01aa\u0001\u0000"+
+		"\u0000\u0000\u01aa;\u0001\u0000\u0000\u0000\u01ab\u01ad\u0005\u0001\u0000"+
+		"\u0000\u01ac\u01ae\u0005\u001b\u0000\u0000\u01ad\u01ac\u0001\u0000\u0000"+
+		"\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000\u01ae=\u0001\u0000\u0000\u0000"+
+		"\u01af\u01b1\u0005\u0015\u0000\u0000\u01b0\u01b2\u0005\u001b\u0000\u0000"+
+		"\u01b1\u01b0\u0001\u0000\u0000\u0000\u01b1\u01b2\u0001\u0000\u0000\u0000"+
+		"\u01b2?\u0001\u0000\u0000\u0000\u01b3\u01b4\u0005\r\u0000\u0000\u01b4"+
+		"\u01b5\u0005\u001b\u0000\u0000\u01b5A\u0001\u0000\u0000\u0000\u01b6\u01b7"+
+		"\u0005\u0011\u0000\u0000\u01b7C\u0001\u0000\u0000\u0000\u01b8\u01b9\u0005"+
+		"\u0007\u0000\u0000\u01b9\u01ba\u0003\u008cF\u0000\u01baE\u0001\u0000\u0000"+
+		"\u0000\u01bb\u01c4\u0005\u0012\u0000\u0000\u01bc\u01c5\u0003\u008cF\u0000"+
+		"\u01bd\u01be\u0003\u00c4b\u0000\u01be\u01bf\u0003\u008cF\u0000\u01bf\u01c5"+
+		"\u0001\u0000\u0000\u0000\u01c0\u01c1\u0003(\u0014\u0000\u01c1\u01c2\u0003"+
+		"\u00c4b\u0000\u01c2\u01c3\u0003\u008cF\u0000\u01c3\u01c5\u0001\u0000\u0000"+
+		"\u0000\u01c4\u01bc\u0001\u0000\u0000\u0000\u01c4\u01bd\u0001\u0000\u0000"+
+		"\u0000\u01c4\u01c0\u0001\u0000\u0000\u0000\u01c5\u01c6\u0001\u0000\u0000"+
+		"\u0000\u01c6\u01cc\u0003\"\u0011\u0000\u01c7\u01ca\u0005\f\u0000\u0000"+
+		"\u01c8\u01cb\u0003F#\u0000\u01c9\u01cb\u0003\"\u0011\u0000\u01ca\u01c8"+
+		"\u0001\u0000\u0000\u0000\u01ca\u01c9\u0001\u0000\u0000\u0000\u01cb\u01cd"+
+		"\u0001\u0000\u0000\u0000\u01cc\u01c7\u0001\u0000\u0000\u0000\u01cc\u01cd"+
+		"\u0001\u0000\u0000\u0000\u01cdG\u0001\u0000\u0000\u0000\u01ce\u01d1\u0003"+
+		"J%\u0000\u01cf\u01d1\u0003P(\u0000\u01d0\u01ce\u0001\u0000\u0000\u0000"+
+		"\u01d0\u01cf\u0001\u0000\u0000\u0000\u01d1I\u0001\u0000\u0000\u0000\u01d2"+
+		"\u01dd\u0005\u000f\u0000\u0000\u01d3\u01d5\u0003\u008cF\u0000\u01d4\u01d3"+
+		"\u0001\u0000\u0000\u0000\u01d4\u01d5\u0001\u0000\u0000\u0000\u01d5\u01de"+
+		"\u0001\u0000\u0000\u0000\u01d6\u01d8\u0003(\u0014\u0000\u01d7\u01d6\u0001"+
+		"\u0000\u0000\u0000\u01d7\u01d8\u0001\u0000\u0000\u0000\u01d8\u01d9\u0001"+
+		"\u0000\u0000\u0000\u01d9\u01db\u0003\u00c4b\u0000\u01da\u01dc\u0003\u008c"+
+		"F\u0000\u01db\u01da\u0001\u0000\u0000\u0000\u01db\u01dc\u0001\u0000\u0000"+
+		"\u0000\u01dc\u01de\u0001\u0000\u0000\u0000\u01dd\u01d4\u0001\u0000\u0000"+
+		"\u0000\u01dd\u01d7\u0001\u0000\u0000\u0000\u01de\u01df\u0001\u0000\u0000"+
+		"\u0000\u01df\u01e3\u0005\u001e\u0000\u0000\u01e0\u01e2\u0003L&\u0000\u01e1"+
+		"\u01e0\u0001\u0000\u0000\u0000\u01e2\u01e5\u0001\u0000\u0000\u0000\u01e3"+
+		"\u01e1\u0001\u0000\u0000\u0000\u01e3\u01e4\u0001\u0000\u0000\u0000\u01e4"+
+		"\u01e6\u0001\u0000\u0000\u0000\u01e5\u01e3\u0001\u0000\u0000\u0000\u01e6"+
+		"\u01e7\u0005\u001f\u0000\u0000\u01e7K\u0001\u0000\u0000\u0000\u01e8\u01e9"+
+		"\u0003N\'\u0000\u01e9\u01eb\u0005%\u0000\u0000\u01ea\u01ec\u0003$\u0012"+
+		"\u0000\u01eb\u01ea\u0001\u0000\u0000\u0000\u01eb\u01ec\u0001\u0000\u0000"+
+		"\u0000\u01ecM\u0001\u0000\u0000\u0000\u01ed\u01ee\u0005\u0006\u0000\u0000"+
+		"\u01ee\u01f1\u0003\u0012\t\u0000\u01ef\u01f1\u0005\u0002\u0000\u0000\u01f0"+
+		"\u01ed\u0001\u0000\u0000\u0000\u01f0\u01ef\u0001\u0000\u0000\u0000\u01f1"+
+		"O\u0001\u0000\u0000\u0000\u01f2\u01fb\u0005\u000f\u0000\u0000\u01f3\u01fc"+
+		"\u0003R)\u0000\u01f4\u01f5\u0003\u00c4b\u0000\u01f5\u01f6\u0003R)\u0000"+
+		"\u01f6\u01fc\u0001\u0000\u0000\u0000\u01f7\u01f8\u0003(\u0014\u0000\u01f8"+
+		"\u01f9\u0003\u00c4b\u0000\u01f9\u01fa\u0003R)\u0000\u01fa\u01fc\u0001"+
+		"\u0000\u0000\u0000\u01fb\u01f3\u0001\u0000\u0000\u0000\u01fb\u01f4\u0001"+
+		"\u0000\u0000\u0000\u01fb\u01f7\u0001\u0000\u0000\u0000\u01fc\u01fd\u0001"+
+		"\u0000\u0000\u0000\u01fd\u0201\u0005\u001e\u0000\u0000\u01fe\u0200\u0003"+
+		"T*\u0000\u01ff\u01fe\u0001\u0000\u0000\u0000\u0200\u0203\u0001\u0000\u0000"+
+		"\u0000\u0201\u01ff\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000"+
+		"\u0000\u0202\u0204\u0001\u0000\u0000\u0000\u0203\u0201\u0001\u0000\u0000"+
+		"\u0000\u0204\u0205\u0005\u001f\u0000\u0000\u0205Q\u0001\u0000\u0000\u0000"+
+		"\u0206\u0207\u0005\u001b\u0000\u0000\u0207\u0209\u0005)\u0000\u0000\u0208"+
+		"\u0206\u0001\u0000\u0000\u0000\u0208\u0209\u0001\u0000\u0000\u0000\u0209"+
+		"\u020a\u0001\u0000\u0000\u0000\u020a\u020b\u0003\u008eG\u0000\u020b\u020c"+
+		"\u0005&\u0000\u0000\u020c\u020d\u0005\u001c\u0000\u0000\u020d\u020e\u0005"+
+		"\u0014\u0000\u0000\u020e\u020f\u0005\u001d\u0000\u0000\u020fS\u0001\u0000"+
+		"\u0000\u0000\u0210\u0211\u0003V+\u0000\u0211\u0213\u0005%\u0000\u0000"+
+		"\u0212\u0214\u0003$\u0012\u0000\u0213\u0212\u0001\u0000\u0000\u0000\u0213"+
+		"\u0214\u0001\u0000\u0000\u0000\u0214U\u0001\u0000\u0000\u0000\u0215\u0216"+
+		"\u0005\u0006\u0000\u0000\u0216\u0219\u0003X,\u0000\u0217\u0219\u0005\u0002"+
+		"\u0000\u0000\u0218\u0215\u0001\u0000\u0000\u0000\u0218\u0217\u0001\u0000"+
+		"\u0000\u0000\u0219W\u0001\u0000\u0000\u0000\u021a\u021d\u0003j5\u0000"+
+		"\u021b\u021d\u0005\u001a\u0000\u0000\u021c\u021a\u0001\u0000\u0000\u0000"+
+		"\u021c\u021b\u0001\u0000\u0000\u0000\u021d\u0225\u0001\u0000\u0000\u0000"+
+		"\u021e\u0221\u0005#\u0000\u0000\u021f\u0222\u0003j5\u0000\u0220\u0222"+
+		"\u0005\u001a\u0000\u0000\u0221\u021f\u0001\u0000\u0000\u0000\u0221\u0220"+
+		"\u0001\u0000\u0000\u0000\u0222\u0224\u0001\u0000\u0000\u0000\u0223\u021e"+
+		"\u0001\u0000\u0000\u0000\u0224\u0227\u0001\u0000\u0000\u0000\u0225\u0223"+
+		"\u0001\u0000\u0000\u0000\u0225\u0226\u0001\u0000\u0000\u0000\u0226Y\u0001"+
+		"\u0000\u0000\u0000\u0227\u0225\u0001\u0000\u0000\u0000\u0228\u0229\u0005"+
+		"\u0005\u0000\u0000\u0229\u022d\u0005\u001e\u0000\u0000\u022a\u022c\u0003"+
+		"\\.\u0000\u022b\u022a\u0001\u0000\u0000\u0000\u022c\u022f\u0001\u0000"+
+		"\u0000\u0000\u022d\u022b\u0001\u0000\u0000\u0000\u022d\u022e\u0001\u0000"+
+		"\u0000\u0000\u022e\u0230\u0001\u0000\u0000\u0000\u022f\u022d\u0001\u0000"+
+		"\u0000\u0000\u0230\u0231\u0005\u001f\u0000\u0000\u0231[\u0001\u0000\u0000"+
+		"\u0000\u0232\u0233\u0003^/\u0000\u0233\u0235\u0005%\u0000\u0000\u0234"+
+		"\u0236\u0003$\u0012\u0000\u0235\u0234\u0001\u0000\u0000\u0000\u0235\u0236"+
+		"\u0001\u0000\u0000\u0000\u0236]\u0001\u0000\u0000\u0000\u0237\u023a\u0005"+
+		"\u0006\u0000\u0000\u0238\u023b\u0003,\u0016\u0000\u0239\u023b\u0003`0"+
+		"\u0000\u023a\u0238\u0001\u0000\u0000\u0000\u023a\u0239\u0001\u0000\u0000"+
+		"\u0000\u023b\u023e\u0001\u0000\u0000\u0000\u023c\u023e\u0005\u0002\u0000"+
+		"\u0000\u023d\u0237\u0001\u0000\u0000\u0000\u023d\u023c\u0001\u0000\u0000"+
+		"\u0000\u023e_\u0001\u0000\u0000\u0000\u023f\u0240\u0003\u0012\t\u0000"+
+		"\u0240\u0241\u0005\"\u0000\u0000\u0241\u0246\u0001\u0000\u0000\u0000\u0242"+
+		"\u0243\u0003\u0010\b\u0000\u0243\u0244\u0005)\u0000\u0000\u0244\u0246"+
+		"\u0001\u0000\u0000\u0000\u0245\u023f\u0001\u0000\u0000\u0000\u0245\u0242"+
+		"\u0001\u0000\u0000\u0000\u0245\u0246\u0001\u0000\u0000\u0000\u0246\u0247"+
+		"\u0001\u0000\u0000\u0000\u0247\u0248\u0003\u008cF\u0000\u0248a\u0001\u0000"+
+		"\u0000\u0000\u0249\u0251\u0005\u0016\u0000\u0000\u024a\u024c\u0003\u008c"+
+		"F\u0000\u024b\u024a\u0001\u0000\u0000\u0000\u024b\u024c\u0001\u0000\u0000"+
+		"\u0000\u024c\u0252\u0001\u0000\u0000\u0000\u024d\u0252\u0003d2\u0000\u024e"+
+		"\u0250\u0003f3\u0000\u024f\u024e\u0001\u0000\u0000\u0000\u024f\u0250\u0001"+
+		"\u0000\u0000\u0000\u0250\u0252\u0001\u0000\u0000\u0000\u0251\u024b\u0001"+
+		"\u0000\u0000\u0000\u0251\u024d\u0001\u0000\u0000\u0000\u0251\u024f\u0001"+
+		"\u0000\u0000\u0000\u0252\u0253\u0001\u0000\u0000\u0000\u0253\u0254\u0003"+
+		"\"\u0011\u0000\u0254c\u0001\u0000\u0000\u0000\u0255\u0257\u0003(\u0014"+
+		"\u0000\u0256\u0255\u0001\u0000\u0000\u0000\u0256\u0257\u0001\u0000\u0000"+
+		"\u0000\u0257\u0258\u0001\u0000\u0000\u0000\u0258\u025a\u0003\u00c4b\u0000"+
+		"\u0259\u025b\u0003\u008cF\u0000\u025a\u0259\u0001\u0000\u0000\u0000\u025a"+
+		"\u025b\u0001\u0000\u0000\u0000\u025b\u025c\u0001\u0000\u0000\u0000\u025c"+
+		"\u025e\u0003\u00c4b\u0000\u025d\u025f\u0003(\u0014\u0000\u025e\u025d\u0001"+
+		"\u0000\u0000\u0000\u025e\u025f\u0001\u0000\u0000\u0000\u025fe\u0001\u0000"+
+		"\u0000\u0000\u0260\u0261\u0003\u0012\t\u0000\u0261\u0262\u0005\"\u0000"+
+		"\u0000\u0262\u0267\u0001\u0000\u0000\u0000\u0263\u0264\u0003\u0010\b\u0000"+
+		"\u0264\u0265\u0005)\u0000\u0000\u0265\u0267\u0001\u0000\u0000\u0000\u0266"+
+		"\u0260\u0001\u0000\u0000\u0000\u0266\u0263\u0001\u0000\u0000\u0000\u0266"+
+		"\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0001\u0000\u0000\u0000\u0268"+
+		"\u0269\u0005\u0013\u0000\u0000\u0269\u026a\u0003\u008cF\u0000\u026ag\u0001"+
+		"\u0000\u0000\u0000\u026b\u026c\u0005\b\u0000\u0000\u026c\u026d\u0003\u008c"+
+		"F\u0000\u026di\u0001\u0000\u0000\u0000\u026e\u0275\u0003l6\u0000\u026f"+
+		"\u0275\u0003n7\u0000\u0270\u0271\u0005\u001c\u0000\u0000\u0271\u0272\u0003"+
+		"j5\u0000\u0272\u0273\u0005\u001d\u0000\u0000\u0273\u0275\u0001\u0000\u0000"+
+		"\u0000\u0274\u026e\u0001\u0000\u0000\u0000\u0274\u026f\u0001\u0000\u0000"+
+		"\u0000\u0274\u0270\u0001\u0000\u0000\u0000\u0275k\u0001\u0000\u0000\u0000"+
+		"\u0276\u0279\u0003\u009eO\u0000\u0277\u0279\u0005\u001b\u0000\u0000\u0278"+
+		"\u0276\u0001\u0000\u0000\u0000\u0278\u0277\u0001\u0000\u0000\u0000\u0279"+
+		"m\u0001\u0000\u0000\u0000\u027a\u0283\u0003p8\u0000\u027b\u0283\u0003"+
+		"\u00aeW\u0000\u027c\u0283\u0003v;\u0000\u027d\u0283\u0003\u0082A\u0000"+
+		"\u027e\u0283\u0003x<\u0000\u027f\u0283\u0003z=\u0000\u0280\u0283\u0003"+
+		"|>\u0000\u0281\u0283\u0003~?\u0000\u0282\u027a\u0001\u0000\u0000\u0000"+
+		"\u0282\u027b\u0001\u0000\u0000\u0000\u0282\u027c\u0001\u0000\u0000\u0000"+
+		"\u0282\u027d\u0001\u0000\u0000\u0000\u0282\u027e\u0001\u0000\u0000\u0000"+
+		"\u0282\u027f\u0001\u0000\u0000\u0000\u0282\u0280\u0001\u0000\u0000\u0000"+
+		"\u0282\u0281\u0001\u0000\u0000\u0000\u0283o\u0001\u0000\u0000\u0000\u0284"+
+		"\u0285\u0005 \u0000\u0000\u0285\u0286\u0003r9\u0000\u0286\u0287\u0005"+
+		"!\u0000\u0000\u0287\u0288\u0003t:\u0000\u0288q\u0001\u0000\u0000\u0000"+
+		"\u0289\u028a\u0003\u008cF\u0000\u028as\u0001\u0000\u0000\u0000\u028b\u028c"+
+		"\u0003j5\u0000\u028cu\u0001\u0000\u0000\u0000\u028d\u028e\u0005=\u0000"+
+		"\u0000\u028e\u028f\u0003j5\u0000\u028fw\u0001\u0000\u0000\u0000\u0290"+
+		"\u0291\u0005\u0004\u0000\u0000\u0291\u029a\u0005\u001e\u0000\u0000\u0292"+
+		"\u0295\u0003\u0080@\u0000\u0293\u0295\u0003l6\u0000\u0294\u0292\u0001"+
+		"\u0000\u0000\u0000\u0294\u0293\u0001\u0000\u0000\u0000\u0295\u0296\u0001"+
+		"\u0000\u0000\u0000\u0296\u0297\u0003\u00c4b\u0000\u0297\u0299\u0001\u0000"+
+		"\u0000\u0000\u0298\u0294\u0001\u0000\u0000\u0000\u0299\u029c\u0001\u0000"+
+		"\u0000\u0000\u029a\u0298\u0001\u0000\u0000\u0000\u029a\u029b\u0001\u0000"+
+		"\u0000\u0000\u029b\u029d\u0001\u0000\u0000\u0000\u029c\u029a\u0001\u0000"+
+		"\u0000\u0000\u029d\u029e\u0005\u001f\u0000\u0000\u029ey\u0001\u0000\u0000"+
+		"\u0000\u029f\u02a0\u0005 \u0000\u0000\u02a0\u02a1\u0005!\u0000\u0000\u02a1"+
+		"\u02a2\u0003t:\u0000\u02a2{\u0001\u0000\u0000\u0000\u02a3\u02a4\u0005"+
+		"\t\u0000\u0000\u02a4\u02a5\u0005 \u0000\u0000\u02a5\u02a6\u0003j5\u0000"+
+		"\u02a6\u02a7\u0005!\u0000\u0000\u02a7\u02a8\u0003t:\u0000\u02a8}\u0001"+
+		"\u0000\u0000\u0000\u02a9\u02af\u0005\u000b\u0000\u0000\u02aa\u02ab\u0005"+
+		"\u000b\u0000\u0000\u02ab\u02af\u0005?\u0000\u0000\u02ac\u02ad\u0005?\u0000"+
+		"\u0000\u02ad\u02af\u0005\u000b\u0000\u0000\u02ae\u02a9\u0001\u0000\u0000"+
+		"\u0000\u02ae\u02aa\u0001\u0000\u0000\u0000\u02ae\u02ac\u0001\u0000\u0000"+
+		"\u0000\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0\u02b1\u0003t:\u0000\u02b1"+
+		"\u007f\u0001\u0000\u0000\u0000\u02b2\u02b3\u0005\u001b\u0000\u0000\u02b3"+
+		"\u02b4\u0003\u0088D\u0000\u02b4\u02b5\u0003\u0086C\u0000\u02b5\u02b9\u0001"+
+		"\u0000\u0000\u0000\u02b6\u02b7\u0005\u001b\u0000\u0000\u02b7\u02b9\u0003"+
+		"\u0088D\u0000\u02b8\u02b2\u0001\u0000\u0000\u0000\u02b8\u02b6\u0001\u0000"+
+		"\u0000\u0000\u02b9\u0081\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005\u0003"+
+		"\u0000\u0000\u02bb\u02bc\u0003\u0084B\u0000\u02bc\u0083\u0001\u0000\u0000"+
+		"\u0000\u02bd\u02be\u0003\u0088D\u0000\u02be\u02bf\u0003\u0086C\u0000\u02bf"+
+		"\u02c2\u0001\u0000\u0000\u0000\u02c0\u02c2\u0003\u0088D\u0000\u02c1\u02bd"+
+		"\u0001\u0000\u0000\u0000\u02c1\u02c0\u0001\u0000\u0000\u0000\u02c2\u0085"+
+		"\u0001\u0000\u0000\u0000\u02c3\u02c6\u0003\u0088D\u0000\u02c4\u02c6\u0003"+
+		"j5\u0000\u02c5\u02c3\u0001\u0000\u0000\u0000\u02c5\u02c4\u0001\u0000\u0000"+
+		"\u0000\u02c6\u0087\u0001\u0000\u0000\u0000\u02c7\u02d3\u0005\u001c\u0000"+
+		"\u0000\u02c8\u02cd\u0003\u008aE\u0000\u02c9\u02ca\u0005#\u0000\u0000\u02ca"+
+		"\u02cc\u0003\u008aE\u0000\u02cb\u02c9\u0001\u0000\u0000\u0000\u02cc\u02cf"+
+		"\u0001\u0000\u0000\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce"+
+		"\u0001\u0000\u0000\u0000\u02ce\u02d1\u0001\u0000\u0000\u0000\u02cf\u02cd"+
+		"\u0001\u0000\u0000\u0000\u02d0\u02d2\u0005#\u0000\u0000\u02d1\u02d0\u0001"+
+		"\u0000\u0000\u0000\u02d1\u02d2\u0001\u0000\u0000\u0000\u02d2\u02d4\u0001"+
+		"\u0000\u0000\u0000\u02d3\u02c8\u0001\u0000\u0000\u0000\u02d3\u02d4\u0001"+
+		"\u0000\u0000\u0000\u02d4\u02d5\u0001\u0000\u0000\u0000\u02d5\u02d6\u0005"+
+		"\u001d\u0000\u0000\u02d6\u0089\u0001\u0000\u0000\u0000\u02d7\u02d9\u0003"+
+		"\u0010\b\u0000\u02d8\u02d7\u0001\u0000\u0000\u0000\u02d8\u02d9\u0001\u0000"+
+		"\u0000\u0000\u02d9\u02db\u0001\u0000\u0000\u0000\u02da\u02dc\u0005*\u0000"+
+		"\u0000\u02db\u02da\u0001\u0000\u0000\u0000\u02db\u02dc\u0001\u0000\u0000"+
+		"\u0000\u02dc\u02dd\u0001\u0000\u0000\u0000\u02dd\u02de\u0003j5\u0000\u02de"+
+		"\u008b\u0001\u0000\u0000\u0000\u02df\u02e0\u0006F\uffff\uffff\u0000\u02e0"+
+		"\u02e4\u0003\u008eG\u0000\u02e1\u02e2\u0007\u0004\u0000\u0000\u02e2\u02e4"+
+		"\u0003\u008cF\u0006\u02e3\u02df\u0001\u0000\u0000\u0000\u02e3\u02e1\u0001"+
+		"\u0000\u0000\u0000\u02e4\u02f6\u0001\u0000\u0000\u0000\u02e5\u02e6\n\u0005"+
+		"\u0000\u0000\u02e6\u02e7\u0007\u0005\u0000\u0000\u02e7\u02f5\u0003\u008c"+
+		"F\u0006\u02e8\u02e9\n\u0004\u0000\u0000\u02e9\u02ea\u0007\u0006\u0000"+
+		"\u0000\u02ea\u02f5\u0003\u008cF\u0005\u02eb\u02ec\n\u0003\u0000\u0000"+
+		"\u02ec\u02ed\u0007\u0007\u0000\u0000\u02ed\u02f5\u0003\u008cF\u0004\u02ee"+
+		"\u02ef\n\u0002\u0000\u0000\u02ef\u02f0\u0005,\u0000\u0000\u02f0\u02f5"+
+		"\u0003\u008cF\u0003\u02f1\u02f2\n\u0001\u0000\u0000\u02f2\u02f3\u0005"+
+		"+\u0000\u0000\u02f3\u02f5\u0003\u008cF\u0002\u02f4\u02e5\u0001\u0000\u0000"+
+		"\u0000\u02f4\u02e8\u0001\u0000\u0000\u0000\u02f4\u02eb\u0001\u0000\u0000"+
+		"\u0000\u02f4\u02ee\u0001\u0000\u0000\u0000\u02f4\u02f1\u0001\u0000\u0000"+
+		"\u0000\u02f5\u02f8\u0001\u0000\u0000\u0000\u02f6\u02f4\u0001\u0000\u0000"+
+		"\u0000\u02f6\u02f7\u0001\u0000\u0000\u0000\u02f7\u008d\u0001\u0000\u0000"+
+		"\u0000\u02f8\u02f6\u0001\u0000\u0000\u0000\u02f9\u02fa\u0006G\uffff\uffff"+
+		"\u0000\u02fa\u02fe\u0003\u0094J\u0000\u02fb\u02fe\u0003\u0090H\u0000\u02fc"+
+		"\u02fe\u0003\u00c0`\u0000\u02fd\u02f9\u0001\u0000\u0000\u0000\u02fd\u02fb"+
+		"\u0001\u0000\u0000\u0000\u02fd\u02fc\u0001\u0000\u0000\u0000\u02fe\u030a"+
+		"\u0001\u0000\u0000\u0000\u02ff\u0306\n\u0001\u0000\u0000\u0300\u0301\u0005"+
+		"&\u0000\u0000\u0301\u0307\u0005\u001b\u0000\u0000\u0302\u0307\u0003\u00b8"+
+		"\\\u0000\u0303\u0307\u0003\u00ba]\u0000\u0304\u0307\u0003\u00bc^\u0000"+
+		"\u0305\u0307\u0003\u00be_\u0000\u0306\u0300\u0001\u0000\u0000\u0000\u0306"+
+		"\u0302\u0001\u0000\u0000\u0000\u0306\u0303\u0001\u0000\u0000\u0000\u0306"+
+		"\u0304\u0001\u0000\u0000\u0000\u0306\u0305\u0001\u0000\u0000\u0000\u0307"+
+		"\u0309\u0001\u0000\u0000\u0000\u0308\u02ff\u0001\u0000\u0000\u0000\u0309"+
+		"\u030c\u0001\u0000\u0000\u0000\u030a\u0308\u0001\u0000\u0000\u0000\u030a"+
+		"\u030b\u0001\u0000\u0000\u0000\u030b\u008f\u0001\u0000\u0000\u0000\u030c"+
+		"\u030a\u0001\u0000\u0000\u0000\u030d\u030e\u0003\u0092I\u0000\u030e\u030f"+
+		"\u0005\u001c\u0000\u0000\u030f\u0311\u0003\u008cF\u0000\u0310\u0312\u0005"+
+		"#\u0000\u0000\u0311\u0310\u0001\u0000\u0000\u0000\u0311\u0312\u0001\u0000"+
+		"\u0000\u0000\u0312\u0313\u0001\u0000\u0000\u0000\u0313\u0314\u0005\u001d"+
+		"\u0000\u0000\u0314\u0091\u0001\u0000\u0000\u0000\u0315\u031b\u0003n7\u0000"+
+		"\u0316\u0317\u0005\u001c\u0000\u0000\u0317\u0318\u0003\u0092I\u0000\u0318"+
+		"\u0319\u0005\u001d\u0000\u0000\u0319\u031b\u0001\u0000\u0000\u0000\u031a"+
+		"\u0315\u0001\u0000\u0000\u0000\u031a\u0316\u0001\u0000\u0000\u0000\u031b"+
+		"\u0093\u0001\u0000\u0000\u0000\u031c\u0323\u0003\u0096K\u0000\u031d\u0323"+
+		"\u0003\u009cN\u0000\u031e\u031f\u0005\u001c\u0000\u0000\u031f\u0320\u0003"+
+		"\u008cF\u0000\u0320\u0321\u0005\u001d\u0000\u0000\u0321\u0323\u0001\u0000"+
+		"\u0000\u0000\u0322\u031c\u0001\u0000\u0000\u0000\u0322\u031d\u0001\u0000"+
+		"\u0000\u0000\u0322\u031e\u0001\u0000\u0000\u0000\u0323\u0095\u0001\u0000"+
+		"\u0000\u0000\u0324\u0328\u0003\u0098L\u0000\u0325\u0328\u0003\u00a0P\u0000"+
+		"\u0326\u0328\u0003\u00b6[\u0000\u0327\u0324\u0001\u0000\u0000\u0000\u0327"+
+		"\u0325\u0001\u0000\u0000\u0000\u0327\u0326\u0001\u0000\u0000\u0000\u0328"+
+		"\u0097\u0001\u0000\u0000\u0000\u0329\u032e\u0005\u001a\u0000\u0000\u032a"+
+		"\u032e\u0003\u009aM\u0000\u032b\u032e\u0003\u00b2Y\u0000\u032c\u032e\u0005"+
+		"D\u0000\u0000\u032d\u0329\u0001\u0000\u0000\u0000\u032d\u032a\u0001\u0000"+
+		"\u0000\u0000\u032d\u032b\u0001\u0000\u0000\u0000\u032d\u032c\u0001\u0000"+
+		"\u0000\u0000\u032e\u0099\u0001\u0000\u0000\u0000\u032f\u0330\u0007\b\u0000"+
+		"\u0000\u0330\u009b\u0001\u0000\u0000\u0000\u0331\u0332\u0005\u001b\u0000"+
+		"\u0000\u0332\u009d\u0001\u0000\u0000\u0000\u0333\u0334\u0005\u001b\u0000"+
+		"\u0000\u0334\u0335\u0005&\u0000\u0000\u0335\u0336\u0005\u001b\u0000\u0000"+
+		"\u0336\u009f\u0001\u0000\u0000\u0000\u0337\u0338\u0003\u00a2Q\u0000\u0338"+
+		"\u0339\u0003\u00a4R\u0000\u0339\u00a1\u0001\u0000\u0000\u0000\u033a\u0344"+
+		"\u0003\u00aeW\u0000\u033b\u0344\u0003p8\u0000\u033c\u033d\u0005 \u0000"+
+		"\u0000\u033d\u033e\u0005*\u0000\u0000\u033e\u033f\u0005!\u0000\u0000\u033f"+
+		"\u0344\u0003t:\u0000\u0340\u0344\u0003z=\u0000\u0341\u0344\u0003|>\u0000"+
+		"\u0342\u0344\u0003l6\u0000\u0343\u033a\u0001\u0000\u0000\u0000\u0343\u033b"+
+		"\u0001\u0000\u0000\u0000\u0343\u033c\u0001\u0000\u0000\u0000\u0343\u0340"+
+		"\u0001\u0000\u0000\u0000\u0343\u0341\u0001\u0000\u0000\u0000\u0343\u0342"+
+		"\u0001\u0000\u0000\u0000\u0344\u00a3\u0001\u0000\u0000\u0000\u0345\u034a"+
+		"\u0005\u001e\u0000\u0000\u0346\u0348\u0003\u00a6S\u0000\u0347\u0349\u0005"+
+		"#\u0000\u0000\u0348\u0347\u0001\u0000\u0000\u0000\u0348\u0349\u0001\u0000"+
+		"\u0000\u0000\u0349\u034b\u0001\u0000\u0000\u0000\u034a\u0346\u0001\u0000"+
+		"\u0000\u0000\u034a\u034b\u0001\u0000\u0000\u0000\u034b\u034c\u0001\u0000"+
+		"\u0000\u0000\u034c\u034d\u0005\u001f\u0000\u0000\u034d\u00a5\u0001\u0000"+
+		"\u0000\u0000\u034e\u0353\u0003\u00a8T\u0000\u034f\u0350\u0005#\u0000\u0000"+
+		"\u0350\u0352\u0003\u00a8T\u0000\u0351\u034f\u0001\u0000\u0000\u0000\u0352"+
+		"\u0355\u0001\u0000\u0000\u0000\u0353\u0351\u0001\u0000\u0000\u0000\u0353"+
+		"\u0354\u0001\u0000\u0000\u0000\u0354\u00a7\u0001\u0000\u0000\u0000\u0355"+
+		"\u0353\u0001\u0000\u0000\u0000\u0356\u0357\u0003\u00aaU\u0000\u0357\u0358"+
+		"\u0005%\u0000\u0000\u0358\u035a\u0001\u0000\u0000\u0000\u0359\u0356\u0001"+
+		"\u0000\u0000\u0000\u0359\u035a\u0001\u0000\u0000\u0000\u035a\u035b\u0001"+
+		"\u0000\u0000\u0000\u035b\u035c\u0003\u00acV\u0000\u035c\u00a9\u0001\u0000"+
+		"\u0000\u0000\u035d\u0360\u0003\u008cF\u0000\u035e\u0360\u0003\u00a4R\u0000"+
+		"\u035f\u035d\u0001\u0000\u0000\u0000\u035f\u035e\u0001\u0000\u0000\u0000"+
+		"\u0360\u00ab\u0001\u0000\u0000\u0000\u0361\u0364\u0003\u008cF\u0000\u0362"+
+		"\u0364\u0003\u00a4R\u0000\u0363\u0361\u0001\u0000\u0000\u0000\u0363\u0362"+
+		"\u0001\u0000\u0000\u0000\u0364\u00ad\u0001\u0000\u0000\u0000\u0365\u0366"+
+		"\u0005\n\u0000\u0000\u0366\u036c\u0005\u001e\u0000\u0000\u0367\u0368\u0003"+
+		"\u00b0X\u0000\u0368\u0369\u0003\u00c4b\u0000\u0369\u036b\u0001\u0000\u0000"+
+		"\u0000\u036a\u0367\u0001\u0000\u0000\u0000\u036b\u036e\u0001\u0000\u0000"+
+		"\u0000\u036c\u036a\u0001\u0000\u0000\u0000\u036c\u036d\u0001\u0000\u0000"+
+		"\u0000\u036d\u036f\u0001\u0000\u0000\u0000\u036e\u036c\u0001\u0000\u0000"+
+		"\u0000\u036f\u0370\u0005\u001f\u0000\u0000\u0370\u00af\u0001\u0000\u0000"+
+		"\u0000\u0371\u0372\u0003\u0010\b\u0000\u0372\u0373\u0003j5\u0000\u0373"+
+		"\u0376\u0001\u0000\u0000\u0000\u0374\u0376\u0003\u00b4Z\u0000\u0375\u0371"+
+		"\u0001\u0000\u0000\u0000\u0375\u0374\u0001\u0000\u0000\u0000\u0376\u0378"+
+		"\u0001\u0000\u0000\u0000\u0377\u0379\u0003\u00b2Y\u0000\u0378\u0377\u0001"+
+		"\u0000\u0000\u0000\u0378\u0379\u0001\u0000\u0000\u0000\u0379\u00b1\u0001"+
+		"\u0000\u0000\u0000\u037a\u037b\u0007\t\u0000\u0000\u037b\u00b3\u0001\u0000"+
+		"\u0000\u0000\u037c\u037e\u0005=\u0000\u0000\u037d\u037c\u0001\u0000\u0000"+
+		"\u0000\u037d\u037e\u0001\u0000\u0000\u0000\u037e\u037f\u0001\u0000\u0000"+
+		"\u0000\u037f\u0380\u0003l6\u0000\u0380\u00b5\u0001\u0000\u0000\u0000\u0381"+
+		"\u0382\u0005\u0003\u0000\u0000\u0382\u0383\u0003\u0084B\u0000\u0383\u0384"+
+		"\u0003\"\u0011\u0000\u0384\u00b7\u0001\u0000\u0000\u0000\u0385\u0386\u0005"+
+		" \u0000\u0000\u0386\u0387\u0003\u008cF\u0000\u0387\u0388\u0005!\u0000"+
+		"\u0000\u0388\u00b9\u0001\u0000\u0000\u0000\u0389\u0399\u0005 \u0000\u0000"+
+		"\u038a\u038c\u0003\u008cF\u0000\u038b\u038a\u0001\u0000\u0000\u0000\u038b"+
+		"\u038c\u0001\u0000\u0000\u0000\u038c\u038d\u0001\u0000\u0000\u0000\u038d"+
+		"\u038f\u0005%\u0000\u0000\u038e\u0390\u0003\u008cF\u0000\u038f\u038e\u0001"+
+		"\u0000\u0000\u0000\u038f\u0390\u0001\u0000\u0000\u0000\u0390\u039a\u0001"+
+		"\u0000\u0000\u0000\u0391\u0393\u0003\u008cF\u0000\u0392\u0391\u0001\u0000"+
+		"\u0000\u0000\u0392\u0393\u0001\u0000\u0000\u0000\u0393\u0394\u0001\u0000"+
+		"\u0000\u0000\u0394\u0395\u0005%\u0000\u0000\u0395\u0396\u0003\u008cF\u0000"+
+		"\u0396\u0397\u0005%\u0000\u0000\u0397\u0398\u0003\u008cF\u0000\u0398\u039a"+
+		"\u0001\u0000\u0000\u0000\u0399\u038b\u0001\u0000\u0000\u0000\u0399\u0392"+
+		"\u0001\u0000\u0000\u0000\u039a\u039b\u0001\u0000\u0000\u0000\u039b\u039c"+
+		"\u0005!\u0000\u0000\u039c\u00bb\u0001\u0000\u0000\u0000\u039d\u039e\u0005"+
+		"&\u0000\u0000\u039e\u039f\u0005\u001c\u0000\u0000\u039f\u03a0\u0003j5"+
+		"\u0000\u03a0\u03a1\u0005\u001d\u0000\u0000\u03a1\u00bd\u0001\u0000\u0000"+
+		"\u0000\u03a2\u03b1\u0005\u001c\u0000\u0000\u03a3\u03aa\u0003\u0012\t\u0000"+
+		"\u03a4\u03a7\u0003\u0092I\u0000\u03a5\u03a6\u0005#\u0000\u0000\u03a6\u03a8"+
+		"\u0003\u0012\t\u0000\u03a7\u03a5\u0001\u0000\u0000\u0000\u03a7\u03a8\u0001"+
+		"\u0000\u0000\u0000\u03a8\u03aa\u0001\u0000\u0000\u0000\u03a9\u03a3\u0001"+
+		"\u0000\u0000\u0000\u03a9\u03a4\u0001\u0000\u0000\u0000\u03aa\u03ac\u0001"+
+		"\u0000\u0000\u0000\u03ab\u03ad\u0005*\u0000\u0000\u03ac\u03ab\u0001\u0000"+
+		"\u0000\u0000\u03ac\u03ad\u0001\u0000\u0000\u0000\u03ad\u03af\u0001\u0000"+
+		"\u0000\u0000\u03ae\u03b0\u0005#\u0000\u0000\u03af\u03ae\u0001\u0000\u0000"+
+		"\u0000\u03af\u03b0\u0001\u0000\u0000\u0000\u03b0\u03b2\u0001\u0000\u0000"+
+		"\u0000\u03b1\u03a9\u0001\u0000\u0000\u0000\u03b1\u03b2\u0001\u0000\u0000"+
+		"\u0000\u03b2\u03b3\u0001\u0000\u0000\u0000\u03b3\u03b4\u0005\u001d\u0000"+
+		"\u0000\u03b4\u00bf\u0001\u0000\u0000\u0000\u03b5\u03b6\u0003\u0092I\u0000"+
+		"\u03b6\u03b7\u0005&\u0000\u0000\u03b7\u03b8\u0005\u001b\u0000\u0000\u03b8"+
+		"\u00c1\u0001\u0000\u0000\u0000\u03b9\u03ba\u0003j5\u0000\u03ba\u00c3\u0001"+
+		"\u0000\u0000\u0000\u03bb\u03c0\u0005$\u0000\u0000\u03bc\u03c0\u0005\u0000"+
+		"\u0000\u0001\u03bd\u03c0\u0005W\u0000\u0000\u03be\u03c0\u0004b\u0007\u0000"+
+		"\u03bf\u03bb\u0001\u0000\u0000\u0000\u03bf\u03bc\u0001\u0000\u0000\u0000"+
+		"\u03bf\u03bd\u0001\u0000\u0000\u0000\u03bf\u03be\u0001\u0000\u0000\u0000"+
+		"\u03c0\u00c5\u0001\u0000\u0000\u0000o\u00cd\u00d3\u00d9\u00e9\u00ed\u00f0"+
+		"\u00f9\u0103\u0107\u010b\u010f\u0116\u011e\u0129\u012d\u0131\u0139\u0140"+
+		"\u014c\u0150\u0156\u015a\u015e\u0163\u0166\u0169\u0170\u0181\u0188\u0198"+
+		"\u01a5\u01a9\u01ad\u01b1\u01c4\u01ca\u01cc\u01d0\u01d4\u01d7\u01db\u01dd"+
+		"\u01e3\u01eb\u01f0\u01fb\u0201\u0208\u0213\u0218\u021c\u0221\u0225\u022d"+
+		"\u0235\u023a\u023d\u0245\u024b\u024f\u0251\u0256\u025a\u025e\u0266\u0274"+
+		"\u0278\u0282\u0294\u029a\u02ae\u02b8\u02c1\u02c5\u02cd\u02d1\u02d3\u02d8"+
+		"\u02db\u02e3\u02f4\u02f6\u02fd\u0306\u030a\u0311\u031a\u0322\u0327\u032d"+
+		"\u0343\u0348\u034a\u0353\u0359\u035f\u0363\u036c\u0375\u0378\u037d\u038b"+
+		"\u038f\u0392\u0399\u03a7\u03a9\u03ac\u03af\u03b1\u03bf";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}
\ No newline at end of file
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParserBase.java b/ide/go.lang/src/org/antlr/parser/golang/GoParserBase.java
new file mode 100644
index 0000000..2df8e03
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParserBase.java
@@ -0,0 +1,26 @@
+package org.antlr.parser.golang;
+import java.util.List;
+import org.antlr.v4.runtime.*;
+
+/**
+ * All parser methods that used in grammar (p, prev, notLineTerminator, etc.)
+ * should start with lower case char similar to parser rules.
+ */
+public abstract class GoParserBase extends Parser
+{
+    protected GoParserBase(TokenStream input) {
+        super(input);
+    }
+
+
+    /**
+     * Returns true if the current Token is a closing bracket (")" or "}")
+     */
+    protected boolean closingBracket()
+    {
+        BufferedTokenStream stream = (BufferedTokenStream)_input;
+        int prevTokenType = stream.LA(1);
+        
+        return prevTokenType == GoParser.R_CURLY || prevTokenType == GoParser.R_PAREN;
+    }
+}
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseListener.java b/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseListener.java
new file mode 100644
index 0000000..fe3aa0a
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseListener.java
@@ -0,0 +1,1255 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * This class provides an empty implementation of {@link GoParserListener},
+ * which can be extended to create a listener which only needs to handle a subset
+ * of the available methods.
+ */
+@SuppressWarnings("CheckReturnValue")
+public class GoParserBaseListener implements GoParserListener {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSourceFile(GoParser.SourceFileContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSourceFile(GoParser.SourceFileContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPackageClause(GoParser.PackageClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPackageClause(GoParser.PackageClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterImportDecl(GoParser.ImportDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitImportDecl(GoParser.ImportDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterImportSpec(GoParser.ImportSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitImportSpec(GoParser.ImportSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterImportPath(GoParser.ImportPathContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitImportPath(GoParser.ImportPathContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterDeclaration(GoParser.DeclarationContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitDeclaration(GoParser.DeclarationContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterConstDecl(GoParser.ConstDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitConstDecl(GoParser.ConstDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterConstSpec(GoParser.ConstSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitConstSpec(GoParser.ConstSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIdentifierList(GoParser.IdentifierListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIdentifierList(GoParser.IdentifierListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExpressionList(GoParser.ExpressionListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExpressionList(GoParser.ExpressionListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeDecl(GoParser.TypeDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeDecl(GoParser.TypeDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeSpec(GoParser.TypeSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeSpec(GoParser.TypeSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFunctionDecl(GoParser.FunctionDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFunctionDecl(GoParser.FunctionDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMethodDecl(GoParser.MethodDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMethodDecl(GoParser.MethodDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterReceiver(GoParser.ReceiverContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitReceiver(GoParser.ReceiverContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterVarDecl(GoParser.VarDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitVarDecl(GoParser.VarDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterVarSpec(GoParser.VarSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitVarSpec(GoParser.VarSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterBlock(GoParser.BlockContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitBlock(GoParser.BlockContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterStatementList(GoParser.StatementListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitStatementList(GoParser.StatementListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterStatement(GoParser.StatementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitStatement(GoParser.StatementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSimpleStmt(GoParser.SimpleStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSimpleStmt(GoParser.SimpleStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExpressionStmt(GoParser.ExpressionStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExpressionStmt(GoParser.ExpressionStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSendStmt(GoParser.SendStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSendStmt(GoParser.SendStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIncDecStmt(GoParser.IncDecStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIncDecStmt(GoParser.IncDecStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAssignment(GoParser.AssignmentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAssignment(GoParser.AssignmentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAssign_op(GoParser.Assign_opContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAssign_op(GoParser.Assign_opContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterShortVarDecl(GoParser.ShortVarDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitShortVarDecl(GoParser.ShortVarDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEmptyStmt(GoParser.EmptyStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEmptyStmt(GoParser.EmptyStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterLabeledStmt(GoParser.LabeledStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitLabeledStmt(GoParser.LabeledStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterReturnStmt(GoParser.ReturnStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitReturnStmt(GoParser.ReturnStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterBreakStmt(GoParser.BreakStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitBreakStmt(GoParser.BreakStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterContinueStmt(GoParser.ContinueStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitContinueStmt(GoParser.ContinueStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterGotoStmt(GoParser.GotoStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitGotoStmt(GoParser.GotoStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFallthroughStmt(GoParser.FallthroughStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFallthroughStmt(GoParser.FallthroughStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterDeferStmt(GoParser.DeferStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitDeferStmt(GoParser.DeferStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIfStmt(GoParser.IfStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIfStmt(GoParser.IfStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSwitchStmt(GoParser.SwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSwitchStmt(GoParser.SwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExprCaseClause(GoParser.ExprCaseClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExprCaseClause(GoParser.ExprCaseClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExprSwitchCase(GoParser.ExprSwitchCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExprSwitchCase(GoParser.ExprSwitchCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeCaseClause(GoParser.TypeCaseClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeCaseClause(GoParser.TypeCaseClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeList(GoParser.TypeListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeList(GoParser.TypeListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSelectStmt(GoParser.SelectStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSelectStmt(GoParser.SelectStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterCommClause(GoParser.CommClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitCommClause(GoParser.CommClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterCommCase(GoParser.CommCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitCommCase(GoParser.CommCaseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterRecvStmt(GoParser.RecvStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitRecvStmt(GoParser.RecvStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterForStmt(GoParser.ForStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitForStmt(GoParser.ForStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterForClause(GoParser.ForClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitForClause(GoParser.ForClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterRangeClause(GoParser.RangeClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitRangeClause(GoParser.RangeClauseContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterGoStmt(GoParser.GoStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitGoStmt(GoParser.GoStmtContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterType_(GoParser.Type_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitType_(GoParser.Type_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeName(GoParser.TypeNameContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeName(GoParser.TypeNameContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeLit(GoParser.TypeLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeLit(GoParser.TypeLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterArrayType(GoParser.ArrayTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitArrayType(GoParser.ArrayTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterArrayLength(GoParser.ArrayLengthContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitArrayLength(GoParser.ArrayLengthContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterElementType(GoParser.ElementTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitElementType(GoParser.ElementTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPointerType(GoParser.PointerTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPointerType(GoParser.PointerTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterInterfaceType(GoParser.InterfaceTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitInterfaceType(GoParser.InterfaceTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSliceType(GoParser.SliceTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSliceType(GoParser.SliceTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMapType(GoParser.MapTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMapType(GoParser.MapTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterChannelType(GoParser.ChannelTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitChannelType(GoParser.ChannelTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMethodSpec(GoParser.MethodSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMethodSpec(GoParser.MethodSpecContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFunctionType(GoParser.FunctionTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFunctionType(GoParser.FunctionTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSignature(GoParser.SignatureContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSignature(GoParser.SignatureContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterResult(GoParser.ResultContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitResult(GoParser.ResultContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterParameters(GoParser.ParametersContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitParameters(GoParser.ParametersContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterParameterDecl(GoParser.ParameterDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitParameterDecl(GoParser.ParameterDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExpression(GoParser.ExpressionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExpression(GoParser.ExpressionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPrimaryExpr(GoParser.PrimaryExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPrimaryExpr(GoParser.PrimaryExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterConversion(GoParser.ConversionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitConversion(GoParser.ConversionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterNonNamedType(GoParser.NonNamedTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitNonNamedType(GoParser.NonNamedTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterOperand(GoParser.OperandContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitOperand(GoParser.OperandContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterLiteral(GoParser.LiteralContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitLiteral(GoParser.LiteralContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterBasicLit(GoParser.BasicLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitBasicLit(GoParser.BasicLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterInteger(GoParser.IntegerContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitInteger(GoParser.IntegerContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterOperandName(GoParser.OperandNameContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitOperandName(GoParser.OperandNameContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterQualifiedIdent(GoParser.QualifiedIdentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitQualifiedIdent(GoParser.QualifiedIdentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterCompositeLit(GoParser.CompositeLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitCompositeLit(GoParser.CompositeLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterLiteralType(GoParser.LiteralTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitLiteralType(GoParser.LiteralTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterLiteralValue(GoParser.LiteralValueContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitLiteralValue(GoParser.LiteralValueContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterElementList(GoParser.ElementListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitElementList(GoParser.ElementListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterKeyedElement(GoParser.KeyedElementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitKeyedElement(GoParser.KeyedElementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterKey(GoParser.KeyContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitKey(GoParser.KeyContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterElement(GoParser.ElementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitElement(GoParser.ElementContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterStructType(GoParser.StructTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitStructType(GoParser.StructTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFieldDecl(GoParser.FieldDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFieldDecl(GoParser.FieldDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterString_(GoParser.String_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitString_(GoParser.String_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEmbeddedField(GoParser.EmbeddedFieldContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEmbeddedField(GoParser.EmbeddedFieldContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFunctionLit(GoParser.FunctionLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFunctionLit(GoParser.FunctionLitContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIndex(GoParser.IndexContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIndex(GoParser.IndexContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSlice_(GoParser.Slice_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSlice_(GoParser.Slice_Context ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeAssertion(GoParser.TypeAssertionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeAssertion(GoParser.TypeAssertionContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterArguments(GoParser.ArgumentsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitArguments(GoParser.ArgumentsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMethodExpr(GoParser.MethodExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMethodExpr(GoParser.MethodExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterReceiverType(GoParser.ReceiverTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitReceiverType(GoParser.ReceiverTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEos(GoParser.EosContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEos(GoParser.EosContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitTerminal(TerminalNode node) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitErrorNode(ErrorNode node) { }
+}
\ No newline at end of file
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseVisitor.java b/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseVisitor.java
new file mode 100644
index 0000000..028f7a4
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParserBaseVisitor.java
@@ -0,0 +1,735 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
+
+/**
+ * This class provides an empty implementation of {@link GoParserVisitor},
+ * which can be extended to create a visitor which only needs to handle a subset
+ * of the available methods.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+@SuppressWarnings("CheckReturnValue")
+public class GoParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements GoParserVisitor<T> {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSourceFile(GoParser.SourceFileContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitPackageClause(GoParser.PackageClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitImportDecl(GoParser.ImportDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitImportSpec(GoParser.ImportSpecContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitImportPath(GoParser.ImportPathContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitDeclaration(GoParser.DeclarationContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitConstDecl(GoParser.ConstDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitConstSpec(GoParser.ConstSpecContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIdentifierList(GoParser.IdentifierListContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExpressionList(GoParser.ExpressionListContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeDecl(GoParser.TypeDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeSpec(GoParser.TypeSpecContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFunctionDecl(GoParser.FunctionDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMethodDecl(GoParser.MethodDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitReceiver(GoParser.ReceiverContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitVarDecl(GoParser.VarDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitVarSpec(GoParser.VarSpecContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitBlock(GoParser.BlockContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitStatementList(GoParser.StatementListContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitStatement(GoParser.StatementContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSimpleStmt(GoParser.SimpleStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExpressionStmt(GoParser.ExpressionStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSendStmt(GoParser.SendStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIncDecStmt(GoParser.IncDecStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitAssignment(GoParser.AssignmentContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitAssign_op(GoParser.Assign_opContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitShortVarDecl(GoParser.ShortVarDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitEmptyStmt(GoParser.EmptyStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLabeledStmt(GoParser.LabeledStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitReturnStmt(GoParser.ReturnStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitBreakStmt(GoParser.BreakStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitContinueStmt(GoParser.ContinueStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitGotoStmt(GoParser.GotoStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFallthroughStmt(GoParser.FallthroughStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitDeferStmt(GoParser.DeferStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIfStmt(GoParser.IfStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSwitchStmt(GoParser.SwitchStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExprCaseClause(GoParser.ExprCaseClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExprSwitchCase(GoParser.ExprSwitchCaseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeCaseClause(GoParser.TypeCaseClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeList(GoParser.TypeListContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSelectStmt(GoParser.SelectStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCommClause(GoParser.CommClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCommCase(GoParser.CommCaseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitRecvStmt(GoParser.RecvStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitForStmt(GoParser.ForStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitForClause(GoParser.ForClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitRangeClause(GoParser.RangeClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitGoStmt(GoParser.GoStmtContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitType_(GoParser.Type_Context ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeName(GoParser.TypeNameContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeLit(GoParser.TypeLitContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArrayType(GoParser.ArrayTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArrayLength(GoParser.ArrayLengthContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitElementType(GoParser.ElementTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitPointerType(GoParser.PointerTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitInterfaceType(GoParser.InterfaceTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSliceType(GoParser.SliceTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMapType(GoParser.MapTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitChannelType(GoParser.ChannelTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMethodSpec(GoParser.MethodSpecContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFunctionType(GoParser.FunctionTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSignature(GoParser.SignatureContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitResult(GoParser.ResultContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitParameters(GoParser.ParametersContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitParameterDecl(GoParser.ParameterDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExpression(GoParser.ExpressionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitPrimaryExpr(GoParser.PrimaryExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitConversion(GoParser.ConversionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitNonNamedType(GoParser.NonNamedTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitOperand(GoParser.OperandContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLiteral(GoParser.LiteralContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitBasicLit(GoParser.BasicLitContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitInteger(GoParser.IntegerContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitOperandName(GoParser.OperandNameContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitQualifiedIdent(GoParser.QualifiedIdentContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCompositeLit(GoParser.CompositeLitContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLiteralType(GoParser.LiteralTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLiteralValue(GoParser.LiteralValueContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitElementList(GoParser.ElementListContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitKeyedElement(GoParser.KeyedElementContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitKey(GoParser.KeyContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitElement(GoParser.ElementContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitStructType(GoParser.StructTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFieldDecl(GoParser.FieldDeclContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitString_(GoParser.String_Context ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitEmbeddedField(GoParser.EmbeddedFieldContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFunctionLit(GoParser.FunctionLitContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIndex(GoParser.IndexContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSlice_(GoParser.Slice_Context ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitTypeAssertion(GoParser.TypeAssertionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArguments(GoParser.ArgumentsContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMethodExpr(GoParser.MethodExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitReceiverType(GoParser.ReceiverTypeContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitEos(GoParser.EosContext ctx) { return visitChildren(ctx); }
+}
\ No newline at end of file
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParserListener.java b/ide/go.lang/src/org/antlr/parser/golang/GoParserListener.java
new file mode 100644
index 0000000..05e940b
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParserListener.java
@@ -0,0 +1,1027 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link GoParser}.
+ */
+public interface GoParserListener extends ParseTreeListener {
+	/**
+	 * Enter a parse tree produced by {@link GoParser#sourceFile}.
+	 * @param ctx the parse tree
+	 */
+	void enterSourceFile(GoParser.SourceFileContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#sourceFile}.
+	 * @param ctx the parse tree
+	 */
+	void exitSourceFile(GoParser.SourceFileContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#packageClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterPackageClause(GoParser.PackageClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#packageClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitPackageClause(GoParser.PackageClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#importDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterImportDecl(GoParser.ImportDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#importDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitImportDecl(GoParser.ImportDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#importSpec}.
+	 * @param ctx the parse tree
+	 */
+	void enterImportSpec(GoParser.ImportSpecContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#importSpec}.
+	 * @param ctx the parse tree
+	 */
+	void exitImportSpec(GoParser.ImportSpecContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#importPath}.
+	 * @param ctx the parse tree
+	 */
+	void enterImportPath(GoParser.ImportPathContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#importPath}.
+	 * @param ctx the parse tree
+	 */
+	void exitImportPath(GoParser.ImportPathContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#declaration}.
+	 * @param ctx the parse tree
+	 */
+	void enterDeclaration(GoParser.DeclarationContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#declaration}.
+	 * @param ctx the parse tree
+	 */
+	void exitDeclaration(GoParser.DeclarationContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#constDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterConstDecl(GoParser.ConstDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#constDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitConstDecl(GoParser.ConstDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#constSpec}.
+	 * @param ctx the parse tree
+	 */
+	void enterConstSpec(GoParser.ConstSpecContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#constSpec}.
+	 * @param ctx the parse tree
+	 */
+	void exitConstSpec(GoParser.ConstSpecContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#identifierList}.
+	 * @param ctx the parse tree
+	 */
+	void enterIdentifierList(GoParser.IdentifierListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#identifierList}.
+	 * @param ctx the parse tree
+	 */
+	void exitIdentifierList(GoParser.IdentifierListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#expressionList}.
+	 * @param ctx the parse tree
+	 */
+	void enterExpressionList(GoParser.ExpressionListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#expressionList}.
+	 * @param ctx the parse tree
+	 */
+	void exitExpressionList(GoParser.ExpressionListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeDecl(GoParser.TypeDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeDecl(GoParser.TypeDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeSpec}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeSpec(GoParser.TypeSpecContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeSpec}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeSpec(GoParser.TypeSpecContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#functionDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterFunctionDecl(GoParser.FunctionDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#functionDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitFunctionDecl(GoParser.FunctionDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#methodDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterMethodDecl(GoParser.MethodDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#methodDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitMethodDecl(GoParser.MethodDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#receiver}.
+	 * @param ctx the parse tree
+	 */
+	void enterReceiver(GoParser.ReceiverContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#receiver}.
+	 * @param ctx the parse tree
+	 */
+	void exitReceiver(GoParser.ReceiverContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#varDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterVarDecl(GoParser.VarDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#varDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitVarDecl(GoParser.VarDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#varSpec}.
+	 * @param ctx the parse tree
+	 */
+	void enterVarSpec(GoParser.VarSpecContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#varSpec}.
+	 * @param ctx the parse tree
+	 */
+	void exitVarSpec(GoParser.VarSpecContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#block}.
+	 * @param ctx the parse tree
+	 */
+	void enterBlock(GoParser.BlockContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#block}.
+	 * @param ctx the parse tree
+	 */
+	void exitBlock(GoParser.BlockContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#statementList}.
+	 * @param ctx the parse tree
+	 */
+	void enterStatementList(GoParser.StatementListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#statementList}.
+	 * @param ctx the parse tree
+	 */
+	void exitStatementList(GoParser.StatementListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#statement}.
+	 * @param ctx the parse tree
+	 */
+	void enterStatement(GoParser.StatementContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#statement}.
+	 * @param ctx the parse tree
+	 */
+	void exitStatement(GoParser.StatementContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#simpleStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterSimpleStmt(GoParser.SimpleStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#simpleStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitSimpleStmt(GoParser.SimpleStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#expressionStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterExpressionStmt(GoParser.ExpressionStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#expressionStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitExpressionStmt(GoParser.ExpressionStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#sendStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterSendStmt(GoParser.SendStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#sendStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitSendStmt(GoParser.SendStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#incDecStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterIncDecStmt(GoParser.IncDecStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#incDecStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitIncDecStmt(GoParser.IncDecStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#assignment}.
+	 * @param ctx the parse tree
+	 */
+	void enterAssignment(GoParser.AssignmentContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#assignment}.
+	 * @param ctx the parse tree
+	 */
+	void exitAssignment(GoParser.AssignmentContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#assign_op}.
+	 * @param ctx the parse tree
+	 */
+	void enterAssign_op(GoParser.Assign_opContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#assign_op}.
+	 * @param ctx the parse tree
+	 */
+	void exitAssign_op(GoParser.Assign_opContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#shortVarDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterShortVarDecl(GoParser.ShortVarDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#shortVarDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitShortVarDecl(GoParser.ShortVarDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#emptyStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterEmptyStmt(GoParser.EmptyStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#emptyStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitEmptyStmt(GoParser.EmptyStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#labeledStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterLabeledStmt(GoParser.LabeledStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#labeledStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitLabeledStmt(GoParser.LabeledStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#returnStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterReturnStmt(GoParser.ReturnStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#returnStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitReturnStmt(GoParser.ReturnStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#breakStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterBreakStmt(GoParser.BreakStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#breakStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitBreakStmt(GoParser.BreakStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#continueStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterContinueStmt(GoParser.ContinueStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#continueStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitContinueStmt(GoParser.ContinueStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#gotoStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterGotoStmt(GoParser.GotoStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#gotoStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitGotoStmt(GoParser.GotoStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#fallthroughStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterFallthroughStmt(GoParser.FallthroughStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#fallthroughStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitFallthroughStmt(GoParser.FallthroughStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#deferStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterDeferStmt(GoParser.DeferStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#deferStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitDeferStmt(GoParser.DeferStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#ifStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterIfStmt(GoParser.IfStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#ifStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitIfStmt(GoParser.IfStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#switchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterSwitchStmt(GoParser.SwitchStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#switchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitSwitchStmt(GoParser.SwitchStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#exprSwitchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#exprSwitchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#exprCaseClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterExprCaseClause(GoParser.ExprCaseClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#exprCaseClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitExprCaseClause(GoParser.ExprCaseClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#exprSwitchCase}.
+	 * @param ctx the parse tree
+	 */
+	void enterExprSwitchCase(GoParser.ExprSwitchCaseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#exprSwitchCase}.
+	 * @param ctx the parse tree
+	 */
+	void exitExprSwitchCase(GoParser.ExprSwitchCaseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeSwitchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeSwitchStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeSwitchGuard}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeSwitchGuard}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeCaseClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeCaseClause(GoParser.TypeCaseClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeCaseClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeCaseClause(GoParser.TypeCaseClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeSwitchCase}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeSwitchCase}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeList}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeList(GoParser.TypeListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeList}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeList(GoParser.TypeListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#selectStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterSelectStmt(GoParser.SelectStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#selectStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitSelectStmt(GoParser.SelectStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#commClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterCommClause(GoParser.CommClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#commClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitCommClause(GoParser.CommClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#commCase}.
+	 * @param ctx the parse tree
+	 */
+	void enterCommCase(GoParser.CommCaseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#commCase}.
+	 * @param ctx the parse tree
+	 */
+	void exitCommCase(GoParser.CommCaseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#recvStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterRecvStmt(GoParser.RecvStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#recvStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitRecvStmt(GoParser.RecvStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#forStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterForStmt(GoParser.ForStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#forStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitForStmt(GoParser.ForStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#forClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterForClause(GoParser.ForClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#forClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitForClause(GoParser.ForClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#rangeClause}.
+	 * @param ctx the parse tree
+	 */
+	void enterRangeClause(GoParser.RangeClauseContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#rangeClause}.
+	 * @param ctx the parse tree
+	 */
+	void exitRangeClause(GoParser.RangeClauseContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#goStmt}.
+	 * @param ctx the parse tree
+	 */
+	void enterGoStmt(GoParser.GoStmtContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#goStmt}.
+	 * @param ctx the parse tree
+	 */
+	void exitGoStmt(GoParser.GoStmtContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#type_}.
+	 * @param ctx the parse tree
+	 */
+	void enterType_(GoParser.Type_Context ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#type_}.
+	 * @param ctx the parse tree
+	 */
+	void exitType_(GoParser.Type_Context ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeName}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeName(GoParser.TypeNameContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeName}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeName(GoParser.TypeNameContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeLit}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeLit(GoParser.TypeLitContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeLit}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeLit(GoParser.TypeLitContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#arrayType}.
+	 * @param ctx the parse tree
+	 */
+	void enterArrayType(GoParser.ArrayTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#arrayType}.
+	 * @param ctx the parse tree
+	 */
+	void exitArrayType(GoParser.ArrayTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#arrayLength}.
+	 * @param ctx the parse tree
+	 */
+	void enterArrayLength(GoParser.ArrayLengthContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#arrayLength}.
+	 * @param ctx the parse tree
+	 */
+	void exitArrayLength(GoParser.ArrayLengthContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#elementType}.
+	 * @param ctx the parse tree
+	 */
+	void enterElementType(GoParser.ElementTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#elementType}.
+	 * @param ctx the parse tree
+	 */
+	void exitElementType(GoParser.ElementTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#pointerType}.
+	 * @param ctx the parse tree
+	 */
+	void enterPointerType(GoParser.PointerTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#pointerType}.
+	 * @param ctx the parse tree
+	 */
+	void exitPointerType(GoParser.PointerTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#interfaceType}.
+	 * @param ctx the parse tree
+	 */
+	void enterInterfaceType(GoParser.InterfaceTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#interfaceType}.
+	 * @param ctx the parse tree
+	 */
+	void exitInterfaceType(GoParser.InterfaceTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#sliceType}.
+	 * @param ctx the parse tree
+	 */
+	void enterSliceType(GoParser.SliceTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#sliceType}.
+	 * @param ctx the parse tree
+	 */
+	void exitSliceType(GoParser.SliceTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#mapType}.
+	 * @param ctx the parse tree
+	 */
+	void enterMapType(GoParser.MapTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#mapType}.
+	 * @param ctx the parse tree
+	 */
+	void exitMapType(GoParser.MapTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#channelType}.
+	 * @param ctx the parse tree
+	 */
+	void enterChannelType(GoParser.ChannelTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#channelType}.
+	 * @param ctx the parse tree
+	 */
+	void exitChannelType(GoParser.ChannelTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#methodSpec}.
+	 * @param ctx the parse tree
+	 */
+	void enterMethodSpec(GoParser.MethodSpecContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#methodSpec}.
+	 * @param ctx the parse tree
+	 */
+	void exitMethodSpec(GoParser.MethodSpecContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#functionType}.
+	 * @param ctx the parse tree
+	 */
+	void enterFunctionType(GoParser.FunctionTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#functionType}.
+	 * @param ctx the parse tree
+	 */
+	void exitFunctionType(GoParser.FunctionTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#signature}.
+	 * @param ctx the parse tree
+	 */
+	void enterSignature(GoParser.SignatureContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#signature}.
+	 * @param ctx the parse tree
+	 */
+	void exitSignature(GoParser.SignatureContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#result}.
+	 * @param ctx the parse tree
+	 */
+	void enterResult(GoParser.ResultContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#result}.
+	 * @param ctx the parse tree
+	 */
+	void exitResult(GoParser.ResultContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#parameters}.
+	 * @param ctx the parse tree
+	 */
+	void enterParameters(GoParser.ParametersContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#parameters}.
+	 * @param ctx the parse tree
+	 */
+	void exitParameters(GoParser.ParametersContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#parameterDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterParameterDecl(GoParser.ParameterDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#parameterDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitParameterDecl(GoParser.ParameterDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#expression}.
+	 * @param ctx the parse tree
+	 */
+	void enterExpression(GoParser.ExpressionContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#expression}.
+	 * @param ctx the parse tree
+	 */
+	void exitExpression(GoParser.ExpressionContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#primaryExpr}.
+	 * @param ctx the parse tree
+	 */
+	void enterPrimaryExpr(GoParser.PrimaryExprContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#primaryExpr}.
+	 * @param ctx the parse tree
+	 */
+	void exitPrimaryExpr(GoParser.PrimaryExprContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#conversion}.
+	 * @param ctx the parse tree
+	 */
+	void enterConversion(GoParser.ConversionContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#conversion}.
+	 * @param ctx the parse tree
+	 */
+	void exitConversion(GoParser.ConversionContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#nonNamedType}.
+	 * @param ctx the parse tree
+	 */
+	void enterNonNamedType(GoParser.NonNamedTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#nonNamedType}.
+	 * @param ctx the parse tree
+	 */
+	void exitNonNamedType(GoParser.NonNamedTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#operand}.
+	 * @param ctx the parse tree
+	 */
+	void enterOperand(GoParser.OperandContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#operand}.
+	 * @param ctx the parse tree
+	 */
+	void exitOperand(GoParser.OperandContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#literal}.
+	 * @param ctx the parse tree
+	 */
+	void enterLiteral(GoParser.LiteralContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#literal}.
+	 * @param ctx the parse tree
+	 */
+	void exitLiteral(GoParser.LiteralContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#basicLit}.
+	 * @param ctx the parse tree
+	 */
+	void enterBasicLit(GoParser.BasicLitContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#basicLit}.
+	 * @param ctx the parse tree
+	 */
+	void exitBasicLit(GoParser.BasicLitContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#integer}.
+	 * @param ctx the parse tree
+	 */
+	void enterInteger(GoParser.IntegerContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#integer}.
+	 * @param ctx the parse tree
+	 */
+	void exitInteger(GoParser.IntegerContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#operandName}.
+	 * @param ctx the parse tree
+	 */
+	void enterOperandName(GoParser.OperandNameContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#operandName}.
+	 * @param ctx the parse tree
+	 */
+	void exitOperandName(GoParser.OperandNameContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#qualifiedIdent}.
+	 * @param ctx the parse tree
+	 */
+	void enterQualifiedIdent(GoParser.QualifiedIdentContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#qualifiedIdent}.
+	 * @param ctx the parse tree
+	 */
+	void exitQualifiedIdent(GoParser.QualifiedIdentContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#compositeLit}.
+	 * @param ctx the parse tree
+	 */
+	void enterCompositeLit(GoParser.CompositeLitContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#compositeLit}.
+	 * @param ctx the parse tree
+	 */
+	void exitCompositeLit(GoParser.CompositeLitContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#literalType}.
+	 * @param ctx the parse tree
+	 */
+	void enterLiteralType(GoParser.LiteralTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#literalType}.
+	 * @param ctx the parse tree
+	 */
+	void exitLiteralType(GoParser.LiteralTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#literalValue}.
+	 * @param ctx the parse tree
+	 */
+	void enterLiteralValue(GoParser.LiteralValueContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#literalValue}.
+	 * @param ctx the parse tree
+	 */
+	void exitLiteralValue(GoParser.LiteralValueContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#elementList}.
+	 * @param ctx the parse tree
+	 */
+	void enterElementList(GoParser.ElementListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#elementList}.
+	 * @param ctx the parse tree
+	 */
+	void exitElementList(GoParser.ElementListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#keyedElement}.
+	 * @param ctx the parse tree
+	 */
+	void enterKeyedElement(GoParser.KeyedElementContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#keyedElement}.
+	 * @param ctx the parse tree
+	 */
+	void exitKeyedElement(GoParser.KeyedElementContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#key}.
+	 * @param ctx the parse tree
+	 */
+	void enterKey(GoParser.KeyContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#key}.
+	 * @param ctx the parse tree
+	 */
+	void exitKey(GoParser.KeyContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#element}.
+	 * @param ctx the parse tree
+	 */
+	void enterElement(GoParser.ElementContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#element}.
+	 * @param ctx the parse tree
+	 */
+	void exitElement(GoParser.ElementContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#structType}.
+	 * @param ctx the parse tree
+	 */
+	void enterStructType(GoParser.StructTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#structType}.
+	 * @param ctx the parse tree
+	 */
+	void exitStructType(GoParser.StructTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#fieldDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterFieldDecl(GoParser.FieldDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#fieldDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitFieldDecl(GoParser.FieldDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#string_}.
+	 * @param ctx the parse tree
+	 */
+	void enterString_(GoParser.String_Context ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#string_}.
+	 * @param ctx the parse tree
+	 */
+	void exitString_(GoParser.String_Context ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#embeddedField}.
+	 * @param ctx the parse tree
+	 */
+	void enterEmbeddedField(GoParser.EmbeddedFieldContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#embeddedField}.
+	 * @param ctx the parse tree
+	 */
+	void exitEmbeddedField(GoParser.EmbeddedFieldContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#functionLit}.
+	 * @param ctx the parse tree
+	 */
+	void enterFunctionLit(GoParser.FunctionLitContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#functionLit}.
+	 * @param ctx the parse tree
+	 */
+	void exitFunctionLit(GoParser.FunctionLitContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#index}.
+	 * @param ctx the parse tree
+	 */
+	void enterIndex(GoParser.IndexContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#index}.
+	 * @param ctx the parse tree
+	 */
+	void exitIndex(GoParser.IndexContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#slice_}.
+	 * @param ctx the parse tree
+	 */
+	void enterSlice_(GoParser.Slice_Context ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#slice_}.
+	 * @param ctx the parse tree
+	 */
+	void exitSlice_(GoParser.Slice_Context ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#typeAssertion}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeAssertion(GoParser.TypeAssertionContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#typeAssertion}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeAssertion(GoParser.TypeAssertionContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#arguments}.
+	 * @param ctx the parse tree
+	 */
+	void enterArguments(GoParser.ArgumentsContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#arguments}.
+	 * @param ctx the parse tree
+	 */
+	void exitArguments(GoParser.ArgumentsContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#methodExpr}.
+	 * @param ctx the parse tree
+	 */
+	void enterMethodExpr(GoParser.MethodExprContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#methodExpr}.
+	 * @param ctx the parse tree
+	 */
+	void exitMethodExpr(GoParser.MethodExprContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#receiverType}.
+	 * @param ctx the parse tree
+	 */
+	void enterReceiverType(GoParser.ReceiverTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#receiverType}.
+	 * @param ctx the parse tree
+	 */
+	void exitReceiverType(GoParser.ReceiverTypeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link GoParser#eos}.
+	 * @param ctx the parse tree
+	 */
+	void enterEos(GoParser.EosContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link GoParser#eos}.
+	 * @param ctx the parse tree
+	 */
+	void exitEos(GoParser.EosContext ctx);
+}
\ No newline at end of file
diff --git a/ide/go.lang/src/org/antlr/parser/golang/GoParserVisitor.java b/ide/go.lang/src/org/antlr/parser/golang/GoParserVisitor.java
new file mode 100644
index 0000000..cf8bddf
--- /dev/null
+++ b/ide/go.lang/src/org/antlr/parser/golang/GoParserVisitor.java
@@ -0,0 +1,634 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+
+
+package org.antlr.parser.golang;
+
+
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+
+/**
+ * This interface defines a complete generic visitor for a parse tree produced
+ * by {@link GoParser}.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public interface GoParserVisitor<T> extends ParseTreeVisitor<T> {
+	/**
+	 * Visit a parse tree produced by {@link GoParser#sourceFile}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSourceFile(GoParser.SourceFileContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#packageClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitPackageClause(GoParser.PackageClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#importDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitImportDecl(GoParser.ImportDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#importSpec}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitImportSpec(GoParser.ImportSpecContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#importPath}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitImportPath(GoParser.ImportPathContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#declaration}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitDeclaration(GoParser.DeclarationContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#constDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitConstDecl(GoParser.ConstDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#constSpec}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitConstSpec(GoParser.ConstSpecContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#identifierList}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIdentifierList(GoParser.IdentifierListContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#expressionList}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExpressionList(GoParser.ExpressionListContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeDecl(GoParser.TypeDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeSpec}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeSpec(GoParser.TypeSpecContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#functionDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFunctionDecl(GoParser.FunctionDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#methodDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMethodDecl(GoParser.MethodDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#receiver}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitReceiver(GoParser.ReceiverContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#varDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitVarDecl(GoParser.VarDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#varSpec}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitVarSpec(GoParser.VarSpecContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#block}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitBlock(GoParser.BlockContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#statementList}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitStatementList(GoParser.StatementListContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#statement}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitStatement(GoParser.StatementContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#simpleStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSimpleStmt(GoParser.SimpleStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#expressionStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExpressionStmt(GoParser.ExpressionStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#sendStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSendStmt(GoParser.SendStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#incDecStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIncDecStmt(GoParser.IncDecStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#assignment}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitAssignment(GoParser.AssignmentContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#assign_op}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitAssign_op(GoParser.Assign_opContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#shortVarDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitShortVarDecl(GoParser.ShortVarDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#emptyStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitEmptyStmt(GoParser.EmptyStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#labeledStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLabeledStmt(GoParser.LabeledStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#returnStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitReturnStmt(GoParser.ReturnStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#breakStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitBreakStmt(GoParser.BreakStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#continueStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitContinueStmt(GoParser.ContinueStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#gotoStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitGotoStmt(GoParser.GotoStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#fallthroughStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFallthroughStmt(GoParser.FallthroughStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#deferStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitDeferStmt(GoParser.DeferStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#ifStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIfStmt(GoParser.IfStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#switchStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSwitchStmt(GoParser.SwitchStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#exprSwitchStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExprSwitchStmt(GoParser.ExprSwitchStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#exprCaseClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExprCaseClause(GoParser.ExprCaseClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#exprSwitchCase}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExprSwitchCase(GoParser.ExprSwitchCaseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeSwitchStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeSwitchStmt(GoParser.TypeSwitchStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeSwitchGuard}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeSwitchGuard(GoParser.TypeSwitchGuardContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeCaseClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeCaseClause(GoParser.TypeCaseClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeSwitchCase}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeSwitchCase(GoParser.TypeSwitchCaseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeList}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeList(GoParser.TypeListContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#selectStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSelectStmt(GoParser.SelectStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#commClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCommClause(GoParser.CommClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#commCase}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCommCase(GoParser.CommCaseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#recvStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitRecvStmt(GoParser.RecvStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#forStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitForStmt(GoParser.ForStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#forClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitForClause(GoParser.ForClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#rangeClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitRangeClause(GoParser.RangeClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#goStmt}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitGoStmt(GoParser.GoStmtContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#type_}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitType_(GoParser.Type_Context ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeName}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeName(GoParser.TypeNameContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeLit}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeLit(GoParser.TypeLitContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#arrayType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArrayType(GoParser.ArrayTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#arrayLength}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArrayLength(GoParser.ArrayLengthContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#elementType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitElementType(GoParser.ElementTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#pointerType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitPointerType(GoParser.PointerTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#interfaceType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitInterfaceType(GoParser.InterfaceTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#sliceType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSliceType(GoParser.SliceTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#mapType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMapType(GoParser.MapTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#channelType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitChannelType(GoParser.ChannelTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#methodSpec}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMethodSpec(GoParser.MethodSpecContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#functionType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFunctionType(GoParser.FunctionTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#signature}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSignature(GoParser.SignatureContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#result}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitResult(GoParser.ResultContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#parameters}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitParameters(GoParser.ParametersContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#parameterDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitParameterDecl(GoParser.ParameterDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#expression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExpression(GoParser.ExpressionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#primaryExpr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitPrimaryExpr(GoParser.PrimaryExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#conversion}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitConversion(GoParser.ConversionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#nonNamedType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitNonNamedType(GoParser.NonNamedTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#operand}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitOperand(GoParser.OperandContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#literal}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLiteral(GoParser.LiteralContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#basicLit}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitBasicLit(GoParser.BasicLitContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#integer}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitInteger(GoParser.IntegerContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#operandName}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitOperandName(GoParser.OperandNameContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#qualifiedIdent}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitQualifiedIdent(GoParser.QualifiedIdentContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#compositeLit}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCompositeLit(GoParser.CompositeLitContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#literalType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLiteralType(GoParser.LiteralTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#literalValue}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLiteralValue(GoParser.LiteralValueContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#elementList}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitElementList(GoParser.ElementListContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#keyedElement}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitKeyedElement(GoParser.KeyedElementContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#key}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitKey(GoParser.KeyContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#element}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitElement(GoParser.ElementContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#structType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitStructType(GoParser.StructTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#fieldDecl}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFieldDecl(GoParser.FieldDeclContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#string_}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitString_(GoParser.String_Context ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#embeddedField}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitEmbeddedField(GoParser.EmbeddedFieldContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#functionLit}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFunctionLit(GoParser.FunctionLitContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#index}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIndex(GoParser.IndexContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#slice_}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSlice_(GoParser.Slice_Context ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#typeAssertion}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitTypeAssertion(GoParser.TypeAssertionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#arguments}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArguments(GoParser.ArgumentsContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#methodExpr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMethodExpr(GoParser.MethodExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#receiverType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitReceiverType(GoParser.ReceiverTypeContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link GoParser#eos}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitEos(GoParser.EosContext ctx);
+}
\ No newline at end of file
diff --git a/nbbuild/travis/hide-logs.sh b/ide/go.lang/src/org/netbeans/modules/go/lang/Bundle.properties
old mode 100755
new mode 100644
similarity index 77%
copy from nbbuild/travis/hide-logs.sh
copy to ide/go.lang/src/org/netbeans/modules/go/lang/Bundle.properties
index b0030f5..ed5cc8b
--- a/nbbuild/travis/hide-logs.sh
+++ b/ide/go.lang/src/org/netbeans/modules/go/lang/Bundle.properties
@@ -1,5 +1,3 @@
-#!/bin/bash
-
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -17,12 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-"$@" > "/tmp/command_log.txt" 2>&1
-
-RESULT=$?
-
-if [ $RESULT -ne 0 ] ; then
-    echo "$(</tmp/command_log.txt)"
-fi
-
-exit $RESULT
+OpenIDE-Module-Name=Go Language Lexer/Parser
+OpenIDE-Module-Display-Category=IDE
+OpenIDE-Module-Short-Description=Library for Parsing Go Language Files.
+OpenIDE-Module-Long-Description=Library for Parsing Go Language Files.
diff --git a/ide/gototest/nbproject/org-netbeans-modules-gototest.sig b/ide/gototest/nbproject/org-netbeans-modules-gototest.sig
index a065c2f..9cfcde3 100644
--- a/ide/gototest/nbproject/org-netbeans-modules-gototest.sig
+++ b/ide/gototest/nbproject/org-netbeans-modules-gototest.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/gototest/nbproject/project.properties b/ide/gototest/nbproject/project.properties
index 5a12e93..f13d48d 100644
--- a/ide/gototest/nbproject/project.properties
+++ b/ide/gototest/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 is.autoload=true
diff --git a/ide/gsf.codecoverage/nbproject/org-netbeans-modules-gsf-codecoverage.sig b/ide/gsf.codecoverage/nbproject/org-netbeans-modules-gsf-codecoverage.sig
index 5d0d096..fbec73d 100644
--- a/ide/gsf.codecoverage/nbproject/org-netbeans-modules-gsf-codecoverage.sig
+++ b/ide/gsf.codecoverage/nbproject/org-netbeans-modules-gsf-codecoverage.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/gsf.testrunner.ui/nbproject/org-netbeans-modules-gsf-testrunner-ui.sig b/ide/gsf.testrunner.ui/nbproject/org-netbeans-modules-gsf-testrunner-ui.sig
index bf3a984..49f9f39 100644
--- a/ide/gsf.testrunner.ui/nbproject/org-netbeans-modules-gsf-testrunner-ui.sig
+++ b/ide/gsf.testrunner.ui/nbproject/org-netbeans-modules-gsf-testrunner-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.32.0
+#Version 1.33.0
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/gsf.testrunner/nbproject/org-netbeans-modules-gsf-testrunner.sig b/ide/gsf.testrunner/nbproject/org-netbeans-modules-gsf-testrunner.sig
index d86bd81..05e3acf 100644
--- a/ide/gsf.testrunner/nbproject/org-netbeans-modules-gsf-testrunner.sig
+++ b/ide/gsf.testrunner/nbproject/org-netbeans-modules-gsf-testrunner.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.29
+#Version 2.30
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/gsf.testrunner/nbproject/project.properties b/ide/gsf.testrunner/nbproject/project.properties
index b26ff0f..9c1cd1c 100644
--- a/ide/gsf.testrunner/nbproject/project.properties
+++ b/ide/gsf.testrunner/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/ide/html.editor.lib/nbproject/org-netbeans-modules-html-editor-lib.sig b/ide/html.editor.lib/nbproject/org-netbeans-modules-html-editor-lib.sig
index 8a3352c..a1c2aef 100644
--- a/ide/html.editor.lib/nbproject/org-netbeans-modules-html-editor-lib.sig
+++ b/ide/html.editor.lib/nbproject/org-netbeans-modules-html-editor-lib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.49
+#Version 3.50
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/html.editor/nbproject/org-netbeans-modules-html-editor.sig b/ide/html.editor/nbproject/org-netbeans-modules-html-editor.sig
index 569c625..adea636 100644
--- a/ide/html.editor/nbproject/org-netbeans-modules-html-editor.sig
+++ b/ide/html.editor/nbproject/org-netbeans-modules-html-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.73
+#Version 2.74
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/html.editor/nbproject/project.properties b/ide/html.editor/nbproject/project.properties
index 7e03c49..221d2e3 100644
--- a/ide/html.editor/nbproject/project.properties
+++ b/ide/html.editor/nbproject/project.properties
@@ -18,7 +18,7 @@
 release.external/html-4.01.zip=docs/html-4.01.zip
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 jnlp.verify.excludes=docs/html-4.01.zip
 
 test.config.stableBTD.includes=**/*Test.class
@@ -27,5 +27,3 @@
     **/Html5CompletionQueryTest.class,\
     **/NavigationSideBarTest.class,\
     **/HtmlIndenterTest.class
-nashorn.prepend=${basedir}/../libs.nashorn/external/nashorn-02f810c26ff9-patched.jar
-bootclasspath.prepend=${nashorn.prepend}${path.separator}${basedir}/../libs.nashorn/external/asm-all-4.0.jar
diff --git a/ide/html.editor/src/org/netbeans/modules/html/editor/HtmlElementProperties.java b/ide/html.editor/src/org/netbeans/modules/html/editor/HtmlElementProperties.java
index 6eab749..c9b851a 100644
--- a/ide/html.editor/src/org/netbeans/modules/html/editor/HtmlElementProperties.java
+++ b/ide/html.editor/src/org/netbeans/modules/html/editor/HtmlElementProperties.java
@@ -197,7 +197,7 @@
 
     private static String[] findTags(String tagName, String attrName) {
         ValueCompletion support = AttrValuesCompletion.getSupport(tagName, attrName);
-        if (support != null && support instanceof AttrValuesCompletion.ValuesSetSupport) {
+        if (support instanceof AttrValuesCompletion.ValuesSetSupport) {
             AttrValuesCompletion.ValuesSetSupport fixedValuesSupport = (AttrValuesCompletion.ValuesSetSupport) support;
             return fixedValuesSupport.getTags();
         }
diff --git a/ide/html.editor/src/org/netbeans/modules/html/editor/Utils.java b/ide/html.editor/src/org/netbeans/modules/html/editor/Utils.java
index 6557615..049349c 100644
--- a/ide/html.editor/src/org/netbeans/modules/html/editor/Utils.java
+++ b/ide/html.editor/src/org/netbeans/modules/html/editor/Utils.java
@@ -51,7 +51,7 @@
     public static void saveDocumentIfNotOpened(Document document) throws IOException {
 
         Object o = document.getProperty(Document.StreamDescriptionProperty);
-        if (o == null || !(o instanceof DataObject)) {
+        if (!(o instanceof DataObject)) {
             return;
         }
         DataObject dobj = (DataObject) o;
diff --git a/ide/html.editor/test/unit/data/testfiles/simple01.html.formatted b/ide/html.editor/test/unit/data/testfiles/simple01.html.formatted
index e20b844..696b88b 100644
--- a/ide/html.editor/test/unit/data/testfiles/simple01.html.formatted
+++ b/ide/html.editor/test/unit/data/testfiles/simple01.html.formatted
@@ -5,7 +5,7 @@
             http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <style type="text/css">
-            Q:lang(en){ 
+            Q:lang(en){
                 /*
                         my own
                       comment
@@ -16,7 +16,9 @@
             }
         </style>
         <style type="text/css">
-            .error {color:red;}
+            .error {
+                color:red;
+            }
         </style>
     </head>
     <body>
diff --git a/ide/html.editor/test/unit/data/testfiles/simple07.html.formatted b/ide/html.editor/test/unit/data/testfiles/simple07.html.formatted
index 0239635..773a359 100644
--- a/ide/html.editor/test/unit/data/testfiles/simple07.html.formatted
+++ b/ide/html.editor/test/unit/data/testfiles/simple07.html.formatted
@@ -1,2 +1,2 @@
 <table
-</table>
+    </table>
diff --git a/ide/html.editor/test/unit/src/org/netbeans/modules/html/editor/indent/HtmlIndenterTest.java b/ide/html.editor/test/unit/src/org/netbeans/modules/html/editor/indent/HtmlIndenterTest.java
index 2cb106b..d241e10 100644
--- a/ide/html.editor/test/unit/src/org/netbeans/modules/html/editor/indent/HtmlIndenterTest.java
+++ b/ide/html.editor/test/unit/src/org/netbeans/modules/html/editor/indent/HtmlIndenterTest.java
@@ -183,7 +183,7 @@
     }
 
     public void testFormattingHTML07() throws Exception {
-        // #198659
+        // #198659 - checks that indention works without assertion in MarkupAbstractIndenter
         reformatFileContents("testfiles/simple07.html",new IndentPrefs(4,4));
     }
 
diff --git a/ide/html.indexing/nbproject/org-netbeans-modules-html-indexing.sig b/ide/html.indexing/nbproject/org-netbeans-modules-html-indexing.sig
index 25237e8..9ef8a31 100644
--- a/ide/html.indexing/nbproject/org-netbeans-modules-html-indexing.sig
+++ b/ide/html.indexing/nbproject/org-netbeans-modules-html-indexing.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.7
+#Version 1.8
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/html.indexing/nbproject/project.properties b/ide/html.indexing/nbproject/project.properties
index 5fef7b6..3a3208d 100644
--- a/ide/html.indexing/nbproject/project.properties
+++ b/ide/html.indexing/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/ide/html.lexer/nbproject/org-netbeans-modules-html-lexer.sig b/ide/html.lexer/nbproject/org-netbeans-modules-html-lexer.sig
index b037f2e..da76f23 100644
--- a/ide/html.lexer/nbproject/org-netbeans-modules-html-lexer.sig
+++ b/ide/html.lexer/nbproject/org-netbeans-modules-html-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.55
+#Version 1.56
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/html.parser/nbproject/org-netbeans-modules-html-parser.sig b/ide/html.parser/nbproject/org-netbeans-modules-html-parser.sig
index 4841a88..db90923 100644
--- a/ide/html.parser/nbproject/org-netbeans-modules-html-parser.sig
+++ b/ide/html.parser/nbproject/org-netbeans-modules-html-parser.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51.0
+#Version 1.52.0
 
 CLSS public com.ibm.icu.impl.Assert
 cons public init()
diff --git a/ide/html.parser/nbproject/project.properties b/ide/html.parser/nbproject/project.properties
index ddb5d9a..30fb5d7 100644
--- a/ide/html.parser/nbproject/project.properties
+++ b/ide/html.parser/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 release.external/htmlparser-1.4.20190624.jar=modules/ext/html5-parser.jar
 release.external/html5doc.zip=docs/html5doc.zip
diff --git a/ide/html/nbproject/org-netbeans-modules-html.sig b/ide/html/nbproject/org-netbeans-modules-html.sig
index 3877a69..fbf779d 100644
--- a/ide/html/nbproject/org-netbeans-modules-html.sig
+++ b/ide/html/nbproject/org-netbeans-modules-html.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.78
+#Version 1.79
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/ide/html/src/org/netbeans/modules/html/api/HtmlDataNode.java b/ide/html/src/org/netbeans/modules/html/api/HtmlDataNode.java
index 8e8b1fa..7cd31f0 100644
--- a/ide/html/src/org/netbeans/modules/html/api/HtmlDataNode.java
+++ b/ide/html/src/org/netbeans/modules/html/api/HtmlDataNode.java
@@ -72,7 +72,7 @@
                 Action a = actions[i];
                 if (a != null) {
                     Object value = a.getValue("type"); //NOI18N
-                    if (value != null && (value instanceof String)) {
+                    if (value instanceof String) {
                         String type = (String) value;
                         if (VIEWABLE_CLASS_NAME.equals(type)) {
                             continue;
diff --git a/ide/html/src/org/netbeans/modules/html/palette/HtmlPaletteUtilities.java b/ide/html/src/org/netbeans/modules/html/palette/HtmlPaletteUtilities.java
index c19e260..43c57ab 100644
--- a/ide/html/src/org/netbeans/modules/html/palette/HtmlPaletteUtilities.java
+++ b/ide/html/src/org/netbeans/modules/html/palette/HtmlPaletteUtilities.java
@@ -126,7 +126,7 @@
     public static void insert(final String s, final JTextComponent target, final boolean reformat)
             throws BadLocationException {
         final Document _doc = target.getDocument();
-        if (_doc == null || !(_doc instanceof BaseDocument)) {
+        if (!(_doc instanceof BaseDocument)) {
             return;
         }
 
diff --git a/ide/httpserver/nbproject/project.properties b/ide/httpserver/nbproject/project.properties
index 5402916..c252617 100644
--- a/ide/httpserver/nbproject/project.properties
+++ b/ide/httpserver/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 spec.version.base=2.55.0
 release.external/webserver-3.2.4.jar=modules/ext/webserver.jar
 test-unit-sys-prop.xtest.data=${nb_all}/ide/httpserver/test/unit/testfs
diff --git a/ide/httpserver/src/org/netbeans/modules/httpserver/HttpServerSettings.java b/ide/httpserver/src/org/netbeans/modules/httpserver/HttpServerSettings.java
index 332bcdb..c557f82 100644
--- a/ide/httpserver/src/org/netbeans/modules/httpserver/HttpServerSettings.java
+++ b/ide/httpserver/src/org/netbeans/modules/httpserver/HttpServerSettings.java
@@ -92,6 +92,7 @@
     /** http settings
      * @deprecated use <CODE>SharedClassObject.findObject()</CODE>
      */
+    @Deprecated
     public static HttpServerSettings OPTIONS = null;
 
     /** Lock for the httpserver operations */
diff --git a/ide/hudson.git/nbproject/project.properties b/ide/hudson.git/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/hudson.git/nbproject/project.properties
+++ b/ide/hudson.git/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/hudson.mercurial/nbproject/project.properties b/ide/hudson.mercurial/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/hudson.mercurial/nbproject/project.properties
+++ b/ide/hudson.mercurial/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/hudson.subversion/nbproject/project.properties b/ide/hudson.subversion/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/hudson.subversion/nbproject/project.properties
+++ b/ide/hudson.subversion/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/hudson.tasklist/nbproject/project.properties b/ide/hudson.tasklist/nbproject/project.properties
index df86cc1..b574476 100644
--- a/ide/hudson.tasklist/nbproject/project.properties
+++ b/ide/hudson.tasklist/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/hudson.ui/nbproject/org-netbeans-modules-hudson-ui.sig b/ide/hudson.ui/nbproject/org-netbeans-modules-hudson-ui.sig
index 8b690d9..842cc83 100644
--- a/ide/hudson.ui/nbproject/org-netbeans-modules-hudson-ui.sig
+++ b/ide/hudson.ui/nbproject/org-netbeans-modules-hudson-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.28
+#Version 1.29
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/ide/hudson.ui/src/org/netbeans/modules/hudson/ui/spi/ProjectHudsonProvider.java b/ide/hudson.ui/src/org/netbeans/modules/hudson/ui/spi/ProjectHudsonProvider.java
index 67103d3..2f6c42f 100644
--- a/ide/hudson.ui/src/org/netbeans/modules/hudson/ui/spi/ProjectHudsonProvider.java
+++ b/ide/hudson.ui/src/org/netbeans/modules/hudson/ui/spi/ProjectHudsonProvider.java
@@ -324,7 +324,7 @@
         }
 
         public @Override boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof Association)) {
+            if (!(obj instanceof Association)) {
                 return false;
             }
             return toString().equals(obj.toString());
diff --git a/ide/hudson/nbproject/org-netbeans-modules-hudson.sig b/ide/hudson/nbproject/org-netbeans-modules-hudson.sig
index 6860d05..6aee332 100644
--- a/ide/hudson/nbproject/org-netbeans-modules-hudson.sig
+++ b/ide/hudson/nbproject/org-netbeans-modules-hudson.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.30
+#Version 2.31
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/hudson/nbproject/project.properties b/ide/hudson/nbproject/project.properties
index 7da90d2..13ec89a 100644
--- a/ide/hudson/nbproject/project.properties
+++ b/ide/hudson/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/ide.kit/test/coverage-manual/selectjars/nbproject/project.properties b/ide/ide.kit/test/coverage-manual/selectjars/nbproject/project.properties
index 5888c4e..3f97ef5 100644
--- a/ide/ide.kit/test/coverage-manual/selectjars/nbproject/project.properties
+++ b/ide/ide.kit/test/coverage-manual/selectjars/nbproject/project.properties
@@ -37,7 +37,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/ide/ide.kit/test/qa-functional/data/SampleProject/nbproject/project.properties b/ide/ide.kit/test/qa-functional/data/SampleProject/nbproject/project.properties
index aa0b38d..79cb6ff 100644
--- a/ide/ide.kit/test/qa-functional/data/SampleProject/nbproject/project.properties
+++ b/ide/ide.kit/test/qa-functional/data/SampleProject/nbproject/project.properties
@@ -36,7 +36,7 @@
     
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.test.classpath=\
     ${javac.classpath}\
     ${build.classes.dir}\
diff --git a/ide/javascript2.debug.ui/nbproject/org-netbeans-modules-javascript2-debug-ui.sig b/ide/javascript2.debug.ui/nbproject/org-netbeans-modules-javascript2-debug-ui.sig
index b322ac6..6ac3b99 100644
--- a/ide/javascript2.debug.ui/nbproject/org-netbeans-modules-javascript2-debug-ui.sig
+++ b/ide/javascript2.debug.ui/nbproject/org-netbeans-modules-javascript2-debug-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.20
+#Version 1.21
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/javascript2.debug/nbproject/org-netbeans-modules-javascript2-debug.sig b/ide/javascript2.debug/nbproject/org-netbeans-modules-javascript2-debug.sig
index 57850a4..e136209 100644
--- a/ide/javascript2.debug/nbproject/org-netbeans-modules-javascript2-debug.sig
+++ b/ide/javascript2.debug/nbproject/org-netbeans-modules-javascript2-debug.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.35
+#Version 1.36
 
 CLSS public abstract interface java.beans.BeanInfo
 fld public final static int ICON_COLOR_16x16 = 1
diff --git a/ide/jellytools.ide/nbproject/org-netbeans-modules-jellytools-ide.sig b/ide/jellytools.ide/nbproject/org-netbeans-modules-jellytools-ide.sig
index 3dff862..076b114 100644
--- a/ide/jellytools.ide/nbproject/org-netbeans-modules-jellytools-ide.sig
+++ b/ide/jellytools.ide/nbproject/org-netbeans-modules-jellytools-ide.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.50.0
+#Version 3.51.0
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/ide/jumpto/nbproject/org-netbeans-modules-jumpto.sig b/ide/jumpto/nbproject/org-netbeans-modules-jumpto.sig
index 44638df..0b5971b 100644
--- a/ide/jumpto/nbproject/org-netbeans-modules-jumpto.sig
+++ b/ide/jumpto/nbproject/org-netbeans-modules-jumpto.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.72.0
+#Version 1.73.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/jumpto/src/org/netbeans/modules/jumpto/quicksearch/GoToTypeWorker.java b/ide/jumpto/src/org/netbeans/modules/jumpto/quicksearch/GoToTypeWorker.java
index 00032b0..3b4caa7 100644
--- a/ide/jumpto/src/org/netbeans/modules/jumpto/quicksearch/GoToTypeWorker.java
+++ b/ide/jumpto/src/org/netbeans/modules/jumpto/quicksearch/GoToTypeWorker.java
@@ -48,7 +48,7 @@
     private volatile boolean isCanceled = false;
     private final String text;
     private final long createTime;
-    private List<? extends TypeDescriptor> types = Collections.<TypeDescriptor>emptyList();;
+    private List<? extends TypeDescriptor> types = Collections.<TypeDescriptor>emptyList();
 
     public GoToTypeWorker( String text ) {
         this.text = text;
diff --git a/ide/languages.diff/nbproject/project.properties b/ide/languages.diff/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/ide/languages.diff/nbproject/project.properties
+++ b/ide/languages.diff/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/ide/languages.manifest/nbproject/project.properties b/ide/languages.manifest/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/ide/languages.manifest/nbproject/project.properties
+++ b/ide/languages.manifest/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/ide/languages.toml/nbproject/project.xml b/ide/languages.toml/nbproject/project.xml
index 1afa2c5..309960c 100644
--- a/ide/languages.toml/nbproject/project.xml
+++ b/ide/languages.toml/nbproject/project.xml
@@ -39,7 +39,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.18</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -47,7 +48,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.0.0.0</specification-version>
+                        <release-version>1</release-version>
+                        <specification-version>1.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -113,6 +115,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.lexer.antlr4</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>1.0</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.parsing.api</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/Bundle.properties b/ide/languages.toml/src/org/netbeans/modules/languages/toml/Bundle.properties
index 921df74..be2e5b3 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/Bundle.properties
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/Bundle.properties
@@ -30,6 +30,7 @@
 operator=Operator
 separator=Separator
 string=String
+string-quote=String Quote
 string-escape=String Escape Sequence
 table-mark=Table Marking
 whitespace=Whitespace
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/FontAndColors.xml b/ide/languages.toml/src/org/netbeans/modules/languages/toml/FontAndColors.xml
index b626f14..833b2a1 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/FontAndColors.xml
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/FontAndColors.xml
@@ -31,6 +31,7 @@
     <fontcolor name="operator" default="operator"/>
     <fontcolor name="separator" default="separator"/>
     <fontcolor name="string" default="string"/>
+    <fontcolor name="string-quote" default="string"/>
     <fontcolor name="string-escape" default="string">
         <font style="bold" />
     </fontcolor>
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
deleted file mode 100644
index 5f359d8..0000000
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/LexerInputCharStream.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.netbeans.modules.languages.toml;
-
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.misc.Interval;
-import org.netbeans.spi.lexer.*;
-
-/**
- *
- * @author lkishalmi
- */
-public class LexerInputCharStream implements CharStream {
-    private final LexerInput input;
-
-    private int tokenMark = Integer.MAX_VALUE;
-    private int index = 0;
-
-    public LexerInputCharStream(LexerInput input) {
-        this.input = input;
-    }
-
-    @Override
-    public String getText(Interval intrvl) {
-        if (intrvl.a < tokenMark) {
-            throw new UnsupportedOperationException("Read before the current token start is not supported: " + intrvl.a + " < " + tokenMark);
-        }
-        int start = intrvl.a - tokenMark;
-        int end = intrvl.b - tokenMark + 1;
-        return String.valueOf(input.readText(start, end));
-    }
-
-    @Override
-    public void consume() {
-        read();
-    }
-
-    @Override
-    public int LA(int count) {
-        if (count == 0) {
-            return 0; //the behaviour is not defined
-        }
-
-        int c = 0;
-        if (count > 0) {
-            for (int i = 0; i < count; i++) {
-                c = read();
-            }
-            backup(count);
-        } else {
-            backup(count);
-            c = read();
-        }
-        return c;
-    }
-
-    //Marks are for buffering in ANTLR4, we do not really need them
-    @Override
-    public int mark() {
-        return -1;
-    }
-
-    @Override
-    public void release(int marker) {
-    }
-
-    @Override
-    public int index() {
-        return index;
-    }
-
-    @Override
-    public void seek(int i) {
-        if (i < index()) {
-            backup(index() - i);
-        } else {
-            while (index() < i) {
-                if (read() == LexerInput.EOF) {
-                    break;
-                }
-            }
-        }
-    }
-
-
-    private int read() {
-        int ret = input.read();
-        index += 1;
-        return ret;
-    }
-
-    private void backup(int count) {
-        index -= count;
-        input.backup(count);
-    }
-
-    public final void markToken() {
-        tokenMark = index;
-    }
-
-    @Override
-    public int size() {
-        throw new UnsupportedOperationException("Stream size is unknown.");
-    }
-
-    @Override
-    public String getSourceName() {
-        return UNKNOWN_SOURCE_NAME;
-    }
-}
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
index dcbced4..e4fc2f6 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLexer.java
@@ -18,54 +18,38 @@
  */
 package org.netbeans.modules.languages.toml;
 
-import java.lang.reflect.Field;
 import org.antlr.v4.runtime.misc.IntegerStack;
 import org.netbeans.api.lexer.Token;
-import org.netbeans.spi.lexer.Lexer;
 import org.netbeans.spi.lexer.LexerRestartInfo;
-import org.netbeans.spi.lexer.TokenFactory;
 
 import static org.tomlj.internal.TomlLexer.*;
 import static org.netbeans.modules.languages.toml.TomlTokenId.*;
+import org.netbeans.spi.lexer.antlr4.AbstractAntlrLexerBridge;
 
 /**
  *
  * @author lkishalmi
  */
-public final class TomlLexer implements Lexer<TomlTokenId> {
-
-    private final TokenFactory<TomlTokenId> tokenFactory;
-    private final org.tomlj.internal.TomlLexer lexer;
-    private final LexerInputCharStream input;
+public final class TomlLexer extends AbstractAntlrLexerBridge<org.tomlj.internal.TomlLexer, TomlTokenId> {
 
     public TomlLexer(LexerRestartInfo<TomlTokenId> info) {
-        this.tokenFactory = info.tokenFactory();
-        this.input = new LexerInputCharStream(info.input());
-        this.lexer = new org.tomlj.internal.TomlLexer(input);
-        if (info.state() != null) {
-            ((LexerState) info.state()).restore(lexer);
-        }
+        super(info, org.tomlj.internal.TomlLexer::new);
     }
 
     @Override
-    public Token<TomlTokenId> nextToken() {
-        org.antlr.v4.runtime.Token nextToken = lexer.nextToken();
-        if (nextToken.getType() == EOF) {
-            return null;
-        }
-        switch (nextToken.getType()) {
-            case TripleQuotationMark:
-            case TripleApostrophe:
-                return token(ML_STRING_START);
+    protected Token<TomlTokenId> mapToken(org.antlr.v4.runtime.Token antlrToken) {
+        switch (antlrToken.getType()) {
+            case EOF:
+                return null;
 
             case StringChar:
+                return groupToken(STRING, StringChar);
+
+            case TripleQuotationMark:
+            case TripleApostrophe:
             case QuotationMark:
             case Apostrophe:
-                return token(STRING);
-
-            case MLBasicStringEnd:
-            case MLLiteralStringEnd:
-                return token(ML_STRING_END);
+                return token(STRING_QUOTE);
 
             case Comma:
             case ArrayStart:
@@ -93,6 +77,7 @@
                 return token(TomlTokenId.WHITESPACE);
             case Error:
                 return token(ERROR);
+
             case DecimalInteger:
             case HexInteger:
             case OctalInteger:
@@ -115,7 +100,6 @@
             case Z:
             case TimeDelimiter:
             case DateDigits:
-            case DateComma:
                 return token(DATE);
             default:
                 return token(ERROR);
@@ -127,69 +111,23 @@
         return new LexerState(lexer);
     }
 
-    @Override
-    public void release() {
-    }
-
-    private Token<TomlTokenId> token(TomlTokenId id) {
-        input.markToken();
-        return tokenFactory.createToken(id);
-    }
-
-    private static class LexerState {
-        private static Field ARRAY_DEPTH;
-        private static Field ARRAY_DEPTH_STACK;
-
-        final int state;
-        final int mode;
-        final IntegerStack modes;
-
+    private static class LexerState extends AbstractAntlrLexerBridge.LexerState<org.tomlj.internal.TomlLexer> {
         final int arrayDepth;
         final IntegerStack arrayDepthStack;
 
-        static {
-            try {
-                // Hack accessing private state parts of TomlLexer
-                // See: https://github.com/tomlj/tomlj/pull/42
-                ARRAY_DEPTH = org.tomlj.internal.TomlLexer.class.getDeclaredField("arrayDepth");
-                ARRAY_DEPTH.setAccessible(true);
-                ARRAY_DEPTH_STACK = org.tomlj.internal.TomlLexer.class.getDeclaredField("arrayDepthStack");
-                ARRAY_DEPTH_STACK.setAccessible(true);
-            } catch (ReflectiveOperationException ex) {
-            }
-        }
-
         LexerState(org.tomlj.internal.TomlLexer lexer) {
-            this.state= lexer.getState();
+            super(lexer);
 
-            this.mode = lexer._mode;
-            this.modes = new IntegerStack(lexer._modeStack);
-
-            try {
-                this.arrayDepth = ARRAY_DEPTH.getInt(lexer);
-                this.arrayDepthStack = new IntegerStack((IntegerStack)ARRAY_DEPTH_STACK.get(lexer));
-            } catch (IllegalAccessException ex) {
-                throw new RuntimeException(ex);
-            }
-        }
-
-        public void restore(org.tomlj.internal.TomlLexer lexer) {
-            lexer.setState(state);
-            lexer._modeStack.addAll(modes);
-            lexer._mode = mode;
-
-            try {
-                ARRAY_DEPTH.setInt(lexer, arrayDepth);
-                ((IntegerStack) ARRAY_DEPTH_STACK.get(lexer)).addAll(arrayDepthStack);
-            } catch (IllegalAccessException ex) {
-                throw new RuntimeException(ex);
-            }
+            this.arrayDepth = lexer.arrayDepth;
+            this.arrayDepthStack = new IntegerStack(lexer.arrayDepthStack);
         }
 
         @Override
-        public String toString() {
-            return String.valueOf(state);
-        }
+        public void restore(org.tomlj.internal.TomlLexer lexer) {
+            super.restore(lexer);
 
+            lexer.arrayDepth = arrayDepth;
+            lexer.arrayDepthStack.addAll(arrayDepthStack);
+        }
     }
 }
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTokenId.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTokenId.java
index deacdc4..8eef764 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTokenId.java
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTokenId.java
@@ -43,8 +43,7 @@
     DOT("separator"),
     TABLE_MARK("table-mark"),
     STRING("string"),
-    ML_STRING_START("string"),
-    ML_STRING_END("string"),
+    STRING_QUOTE("string"),
     ESCAPE_SEQUENCE("string-escape"),
     WHITESPACE("whitespace");
 
diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTypedTextInterceptor.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTypedTextInterceptor.java
index caf8ae7..511de08 100644
--- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTypedTextInterceptor.java
+++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlTypedTextInterceptor.java
@@ -132,7 +132,9 @@
         while ((ts.token() != null) && STRING_OR_WS.contains(ts.token().id())) {
             ts.movePrevious();
         }
-        return (ts.token() != null) && TomlTokenId.ML_STRING_START == ts.token().id();
+        return (ts.token() != null) 
+                && (TomlTokenId.STRING_QUOTE == ts.token().id()) 
+                && ts.token().text().length() == 3;
     }
 
     private static int quotesInLine(Context context, char quote) throws BadLocationException {
diff --git a/ide/languages/nbproject/org-netbeans-modules-languages.sig b/ide/languages/nbproject/org-netbeans-modules-languages.sig
index 1c459af..558aa8c 100644
--- a/ide/languages/nbproject/org-netbeans-modules-languages.sig
+++ b/ide/languages/nbproject/org-netbeans-modules-languages.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.138.0
+#Version 1.139.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/languages/src/org/netbeans/modules/languages/LanguagesManager.java b/ide/languages/src/org/netbeans/modules/languages/LanguagesManager.java
index 84a48b5..5190ce7 100644
--- a/ide/languages/src/org/netbeans/modules/languages/LanguagesManager.java
+++ b/ide/languages/src/org/netbeans/modules/languages/LanguagesManager.java
@@ -147,7 +147,7 @@
     
     private void languageChanged (String mimeType) {
         Language language = mimeTypeToLanguage.get (mimeType);
-        if (language != null && language instanceof LanguageImpl) {
+        if (language instanceof LanguageImpl) {
             try {
                 FileSystem fs = Repository.getDefault ().getDefaultFileSystem ();
                 FileObject fo = fs.findResource ("Editors/" + mimeType + "/language.nbs");
diff --git a/ide/languages/src/org/netbeans/modules/languages/features/ASTBrowserTopComponent.java b/ide/languages/src/org/netbeans/modules/languages/features/ASTBrowserTopComponent.java
index 1c527eb..0f74956 100644
--- a/ide/languages/src/org/netbeans/modules/languages/features/ASTBrowserTopComponent.java
+++ b/ide/languages/src/org/netbeans/modules/languages/features/ASTBrowserTopComponent.java
@@ -244,7 +244,7 @@
             lastPane = pane;
         }
         Document document = editorCookie.getDocument ();
-        if (document == null || !(document instanceof NbEditorDocument)) return null;
+        if (!(document instanceof NbEditorDocument)) return null;
         return ParserManagerImpl.getImpl (document).getAST ();
     }
 
diff --git a/ide/languages/src/org/netbeans/modules/languages/features/HyperlinkListener.java b/ide/languages/src/org/netbeans/modules/languages/features/HyperlinkListener.java
index d1f2d37..1cb822b 100644
--- a/ide/languages/src/org/netbeans/modules/languages/features/HyperlinkListener.java
+++ b/ide/languages/src/org/netbeans/modules/languages/features/HyperlinkListener.java
@@ -180,7 +180,7 @@
             DatabaseContext root = DatabaseManager.getRoot (ast);
             if (root != null) {
                 final DatabaseItem item = root.getDatabaseItem (offset);
-                if (item != null && item instanceof DatabaseUsage) {
+                if (item instanceof DatabaseUsage) {
                     highlight = Highlighting.getHighlighting (document).highlight (
                         path.getLeaf ().getOffset (),
                         path.getLeaf ().getEndOffset (),
diff --git a/ide/lexer.antlr4/arch.xml b/ide/lexer.antlr4/arch.xml
new file mode 100644
index 0000000..ea21251
--- /dev/null
+++ b/ide/lexer.antlr4/arch.xml
@@ -0,0 +1,1063 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
+  <!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
+]>
+
+<api-answers
+  question-version="1.29"
+  author="lkishalmi@apache.org"
+>
+
+  &api-questions;
+
+
+<!--
+        <question id="arch-overall" when="init">
+            Describe the overall architecture.
+            <hint>
+            What will be API for
+            <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
+                clients and what support API</a>?
+            What parts will be pluggable?
+            How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
+            to describe your general APIs.
+            If possible please provide
+            simple diagrams.
+            </hint>
+        </question>
+-->
+ <answer id="arch-overall">
+  <ul>
+   <li>
+    <api group="ide" name="ANTLRLexerBridge" type="export" category="devel">
+     <p>
+      This module provides a bridge between ANTLRv4 Lexers and NetBeans Lexer
+      infrastructure.
+     </p>
+    </api>
+   </li>
+  </ul>
+ </answer>
+
+
+
+
+
+
+<!--
+        <question id="arch-usecases" when="init">
+            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
+            use cases</a> of the new API. Who will use it at
+            what circumstances and what will be the typical code to write
+            to use the module.
+        </question>
+-->
+ <answer id="arch-usecases">
+  <p>
+     New language support with ANTLRv4 Grammar.
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-read" when="final">
+            Does your module read any resources from layers? For what purpose?
+
+            <hint>
+            As this is some kind of intermodule dependency, it is a kind of API.
+            Please describe it and classify according to
+            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
+            common stability categories</a>.
+            </hint>
+        </question>
+-->
+ <answer id="resources-read">
+  <p>
+   None.
+  </p>
+ </answer>
+
+
+ <answer id="exec-property">
+  <p>
+   None.
+  </p>
+ </answer>
+
+ <answer id="resources-file">
+  <p>
+   None.
+  </p>
+ </answer>
+
+
+
+
+<!--
+        <question id="arch-quality" when="init">
+            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html" shape="rect">quality</a>
+            of your code be tested and
+            how are future regressions going to be prevented?
+            <hint>
+            What kind of testing do
+            you want to use? How much functionality, in which areas,
+            should be covered by the tests? How you find out that your
+            project was successful?
+            </hint>
+        </question>
+-->
+ <answer id="arch-quality">
+  <p>
+   XXX no answer for arch-quality
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-time" when="init">
+            What are the time estimates of the work?
+            <hint>
+            Please express your estimates of how long the design, implementation,
+            stabilization are likely to last. How many people will be needed to
+            implement this and what is the expected milestone by which the work should be
+            ready?
+            </hint>
+        </question>
+-->
+ <answer id="arch-time">
+  <p>
+   XXX no answer for arch-time
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-what" when="init">
+            What is this project good for?
+            <hint>
+            Please provide here a few lines describing the project,
+            what problem it should solve, provide links to documentation,
+            specifications, etc.
+            </hint>
+        </question>
+-->
+ <answer id="arch-what">
+  <p>
+   XXX no answer for arch-what
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-where" when="impl">
+            Where one can find sources for your module?
+            <hint>
+                Please provide link to the Hg web client at
+                http://hg.netbeans.org/
+                or just use tag defaultanswer generate='here'
+            </hint>
+        </question>
+-->
+ <answer id="arch-where">
+  <defaultanswer generate='here' />
+ </answer>
+
+
+
+<!--
+        <question id="compat-deprecation" when="init">
+            How the introduction of your project influences functionality
+            provided by previous version of the product?
+            <hint>
+            If you are planning to deprecate/remove/change any existing APIs,
+            list them here accompanied with the reason explaining why you
+            are doing so.
+            </hint>
+        </question>
+-->
+ <answer id="compat-deprecation">
+  <p>
+   XXX no answer for compat-deprecation
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-i18n" when="impl">
+            Is your module correctly internationalized?
+            <hint>
+            Correct internationalization means that it obeys instructions
+            at <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html" shape="rect">
+            NetBeans I18N pages</a>.
+            </hint>
+        </question>
+-->
+ <answer id="compat-i18n">
+  <p>
+   XXX no answer for compat-i18n
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-standards" when="init">
+            Does the module implement or define any standards? Is the
+            implementation exact or does it deviate somehow?
+        </question>
+-->
+ <answer id="compat-standards">
+  <p>
+   XXX no answer for compat-standards
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-version" when="impl">
+            Can your module coexist with earlier and future
+            versions of itself? Can you correctly read all old settings? Will future
+            versions be able to read your current settings? Can you read
+            or politely ignore settings stored by a future version?
+
+            <hint>
+            Very helpful for reading settings is to store version number
+            there, so future versions can decide whether how to read/convert
+            the settings and older versions can ignore the new ones.
+            </hint>
+        </question>
+-->
+ <answer id="compat-version">
+  <p>
+   XXX no answer for compat-version
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-jre" when="final">
+            Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
+            <hint>
+            It is expected that if your module runs on 1.x that it will run
+            on 1.x+1 if no, state that please. Also describe here cases where
+            you run different code on different versions of JRE and why.
+            </hint>
+        </question>
+-->
+ <answer id="dep-jre">
+  <p>
+   XXX no answer for dep-jre
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-jrejdk" when="final">
+            Do you require the JDK or is the JRE enough?
+        </question>
+-->
+ <answer id="dep-jrejdk">
+  <p>
+   XXX no answer for dep-jrejdk
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-nb" when="init">
+            What other NetBeans projects and modules does this one depend on?
+            <hint>
+            Depending on other NetBeans projects influnces the ability of
+            users of your work to customize their own branded version of
+            NetBeans by enabling and disabling some modules. Too
+            much dependencies restrict this kind of customization. If that
+            is your case, then you may want to split your functionality into
+            pieces of autoload, eager and regular modules which can be
+            enabled independently. Usually the answer to this question
+            is generated from your <code>project.xml</code> file, but
+            if it is not guessed correctly, you can suppress it by
+            specifying &lt;defaultanswer generate="none"/&gt; and
+            write here your own. Please describe such projects as imported APIs using
+            the <code>&lt;api name="identification" type="import or export" category="stable" url="where is the description" /&gt;</code>.
+            By doing this information gets listed in the summary page of your
+            javadoc.
+            </hint>
+        </question>
+-->
+ <answer id="dep-nb">
+  <defaultanswer generate='here' />
+ </answer>
+
+
+
+<!--
+        <question id="dep-non-nb" when="init">
+            What other projects outside NetBeans does this one depend on?
+
+            <hint>
+            Depending on 3rd party libraries is always problematic,
+            especially if they are not open source, as that complicates
+            the licensing scheme of NetBeans. Please enumerate your
+            external dependencies here, so it is correctly understood since
+            the begining what are the legal implications of your project.
+            Also please note that
+            some non-NetBeans projects are packaged as NetBeans modules
+            (see <a href="http://libs.netbeans.org/" shape="rect">libraries</a>) and
+            it is preferred to use this approach when more modules may
+            depend and share such third-party libraries.
+            </hint>
+        </question>
+-->
+ <answer id="dep-non-nb">
+  <p>
+   XXX no answer for dep-non-nb
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-platform" when="init">
+            On which platforms does your module run? Does it run in the same
+            way on each?
+            <hint>
+            If you plan any dependency on OS or any usage of native code,
+            please describe why you are doing so and describe how you envision
+            to enforce the portability of your code.
+            Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific" shape="rect">OS conditionally
+            enabled modules</a> which together with autoload/eager modules
+            can allow you to enable to provide the best OS aware support
+            on certain OSes while providing compatibility bridge on the not
+            supported ones.
+            Also please list the supported
+            OSes/HW platforms and mentioned the lovest version of JDK required
+            for your project to run on. Also state whether JRE is enough or
+            you really need JDK.
+            </hint>
+        </question>
+-->
+ <answer id="dep-platform">
+  <p>
+   XXX no answer for dep-platform
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-dependencies" when="final">
+            What do other modules need to do to declare a dependency on this one,
+            in addition to or instead of the normal module dependency declaration
+            (e.g. tokens to require)?
+            <hint>
+                Provide a sample of the actual lines you would add to a module manifest
+                to declare a dependency, for example OpenIDE-Module-Requires: some.token.
+                If other modules should not depend on this module, or should just use a
+                simple regular module dependency, you can just answer "nothing". If you
+                intentionally expose a semistable API to clients using implementation
+                dependencies, you should mention that here (but there is no need to give
+                an example of usage).
+            </hint>
+        </question>
+-->
+ <answer id="deploy-dependencies">
+  <p>
+   XXX no answer for deploy-dependencies
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-jar" when="impl">
+            Do you deploy just module JAR file(s) or other files as well?
+            <hint>
+            Usually a module consist of one JAR file (perhaps with Class-Path
+            extensions) and also a configuration file that enables it. If you
+            have any other files, use
+            &lt;api group="java.io.File" name="yourname" type="export" category="friend"&gt;...&lt;/api&gt;
+            to define the location, name and stability of your files (of course
+            changing "yourname" and "friend" to suit your needs).
+
+            If it uses more than one JAR, describe where they are located, how
+            they refer to each other.
+            If it consist of module JAR(s) and other files, please describe
+            what is their purpose, why other files are necessary. Please
+            make sure that installation/uninstallation leaves the system
+            in state as it was before installation.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-jar">
+  <p>
+   XXX no answer for deploy-jar
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-nbm" when="impl">
+            Can you deploy an NBM via the Update Center?
+            <hint>
+            If not why?
+            </hint>
+        </question>
+-->
+ <answer id="deploy-nbm">
+  <p>
+   XXX no answer for deploy-nbm
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-packages" when="init">
+            Are packages of your module made inaccessible by not declaring them
+            public?
+
+            <hint>
+            By default NetBeans build harness treats all packages are private.
+            If you export some of them - either as public or friend packages,
+            you should have a reason. If the reason is described elsewhere
+            in this document, you can ignore this question.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-packages">
+  <p>
+   XXX no answer for deploy-packages
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-shared" when="final">
+            Do you need to be installed in the shared location only, or in the user directory only,
+            or can your module be installed anywhere?
+            <hint>
+            Installation location shall not matter, if it does explain why.
+            Consider also whether <code>InstalledFileLocator</code> can help.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-shared">
+  <p>
+   XXX no answer for deploy-shared
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-ant-tasks" when="impl">
+            Do you define or register any ant tasks that other can use?
+
+            <hint>
+            If you provide an ant task that users can use, you need to be very
+            careful about its syntax and behaviour, as it most likely forms an
+	          API for end users and as there is a lot of end users, their reaction
+            when such API gets broken can be pretty strong.
+            </hint>
+        </question>
+-->
+ <answer id="exec-ant-tasks">
+  <p>
+   XXX no answer for exec-ant-tasks
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-classloader" when="impl">
+            Does your code create its own class loader(s)?
+            <hint>
+            A bit unusual. Please explain why and what for.
+            </hint>
+        </question>
+-->
+ <answer id="exec-classloader">
+  <p>
+   XXX no answer for exec-classloader
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-component" when="impl">
+            Is execution of your code influenced by any (string) property
+            of any of your components?
+
+            <hint>
+            Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
+            or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
+            a behavior of some code. This of course forms an interface that should
+            be documented. Also if one depends on some interface that an object
+            implements (<code>component instanceof Runnable</code>) that forms an
+            API as well.
+            </hint>
+        </question>
+-->
+ <answer id="exec-component">
+  <p>
+   XXX no answer for exec-component
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-introspection" when="impl">
+            Does your module use any kind of runtime type information (<code>instanceof</code>,
+            work with <code>java.lang.Class</code>, etc.)?
+            <hint>
+            Check for cases when you have an object of type A and you also
+            expect it to (possibly) be of type B and do some special action. That
+            should be documented. The same applies on operations in meta-level
+            (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
+            </hint>
+        </question>
+-->
+ <answer id="exec-introspection">
+  <p>
+   XXX no answer for exec-introspection
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-privateaccess" when="final">
+            Are you aware of any other parts of the system calling some of
+            your methods by reflection?
+            <hint>
+            If so, describe the "contract" as an API. Likely private or friend one, but
+            still API and consider rewrite of it.
+            </hint>
+        </question>
+-->
+ <answer id="exec-privateaccess">
+  <p>
+   XXX no answer for exec-privateaccess
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-process" when="impl">
+            Do you execute an external process from your module? How do you ensure
+            that the result is the same on different platforms? Do you parse output?
+            Do you depend on result code?
+            <hint>
+            If you feed an input, parse the output please declare that as an API.
+            </hint>
+        </question>
+-->
+ <answer id="exec-process">
+  <p>
+   XXX no answer for exec-process
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-reflection" when="impl">
+            Does your code use Java Reflection to execute other code?
+            <hint>
+            This usually indicates a missing or insufficient API in the other
+            part of the system. If the other side is not aware of your dependency
+            this contract can be easily broken.
+            </hint>
+        </question>
+-->
+ <answer id="exec-reflection">
+  <p>
+   XXX no answer for exec-reflection
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-threading" when="init">
+            What threading models, if any, does your module adhere to? How the
+            project behaves with respect to threading?
+            <hint>
+                Is your API threadsafe? Can it be accessed from any threads or
+                just from some dedicated ones? Any special relation to AWT and
+                its Event Dispatch thread? Also
+                if your module calls foreign APIs which have a specific threading model,
+                indicate how you comply with the requirements for multithreaded access
+                (synchronization, mutexes, etc.) applicable to those APIs.
+                If your module defines any APIs, or has complex internal structures
+                that might be used from multiple threads, declare how you protect
+                data against concurrent access, race conditions, deadlocks, etc.,
+                and whether such rules are enforced by runtime warnings, errors, assertions, etc.
+                Examples: a class might be non-thread-safe (like Java Collections); might
+                be fully thread-safe (internal locking); might require access through a mutex
+                (and may or may not automatically acquire that mutex on behalf of a client method);
+                might be able to run only in the event queue; etc.
+                Also describe when any events are fired: synchronously, asynchronously, etc.
+                Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations" shape="rect">Threading Recommendations</a> (in progress)
+            </hint>
+        </question>
+-->
+ <answer id="exec-threading">
+  <p>
+   XXX no answer for exec-threading
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-clipboard" when="impl">
+            Which data flavors (if any) does your code read from or insert to
+            the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?
+
+            <hint>
+            Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
+            Check your code for overriding these methods.
+            </hint>
+        </question>
+-->
+ <answer id="format-clipboard">
+  <p>
+   XXX no answer for format-clipboard
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-dnd" when="impl">
+            Which protocols (if any) does your code understand during Drag &amp; Drop?
+            <hint>
+            Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>.
+            Check your code for overriding these methods. Btw. if they are not overridden, they
+            by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
+            </hint>
+        </question>
+-->
+ <answer id="format-dnd">
+  <p>
+   XXX no answer for format-dnd
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-types" when="impl">
+            Which protocols and file formats (if any) does your module read or write on disk,
+            or transmit or receive over the network? Do you generate an ant build script?
+            Can it be edited and modified?
+
+            <hint>
+            <p>
+            Files can be read and written by other programs, modules and users. If they influence
+            your behaviour, make sure you either document the format or claim that it is a private
+            api (using the &lt;api&gt; tag).
+            </p>
+
+            <p>
+            If you generate an ant build file, this is very likely going to be seen by end users and
+            they will be attempted to edit it. You should be ready for that and provide here a link
+            to documentation that you have for such purposes and also describe how you are going to
+            understand such files during next release, when you (very likely) slightly change the
+            format.
+            </p>
+            </hint>
+        </question>
+-->
+ <answer id="format-types">
+  <p>
+   XXX no answer for format-types
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-lookup" when="init">
+            Does your module use <code>org.openide.util.Lookup</code>
+            or any similar technology to find any components to communicate with? Which ones?
+
+            <hint>
+            NetBeans is build around a generic registry of services called
+            lookup. It is preferable to use it for registration and discovery
+            if possible. See
+            <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html" shape="rect">
+            The Solution to Comunication Between Components
+            </a>. If you do not plan to use lookup and insist usage
+            of other solution, then please describe why it is not working for
+            you.
+            <br/>
+            When filling the final version of your arch document, please
+            describe the interfaces you are searching for, where
+            are defined, whether you are searching for just one or more of them,
+            if the order is important, etc. Also classify the stability of such
+            API contract. Use &lt;api group=&amp;lookup&amp; /&gt; tag, so
+            your information gets listed in the summary page of your javadoc.
+            </hint>
+        </question>
+-->
+ <answer id="lookup-lookup">
+  <p>
+   None.
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-register" when="final">
+            Do you register anything into lookup for other code to find?
+            <hint>
+            Do you register using layer file or using a declarative annotation such as <code>@ServiceProvider</code>?
+            Who is supposed to find your component?
+            </hint>
+        </question>
+-->
+ <answer id="lookup-register">
+  <p>
+   XXX no answer for lookup-register
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-remove" when="final">
+            Do you remove entries of other modules from lookup?
+            <hint>
+            Why? Of course, that is possible, but it can be dangerous. Is the module
+            your are masking resource from aware of what you are doing?
+            </hint>
+        </question>
+-->
+ <answer id="lookup-remove">
+  <p>
+   XXX no answer for lookup-remove
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-exit" when="final">
+            Does your module run any code on exit?
+        </question>
+-->
+ <answer id="perf-exit">
+  <p>
+   XXX no answer for perf-exit
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-huge_dialogs" when="final">
+            Does your module contain any dialogs or wizards with a large number of
+            GUI controls such as combo boxes, lists, trees, or text areas?
+        </question>
+-->
+ <answer id="perf-huge_dialogs">
+  <p>
+   XXX no answer for perf-huge_dialogs
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-limit" when="init">
+            Are there any hard-coded or practical limits in the number or size of
+            elements your code can handle?
+            <hint>
+                Most of algorithms have increasing memory and speed complexity
+                with respect to size of data they operate on. What is the critical
+                part of your project that can be seen as a bottleneck with
+                respect to speed or required memory? What are the practical
+                sizes of data you tested your project with? What is your estimate
+                of potential size of data that would cause visible performance
+                problems? Is there some kind of check to detect such situation
+                and prevent "hard" crashes - for example the CloneableEditorSupport
+                checks for size of a file to be opened in editor
+                and if it is larger than 1Mb it shows a dialog giving the
+                user the right to decide - e.g. to cancel or commit suicide.
+            </hint>
+        </question>
+-->
+ <answer id="perf-limit">
+  <p>
+   XXX no answer for perf-limit
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-mem" when="final">
+            How much memory does your component consume? Estimate
+            with a relation to the number of windows, etc.
+        </question>
+-->
+ <answer id="perf-mem">
+  <p>
+   XXX no answer for perf-mem
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-menus" when="final">
+            Does your module use dynamically updated context menus, or
+            context-sensitive actions with complicated and slow enablement logic?
+            <hint>
+                If you do a lot of tricks when adding actions to regular or context menus, you can significantly
+                slow down display of the menu, even when the user is not using your action. Pay attention to
+                actions you add to the main menu bar, and to context menus of foreign nodes or components. If
+                the action is conditionally enabled, or changes its display dynamically, you need to check the
+                impact on performance. In some cases it may be more appropriate to make a simple action that is
+                always enabled but does more detailed checks in a dialog if it is actually run.
+            </hint>
+        </question>
+-->
+ <answer id="perf-menus">
+  <p>
+   XXX no answer for perf-menus
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-progress" when="final">
+            Does your module execute any long-running tasks?
+
+            <hint>Long running tasks should never block
+            AWT thread as it badly hurts the UI
+            <a href="http://performance.netbeans.org/responsiveness/issues.html" shape="rect">
+            responsiveness</a>.
+            Tasks like connecting over
+            network, computing huge amount of data, compilation
+            be done asynchronously (for example
+            using <code>RequestProcessor</code>), definitively it should
+            not block AWT thread.
+            </hint>
+        </question>
+-->
+ <answer id="perf-progress">
+  <p>
+   XXX no answer for perf-progress
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-scale" when="init">
+            Which external criteria influence the performance of your
+            program (size of file in editor, number of files in menu,
+            in source directory, etc.) and how well your code scales?
+            <hint>
+            Please include some estimates, there are other more detailed
+            questions to answer in later phases of implementation.
+            </hint>
+        </question>
+-->
+ <answer id="perf-scale">
+  <p>
+   XXX no answer for perf-scale
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-spi" when="init">
+            How the performance of the plugged in code will be enforced?
+            <hint>
+            If you allow foreign code to be plugged into your own module, how
+            do you enforce that it will behave correctly and quickly and will not
+            negatively influence the performance of your own module?
+            </hint>
+        </question>
+-->
+ <answer id="perf-spi">
+  <p>
+   XXX no answer for perf-spi
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-startup" when="final">
+            Does your module run any code on startup?
+        </question>
+-->
+ <answer id="perf-startup">
+  <p>
+   XXX no answer for perf-startup
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-wakeup" when="final">
+            Does any piece of your code wake up periodically and do something
+            even when the system is otherwise idle (no user interaction)?
+        </question>
+-->
+ <answer id="perf-wakeup">
+  <p>
+   XXX no answer for perf-wakeup
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-layer" when="final">
+            Does your module provide own layer? Does it create any files or
+            folders in it? What it is trying to communicate by that and with which
+            components?
+
+            <hint>
+            NetBeans allows automatic and declarative installation of resources
+            by module layers. Module register files into appropriate places
+            and other components use that information to perform their task
+            (build menu, toolbar, window layout, list of templates, set of
+            options, etc.).
+            </hint>
+        </question>
+-->
+ <answer id="resources-layer">
+  <p>
+   XXX no answer for resources-layer
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-mask" when="final">
+            Does your module mask/hide/override any resources provided by other modules in
+            their layers?
+
+            <hint>
+            If you mask a file provided by another module, you probably depend
+            on that and do not want the other module to (for example) change
+            the file's name. That module shall thus make that file available as an API
+            of some stability category.
+            </hint>
+        </question>
+-->
+ <answer id="resources-mask">
+  <p>
+   XXX no answer for resources-mask
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-preferences" when="final">
+            Does your module uses preferences via Preferences API? Does your module use NbPreferences or
+            or regular JDK Preferences ? Does it read, write or both ?
+            Does it share preferences with other modules ? If so, then why ?
+            <hint>
+                You may use
+                    &lt;api type="export" group="preferences"
+                    name="preference node name" category="private"&gt;
+                    description of individual keys, where it is used, what it
+                    influences, whether the module reads/write it, etc.
+                    &lt;/api&gt;
+                Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
+                Note that if you use NbPreferences this name will then be the same as the code name base of the module.
+            </hint>
+        </question>
+-->
+ <answer id="resources-preferences">
+  <p>
+   XXX no answer for resources-preferences
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="security-grant" when="final">
+            Does your code grant additional rights to some other code?
+            <hint>Avoid using a class loader that adds extra
+            permissions to loaded code unless really necessary.
+            Also note that your API implementation
+            can also expose unneeded permissions to enemy code by
+            calling AccessController.doPrivileged().</hint>
+        </question>
+-->
+ <answer id="security-grant">
+  <p>
+   XXX no answer for security-grant
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="security-policy" when="final">
+            Does your functionality require modifications to the standard policy file?
+            <hint>Your code might pass control to third-party code not
+            coming from trusted domains. This could be code downloaded over the
+            network or code coming from libraries that are not bundled
+            with NetBeans. Which permissions need to be granted to which domains?</hint>
+        </question>
+-->
+ <answer id="security-policy">
+  <p>
+   XXX no answer for security-policy
+  </p>
+ </answer>
+
+</api-answers>
+
diff --git a/ide/lexer.antlr4/build.xml b/ide/lexer.antlr4/build.xml
new file mode 100644
index 0000000..73dc401
--- /dev/null
+++ b/ide/lexer.antlr4/build.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<project name="ide/lexer.antlr4" default="build" basedir=".">
+    <import file="../../nbbuild/templates/projectized.xml"/>
+
+    <target name="generate-test-lexer" description="Generate DummyLexer for tests" depends="init,test-init">
+        <property name="test.outdir" location="${test.unit.src.dir}/org/antlr/grammars/dummy"/>
+        <path id="antlr4.tool">
+            <fileset dir="../../ide/libs.antlr4.runtime/external" includes="*.jar"/>
+            <fileset dir="../../ide/libs.antlr3.runtime/external" includes="antlr-runtime-*.jar"/>
+        </path>
+
+        <java classname="org.antlr.v4.Tool" classpathref="antlr4.tool" fork="true" dir="${test.outdir}">
+            <arg value="-o"/>
+            <arg value="${test.outdir}"/>
+            <arg value="DummyLexer.g4"/>
+        </java>
+
+        <delete dir="${test.outdir}" includes="*.tokens"/>
+        <delete dir="${test.outdir}" includes="*.interp"/>
+    </target>
+</project>
diff --git a/ide/lexer.antlr4/manifest.mf b/ide/lexer.antlr4/manifest.mf
new file mode 100644
index 0000000..52b3d99
--- /dev/null
+++ b/ide/lexer.antlr4/manifest.mf
@@ -0,0 +1,3 @@
+OpenIDE-Module: org.netbeans.modules.lexer.antlr4
+OpenIDE-Module-Implementation-Version: 1
+OpenIDE-Module-Localizing-Bundle: org/netbeans/spi/lexer/antlr4/Bundle.properties
diff --git a/java/spi.java.hints/external/binaries-list b/ide/lexer.antlr4/nbproject/project.properties
similarity index 88%
copy from java/spi.java.hints/external/binaries-list
copy to ide/lexer.antlr4/nbproject/project.properties
index 3d8ec73..0c48343 100644
--- a/java/spi.java.hints/external/binaries-list
+++ b/ide/lexer.antlr4/nbproject/project.properties
@@ -14,4 +14,9 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-1A745B7EF012EA7B96D7D6F1FAE5AFAC11FCEE3D net.bytebuddy:byte-buddy:1.10.6
+
+is.autoload=true
+javac.compilerargs=-Xlint:unchecked
+javac.source=1.8
+spec.version.base=1.0.0
+
diff --git a/ide/lexer.antlr4/nbproject/project.xml b/ide/lexer.antlr4/nbproject/project.xml
new file mode 100644
index 0000000..9d9e528
--- /dev/null
+++ b/ide/lexer.antlr4/nbproject/project.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+            <code-name-base>org.netbeans.modules.lexer.antlr4</code-name-base>
+            <module-dependencies>
+                <dependency>
+                    <code-name-base>org.netbeans.libs.antlr4.runtime</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.netbeans.modules.lexer</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>2</release-version>
+                        <specification-version>1.81</specification-version>
+                    </run-dependency>
+                </dependency>
+            </module-dependencies>
+            <test-dependencies>
+                <test-type>
+                    <name>unit</name>
+                    <test-dependency>
+                        <code-name-base>org.netbeans.libs.junit4</code-name-base>
+                        <compile-dependency/>
+                    </test-dependency>
+                </test-type>
+            </test-dependencies>
+            <public-packages>
+                <package>org.netbeans.spi.lexer.antlr4</package>
+            </public-packages>
+        </data>
+    </configuration>
+</project>
diff --git a/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AbstractAntlrLexerBridge.java b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AbstractAntlrLexerBridge.java
new file mode 100644
index 0000000..1fdf66a
--- /dev/null
+++ b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AbstractAntlrLexerBridge.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.spi.lexer.antlr4;
+
+import java.util.function.Function;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.CommonToken;
+import org.antlr.v4.runtime.misc.IntegerList;
+import org.netbeans.api.lexer.Token;
+import org.antlr.v4.runtime.Lexer;
+import static org.antlr.v4.runtime.Recognizer.EOF;
+import org.antlr.v4.runtime.TokenSource;
+import org.antlr.v4.runtime.misc.Interval;
+import org.antlr.v4.runtime.misc.Pair;
+import org.netbeans.api.lexer.TokenId;
+import org.netbeans.spi.lexer.LexerRestartInfo;
+import org.netbeans.spi.lexer.TokenFactory;
+
+/**
+ * Implementations of this class shall take an ANTLRv4 Lexer and map ANTLR tokens
+ * to NetBeans Lexer tokens.
+ *
+ * @author Laszlo Kishalmi
+ * @param <L> The ANTLR Lexer type
+ * @param <T> The NetBeans TokenId type
+ */
+public abstract class AbstractAntlrLexerBridge<L extends Lexer, T extends TokenId> implements org.netbeans.spi.lexer.Lexer<T> {
+
+    private final TokenFactory<T> tokenFactory;
+    protected final L lexer;
+    private final LexerInputCharStream input;
+
+    /**
+     * Constructor for the lexer bridge, usually used as:
+     * <pre>{@code
+     * public SomeLexer(LexerRestartInfo<SomeTokenId> info) {
+     *     super(info, SomeANTLRLexer::new);
+     * }
+     * }
+     * </pre>
+     * @param info  The lexer restart info
+     * @param lexerCreator A function to create an ANTLR from a {@code CharSteram}.
+     */
+    @SuppressWarnings("unchecked")
+    public AbstractAntlrLexerBridge(LexerRestartInfo<T> info, Function<CharStream, L> lexerCreator) {
+        this.tokenFactory = info.tokenFactory();
+        this.input = new LexerInputCharStream(info.input());
+        this.lexer = lexerCreator.apply(input);
+        lexer.setTokenFactory(FIXED_TOKEN_FACTORY);
+
+        if (info.state() != null) {
+            ((LexerState<L>) info.state()).restore(lexer);
+        }
+        input.markToken();
+    }
+
+
+    private org.antlr.v4.runtime.Token preFetchedToken = null;
+
+    @Override
+    public final Token<T> nextToken() {
+        org.antlr.v4.runtime.Token nextToken;
+        if (preFetchedToken != null) {
+            nextToken = preFetchedToken;
+            input.seek(preFetchedToken.getStopIndex() + 1);
+            preFetchedToken = null;
+        } else {
+            nextToken = nextRealToken();
+        }
+        return nextToken.getType() != EOF ? mapToken(nextToken) : null;
+    }
+
+    /**
+     * Implementations shall provide a suitable mapping between ANTLR lexer
+     * tokens and NetBeans lexer tokens. The mapping is usually many to one,
+     * could be implemented as:
+     * <pre>{@code
+     * switch (antlrToken.getType()) {
+     *      case DOC_COMMENT:
+     *      case BLOCK_COMMENT:
+     *      case LINE_COMMENT:
+     *          return token(SomeTokenId.COMMENT);
+*
+     *      case STRING_CHAR:
+     *          return groupToken(SomeTokenId.STRING);
+     *      default:
+     *          return token(SomeTokenId.ERROR);
+     *  }
+     * }</pre>
+     * @param antlrToken the token from the ANTLR Lexer
+     *
+     * @return a NetBeans lexer token.
+     */
+    protected abstract Token<T> mapToken(org.antlr.v4.runtime.Token antlrToken);
+
+    @Override
+    /**
+     * This method can be overridden, if some resource cleanup is needed when
+     * the lexer is no longer in use. Usually not required for ANTLR lexers.
+     */
+    public void release() {
+    }
+
+    @Override
+    public Object state() {
+        return new LexerState<>(lexer);
+    }
+
+    /**
+     * Some grammars provide big chunks of the same token. It is recommended to
+     * group those tokens together in one Token for the editor for performance
+     * reasons.
+     *
+     * @param id the NetBeans TokenId of the returned token.
+     * @param antlrTokenType the ANTLR token type to be collected till found.
+     *
+     * @return one lexer token, that represents several ANTLR tokens.
+     */
+    protected final Token<T> groupToken(T id, int antlrTokenType) {
+        preFetchedToken = nextRealToken();
+        while (preFetchedToken.getType() == antlrTokenType) {
+            preFetchedToken = nextRealToken();
+        }
+        input.seek(preFetchedToken.getStartIndex());
+        return token(id);
+    }
+    
+    protected final Token<T> token(T id) {
+        input.markToken();
+        return tokenFactory.createToken(id);
+    }
+
+    private org.antlr.v4.runtime.Token nextRealToken() {
+        int index = input.index();
+        org.antlr.v4.runtime.Token ret = lexer.nextToken();
+        // Filtering out pseudo tokens
+        while ((ret.getType() != EOF) && (index == input.index())) {
+            ret = lexer.nextToken();
+        }
+        return ret;
+    }
+
+    /**
+     * This class can save and restore the internal state of a basic ANTLR Lexer.
+     * Some grammars has additional state information, for those this class
+     * needs to be extended, and the {@link #state()} method has to be
+     * overridden.
+     *
+     * @param <L> The ANTLR Lexer, that state is to be kept.
+     */
+    public static class LexerState<L extends Lexer> {
+        final int state;
+        final int mode;
+        final IntegerList modes;
+
+        public LexerState(L lexer) {
+            this.state= lexer.getState();
+
+            this.mode = lexer._mode;
+            this.modes = new IntegerList(lexer._modeStack);
+        }
+
+        public void restore(L lexer) {
+            lexer.setState(state);
+            lexer._modeStack.addAll(modes);
+            lexer._mode = mode;
+        }
+
+        @Override
+        public String toString() {
+            return String.valueOf(state);
+        }
+    }
+
+    private static final org.antlr.v4.runtime.TokenFactory<FixedToken> FIXED_TOKEN_FACTORY = new org.antlr.v4.runtime.TokenFactory<FixedToken>() {
+        @Override
+        public FixedToken create(Pair<TokenSource, CharStream> source, int type, String text, 
+                int channel, int start, int stop, int line, int charPositionInLine) {
+
+            FixedToken token = new FixedToken(source, type, channel, start, stop);
+            token.setLine(line);
+            token.setCharPositionInLine(charPositionInLine);
+            token.setText(text);
+            return token;
+        }
+
+        @Override
+        public FixedToken create(int type, String text) {
+            return new FixedToken(type, text);
+        }
+
+    };
+
+    private static final class FixedToken extends CommonToken {
+
+        public FixedToken(Pair<TokenSource, CharStream> source, int type, int channel, int start, int stop) {
+            super(source, type, channel, start, stop);
+        }
+
+        public FixedToken(int type, String text) {
+            super(type, text);
+        }
+
+	@Override
+        public String getText() {
+            if (text != null ) {
+                return text;
+            }
+
+            CharStream input = getInputStream();
+            if (input != null ) {
+                // The original implementation in CommonToken does not honor the
+                // contract with UnsupportedOperationException on CharStream.size()
+                // and CharStream.getText which renders CommonToken broken on
+                // getText() calls. That makes toString() unusable when using
+                // LexerInputCharStream as well.
+                //
+                // While the stream size is unknown, and the getText() is somewhat
+                // limited in the LexerInputCharStream implementation. There is
+                // a good chance that the following call would go through.
+                try {
+                    return input.getText(Interval.of(start, stop));
+                } catch (UnsupportedOperationException ex) {
+                    // The original implementation returns "<EOF>" when EOF
+                    // is reached. As the situation here is not really known
+                    // returning an "<N/A>" looks as good as "<EOF>"
+                    return "<N/A>";
+                }
+            }
+            return null;
+        }
+    }
+}
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequence.java
similarity index 63%
rename from java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java
rename to ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequence.java
index 785f1ea..cf7eb00 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java
+++ b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequence.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.languages.antlr;
+package org.netbeans.spi.lexer.antlr4;
 
 import java.util.ArrayList;
 import java.util.ListIterator;
@@ -28,6 +28,8 @@
 import org.antlr.v4.runtime.TokenSource;
 
 /**
+ * This class provides sequential cursor based access to ANTLR Lexer tokens.
+ * The cursor can be sought in the input stream.
  *
  * @author lkishalmi
  */
@@ -41,8 +43,10 @@
     
     private final ArrayList<Token> tokenList = new ArrayList<>(200);
 
+    /** Predicate constant to select tokens on the DEFAULT_CHANNEL */
     public static final Predicate<Token> DEFAULT_CHANNEL = new ChannelFilter(Lexer.DEFAULT_TOKEN_CHANNEL);
-    
+
+    /** Predicate class to filter tokens by a selected channel */
     public static final class ChannelFilter implements Predicate<Token> {
         private final int channel;
 
@@ -55,12 +59,24 @@
             return channel == t.getChannel();
         }
     }
-    
+
+    /**
+     * Creates a AntlrTokenSequence over the provided TokenSource (Lexer)
+     *
+     * @param tokens the token source to be read.
+     */
     public AntlrTokenSequence(TokenSource tokens) {
         this.tokens = tokens;
         this.cursor = tokenList.listIterator();
     }
-    
+
+    /**
+     * Seeks the cursor to an offset in the input stream. If the offset is
+     * inside a token, then the {@linkplain #next()} method would return the
+     * token which contains the offset.
+     *
+     * @param offset the position in the lexer input stream to seek to.
+     */
     public void seekTo(int offset) {
         if (offset > readIndex) {
             if (cursor.hasNext()) {
@@ -85,16 +101,26 @@
                 }
                 
             } else {
-                previous((t) -> t.getStartIndex() > offset);
+                previous((t) -> t.getStartIndex() < offset);
             }
         }
         
     }
-    
+
+    /**
+     * Returns {@code true} if the lexer stream is empty.
+     *
+     * @return {@code true} if the lexer stream is empty.
+     */
     public boolean isEmpty() {
         return tokenList.isEmpty() && !hasNext();
     }
     
+    /**
+     * Returns {@code true} if there is a token to read after the cursor.
+     *
+     * @return {@code true} if there is a token to read after the cursor.
+     */
     public boolean hasNext() {
         if (!eofRead && (cursorOffset == readIndex) && !cursor.hasNext()) {
             Token t = read();
@@ -105,14 +131,31 @@
         return !(eofRead && !cursor.hasNext());
     }
     
+    /**
+     * Returns {@code true} if there is a token to read before the cursor.
+     *
+     * @return {@code true} if there is a token to read before the cursor.
+     */
     public boolean hasPrevious() {
         return cursor.hasPrevious();
     }
-    
+
+    /**
+     * Returns the offset of the cursor. It always returns index on token
+     * boundary.
+     *
+     * @return the offset of the cursor.
+     */
     public int getOffset() {
         return cursorOffset;
     }
-    
+
+    /**
+     * Returns the token before the cursor if there is one. It also moves the
+     * cursor left by one.
+     *
+     * @return the token before the cursor.
+     */
     public Optional<Token> previous() {
         Optional<Token> ret = cursor.hasPrevious() ? Optional.of(cursor.previous()) : Optional.empty();
         cursorOffset = cursor.hasPrevious() ? ret.get().getStartIndex() : 0;
@@ -120,6 +163,13 @@
         
     }
     
+    /**
+     * Returns the token before the cursor that satisfies the provided predicate
+     * condition. It also moves the cursor at the start of the returned token.
+     *
+     * @param filter the predicate to satisfy.
+     * @return the token before the cursor.
+     */
     public Optional<Token> previous(Predicate<Token> filter) {
         Optional<Token> ot = previous();
         while (ot.isPresent() && !filter.test(ot.get())) {
@@ -128,10 +178,23 @@
         return ot;
     }
     
+    /**
+     * Returns the token before the cursor that matches the provided token type.
+     * It also moves the cursor at the start of the returned token.
+     *
+     * @param tokenType the searched token type
+     * @return the token before the cursor.
+     */
     public Optional<Token> previous(int tokenType){
         return previous((Token t) -> t.getType() == tokenType);
     }
     
+    /**
+     * Returns the token after the cursor if there is one. It also moves the
+     * cursor right by one.
+     *
+     * @return the token after the cursor.
+     */
     public Optional<Token> next() {
         if (hasNext()) {
             Token t = cursor.next();
@@ -142,6 +205,13 @@
         }
     }
     
+    /**
+     * Returns the token after the cursor that satisfies the provided predicate
+     * condition. It also moves the cursor at the end of the returned token.
+     *
+     * @param filter the predicate to satisfy.
+     * @return the token after the cursor.
+     */
     public Optional<Token> next(Predicate<Token> filter) {
         Optional<Token> ot = next();
         while (ot.isPresent() && !filter.test(ot.get())) {
@@ -150,6 +220,13 @@
         return ot;
     }
     
+    /**
+     * Returns the token after the cursor that matches the provided token type.
+     * It also moves the cursor at the end of the returned token.
+     *
+     * @param tokenType the searched token type
+     * @return the token after the cursor.
+     */
     public Optional<Token> next(int tokenType){
         return next((Token t) -> t.getType() == tokenType);
     }
diff --git a/nbbuild/travis/hide-logs.sh b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/Bundle.properties
old mode 100755
new mode 100644
similarity index 71%
copy from nbbuild/travis/hide-logs.sh
copy to ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/Bundle.properties
index b0030f5..bf38471
--- a/nbbuild/travis/hide-logs.sh
+++ b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/Bundle.properties
@@ -1,5 +1,3 @@
-#!/bin/bash
-
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -17,12 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 
-"$@" > "/tmp/command_log.txt" 2>&1
+OpenIDE-Module-Name=ANTLR4 Lexer Support
+OpenIDE-Module-Display-Category=Editing
+OpenIDE-Module-Short-Description=Provides Utility classes for ANTLR4 Lexer Integration
+OpenIDE-Module-Long-Description=This module provides some utility classes \
+that make an ANTLR4 based Lexer easier to integrate in the IDE.
 
-RESULT=$?
-
-if [ $RESULT -ne 0 ] ; then
-    echo "$(</tmp/command_log.txt)"
-fi
-
-exit $RESULT
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/LexerInputCharStream.java
similarity index 92%
rename from java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java
rename to ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/LexerInputCharStream.java
index e289246..2f782bb 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java
+++ b/ide/lexer.antlr4/src/org/netbeans/spi/lexer/antlr4/LexerInputCharStream.java
@@ -16,17 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.languages.antlr;
+package org.netbeans.spi.lexer.antlr4;
 
 import org.antlr.v4.runtime.CharStream;
+import static org.antlr.v4.runtime.IntStream.UNKNOWN_SOURCE_NAME;
 import org.antlr.v4.runtime.misc.Interval;
 import org.netbeans.spi.lexer.*;
 
 /**
+ * An ANTLR4 CharSteam implementation over NetBeans LexerInput.
  *
- * @author lkishalmi
+ * @author Laszlo Kishalmi
  */
-public class LexerInputCharStream implements CharStream {
+final class LexerInputCharStream implements CharStream {
     private final LexerInput input;
 
     private int tokenMark = Integer.MAX_VALUE;
diff --git a/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.g4 b/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.g4
new file mode 100644
index 0000000..7f4e0ff
--- /dev/null
+++ b/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.g4
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+lexer grammar DummyLexer;
+
+@header{
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+package org.antlr.grammars.dummy;
+
+}
+channels {COMMENT}
+BLOCK_COMMENT
+    : '/*' .*? ('*/' | EOF) -> channel(COMMENT)
+    ;
+
+WS
+    : [ \t\r\n]+ -> channel(HIDDEN)
+    ;
+
+// Let's have a keyword
+LEXER
+    : 'lexer'
+    ;
+
+// Cover some random text
+ID
+    : [a-zA-Z0-9\\.-]+
+    ;
+
+ERROR
+    : '.' -> skip
+    ;
\ No newline at end of file
diff --git a/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.java b/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.java
new file mode 100644
index 0000000..a0071db
--- /dev/null
+++ b/ide/lexer.antlr4/test/unit/src/org/antlr/grammars/dummy/DummyLexer.java
@@ -0,0 +1,175 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+// DO NOT EDIT THIS FILE MANUALLY!
+// SEE build.xml FOR INSTRUCTIONS
+package org.antlr.grammars.dummy;
+
+
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
+public class DummyLexer extends Lexer {
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		BLOCK_COMMENT=1, WS=2, LEXER=3, ID=4, ERROR=5;
+	public static final int
+		COMMENT=2;
+	public static String[] channelNames = {
+		"DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT"
+	};
+
+	public static String[] modeNames = {
+		"DEFAULT_MODE"
+	};
+
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"BLOCK_COMMENT", "WS", "LEXER", "ID", "ERROR"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
+
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, null, null, "'lexer'", null, "'.'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, "BLOCK_COMMENT", "WS", "LEXER", "ID", "ERROR"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+
+	public DummyLexer(CharStream input) {
+		super(input);
+		_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	@Override
+	public String getGrammarFileName() { return "DummyLexer.g4"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public String[] getChannelNames() { return channelNames; }
+
+	@Override
+	public String[] getModeNames() { return modeNames; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public static final String _serializedATN =
+		"\u0004\u0000\u00051\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
+		"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
+		"\u0007\u0004\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0005\u0000"+
+		"\u0010\b\u0000\n\u0000\f\u0000\u0013\t\u0000\u0001\u0000\u0001\u0000\u0001"+
+		"\u0000\u0003\u0000\u0018\b\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0004"+
+		"\u0001\u001d\b\u0001\u000b\u0001\f\u0001\u001e\u0001\u0001\u0001\u0001"+
+		"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
+		"\u0001\u0003\u0004\u0003*\b\u0003\u000b\u0003\f\u0003+\u0001\u0004\u0001"+
+		"\u0004\u0001\u0004\u0001\u0004\u0001\u0011\u0000\u0005\u0001\u0001\u0003"+
+		"\u0002\u0005\u0003\u0007\u0004\t\u0005\u0001\u0000\u0002\u0003\u0000\t"+
+		"\n\r\r  \u0005\u0000-.09AZ\\\\az4\u0000\u0001\u0001\u0000\u0000\u0000"+
+		"\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000"+
+		"\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0001"+
+		"\u000b\u0001\u0000\u0000\u0000\u0003\u001c\u0001\u0000\u0000\u0000\u0005"+
+		"\"\u0001\u0000\u0000\u0000\u0007)\u0001\u0000\u0000\u0000\t-\u0001\u0000"+
+		"\u0000\u0000\u000b\f\u0005/\u0000\u0000\f\r\u0005*\u0000\u0000\r\u0011"+
+		"\u0001\u0000\u0000\u0000\u000e\u0010\t\u0000\u0000\u0000\u000f\u000e\u0001"+
+		"\u0000\u0000\u0000\u0010\u0013\u0001\u0000\u0000\u0000\u0011\u0012\u0001"+
+		"\u0000\u0000\u0000\u0011\u000f\u0001\u0000\u0000\u0000\u0012\u0017\u0001"+
+		"\u0000\u0000\u0000\u0013\u0011\u0001\u0000\u0000\u0000\u0014\u0015\u0005"+
+		"*\u0000\u0000\u0015\u0018\u0005/\u0000\u0000\u0016\u0018\u0005\u0000\u0000"+
+		"\u0001\u0017\u0014\u0001\u0000\u0000\u0000\u0017\u0016\u0001\u0000\u0000"+
+		"\u0000\u0018\u0019\u0001\u0000\u0000\u0000\u0019\u001a\u0006\u0000\u0000"+
+		"\u0000\u001a\u0002\u0001\u0000\u0000\u0000\u001b\u001d\u0007\u0000\u0000"+
+		"\u0000\u001c\u001b\u0001\u0000\u0000\u0000\u001d\u001e\u0001\u0000\u0000"+
+		"\u0000\u001e\u001c\u0001\u0000\u0000\u0000\u001e\u001f\u0001\u0000\u0000"+
+		"\u0000\u001f \u0001\u0000\u0000\u0000 !\u0006\u0001\u0001\u0000!\u0004"+
+		"\u0001\u0000\u0000\u0000\"#\u0005l\u0000\u0000#$\u0005e\u0000\u0000$%"+
+		"\u0005x\u0000\u0000%&\u0005e\u0000\u0000&\'\u0005r\u0000\u0000\'\u0006"+
+		"\u0001\u0000\u0000\u0000(*\u0007\u0001\u0000\u0000)(\u0001\u0000\u0000"+
+		"\u0000*+\u0001\u0000\u0000\u0000+)\u0001\u0000\u0000\u0000+,\u0001\u0000"+
+		"\u0000\u0000,\b\u0001\u0000\u0000\u0000-.\u0005.\u0000\u0000./\u0001\u0000"+
+		"\u0000\u0000/0\u0006\u0004\u0002\u00000\n\u0001\u0000\u0000\u0000\u0005"+
+		"\u0000\u0011\u0017\u001e+\u0003\u0000\u0002\u0000\u0000\u0001\u0000\u0006"+
+		"\u0000\u0000";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}
\ No newline at end of file
diff --git a/java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java b/ide/lexer.antlr4/test/unit/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequenceTest.java
similarity index 89%
rename from java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java
rename to ide/lexer.antlr4/test/unit/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequenceTest.java
index 1e3f775..c3c9f67 100644
--- a/java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java
+++ b/ide/lexer.antlr4/test/unit/src/org/netbeans/spi/lexer/antlr4/AntlrTokenSequenceTest.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.languages.antlr;
+package org.netbeans.spi.lexer.antlr4;
 
-import org.antlr.parser.antlr4.ANTLRv4Lexer;
+import org.antlr.grammars.dummy.DummyLexer;
 import org.antlr.v4.runtime.CharStreams;
 import org.junit.Test;
-
 import static org.junit.Assert.*;
-import static org.netbeans.modules.languages.antlr.AntlrTokenSequence.DEFAULT_CHANNEL;
+import static org.netbeans.spi.lexer.antlr4.AntlrTokenSequence.DEFAULT_CHANNEL;
+
 /**
  *
- * @author lkishalmi
+ * @author Laszlo Kishalmi
  */
 public class AntlrTokenSequenceTest {
-    
+
     public AntlrTokenSequenceTest() {
     }
-    
+
     /**
      * Test of seekTo method, of class AntlrTokenSequence.
      */
@@ -49,7 +49,7 @@
     public void testSeekTo2() {
         System.out.println("seekTo");
         int offset = 0;
-        AntlrTokenSequence instance = sequence("/**/");
+        AntlrTokenSequence instance = sequence("# Properties");
         instance.seekTo(offset);
         assertFalse(instance.isEmpty());
         assertTrue(instance.next().isPresent());
@@ -139,9 +139,9 @@
     @Test
     public void testGetOffset1() {
         AntlrTokenSequence instance = sequence("/* */lexer");
-        instance.seekTo(7);
+        instance.seekTo("/* */le".length());
         assertTrue(instance.hasNext());
-        assertEquals(5, instance.getOffset());
+        assertEquals("/* */".length(), instance.getOffset());
         instance.previous();
         assertEquals(0, instance.getOffset());
     }
@@ -152,7 +152,7 @@
         assertTrue(instance.hasNext());
         instance.next(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("lexer", t.getText()));
         instance.next(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("grammar", t.getText()));
-        assertFalse(instance.hasNext());        
+        assertFalse(instance.hasNext());
     }
 
     @Test
@@ -162,10 +162,10 @@
         assertFalse(instance.hasNext());
         instance.previous(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("grammar", t.getText()));
         instance.previous(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("lexer", t.getText()));
-        assertTrue(instance.hasPrevious());        
+        assertTrue(instance.hasPrevious());
     }
 
     private AntlrTokenSequence sequence(String s) {
-        return new AntlrTokenSequence(new ANTLRv4Lexer(CharStreams.fromString(s)));
+        return new AntlrTokenSequence(new DummyLexer(CharStreams.fromString(s)));
     }
 }
diff --git a/ide/lexer/nbproject/org-netbeans-modules-lexer.sig b/ide/lexer/nbproject/org-netbeans-modules-lexer.sig
index 9d1ab40..027796c 100644
--- a/ide/lexer/nbproject/org-netbeans-modules-lexer.sig
+++ b/ide/lexer/nbproject/org-netbeans-modules-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.80.0
+#Version 1.81.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/lexer/src/org/netbeans/spi/lexer/TokenFactory.java b/ide/lexer/src/org/netbeans/spi/lexer/TokenFactory.java
index 0facdbe..4af348e 100644
--- a/ide/lexer/src/org/netbeans/spi/lexer/TokenFactory.java
+++ b/ide/lexer/src/org/netbeans/spi/lexer/TokenFactory.java
@@ -46,6 +46,7 @@
      *
      * @deprecated Use {@link #isSkipToken(Token)} instead.
      */
+    @Deprecated
     public static final Token SKIP_TOKEN = LexerUtilsConstants.SKIP_TOKEN;
     
     private final LexerInputOperation<T> operation;
@@ -201,6 +202,7 @@
      * @deprecated This method is deprecated without replacement - see description
      *  how a similar effect can be obtained.
      */
+    @Deprecated
     public Token<T> createCustomTextToken(T id, CharSequence text, int length, PartType partType) {
         if (partType != null) {
             throw new IllegalArgumentException("This method is deprecated and it should" + 
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/inc/TokenListUpdaterTest.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/inc/TokenListUpdaterTest.java
index 66267b2..1d96012 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/inc/TokenListUpdaterTest.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/inc/TokenListUpdaterTest.java
@@ -58,7 +58,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void testInsertUnfinishedLexing() throws Exception {
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinMixTest.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinMixTest.java
index ca11621..ee9cb14 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinMixTest.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinMixTest.java
@@ -54,7 +54,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void testMixedSectionsForward() throws Exception {
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinRandomTest.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinRandomTest.java
index 6fc8ea7..7fd1c2c 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinRandomTest.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinRandomTest.java
@@ -51,7 +51,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void testRandom() throws Exception {
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinSectionsMod1Test.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinSectionsMod1Test.java
index abc6a54..c4a507b 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinSectionsMod1Test.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/join/JoinSectionsMod1Test.java
@@ -61,7 +61,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void testRemoveContent() throws Exception {
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerIncTest.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerIncTest.java
index 1baff30..029c252 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerIncTest.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerIncTest.java
@@ -65,7 +65,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void test() throws Exception {
diff --git a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerRandomTest.java b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerRandomTest.java
index e6cca2f..6164713 100644
--- a/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerRandomTest.java
+++ b/ide/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexerRandomTest.java
@@ -59,7 +59,7 @@
     @Override
     protected Level logLevel() {
         return Level.INFO;
-//        return super.logLevel();;
+//        return super.logLevel();
     }
 
     public void testRandom() throws Exception {
diff --git a/ide/lib.terminalemulator/nbproject/org-netbeans-lib-terminalemulator.sig b/ide/lib.terminalemulator/nbproject/org-netbeans-lib-terminalemulator.sig
index c8f4b47..f69e330 100644
--- a/ide/lib.terminalemulator/nbproject/org-netbeans-lib-terminalemulator.sig
+++ b/ide/lib.terminalemulator/nbproject/org-netbeans-lib-terminalemulator.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54
+#Version 1.55
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/libs.antlr3.runtime/nbproject/org-netbeans-libs-antlr3-runtime.sig b/ide/libs.antlr3.runtime/nbproject/org-netbeans-libs-antlr3-runtime.sig
index 586ef51..c3eeffd 100644
--- a/ide/libs.antlr3.runtime/nbproject/org-netbeans-libs-antlr3-runtime.sig
+++ b/ide/libs.antlr3.runtime/nbproject/org-netbeans-libs-antlr3-runtime.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.38.0
+#Version 1.39.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.antlr3.runtime/nbproject/project.properties b/ide/libs.antlr3.runtime/nbproject/project.properties
index eee9091..3857ba4 100644
--- a/ide/libs.antlr3.runtime/nbproject/project.properties
+++ b/ide/libs.antlr3.runtime/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 release.external/antlr-runtime-3.5.2.jar=modules/ext/antlr-runtime-3.5.2.jar
 
 license.file=../external/antlr-3.5.2-license.txt
diff --git a/ide/libs.antlr4.runtime/external/antlr4-runtime-4.11.1-license.txt b/ide/libs.antlr4.runtime/external/antlr4-runtime-4.11.1-license.txt
new file mode 100644
index 0000000..842d642
--- /dev/null
+++ b/ide/libs.antlr4.runtime/external/antlr4-runtime-4.11.1-license.txt
@@ -0,0 +1,39 @@
+Name: Antlr
+Description: ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions.
+Version: 4.11.1
+License: BSD-antlr-runtime4-2
+Origin: Antlr
+URL: https://www.antlr.org
+Files: antlr4-runtime-4.11.1.jar, antlr4-4.11.1.jar, ST4-4.3.4.jar
+
+Use of Antlr version 4.11.1 is governed by the terms of the license below:
+
+ [The "BSD license"]
+Copyright (c) 2012-2022 The ANTLR Project. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. Neither name of copyright holders nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/ide/libs.antlr4.runtime/external/antlr4-runtime-4.7.2-license.txt b/ide/libs.antlr4.runtime/external/antlr4-runtime-4.7.2-license.txt
deleted file mode 100644
index 8a2f197..0000000
--- a/ide/libs.antlr4.runtime/external/antlr4-runtime-4.7.2-license.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-Name: Antlr
-Description: ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions.
-Version: 4.7.2
-License: BSD-antlr-runtime4
-Origin: Antlr
-URL: https://www.antlr.org
-Files: antlr4-runtime-4.7.2.jar, antlr4-4.7.2.jar, ST4-4.1.jar
-
-Use of Antlr version 4.7.2 is governed by the terms of the license below:
-
- [The "BSD license"]
-Copyright (c) 2015 Terence Parr, Sam Harwell
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
- 3. The name of the author may not be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/ide/libs.antlr4.runtime/external/binaries-list b/ide/libs.antlr4.runtime/external/binaries-list
index 1714789..03e3458 100644
--- a/ide/libs.antlr4.runtime/external/binaries-list
+++ b/ide/libs.antlr4.runtime/external/binaries-list
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-E27D8AB4F984F9D186F54DA984A6AB1CCCAC755E org.antlr:antlr4-runtime:4.7.2
-93058C41A6CBB7F5CA63EDAC837F42C002DBC556 org.antlr:antlr4:4.7.2
-467D508BE07A542AD0A68FFCAED2D561C5FB2E0C org.antlr:ST4:4.1
+069214C1DE1960040729702EB58DEAC8827135E7 org.antlr:antlr4-runtime:4.11.1
+844C603E04AB201B769849EE9D3CCE67BA7A1337 org.antlr:antlr4:4.11.1
+BF68D049DD4E6E104055A79AC3BF9E6307D29258 org.antlr:ST4:4.3.4
diff --git a/ide/libs.antlr4.runtime/manifest.mf b/ide/libs.antlr4.runtime/manifest.mf
index f4dd7e0..69471b2 100644
--- a/ide/libs.antlr4.runtime/manifest.mf
+++ b/ide/libs.antlr4.runtime/manifest.mf
@@ -1,5 +1,5 @@
 Manifest-Version: 1.0
-OpenIDE-Module: org.netbeans.libs.antlr4.runtime
+OpenIDE-Module: org.netbeans.libs.antlr4.runtime/2
 OpenIDE-Module-Implementation-Version: 1
 OpenIDE-Module-Localizing-Bundle: org/netbeans/libs/antlr4/runtime/Bundle.properties
 AutoUpdate-Show-In-Client: false
diff --git a/ide/libs.antlr4.runtime/nbproject/org-netbeans-libs-antlr4-runtime.sig b/ide/libs.antlr4.runtime/nbproject/org-netbeans-libs-antlr4-runtime.sig
index 42ca922..9d37372 100644
--- a/ide/libs.antlr4.runtime/nbproject/org-netbeans-libs-antlr4-runtime.sig
+++ b/ide/libs.antlr4.runtime/nbproject/org-netbeans-libs-antlr4-runtime.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.18.0
+#Version 1.19.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.antlr4.runtime/nbproject/project.properties b/ide/libs.antlr4.runtime/nbproject/project.properties
index 483157a..4b90a09 100644
--- a/ide/libs.antlr4.runtime/nbproject/project.properties
+++ b/ide/libs.antlr4.runtime/nbproject/project.properties
@@ -19,9 +19,9 @@
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
 javac.source=1.8
-release.external/antlr4-runtime-4.7.2.jar=modules/ext/antlr4-runtime-4.7.2.jar
+release.external/antlr4-runtime-4.11.1.jar=modules/ext/antlr4-runtime-4.11.1.jar
 
-license.file=../external/antlr4-runtime-4.7.2-license.txt
+license.file=../external/antlr4-runtime-4.11.1-license.txt
 nbm.homepage=https://www.antlr.org/
 sigtest.gen.fail.on.error=false
 spec.version.base=1.20.0
diff --git a/ide/libs.antlr4.runtime/nbproject/project.xml b/ide/libs.antlr4.runtime/nbproject/project.xml
index 64e4eb6..63e330e 100644
--- a/ide/libs.antlr4.runtime/nbproject/project.xml
+++ b/ide/libs.antlr4.runtime/nbproject/project.xml
@@ -33,8 +33,8 @@
                 <package>org.antlr.v4.runtime.tree</package>
             </public-packages>
             <class-path-extension>
-                <runtime-relative-path>ext/antlr4-runtime-4.7.2.jar</runtime-relative-path>
-                <binary-origin>external/antlr4-runtime-4.7.2.jar</binary-origin>
+                <runtime-relative-path>ext/antlr4-runtime-4.11.1.jar</runtime-relative-path>
+                <binary-origin>external/antlr4-runtime-4.11.1.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/ide/libs.commons_compress/nbproject/org-netbeans-libs-commons_compress.sig b/ide/libs.commons_compress/nbproject/org-netbeans-libs-commons_compress.sig
index 4c64f1c..f701c6c 100644
--- a/ide/libs.commons_compress/nbproject/org-netbeans-libs-commons_compress.sig
+++ b/ide/libs.commons_compress/nbproject/org-netbeans-libs-commons_compress.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.23.0
+#Version 0.24.0
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/libs.commons_net/nbproject/org-netbeans-libs-commons_net.sig b/ide/libs.commons_net/nbproject/org-netbeans-libs-commons_net.sig
index 0253817..9290b38 100644
--- a/ide/libs.commons_net/nbproject/org-netbeans-libs-commons_net.sig
+++ b/ide/libs.commons_net/nbproject/org-netbeans-libs-commons_net.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.39.0
+#Version 2.40.0
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/ide/libs.flexmark/nbproject/org-netbeans-libs-flexmark.sig b/ide/libs.flexmark/nbproject/org-netbeans-libs-flexmark.sig
index 3813264..b780f39 100644
--- a/ide/libs.flexmark/nbproject/org-netbeans-libs-flexmark.sig
+++ b/ide/libs.flexmark/nbproject/org-netbeans-libs-flexmark.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.10
+#Version 1.11
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/ide/libs.flexmark/nbproject/project.properties b/ide/libs.flexmark/nbproject/project.properties
index 86ef0b0..a5b33b7 100644
--- a/ide/libs.flexmark/nbproject/project.properties
+++ b/ide/libs.flexmark/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 release.external/flexmark-0.50.36.jar=modules/ext/flexmark-0.50.36.jar
 release.external/flexmark-html2md-converter-0.50.36.jar=modules/ext/flexmark-html2md-converter-0.50.36.jar
diff --git a/ide/libs.freemarker/nbproject/project.properties b/ide/libs.freemarker/nbproject/project.properties
index a3f8081..3a1fd50 100644
--- a/ide/libs.freemarker/nbproject/project.properties
+++ b/ide/libs.freemarker/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 release.external/freemarker-2.3.30.jar=modules/ext/freemarker-2.3.30.jar
 module.jar.verifylinkageignores=freemarker.((ext.ant.FreemarkerXmlTask)|(template.DefaultObjectWrapper))
 spec.version.base=2.53.0
diff --git a/ide/libs.git/nbproject/org-netbeans-libs-git.sig b/ide/libs.git/nbproject/org-netbeans-libs-git.sig
index 36b84f9..b133be1 100644
--- a/ide/libs.git/nbproject/org-netbeans-libs-git.sig
+++ b/ide/libs.git/nbproject/org-netbeans-libs-git.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51
+#Version 1.52
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.graalsdk/nbproject/org-netbeans-libs-graalsdk.sig b/ide/libs.graalsdk/nbproject/org-netbeans-libs-graalsdk.sig
index af3d66c..f5ac224 100644
--- a/ide/libs.graalsdk/nbproject/org-netbeans-libs-graalsdk.sig
+++ b/ide/libs.graalsdk/nbproject/org-netbeans-libs-graalsdk.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.ini4j/nbproject/org-netbeans-libs-ini4j.sig b/ide/libs.ini4j/nbproject/org-netbeans-libs-ini4j.sig
index b3b2aaa..7c3cb2c 100644
--- a/ide/libs.ini4j/nbproject/org-netbeans-libs-ini4j.sig
+++ b/ide/libs.ini4j/nbproject/org-netbeans-libs-ini4j.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51
+#Version 1.52
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/ide/libs.jaxb/nbproject/org-netbeans-libs-jaxb.sig b/ide/libs.jaxb/nbproject/org-netbeans-libs-jaxb.sig
index d94d6e0..0a38283 100644
--- a/ide/libs.jaxb/nbproject/org-netbeans-libs-jaxb.sig
+++ b/ide/libs.jaxb/nbproject/org-netbeans-libs-jaxb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public final com.sun.codemodel.ClassType
 fld public final static com.sun.codemodel.ClassType ANNOTATION_TYPE_DECL
diff --git a/ide/libs.jcodings/nbproject/org-netbeans-libs-jcodings.sig b/ide/libs.jcodings/nbproject/org-netbeans-libs-jcodings.sig
index eaa058b..1977bd2 100644
--- a/ide/libs.jcodings/nbproject/org-netbeans-libs-jcodings.sig
+++ b/ide/libs.jcodings/nbproject/org-netbeans-libs-jcodings.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.6
+#Version 0.7
 
 CLSS public abstract interface java.lang.Cloneable
 
diff --git a/ide/libs.jsch.agentproxy/nbproject/org-netbeans-libs-jsch-agentproxy.sig b/ide/libs.jsch.agentproxy/nbproject/org-netbeans-libs-jsch-agentproxy.sig
index 8d1f33c..539ccd3 100644
--- a/ide/libs.jsch.agentproxy/nbproject/org-netbeans-libs-jsch-agentproxy.sig
+++ b/ide/libs.jsch.agentproxy/nbproject/org-netbeans-libs-jsch-agentproxy.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.1
+#Version 1.2
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.json_simple/nbproject/org-netbeans-libs-json_simple.sig b/ide/libs.json_simple/nbproject/org-netbeans-libs-json_simple.sig
index 9d89812..2f473ab 100644
--- a/ide/libs.json_simple/nbproject/org-netbeans-libs-json_simple.sig
+++ b/ide/libs.json_simple/nbproject/org-netbeans-libs-json_simple.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.29
+#Version 0.30
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/libs.lucene/nbproject/org-netbeans-libs-lucene.sig b/ide/libs.lucene/nbproject/org-netbeans-libs-lucene.sig
index fffc446..e51fae3 100644
--- a/ide/libs.lucene/nbproject/org-netbeans-libs-lucene.sig
+++ b/ide/libs.lucene/nbproject/org-netbeans-libs-lucene.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 3.36
+#Version 3.37
 
diff --git a/ide/libs.snakeyaml_engine/nbproject/org-netbeans-libs-snakeyaml_engine.sig b/ide/libs.snakeyaml_engine/nbproject/org-netbeans-libs-snakeyaml_engine.sig
index 254e70b..859b554 100644
--- a/ide/libs.snakeyaml_engine/nbproject/org-netbeans-libs-snakeyaml_engine.sig
+++ b/ide/libs.snakeyaml_engine/nbproject/org-netbeans-libs-snakeyaml_engine.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 2.6
+#Version 2.7
 
diff --git a/ide/libs.svnClientAdapter.javahl/nbproject/project.properties b/ide/libs.svnClientAdapter.javahl/nbproject/project.properties
index 51c4a3f..8d8baf9 100644
--- a/ide/libs.svnClientAdapter.javahl/nbproject/project.properties
+++ b/ide/libs.svnClientAdapter.javahl/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 release.external/adapter-javahl-1.14.0.jar=modules/ext/adapter-javahl.jar
 release.external/javahl-1.14.0.jar=modules/ext/javahl.jar
 
diff --git a/ide/libs.svnClientAdapter/nbproject/org-netbeans-libs-svnClientAdapter.sig b/ide/libs.svnClientAdapter/nbproject/org-netbeans-libs-svnClientAdapter.sig
index d62e34c..5a5babf 100644
--- a/ide/libs.svnClientAdapter/nbproject/org-netbeans-libs-svnClientAdapter.sig
+++ b/ide/libs.svnClientAdapter/nbproject/org-netbeans-libs-svnClientAdapter.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57
+#Version 1.58
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/libs.tomlj/external/binaries-list b/ide/libs.tomlj/external/binaries-list
index 0d65e1a..df67816 100644
--- a/ide/libs.tomlj/external/binaries-list
+++ b/ide/libs.tomlj/external/binaries-list
@@ -14,4 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-D1922FB5E672E04D8E8D8DAC0B058B1897E6E940 org.tomlj:tomlj:1.0.0
+8B3AAD16EA96BA9B22C1C8E77820CBC901B19C05 org.tomlj:tomlj:1.1.0
diff --git a/ide/libs.tomlj/external/tomlj-1.0.0-license.txt b/ide/libs.tomlj/external/tomlj-1.1.0-license.txt
similarity index 99%
rename from ide/libs.tomlj/external/tomlj-1.0.0-license.txt
rename to ide/libs.tomlj/external/tomlj-1.1.0-license.txt
index 70bf4d6..1ad316d 100644
--- a/ide/libs.tomlj/external/tomlj-1.0.0-license.txt
+++ b/ide/libs.tomlj/external/tomlj-1.1.0-license.txt
@@ -1,5 +1,5 @@
 Name: TOML parser in Java
-Version: 1.0.0
+Version: 1.1.0
 Description: A parser for Tom's Obvious, Minimal Language (TOML).
 License: Apache-2.0
 Origin: Apache Software Foundation
diff --git a/ide/libs.tomlj/manifest.mf b/ide/libs.tomlj/manifest.mf
index e1175d8..b2c3aff 100644
--- a/ide/libs.tomlj/manifest.mf
+++ b/ide/libs.tomlj/manifest.mf
@@ -1,3 +1,3 @@
-OpenIDE-Module: org.netbeans.libs.tomlj
+OpenIDE-Module: org.netbeans.libs.tomlj/1
 OpenIDE-Module-Localizing-Bundle: org/netbeans/libs/tomlj/Bundle.properties
 OpenIDE-Module-Specification-Version: 1.1
diff --git a/ide/libs.tomlj/nbproject/org-netbeans-libs-tomlj.sig b/ide/libs.tomlj/nbproject/org-netbeans-libs-tomlj.sig
new file mode 100644
index 0000000..d5e799d
--- /dev/null
+++ b/ide/libs.tomlj/nbproject/org-netbeans-libs-tomlj.sig
@@ -0,0 +1,176 @@
+#Signature file v4.1
+#Version 1.1
+
+CLSS public abstract interface java.io.Serializable
+
+CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object>
+meth public abstract int compareTo({java.lang.Comparable%0})
+
+CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
+cons protected init(java.lang.String,int)
+intf java.io.Serializable
+intf java.lang.Comparable<{java.lang.Enum%0}>
+meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
+meth protected final void finalize()
+meth public final boolean equals(java.lang.Object)
+meth public final int compareTo({java.lang.Enum%0})
+meth public final int hashCode()
+meth public final int ordinal()
+meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
+meth public final java.lang.String name()
+meth public java.lang.String toString()
+meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
+supr java.lang.Object
+
+CLSS public java.lang.Exception
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.Throwable
+
+CLSS public java.lang.Object
+cons public init()
+meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
+meth protected void finalize() throws java.lang.Throwable
+meth public boolean equals(java.lang.Object)
+meth public final java.lang.Class<?> getClass()
+meth public final void notify()
+meth public final void notifyAll()
+meth public final void wait() throws java.lang.InterruptedException
+meth public final void wait(long) throws java.lang.InterruptedException
+meth public final void wait(long,int) throws java.lang.InterruptedException
+meth public int hashCode()
+meth public java.lang.String toString()
+
+CLSS public java.lang.RuntimeException
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.Exception
+
+CLSS public java.lang.Throwable
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+intf java.io.Serializable
+meth public final java.lang.Throwable[] getSuppressed()
+meth public final void addSuppressed(java.lang.Throwable)
+meth public java.lang.StackTraceElement[] getStackTrace()
+meth public java.lang.String getLocalizedMessage()
+meth public java.lang.String getMessage()
+meth public java.lang.String toString()
+meth public java.lang.Throwable fillInStackTrace()
+meth public java.lang.Throwable getCause()
+meth public java.lang.Throwable initCause(java.lang.Throwable)
+meth public void printStackTrace()
+meth public void printStackTrace(java.io.PrintStream)
+meth public void printStackTrace(java.io.PrintWriter)
+meth public void setStackTrace(java.lang.StackTraceElement[])
+supr java.lang.Object
+
+CLSS public final !enum org.tomlj.JsonOptions
+fld public final static org.tomlj.JsonOptions ALL_VALUES_AS_STRINGS
+fld public final static org.tomlj.JsonOptions VALUES_AS_OBJECTS_WITH_TYPE
+meth public static org.tomlj.JsonOptions valueOf(java.lang.String)
+meth public static org.tomlj.JsonOptions[] values()
+supr java.lang.Enum<org.tomlj.JsonOptions>
+
+CLSS public final org.tomlj.Toml
+meth public static boolean equals(org.tomlj.TomlArray,org.tomlj.TomlArray)
+meth public static boolean equals(org.tomlj.TomlTable,org.tomlj.TomlTable)
+meth public static java.lang.String canonicalDottedKey(java.lang.String)
+meth public static java.lang.String joinKeyPath(java.util.List<java.lang.String>)
+meth public static java.lang.StringBuilder tomlEscape(java.lang.String)
+meth public static java.util.List<java.lang.String> parseDottedKey(java.lang.String)
+meth public static org.tomlj.TomlParseResult parse(java.io.InputStream) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.io.InputStream,org.tomlj.TomlVersion) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.io.Reader) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.io.Reader,org.tomlj.TomlVersion) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.lang.String)
+meth public static org.tomlj.TomlParseResult parse(java.lang.String,org.tomlj.TomlVersion)
+meth public static org.tomlj.TomlParseResult parse(java.nio.channels.ReadableByteChannel) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.nio.channels.ReadableByteChannel,org.tomlj.TomlVersion) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.nio.file.Path) throws java.io.IOException
+meth public static org.tomlj.TomlParseResult parse(java.nio.file.Path,org.tomlj.TomlVersion) throws java.io.IOException
+supr java.lang.Object
+hfds simpleKeyPattern
+
+CLSS public abstract interface org.tomlj.TomlArray
+meth public !varargs java.lang.String toJson(org.tomlj.JsonOptions[])
+meth public !varargs void toJson(java.lang.Appendable,org.tomlj.JsonOptions[]) throws java.io.IOException
+meth public abstract boolean containsArrays()
+meth public abstract boolean containsBooleans()
+meth public abstract boolean containsDoubles()
+meth public abstract boolean containsLocalDateTimes()
+meth public abstract boolean containsLocalDates()
+meth public abstract boolean containsLocalTimes()
+meth public abstract boolean containsLongs()
+meth public abstract boolean containsOffsetDateTimes()
+meth public abstract boolean containsStrings()
+meth public abstract boolean containsTables()
+meth public abstract boolean isEmpty()
+meth public abstract int size()
+meth public abstract java.lang.Object get(int)
+meth public abstract java.util.List<java.lang.Object> toList()
+meth public abstract org.tomlj.TomlPosition inputPositionOf(int)
+meth public boolean getBoolean(int)
+meth public double getDouble(int)
+meth public java.lang.String getString(int)
+meth public java.lang.String toJson(java.util.EnumSet<org.tomlj.JsonOptions>)
+meth public java.lang.String toToml()
+meth public java.time.LocalDate getLocalDate(int)
+meth public java.time.LocalDateTime getLocalDateTime(int)
+meth public java.time.LocalTime getLocalTime(int)
+meth public java.time.OffsetDateTime getOffsetDateTime(int)
+meth public long getLong(int)
+meth public org.tomlj.TomlArray getArray(int)
+meth public org.tomlj.TomlTable getTable(int)
+meth public void toJson(java.lang.Appendable,java.util.EnumSet<org.tomlj.JsonOptions>) throws java.io.IOException
+meth public void toToml(java.lang.Appendable) throws java.io.IOException
+
+CLSS public org.tomlj.TomlCommand
+cons public init()
+meth public static void main(java.lang.String[])
+supr java.lang.Object
+
+CLSS public org.tomlj.TomlInvalidTypeException
+supr java.lang.RuntimeException
+
+CLSS public final org.tomlj.TomlParseError
+meth public java.lang.String toString()
+meth public org.tomlj.TomlPosition position()
+supr java.lang.RuntimeException
+hfds position
+
+CLSS public abstract interface org.tomlj.TomlParseResult
+intf org.tomlj.TomlTable
+meth public abstract java.util.List<org.tomlj.TomlParseError> errors()
+meth public boolean hasErrors()
+
+CLSS public final org.tomlj.TomlPosition
+meth public boolean equals(java.lang.Object)
+meth public int column()
+meth public int hashCode()
+meth public int line()
+meth public java.lang.String toString()
+meth public static org.tomlj.TomlPosition positionAt(int,int)
+supr java.lang.Object
+hfds column,line
+
+CLSS public abstract interface org.tomlj.TomlTable
+
+CLSS public final !enum org.tomlj.TomlVersion
+fld public final static org.tomlj.TomlVersion HEAD
+fld public final static org.tomlj.TomlVersion LATEST
+fld public final static org.tomlj.TomlVersion V0_4_0
+fld public final static org.tomlj.TomlVersion V0_5_0
+fld public final static org.tomlj.TomlVersion V1_0_0
+supr java.lang.Enum
+hfds canonical
+
diff --git a/ide/libs.tomlj/nbproject/project.properties b/ide/libs.tomlj/nbproject/project.properties
index 7e5fd34..767fdbc 100644
--- a/ide/libs.tomlj/nbproject/project.properties
+++ b/ide/libs.tomlj/nbproject/project.properties
@@ -14,6 +14,10 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-release.external/tomlj-1.0.0.jar=modules/ext/tomlj.jar
+release.external/tomlj-1.1.0.jar=modules/ext/tomlj.jar
 is.autoload=true
 
+# Restrict Sigcheck to the org.toml package. The internal package contains the
+# ANTLRv4 Lexer/parser which are required to be public by the langiages.toml
+# module, but otherwise it's discouraged to be used.
+sigtest.public.packages=org.tomlj
\ No newline at end of file
diff --git a/ide/libs.tomlj/nbproject/project.xml b/ide/libs.tomlj/nbproject/project.xml
index 98cbc50..e4df473 100644
--- a/ide/libs.tomlj/nbproject/project.xml
+++ b/ide/libs.tomlj/nbproject/project.xml
@@ -30,7 +30,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.18</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
             </module-dependencies>
@@ -40,7 +41,7 @@
             </public-packages>
             <class-path-extension>
                 <runtime-relative-path>ext/tomlj.jar</runtime-relative-path>
-                <binary-origin>external/tomlj-1.0.0.jar</binary-origin>
+                <binary-origin>external/tomlj-1.1.0.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/ide/libs.truffleapi/nbproject/org-netbeans-libs-truffleapi.sig b/ide/libs.truffleapi/nbproject/org-netbeans-libs-truffleapi.sig
index 80feaa9..e702468 100644
--- a/ide/libs.truffleapi/nbproject/org-netbeans-libs-truffleapi.sig
+++ b/ide/libs.truffleapi/nbproject/org-netbeans-libs-truffleapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public final com.oracle.truffle.api.ArrayUtils
 meth public !varargs static int indexOf(byte[],int,int,byte[])
diff --git a/ide/libs.xerces/nbproject/org-netbeans-libs-xerces.sig b/ide/libs.xerces/nbproject/org-netbeans-libs-xerces.sig
index c7e4370..e7c7ba9 100644
--- a/ide/libs.xerces/nbproject/org-netbeans-libs-xerces.sig
+++ b/ide/libs.xerces/nbproject/org-netbeans-libs-xerces.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 1.55.0
+#Version 1.56.0
 
diff --git a/ide/localhistory/nbproject/project.properties b/ide/localhistory/nbproject/project.properties
index 76e8e4d..b9c94ca 100644
--- a/ide/localhistory/nbproject/project.properties
+++ b/ide/localhistory/nbproject/project.properties
@@ -17,7 +17,7 @@
 nbm.needs.restart=true
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 #qa-functional
 test.qa-functional.cp.extra=${openide.nodes.dir}/modules/org-openide-nodes.jar:\
 ${openide.util.dir}/lib/org-openide-util.jar:${openide.util.ui.dir}/lib/org-openide-util-ui.jar
diff --git a/ide/lsp.client/nbproject/org-netbeans-modules-lsp-client.sig b/ide/lsp.client/nbproject/org-netbeans-modules-lsp-client.sig
index f041cb0..1b8089e 100644
--- a/ide/lsp.client/nbproject/org-netbeans-modules-lsp-client.sig
+++ b/ide/lsp.client/nbproject/org-netbeans-modules-lsp-client.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17.0
+#Version 1.18.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java
index 0869a66..d4eb074 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java
@@ -213,9 +213,14 @@
                                                 toAdd = i.getLabel();
                                             }
                                             int[] identSpan = Utilities.getIdentifierBlock((BaseDocument) doc, caretOffset);
-                                            String printSuffix = toAdd.substring(identSpan != null ? caretOffset - identSpan[0] : 0);
-                                            doc.insertString(caretOffset, printSuffix, null);
-                                            endPos = caretOffset + printSuffix.length();
+                                            if (identSpan != null) {
+                                                doc.remove(identSpan[0], identSpan[1] - identSpan[0]);
+                                                doc.insertString(identSpan[0], toAdd, null);
+                                                endPos = identSpan[0] + toAdd.length();
+                                            } else {
+                                                doc.insertString(caretOffset, toAdd, null);
+                                                endPos = caretOffset + toAdd.length();
+                                            }
                                         }
                                         doc.insertString(endPos, appendText, null);
                                     } catch (BadLocationException ex) {
diff --git a/ide/mercurial/nbproject/org-netbeans-modules-mercurial.sig b/ide/mercurial/nbproject/org-netbeans-modules-mercurial.sig
index 1641d1a..1264c9c 100644
--- a/ide/mercurial/nbproject/org-netbeans-modules-mercurial.sig
+++ b/ide/mercurial/nbproject/org-netbeans-modules-mercurial.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59.0
+#Version 1.60.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/mercurial/src/org/netbeans/modules/mercurial/ui/branch/HgBranch.java b/ide/mercurial/src/org/netbeans/modules/mercurial/ui/branch/HgBranch.java
index c287638..a322b38 100644
--- a/ide/mercurial/src/org/netbeans/modules/mercurial/ui/branch/HgBranch.java
+++ b/ide/mercurial/src/org/netbeans/modules/mercurial/ui/branch/HgBranch.java
@@ -29,7 +29,7 @@
     private final String name;
     private final boolean closed;
     private final boolean active;
-    public static String DEFAULT_NAME = "default";; //NOI18N
+    public static String DEFAULT_NAME = "default"; //NOI18N
 
     public HgBranch (String name, HgLogMessage revisionInfo, boolean closed, boolean active) {
         this.revisionInfo = revisionInfo;
diff --git a/ide/mercurial/src/org/netbeans/modules/mercurial/ui/commit/CommitPanel.java b/ide/mercurial/src/org/netbeans/modules/mercurial/ui/commit/CommitPanel.java
index 58ff389..914ab24 100644
--- a/ide/mercurial/src/org/netbeans/modules/mercurial/ui/commit/CommitPanel.java
+++ b/ide/mercurial/src/org/netbeans/modules/mercurial/ui/commit/CommitPanel.java
@@ -306,7 +306,7 @@
             JTabbedPane hooksTabbedPane = new JTabbedPane();
             for (HgHook hook : hooks) {
                 hooksTabbedPane.add(hook.createComponent(hookContext),
-                                    hook.getDisplayName().replaceAll("\\&", ""));
+                                    hook.getDisplayName().replace("&", ""));
             }
             hookSectionPanel.add(hooksTabbedPane);
         }
diff --git a/ide/mylyn.util/nbproject/org-netbeans-modules-mylyn-util.sig b/ide/mylyn.util/nbproject/org-netbeans-modules-mylyn-util.sig
index 5a98505..a6d7c85 100644
--- a/ide/mylyn.util/nbproject/org-netbeans-modules-mylyn-util.sig
+++ b/ide/mylyn.util/nbproject/org-netbeans-modules-mylyn-util.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.53
+#Version 1.54
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/mylyn.util/nbproject/project.properties b/ide/mylyn.util/nbproject/project.properties
index 4f1c2a2..0b61496 100644
--- a/ide/mylyn.util/nbproject/project.properties
+++ b/ide/mylyn.util/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
\ No newline at end of file
diff --git a/ide/nativeimage.api/nbproject/org-netbeans-modules-nativeimage-api.sig b/ide/nativeimage.api/nbproject/org-netbeans-modules-nativeimage-api.sig
index 684a893..44113e3 100644
--- a/ide/nativeimage.api/nbproject/org-netbeans-modules-nativeimage-api.sig
+++ b/ide/nativeimage.api/nbproject/org-netbeans-modules-nativeimage-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.9
+#Version 0.10
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/o.apache.xml.resolver/build.xml b/ide/o.apache.xml.resolver/build.xml
index 48c35e1..c3b0055 100644
--- a/ide/o.apache.xml.resolver/build.xml
+++ b/ide/o.apache.xml.resolver/build.xml
@@ -49,8 +49,7 @@
             patchfile="external/xml-resolver-1.2-netbeans.patch" />
         <!-- ... 4. Compiles sources to build/external-patch/classes -->
         <mkdir dir="build/external-patch/classes" />
-        <javac srcdir="build/external-patch/sources"
-            destdir="build/external-patch/classes" source="${javac.source}" target="${javac.target}">
+        <javac srcdir="build/external-patch/sources" destdir="build/external-patch/classes" release="8">
             <exclude name="org/apache/xml/resolver/tests/**" />
         </javac>
         <!-- ... 5. Creates a jar in 'external/resolver-1.2.jar' -->
diff --git a/ide/o.apache.xml.resolver/nbproject/org-apache-xml-resolver.sig b/ide/o.apache.xml.resolver/nbproject/org-apache-xml-resolver.sig
index a9c56a8..f5f7ab1 100644
--- a/ide/o.apache.xml.resolver/nbproject/org-apache-xml-resolver.sig
+++ b/ide/o.apache.xml.resolver/nbproject/org-apache-xml-resolver.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48.0
+#Version 1.49.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/o.n.swing.dirchooser/nbproject/project.properties b/ide/o.n.swing.dirchooser/nbproject/project.properties
index 6d33e3b..462c25b 100644
--- a/ide/o.n.swing.dirchooser/nbproject/project.properties
+++ b/ide/o.n.swing.dirchooser/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
diff --git a/ide/o.n.swing.dirchooser/src/org/netbeans/swing/dirchooser/DirectoryChooserUI.java b/ide/o.n.swing.dirchooser/src/org/netbeans/swing/dirchooser/DirectoryChooserUI.java
index a6de9dc..c81a399 100644
--- a/ide/o.n.swing.dirchooser/src/org/netbeans/swing/dirchooser/DirectoryChooserUI.java
+++ b/ide/o.n.swing.dirchooser/src/org/netbeans/swing/dirchooser/DirectoryChooserUI.java
@@ -2021,7 +2021,7 @@
             // #89393: GTK needs name to render cell renderer "natively"
             setName("ComboBox.listRenderer"); // NOI18N
             
-            if (value != null && value instanceof FileFilter) {
+            if (value instanceof FileFilter) {
                 setText(((FileFilter)value).getDescription());
             }
             
diff --git a/ide/o.openidex.util/nbproject/org-openidex-util.sig b/ide/o.openidex.util/nbproject/org-openidex-util.sig
index 98945dc..689309e 100644
--- a/ide/o.openidex.util/nbproject/org-openidex-util.sig
+++ b/ide/o.openidex.util/nbproject/org-openidex-util.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.64
+#Version 3.65
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/o.openidex.util/nbproject/project.properties b/ide/o.openidex.util/nbproject/project.properties
index 58c5add..cf56d42 100644
--- a/ide/o.openidex.util/nbproject/project.properties
+++ b/ide/o.openidex.util/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
diff --git a/ide/options.editor/nbproject/org-netbeans-modules-options-editor.sig b/ide/options.editor/nbproject/org-netbeans-modules-options-editor.sig
index debd01f..c17c027 100644
--- a/ide/options.editor/nbproject/org-netbeans-modules-options-editor.sig
+++ b/ide/options.editor/nbproject/org-netbeans-modules-options-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.77
+#Version 1.78
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/options.editor/src/org/netbeans/modules/options/editor/Bundle.properties b/ide/options.editor/src/org/netbeans/modules/options/editor/Bundle.properties
index 1cb8639..1cc8530 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/editor/Bundle.properties
+++ b/ide/options.editor/src/org/netbeans/modules/options/editor/Bundle.properties
@@ -54,6 +54,11 @@
 CTL_Tasklist_ToolTip=Tasklist Settings
 KW_TaskList=Error Badges,Tasklist
 
+#Inlinehints Subcategory
+CTL_InlineHints_DisplayName=Inline Hints
+CTL_InlineHints_ToolTip=Inline Hints Settings
+KW_InlineHints=Inline Hints, Type Hints
+
 #LanguageBasedOptionPanel
 LBL_Language=&Language:
 
diff --git a/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedController.java b/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedController.java
index 1a31d60..823bf4e 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedController.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedController.java
@@ -21,9 +21,11 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -35,6 +37,7 @@
 import org.netbeans.api.options.OptionsDisplayer;
 import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
 import org.netbeans.modules.options.editor.spi.OptionsFilter;
+import org.netbeans.modules.options.util.LanguagesComparator;
 import org.netbeans.spi.options.OptionsPanelController;
 import org.openide.util.HelpCtx;
 import org.openide.util.Lookup;
@@ -93,6 +96,19 @@
         return new FolderBasedController("MarkOccurrences/", "netbeans.optionsDialog.editor.markOccurences", false);
     }
 
+    @OptionsPanelController.SubRegistration(
+	id="InlineHints",
+        displayName="#CTL_InlineHints_DisplayName",
+        location=OptionsDisplayer.EDITOR,
+        keywords="#KW_InlineHints",
+        keywordsCategory="Editor/InlineHints",
+        position=500
+//        toolTip="#CTL_MarkOccurences_ToolTip"
+    )
+    public static OptionsPanelController inlineHints() {
+        return new FolderBasedController("InlineHints/", "netbeans.optionsDialog.editor.inlineHints", false);
+    }
+
     public static OptionsPanelController create (Map args) {
         FolderBasedController folderBasedController = new FolderBasedController(
                 (String) args.get (OPTIONS_SUB_FOLDER),
@@ -226,8 +242,13 @@
         Logger.getLogger(FolderBasedController.class.getName()).log(Level.WARNING, "setCurrentSubcategory: cannot open: {0}", subpath);
     }
 
-    Iterable<String> getMimeTypes() {
-        return getMimeType2delegates ().keySet();
+    /**
+     * @return Copy of the list of mime types sorted by display name
+     */
+    List<String> getMimeTypes() {
+        List<String> mimeTypes = new ArrayList<>(getMimeType2delegates().keySet());
+        mimeTypes.sort(LanguagesComparator.INSTANCE);
+        return mimeTypes;
     }
     
     OptionsPanelController getController(String mimeType) {
diff --git a/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedOptionPanel.java b/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedOptionPanel.java
index 825ae90..2312fcb 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedOptionPanel.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/editor/FolderBasedOptionPanel.java
@@ -41,7 +41,8 @@
  */
 @OptionsPanelController.KeywordsRegistration({
     @OptionsPanelController.Keywords(keywords = {"#KW_Hints"}, location = OptionsDisplayer.EDITOR, tabTitle="#CTL_Hints_DisplayName"),
-    @OptionsPanelController.Keywords(keywords = {"#KW_Mark"}, location = OptionsDisplayer.EDITOR, tabTitle="#CTL_MarkOccurences_DisplayName")
+    @OptionsPanelController.Keywords(keywords = {"#KW_Mark"}, location = OptionsDisplayer.EDITOR, tabTitle="#CTL_MarkOccurences_DisplayName"),
+    @OptionsPanelController.Keywords(keywords = {"#KW_InlineHints"}, location = OptionsDisplayer.EDITOR, tabTitle="#CTL_InlineHints_DisplayName")
 })
 public final class FolderBasedOptionPanel extends JPanel implements ActionListener {
     
diff --git a/ide/options.editor/src/org/netbeans/modules/options/editor/completion/CodeCompletionOptionsPanel.java b/ide/options.editor/src/org/netbeans/modules/options/editor/completion/CodeCompletionOptionsPanel.java
index 54d4b30..ed05424 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/editor/completion/CodeCompletionOptionsPanel.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/editor/completion/CodeCompletionOptionsPanel.java
@@ -33,6 +33,7 @@
 import org.netbeans.api.options.OptionsDisplayer;
 import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
 import org.netbeans.modules.options.editor.spi.PreferencesCustomizer;
+import org.netbeans.modules.options.util.LanguagesComparator;
 import org.netbeans.spi.options.OptionsPanelController;
 import org.openide.util.WeakListeners;
 
@@ -82,7 +83,7 @@
             DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
             ArrayList<String> mimeTypes = new ArrayList<String>();
             mimeTypes.addAll(selector.getMimeTypes());
-            Collections.sort(mimeTypes, new LanguagesComparator());
+            Collections.sort(mimeTypes, LanguagesComparator.INSTANCE);
 
             for (String mimeType : mimeTypes) {
                 model.addElement(mimeType);
@@ -169,17 +170,4 @@
     private javax.swing.JPanel panel;
     // End of variables declaration//GEN-END:variables
 
-    private static final class LanguagesComparator implements Comparator<String> {
-        public int compare(String mimeType1, String mimeType2) {
-            if (mimeType1.length() == 0)
-                return mimeType2.length() == 0 ? 0 : -1;
-            if (mimeType2.length() == 0)
-                return 1;
-
-            String langName1 = EditorSettings.getDefault().getLanguageName(mimeType1);
-            String langName2 = EditorSettings.getDefault().getLanguageName(mimeType2);
-
-            return langName1.compareTo(langName2);
-        }
-    }
 }
diff --git a/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.form b/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.form
index 3133325..2700797 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.form
+++ b/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.form
@@ -45,11 +45,6 @@
   <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
   <SubComponents>
     <Container class="javax.swing.JSplitPane" name="jSplitPane1">
-      <Properties>
-        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-          <Border info="null"/>
-        </Property>
-      </Properties>
       <Constraints>
         <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
           <GridBagConstraints gridX="-1" gridY="-1" gridWidth="0" gridHeight="0" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
diff --git a/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.java b/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.java
index 83ea666..a3b31c5 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/indentation/FormattingPanel.java
@@ -25,7 +25,6 @@
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.DefaultListCellRenderer;
@@ -43,6 +42,7 @@
 import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
 import org.netbeans.modules.options.editor.spi.PreferencesCustomizer;
 import org.netbeans.modules.options.editor.spi.PreviewProvider;
+import org.netbeans.modules.options.util.LanguagesComparator;
 import org.netbeans.spi.options.OptionsPanelController;
 import org.openide.util.NbBundle;
 import org.openide.util.WeakListeners;
@@ -111,7 +111,7 @@
             DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
             ArrayList<String> mimeTypes = new ArrayList<String>();
             mimeTypes.addAll(selector.getMimeTypes());
-            Collections.sort(mimeTypes, new LanguagesComparator());
+            Collections.sort(mimeTypes, LanguagesComparator.INSTANCE);
 
             String preSelectMimeType = null;
             for (String mimeType : mimeTypes) {
@@ -366,17 +366,4 @@
     private CustomizerSelector selector;
     private PropertyChangeListener weakListener;
 
-    private static final class LanguagesComparator implements Comparator<String> {
-        public int compare(String mimeType1, String mimeType2) {
-            if (mimeType1.length() == 0)
-                return mimeType2.length() == 0 ? 0 : -1;
-            if (mimeType2.length() == 0)
-                return 1;
-            
-            String langName1 = EditorSettings.getDefault().getLanguageName(mimeType1);
-            String langName2 = EditorSettings.getDefault().getLanguageName(mimeType2);
-            
-            return langName1.compareTo(langName2);
-        }
-    }
 }
diff --git a/ide/options.editor/src/org/netbeans/modules/options/indentation/ProxyPreferences.java b/ide/options.editor/src/org/netbeans/modules/options/indentation/ProxyPreferences.java
index a406dd9..6794edc 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/indentation/ProxyPreferences.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/indentation/ProxyPreferences.java
@@ -40,6 +40,7 @@
  * @author vita
  * @deprecated Please use {@link MemoryPreferences} API instead
  */
+@Deprecated
 public final class ProxyPreferences extends Preferences implements PreferenceChangeListener, NodeChangeListener {
     
     private final MemoryPreferences delegateRoot;
diff --git a/ide/options.editor/src/org/netbeans/modules/options/util/LanguagesComparator.java b/ide/options.editor/src/org/netbeans/modules/options/util/LanguagesComparator.java
new file mode 100644
index 0000000..57647f9
--- /dev/null
+++ b/ide/options.editor/src/org/netbeans/modules/options/util/LanguagesComparator.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.options.util;
+
+import java.util.Comparator;
+import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
+
+/**
+ * Comparator sorting a list of mime types by their language display name
+ */
+public final class LanguagesComparator implements Comparator<String> {
+
+    public static final LanguagesComparator INSTANCE = new LanguagesComparator();
+
+    private LanguagesComparator() {}
+
+    @Override
+    public int compare(String mimeType1, String mimeType2) {
+        if (mimeType1.length() == 0) {
+            return mimeType2.length() == 0 ? 0 : -1;
+        }
+        if (mimeType2.length() == 0) {
+            return 1;
+        }
+        String langName1 = EditorSettings.getDefault().getLanguageName(mimeType1);
+        String langName2 = EditorSettings.getDefault().getLanguageName(mimeType2);
+        return langName1.compareTo(langName2);
+    }
+
+}
diff --git a/ide/options.editor/test/unit/src/org/netbeans/modules/options/editor/EditorOptionsTest.java b/ide/options.editor/test/unit/src/org/netbeans/modules/options/editor/EditorOptionsTest.java
index 28fde0c..8a9b1ae 100644
--- a/ide/options.editor/test/unit/src/org/netbeans/modules/options/editor/EditorOptionsTest.java
+++ b/ide/options.editor/test/unit/src/org/netbeans/modules/options/editor/EditorOptionsTest.java
@@ -46,6 +46,8 @@
         
         EditorTestLookup.setLookup(
             new URL[] {
+                getClass().getClassLoader().getResource("org/netbeans/core/resources/mf-layer.xml"),
+                getClass().getClassLoader().getResource("org/netbeans/core/ui/resources/layer.xml"),
                 getClass().getClassLoader().getResource("org/netbeans/modules/options/editor/mf-layer.xml"),
                 getClass().getClassLoader().getResource("org/netbeans/modules/options/keymap/mf-layer.xml"),
                 getClass().getClassLoader().getResource("org/netbeans/modules/options/editor/test-layer.xml"),
@@ -67,15 +69,14 @@
     
     public void testPanelsRegistration () {
         // there are two panels registered from this module - Editor, Fonts & Colors
-        // and one panel from core/options/keymap
-        assertEquals (3, getCategories ().size ());
+        // and two panels from core/options/keymap (General, Keymaps)
+        assertEquals (4, getCategories ().size ());
     }
     
     public void testOptionsCategories () {
         for(OptionsCategory oc : getCategories()) {
-            assertNotNull (oc.getCategoryName ());
-            assertNotNull (oc.getIcon());
-            assertNotNull (oc.getTitle ());
+            assertNotNull (oc + " no category name", oc.getCategoryName ());
+            assertNotNull (oc + " no icon", oc.getIcon());
         }
     }
     
diff --git a/ide/parsing.api/nbproject/org-netbeans-modules-parsing-api.sig b/ide/parsing.api/nbproject/org-netbeans-modules-parsing-api.sig
index 4361533..6262097 100644
--- a/ide/parsing.api/nbproject/org-netbeans-modules-parsing-api.sig
+++ b/ide/parsing.api/nbproject/org-netbeans-modules-parsing-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.24.0
+#Version 9.25.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/parsing.indexing/nbproject/org-netbeans-modules-parsing-indexing.sig b/ide/parsing.indexing/nbproject/org-netbeans-modules-parsing-indexing.sig
index 3876422..b49e486 100644
--- a/ide/parsing.indexing/nbproject/org-netbeans-modules-parsing-indexing.sig
+++ b/ide/parsing.indexing/nbproject/org-netbeans-modules-parsing-indexing.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.26.0
+#Version 9.27.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/parsing.lucene/nbproject/org-netbeans-modules-parsing-lucene.sig b/ide/parsing.lucene/nbproject/org-netbeans-modules-parsing-lucene.sig
index 2b59ab9..917522c 100644
--- a/ide/parsing.lucene/nbproject/org-netbeans-modules-parsing-lucene.sig
+++ b/ide/parsing.lucene/nbproject/org-netbeans-modules-parsing-lucene.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.53.0
+#Version 2.54.0
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/ide/parsing.lucene/test/unit/src/org/netbeans/modules/parsing/lucene/RecordOwnerLockFactoryTest.java b/ide/parsing.lucene/test/unit/src/org/netbeans/modules/parsing/lucene/RecordOwnerLockFactoryTest.java
index c974a99..7885f59 100644
--- a/ide/parsing.lucene/test/unit/src/org/netbeans/modules/parsing/lucene/RecordOwnerLockFactoryTest.java
+++ b/ide/parsing.lucene/test/unit/src/org/netbeans/modules/parsing/lucene/RecordOwnerLockFactoryTest.java
@@ -94,7 +94,7 @@
         assertTrue(lock2.obtain());
         lockFactory.clearLock("test4"); //NOI18N
         assertTrue(lockFactory.hasLocks());
-        lock2.release();;
+        lock2.release();
         assertFalse(lockFactory.hasLocks());
     }
 
diff --git a/ide/print.editor/nbproject/project.properties b/ide/print.editor/nbproject/project.properties
index 3628206..0bc35ea 100644
--- a/ide/print.editor/nbproject/project.properties
+++ b/ide/print.editor/nbproject/project.properties
@@ -16,5 +16,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
diff --git a/ide/project.ant.compat8/nbproject/org-netbeans-modules-project-ant-compat8.sig b/ide/project.ant.compat8/nbproject/org-netbeans-modules-project-ant-compat8.sig
index 7841346..e42ea60 100644
--- a/ide/project.ant.compat8/nbproject/org-netbeans-modules-project-ant-compat8.sig
+++ b/ide/project.ant.compat8/nbproject/org-netbeans-modules-project-ant-compat8.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.84
+#Version 1.85
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/project.ant.compat8/nbproject/project.properties b/ide/project.ant.compat8/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/ide/project.ant.compat8/nbproject/project.properties
+++ b/ide/project.ant.compat8/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/project.ant.ui/nbproject/org-netbeans-modules-project-ant-ui.sig b/ide/project.ant.ui/nbproject/org-netbeans-modules-project-ant-ui.sig
index 04c8aad..748c37b 100644
--- a/ide/project.ant.ui/nbproject/org-netbeans-modules-project-ant-ui.sig
+++ b/ide/project.ant.ui/nbproject/org-netbeans-modules-project-ant-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.82
+#Version 1.83
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/project.ant/nbproject/org-netbeans-modules-project-ant.sig b/ide/project.ant/nbproject/org-netbeans-modules-project-ant.sig
index e455b6f..8ebd526 100644
--- a/ide/project.ant/nbproject/org-netbeans-modules-project-ant.sig
+++ b/ide/project.ant/nbproject/org-netbeans-modules-project-ant.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.84
+#Version 1.85
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/project.indexingbridge/nbproject/org-netbeans-modules-project-indexingbridge.sig b/ide/project.indexingbridge/nbproject/org-netbeans-modules-project-indexingbridge.sig
index 7aa284c..ed32989 100644
--- a/ide/project.indexingbridge/nbproject/org-netbeans-modules-project-indexingbridge.sig
+++ b/ide/project.indexingbridge/nbproject/org-netbeans-modules-project-indexingbridge.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.34
+#Version 1.35
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/project.indexingbridge/nbproject/project.properties b/ide/project.indexingbridge/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/ide/project.indexingbridge/nbproject/project.properties
+++ b/ide/project.indexingbridge/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/project.libraries.ui/nbproject/org-netbeans-modules-project-libraries-ui.sig b/ide/project.libraries.ui/nbproject/org-netbeans-modules-project-libraries-ui.sig
index ca75b56..027af30 100644
--- a/ide/project.libraries.ui/nbproject/org-netbeans-modules-project-libraries-ui.sig
+++ b/ide/project.libraries.ui/nbproject/org-netbeans-modules-project-libraries-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.69
+#Version 1.70
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/project.libraries.ui/nbproject/project.properties b/ide/project.libraries.ui/nbproject/project.properties
index 4f2e9ed..82c84fb 100644
--- a/ide/project.libraries.ui/nbproject/project.properties
+++ b/ide/project.libraries.ui/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.apichanges=${basedir}/apichanges.xml
 javadoc.arch=${basedir}/arch.xml
diff --git a/ide/project.libraries/nbproject/org-netbeans-modules-project-libraries.sig b/ide/project.libraries/nbproject/org-netbeans-modules-project-libraries.sig
index c23420a..4d8627b 100644
--- a/ide/project.libraries/nbproject/org-netbeans-modules-project-libraries.sig
+++ b/ide/project.libraries/nbproject/org-netbeans-modules-project-libraries.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.70
+#Version 1.71
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/project.spi.intern.impl/nbproject/project.properties b/ide/project.spi.intern.impl/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/project.spi.intern.impl/nbproject/project.properties
+++ b/ide/project.spi.intern.impl/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/project.spi.intern/nbproject/org-netbeans-modules-project-spi-intern.sig b/ide/project.spi.intern/nbproject/org-netbeans-modules-project-spi-intern.sig
index fd8c142..9c3417b 100644
--- a/ide/project.spi.intern/nbproject/org-netbeans-modules-project-spi-intern.sig
+++ b/ide/project.spi.intern/nbproject/org-netbeans-modules-project-spi-intern.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.20
+#Version 1.21
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/project.spi.intern/nbproject/project.properties b/ide/project.spi.intern/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/ide/project.spi.intern/nbproject/project.properties
+++ b/ide/project.spi.intern/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/projectapi.nb/nbproject/project.properties b/ide/projectapi.nb/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/projectapi.nb/nbproject/project.properties
+++ b/ide/projectapi.nb/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/projectapi/nbproject/org-netbeans-modules-projectapi.sig b/ide/projectapi/nbproject/org-netbeans-modules-projectapi.sig
index f96a83b..bec5afd 100644
--- a/ide/projectapi/nbproject/org-netbeans-modules-projectapi.sig
+++ b/ide/projectapi/nbproject/org-netbeans-modules-projectapi.sig
@@ -1,5 +1,11 @@
 #Signature file v4.1
-#Version 1.87
+#Version 1.89
+
+CLSS public abstract interface !annotation java.lang.FunctionalInterface
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
 
 CLSS public java.lang.Object
 cons public init()
@@ -41,6 +47,10 @@
 intf java.lang.annotation.Annotation
 meth public abstract java.lang.annotation.ElementType[] value()
 
+CLSS public abstract interface java.util.concurrent.Callable<%0 extends java.lang.Object>
+ anno 0 java.lang.FunctionalInterface()
+meth public abstract {java.util.concurrent.Callable%0} call() throws java.lang.Exception
+
 CLSS public org.netbeans.api.project.FileOwnerQuery
 fld public final static int EXTERNAL_ALGORITHM_TRANSIENT = 0
 fld public final static org.netbeans.api.project.Project UNOWNED
@@ -56,6 +66,59 @@
 meth public abstract org.openide.filesystems.FileObject getProjectDirectory()
 meth public abstract org.openide.util.Lookup getLookup()
 
+CLSS public final org.netbeans.api.project.ProjectActionContext
+innr public abstract interface static ProjectCallback
+innr public final static Builder
+meth public !varargs <%0 extends java.lang.Object, %1 extends java.lang.Exception> {%%0} apply(org.netbeans.api.project.ProjectActionContext$ProjectCallback<{%%0},{%%1}>,org.netbeans.api.project.ProjectActionContext[]) throws {%%1}
+meth public !varargs void apply(java.lang.Runnable,org.netbeans.api.project.ProjectActionContext[])
+meth public boolean equals(java.lang.Object)
+meth public int hashCode()
+meth public java.lang.String getProjectAction()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+meth public java.util.Map<java.lang.String,java.lang.String> getProperties()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public java.util.Set<java.lang.String> getProfiles()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.Project getProject()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder newDerivedBuilder()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.spi.project.ProjectConfiguration getConfiguration()
+ anno 0 org.netbeans.api.annotations.common.CheckForNull()
+meth public org.openide.util.Lookup getLookup()
+meth public static org.netbeans.api.project.ProjectActionContext find(org.netbeans.api.project.Project)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public static org.netbeans.api.project.ProjectActionContext$Builder newBuilder(org.netbeans.api.project.Project)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+supr java.lang.Object
+hfds configuration,lookup,profiles,project,projectAction,properties
+
+CLSS public final static org.netbeans.api.project.ProjectActionContext$Builder
+ outer org.netbeans.api.project.ProjectActionContext
+meth public !varargs org.netbeans.api.project.ProjectActionContext$Builder withProfiles(java.lang.String[])
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext context()
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder forProjectAction(java.lang.String)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder useConfiguration(org.netbeans.spi.project.ProjectConfiguration)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder withLookup(org.openide.util.Lookup)
+meth public org.netbeans.api.project.ProjectActionContext$Builder withProfiles(java.util.Collection<java.lang.String>)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder withProperties(java.util.Map<java.lang.String,java.lang.String>)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.api.project.ProjectActionContext$Builder withProperty(java.lang.String,java.lang.String)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
+supr java.lang.Object
+hfds ctx
+
+CLSS public abstract interface static org.netbeans.api.project.ProjectActionContext$ProjectCallback<%0 extends java.lang.Object, %1 extends java.lang.Exception>
+ outer org.netbeans.api.project.ProjectActionContext
+ anno 0 java.lang.FunctionalInterface()
+intf java.util.concurrent.Callable<{org.netbeans.api.project.ProjectActionContext$ProjectCallback%0}>
+meth public abstract {org.netbeans.api.project.ProjectActionContext$ProjectCallback%0} call() throws {org.netbeans.api.project.ProjectActionContext$ProjectCallback%1}
+
 CLSS public abstract interface org.netbeans.api.project.ProjectInformation
 fld public final static java.lang.String PROP_DISPLAY_NAME = "displayName"
 fld public final static java.lang.String PROP_ICON = "icon"
@@ -109,6 +172,11 @@
 hfds displayName,icon,projectType
 
 CLSS public org.netbeans.api.project.ProjectUtils
+meth public <%0 extends org.netbeans.spi.project.ProjectConfiguration> boolean setActiveConfiguration(org.netbeans.api.project.Project,{%%0}) throws java.io.IOException
+ anno 1 org.netbeans.api.annotations.common.NonNull()
+ anno 2 org.netbeans.api.annotations.common.NonNull()
+meth public org.netbeans.spi.project.ProjectConfiguration getActiveConfiguration(org.netbeans.api.project.Project)
+ anno 1 org.netbeans.api.annotations.common.NonNull()
 meth public static boolean hasSubprojectCycles(org.netbeans.api.project.Project,org.netbeans.api.project.Project)
 meth public static java.util.Set<org.netbeans.api.project.Project> getContainedProjects(org.netbeans.api.project.Project,boolean)
  anno 1 org.netbeans.api.annotations.common.NonNull()
diff --git a/ide/projectui.buildmenu/nbproject/project.properties b/ide/projectui.buildmenu/nbproject/project.properties
index df96c3f..2669c4a 100644
--- a/ide/projectui.buildmenu/nbproject/project.properties
+++ b/ide/projectui.buildmenu/nbproject/project.properties
@@ -17,6 +17,6 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 spec.version.base=1.45.0
diff --git a/ide/projectui/nbproject/org-netbeans-modules-projectui.sig b/ide/projectui/nbproject/org-netbeans-modules-projectui.sig
index fe60bb9..bd91bcd 100644
--- a/ide/projectui/nbproject/org-netbeans-modules-projectui.sig
+++ b/ide/projectui/nbproject/org-netbeans-modules-projectui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.76.0
+#Version 1.77.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/NewFileIterator.java b/ide/projectui/src/org/netbeans/modules/project/ui/NewFileIterator.java
index 4cc01f5..4b891af 100644
--- a/ide/projectui/src/org/netbeans/modules/project/ui/NewFileIterator.java
+++ b/ide/projectui/src/org/netbeans/modules/project/ui/NewFileIterator.java
@@ -201,7 +201,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty (WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps (beforeSteps);
diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/api/ProjectTemplates.java b/ide/projectui/src/org/netbeans/modules/project/ui/api/ProjectTemplates.java
index 929b13a..e3988db 100644
--- a/ide/projectui/src/org/netbeans/modules/project/ui/api/ProjectTemplates.java
+++ b/ide/projectui/src/org/netbeans/modules/project/ui/api/ProjectTemplates.java
@@ -31,6 +31,7 @@
      * {@link String}-valued action property for a project category (subfolder code name) to select.
      * @deprecated use {@link CommonProjectActions.PRESELECT_CATEGORY} instead
      */
+    @Deprecated
     public static final String PRESELECT_CATEGORY = CommonProjectActions.PRESELECT_CATEGORY;
 
     /**
diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/resources/license-default.txt b/ide/projectui/src/org/netbeans/modules/project/ui/resources/license-default.txt
index 487df23..8c54046 100644
--- a/ide/projectui/src/org/netbeans/modules/project/ui/resources/license-default.txt
+++ b/ide/projectui/src/org/netbeans/modules/project/ui/resources/license-default.txt
@@ -1,4 +1,6 @@
 ${licenseFirst!""}
 ${licensePrefix}Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+<#if !.data_model["org.openide.filesystems.FileObject"].getPath()?contains("{") >
 ${licensePrefix}Click nbfs://nbhost/SystemFileSystem/${.data_model["org.openide.filesystems.FileObject"].getPath()} to edit this template
+</#if>
 ${licenseLast!""}
diff --git a/ide/projectuiapi.base/nbproject/org-netbeans-modules-projectuiapi-base.sig b/ide/projectuiapi.base/nbproject/org-netbeans-modules-projectuiapi-base.sig
index e9d79ad..508c6f9 100644
--- a/ide/projectuiapi.base/nbproject/org-netbeans-modules-projectuiapi-base.sig
+++ b/ide/projectuiapi.base/nbproject/org-netbeans-modules-projectuiapi-base.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.103.0
+#Version 1.104.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/projectuiapi.base/nbproject/project.properties b/ide/projectuiapi.base/nbproject/project.properties
index 2dfcf04..b52ab37 100644
--- a/ide/projectuiapi.base/nbproject/project.properties
+++ b/ide/projectuiapi.base/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 spec.version.base=1.105.0
 is.autoload=true
 javadoc.arch=${basedir}/arch.xml
diff --git a/ide/projectuiapi/nbproject/org-netbeans-modules-projectuiapi.sig b/ide/projectuiapi/nbproject/org-netbeans-modules-projectuiapi.sig
index 5291d55..6f12120 100644
--- a/ide/projectuiapi/nbproject/org-netbeans-modules-projectuiapi.sig
+++ b/ide/projectuiapi/nbproject/org-netbeans-modules-projectuiapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.106.0
+#Version 1.107.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java b/ide/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java
index c38c318..0a15883 100644
--- a/ide/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java
+++ b/ide/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java
@@ -155,7 +155,10 @@
             // in order to get through the freemarker, the path needs to "absolute" in freemarker terms - http://freemarker.sourceforge.net/docs/ref_directive_include.html
             // relative would mean relative to the template and we cannot be sure what the path from template to license template is..
             // it used to be, ../Licenses/ or ../../Licenses but can be anything similar, just based on where the template resides.
-            map.put(ATTR_LICENSE_PATH, "/" + url);
+            // Note: ensure reentrancy, so if 'url' starts with slash, do not prepend
+            if (!url.startsWith("/")) { // NOI18N
+                map.put(ATTR_LICENSE_PATH, "/" + url); // NOI18N
+            }
             //appears to cover both the new and old default value of the include path
         }  
         if (map.get(ATTR_ENCODING) == null) {
diff --git a/ide/properties.syntax/nbproject/org-netbeans-modules-properties-syntax.sig b/ide/properties.syntax/nbproject/org-netbeans-modules-properties-syntax.sig
index 2c75bb4..a45d9e8 100644
--- a/ide/properties.syntax/nbproject/org-netbeans-modules-properties-syntax.sig
+++ b/ide/properties.syntax/nbproject/org-netbeans-modules-properties-syntax.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.67
+#Version 1.68
 
 CLSS public abstract interface java.io.Externalizable
 intf java.io.Serializable
diff --git a/ide/properties.syntax/nbproject/project.properties b/ide/properties.syntax/nbproject/project.properties
index b609bdd..6e935a3 100644
--- a/ide/properties.syntax/nbproject/project.properties
+++ b/ide/properties.syntax/nbproject/project.properties
@@ -17,4 +17,4 @@
 
 is.eager=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/ide/properties/nbproject/org-netbeans-modules-properties.sig b/ide/properties/nbproject/org-netbeans-modules-properties.sig
index 3cb272f..73b90e8 100644
--- a/ide/properties/nbproject/org-netbeans-modules-properties.sig
+++ b/ide/properties/nbproject/org-netbeans-modules-properties.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.72
+#Version 1.73
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1513,6 +1513,7 @@
 fld public final static java.lang.String PROP_DOCUMENT = "document"
 fld public final static java.lang.String PROP_MODIFIED = "modified"
 fld public final static java.lang.String PROP_OPENED_PANES = "openedPanes"
+fld public final static java.lang.String PROP_RELOADING = "reloading"
 intf org.openide.cookies.EditorCookie
 meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
diff --git a/ide/properties/nbproject/project.properties b/ide/properties/nbproject/project.properties
index 5bafcbb..10e1bed 100644
--- a/ide/properties/nbproject/project.properties
+++ b/ide/properties/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 test.config.create.includes=org/netbeans/properties/jelly2tests/suites/creating_properties_file/*Test.class
diff --git a/ide/properties/src/org/netbeans/modules/properties/Element.java b/ide/properties/src/org/netbeans/modules/properties/Element.java
index a9b0613..f2bbbc4 100644
--- a/ide/properties/src/org/netbeans/modules/properties/Element.java
+++ b/ide/properties/src/org/netbeans/modules/properties/Element.java
@@ -599,7 +599,7 @@
 
         /** Checks for equality of two ItemElem-s */
         public boolean equals(Object item) {
-            if (item == null || !(item instanceof ItemElem))
+            if (!(item instanceof ItemElem))
                 return false;
             ItemElem ie = (ItemElem)item;
             return isKeyEqual(ie) && isValueEqual(ie) && isCommentEqual(ie);
diff --git a/ide/properties/src/org/netbeans/modules/properties/FileEntryNode.java b/ide/properties/src/org/netbeans/modules/properties/FileEntryNode.java
index 7c6a181..a96021d 100644
--- a/ide/properties/src/org/netbeans/modules/properties/FileEntryNode.java
+++ b/ide/properties/src/org/netbeans/modules/properties/FileEntryNode.java
@@ -136,6 +136,7 @@
      * @deprecated
      * @return no action if the underlying entry is a template. Otherwise the abstract node's default action is returned, possibly <code>null</code>.
      */
+    @Deprecated
     public SystemAction getDefaultAction () {
         if (entry.isTemplate ()) {
             return null;
diff --git a/ide/properties/src/org/netbeans/modules/properties/PresentableFileEntry.java b/ide/properties/src/org/netbeans/modules/properties/PresentableFileEntry.java
index 100c882..7c9b32f 100644
--- a/ide/properties/src/org/netbeans/modules/properties/PresentableFileEntry.java
+++ b/ide/properties/src/org/netbeans/modules/properties/PresentableFileEntry.java
@@ -317,6 +317,7 @@
      * @param s the cookie set to use
      * @deprecated
      */
+    @Deprecated
     protected final synchronized void setCookieSet (CookieSet s) {
         if (cookieSet != null) {
             cookieSet.removeChangeListener (cookieL);
diff --git a/ide/properties/src/org/netbeans/modules/properties/PropertiesTableModel.java b/ide/properties/src/org/netbeans/modules/properties/PropertiesTableModel.java
index 0b01390..fb1f2f3 100644
--- a/ide/properties/src/org/netbeans/modules/properties/PropertiesTableModel.java
+++ b/ide/properties/src/org/netbeans/modules/properties/PropertiesTableModel.java
@@ -487,7 +487,7 @@
         /** Overrides superclass method. */
         @Override
         public boolean equals(Object obj) {
-            if(obj == null || !(obj instanceof StringPair))
+            if(!(obj instanceof StringPair))
                 return false;
             
             StringPair compared = (StringPair)obj;
diff --git a/ide/properties/test/qa-functional/src/lib/PropertiesEditorTestCase.java b/ide/properties/test/qa-functional/src/lib/PropertiesEditorTestCase.java
index 990388b..a304960 100644
--- a/ide/properties/test/qa-functional/src/lib/PropertiesEditorTestCase.java
+++ b/ide/properties/test/qa-functional/src/lib/PropertiesEditorTestCase.java
@@ -93,7 +93,7 @@
     private final String POPUP_MENU_ADD_LOCALE = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "NewArg")+Bundle.getStringTrimmed("org.netbeans.modules.properties.Bundle", "LAB_NewLocaleAction");   // String : Add Locale...
     private final String POPUP_MENU_CUSTOMIZE = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "Customize");    // String : Customize
     private final String POPUP_MENU_ADD_PROPERTY = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "NewArg")+Bundle.getStringTrimmed("org.netbeans.modules.properties.Bundle", "LAB_NewPropertyAction");  // String : Add Property
-    private final String POPUP_MENU_DELETE_LOCALE = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "Delete");;   // String : Delete
+    private final String POPUP_MENU_DELETE_LOCALE = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "Delete");   // String : Delete
     private final String POPUP_MENU_EDIT = "";//Bundle.getStringTrimmed("org.openide.actions.Bundle", "Edit");  // String : Edit
     private final String LABEL_KEY = "";//Bundle.getStringTrimmed("org.netbeans.modules.properties.Bundle", "LBL_KeyLabel"); // String : Key
     private final String LABLE_VALUE = "";//Bundle.getStringTrimmed("org.netbeans.modules.properties.Bundle", "LBL_ValueLabel"); // String : Value
diff --git a/ide/refactoring.api/nbproject/org-netbeans-modules-refactoring-api.sig b/ide/refactoring.api/nbproject/org-netbeans-modules-refactoring-api.sig
index 9722dbd..ccdf5ed 100644
--- a/ide/refactoring.api/nbproject/org-netbeans-modules-refactoring-api.sig
+++ b/ide/refactoring.api/nbproject/org-netbeans-modules-refactoring-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64.0
+#Version 1.65.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/RefactoringContextActionsProvider.java b/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/RefactoringContextActionsProvider.java
index 3bb54a0..21c6f67 100644
--- a/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/RefactoringContextActionsProvider.java
+++ b/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/RefactoringContextActionsProvider.java
@@ -79,6 +79,7 @@
     /**
       * @deprecated use @see #getMenuItems(boolean,Lookup)
       */
+    @Deprecated
     public JComponent[] getMenuItems(boolean reset) {
         return getMenuItems(reset, null);
     }
diff --git a/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/UndoableWrapper.java b/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/UndoableWrapper.java
index 4ac6096..d370822 100644
--- a/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/UndoableWrapper.java
+++ b/ide/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/UndoableWrapper.java
@@ -60,9 +60,9 @@
             return ed;
         final Object stream = doc.getProperty(BaseDocument.StreamDescriptionProperty);
         DataObject dob = null;
-        if(stream != null && stream instanceof DataObject) {
+        if(stream instanceof DataObject) {
             dob = (DataObject) stream;
-        } else if(stream != null && stream instanceof FileObject) {
+        } else if(stream instanceof FileObject) {
             FileObject fileObject = (FileObject) stream;
             try {
                 dob = DataObject.find(fileObject);
diff --git a/ide/schema2beans/nbproject/org-netbeans-modules-schema2beans.sig b/ide/schema2beans/nbproject/org-netbeans-modules-schema2beans.sig
index f2c660c..b10e1fa 100644
--- a/ide/schema2beans/nbproject/org-netbeans-modules-schema2beans.sig
+++ b/ide/schema2beans/nbproject/org-netbeans-modules-schema2beans.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64
+#Version 1.65
 
 CLSS public abstract interface java.beans.BeanInfo
 fld public final static int ICON_COLOR_16x16 = 1
diff --git a/ide/schema2beans/src/org/netbeans/modules/schema2beans/DDRegistryParser.java b/ide/schema2beans/src/org/netbeans/modules/schema2beans/DDRegistryParser.java
index f7c92c6..64178af 100644
--- a/ide/schema2beans/src/org/netbeans/modules/schema2beans/DDRegistryParser.java
+++ b/ide/schema2beans/src/org/netbeans/modules/schema2beans/DDRegistryParser.java
@@ -131,7 +131,7 @@
 		    int in = path.indexOf(':');
 		    if (in != -1) {
 			String name = path.substring(in+1);
-			path = this.getDDNameValue(cur, name).toString();;
+			path = this.getDDNameValue(cur, name).toString();
 			path = cur.getRegistry().getName(path);
 		    } else {
 			path = cur.getRegistry().getName(cur);
diff --git a/ide/schema2beans/src/org/netbeans/modules/schema2beans/XMLUtil.java b/ide/schema2beans/src/org/netbeans/modules/schema2beans/XMLUtil.java
index f4f25c2..e881234 100644
--- a/ide/schema2beans/src/org/netbeans/modules/schema2beans/XMLUtil.java
+++ b/ide/schema2beans/src/org/netbeans/modules/schema2beans/XMLUtil.java
@@ -41,6 +41,7 @@
 
     /** @deprecated this public method is not expected to be used by schema2beans client 
      */
+    @Deprecated
     public static void printXML(StringBuffer out, char msg, boolean attribute) {
         if (msg == '&')
             out.append("&amp;");
@@ -77,7 +78,8 @@
 	}
         
         /** @deprecated this public method is not expected to be used by schema2beans client 
-         */ 
+         */
+    @Deprecated
 	public static void writeXML(java.io.Writer out, char msg, boolean attribute) throws java.io.IOException {
 		if (msg == '&')
 			out.write("&amp;");
@@ -166,6 +168,7 @@
     
     /** @deprecated this public method is not expected to be used by schema2beans client 
      */
+    @Deprecated
     public static void printXML(java.io.Writer out, char msg, boolean attribute) throws java.io.IOException {
         if (msg == '&')
             out.write("&amp;");
diff --git a/ide/schema2beans/src/org/netbeans/modules/schema2beansdev/GenBeans.java b/ide/schema2beans/src/org/netbeans/modules/schema2beansdev/GenBeans.java
index 939d62a..048d5cf 100644
--- a/ide/schema2beans/src/org/netbeans/modules/schema2beansdev/GenBeans.java
+++ b/ide/schema2beans/src/org/netbeans/modules/schema2beansdev/GenBeans.java
@@ -441,6 +441,7 @@
         /**
          * @deprecated  use setMddIn instead
          */
+        @Deprecated
         public void setMDDIn(java.io.InputStream value) {
             setMddIn(value);
         }
@@ -448,6 +449,7 @@
         /**
          * @deprecated  use setFileIn instead
          */
+        @Deprecated
         public void setDTDIn(java.io.InputStream value) {
             setFileIn(value);
         }
diff --git a/ide/schema2beans/test/unit/data/TestContrivedApp.java b/ide/schema2beans/test/unit/data/TestContrivedApp.java
index c4bcf36..b2d06fc 100644
--- a/ide/schema2beans/test/unit/data/TestContrivedApp.java
+++ b/ide/schema2beans/test/unit/data/TestContrivedApp.java
@@ -66,7 +66,7 @@
         out("bean graph created");
 	
         out(app);
-        Module module = app.getModule();
+        application.Module module = app.getModule();
         out("module.myaltDd = "+module.getMyAltDd());
         out("Make sure XML metacharacters get escapped");
         module.setMyAltDd("Foo & Co");
diff --git a/ide/schema2beans/test/unit/data/TestVeto.java b/ide/schema2beans/test/unit/data/TestVeto.java
index bd461ba..0a4682a 100644
--- a/ide/schema2beans/test/unit/data/TestVeto.java
+++ b/ide/schema2beans/test/unit/data/TestVeto.java
@@ -62,7 +62,7 @@
 		//	Used to check that the event is triggered once the changed are done
 		Chapter			tracePara;
 		
-		boolean			raise = false;;
+		boolean			raise = false;
 		boolean			raised = false;
 		boolean			printStringArray = false;
 
diff --git a/ide/schema2beans/test/unit/src/tests/MainTest.java b/ide/schema2beans/test/unit/src/tests/MainTest.java
index c8ad978..2df9307 100644
--- a/ide/schema2beans/test/unit/src/tests/MainTest.java
+++ b/ide/schema2beans/test/unit/src/tests/MainTest.java
@@ -21,7 +21,6 @@
 import java.io.*;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import junit.framework.*;
 import org.netbeans.junit.*;
 
 import org.netbeans.modules.schema2beans.*;
@@ -481,6 +480,7 @@
     //protected File dataDir;
     protected String theClassPath = "";
     
+    @Override
     protected void setUp() {
         // when running this code inside IDE, getResource method returns URL in NBFS
         // format, so we need to convert it to filename
@@ -517,6 +517,7 @@
         }
     }
     
+    @Override
     protected void tearDown() {
         compareReferenceFiles();
     }
@@ -524,6 +525,7 @@
     // XXX: temporarily overriding compareReferenceFiles() to dump differences as
     // I do not know what problem there is on javaee continual tester as there is
     // no access to diff files
+    @Override
     public void compareReferenceFiles(String testFilename, String goldenFilename, String diffFilename) {
         try {
             File goldenFile = getGoldenFile(goldenFilename);
@@ -535,10 +537,10 @@
                 message += "; check "+diffFile;
             }
             try {
-            assertFile(message, testFile, goldenFile, diffFile);
+                assertFile(message, testFile, goldenFile, diffFile);
             } catch (AssertionFileFailedError e) {
                 BufferedReader diffFileReader = new BufferedReader(new FileReader(diffFile));
-                StringBuffer diff = new StringBuffer();
+                StringBuilder diff = new StringBuilder();
                 try {
                     String ss = diffFileReader.readLine();
                     while (ss != null) {
@@ -558,20 +560,20 @@
 
 
     public void ref(File f) throws IOException {
-        Reader r = new FileReader(f);
-        char buf[] = new char[1024];
-        StringBuffer s = new StringBuffer();
-        int len;
-        while ((len = r.read(buf, 0, 1024)) > 0) {
-            s.append(buf, 0, len);
+        try (Reader r = new FileReader(f)) {
+            char buf[] = new char[1024];
+            StringBuilder s = new StringBuilder();
+            int len;
+            while ((len = r.read(buf, 0, 1024)) > 0) {
+                s.append(buf, 0, len);
+            }
+            ref(s.toString());
         }
-        r.close();
-        ref(s.toString());
     }
     
     private String getJdkHome(){
-        if (Utilities.isMac())
-            return System.getProperty("java.home") + File.separator + "bin" + File.separator;
+        if (Utilities.isMac() || System.getProperty("java.version").startsWith("1.") == false)
+            return System.getProperty("java.home") + File.separator + "bin" + File.separator;  // mac or JDK 9+
         else
             return System.getProperty("java.home") + File.separator + ".." + File.separator + "bin" + File.separator;
 
diff --git a/ide/selenium2.server/nbproject/org-netbeans-modules-selenium2-server.sig b/ide/selenium2.server/nbproject/org-netbeans-modules-selenium2-server.sig
index cafe538..fd980c9 100644
--- a/ide/selenium2.server/nbproject/org-netbeans-modules-selenium2-server.sig
+++ b/ide/selenium2.server/nbproject/org-netbeans-modules-selenium2-server.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.20
+#Version 1.21
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/selenium2.server/nbproject/project.properties b/ide/selenium2.server/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/selenium2.server/nbproject/project.properties
+++ b/ide/selenium2.server/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/selenium2/nbproject/org-netbeans-modules-selenium2.sig b/ide/selenium2/nbproject/org-netbeans-modules-selenium2.sig
index 5f0bf50..e462b49 100644
--- a/ide/selenium2/nbproject/org-netbeans-modules-selenium2.sig
+++ b/ide/selenium2/nbproject/org-netbeans-modules-selenium2.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.22
+#Version 1.23
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/server/nbproject/org-netbeans-modules-server.sig b/ide/server/nbproject/org-netbeans-modules-server.sig
index bfd3008..5f70e11 100644
--- a/ide/server/nbproject/org-netbeans-modules-server.sig
+++ b/ide/server/nbproject/org-netbeans-modules-server.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/server/nbproject/project.properties b/ide/server/nbproject/project.properties
index bdbfced..5caac22 100644
--- a/ide/server/nbproject/project.properties
+++ b/ide/server/nbproject/project.properties
@@ -18,7 +18,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/ide/servletapi/nbproject/org-netbeans-modules-servletapi.sig b/ide/servletapi/nbproject/org-netbeans-modules-servletapi.sig
index fb1caa7..5d9c874 100644
--- a/ide/servletapi/nbproject/org-netbeans-modules-servletapi.sig
+++ b/ide/servletapi/nbproject/org-netbeans-modules-servletapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.56
+#Version 1.57
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/ide/spellchecker.apimodule/nbproject/org-netbeans-modules-spellchecker-apimodule.sig b/ide/spellchecker.apimodule/nbproject/org-netbeans-modules-spellchecker-apimodule.sig
index f141c0c..b49989e 100644
--- a/ide/spellchecker.apimodule/nbproject/org-netbeans-modules-spellchecker-apimodule.sig
+++ b/ide/spellchecker.apimodule/nbproject/org-netbeans-modules-spellchecker-apimodule.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/spellchecker.apimodule/nbproject/project.properties b/ide/spellchecker.apimodule/nbproject/project.properties
index 45d0853..93aded3 100644
--- a/ide/spellchecker.apimodule/nbproject/project.properties
+++ b/ide/spellchecker.apimodule/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 nbm.homepage=http://spellchecker.netbeans.org
 nbm.module.author=Jan Lahoda
diff --git a/ide/spellchecker.bindings.htmlxml/nbproject/project.properties b/ide/spellchecker.bindings.htmlxml/nbproject/project.properties
index 1d73820..d8eefe3 100644
--- a/ide/spellchecker.bindings.htmlxml/nbproject/project.properties
+++ b/ide/spellchecker.bindings.htmlxml/nbproject/project.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 is.eager=true
 
 javadoc.arch=${basedir}/arch.xml
diff --git a/ide/spellchecker.bindings.properties/nbproject/project.properties b/ide/spellchecker.bindings.properties/nbproject/project.properties
index cdc8124..e674fab 100644
--- a/ide/spellchecker.bindings.properties/nbproject/project.properties
+++ b/ide/spellchecker.bindings.properties/nbproject/project.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 is.eager=true
 
 javadoc.arch=${basedir}/arch.xml
diff --git a/ide/spellchecker.dictionary_en/nbproject/project.properties b/ide/spellchecker.dictionary_en/nbproject/project.properties
index b9efabd..2dac7a9 100644
--- a/ide/spellchecker.dictionary_en/nbproject/project.properties
+++ b/ide/spellchecker.dictionary_en/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 release.external/wordlist-en_GB-large-2017.08.24.zip=modules/dict/wordlist-en_GB-large-2017.08.24.zip
 release.external/wordlist-en_US-large-2017.08.24.zip=modules/dict/wordlist-en_US-large-2017.08.24.zip
 jnlp.indirect.files=modules/dict/dictionary_en_US.description,modules/dict/dictionary_en_GB.description,modules/dict/dictionary_en.description,modules/dict/wordlist-en_GB-large-2017.08.24.zip,modules/dict/wordlist-en_US-large-2017.08.24.zip
diff --git a/ide/spi.debugger.ui/nbproject/org-netbeans-spi-debugger-ui.sig b/ide/spi.debugger.ui/nbproject/org-netbeans-spi-debugger-ui.sig
index 5e57ed8..ad6fec7 100644
--- a/ide/spi.debugger.ui/nbproject/org-netbeans-spi-debugger-ui.sig
+++ b/ide/spi.debugger.ui/nbproject/org-netbeans-spi-debugger-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.75
+#Version 2.76
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/spi.debugger.ui/src/org/netbeans/modules/debugger/ui/DebuggerManagerListener.java b/ide/spi.debugger.ui/src/org/netbeans/modules/debugger/ui/DebuggerManagerListener.java
index 9b3a4ea..f608374 100644
--- a/ide/spi.debugger.ui/src/org/netbeans/modules/debugger/ui/DebuggerManagerListener.java
+++ b/ide/spi.debugger.ui/src/org/netbeans/modules/debugger/ui/DebuggerManagerListener.java
@@ -309,7 +309,7 @@
                     }
                 }
             }
-            if (a != null && a instanceof DebuggerAction) {
+            if (a instanceof DebuggerAction) {
                 return (DebuggerAction) a;
             }
         }
diff --git a/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/Constants.java b/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/Constants.java
index 03cc018..efe3127 100644
--- a/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/Constants.java
+++ b/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/Constants.java
@@ -55,7 +55,8 @@
      * @see org.netbeans.spi.viewmodel.ColumnModel#getPreviuosColumnID
      * @see org.netbeans.spi.viewmodel.ColumnModel#getNextColumnID
      */
-    public static final String BREAKPOINT_ENABLED_COLUMN_ID = 
+    @Deprecated
+    public static final String BREAKPOINT_ENABLED_COLUMN_ID =
         "BreakpointEnabled";
 
     /**
diff --git a/ide/spi.editor.hints.projects/nbproject/org-netbeans-spi-editor-hints-projects.sig b/ide/spi.editor.hints.projects/nbproject/org-netbeans-spi-editor-hints-projects.sig
index 4b652ed..6938be4 100644
--- a/ide/spi.editor.hints.projects/nbproject/org-netbeans-spi-editor-hints-projects.sig
+++ b/ide/spi.editor.hints.projects/nbproject/org-netbeans-spi-editor-hints-projects.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.28.0
+#Version 1.29.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/spi.editor.hints/nbproject/org-netbeans-spi-editor-hints.sig b/ide/spi.editor.hints/nbproject/org-netbeans-spi-editor-hints.sig
index 50f867c..30ca834 100644
--- a/ide/spi.editor.hints/nbproject/org-netbeans-spi-editor-hints.sig
+++ b/ide/spi.editor.hints/nbproject/org-netbeans-spi-editor-hints.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59.0
+#Version 1.60.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/spi.editor.hints/src/org/netbeans/spi/editor/hints/ErrorDescriptionFactory.java b/ide/spi.editor.hints/src/org/netbeans/spi/editor/hints/ErrorDescriptionFactory.java
index 113667a..5ebc501 100644
--- a/ide/spi.editor.hints/src/org/netbeans/spi/editor/hints/ErrorDescriptionFactory.java
+++ b/ide/spi.editor.hints/src/org/netbeans/spi/editor/hints/ErrorDescriptionFactory.java
@@ -271,8 +271,8 @@
         Parameters.notNull("file", file);
         Parameters.notNull("starts", starts);
         Parameters.notNull("ends", ends);        
-        if (starts.length == 0 || starts[0] < 0) throw new IndexOutOfBoundsException("start < 0 (" + starts + " < 0)");;//NOI18N
-        if ( ends.length == 0 || ends[0] < 0) throw new IndexOutOfBoundsException("end < 0 (" + ends + " < 0)");;//NOI18N
+        if (starts.length == 0 || starts[0] < 0) throw new IndexOutOfBoundsException("start < 0 (" + starts + " < 0)");//NOI18N
+        if ( ends.length == 0 || ends[0] < 0) throw new IndexOutOfBoundsException("end < 0 (" + ends + " < 0)");//NOI18N
         if (ends.length != starts.length) throw new IndexOutOfBoundsException("starts lentgh:" + starts.length + " != " + ends.length + " ends length");//NOI18N
         PositionBounds span = HintsControllerImpl.linePart(file, starts[0], ends[0]);
         ArrayList<PositionBounds> spanTail = new ArrayList<>();
@@ -281,7 +281,7 @@
                 //just skip if starts greater or equals to end, no need to throw exception
                 if (starts[i] >= ends[i]) {
                     //log and continue
-                    Logger.getLogger(ErrorDescriptionFactory.class.getName()).log(Level.INFO, "Incorrect span,  start=" + starts[i] + ", end=" + ends[i], new Exception());;//NOI18N
+                    Logger.getLogger(ErrorDescriptionFactory.class.getName()).log(Level.INFO, "Incorrect span,  start=" + starts[i] + ", end=" + ends[i], new Exception());//NOI18N
                     continue;
                 }
                 spanTail.add(HintsControllerImpl.linePart(file, starts[i], ends[i]));
@@ -366,8 +366,8 @@
         Parameters.notNull("ends", ends);                
         DataObject od = (DataObject) doc.getProperty(Document.StreamDescriptionProperty);
         FileObject file = od != null ? od.getPrimaryFile() : null;
-        if (starts.length == 0 || starts[0] < 0) throw new IndexOutOfBoundsException("start < 0 (" + starts + " < 0)");;//NOI18N
-        if ( ends.length == 0 || ends[0] < 0) throw new IndexOutOfBoundsException("end < 0 (" + ends + " < 0)");;//NOI18N
+        if (starts.length == 0 || starts[0] < 0) throw new IndexOutOfBoundsException("start < 0 (" + starts + " < 0)");//NOI18N
+        if ( ends.length == 0 || ends[0] < 0) throw new IndexOutOfBoundsException("end < 0 (" + ends + " < 0)");//NOI18N
         if (ends.length != starts.length) throw new IndexOutOfBoundsException("starts lentgh:" + starts.length + " != " + ends.length + " ends length");//NOI18N
         PositionBounds span = HintsControllerImpl.linePart(file, starts[0], ends[0]);
         ArrayList<PositionBounds> spanTail = new ArrayList<>();
@@ -376,7 +376,7 @@
                 //just skip if starts greater or equals to end
                 if (starts[i] >= ends[i]) {
                     //log and continue
-                    Logger.getLogger(ErrorDescriptionFactory.class.getName()).log(Level.INFO, "Incorrect span,  start=" + starts[i] + ", end=" + ends[i], new Exception());;//NOI18N
+                    Logger.getLogger(ErrorDescriptionFactory.class.getName()).log(Level.INFO, "Incorrect span,  start=" + starts[i] + ", end=" + ends[i], new Exception());//NOI18N
                     continue;
                 }
                 spanTail.add(HintsControllerImpl.linePart(file, starts[i], ends[i]));
diff --git a/ide/spi.navigator/nbproject/org-netbeans-spi-navigator.sig b/ide/spi.navigator/nbproject/org-netbeans-spi-navigator.sig
index 2f1a9c9..89094cd 100644
--- a/ide/spi.navigator/nbproject/org-netbeans-spi-navigator.sig
+++ b/ide/spi.navigator/nbproject/org-netbeans-spi-navigator.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.55
+#Version 1.56
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/spi.navigator/src/org/netbeans/modules/navigator/NavigatorTC.java b/ide/spi.navigator/src/org/netbeans/modules/navigator/NavigatorTC.java
index 27c258b..b59ab20 100644
--- a/ide/spi.navigator/src/org/netbeans/modules/navigator/NavigatorTC.java
+++ b/ide/spi.navigator/src/org/netbeans/modules/navigator/NavigatorTC.java
@@ -316,7 +316,7 @@
 
     @Override
     public UndoRedo getUndoRedo() {
-        if (selectedPanel == null || !(selectedPanel instanceof NavigatorPanelWithUndo)) {
+        if (!(selectedPanel instanceof NavigatorPanelWithUndo)) {
             return UndoRedo.NONE;
         }
         return ((NavigatorPanelWithUndo)selectedPanel).getUndoRedo();
diff --git a/ide/spi.palette/nbproject/org-netbeans-spi-palette.sig b/ide/spi.palette/nbproject/org-netbeans-spi-palette.sig
index 209629c..29fe5cd 100644
--- a/ide/spi.palette/nbproject/org-netbeans-spi-palette.sig
+++ b/ide/spi.palette/nbproject/org-netbeans-spi-palette.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.63
+#Version 1.64
 
 CLSS public abstract interface java.io.Externalizable
 intf java.io.Serializable
diff --git a/ide/spi.palette/src/org/netbeans/modules/palette/DefaultItem.java b/ide/spi.palette/src/org/netbeans/modules/palette/DefaultItem.java
index 0354483..697bd96 100644
--- a/ide/spi.palette/src/org/netbeans/modules/palette/DefaultItem.java
+++ b/ide/spi.palette/src/org/netbeans/modules/palette/DefaultItem.java
@@ -80,7 +80,7 @@
     }
 
     public boolean equals(Object obj) {
-        if( null == obj || !(obj instanceof DefaultItem) )
+        if(!(obj instanceof DefaultItem))
             return false;
         
         return itemNode.equals( ((DefaultItem) obj).itemNode );
diff --git a/ide/spi.palette/src/org/netbeans/modules/palette/ItemNode.java b/ide/spi.palette/src/org/netbeans/modules/palette/ItemNode.java
index 3b04b57..1a139a2 100644
--- a/ide/spi.palette/src/org/netbeans/modules/palette/ItemNode.java
+++ b/ide/spi.palette/src/org/netbeans/modules/palette/ItemNode.java
@@ -148,7 +148,7 @@
         PaletteActions customActions = getCustomActions();
         
         if( null == customActions )
-            return null;;
+            return null;
         
         return customActions.getPreferredAction( getLookup() );
     }
diff --git a/ide/spi.palette/src/org/netbeans/modules/palette/Utils.java b/ide/spi.palette/src/org/netbeans/modules/palette/Utils.java
index a487d58..669848e 100644
--- a/ide/spi.palette/src/org/netbeans/modules/palette/Utils.java
+++ b/ide/spi.palette/src/org/netbeans/modules/palette/Utils.java
@@ -199,7 +199,7 @@
     public static boolean isOpenedByUser( TopComponent tc ) {
         Object val = tc.getClientProperty( "userOpened" );
         tc.putClientProperty("userOpened", null);
-        return null != val && val instanceof Boolean && ((Boolean)val).booleanValue();
+        return val instanceof Boolean && ((Boolean) val).booleanValue();
     }
 
     /**
diff --git a/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryButton.java b/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryButton.java
index 7b9f750..af375d2 100644
--- a/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryButton.java
+++ b/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryButton.java
@@ -275,7 +275,7 @@
                 policy = kfm.getDefaultFocusTraversalPolicy();
             Component next = moveDown ? policy.getComponentAfter( container, CategoryButton.this )
                                       : policy.getComponentBefore( container, CategoryButton.this );
-            if( null != next && next instanceof CategoryList ) {
+            if(next instanceof CategoryList) {
                 if( ((CategoryList)next).getModel().getSize() != 0 ) {
                     ((CategoryList)next).takeFocusFrom( CategoryButton.this );
                     return;
@@ -284,7 +284,7 @@
                                     : policy.getComponentBefore( container, next );
                 }
             }
-            if( null != next && next instanceof CategoryButton ) {
+            if(next instanceof CategoryButton) {
                 next.requestFocus();
             }
         }
diff --git a/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryList.java b/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryList.java
index 503bc80..e69d3fe 100644
--- a/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryList.java
+++ b/ide/spi.palette/src/org/netbeans/modules/palette/ui/CategoryList.java
@@ -564,7 +564,7 @@
                 policy = kfm.getDefaultFocusTraversalPolicy();
             Component next = focusNext ? policy.getComponentAfter( container, CategoryList.this )
                                       : policy.getComponentBefore( container, CategoryList.this );
-            if( null != next && next instanceof CategoryButton ) {
+            if(next instanceof CategoryButton) {
                 clearSelection();
                 next.requestFocus();
             }
diff --git a/ide/spi.tasklist/nbproject/org-netbeans-spi-tasklist.sig b/ide/spi.tasklist/nbproject/org-netbeans-spi-tasklist.sig
index 1950ab7..ea95e1a 100644
--- a/ide/spi.tasklist/nbproject/org-netbeans-spi-tasklist.sig
+++ b/ide/spi.tasklist/nbproject/org-netbeans-spi-tasklist.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.52.0
+#Version 1.53.0
 
 CLSS public abstract interface java.lang.Iterable<%0 extends java.lang.Object>
 meth public abstract java.util.Iterator<{java.lang.Iterable%0}> iterator()
diff --git a/ide/spi.viewmodel/nbproject/org-netbeans-spi-viewmodel.sig b/ide/spi.viewmodel/nbproject/org-netbeans-spi-viewmodel.sig
index 595bbb6..cec9fa6 100644
--- a/ide/spi.viewmodel/nbproject/org-netbeans-spi-viewmodel.sig
+++ b/ide/spi.viewmodel/nbproject/org-netbeans-spi-viewmodel.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.68
+#Version 1.69
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/spi.viewmodel/nbproject/project.properties b/ide/spi.viewmodel/nbproject/project.properties
index a95ebab..0a0d93d 100644
--- a/ide/spi.viewmodel/nbproject/project.properties
+++ b/ide/spi.viewmodel/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 # Need extra runtime dependency on modules which are loaded transitively:
diff --git a/ide/spi.viewmodel/src/org/netbeans/spi/viewmodel/ColumnModel.java b/ide/spi.viewmodel/src/org/netbeans/spi/viewmodel/ColumnModel.java
index b2a203d..b435c1a 100644
--- a/ide/spi.viewmodel/src/org/netbeans/spi/viewmodel/ColumnModel.java
+++ b/ide/spi.viewmodel/src/org/netbeans/spi/viewmodel/ColumnModel.java
@@ -54,6 +54,7 @@
      * @since 1.11
      * @deprecated Use ampersand in {@link #getDisplayName()}.
      */
+    @Deprecated
     public Character getDisplayedMnemonic() {
         return null;
     }
@@ -76,6 +77,7 @@
      * <code>null</code>
      * @deprecated Not used. See {@link #getCurrentOrderNumber}.
      */
+    @Deprecated
     public String getPreviuosColumnID () {
         return null;
     }
@@ -90,6 +92,7 @@
      * @return ID of column next to this one or <code>null</code>
      * @deprecated Not used. See {@link #getCurrentOrderNumber}.
      */
+    @Deprecated
     public String getNextColumnID () {
         return null;
     }
diff --git a/ide/subversion/nbproject/org-netbeans-modules-subversion.sig b/ide/subversion/nbproject/org-netbeans-modules-subversion.sig
index bd0f76b..072eaf9 100644
--- a/ide/subversion/nbproject/org-netbeans-modules-subversion.sig
+++ b/ide/subversion/nbproject/org-netbeans-modules-subversion.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.58.0
+#Version 1.59.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/subversion/src/org/netbeans/modules/subversion/HistoryProvider.java b/ide/subversion/src/org/netbeans/modules/subversion/HistoryProvider.java
index 40cde84..aa64982 100644
--- a/ide/subversion/src/org/netbeans/modules/subversion/HistoryProvider.java
+++ b/ide/subversion/src/org/netbeans/modules/subversion/HistoryProvider.java
@@ -192,7 +192,7 @@
                 FileUtils.copyFile(file, revisionFile); // XXX lets be faster - LH should cache that somehow ...
             } catch (IOException e) {
                 Exception ex = e;
-                if (e.getCause() != null && e.getCause() instanceof SVNClientException) {
+                if (e.getCause() instanceof SVNClientException) {
                     ex = (SVNClientException) e.getCause();
                 }
                 if (SvnClientExceptionHandler.isCancelledAction(ex.getMessage())) {
diff --git a/ide/subversion/src/org/netbeans/modules/subversion/client/SvnClientInvocationHandler.java b/ide/subversion/src/org/netbeans/modules/subversion/client/SvnClientInvocationHandler.java
index 284f365..a279265 100644
--- a/ide/subversion/src/org/netbeans/modules/subversion/client/SvnClientInvocationHandler.java
+++ b/ide/subversion/src/org/netbeans/modules/subversion/client/SvnClientInvocationHandler.java
@@ -394,7 +394,7 @@
         if (args != null) {
             for (int i = 0; i < args.length; ++i) {
                 Object arg = args[i];
-                if (arg != null && arg instanceof SVNUrl) {
+                if (arg instanceof SVNUrl) {
                     try {
                         args[i] = SvnUtils.decodeAndEncodeUrl((SVNUrl) arg);
                     } catch (MalformedURLException ex) {
diff --git a/ide/subversion/src/org/netbeans/modules/subversion/client/cli/commands/ListCommand.java b/ide/subversion/src/org/netbeans/modules/subversion/client/cli/commands/ListCommand.java
index 4b788b3..8d1123b 100644
--- a/ide/subversion/src/org/netbeans/modules/subversion/client/cli/commands/ListCommand.java
+++ b/ide/subversion/src/org/netbeans/modules/subversion/client/cli/commands/ListCommand.java
@@ -132,7 +132,7 @@
 
         private String REVISION_ATTR                    = "revision_attr";
         private String KIND_ATTR                        = "kind_attr";
-        private String PATH_ATTR                        = "path_attr";;
+        private String PATH_ATTR                        = "path_attr";
         
         private List<ISVNDirEntry> entries = new ArrayList<ISVNDirEntry>();        
 //        <?xml version="1.0"?>
diff --git a/ide/subversion/src/org/netbeans/modules/subversion/ui/commit/CommitPanel.java b/ide/subversion/src/org/netbeans/modules/subversion/ui/commit/CommitPanel.java
index 7ca61cc..4e27036 100644
--- a/ide/subversion/src/org/netbeans/modules/subversion/ui/commit/CommitPanel.java
+++ b/ide/subversion/src/org/netbeans/modules/subversion/ui/commit/CommitPanel.java
@@ -302,7 +302,7 @@
             JTabbedPane hooksTabbedPane = new JTabbedPane();
             for (SvnHook hook : hooks) {
                 hooksTabbedPane.add(hook.createComponent(hookContext),
-                                    hook.getDisplayName().replaceAll("\\&", ""));
+                                    hook.getDisplayName().replace("&", ""));
             }
             hooksSectionPanel.add(hooksTabbedPane);
         }
diff --git a/ide/swing.validation/nbproject/org-netbeans-modules-swing-validation.sig b/ide/swing.validation/nbproject/org-netbeans-modules-swing-validation.sig
index faf1ec8..893c7c4 100644
--- a/ide/swing.validation/nbproject/org-netbeans-modules-swing-validation.sig
+++ b/ide/swing.validation/nbproject/org-netbeans-modules-swing-validation.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/swing.validation/nbproject/project.properties b/ide/swing.validation/nbproject/project.properties
index 3db3fd7..5390941 100644
--- a/ide/swing.validation/nbproject/project.properties
+++ b/ide/swing.validation/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 nbm.homepage=https://github.com/timboudreau/simplevalidation/
diff --git a/ide/target.iterator/nbproject/org-netbeans-modules-target-iterator.sig b/ide/target.iterator/nbproject/org-netbeans-modules-target-iterator.sig
index 580d464..d6505eb 100644
--- a/ide/target.iterator/nbproject/org-netbeans-modules-target-iterator.sig
+++ b/ide/target.iterator/nbproject/org-netbeans-modules-target-iterator.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41
+#Version 1.42
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/tasklist.projectint/nbproject/project.properties b/ide/tasklist.projectint/nbproject/project.properties
index 44666d3..4d3d434 100644
--- a/ide/tasklist.projectint/nbproject/project.properties
+++ b/ide/tasklist.projectint/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
diff --git a/ide/tasklist.todo/nbproject/project.properties b/ide/tasklist.todo/nbproject/project.properties
index 39cb58f..675ecc6 100644
--- a/ide/tasklist.todo/nbproject/project.properties
+++ b/ide/tasklist.todo/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 spec.version.base=1.50.0
 #hook for apisupport TestBase
 test-unit-sys-prop.test.nbcvsroot=${nb_all}
diff --git a/ide/team.commons/nbproject/org-netbeans-modules-team-commons.sig b/ide/team.commons/nbproject/org-netbeans-modules-team-commons.sig
index c996614..b96f5ab 100644
--- a/ide/team.commons/nbproject/org-netbeans-modules-team-commons.sig
+++ b/ide/team.commons/nbproject/org-netbeans-modules-team-commons.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.67
+#Version 1.68
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/team.commons/src/org/netbeans/modules/team/commons/treelist/AsynchronousNode.java b/ide/team.commons/src/org/netbeans/modules/team/commons/treelist/AsynchronousNode.java
index 663e7b3..9da5a4e 100644
--- a/ide/team.commons/src/org/netbeans/modules/team/commons/treelist/AsynchronousNode.java
+++ b/ide/team.commons/src/org/netbeans/modules/team/commons/treelist/AsynchronousNode.java
@@ -58,7 +58,7 @@
     private Loader loader;
     private final Object LOCK = new Object();
     private JLabel lblFill;
-    private boolean expandAfterRefresh;;
+    private boolean expandAfterRefresh;
     private final String title;
     private final Icon icon;
     private static final RequestProcessor RP = new RequestProcessor("Asynchronous Tree List Node - Loader", 5); // NOI18N
diff --git a/ide/team.ide/nbproject/project.properties b/ide/team.ide/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/team.ide/nbproject/project.properties
+++ b/ide/team.ide/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/terminal.nb/nbproject/org-netbeans-modules-terminal-nb.sig b/ide/terminal.nb/nbproject/org-netbeans-modules-terminal-nb.sig
index f125fd2..3846dcb 100644
--- a/ide/terminal.nb/nbproject/org-netbeans-modules-terminal-nb.sig
+++ b/ide/terminal.nb/nbproject/org-netbeans-modules-terminal-nb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/terminal.nb/src/org/netbeans/modules/terminal/ioprovider/Terminal.java b/ide/terminal.nb/src/org/netbeans/modules/terminal/ioprovider/Terminal.java
index 2574aa5..8f5748f 100644
--- a/ide/terminal.nb/src/org/netbeans/modules/terminal/ioprovider/Terminal.java
+++ b/ide/terminal.nb/src/org/netbeans/modules/terminal/ioprovider/Terminal.java
@@ -670,7 +670,7 @@
         }
         findState.setVisible(true);
         Container ancestor = SwingUtilities.getAncestorOfClass(TerminalContainer.class, this);
-        if (ancestor != null && ancestor instanceof TerminalContainer) {
+        if (ancestor instanceof TerminalContainer) {
             Task t = new Task.ActivateSearch((TerminalContainer) ancestor, this);
             t.post();
         }
@@ -1043,7 +1043,7 @@
 	findAction.setEnabled(false);
         
         Container container = SwingUtilities.getAncestorOfClass(TerminalContainer.class, this);
-        boolean isTerminalContainer = (container != null && container instanceof TerminalContainer);
+        boolean isTerminalContainer = container instanceof TerminalContainer;
 	
 	JPopupMenu menu = Utilities.actionsToPopup(
 		new Action[]{
diff --git a/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/SwitchTabAction.java b/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/SwitchTabAction.java
index cac2283..3f2d231 100644
--- a/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/SwitchTabAction.java
+++ b/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/SwitchTabAction.java
@@ -65,7 +65,7 @@
     @Override
     protected void performAction() {
         Container container = SwingUtilities.getAncestorOfClass(TerminalContainer.class, getTerminal());
-        if (container != null && container instanceof TerminalContainer) {
+        if (container instanceof TerminalContainer) {
             TerminalContainer tc = (TerminalContainer) container;
             List<? extends Component> allTabs = tc.getAllTabs();
             try {
diff --git a/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/TerminalAction.java b/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/TerminalAction.java
index 76304d4..cd7375c 100644
--- a/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/TerminalAction.java
+++ b/ide/terminal.nb/src/org/netbeans/modules/terminal/nb/actions/TerminalAction.java
@@ -58,7 +58,7 @@
              */
             if (source instanceof Component) {
                 Container container = SwingUtilities.getAncestorOfClass(Terminal.class, (Component) source);
-                if (container != null && container instanceof Terminal) {
+                if (container instanceof Terminal) {
                     this.context = (Terminal) container;
                 }
             }
diff --git a/ide/terminal/nbproject/org-netbeans-modules-terminal.sig b/ide/terminal/nbproject/org-netbeans-modules-terminal.sig
index f3152c3..fa90218 100644
--- a/ide/terminal/nbproject/org-netbeans-modules-terminal.sig
+++ b/ide/terminal/nbproject/org-netbeans-modules-terminal.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.44
+#Version 1.45
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/terminal/nbproject/project.properties b/ide/terminal/nbproject/project.properties
index bf03c09..6672471 100644
--- a/ide/terminal/nbproject/project.properties
+++ b/ide/terminal/nbproject/project.properties
@@ -25,7 +25,7 @@
 auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=8
 auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=8
 auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=80
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 nbm.homepage=http://wiki.netbeans.org/TerminalEmulator 
diff --git a/ide/textmate.lexer/nbproject/org-netbeans-modules-textmate-lexer.sig b/ide/textmate.lexer/nbproject/org-netbeans-modules-textmate-lexer.sig
index 858f815..2557092 100644
--- a/ide/textmate.lexer/nbproject/org-netbeans-modules-textmate-lexer.sig
+++ b/ide/textmate.lexer/nbproject/org-netbeans-modules-textmate-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17.0
+#Version 1.18.0
 
 CLSS public abstract interface java.lang.annotation.Annotation
 meth public abstract boolean equals(java.lang.Object)
diff --git a/ide/textmate.lexer/src/org/netbeans/modules/textmate/lexer/TextmateTokenId.java b/ide/textmate.lexer/src/org/netbeans/modules/textmate/lexer/TextmateTokenId.java
index 8eacdbe..be297b0 100644
--- a/ide/textmate.lexer/src/org/netbeans/modules/textmate/lexer/TextmateTokenId.java
+++ b/ide/textmate.lexer/src/org/netbeans/modules/textmate/lexer/TextmateTokenId.java
@@ -126,11 +126,11 @@
                 while (en.hasMoreElements()) {
                     FileObject candidate = en.nextElement();
                     Object attr = candidate.getAttribute(GRAMMAR_MARK);
-                    if (attr != null && attr instanceof String) {
+                    if (attr instanceof String) {
                         String scope = (String) attr;
                         scope2File.put(scope, candidate);
                         attr = candidate.getAttribute(INJECTION_MARK);
-                        if (attr != null && attr instanceof String) {
+                        if (attr instanceof String) {
                             for (String s : ((String)attr).split(",")) {
                                 scope2Injections.computeIfAbsent(s, str -> new ArrayList<>()).add(scope);
                             }
diff --git a/ide/utilities.project/nbproject/org-netbeans-modules-utilities-project.sig b/ide/utilities.project/nbproject/org-netbeans-modules-utilities-project.sig
index 717a39e..75f7fa2 100644
--- a/ide/utilities.project/nbproject/org-netbeans-modules-utilities-project.sig
+++ b/ide/utilities.project/nbproject/org-netbeans-modules-utilities-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.55
+#Version 1.56
 
 CLSS public abstract interface org.netbeans.modules.search.project.spi.CompatibilityUtils
 meth public abstract org.netbeans.api.search.provider.SearchInfo getSearchInfoForLookup(org.openide.util.Lookup)
diff --git a/ide/utilities.project/nbproject/project.properties b/ide/utilities.project/nbproject/project.properties
index f34147e..cba3c3e 100644
--- a/ide/utilities.project/nbproject/project.properties
+++ b/ide/utilities.project/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.eager=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 test.config.stableBTD.includes=**/*Test.class
 test.config.stableBTD.excludes=\
diff --git a/ide/utilities/nbproject/org-netbeans-modules-utilities.sig b/ide/utilities/nbproject/org-netbeans-modules-utilities.sig
index b65623a..063a1e3 100644
--- a/ide/utilities/nbproject/org-netbeans-modules-utilities.sig
+++ b/ide/utilities/nbproject/org-netbeans-modules-utilities.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.78
+#Version 1.79
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/utilities/nbproject/project.properties b/ide/utilities/nbproject/project.properties
index f6b0dc4..c00868d 100644
--- a/ide/utilities/nbproject/project.properties
+++ b/ide/utilities/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 #javac.compilerargs=-Xlint:unchecked
 
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/versioning.core/nbproject/org-netbeans-modules-versioning-core.sig b/ide/versioning.core/nbproject/org-netbeans-modules-versioning-core.sig
index 624b036..6012d0b 100644
--- a/ide/versioning.core/nbproject/org-netbeans-modules-versioning-core.sig
+++ b/ide/versioning.core/nbproject/org-netbeans-modules-versioning-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48.0
+#Version 1.49.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/versioning.core/nbproject/project.properties b/ide/versioning.core/nbproject/project.properties
index 86e25c9..09c939a 100644
--- a/ide/versioning.core/nbproject/project.properties
+++ b/ide/versioning.core/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 javadoc.name=Versioning
 spec.version.base=1.50.0
diff --git a/ide/versioning.core/src/org/netbeans/modules/versioning/core/filesystems/VCSFilesystemInterceptor.java b/ide/versioning.core/src/org/netbeans/modules/versioning/core/filesystems/VCSFilesystemInterceptor.java
index 607cd19..3dcc1ac 100644
--- a/ide/versioning.core/src/org/netbeans/modules/versioning/core/filesystems/VCSFilesystemInterceptor.java
+++ b/ide/versioning.core/src/org/netbeans/modules/versioning/core/filesystems/VCSFilesystemInterceptor.java
@@ -421,7 +421,7 @@
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
-            if (o == null || !(o instanceof FileEx)) return false;
+            if (!(o instanceof FileEx)) return false;
             FileEx fileEx = (FileEx) o;
             return isFolder == fileEx.isFolder && name.equals(fileEx.name) && parent.equals(fileEx.parent);
         }
diff --git a/ide/versioning.indexingbridge/nbproject/project.properties b/ide/versioning.indexingbridge/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/versioning.indexingbridge/nbproject/project.properties
+++ b/ide/versioning.indexingbridge/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/versioning.masterfs/nbproject/project.properties b/ide/versioning.masterfs/nbproject/project.properties
index 9ecf798..3fadda4 100644
--- a/ide/versioning.masterfs/nbproject/project.properties
+++ b/ide/versioning.masterfs/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test-unit-sys-prop.work.dir=${basedir}/build/test/unit/work
\ No newline at end of file
diff --git a/ide/versioning.system.cvss.installer/nbproject/project.properties b/ide/versioning.system.cvss.installer/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/ide/versioning.system.cvss.installer/nbproject/project.properties
+++ b/ide/versioning.system.cvss.installer/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/versioning.ui/nbproject/org-netbeans-modules-versioning-ui.sig b/ide/versioning.ui/nbproject/org-netbeans-modules-versioning-ui.sig
index c9220ed..8b71f20 100644
--- a/ide/versioning.ui/nbproject/org-netbeans-modules-versioning-ui.sig
+++ b/ide/versioning.ui/nbproject/org-netbeans-modules-versioning-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39.0
+#Version 1.40.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/diff/DiffSidebar.java b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/diff/DiffSidebar.java
index 32fbc8d..a387b6a 100644
--- a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/diff/DiffSidebar.java
+++ b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/diff/DiffSidebar.java
@@ -1102,7 +1102,7 @@
 
         if (dao instanceof MultiDataObject) {
             MultiDataObject.Entry entry = findEntryForFile((MultiDataObject) dao, fileObj);
-            if ((entry != null) && (entry instanceof CookieSet.Factory)) {
+            if (entry instanceof CookieSet.Factory) {
                 CookieSet.Factory factory = (CookieSet.Factory) entry;
                 return factory.createCookie(EditorCookie.class);   //can be null
             }
diff --git a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistoryFileView.java b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistoryFileView.java
index 0aa44d9..6611cb4 100644
--- a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistoryFileView.java
+++ b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistoryFileView.java
@@ -116,7 +116,7 @@
     
     private HistoryRootNode getRootNode() {
         Node rootContext = tablePanel.getExplorerManager().getRootContext();
-        if(rootContext == null || !(rootContext instanceof HistoryRootNode)) {
+        if(!(rootContext instanceof HistoryRootNode)) {
             return null;
         }  
         return (HistoryRootNode) rootContext;
diff --git a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistorySettings.java b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistorySettings.java
index 4c4439e..8452211 100644
--- a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistorySettings.java
+++ b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/HistorySettings.java
@@ -94,7 +94,7 @@
     }
     
     public boolean getLoadAll() {
-        return getPreferences().getBoolean(PROP_LOAD_ALL, false);
+        return getPreferences().getBoolean(PROP_LOAD_ALL, true);
 }
 
     public void setLoadAll(boolean loadAll) {
diff --git a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/RevisionNode.java b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/RevisionNode.java
index 02a3ee4..9452a15 100644
--- a/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/RevisionNode.java
+++ b/ide/versioning.ui/src/org/netbeans/modules/versioning/ui/history/RevisionNode.java
@@ -150,7 +150,7 @@
 
     @Override
     public int compareTo(Object obj) {
-        if( !(obj instanceof RevisionNode) || obj == null) {
+        if(!(obj instanceof RevisionNode)) {
             return -1;
         }
         RevisionNode node = (RevisionNode) obj;
@@ -436,7 +436,7 @@
         
         @Override
         public int compareTo(Object obj) {
-            if( !(obj instanceof FileNode) || obj == null) {
+            if(!(obj instanceof FileNode)) {
                 return -1;
             }
             FileNode node = (FileNode) obj;        
diff --git a/ide/versioning.util/nbproject/org-netbeans-modules-versioning-util.sig b/ide/versioning.util/nbproject/org-netbeans-modules-versioning-util.sig
index 8f340e9..8965301 100644
--- a/ide/versioning.util/nbproject/org-netbeans-modules-versioning-util.sig
+++ b/ide/versioning.util/nbproject/org-netbeans-modules-versioning-util.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.87.0
+#Version 1.88.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/versioning.util/src/org/netbeans/modules/versioning/util/Utils.java b/ide/versioning.util/src/org/netbeans/modules/versioning/util/Utils.java
index 78cc222..241427c 100644
--- a/ide/versioning.util/src/org/netbeans/modules/versioning/util/Utils.java
+++ b/ide/versioning.util/src/org/netbeans/modules/versioning/util/Utils.java
@@ -276,6 +276,7 @@
      * @since 1.54
      * @deprecated  use isForbiddenFolder(File) or isForbiddenFolder(VCSFileProxy)
      */
+    @Deprecated
     public static boolean isForbiddenFolder (String folderPath) {
         return forbiddenFolders.contains(folderPath);
     }
@@ -874,6 +875,7 @@
      * @link http://www.netbeans.org/issues/show_bug.cgi?id=105161
      * @return true if scanning for versioning system metadata is forbidden in the given folder, false otherwise
      */
+    @Deprecated
     public static boolean isScanForbidden(File folder) {
         return VersioningSupport.isExcluded(folder);
     }
@@ -1279,6 +1281,7 @@
      * @return priority or {@link Integer#MAX_VALUE} as default
      * @deprecated should not be used any more
      */
+    @Deprecated
     public static Integer getPriority (String versioningSystem) {
         Integer value = null;
         String propName = "versioning." + versioningSystem + ".priority"; //NOI18N
diff --git a/ide/versioning.util/src/org/netbeans/modules/versioning/util/common/CollapsiblePanel.java b/ide/versioning.util/src/org/netbeans/modules/versioning/util/common/CollapsiblePanel.java
index e42da20..85bf7e8 100644
--- a/ide/versioning.util/src/org/netbeans/modules/versioning/util/common/CollapsiblePanel.java
+++ b/ide/versioning.util/src/org/netbeans/modules/versioning/util/common/CollapsiblePanel.java
@@ -212,7 +212,7 @@
             } else {
                 JTabbedPane hooksTabbedPane = new JTabbedPane();
                 for (VCSHook hook : hooks) {
-                    hooksTabbedPane.add(hook.createComponent(hookContext), hook.getDisplayName().replaceAll("\\&", ""));
+                    hooksTabbedPane.add(hook.createComponent(hookContext), hook.getDisplayName().replace("&", ""));
                 }
                 sectionPanel.add(hooksTabbedPane);
             }
diff --git a/ide/versioning/nbproject/org-netbeans-modules-versioning.sig b/ide/versioning/nbproject/org-netbeans-modules-versioning.sig
index d2e513f..fbe96dd 100644
--- a/ide/versioning/nbproject/org-netbeans-modules-versioning.sig
+++ b/ide/versioning/nbproject/org-netbeans-modules-versioning.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64.0
+#Version 1.65.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/versioning/nbproject/project.properties b/ide/versioning/nbproject/project.properties
index 084252a..fb0b35e 100644
--- a/ide/versioning/nbproject/project.properties
+++ b/ide/versioning/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 javadoc.name=Versioning
 spec.version.base=1.66.0
diff --git a/ide/web.browser.api/nbproject/org-netbeans-modules-web-browser-api.sig b/ide/web.browser.api/nbproject/org-netbeans-modules-web-browser-api.sig
index a57af79..1f89af8 100644
--- a/ide/web.browser.api/nbproject/org-netbeans-modules-web-browser-api.sig
+++ b/ide/web.browser.api/nbproject/org-netbeans-modules-web-browser-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.62
+#Version 1.63
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowserPane.java b/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowserPane.java
index 407da89..e680623 100644
--- a/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowserPane.java
+++ b/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowserPane.java
@@ -217,13 +217,13 @@
     
     public void setProjectContext(Lookup projectContext) {
         lastProjectContext = projectContext;
-        if ( impl != null && impl instanceof EnhancedBrowser ){
+        if ( impl instanceof EnhancedBrowser ){
             ((EnhancedBrowser) impl).setProjectContext(projectContext);
         }
     }
 
     public boolean ignoreChange(FileObject fo) {
-        if (impl != null && impl instanceof EnhancedBrowser) {
+        if (impl instanceof EnhancedBrowser) {
             return ((EnhancedBrowser)impl).ignoreChange(fo);
         }
         return false;
diff --git a/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowsers.java b/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowsers.java
index 5b46a44..3de4b89 100644
--- a/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowsers.java
+++ b/ide/web.browser.api/src/org/netbeans/modules/web/browser/api/WebBrowsers.java
@@ -408,9 +408,9 @@
 
     static BrowserFamilyId getIDEOptionsBrowserFamily() {
         HtmlBrowser.Factory factory = IDESettings.getWWWBrowser();
-        if (factory != null && factory instanceof ExtWebBrowser) {
+        if (factory instanceof ExtWebBrowser) {
             return WebBrowserFactoryDescriptor.convertBrowserFamilyId(((ExtWebBrowser)factory).getPrivateBrowserFamilyId());
-        } else if (factory != null && factory instanceof EnhancedBrowserFactory) {
+        } else if (factory instanceof EnhancedBrowserFactory) {
             return ((EnhancedBrowserFactory)factory).getBrowserFamilyId();
         }
         return BrowserFamilyId.UNKNOWN;
diff --git a/ide/web.browser.api/src/org/netbeans/modules/web/browser/ui/ResizeOptionsCustomizer.java b/ide/web.browser.api/src/org/netbeans/modules/web/browser/ui/ResizeOptionsCustomizer.java
index c943fdc..2390908 100644
--- a/ide/web.browser.api/src/org/netbeans/modules/web/browser/ui/ResizeOptionsCustomizer.java
+++ b/ide/web.browser.api/src/org/netbeans/modules/web/browser/ui/ResizeOptionsCustomizer.java
@@ -264,7 +264,7 @@
         int selIndex = tblOptions.getSelectedRow();
         ResizeOption ro = selIndex < 0 ? null : options.get( selIndex );
         btnRemove.setEnabled( null != ro && !ro.isDefault() );
-        btnMoveUp.setEnabled( selIndex > 0 );;
+        btnMoveUp.setEnabled( selIndex > 0 );
         btnMoveDown.setEnabled( selIndex >= 0 && selIndex < tblOptions.getRowCount()-1 );
     }
 
diff --git a/ide/web.common.ui/nbproject/org-netbeans-modules-web-common-ui.sig b/ide/web.common.ui/nbproject/org-netbeans-modules-web-common-ui.sig
index 0ca6620..df9df98 100644
--- a/ide/web.common.ui/nbproject/org-netbeans-modules-web-common-ui.sig
+++ b/ide/web.common.ui/nbproject/org-netbeans-modules-web-common-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.18
+#Version 1.19
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/web.common/nbproject/org-netbeans-modules-web-common.sig b/ide/web.common/nbproject/org-netbeans-modules-web-common.sig
index bf836ee..4b6afe0 100644
--- a/ide/web.common/nbproject/org-netbeans-modules-web-common.sig
+++ b/ide/web.common/nbproject/org-netbeans-modules-web-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.116
+#Version 1.117
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/web.common/src/org/netbeans/modules/web/common/api/ByteStack.java b/ide/web.common/src/org/netbeans/modules/web/common/api/ByteStack.java
index ec0ff54..7d14ff9 100644
--- a/ide/web.common/src/org/netbeans/modules/web/common/api/ByteStack.java
+++ b/ide/web.common/src/org/netbeans/modules/web/common/api/ByteStack.java
@@ -169,7 +169,7 @@
             return true;
         }
 
-        if (obj == null || !(obj instanceof ByteStack)) {
+        if (!(obj instanceof ByteStack)) {
             return false;
         }
 
diff --git a/ide/web.indent/nbproject/org-netbeans-modules-web-indent.sig b/ide/web.indent/nbproject/org-netbeans-modules-web-indent.sig
index 929d81d..742f618 100644
--- a/ide/web.indent/nbproject/org-netbeans-modules-web-indent.sig
+++ b/ide/web.indent/nbproject/org-netbeans-modules-web-indent.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.37
+#Version 1.38
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/web.indent/nbproject/project.properties b/ide/web.indent/nbproject/project.properties
index d223c76..1f18715 100644
--- a/ide/web.indent/nbproject/project.properties
+++ b/ide/web.indent/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
\ No newline at end of file
diff --git a/ide/web.webkit.debugging/nbproject/org-netbeans-modules-web-webkit-debugging.sig b/ide/web.webkit.debugging/nbproject/org-netbeans-modules-web-webkit-debugging.sig
index eadfb46..59271c5 100644
--- a/ide/web.webkit.debugging/nbproject/org-netbeans-modules-web-webkit-debugging.sig
+++ b/ide/web.webkit.debugging/nbproject/org-netbeans-modules-web-webkit-debugging.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.70
+#Version 1.71
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.axi/nbproject/org-netbeans-modules-xml-axi.sig b/ide/xml.axi/nbproject/org-netbeans-modules-xml-axi.sig
index c4286c6..41b9035 100644
--- a/ide/xml.axi/nbproject/org-netbeans-modules-xml-axi.sig
+++ b/ide/xml.axi/nbproject/org-netbeans-modules-xml-axi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/ide/xml.axi/nbproject/project.properties b/ide/xml.axi/nbproject/project.properties
index 9c54db6..0111f56 100644
--- a/ide/xml.axi/nbproject/project.properties
+++ b/ide/xml.axi/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 test.unit.jvmargs=-Xmx128m
 xtest.jvm.args=-Xmx128m
diff --git a/ide/xml.axi/src/org/netbeans/modules/xml/axi/AXIContainer.java b/ide/xml.axi/src/org/netbeans/modules/xml/axi/AXIContainer.java
index eadc0cd..2570c24 100644
--- a/ide/xml.axi/src/org/netbeans/modules/xml/axi/AXIContainer.java
+++ b/ide/xml.axi/src/org/netbeans/modules/xml/axi/AXIContainer.java
@@ -114,7 +114,7 @@
     public void addElement(AbstractElement child) {
         if(this instanceof Element) {
             AXIType type = ((Element)this).getType();
-            if(type != null && type instanceof ContentModel) {
+            if(type instanceof ContentModel) {
                 ((ContentModel)type).addElement(child);
                 return;
             }
diff --git a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelListener.java b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelListener.java
index b082fb7..5e54f8a 100644
--- a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelListener.java
+++ b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelListener.java
@@ -74,12 +74,10 @@
         Object oldValue = evt.getOldValue();
         Object newValue = evt.getNewValue();
         //proxy child added
-        if( (newValue != null) && (oldValue == null) &&
-            (newValue instanceof AXIComponentProxy) )
+        if( (oldValue == null) && (newValue instanceof AXIComponentProxy) )
             return true;
         //proxy child removed
-        if( (oldValue != null) && (newValue == null) &&
-            (oldValue instanceof AXIComponentProxy) )
+        if( (newValue == null) && (oldValue instanceof AXIComponentProxy) )
             return true;
         
         return false;
diff --git a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelUpdater.java b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelUpdater.java
index cf9e743..d2a7f2e 100644
--- a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelUpdater.java
+++ b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/AXIModelUpdater.java
@@ -307,7 +307,7 @@
         }
         //the element ref now points to a different global element
         AXIComponent newElement = Util.lookup(elementRef.getModel(), newGE);
-        if(newElement != null && newElement instanceof Element) {
+        if(newElement instanceof Element) {
             elementRef.setRef((Element)newElement);
             elementRef.forceFireEvent();
         }
@@ -350,7 +350,7 @@
         
         //the attribute ref now points to a different global attribute
         AXIComponent newAttr = Util.lookup(attributeRef.getModel(), newGA);
-        if(newAttr != null && newAttr instanceof Attribute) {
+        if(newAttr instanceof Attribute) {
             attributeRef.setRef((Attribute)newAttr);
             attributeRef.forceFireEvent();
         }
diff --git a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/ElementImpl.java b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/ElementImpl.java
index 43e49c9..ca519ad 100644
--- a/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/ElementImpl.java
+++ b/ide/xml.axi/src/org/netbeans/modules/xml/axi/impl/ElementImpl.java
@@ -341,7 +341,7 @@
         }
         
         //remove listener from old content model
-        if(oldValue != null && oldValue instanceof ContentModel) {
+        if(oldValue instanceof ContentModel) {
             ContentModel cm = (ContentModel)oldValue;
             cm.removeListener(this);
         }
@@ -382,7 +382,7 @@
      * Overwrites addCompositor of AXIContainer.
      */
     public void addCompositor(Compositor compositor) {
-        if( getType() != null && getType() instanceof ContentModel &&
+        if( getType() instanceof ContentModel &&
                 getModel() != ((ContentModel)getType()).getModel() ) {
             //no drops allowed when the element's type
             //belongs to some other model
@@ -400,7 +400,7 @@
      */
     public void addAttribute(AbstractAttribute attribute) {
         AXIType type = getType();
-        if(type != null && type instanceof ContentModel) {
+        if(type instanceof ContentModel) {
             ((ContentModel)type).addAttribute(attribute);
             return;
         }
diff --git a/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeFactoryTest.java b/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeFactoryTest.java
index fd76675..0ca3a4a 100644
--- a/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeFactoryTest.java
+++ b/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeFactoryTest.java
@@ -40,7 +40,7 @@
     public static final String TEST_XSD         = "resources/types.xsd";
     public static final String GLOBAL_ELEMENT   = "purchaseOrder";
     
-    private List<Attribute> attList;;
+    private List<Attribute> attList;
     
     public DatatypeFactoryTest(String testName) {
         super(testName, TEST_XSD, GLOBAL_ELEMENT);
diff --git a/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeTest.java b/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeTest.java
index 8334809..edc9038 100644
--- a/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeTest.java
+++ b/ide/xml.axi/test/unit/src/org/netbeans/modules/xml/axi/datatype/DatatypeTest.java
@@ -37,7 +37,7 @@
     public static final String TEST_XSD         = "resources/types.xsd";
     public static final String GLOBAL_ELEMENT   = "purchaseOrder";
     
-    private List<AbstractAttribute> attList;;
+    private List<AbstractAttribute> attList;
     
     public DatatypeTest(String testName) {
         super(testName, TEST_XSD, GLOBAL_ELEMENT);
diff --git a/ide/xml.catalog.ui/nbproject/org-netbeans-modules-xml-catalog-ui.sig b/ide/xml.catalog.ui/nbproject/org-netbeans-modules-xml-catalog-ui.sig
index 117a4b2..49fd953 100644
--- a/ide/xml.catalog.ui/nbproject/org-netbeans-modules-xml-catalog-ui.sig
+++ b/ide/xml.catalog.ui/nbproject/org-netbeans-modules-xml-catalog-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.20.0
+#Version 2.21.0
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/ide/xml.catalog.ui/src/org/netbeans/modules/xml/catalog/CatalogPanel.java b/ide/xml.catalog.ui/src/org/netbeans/modules/xml/catalog/CatalogPanel.java
index 3f40d6e..cb7081d 100644
--- a/ide/xml.catalog.ui/src/org/netbeans/modules/xml/catalog/CatalogPanel.java
+++ b/ide/xml.catalog.ui/src/org/netbeans/modules/xml/catalog/CatalogPanel.java
@@ -97,7 +97,7 @@
         private void invokeInplaceEditing() {
             if (startEditing == null) {
                 Object o = tree.getActionMap().get("startEditing"); // NOI18N
-                if (o != null && o instanceof Action) {
+                if (o instanceof Action) {
                     startEditing = (Action) o;
                 }
             }
diff --git a/ide/xml.catalog/nbproject/org-netbeans-modules-xml-catalog.sig b/ide/xml.catalog/nbproject/org-netbeans-modules-xml-catalog.sig
index c72ee15..8319f63 100644
--- a/ide/xml.catalog/nbproject/org-netbeans-modules-xml-catalog.sig
+++ b/ide/xml.catalog/nbproject/org-netbeans-modules-xml-catalog.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.21.0
+#Version 3.22.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/ide/xml.catalog/nbproject/project.properties b/ide/xml.catalog/nbproject/project.properties
index d91299f..2d5fcc9 100644
--- a/ide/xml.catalog/nbproject/project.properties
+++ b/ide/xml.catalog/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 spec.version.base=3.23.0
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/ide/xml.catalog/src/org/netbeans/modules/xml/catalog/settings/CatalogSettings.java b/ide/xml.catalog/src/org/netbeans/modules/xml/catalog/settings/CatalogSettings.java
index 10f5926..525d1bc 100644
--- a/ide/xml.catalog/src/org/netbeans/modules/xml/catalog/settings/CatalogSettings.java
+++ b/ide/xml.catalog/src/org/netbeans/modules/xml/catalog/settings/CatalogSettings.java
@@ -67,6 +67,7 @@
  *
  * @author  Petr Kuzel
  */
+@Deprecated
 @ServiceProvider(service = CatalogSettings.class)
 public final class CatalogSettings implements Externalizable {
 
diff --git a/ide/xml.core/nbproject/org-netbeans-modules-xml-core.sig b/ide/xml.core/nbproject/org-netbeans-modules-xml-core.sig
index fe1c155..4a3a681 100644
--- a/ide/xml.core/nbproject/org-netbeans-modules-xml-core.sig
+++ b/ide/xml.core/nbproject/org-netbeans-modules-xml-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60.0
+#Version 1.61.0
 
 CLSS public abstract interface java.io.Serializable
 
@@ -90,7 +90,7 @@
 
 CLSS public abstract interface org.netbeans.modules.xml.api.model.ExtendedGrammarQuery
 intf org.netbeans.modules.xml.api.model.GrammarQuery
-meth public abstract java.util.List getResolvedEntities()
+meth public abstract java.util.List<java.lang.String> getResolvedEntities()
 
 CLSS public final org.netbeans.modules.xml.api.model.GrammarEnvironment
 cons public init(java.util.Enumeration,org.xml.sax.InputSource,org.openide.filesystems.FileObject)
diff --git a/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java b/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java
index d3360b3..18fb322 100644
--- a/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java
+++ b/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java
@@ -49,7 +49,7 @@
 
     private static ContentModel parseContentModel(PushbackStringTokenizer tokens) {
 
-        ContentModel model = null;;
+        ContentModel model = null;
         List<ContentModel> models = new ArrayList<>(7);
         char type = 'E';
         char ch;            
diff --git a/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/DTDGrammar.java b/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/DTDGrammar.java
index d3abe20..1a7dad9 100644
--- a/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/DTDGrammar.java
+++ b/ide/xml.core/src/org/netbeans/modules/xml/dtd/grammar/DTDGrammar.java
@@ -166,14 +166,14 @@
      *        Every list member represents one possibility.
      */
     public Enumeration queryElements(HintContext ctx) {
-        if (elementDecls == null) return org.openide.util.Enumerations.empty();;
+        if (elementDecls == null) return org.openide.util.Enumerations.empty();
         
         Node node = ((Node)ctx).getParentNode();        
         Set<String> elements = null;
         
         if (node instanceof Element) {
             Element el = (Element) node;
-            if (el == null) return org.openide.util.Enumerations.empty();;
+            if (el == null) return org.openide.util.Enumerations.empty();
 
             // lazilly parse content model
             Object model = null;
@@ -211,7 +211,7 @@
             return org.openide.util.Enumerations.empty();
         }
                 
-        if (elements == null) return org.openide.util.Enumerations.empty();;
+        if (elements == null) return org.openide.util.Enumerations.empty();
         String prefix = ctx.getCurrentPrefix();
         
         List<MyElement> list = new LinkedList<>();
@@ -232,7 +232,7 @@
      * @return list of <code>CompletionResult</code>s (NOTATION_NODEs)
      */
     public Enumeration queryNotations(String prefix) {
-        if (notations == null) return org.openide.util.Enumerations.empty();;
+        if (notations == null) return org.openide.util.Enumerations.empty();
         
         List<MyNotation> list = new LinkedList<>();
         Iterator<String> it = notations.iterator();
diff --git a/ide/xml.jaxb.api/nbproject/org-netbeans-modules-xml-jaxb-api.sig b/ide/xml.jaxb.api/nbproject/org-netbeans-modules-xml-jaxb-api.sig
index d2b0e66..9770fa2 100644
--- a/ide/xml.jaxb.api/nbproject/org-netbeans-modules-xml-jaxb-api.sig
+++ b/ide/xml.jaxb.api/nbproject/org-netbeans-modules-xml-jaxb-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.43
+#Version 1.44
 
 CLSS public java.awt.datatransfer.DataFlavor
 cons public init()
diff --git a/ide/xml.lexer/nbproject/org-netbeans-modules-xml-lexer.sig b/ide/xml.lexer/nbproject/org-netbeans-modules-xml-lexer.sig
index 043eb8a..5f4776d 100644
--- a/ide/xml.lexer/nbproject/org-netbeans-modules-xml-lexer.sig
+++ b/ide/xml.lexer/nbproject/org-netbeans-modules-xml-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.multiview/nbproject/org-netbeans-modules-xml-multiview.sig b/ide/xml.multiview/nbproject/org-netbeans-modules-xml-multiview.sig
index fb2de71..2a86cde 100644
--- a/ide/xml.multiview/nbproject/org-netbeans-modules-xml-multiview.sig
+++ b/ide/xml.multiview/nbproject/org-netbeans-modules-xml-multiview.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.55.0
+#Version 1.56.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1916,6 +1916,7 @@
 fld public final static java.lang.String PROP_DOCUMENT = "document"
 fld public final static java.lang.String PROP_MODIFIED = "modified"
 fld public final static java.lang.String PROP_OPENED_PANES = "openedPanes"
+fld public final static java.lang.String PROP_RELOADING = "reloading"
 intf org.openide.cookies.EditorCookie
 meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
diff --git a/ide/xml.retriever/nbproject/org-netbeans-modules-xml-retriever.sig b/ide/xml.retriever/nbproject/org-netbeans-modules-xml-retriever.sig
index 4cfa644..269991f 100644
--- a/ide/xml.retriever/nbproject/org-netbeans-modules-xml-retriever.sig
+++ b/ide/xml.retriever/nbproject/org-netbeans-modules-xml-retriever.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.retriever/src/org/netbeans/modules/xml/retriever/Retriever.java b/ide/xml.retriever/src/org/netbeans/modules/xml/retriever/Retriever.java
index ba9ae65..20e331c 100644
--- a/ide/xml.retriever/src/org/netbeans/modules/xml/retriever/Retriever.java
+++ b/ide/xml.retriever/src/org/netbeans/modules/xml/retriever/Retriever.java
@@ -123,6 +123,7 @@
      * This method will be removed soon. Please make sure not to use this method anymore.
      * @deprecated Please use {@link retrieveResource(FileObject, URI)} instead
      */
+    @Deprecated
     public abstract File retrieveResource(File targetFolder, URI source)
     throws UnknownHostException, URISyntaxException, IOException;
     
diff --git a/ide/xml.schema.completion/nbproject/org-netbeans-modules-xml-schema-completion.sig b/ide/xml.schema.completion/nbproject/org-netbeans-modules-xml-schema-completion.sig
index 317dbede..9c6de59 100644
--- a/ide/xml.schema.completion/nbproject/org-netbeans-modules-xml-schema-completion.sig
+++ b/ide/xml.schema.completion/nbproject/org-netbeans-modules-xml-schema-completion.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.schema.completion/src/org/netbeans/modules/xml/schema/completion/util/CompletionUtil.java b/ide/xml.schema.completion/src/org/netbeans/modules/xml/schema/completion/util/CompletionUtil.java
index 650b540..69218b8 100644
--- a/ide/xml.schema.completion/src/org/netbeans/modules/xml/schema/completion/util/CompletionUtil.java
+++ b/ide/xml.schema.completion/src/org/netbeans/modules/xml/schema/completion/util/CompletionUtil.java
@@ -309,8 +309,8 @@
         if(element == null)
             return null;
         AXIType type = element.getType();
-        if( type == null || !(type instanceof Datatype) ||
-            ((Datatype)type).getEnumerations() == null)
+        if(!(type instanceof Datatype) ||
+           ((Datatype) type).getEnumerations() == null)
             return null;
         for(Object value: ((Datatype)type).getEnumerations()) {
             if(context.getTypedChars() == null || context.getTypedChars().equals("")) {
@@ -345,8 +345,8 @@
         if(attr == null)
             return null;
         AXIType type = attr.getType();
-        if(type == null || !(type instanceof Datatype) ||
-           ((Datatype)type).getEnumerations() == null)
+        if(!(type instanceof Datatype) ||
+           ((Datatype) type).getEnumerations() == null)
             return null;                
         for(Object value: ((Datatype)type).getEnumerations()) {
             String str = (value != null) ? value.toString() : null;
@@ -589,7 +589,7 @@
             parent = child;
         }
         
-        if(child != null && (child instanceof Element))
+        if((child instanceof Element))
             return (Element)child;
         
         return null;
diff --git a/ide/xml.schema.model/nbproject/org-netbeans-modules-xml-schema-model.sig b/ide/xml.schema.model/nbproject/org-netbeans-modules-xml-schema-model.sig
index 1c58b8f..9a2a583 100644
--- a/ide/xml.schema.model/nbproject/org-netbeans-modules-xml-schema-model.sig
+++ b/ide/xml.schema.model/nbproject/org-netbeans-modules-xml-schema-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49.0
+#Version 1.50.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.schema.model/nbproject/project.properties b/ide/xml.schema.model/nbproject/project.properties
index c6bf83a..0502843 100644
--- a/ide/xml.schema.model/nbproject/project.properties
+++ b/ide/xml.schema.model/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 spec.version.base=1.51.0
diff --git a/ide/xml.schema.model/src/org/netbeans/modules/xml/schema/model/impl/RefCacheSupport.java b/ide/xml.schema.model/src/org/netbeans/modules/xml/schema/model/impl/RefCacheSupport.java
index e6057b9..dede37a 100644
--- a/ide/xml.schema.model/src/org/netbeans/modules/xml/schema/model/impl/RefCacheSupport.java
+++ b/ide/xml.schema.model/src/org/netbeans/modules/xml/schema/model/impl/RefCacheSupport.java
@@ -91,7 +91,7 @@
      */
     public SchemaModelImpl getCachedModel(SchemaModelReference ref) {
         Object cachedValue = refModelCache.get(ref);
-        if (cachedValue != null && cachedValue instanceof SmAttachment) {
+        if (cachedValue instanceof SmAttachment) {
             return SmAttachment.class.cast(cachedValue).mSchemaModel;
         } else {
             return null;
@@ -186,8 +186,7 @@
                     if (Schema.SCHEMA_REFERENCES_PROPERTY.equals(propName)) {
                         Object newValue = evt.getNewValue();
                         Object oldValue = evt.getOldValue();
-                        if (newValue == null && oldValue != null &&
-                                oldValue instanceof SchemaModelReference) {
+                        if (newValue == null && oldValue instanceof SchemaModelReference) {
                             //
                             // An Import/Include/Redefine is deleted.
                             SchemaModelReference sModelRef =
@@ -199,7 +198,7 @@
                     //
                     if (SchemaModelReference.SCHEMA_LOCATION_PROPERTY.equals(propName)) {
                         Object source = evt.getSource();
-                        if (source != null && source instanceof SchemaModelReference) {
+                        if (source instanceof SchemaModelReference) {
                             excludeModelRef((SchemaModelReference)source);
                             // System.out.println("schema location changed");
                         }
@@ -207,7 +206,7 @@
                     //
                     if (Import.NAMESPACE_PROPERTY.equals(propName)) {
                         Object source = evt.getSource();
-                        if (source != null && source instanceof Import) {
+                        if (source instanceof Import) {
                             excludeModelRef((Import)source);
                             // System.out.println("Import's namespace changed");
                         }
@@ -288,7 +287,7 @@
     private synchronized void excludeModelRef(SchemaModelReference sModelRef) {
         Object oldValue = refModelCache.remove(sModelRef);
         //
-        if (oldValue != null && oldValue instanceof SmAttachment) {
+        if (oldValue instanceof SmAttachment) {
             SmAttachment sma = SmAttachment.class.cast(oldValue);
             sma.mSchemaModel.removePropertyChangeListener(sma.mPCL);
         }
diff --git a/ide/xml.schema.model/test/unit/src/org/netbeans/modules/xml/schema/model/SchemaModelTest.java b/ide/xml.schema.model/test/unit/src/org/netbeans/modules/xml/schema/model/SchemaModelTest.java
index bd7ac72..186bb63 100644
--- a/ide/xml.schema.model/test/unit/src/org/netbeans/modules/xml/schema/model/SchemaModelTest.java
+++ b/ide/xml.schema.model/test/unit/src/org/netbeans/modules/xml/schema/model/SchemaModelTest.java
@@ -192,7 +192,7 @@
         ComplexExtension ce = (ComplexExtension)ctd.getChildren().get(0);
         NamedComponentReference<GlobalType> ncr = ce.getBase();
         GlobalType type = ncr.get();
-        assert(type != null && type instanceof GlobalSimpleType);
+        assert(type instanceof GlobalSimpleType);
         GlobalSimpleType gst = (GlobalSimpleType)type;
         assert(gst.getName() != null && gst.getName().equals("anyType"));
     }
diff --git a/ide/xml.tax/lib/src/org/netbeans/tax/TreeName.java b/ide/xml.tax/lib/src/org/netbeans/tax/TreeName.java
index a2bb4c3..ca5ab72 100644
--- a/ide/xml.tax/lib/src/org/netbeans/tax/TreeName.java
+++ b/ide/xml.tax/lib/src/org/netbeans/tax/TreeName.java
@@ -59,7 +59,7 @@
         
         this.prefix  = prefix;
         this.name    = name;
-        this.rawName = getQualifiedName (prefix, name);;
+        this.rawName = getQualifiedName (prefix, name);
     }
     
     /** Creates new TreeName.
diff --git a/ide/xml.tax/nbproject/org-netbeans-modules-xml-tax.sig b/ide/xml.tax/nbproject/org-netbeans-modules-xml-tax.sig
index c2f05bc..56bc39e 100644
--- a/ide/xml.tax/nbproject/org-netbeans-modules-xml-tax.sig
+++ b/ide/xml.tax/nbproject/org-netbeans-modules-xml-tax.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61.0
+#Version 1.62.0
 
 CLSS public abstract interface java.beans.BeanInfo
 fld public final static int ICON_COLOR_16x16 = 1
diff --git a/ide/xml.text.obsolete90/nbproject/org-netbeans-modules-xml-text-obsolete90.sig b/ide/xml.text.obsolete90/nbproject/org-netbeans-modules-xml-text-obsolete90.sig
index bcd4b0d..2628a88 100644
--- a/ide/xml.text.obsolete90/nbproject/org-netbeans-modules-xml-text-obsolete90.sig
+++ b/ide/xml.text.obsolete90/nbproject/org-netbeans-modules-xml-text-obsolete90.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17.0
+#Version 1.18.0
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/ide/xml.text.obsolete90/src/org/netbeans/modules/xml/text/syntax/XMLSyntaxSupport.java b/ide/xml.text.obsolete90/src/org/netbeans/modules/xml/text/syntax/XMLSyntaxSupport.java
index 66da0c4..cd6a942 100644
--- a/ide/xml.text.obsolete90/src/org/netbeans/modules/xml/text/syntax/XMLSyntaxSupport.java
+++ b/ide/xml.text.obsolete90/src/org/netbeans/modules/xml/text/syntax/XMLSyntaxSupport.java
@@ -304,7 +304,7 @@
             case XMLDefaultTokenContext.DECLARATION_ID:
                 
                 // we treat internal DTD as one syntax element
-                boolean seekforDTDEnd = false;;
+                boolean seekforDTDEnd = false;
                 while( id == XMLDefaultTokenContext.DECLARATION
                         || id == XMLDefaultTokenContext.VALUE
                         || seekforDTDEnd) {
@@ -618,7 +618,7 @@
                     dotPos = target.getCaret().getDot();
                     try {
                         SyntaxElement sel = getElementChain(dotPos);
-                        if(sel != null && sel instanceof StartTag) {
+                        if(sel instanceof StartTag) {
                             retVal = COMPLETION_POPUP;
                         }
                     } catch (BadLocationException e) {
diff --git a/ide/xml.text/nbproject/org-netbeans-modules-xml-text.sig b/ide/xml.text/nbproject/org-netbeans-modules-xml-text.sig
index 3737ec8..d877493 100644
--- a/ide/xml.text/nbproject/org-netbeans-modules-xml-text.sig
+++ b/ide/xml.text/nbproject/org-netbeans-modules-xml-text.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.76.0
+#Version 1.77.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/completion/ElementResultItem.java b/ide/xml.text/src/org/netbeans/modules/xml/text/completion/ElementResultItem.java
index 097f41c..2cfb417 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/completion/ElementResultItem.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/completion/ElementResultItem.java
@@ -118,11 +118,11 @@
         return false;
     }
     
-    /**
-     * @deprecated we use startElement flag
-     */
+//    /**
+//     * @deprecated we use startElement flag
+//     */
 //    static class EndTag extends ElementResultItem {
 //    }
-    
+
     Color getPaintColor() { return LFCustoms.shiftColor(COLOR); }
 }
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/completion/XMLCompletionProvider.java b/ide/xml.text/src/org/netbeans/modules/xml/text/completion/XMLCompletionProvider.java
index 6df2e66..b5bc192 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/completion/XMLCompletionProvider.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/completion/XMLCompletionProvider.java
@@ -64,7 +64,7 @@
     @Override
     public int getAutoQueryTypes(JTextComponent component, String typedText) {
         XMLSyntaxSupport support = XMLSyntaxSupport.getSyntaxSupport(component.getDocument());
-        if( (support == null) || !(support instanceof XMLSyntaxSupport))
+        if(!(support instanceof XMLSyntaxSupport))
             return 0;
         
         int type = checkCompletion(support, component, typedText, false);
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/indent/XMLIndentEngine.java b/ide/xml.text/src/org/netbeans/modules/xml/text/indent/XMLIndentEngine.java
index 7b8866d..4011e3d 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/indent/XMLIndentEngine.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/indent/XMLIndentEngine.java
@@ -30,6 +30,7 @@
  * @deprecated
  * @see XMLLexerFormatter
  */
+@Deprecated
 public class XMLIndentEngine extends FormatterIndentEngine {
 
     /** serialVersionUID */
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/ASCIICharStream.java b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/ASCIICharStream.java
index 836fe89..c6cd2a0 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/ASCIICharStream.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/ASCIICharStream.java
@@ -210,7 +210,7 @@
      * @deprecated 
      * @see #getEndColumn
      */
-
+    @Deprecated
     public final int getColumn() {
         return bufcolumn[bufpos];
     }
@@ -219,7 +219,7 @@
      * @deprecated 
      * @see #getEndLine
      */
-
+    @Deprecated
     public final int getLine() {
         return bufline[bufpos];
     }
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/CharStream.java b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/CharStream.java
index a0f7a06..2a16389 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/CharStream.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/CharStream.java
@@ -47,6 +47,7 @@
      * @deprecated 
      * @see #getEndColumn
      */
+    @Deprecated
     public abstract int getColumn();
 
     /**
@@ -54,6 +55,7 @@
      * @deprecated 
      * @see #getEndLine
      */
+    @Deprecated
     public abstract int getLine();
 
     /**
diff --git a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/StringParserInput.java b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/StringParserInput.java
index f37e289..212a4dc 100644
--- a/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/StringParserInput.java
+++ b/ide/xml.text/src/org/netbeans/modules/xml/text/syntax/javacc/lib/StringParserInput.java
@@ -77,6 +77,7 @@
      * @deprecated
      * @see #getEndColumn
      */
+    @Deprecated
     public int getColumn() {
         return 0;
     }
@@ -86,6 +87,7 @@
      * @deprecated
      * @see #getEndLine
      */
+    @Deprecated
     public int getLine() {
         return 0;
     }
diff --git a/ide/xml.tools/nbproject/org-netbeans-modules-xml-tools.sig b/ide/xml.tools/nbproject/org-netbeans-modules-xml-tools.sig
index ae683c5..4fd1e4a 100644
--- a/ide/xml.tools/nbproject/org-netbeans-modules-xml-tools.sig
+++ b/ide/xml.tools/nbproject/org-netbeans-modules-xml-tools.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60
+#Version 1.61
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/CheckActionTest.java b/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/CheckActionTest.java
index 6bcbe2c..3d53e70 100644
--- a/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/CheckActionTest.java
+++ b/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/CheckActionTest.java
@@ -78,7 +78,7 @@
         QaIOReporter reporter = new QaIOReporter();
         for (int i = 0; i<nodes.length; i++) {
             CheckXMLCookie cake = (CheckXMLCookie) nodes[i].getCookie(CheckXMLCookie.class);
-            if (cake == null) fail("Cannot get 'ValidateXMLCookie'.");;
+            if (cake == null) fail("Cannot get 'ValidateXMLCookie'.");
             cake.checkXML(reporter);
         }
         return reporter;
diff --git a/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/ValidateActionTest.java b/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/ValidateActionTest.java
index 496f33d..5eace77 100644
--- a/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/ValidateActionTest.java
+++ b/ide/xml.tools/test/qa-functional/src/org/netbeans/modules/xml/tools/actions/ValidateActionTest.java
@@ -99,7 +99,7 @@
         QaIOReporter reporter = new QaIOReporter();
         for (int i = 0; i<nodes.length; i++) {
             ValidateXMLCookie cake = (ValidateXMLCookie) nodes[i].getCookie(ValidateXMLCookie.class);
-            if (cake == null) fail("Cannot get 'ValidateXMLCookie'.");;
+            if (cake == null) fail("Cannot get 'ValidateXMLCookie'.");
             cake.validateXML(reporter);
         }
         return reporter;
diff --git a/ide/xml.wsdl.model/nbproject/org-netbeans-modules-xml-wsdl-model.sig b/ide/xml.wsdl.model/nbproject/org-netbeans-modules-xml-wsdl-model.sig
index a0f7998..c9afcc2 100644
--- a/ide/xml.wsdl.model/nbproject/org-netbeans-modules-xml-wsdl-model.sig
+++ b/ide/xml.wsdl.model/nbproject/org-netbeans-modules-xml-wsdl-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50.0
+#Version 1.51.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.wsdl.model/nbproject/project.properties b/ide/xml.wsdl.model/nbproject/project.properties
index dec9576..3acab7a 100644
--- a/ide/xml.wsdl.model/nbproject/project.properties
+++ b/ide/xml.wsdl.model/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 spec.version.base=1.52.0
 release.external/generated-wsdl-xsd-2004.08.24.jar=modules/ext/generated-wsdl-xsd-2004.08.24.jar
diff --git a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingFault.java b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingFault.java
index 4640117..09f222e 100644
--- a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingFault.java
+++ b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingFault.java
@@ -33,5 +33,6 @@
     /**
      * @deprecated use setName() instead.
      */
+    @Deprecated
     void setFault(Reference<Fault> fault);
 }
diff --git a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingInput.java b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingInput.java
index c51d645..9d91467 100644
--- a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingInput.java
+++ b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingInput.java
@@ -33,5 +33,6 @@
     /**
      * @deprecated use setName() instead.
      */
+    @Deprecated
     void setInput(Reference<Input> inRef);
 }
diff --git a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingOutput.java b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingOutput.java
index a0b9f78..499d526 100644
--- a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingOutput.java
+++ b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/BindingOutput.java
@@ -33,5 +33,6 @@
     /**
      * @deprecated use setName() instead.
      */
+    @Deprecated
     void setOutput(Reference<Output> outRef);
 }
diff --git a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap/validation/MessagePart.java b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap/validation/MessagePart.java
index a753e63..e0de4a5 100644
--- a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap/validation/MessagePart.java
+++ b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap/validation/MessagePart.java
@@ -47,7 +47,7 @@
         if (other == this) {
             return true;
         }
-        if (other == null || !(other instanceof MessagePart)) {
+        if (!(other instanceof MessagePart)) {
             return false;
         }
 
diff --git a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap12/validation/MessagePart.java b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap12/validation/MessagePart.java
index 189fc1b..6dc1003 100644
--- a/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap12/validation/MessagePart.java
+++ b/ide/xml.wsdl.model/src/org/netbeans/modules/xml/wsdl/model/extensions/soap12/validation/MessagePart.java
@@ -47,7 +47,7 @@
         if (other == this) {
             return true;
         }
-        if (other == null || !(other instanceof MessagePart)) {
+        if (!(other instanceof MessagePart)) {
             return false;
         }
 
diff --git a/ide/xml.wsdl.model/test/unit/src/org/netbeans/modules/xml/wsdl/validator/WSDLSchemaValidatorTest.java b/ide/xml.wsdl.model/test/unit/src/org/netbeans/modules/xml/wsdl/validator/WSDLSchemaValidatorTest.java
index 65bad88..bc5f029 100644
--- a/ide/xml.wsdl.model/test/unit/src/org/netbeans/modules/xml/wsdl/validator/WSDLSchemaValidatorTest.java
+++ b/ide/xml.wsdl.model/test/unit/src/org/netbeans/modules/xml/wsdl/validator/WSDLSchemaValidatorTest.java
@@ -35,6 +35,7 @@
 import org.netbeans.modules.xml.xam.ModelSource;
 import org.netbeans.modules.xml.xam.spi.Validation;
 import org.netbeans.modules.xml.xam.spi.ValidationResult;
+import org.netbeans.modules.xml.xam.spi.Validator;
 
 /**
  *
@@ -167,7 +168,13 @@
         assertNotNull(vr.getValidationResult());
         
         ValidationHelper.dumpErrors(vr);
-        assertTrue("expect error " + expectedErrorCount,  vr.getValidationResult().size() == expectedErrorCount);
+        
+        // some missing element errors appear twice on newer JDKs
+        int uniqueErrors = (int) vr.getValidationResult().stream()
+                .map(Validator.ResultItem::getDescription)
+                .distinct().count();
+
+        assertTrue("expect error " + expectedErrorCount,  uniqueErrors == expectedErrorCount);
      }
      
      
diff --git a/ide/xml.xam/nbproject/org-netbeans-modules-xml-xam.sig b/ide/xml.xam/nbproject/org-netbeans-modules-xml-xam.sig
index f3354eb..0fb405d 100644
--- a/ide/xml.xam/nbproject/org-netbeans-modules-xml-xam.sig
+++ b/ide/xml.xam/nbproject/org-netbeans-modules-xml-xam.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49.0
+#Version 1.50.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/ide/xml.xam/nbproject/project.properties b/ide/xml.xam/nbproject/project.properties
index 63276af..1ed231c 100644
--- a/ide/xml.xam/nbproject/project.properties
+++ b/ide/xml.xam/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 spec.version.base=1.51.0
diff --git a/ide/xml.xam/src/org/netbeans/modules/xml/xam/dom/AbstractDocumentModel.java b/ide/xml.xam/src/org/netbeans/modules/xml/xam/dom/AbstractDocumentModel.java
index d4f7559..60bc733 100644
--- a/ide/xml.xam/src/org/netbeans/modules/xml/xam/dom/AbstractDocumentModel.java
+++ b/ide/xml.xam/src/org/netbeans/modules/xml/xam/dom/AbstractDocumentModel.java
@@ -234,6 +234,7 @@
      * @deprecated Use {@link org.netbeans.modules.xml.xam.dom.AbstractDocumentModel#prepareChangeInfo(java.util.List, java.util.List)} instead. It is necessary for fixing bug #166177.
      *
      */
+    @Deprecated
     public ChangeInfo prepareChangeInfo(List<Node> pathToRoot) {
         return prepareChangeInfo(pathToRoot, pathToRoot);
     }
diff --git a/ide/xml.xdm/nbproject/org-netbeans-modules-xml-xdm.sig b/ide/xml.xdm/nbproject/org-netbeans-modules-xml-xdm.sig
index ab9fab5..c699ff4 100644
--- a/ide/xml.xdm/nbproject/org-netbeans-modules-xml-xdm.sig
+++ b/ide/xml.xdm/nbproject/org-netbeans-modules-xml-xdm.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51.0
+#Version 1.52.0
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/ide/xml.xdm/nbproject/project.properties b/ide/xml.xdm/nbproject/project.properties
index a93721d..7f1c312 100644
--- a/ide/xml.xdm/nbproject/project.properties
+++ b/ide/xml.xdm/nbproject/project.properties
@@ -18,7 +18,7 @@
 #
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 spec.version.base=1.53.0
 test.unit.jvmargs=-Xmx128m
diff --git a/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/visitor/NamespaceRefactorVisitor.java b/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/visitor/NamespaceRefactorVisitor.java
index ec7064c..3cdb6a0 100644
--- a/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/visitor/NamespaceRefactorVisitor.java
+++ b/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/visitor/NamespaceRefactorVisitor.java
@@ -53,6 +53,7 @@
      * @deprecated use constructor with QName-valued attributes map.  Prefix refactoring 
      * should not without complete map.
      */
+    @Deprecated
     public NamespaceRefactorVisitor() {
         this(null);
     }
diff --git a/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/xam/XDMListener.java b/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/xam/XDMListener.java
index 3e304df..789e8cf 100644
--- a/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/xam/XDMListener.java
+++ b/ide/xml.xdm/src/org/netbeans/modules/xml/xdm/xam/XDMListener.java
@@ -246,6 +246,7 @@
      * This implementaion do nothing. The correct location of the method is
      * {@link org.netbeans.modules.xml.xam.dom.AbstractDocumentModel#prepareChangeInfo(java.util.List, java.util.List)}
      */
+    @Deprecated
     protected ChangeInfo prepareChangeInfo(List<? extends Node> pathToRoot,
             List<? extends Node> nsContextPathToRoot) {
         return null;
diff --git a/ide/xml/nbproject/org-netbeans-modules-xml.sig b/ide/xml/nbproject/org-netbeans-modules-xml.sig
index 6867cd6..28b6520 100644
--- a/ide/xml/nbproject/org-netbeans-modules-xml.sig
+++ b/ide/xml/nbproject/org-netbeans-modules-xml.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1613,6 +1613,7 @@
 fld public final static java.lang.String PROP_DOCUMENT = "document"
 fld public final static java.lang.String PROP_MODIFIED = "modified"
 fld public final static java.lang.String PROP_OPENED_PANES = "openedPanes"
+fld public final static java.lang.String PROP_RELOADING = "reloading"
 intf org.openide.cookies.EditorCookie
 meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
diff --git a/ide/xml/src/org/netbeans/modules/xml/actions/InputOutputReporter.java b/ide/xml/src/org/netbeans/modules/xml/actions/InputOutputReporter.java
index e9320e5..37d0af3 100644
--- a/ide/xml/src/org/netbeans/modules/xml/actions/InputOutputReporter.java
+++ b/ide/xml/src/org/netbeans/modules/xml/actions/InputOutputReporter.java
@@ -53,6 +53,7 @@
  * @see     InputOutput
  * @deprecated XML tools actions API candidate
  */
+@Deprecated
 public final class InputOutputReporter implements CookieObserver {
 
     //0 extends message, 1 line number, 2 url of external entity
diff --git a/ide/xml/src/org/netbeans/modules/xml/wizard/impl/DTDPanel.java b/ide/xml/src/org/netbeans/modules/xml/wizard/impl/DTDPanel.java
index f5d67dc..2339e1a 100644
--- a/ide/xml/src/org/netbeans/modules/xml/wizard/impl/DTDPanel.java
+++ b/ide/xml/src/org/netbeans/modules/xml/wizard/impl/DTDPanel.java
@@ -252,8 +252,8 @@
     // does user entered a PID
     private boolean existsPID() {
         Object pid = pidModel.getSelectedItem();
-        return (pid != null) && (pid instanceof String)
-            && (((String)pid).trim().equals("") == false);
+        return (pid instanceof String)
+               && (((String) pid).trim().equals("") == false);
     }
 
     private void updatePossibilities() {
diff --git a/ide/xml/src/org/netbeans/modules/xml/wizard/impl/XMLWizardIterator.java b/ide/xml/src/org/netbeans/modules/xml/wizard/impl/XMLWizardIterator.java
index d2fa592..f5e1397 100644
--- a/ide/xml/src/org/netbeans/modules/xml/wizard/impl/XMLWizardIterator.java
+++ b/ide/xml/src/org/netbeans/modules/xml/wizard/impl/XMLWizardIterator.java
@@ -152,7 +152,7 @@
         }
         model = new DocumentModel(targetFolderURL);
         Object prop = templateWizard.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
     }
diff --git a/ide/xml/test/qa-functional/data/ActionsTestProject/nbproject/project.properties b/ide/xml/test/qa-functional/data/ActionsTestProject/nbproject/project.properties
index ebbad57..1bd17dc 100644
--- a/ide/xml/test/qa-functional/data/ActionsTestProject/nbproject/project.properties
+++ b/ide/xml/test/qa-functional/data/ActionsTestProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/ide/xml/test/qa-functional/data/CoreTemplatesTestProject/nbproject/project.properties b/ide/xml/test/qa-functional/data/CoreTemplatesTestProject/nbproject/project.properties
index 6332120..7e4c37c 100644
--- a/ide/xml/test/qa-functional/data/CoreTemplatesTestProject/nbproject/project.properties
+++ b/ide/xml/test/qa-functional/data/CoreTemplatesTestProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/ide/xml/test/qa-functional/data/DTDActionsTestProject/nbproject/project.properties b/ide/xml/test/qa-functional/data/DTDActionsTestProject/nbproject/project.properties
index fd1bdaf..9490f0f 100644
--- a/ide/xml/test/qa-functional/data/DTDActionsTestProject/nbproject/project.properties
+++ b/ide/xml/test/qa-functional/data/DTDActionsTestProject/nbproject/project.properties
@@ -44,7 +44,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/ide/xml/test/qa-functional/src/org/netbeans/xml/test/actions/XMLActionsTest.java b/ide/xml/test/qa-functional/src/org/netbeans/xml/test/actions/XMLActionsTest.java
index a5ff9a2..b8957ff 100644
--- a/ide/xml/test/qa-functional/src/org/netbeans/xml/test/actions/XMLActionsTest.java
+++ b/ide/xml/test/qa-functional/src/org/netbeans/xml/test/actions/XMLActionsTest.java
@@ -165,7 +165,7 @@
         Thread.sleep(1000);//wait for opening a window
         String text = new EditorOperator(outputName).getText();
         //create one line because of Windows are adding few empty lines
-        text = text.replaceAll("\n", "");
+        text = text.replace("\n", "");
         ref(text);
         ending();
     }
diff --git a/java/ant.browsetask/nbproject/project.properties b/java/ant.browsetask/nbproject/project.properties
index 33c2a8f..e435e6d 100644
--- a/java/ant.browsetask/nbproject/project.properties
+++ b/java/ant.browsetask/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 ant.jar=${ant.core.lib}
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 # web.browser.api.dir is sometimes not set during the build (eg. nbms-and-javadoc build)
diff --git a/java/ant.freeform/nbproject/org-netbeans-modules-ant-freeform.sig b/java/ant.freeform/nbproject/org-netbeans-modules-ant-freeform.sig
index 07da31a..0290153 100644
--- a/java/ant.freeform/nbproject/org-netbeans-modules-ant-freeform.sig
+++ b/java/ant.freeform/nbproject/org-netbeans-modules-ant-freeform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.63
+#Version 1.64
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/ant.grammar/nbproject/project.properties b/java/ant.grammar/nbproject/project.properties
index d970c1b..81286fc 100644
--- a/java/ant.grammar/nbproject/project.properties
+++ b/java/ant.grammar/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.eager=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 test.unit.cp.extra=
 test.unit.run.cp.extra=
diff --git a/java/api.debugger.jpda/nbproject/org-netbeans-api-debugger-jpda.sig b/java/api.debugger.jpda/nbproject/org-netbeans-api-debugger-jpda.sig
index 8e8e21e..59c8bde 100644
--- a/java/api.debugger.jpda/nbproject/org-netbeans-api-debugger-jpda.sig
+++ b/java/api.debugger.jpda/nbproject/org-netbeans-api-debugger-jpda.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.27
+#Version 3.28
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/api.java/nbproject/org-netbeans-api-java.sig b/java/api.java/nbproject/org-netbeans-api-java.sig
index c5ccfd1..4cbb8e8 100644
--- a/java/api.java/nbproject/org-netbeans-api-java.sig
+++ b/java/api.java/nbproject/org-netbeans-api-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.83
+#Version 1.84
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/api.java/src/org/netbeans/api/java/queries/UnitTestForSourceQuery.java b/java/api.java/src/org/netbeans/api/java/queries/UnitTestForSourceQuery.java
index 7847766..fe6a887 100644
--- a/java/api.java/src/org/netbeans/api/java/queries/UnitTestForSourceQuery.java
+++ b/java/api.java/src/org/netbeans/api/java/queries/UnitTestForSourceQuery.java
@@ -53,6 +53,7 @@
      *     when the mapping from source to unit test is not known.
      * @deprecated Use {@link #findUnitTests} instead.
      */
+    @Deprecated
     public static URL findUnitTest(FileObject source) {
         URL[] result = findUnitTests (source);
         return result.length == 0 ? null : result[0];
@@ -96,6 +97,7 @@
      *     when the mapping from unit test to source is not known.
      * @deprecated Use {@link #findSources} instead.
      */
+    @Deprecated
     public static URL findSource(FileObject unitTest) {
         URL[] result =  findSources (unitTest);
         return result.length == 0 ? null : result[0];
diff --git a/java/api.java/src/org/netbeans/spi/java/queries/UnitTestForSourceQueryImplementation.java b/java/api.java/src/org/netbeans/spi/java/queries/UnitTestForSourceQueryImplementation.java
index dab7aab..61a8e3a 100644
--- a/java/api.java/src/org/netbeans/spi/java/queries/UnitTestForSourceQueryImplementation.java
+++ b/java/api.java/src/org/netbeans/spi/java/queries/UnitTestForSourceQueryImplementation.java
@@ -45,6 +45,7 @@
  * @author David Konecny
  * @since org.netbeans.api.java/1 1.4
  */
+@Deprecated
 public interface UnitTestForSourceQueryImplementation {
     
     /**
diff --git a/java/api.maven/nbproject/org-netbeans-api-maven.sig b/java/api.maven/nbproject/org-netbeans-api-maven.sig
index 188ab4e..bdb2f9f 100644
--- a/java/api.maven/nbproject/org-netbeans-api-maven.sig
+++ b/java/api.maven/nbproject/org-netbeans-api-maven.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.23
+#Version 1.24
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/beans/src/org/netbeans/modules/beans/addproperty/GeneratorUtils.java b/java/beans/src/org/netbeans/modules/beans/addproperty/GeneratorUtils.java
index b46390f..a79df66 100644
--- a/java/beans/src/org/netbeans/modules/beans/addproperty/GeneratorUtils.java
+++ b/java/beans/src/org/netbeans/modules/beans/addproperty/GeneratorUtils.java
@@ -50,7 +50,7 @@
         GuardedDocument gdoc = null;
         try {
             Document doc = wc.getDocument();
-            if (doc != null && doc instanceof GuardedDocument)
+            if (doc instanceof GuardedDocument)
                 gdoc = (GuardedDocument)doc;
         } catch (IOException ioe) {}
         Tree lastMember = null;
diff --git a/java/beans/test/qa-functional/data/projects/Beans/nbproject/project.properties b/java/beans/test/qa-functional/data/projects/Beans/nbproject/project.properties
index d5d8e31..a8282e3 100644
--- a/java/beans/test/qa-functional/data/projects/Beans/nbproject/project.properties
+++ b/java/beans/test/qa-functional/data/projects/Beans/nbproject/project.properties
@@ -54,7 +54,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/classfile/nbproject/org-netbeans-modules-classfile.sig b/java/classfile/nbproject/org-netbeans-modules-classfile.sig
index 654d2ce..960bb5f 100644
--- a/java/classfile/nbproject/org-netbeans-modules-classfile.sig
+++ b/java/classfile/nbproject/org-netbeans-modules-classfile.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.69
+#Version 1.70
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ModuleTest.java b/java/classfile/test/unit/src/org/netbeans/modules/classfile/ModuleTest.java
index ec44a51..4387f16 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ModuleTest.java
+++ b/java/classfile/test/unit/src/org/netbeans/modules/classfile/ModuleTest.java
@@ -228,8 +228,13 @@
             if (provider == null) {
                 return null;
             }
+
+            // JDK 9-12 returns /
+            // JDK 13+ returns /modules as root
             final Path jimageRoot = provider.getPath(URI.create("jrt:///"));    //NOI18N
-            return jimageRoot;
+
+            final Path modules = jimageRoot.resolve("modules");
+            return Files.exists(modules) ? modules : jimageRoot;
         } catch (IOException ioe) {
             LOG.log(Level.WARNING, "Cannot load jrt nio provider.", ioe);   //NOI18N
             return null;
diff --git a/java/dbschema/nbproject/org-netbeans-modules-dbschema.sig b/java/dbschema/nbproject/org-netbeans-modules-dbschema.sig
index 1e8ee50..215256b 100644
--- a/java/dbschema/nbproject/org-netbeans-modules-dbschema.sig
+++ b/java/dbschema/nbproject/org-netbeans-modules-dbschema.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.58.0
+#Version 1.59.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/java/debugger.jpda.ant/nbproject/project.properties b/java/debugger.jpda.ant/nbproject/project.properties
index 773b2c0..1dbaea6 100644
--- a/java/debugger.jpda.ant/nbproject/project.properties
+++ b/java/debugger.jpda.ant/nbproject/project.properties
@@ -18,6 +18,6 @@
 is.eager=true
 ant.jar=${ant.core.lib}
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 requires.nb.javac=true
diff --git a/java/debugger.jpda.js/nbproject/org-netbeans-modules-debugger-jpda-js.sig b/java/debugger.jpda.js/nbproject/org-netbeans-modules-debugger-jpda-js.sig
index c442d8b..ac10314 100644
--- a/java/debugger.jpda.js/nbproject/org-netbeans-modules-debugger-jpda-js.sig
+++ b/java/debugger.jpda.js/nbproject/org-netbeans-modules-debugger-jpda-js.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/java/debugger.jpda.js/nbproject/project.properties b/java/debugger.jpda.js/nbproject/project.properties
index 22906d8..99bd7af 100644
--- a/java/debugger.jpda.js/nbproject/project.properties
+++ b/java/debugger.jpda.js/nbproject/project.properties
@@ -17,6 +17,6 @@
 
 cp.extra=${tools.jar}
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 requires.nb.javac=true
diff --git a/java/debugger.jpda.js/src/org/netbeans/modules/debugger/jpda/js/source/Source.java b/java/debugger.jpda.js/src/org/netbeans/modules/debugger/jpda/js/source/Source.java
index 02c7b94..7355a4c 100644
--- a/java/debugger.jpda.js/src/org/netbeans/modules/debugger/jpda/js/source/Source.java
+++ b/java/debugger.jpda.js/src/org/netbeans/modules/debugger/jpda/js/source/Source.java
@@ -166,7 +166,7 @@
         if (fieldContent == null && fieldURL == null) {
             // There is a Data inner class instead:
             Field fieldData = sourceVar.getField(SOURCE_VAR_DATA);
-            if (fieldData != null && fieldData instanceof ObjectVariable) {
+            if (fieldData instanceof ObjectVariable) {
                 fieldURL = ((ObjectVariable) fieldData).getField(SOURCE_VAR_URL);
                 fieldContent = ((ObjectVariable) fieldData).getField(SOURCE_VAR_DATA_ARRAY);
             }
diff --git a/java/debugger.jpda.kit/nbproject/project.properties b/java/debugger.jpda.kit/nbproject/project.properties
index f4f7af4..2d06468 100644
--- a/java/debugger.jpda.kit/nbproject/project.properties
+++ b/java/debugger.jpda.kit/nbproject/project.properties
@@ -16,4 +16,4 @@
 # under the License.
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
diff --git a/java/debugger.jpda.projects/nbproject/org-netbeans-modules-debugger-jpda-projects.sig b/java/debugger.jpda.projects/nbproject/org-netbeans-modules-debugger-jpda-projects.sig
index 02b3c3b..0d281a5 100644
--- a/java/debugger.jpda.projects/nbproject/org-netbeans-modules-debugger-jpda-projects.sig
+++ b/java/debugger.jpda.projects/nbproject/org-netbeans-modules-debugger-jpda-projects.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57
+#Version 1.58
 
 CLSS public abstract interface !annotation java.lang.FunctionalInterface
  anno 0 java.lang.annotation.Documented()
diff --git a/java/debugger.jpda.truffle/nbproject/org-netbeans-modules-debugger-jpda-truffle.sig b/java/debugger.jpda.truffle/nbproject/org-netbeans-modules-debugger-jpda-truffle.sig
index 86759b5..29b72c0 100644
--- a/java/debugger.jpda.truffle/nbproject/org-netbeans-modules-debugger-jpda-truffle.sig
+++ b/java/debugger.jpda.truffle/nbproject/org-netbeans-modules-debugger-jpda-truffle.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.14
+#Version 1.15
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/debugger.jpda.trufflenode/nbproject/project.properties b/java/debugger.jpda.trufflenode/nbproject/project.properties
index ea0391e..fee2c14 100644
--- a/java/debugger.jpda.trufflenode/nbproject/project.properties
+++ b/java/debugger.jpda.trufflenode/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.eager=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 nbm.module.author=Martin Entlicher
 requires.nb.javac=true
diff --git a/java/debugger.jpda.ui/nbproject/org-netbeans-modules-debugger-jpda-ui.sig b/java/debugger.jpda.ui/nbproject/org-netbeans-modules-debugger-jpda-ui.sig
index 8330ecb..57fe6b2 100644
--- a/java/debugger.jpda.ui/nbproject/org-netbeans-modules-debugger-jpda-ui.sig
+++ b/java/debugger.jpda.ui/nbproject/org-netbeans-modules-debugger-jpda-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.71
+#Version 1.72
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/actions/ToggleBreakpointActionProvider.java b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/actions/ToggleBreakpointActionProvider.java
index fe5000b..94748fb 100644
--- a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/actions/ToggleBreakpointActionProvider.java
+++ b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/actions/ToggleBreakpointActionProvider.java
@@ -362,7 +362,7 @@
                             long offs = positions.getStartPosition(compUnit, outerTree);
                             result[0] = Utilities.getLineOffset(doc, (int)offs) + 1;
                         } else {
-                            if (outerTree != null && outerTree instanceof BlockTree) {
+                            if (outerTree instanceof BlockTree) {
                                 Tree pTree = outerTreePath.getParentPath().getLeaf();
                                 if (pTree instanceof MethodTree) {
                                     long endOffs = positions.getEndPosition(compUnit, pTree);
diff --git a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/models/BoldVariablesTableModelFilter.java b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/models/BoldVariablesTableModelFilter.java
index bd76bcf..aa23399 100644
--- a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/models/BoldVariablesTableModelFilter.java
+++ b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/models/BoldVariablesTableModelFilter.java
@@ -59,9 +59,9 @@
 public class BoldVariablesTableModelFilter implements TableHTMLModelFilter,
 Constants {
     
-    private Map variableToValueType = new WeakHashMap ();
-    private Map variableToValueValue = new WeakHashMap ();
-    private Map variableToValueToString = new WeakHashMap ();
+    private Map<Object, String> variableToValueType = new WeakHashMap<>();
+    private Map<Object, String> variableToValueValue = new WeakHashMap<>();
+    private Map<Object, String> variableToValueToString = new WeakHashMap<>();
     
     
     
@@ -180,7 +180,7 @@
     public void removeModelListener (ModelListener l) {
     }
     
-    private String bold (Object variable, String value, Map map) {
+    private String bold (Object variable, String value, Map<Object, String> map) {
         if (map.containsKey (variable)) {
             String oldValue = (String) map.get (variable);
             if (oldValue == value ||
diff --git a/java/debugger.jpda.ui/test/qa-functional/data/debugTestProjectAnt/nbproject/project.properties b/java/debugger.jpda.ui/test/qa-functional/data/debugTestProjectAnt/nbproject/project.properties
index ba45e40..46675ae 100644
--- a/java/debugger.jpda.ui/test/qa-functional/data/debugTestProjectAnt/nbproject/project.properties
+++ b/java/debugger.jpda.ui/test/qa-functional/data/debugTestProjectAnt/nbproject/project.properties
@@ -54,7 +54,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/debugger.jpda.visual/src/org/netbeans/modules/debugger/jpda/visual/ui/ScreenshotComponent.java b/java/debugger.jpda.visual/src/org/netbeans/modules/debugger/jpda/visual/ui/ScreenshotComponent.java
index b380a80..3a11bb8 100644
--- a/java/debugger.jpda.visual/src/org/netbeans/modules/debugger/jpda/visual/ui/ScreenshotComponent.java
+++ b/java/debugger.jpda.visual/src/org/netbeans/modules/debugger/jpda/visual/ui/ScreenshotComponent.java
@@ -402,7 +402,7 @@
     
     private static ComponentInfo getFirstCustomComponent(Node node) {
         ComponentInfo ci = node.getLookup().lookup(ComponentInfo.class);
-        if (ci != null && ci instanceof JavaComponentInfo && ((JavaComponentInfo) ci).isCustomType()) {
+        if (ci instanceof JavaComponentInfo && ((JavaComponentInfo) ci).isCustomType()) {
             return ci;
         } else {
             Node[] nodes = node.getChildren().getNodes();
diff --git a/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig b/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
index fb6f2e7..32a710e 100644
--- a/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
+++ b/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.125.0
+#Version 1.127.0
 
 CLSS public abstract interface com.sun.source.tree.TreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.tree.TreeVisitor%1})
@@ -18,7 +18,9 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
@@ -49,6 +51,7 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
@@ -98,7 +101,9 @@
 meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
@@ -129,6 +134,7 @@
 meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
@@ -1461,7 +1467,7 @@
 meth public boolean exec(com.sun.jdi.event.Event)
 meth public boolean processCondition(com.sun.jdi.event.Event)
 supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
-hfds LOG,breakpoint,returnValueByEvent
+hfds CONSTRUCTOR,LOG,breakpoint,returnValueByEvent
 
 CLSS public org.netbeans.modules.debugger.jpda.breakpoints.PersistenceManager
 cons public init()
diff --git a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImpl.java b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImpl.java
index 76cea9e..ae8f554 100644
--- a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImpl.java
+++ b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImpl.java
@@ -291,7 +291,37 @@
         }
         return super.exec (event);
     }
-    
+    private static final String CONSTRUCTOR = "<init>";
+    static String checkForConstructor(String typeName, String methodName) {
+        String constructorName = typeName;
+        final int lastDot = constructorName.lastIndexOf('.');
+        if (methodName.equals(typeName.substring(lastDot + 1))) {
+            return CONSTRUCTOR;
+        }
+        int index = Math.max(lastDot,
+                constructorName.lastIndexOf('$'));
+        if (index > 0) {
+            constructorName = constructorName.substring(index + 1);
+            if (typeName.charAt(index) == '$') {
+                // test for: ...$<digits only>$<name>
+                int i = index - 1;
+                while (i > 0 && Character.isDigit(typeName.charAt(i))) {
+                    i--;
+                }
+                if (typeName.charAt(i) == '$') {
+                    if (constructorName.equals(typeName.substring(i + 1, index) + methodName)) {
+                        methodName = constructorName; // Constructor
+                    }
+                }
+            }
+        }
+        if (methodName.equals(constructorName)) {
+            return CONSTRUCTOR; // Constructor
+        } else {
+            return methodName;
+        }
+    }
+
     @Override
     protected void classLoaded (List<ReferenceType> referenceTypes) {
         boolean submitted = false;
@@ -320,29 +350,10 @@
             Set<String> entryMethodNames = null;
             Set<String> exitMethodNames = null;
             boolean locationEntry = false;
-            String methodName = breakpoint.getMethodName();
             String typeName = referenceType.name();
+            String methodName = checkForConstructor(typeName, breakpoint.getMethodName());
             String outerArgsSignature = null;   // Signature of arguments from outer classes
-            String constructorName = typeName;
-            int index = Math.max(constructorName.lastIndexOf('.'),
-                                 constructorName.lastIndexOf('$'));
-            if (index > 0) {
-                constructorName = constructorName.substring(index + 1);
-                if (typeName.charAt(index) == '$') {
-                    // test for: ...$<digits only>$<name>
-                    int i = index - 1;
-                    while (i > 0 && Character.isDigit(typeName.charAt(i))) {
-                        i--;
-                    }
-                    if (typeName.charAt(i) == '$') {
-                        if (constructorName.equals(typeName.substring(i+1, index) + methodName)) {
-                            methodName = constructorName; // Constructor
-                        }
-                    }
-                }
-            }
-            if (methodName.equals(constructorName)) {
-                methodName = "<init>"; // Constructor
+            if (methodName.equals(CONSTRUCTOR)) {
                 if (!ReferenceTypeWrapper.isStatic0(referenceType)) {
                     outerArgsSignature = findOuterArgsSignature(typeName, referenceType);
                 }
diff --git a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/expr/EvaluatorVisitor.java b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/expr/EvaluatorVisitor.java
index 32ec7a6..d82ef93 100644
--- a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/expr/EvaluatorVisitor.java
+++ b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/expr/EvaluatorVisitor.java
@@ -2621,7 +2621,7 @@
                     throw iex; // re-throw the original
                 }
             }
-            if (enclosing != null && enclosing instanceof ObjectReference) {
+            if (enclosing instanceof ObjectReference) {
                 ObjectReference enclosingObject = (ObjectReference) enclosing;
                 argVals.add(0, enclosingObject);
                 firstParamSignature = enclosingObject.referenceType().signature();
@@ -2705,7 +2705,7 @@
                     throw iex; // re-throw the original
                 }
             }
-            if (enclosing != null && enclosing instanceof ObjectReference) {
+            if (enclosing instanceof ObjectReference) {
                 ObjectReference enclosingObject = (ObjectReference) enclosing;
                 argVals.add(0, enclosingObject);
                 argTypes.add(0, enclosingObject.referenceType());
diff --git a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/ThreadsCache.java b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/ThreadsCache.java
index d2fb2f9..d684e90 100644
--- a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/ThreadsCache.java
+++ b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/ThreadsCache.java
@@ -347,7 +347,7 @@
 
     public boolean exec(Event event) {
         if (event instanceof ThreadStartEvent) {
-            ThreadReference thread;;
+            ThreadReference thread;
             boolean handleGroups = debugger.isInterestedInThreadGroups();
             ThreadGroupReference group = null;
             try {
diff --git a/java/debugger.jpda/test/unit/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImplTest.java b/java/debugger.jpda/test/unit/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImplTest.java
new file mode 100644
index 0000000..ac82022
--- /dev/null
+++ b/java/debugger.jpda/test/unit/src/org/netbeans/modules/debugger/jpda/breakpoints/MethodBreakpointImplTest.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.debugger.jpda.breakpoints;
+
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+public class MethodBreakpointImplTest {
+    @Test
+    public void testRecognizeSimpleConstructor() {
+        String res = MethodBreakpointImpl.checkForConstructor("java.lang.String", "String");
+        assertEquals("It is constructor", "<init>", res);
+    }
+    @Test
+    public void testRecognizeInnerConstructor() {
+        String res = MethodBreakpointImpl.checkForConstructor("java.util.Map$Entry", "Entry");
+        assertEquals("It is constructor", "<init>", res);
+    }
+    @Test
+    public void testRecognizeScalaConstructor() {
+        String res = MethodBreakpointImpl.checkForConstructor("org.enso.compiler.core.IR$CallArgument$Specified", "IR$CallArgument$Specified");
+        assertEquals("It is constructor", "<init>", res);
+    }
+}
diff --git a/java/editor.htmlui/nbproject/project.properties b/java/editor.htmlui/nbproject/project.properties
index 4335fc8..395535d 100644
--- a/java/editor.htmlui/nbproject/project.properties
+++ b/java/editor.htmlui/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 requires.nb.javac=true
diff --git a/java/form/src/org/netbeans/modules/form/forminfo/FormInfo.java b/java/form/src/org/netbeans/modules/form/forminfo/FormInfo.java
index 6c55a67..ddd8846 100644
--- a/java/form/src/org/netbeans/modules/form/forminfo/FormInfo.java
+++ b/java/form/src/org/netbeans/modules/form/forminfo/FormInfo.java
@@ -31,7 +31,7 @@
  *
  * @deprecated
  */
-
+@Deprecated
 public abstract class FormInfo
 {
     /** Constant for empty list of properties */
diff --git a/java/form/src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java b/java/form/src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
index d90495a..496b04b 100644
--- a/java/form/src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
+++ b/java/form/src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
@@ -763,7 +763,7 @@
     private boolean plainAlignmentChange(IncludeDesc ndesc, IncludeDesc odesc) {
         if (closedSpace != null && odesc.snappedParallel != null) {
             if (restoreDimension()) {
-                LayoutInterval li = dragger.getMovingComponents()[0].getLayoutInterval(dimension);;
+                LayoutInterval li = dragger.getMovingComponents()[0].getLayoutInterval(dimension);
                 while (li.getParent() != null) {
                     if (li.getParent().isParallel()) {
                         layoutModel.setIntervalAlignment(li, ndesc.alignment);
diff --git a/java/form/test/qa-functional/src/org/netbeans/qa/form/databinding/SetUpDerbyDatabaseTest.java b/java/form/test/qa-functional/src/org/netbeans/qa/form/databinding/SetUpDerbyDatabaseTest.java
index 6bd535a..8816db5 100644
--- a/java/form/test/qa-functional/src/org/netbeans/qa/form/databinding/SetUpDerbyDatabaseTest.java
+++ b/java/form/test/qa-functional/src/org/netbeans/qa/form/databinding/SetUpDerbyDatabaseTest.java
@@ -45,7 +45,7 @@
  * 20 April 2011 NOT WORKS NOW
  */
 public class SetUpDerbyDatabaseTest  extends ExtJellyTestCase {
-    public static String TMP_DB_DIR_NAME = "TempDerbyDatabaseDir" + String.valueOf(new Date().getTime());;
+    public static String TMP_DB_DIR_NAME = "TempDerbyDatabaseDir" + String.valueOf(new Date().getTime());
     public static String DEFAULT_DERBY_DIR_NAME = "db";    
 
     public static String JAVA_DB_MENU = "Tools|Java DB Database|";
diff --git a/java/gradle.java/nbproject/org-netbeans-modules-gradle-java.sig b/java/gradle.java/nbproject/org-netbeans-modules-gradle-java.sig
index 15f7ca0..7041773 100644
--- a/java/gradle.java/nbproject/org-netbeans-modules-gradle-java.sig
+++ b/java/gradle.java/nbproject/org-netbeans-modules-gradle-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.19
+#Version 1.20.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaRuntimePlatformBridge.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaRuntimePlatformBridge.java
new file mode 100644
index 0000000..ad8b02b
--- /dev/null
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaRuntimePlatformBridge.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.gradle.java;
+
+import java.beans.PropertyChangeListener;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.java.platform.JavaPlatform;
+import org.netbeans.api.java.platform.JavaPlatformManager;
+import org.netbeans.api.java.platform.PlatformsCustomizer;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.util.ChangeSupport;
+import org.openide.util.WeakListeners;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ *
+ * @author lkishalmi
+ */
+@ServiceProvider(service = JavaRuntimeManager.class, position = 0)
+public class JavaRuntimePlatformBridge implements JavaRuntimeManager {
+    private static final String PROP_PLATFORM_ID = "platform.ant.name"; //NOI18N
+
+    private Map<String, JavaRuntime> cachedRuntimes = null;
+    private boolean listenerInitialized = false;
+    private final PropertyChangeListener clearCache;
+
+    private final ChangeSupport support;
+
+    public JavaRuntimePlatformBridge() {
+        support = new ChangeSupport(this);
+        clearCache =  (evt) -> {
+            cachedRuntimes = null;
+            support.fireChange();
+        };
+    }
+
+    @Override
+    public Map<String, JavaRuntime> getAvailableRuntimes() {
+        synchronized (this) {
+            if (cachedRuntimes == null) {
+
+                JavaPlatformManager jpm = JavaPlatformManager.getDefault();
+
+                if (!listenerInitialized) {
+                    jpm.addPropertyChangeListener(WeakListeners.propertyChange(clearCache, jpm));
+                    listenerInitialized = true;
+                }
+
+                Map<String, JavaRuntime> runtimes = new HashMap<>();
+                for (JavaPlatform platform : jpm.getInstalledPlatforms()) {
+                    String id = platform.getProperties().get(PROP_PLATFORM_ID);
+                    if (platform.isValid() && (id != null)) {
+                        FileObject javaInstallDir = platform.getInstallFolders().iterator().next();
+                        runtimes.put(id, JavaRuntimeManager.createJavaRuntime(id, platform.getDisplayName(), FileUtil.toFile(javaInstallDir)));
+                    }
+                }
+                cachedRuntimes = Collections.unmodifiableMap(runtimes);
+            }
+            return cachedRuntimes;
+        }
+    }
+
+    @Override
+    public Optional<Runnable> manageRuntimesAction() {
+        return Optional.of(() -> PlatformsCustomizer.showCustomizer(null));
+    }
+
+    @Override
+    public void addChangeListener(ChangeListener l) {
+        support.addChangeListener(l);
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener l) {
+        support.removeChangeListener(l);
+    }
+
+}
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/LookupProviders.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/LookupProviders.java
index 1dd4472..9060acd 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/LookupProviders.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/LookupProviders.java
@@ -38,7 +38,6 @@
                 Project project = baseContext.lookup(Project.class);
                 return Lookups.fixed(
                         new GradleJavaDebuggerImpl(project),
-                        new GradleJavaProjectProblemProvider(project),
                         new GradleJavaTokenProvider(project),
                         new RecommendedPrivilegedTemplatesImpl(),
                         new SourceGroupResourceWatchList(project)
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/Bundle.properties b/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/Bundle.properties
index bec58d8..6797c79 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/Bundle.properties
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/Bundle.properties
@@ -15,12 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-CompileOptionsPanel.jLabel2.text=<html>Allow NetBeans to make on-the-fly changes to the Gradle build process. This way a few useful IDE actions/options can be enabled without actually changing the build files.
-CompileOptionsPanel.cbAugmentedBuild.text=&Augmented Build Execution
-CompileOptionsPanel.btManagePlatforms.text=Manage Platforms...
-CompileOptionsPanel.lbPlatform.text=Java &Platform:
 SourceSetPanel.jLabel1.text=Output Classes:
 SourceSetPanel.jLabel2.text=Output Resources:
 SourceSetPanel.jLabel3.text=Source/Binary Format:
-CompileOptionsPanel.cbIncludeOpenProjects.text=Include Open Projects
-CompileOptionsPanel.lbIncludeOpenProjects.text=<html>Create a composite project from this project and the other open Gradle projects by generating '--include-build' parameters.
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.form b/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.form
deleted file mode 100644
index 88cf620..0000000
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.form
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you 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.
-
--->
-
-<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" attributes="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <Component id="lbPlatform" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="cbPlatform" pref="222" max="32767" attributes="0"/>
-                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                              <Component id="btManagePlatforms" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <Component id="cbAugmentedBuild" alignment="0" max="32767" attributes="0"/>
-                      </Group>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace min="-2" pref="25" max="-2" attributes="0"/>
-                      <Component id="jLabel2" pref="0" max="32767" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <EmptySpace min="21" pref="21" max="-2" attributes="0"/>
-                              <Component id="lbIncludeOpenProjects" pref="0" max="32767" attributes="0"/>
-                          </Group>
-                          <Group type="102" attributes="0">
-                              <Component id="cbIncludeOpenProjects" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
-                  </Group>
-              </Group>
-              <EmptySpace max="-2" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" alignment="0" attributes="0">
-              <EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
-              <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="lbPlatform" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="cbPlatform" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="btManagePlatforms" alignment="3" min="-2" max="-2" attributes="0"/>
-              </Group>
-              <EmptySpace type="separate" max="-2" attributes="0"/>
-              <Component id="cbAugmentedBuild" min="-2" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
-              <Component id="jLabel2" min="-2" pref="71" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
-              <Component id="cbIncludeOpenProjects" min="-2" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
-              <Component id="lbIncludeOpenProjects" min="-2" pref="56" max="-2" attributes="0"/>
-              <EmptySpace pref="156" max="32767" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Component class="javax.swing.JCheckBox" name="cbAugmentedBuild">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.cbAugmentedBuild.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-      </Properties>
-    </Component>
-    <Component class="javax.swing.JLabel" name="lbPlatform">
-      <Properties>
-        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
-          <ComponentRef name="cbPlatform"/>
-        </Property>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.lbPlatform.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-      </Properties>
-    </Component>
-    <Component class="javax.swing.JComboBox" name="cbPlatform">
-      <AuxValues>
-        <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;JavaPlatform&gt;"/>
-      </AuxValues>
-    </Component>
-    <Component class="javax.swing.JButton" name="btManagePlatforms">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.btManagePlatforms.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-      </Properties>
-      <Events>
-        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btManagePlatformsActionPerformed"/>
-      </Events>
-    </Component>
-    <Component class="javax.swing.JLabel" name="jLabel2">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-        <Property name="verticalAlignment" type="int" value="1"/>
-      </Properties>
-    </Component>
-    <Component class="javax.swing.JCheckBox" name="cbIncludeOpenProjects">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.cbIncludeOpenProjects.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-      </Properties>
-    </Component>
-    <Component class="javax.swing.JLabel" name="lbIncludeOpenProjects">
-      <Properties>
-        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/gradle/java/customizer/Bundle.properties" key="CompileOptionsPanel.lbIncludeOpenProjects.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-        </Property>
-        <Property name="verticalAlignment" type="int" value="1"/>
-      </Properties>
-    </Component>
-  </SubComponents>
-</Form>
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.java
deleted file mode 100644
index 60cfa87..0000000
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/customizer/CompileOptionsPanel.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.netbeans.modules.gradle.java.customizer;
-
-import org.netbeans.modules.gradle.api.GradleBaseProject;
-import org.netbeans.modules.gradle.api.NbGradleProject;
-import org.netbeans.modules.gradle.api.execute.RunUtils;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
-import javax.swing.AbstractListModel;
-import javax.swing.ComboBoxModel;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.ListCellRenderer;
-import javax.swing.UIManager;
-import javax.swing.plaf.UIResource;
-import org.netbeans.api.java.platform.*;
-import org.netbeans.api.project.Project;
-import org.netbeans.modules.gradle.java.execute.JavaRunUtils;
-import org.netbeans.spi.project.AuxiliaryProperties;
-import org.netbeans.spi.project.ui.support.ProjectCustomizer;
-import org.openide.util.Lookup;
-import org.openide.util.NbBundle;
-import org.openide.util.NbBundle.Messages;
-import org.openide.util.WeakListeners;
-
-/**
- *
- * @author Laszlo Kishalmi
- */
-public class CompileOptionsPanel extends javax.swing.JPanel {
-
-    private static final Logger LOG = Logger.getLogger(CompileOptionsPanel.class.getName());
-    public static final String HINT_JDK_PLATFORM = "netbeans.hint.jdkPlatform"; //NOI18N
-    private static final String PROP_PLATFORM_ID = "platform.ant.name"; //NOI18N
-
-    final Project project;
-    private final ActionListener storeListener = new ActionListener() {
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            save();
-        }
-    };
-
-    /**
-     * Creates new form CompileOptionsPanel
-     */
-    public CompileOptionsPanel() {
-        this(null);
-    }
-
-    private CompileOptionsPanel(Project project) {
-        this.project = project;
-        initComponents();
-        setupCheckBox(cbAugmentedBuild, RunUtils.PROP_AUGMENTED_BUILD, true);
-        setupCheckBox(cbIncludeOpenProjects, RunUtils.PROP_INCLUDE_OPEN_PROJECTS, false);
-        setupPlatform();
-    }
-
-    @Messages({
-        "# {0} - the name of the setting property",
-        "COMPILE_DISABLED_HINT=<html>This option is currently specificly controlled"
-        + " through your Gradle project (most likely through "
-        + "<b>gradle.properties</b>) by <br/> <b>netbeans.{0}</b> property."
-    })
-    private void setupCheckBox(JCheckBox check, String property, boolean defaultValue) {
-        GradleBaseProject gbp = project != null ? GradleBaseProject.get(project) : null;
-        if (gbp != null) {
-            if (gbp.getNetBeansProperty(property) != null) {
-                check.setEnabled(false);
-                check.setSelected(Boolean.parseBoolean(gbp.getNetBeansProperty(property)));
-                check.setToolTipText(Bundle.COMPILE_DISABLED_HINT(property));
-            } else {
-                Preferences prefs = NbGradleProject.getPreferences(project, false);
-                check.setSelected(prefs.getBoolean(property, defaultValue));
-            }
-        }
-    }
-
-    private void setupPlatform() {
-
-        GradleBaseProject gbp = project != null ? GradleBaseProject.get(project) : null;
-        if (gbp != null) {
-            String platformId = gbp.getNetBeansProperty(RunUtils.PROP_JDK_PLATFORM);
-            if (platformId != null) {
-                cbPlatform.setEnabled(false);
-                cbPlatform.setToolTipText(Bundle.COMPILE_DISABLED_HINT(RunUtils.PROP_JDK_PLATFORM));
-                lbPlatform.setEnabled(false);
-                lbPlatform.setToolTipText(Bundle.COMPILE_DISABLED_HINT(RunUtils.PROP_JDK_PLATFORM));
-            } else {
-               Preferences prefs = NbGradleProject.getPreferences(project, false);
-               platformId = prefs.get(RunUtils.PROP_JDK_PLATFORM, null);
-            }
-
-            JavaPlatform sel = JavaRunUtils.getActivePlatform(platformId).second();
-
-            PlatformsModel model = new PlatformsModel();
-            model.setSelectedItem(sel != null ? sel : platformId);
-            cbPlatform.setModel(model);
-            cbPlatform.setRenderer(new PlatformsRenderer());
-        } 
-    }
-    
-    private void saveCheckBox(JCheckBox check, String property) {
-        GradleBaseProject gbp = project != null ? GradleBaseProject.get(project) : null;
-        if ((gbp != null) && (gbp.getNetBeansProperty(property) == null)) {
-            Preferences prefs = NbGradleProject.getPreferences(project, false);
-            prefs.putBoolean(property, check.isSelected());
-        }
-    }
-
-    private void savePlatform() {
-        GradleBaseProject gbp = project != null ? GradleBaseProject.get(project) : null;
-        if ((gbp != null) && (gbp.getNetBeansProperty(RunUtils.PROP_JDK_PLATFORM) == null)) {
-            Preferences prefs = NbGradleProject.getPreferences(project, false);
-            Object sel = cbPlatform.getModel().getSelectedItem();
-            if (sel != null) {
-                String platformId = sel instanceof JavaPlatform ? ((JavaPlatform)sel).getProperties().get(PROP_PLATFORM_ID) : sel.toString();
-                prefs.put(RunUtils.PROP_JDK_PLATFORM, platformId);
-            }
-        }
-        
-    }
-    
-    private void save() {
-        saveCheckBox(cbAugmentedBuild, RunUtils.PROP_AUGMENTED_BUILD);
-        saveCheckBox(cbIncludeOpenProjects, RunUtils.PROP_INCLUDE_OPEN_PROJECTS);
-        savePlatform();
-        try {
-            NbGradleProject.getPreferences(project, false).flush();
-        } catch (BackingStoreException ex) {}
-    }
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        cbAugmentedBuild = new javax.swing.JCheckBox();
-        lbPlatform = new javax.swing.JLabel();
-        cbPlatform = new javax.swing.JComboBox<>();
-        btManagePlatforms = new javax.swing.JButton();
-        jLabel2 = new javax.swing.JLabel();
-        cbIncludeOpenProjects = new javax.swing.JCheckBox();
-        lbIncludeOpenProjects = new javax.swing.JLabel();
-
-        org.openide.awt.Mnemonics.setLocalizedText(cbAugmentedBuild, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.cbAugmentedBuild.text")); // NOI18N
-
-        lbPlatform.setLabelFor(cbPlatform);
-        org.openide.awt.Mnemonics.setLocalizedText(lbPlatform, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.lbPlatform.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(btManagePlatforms, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.btManagePlatforms.text")); // NOI18N
-        btManagePlatforms.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                btManagePlatformsActionPerformed(evt);
-            }
-        });
-
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.jLabel2.text")); // NOI18N
-        jLabel2.setVerticalAlignment(javax.swing.SwingConstants.TOP);
-
-        org.openide.awt.Mnemonics.setLocalizedText(cbIncludeOpenProjects, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.cbIncludeOpenProjects.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(lbIncludeOpenProjects, org.openide.util.NbBundle.getMessage(CompileOptionsPanel.class, "CompileOptionsPanel.lbIncludeOpenProjects.text")); // NOI18N
-        lbIncludeOpenProjects.setVerticalAlignment(javax.swing.SwingConstants.TOP);
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(layout.createSequentialGroup()
-                                .addComponent(lbPlatform)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(cbPlatform, 0, 222, Short.MAX_VALUE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addComponent(btManagePlatforms))
-                            .addComponent(cbAugmentedBuild, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
-                    .addGroup(layout.createSequentialGroup()
-                        .addGap(25, 25, 25)
-                        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(layout.createSequentialGroup()
-                                .addGap(21, 21, 21)
-                                .addComponent(lbIncludeOpenProjects, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
-                            .addGroup(layout.createSequentialGroup()
-                                .addComponent(cbIncludeOpenProjects)
-                                .addGap(0, 0, Short.MAX_VALUE)))))
-                .addContainerGap())
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addGap(4, 4, 4)
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(lbPlatform)
-                    .addComponent(cbPlatform, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(btManagePlatforms))
-                .addGap(18, 18, 18)
-                .addComponent(cbAugmentedBuild)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(cbIncludeOpenProjects)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(lbIncludeOpenProjects, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(156, Short.MAX_VALUE))
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    private JavaPlatform getSelPlatform () {
-        String platformId = project.getLookup().lookup(AuxiliaryProperties.class).
-                get(HINT_JDK_PLATFORM, true);
-        return JavaRunUtils.getActivePlatform(platformId).second();
-    }
-    
-    
-    private void btManagePlatformsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btManagePlatformsActionPerformed
-        PlatformsCustomizer.showCustomizer(getSelPlatform());
-    }//GEN-LAST:event_btManagePlatformsActionPerformed
-
-    @NbBundle.Messages("category.BuildCompile=Compile")
-    @ProjectCustomizer.CompositeCategoryProvider.Registration(
-            projectType = NbGradleProject.GRADLE_PROJECT_TYPE,
-            category = "build/compile",
-            categoryLabel = "#category.BuildCompile",
-            position = 300)
-    public static ProjectCustomizer.CompositeCategoryProvider buildCompileCustomizerProvider() {
-        return new ProjectCustomizer.CompositeCategoryProvider() {
-            @Override
-            public ProjectCustomizer.Category createCategory(Lookup context) {
-                return null;
-            }
-
-            @Override
-            public JComponent createComponent(ProjectCustomizer.Category category, Lookup context) {
-                Project project = context.lookup(Project.class);
-                CompileOptionsPanel customizer = new CompileOptionsPanel(project);
-                category.setStoreListener(customizer.storeListener);
-                return customizer;
-            }
-        };
-    }
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JButton btManagePlatforms;
-    private javax.swing.JCheckBox cbAugmentedBuild;
-    private javax.swing.JCheckBox cbIncludeOpenProjects;
-    private javax.swing.JComboBox<JavaPlatform> cbPlatform;
-    private javax.swing.JLabel jLabel2;
-    private javax.swing.JLabel lbIncludeOpenProjects;
-    private javax.swing.JLabel lbPlatform;
-    // End of variables declaration//GEN-END:variables
-
-    private static class PlatformsModel extends AbstractListModel<JavaPlatform> implements ComboBoxModel<JavaPlatform>, PropertyChangeListener {
-
-        private JavaPlatform[] data;
-        private Object sel;
-
-        @SuppressWarnings("LeakingThisInConstructor")
-        public PlatformsModel() {
-            JavaPlatformManager jpm = JavaPlatformManager.getDefault();
-            getPlatforms(jpm);
-            jpm.addPropertyChangeListener(WeakListeners.propertyChange(this, jpm));
-        }
-
-        @Override
-        public int getSize() {
-            return data.length;
-        }
-
-        @Override
-        public JavaPlatform getElementAt(int index) {
-            return data[index];
-        }
-
-        @Override
-        public void setSelectedItem(Object anItem) {
-            sel = anItem;
-            fireContentsChanged(this, 0, data.length);
-        }
-
-        @Override
-        public Object getSelectedItem() {
-            return sel;
-        }
-
-        @Override
-        public void propertyChange(PropertyChangeEvent evt) {
-            String current = sel instanceof JavaPlatform ? ((JavaPlatform)sel).getProperties().get(PROP_PLATFORM_ID):sel.toString();
-            JavaPlatformManager jpm = JavaPlatformManager.getDefault();
-            getPlatforms(jpm);
-            JavaPlatform found = null;
-            for (int i = 0; i < data.length; i++) {
-                JavaPlatform pf = data[i];
-                if (current.equals(pf.getProperties().get(PROP_PLATFORM_ID))) {
-                    found = pf;
-                    break;
-                }
-            }
-            setSelectedItem(found != null ? found : current);
-        }
-
-        private void getPlatforms(JavaPlatformManager jpm) {
-            data = jpm.getPlatforms(null, new Specification ("j2se", null)); //NOI18N
-            if(LOG.isLoggable(Level.FINE)) {
-                for (JavaPlatform jp : data) {
-                    LOG.log(Level.FINE, "Adding JavaPlaform: {0}", jp.getDisplayName());
-                }
-            }
-        }
-
-    }
-
-    private class PlatformsRenderer extends JLabel implements ListCellRenderer, UIResource {
-
-        @SuppressWarnings("OverridableMethodCallInConstructor")
-        public PlatformsRenderer() {
-            setOpaque(true);
-        }
-
-        @Override
-        @NbBundle.Messages({"# {0} - platformId", "LBL_MissingPlatform=Missing platform: {0}"})
-        public Component getListCellRendererComponent(JList list, Object value,
-                int index, boolean isSelected,
-                boolean cellHasFocus) {
-            // #89393: GTK needs name to render cell renderer "natively"
-            setName("ComboBox.listRenderer"); // NOI18N
-            if (value instanceof JavaPlatform) {
-                JavaPlatform jp = (JavaPlatform)value;
-                setText(jp.getDisplayName());
-                if ( isSelected ) {
-                    setBackground(list.getSelectionBackground());
-                    setForeground(list.getSelectionForeground());
-                } else {
-                    setBackground(list.getBackground());
-                    setForeground(list.getForeground());
-                }
-            } else {
-                if (value == null) {
-                    setText("");
-                } else {
-                    setText(Bundle.LBL_MissingPlatform(value));
-                    setForeground(UIManager.getColor("nb.errorForeground")); //NOI18N
-                }
-            }
-            return this;
-        }
-
-        // #89393: GTK needs name to render cell renderer "natively"
-        @Override
-        public String getName() {
-            String name = super.getName();
-            return name == null ? "ComboBox.renderer" : name;  // NOI18N
-        }
-    } // end of PlatformsRenderer
-    
-}
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/JavaRunUtils.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/JavaRunUtils.java
index f637a5d..046aa53 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/JavaRunUtils.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/JavaRunUtils.java
@@ -18,15 +18,12 @@
  */
 package org.netbeans.modules.gradle.java.execute;
 
-import java.util.prefs.Preferences;
 import org.netbeans.api.java.platform.JavaPlatform;
 import org.netbeans.api.java.platform.JavaPlatformManager;
 import org.netbeans.api.java.platform.Specification;
 import org.netbeans.api.project.Project;
-import org.netbeans.modules.gradle.api.GradleBaseProject;
-import org.netbeans.modules.gradle.api.NbGradleProject;
-import static org.netbeans.modules.gradle.api.execute.RunUtils.PROP_COMPILE_ON_SAVE;
-import static org.netbeans.modules.gradle.api.execute.RunUtils.PROP_JDK_PLATFORM;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
+import org.netbeans.modules.gradle.spi.execute.JavaRuntimeManager;
 import org.openide.util.Pair;
 
 /**
@@ -37,8 +34,17 @@
 
     private JavaRunUtils() {}
 
+    /**
+     * It is unlikely that the compile on save feature would be implemented for
+     * Gradle, as Gradle's continuous build feature provides a compelling
+     * alternative.
+     *
+     * @return {@code false}
+     * @deprecated
+     */
+    @Deprecated
     public static boolean isCompileOnSaveEnabled(Project project) {
-        return isOptionEnabled(project, PROP_COMPILE_ON_SAVE, false);
+        return false;
     }
 
     /**
@@ -67,26 +73,8 @@
     }
 
     public static Pair<String, JavaPlatform> getActivePlatform(Project project) {
-        Preferences prefs = NbGradleProject.getPreferences(project, false);
-        String platformId = prefs.get(PROP_JDK_PLATFORM, null);
-        if (platformId == null) {
-            GradleBaseProject gbp = GradleBaseProject.get(project);
-            platformId = gbp != null ? gbp.getNetBeansProperty(PROP_JDK_PLATFORM) : null;
-        }
-        return getActivePlatform(platformId);
-    }
-
-    private static boolean isOptionEnabled(Project project, String option, boolean defaultValue) {
-        GradleBaseProject gbp = GradleBaseProject.get(project);
-        if (gbp != null) {
-            String value = gbp.getNetBeansProperty(option);
-            if (value != null) {
-                return Boolean.valueOf(value);
-            } else {
-                return NbGradleProject.getPreferences(project, false).getBoolean(option, defaultValue);
-            }
-        }
-        return false;
+        JavaRuntimeManager.JavaRuntime rt = RunUtils.getActiveRuntime(project);
+        return getActivePlatform(rt.getId());
     }
 
 }
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/LookupProviders.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/LookupProviders.java
index 1dc7f74..87956d5 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/LookupProviders.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/execute/LookupProviders.java
@@ -29,6 +29,7 @@
  * @author lkishalmi
  */
 public class LookupProviders {
+
     @LookupProvider.Registration(projectType = NbGradleProject.GRADLE_PLUGIN_TYPE + "/java-base")
     public static LookupProvider createJavaBaseProvider() {
         return new LookupProvider() {
@@ -37,7 +38,6 @@
                 Project project = baseContext.lookup(Project.class);
                 return Lookups.fixed(
                         new DebugFixHooks(project),
-                        new GradleJavaPlatformProviderImpl(project),
                         new ShowJavadocHook(project)
                 );
             }
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/nodes/BootCPNodeFactory.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/nodes/BootCPNodeFactory.java
index f781992..ecb76dc 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/nodes/BootCPNodeFactory.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/nodes/BootCPNodeFactory.java
@@ -288,7 +288,7 @@
         public void stateChanged(ChangeEvent e) {
             this.fireNameChange(null,null);
             this.fireDisplayNameChange(null,null);
-            ((CPChildren) getChildren()).addNotify();;
+            ((CPChildren) getChildren()).addNotify();
         }
 
 
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/output/JavaCompilerProcessorFactory.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/output/JavaCompilerProcessorFactory.java
index 294face..3b099f6 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/output/JavaCompilerProcessorFactory.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/output/JavaCompilerProcessorFactory.java
@@ -68,12 +68,16 @@
         private StackTraceProcessor(RunConfig cfg) {
             project = cfg.getProject();
             ProjectSourcesClassPathProvider cpProvider = project.getLookup().lookup(ProjectSourcesClassPathProvider.class);
-            ClassPath[] projectClassPath = cpProvider.getProjectClassPath(ClassPath.EXECUTE);
-            ClassPath[] bootClassPath = cpProvider.getProjectClassPath(ClassPath.BOOT);
-            classPath = ClassPathSupport.createProxyClassPath(
-                    ClassPathSupport.createProxyClassPath(projectClassPath),
-                    ClassPathSupport.createProxyClassPath(bootClassPath)
-            );
+            if (cpProvider != null) {
+                ClassPath[] projectClassPath = cpProvider.getProjectClassPath(ClassPath.EXECUTE);
+                ClassPath[] bootClassPath = cpProvider.getProjectClassPath(ClassPath.BOOT);
+                classPath = ClassPathSupport.createProxyClassPath(
+                        ClassPathSupport.createProxyClassPath(projectClassPath),
+                        ClassPathSupport.createProxyClassPath(bootClassPath)
+                );
+            } else {
+                classPath = ClassPath.EMPTY;
+            }
         }
 
         @Override
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/output/LookupProviders.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/output/LookupProviders.java
index c652320..5e05551 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/output/LookupProviders.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/output/LookupProviders.java
@@ -29,7 +29,7 @@
  */
 public class LookupProviders {
 
-    @LookupProvider.Registration(projectType = NbGradleProject.GRADLE_PLUGIN_TYPE + "/java-base")
+    @LookupProvider.Registration(projectType = NbGradleProject.GRADLE_PROJECT_TYPE)
     public static LookupProvider createJavaBaseProvider() {
         return new LookupProvider() {
             @Override
@@ -41,16 +41,4 @@
             }
         };
     }
-
-    @LookupProvider.Registration(projectTypes = {
-        @LookupProvider.Registration.ProjectType(id = NbGradleProject.GRADLE_PLUGIN_TYPE + "/com.github.lkishalmi.gatling"),
-        @LookupProvider.Registration.ProjectType(id = NbGradleProject.GRADLE_PLUGIN_TYPE + "/io.gatling.gradle")
-    })
-    public static LookupProvider createGatlingProvider() {
-        return (baseContext) -> {
-            return Lookups.fixed(
-                    new JDPAProcessorFactory()
-            );
-        };
-    }
 }
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/DependencyText.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/DependencyText.java
index bf332f6..0f64539 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/DependencyText.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/DependencyText.java
@@ -22,7 +22,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
-import org.netbeans.modules.gradle.api.GradleDependency;
 import org.netbeans.modules.project.dependency.Dependency;
 import org.netbeans.modules.project.dependency.DependencyResult;
 
@@ -106,6 +105,19 @@
         sb.append(" [").append(startPos).append(", ").append(endPos).append("]}");
         return sb.toString();
     }
+    
+    public String getContentsOrGav() {
+        if (contents != null) {
+            return contents;
+        } else {
+            StringBuilder sb = new StringBuilder();
+            sb.append(group).append(':').append(name);
+            if (version != null && !version.isEmpty()) {
+                sb.append(':').append(version);
+            }
+            return sb.toString();
+        }
+    }
 
     /**
      * Dependency part information
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/TextDependencyScanner.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/TextDependencyScanner.java
index 4cc3aa2..d7feffb 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/TextDependencyScanner.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/queries/TextDependencyScanner.java
@@ -634,13 +634,6 @@
                 if (text.group == null || text.name == null) {
                     continue;
                 }
-                StringBuilder sb = new StringBuilder();
-                sb.append(text.group).append(text.name);
-                if (text.version != null) {
-                    sb.append(text.version);
-                } else {
-                    text.version = "";
-                }
             }
         }
     }
@@ -668,7 +661,7 @@
             if (DependencyText.KEYWORD_PROJECT.equals(t.keyword) &&
                 t.contents.equals(projectName)) {
                 return t;
-            } else if (t.keyword == null && t.contents != null && t.contents.equals(gav)) {
+            } else if (t.keyword == null && t.getContentsOrGav().equals(gav)) {
                 return t;
             }
         }
diff --git a/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/java/gradle.java/test/unit/data/dependencies/parse/variousSyntax.gradle b/java/gradle.java/test/unit/data/dependencies/parse/variousSyntax.gradle
new file mode 100644
index 0000000..d3fb44b
--- /dev/null
+++ b/java/gradle.java/test/unit/data/dependencies/parse/variousSyntax.gradle
@@ -0,0 +1,48 @@
+plugins {
+    id("com.github.johnrengelman.shadow") version "7.1.2"
+    id("io.micronaut.application") version "3.6.3"
+}
+version = "0.1"
+group = "com.example"
+repositories {
+    mavenCentral()
+}
+dependencies {
+    // with parenthesis
+    @@A@@annotationProcessor("io.micronaut:micronaut-http-validation")@@A@@
+    // without parenthesis
+    @@B@@implementation "io.micronaut:micronaut-http-client"@@B@@
+    // several deps in a common group
+    implementation(
+        @@C@@'io.micronaut:micronaut-jackson-databind'@@C@@,
+        @@D@@"jakarta.annotation:jakarta.annotation-api"@@D@@
+    )
+    // with a closure
+    @@E@@runtimeOnly("ch.qos.logback:logback-classic") {
+        transitive = true
+    }@@E@@
+    // map in parenthesis
+    @@F@@implementation(group : "io.micronaut", name: "micronaut-validation", version: "2.5")@@F@@
+    // list of maps in parenthesis
+    runtimeOnly(
+        @@G@@[group: 'org.hibernate', name: 'hibernate', version: '3.0.5', transitive: true]@@G@@,
+        @@H@@[group:'org.ow2.asm', name:'asm', version:'7.1']@@H@@
+    )
+    @@I@@implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.0'@@I@@
+}
+application {
+    mainClass.set("com.example.Application")
+}
+java {
+    sourceCompatibility = JavaVersion.toVersion("17")
+    targetCompatibility = JavaVersion.toVersion("17")
+}
+graalvmNative.toolchainDetection = false
+micronaut {
+    runtime("netty")
+    testRuntime("junit5")
+    processing {
+        incremental(true)
+        annotations("com.example.*")
+    }
+}
diff --git a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/RegexpGradleScannerTest.java b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/RegexpGradleScannerTest.java
index 3b95b65..ace9d9d 100644
--- a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/RegexpGradleScannerTest.java
+++ b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/RegexpGradleScannerTest.java
@@ -18,13 +18,20 @@
  */
 package org.netbeans.modules.gradle.java.queries;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import org.netbeans.junit.NbTestCase;
+import org.netbeans.modules.project.dependency.ArtifactSpec;
+import org.netbeans.modules.project.dependency.Dependency;
+import org.netbeans.modules.project.dependency.ProjectSpec;
+import org.netbeans.modules.project.dependency.Scopes;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 
@@ -84,6 +91,7 @@
         List<DependencyText> deps = scanner.parseDependencyList(filteredText);
         assertEquals(12, deps.size());
         checkDependencyBoundaries(deps);
+        checkDependencyMap(scanner, deps);
     }
     
     public void testMicronautStarter() throws Exception {
@@ -96,11 +104,78 @@
         filteredText = filterAndStorePositions(f.asText());
         List<DependencyText> deps = scanner.parseDependencyList(filteredText);
         assertEquals(7, deps.size());
+        checkDependencyMap(scanner, deps);
+    }
+    
+    private static final List<String> expectedGavs = Arrays.asList(
+            "io.micronaut:micronaut-http-validation",
+            "io.micronaut:micronaut-http-client",
+            "io.micronaut:micronaut-jackson-databind",
+            "jakarta.annotation:jakarta.annotation-api",
+            "ch.qos.logback:logback-classic",
+            "io.micronaut:micronaut-validation:2.5",
+            "org.hibernate:hibernate:3.0.5",
+            "org.ow2.asm:asm:7.1",
+            "org.apache.logging.log4j:log4j-core:2.17.0"
+    );
+    
+    /**
+     * Checks that various declaration syntaxes are understood well by the parser.
+     */
+    public void testVariousSyntaxes() throws Exception {
+        FileObject f = FileUtil.toFileObject(getDataDir()).getFileObject("dependencies/parse/variousSyntax.gradle");
+        TextDependencyScanner scanner = new TextDependencyScanner();
+        
+        filteredText = filterAndStorePositions(f.asText());
+        scanner.withConfigurations(Arrays.asList(
+            "runtimeOnly", "implementation", "annotationProcessor"
+        ));
+        List<DependencyText> deps = scanner.parseDependencyList(filteredText);
+        List<String> gavs = deps.stream().map(DependencyText::getContentsOrGav).collect(Collectors.toList());
+        assertEquals(expectedGavs, gavs);
+        checkDependencyBoundaries(deps);
+        checkDependencyMap(scanner, deps);
+    }
+    
+    public void testMapLikeDeclaration() throws Exception {
+        FileObject f = FileUtil.toFileObject(getDataDir()).getFileObject("dependencies/parse/variousSyntax.gradle");
+        TextDependencyScanner scanner = new TextDependencyScanner();
+        
+        filteredText = filterAndStorePositions(f.asText());
+        scanner.withConfigurations(Arrays.asList(
+            "runtimeOnly", "implementation", "annotationProcessor"
+        ));
+        List<DependencyText> deps = scanner.parseDependencyList(filteredText);
+        assertNotNull(deps);
+        checkDependencyBoundaries(deps);
+        checkDependencyMap(scanner, deps);
     }
     
     private Map<String, Integer> startPosition = new HashMap<>();
     private Map<String, Integer> endPosition = new HashMap<>();
     
+    private void checkDependencyMap(TextDependencyScanner scanner, List<DependencyText> deps) {
+        List<Dependency> list = new ArrayList<>();
+        for (DependencyText t : deps) {
+            if (t.keyword == null && t.name != null && t.group != null && t.version != null) {
+                ArtifactSpec as = ArtifactSpec.builder(t.group, t.name, t.version, null).build();
+                Dependency d = Dependency.create(as, Scopes.RUNTIME, Collections.emptyList(), null);
+                list.add(d);
+            } else if ("project".equals(t.keyword)) {
+                ProjectSpec p = ProjectSpec.create(t.contents, null);
+                ArtifactSpec as = ArtifactSpec.builder(t.group, t.name, t.version, null).build();
+                Dependency d = Dependency.create(p, as, Scopes.RUNTIME, Collections.emptyList(), null);
+                list.add(d);
+            }
+        }
+        
+        DependencyText.Mapping mapping = scanner.mapDependencies(list);
+        for (Dependency d : list) {
+            DependencyText.Part found = mapping.getText(d, null);
+            assertNotNull(found);
+        }
+    }
+    
     private void checkDependencyBoundaries(List<DependencyText> deps) {
         int pos = 0;
         for (DependencyText d : deps) {
diff --git a/java/gradle.kit/nbproject/project.xml b/java/gradle.kit/nbproject/project.xml
index c44a608..889a963 100644
--- a/java/gradle.kit/nbproject/project.xml
+++ b/java/gradle.kit/nbproject/project.xml
@@ -39,6 +39,18 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.gradle.dists</code-name-base>
+                    <run-dependency>
+                        <specification-version>1.6</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.netbeans.modules.gradle.editor</code-name-base>
+                    <run-dependency>
+                        <specification-version>1.0</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.gradle.java</code-name-base>
                     <run-dependency>
                         <specification-version>1.0</specification-version>
diff --git a/java/gradle.test/nbproject/project.xml b/java/gradle.test/nbproject/project.xml
index 38e3b00..6bbce2d 100644
--- a/java/gradle.test/nbproject/project.xml
+++ b/java/gradle.test/nbproject/project.xml
@@ -29,8 +29,8 @@
                     <code-name-base>org.netbeans.modules.libs.gradle</code-name-base>
                     <compile-dependency/>
                     <run-dependency>
-                        <release-version>7</release-version>
-                        <specification-version>7.0</specification-version>
+                        <release-version>8</release-version>
+                        <specification-version>8.0.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/java/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java b/java/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
index 1709b01..a3e70dc 100644
--- a/java/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
+++ b/java/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
@@ -140,7 +140,7 @@
             if (manager != null) {
                 manager.displayOutput(session, msg, desc.getDestination().equals(Destination.StdErr));
             }
-            if ((parent != null) && (parent instanceof JvmTestOperationDescriptor)) {
+            if (parent instanceof JvmTestOperationDescriptor) {
                 Testcase tc = runningTests.get(getTestOpKey((JvmTestOperationDescriptor) parent));
                 if (tc != null) {
                     tc.addOutputLines(Arrays.asList(msg.split("\\R")));
diff --git a/java/gradle.test/src/org/netbeans/modules/gradle/test/ui/nodes/GradleJUnitNodeOpener.java b/java/gradle.test/src/org/netbeans/modules/gradle/test/ui/nodes/GradleJUnitNodeOpener.java
index 7656f87..64d43e7 100644
--- a/java/gradle.test/src/org/netbeans/modules/gradle/test/ui/nodes/GradleJUnitNodeOpener.java
+++ b/java/gradle.test/src/org/netbeans/modules/gradle/test/ui/nodes/GradleJUnitNodeOpener.java
@@ -43,7 +43,7 @@
         Children children = tn.getChildren();
         if (children != null) {
             Node first = children.getNodeAt(0);
-            if ((first != null) && (first instanceof GradleTestMethodNode)) {
+            if (first instanceof GradleTestMethodNode) {
                 GradleTestMethodNode node = (GradleTestMethodNode) first;
                 Location loc = node.getTestLocation().withNoTarget();
                 new LocationOpener(loc, node).open();
diff --git a/java/hudson.ant/nbproject/project.properties b/java/hudson.ant/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/java/hudson.ant/nbproject/project.properties
+++ b/java/hudson.ant/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/i18n/nbproject/org-netbeans-modules-i18n.sig b/java/i18n/nbproject/org-netbeans-modules-i18n.sig
index 9288142..6e8ec3e 100644
--- a/java/i18n/nbproject/org-netbeans-modules-i18n.sig
+++ b/java/i18n/nbproject/org-netbeans-modules-i18n.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.70
+#Version 1.71
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/java/j2ee.core.utilities/nbproject/org-netbeans-modules-j2ee-core-utilities.sig b/java/j2ee.core.utilities/nbproject/org-netbeans-modules-j2ee-core-utilities.sig
index 386ef86..d0e9fc2 100644
--- a/java/j2ee.core.utilities/nbproject/org-netbeans-modules-j2ee-core-utilities.sig
+++ b/java/j2ee.core.utilities/nbproject/org-netbeans-modules-j2ee-core-utilities.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51
+#Version 1.52
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/j2ee.eclipselink/nbproject/org-netbeans-modules-j2ee-eclipselink.sig b/java/j2ee.eclipselink/nbproject/org-netbeans-modules-j2ee-eclipselink.sig
index 6c7a8c5..f70ed57 100644
--- a/java/j2ee.eclipselink/nbproject/org-netbeans-modules-j2ee-eclipselink.sig
+++ b/java/j2ee.eclipselink/nbproject/org-netbeans-modules-j2ee-eclipselink.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/rename/RelationshipMappingRename.java b/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/rename/RelationshipMappingRename.java
index 74e2265..ac49e2d 100644
--- a/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/rename/RelationshipMappingRename.java
+++ b/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/rename/RelationshipMappingRename.java
@@ -321,7 +321,7 @@
                 DataObject dobj = DataObject.find(getParentFile());
                 if (dobj != null) {
                     EditorCookie.Observable obs = dobj.getLookup().lookup(EditorCookie.Observable.class);
-                    if (obs != null && obs instanceof CloneableEditorSupport) {
+                    if (obs instanceof CloneableEditorSupport) {
                         CloneableEditorSupport supp = (CloneableEditorSupport)obs;
 
                     PositionBounds bounds = new PositionBounds(
diff --git a/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/whereused/RelationshipMappingWhereUsed.java b/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/whereused/RelationshipMappingWhereUsed.java
index e1b4bbe..c12f163 100644
--- a/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/whereused/RelationshipMappingWhereUsed.java
+++ b/java/j2ee.jpa.refactoring/src/org/netbeans/modules/j2ee/jpa/refactoring/whereused/RelationshipMappingWhereUsed.java
@@ -262,7 +262,7 @@
                 DataObject dobj = DataObject.find(getParentFile());
                 if (dobj != null) {
                     EditorCookie.Observable obs = dobj.getLookup().lookup(EditorCookie.Observable.class);
-                    if (obs != null && obs instanceof CloneableEditorSupport) {
+                    if (obs instanceof CloneableEditorSupport) {
                         CloneableEditorSupport supp = (CloneableEditorSupport)obs;
 
                     PositionBounds bounds = new PositionBounds(
diff --git a/java/j2ee.jpa.verification/nbproject/org-netbeans-modules-j2ee-jpa-verification.sig b/java/j2ee.jpa.verification/nbproject/org-netbeans-modules-j2ee-jpa-verification.sig
index e93c2f1..a087847 100644
--- a/java/j2ee.jpa.verification/nbproject/org-netbeans-modules-j2ee-jpa-verification.sig
+++ b/java/j2ee.jpa.verification/nbproject/org-netbeans-modules-j2ee-jpa-verification.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.52
+#Version 1.53
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/SerializableClass.java b/java/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/SerializableClass.java
index 9827eb2..32c0b5a 100644
--- a/java/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/SerializableClass.java
+++ b/java/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/SerializableClass.java
@@ -114,7 +114,7 @@
         // Check if the super class implements java.io.Serializable
         // See issue 139751
         TypeMirror superCls = subject.getSuperclass();
-        while (superCls != null && (superCls instanceof DeclaredType)) {
+        while (superCls instanceof DeclaredType) {
             TypeElement superElem = (TypeElement) ((DeclaredType) superCls).asElement();
             if (extendsFromSerializable(superElem)) {
                 return null;
diff --git a/java/j2ee.metadata.model.support/nbproject/org-netbeans-modules-j2ee-metadata-model-support.sig b/java/j2ee.metadata.model.support/nbproject/org-netbeans-modules-j2ee-metadata-model-support.sig
index b19e284..7494de8 100644
--- a/java/j2ee.metadata.model.support/nbproject/org-netbeans-modules-j2ee-metadata-model-support.sig
+++ b/java/j2ee.metadata.model.support/nbproject/org-netbeans-modules-j2ee-metadata-model-support.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/j2ee.metadata/nbproject/org-netbeans-modules-j2ee-metadata.sig b/java/j2ee.metadata/nbproject/org-netbeans-modules-j2ee-metadata.sig
index 8effb94..9423cfa 100644
--- a/java/j2ee.metadata/nbproject/org-netbeans-modules-j2ee-metadata.sig
+++ b/java/j2ee.metadata/nbproject/org-netbeans-modules-j2ee-metadata.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/java/j2ee.persistence/nbproject/org-netbeans-modules-j2ee-persistence.sig b/java/j2ee.persistence/nbproject/org-netbeans-modules-j2ee-persistence.sig
index d3bd1cc..2d8e38f 100644
--- a/java/j2ee.persistence/nbproject/org-netbeans-modules-j2ee-persistence.sig
+++ b/java/j2ee.persistence/nbproject/org-netbeans-modules-j2ee-persistence.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.72.0
+#Version 1.73.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/CompletionContext.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/CompletionContext.java
index 84f648c..d82044d 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/CompletionContext.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/CompletionContext.java
@@ -192,7 +192,7 @@
             //user enters an attribute name
             case ARGUMENT:
                 completionType = CompletionType.ATTRIBUTE;
-                typedChars = token.text().toString().substring(0, caretOffset - tOffset);;
+                typedChars = token.text().toString().substring(0, caretOffset - tOffset);
                 break;
 
             //some random character
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/completion/db/DBCompletionContextResolver.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/completion/db/DBCompletionContextResolver.java
index 6c7b5cf..b088a19 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/completion/db/DBCompletionContextResolver.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/editor/completion/db/DBCompletionContextResolver.java
@@ -594,7 +594,7 @@
                     if(nn != null && nn.getName().equals("JoinTable")) { //NOI18N
                         Map attrs = nn.getAttributes();
                         Object val = attrs.get("table"); //NOI18N
-                        if(val != null && val instanceof CCParser.CC) {
+                        if(val instanceof CCParser.CC) {
                             CCParser.CC tableNN = (CCParser.CC)val;
                             if(tableNN.getName().equals("Table")) {//NOI18N
                                 tblNN = tableNN;
@@ -643,7 +643,7 @@
         
         if ("mappedBy".equals(completedMember)) { // NOI18N
             Element type = null;//ctx.getSyntaxSupport().getTypeFromName(resolvedClassName, false, null, false);
-            if(type != null && type instanceof TypeElement) {
+            if(type instanceof TypeElement) {
                 TypeElement cdef = (TypeElement)type;
                 Entity entity = PersistenceUtils.getEntity(cdef.getQualifiedName().toString(), ctx.getEntityMappings());
                 if(entity != null) {
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceToolBarMVElement.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceToolBarMVElement.java
index 3af53a3..9ed1782 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceToolBarMVElement.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceToolBarMVElement.java
@@ -396,7 +396,7 @@
                 public void propertyChange(PropertyChangeEvent evt) {
                     if (evt.getPropertyName().equals(PersistenceUnitWizardPanel.IS_VALID)) {
                         Object newvalue = evt.getNewValue();
-                        if (newvalue != null && newvalue instanceof Boolean) {
+                        if (newvalue instanceof Boolean) {
                             validateUnitName(panel);
                             nd.setValid((Boolean) newvalue);
                             
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/Util.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/Util.java
index 5800f11..df6d35f 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/Util.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/Util.java
@@ -319,7 +319,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(PersistenceUnitWizardPanel.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         nd.setValid(((Boolean) newvalue).booleanValue());
                         createPUButton.setEnabled(((Boolean) newvalue).booleanValue());
                     }
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/entity/EntityWizardDescriptor.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/entity/EntityWizardDescriptor.java
index c7dc510..b699341 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/entity/EntityWizardDescriptor.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/entity/EntityWizardDescriptor.java
@@ -62,7 +62,7 @@
                 public void propertyChange(PropertyChangeEvent evt) {
                     if (evt.getPropertyName().equals(EntityWizardPanel.IS_VALID)) {
                         Object newvalue = evt.getNewValue();
-                        if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                        if (newvalue instanceof Boolean) {
                             stateChanged(null);
                         }
                     }
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/library/PersistenceLibraryCustomizer.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/library/PersistenceLibraryCustomizer.java
index 3d9e8cb..a19d463 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/library/PersistenceLibraryCustomizer.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/library/PersistenceLibraryCustomizer.java
@@ -45,7 +45,7 @@
             public void propertyChange(PropertyChangeEvent evt) {
                 if (evt.getPropertyName().equals(PersistenceLibraryPanel.IS_VALID)) {
                     Object newvalue = evt.getNewValue();
-                    if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                    if (newvalue instanceof Boolean) {
                         descriptor.setValid(((Boolean)newvalue).booleanValue());
                     }
                 }
diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/unit/PersistenceUnitWizardDescriptor.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/unit/PersistenceUnitWizardDescriptor.java
index ad469cc..2315dd9 100644
--- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/unit/PersistenceUnitWizardDescriptor.java
+++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/unit/PersistenceUnitWizardDescriptor.java
@@ -75,7 +75,7 @@
                 public void propertyChange(PropertyChangeEvent evt) {
                     if (evt.getPropertyName().equals(PersistenceUnitWizardPanel.IS_VALID)) {
                         Object newvalue = evt.getNewValue();
-                        if ((newvalue != null) && (newvalue instanceof Boolean)) {
+                        if (newvalue instanceof Boolean) {
                             stateChanged(null);
                         }
                     }
diff --git a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java
index fee819d..278ecf3 100644
--- a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java
+++ b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java
@@ -85,7 +85,7 @@
         // Java EE
         PersistenceValidator javaEEvalidator = new PersistenceValidatorImpl(dataObject, false);
         errors = javaEEvalidator.validate();
-        assertTrue(errors.isEmpty());;
+        assertTrue(errors.isEmpty());
     }
     
     /**
@@ -109,7 +109,7 @@
         // Java EE
         PersistenceValidator javaEEvalidator = new PersistenceValidatorImpl(dataObject, false);
         errors = javaEEvalidator.validate();
-        assertTrue(errors.isEmpty());;
+        assertTrue(errors.isEmpty());
     }
     
     /**
diff --git a/java/j2ee.persistenceapi/nbproject/org-netbeans-modules-j2ee-persistenceapi.sig b/java/j2ee.persistenceapi/nbproject/org-netbeans-modules-j2ee-persistenceapi.sig
index 5a7c42b..cbbe0da 100644
--- a/java/j2ee.persistenceapi/nbproject/org-netbeans-modules-j2ee-persistenceapi.sig
+++ b/java/j2ee.persistenceapi/nbproject/org-netbeans-modules-j2ee-persistenceapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.53.0
+#Version 1.54.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.api.common/nbproject/org-netbeans-modules-java-api-common.sig b/java/java.api.common/nbproject/org-netbeans-modules-java-api-common.sig
index 2c1fdd4..d645ad0 100644
--- a/java/java.api.common/nbproject/org-netbeans-modules-java-api-common.sig
+++ b/java/java.api.common/nbproject/org-netbeans-modules-java-api-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.140
+#Version 1.141
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig b/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig
index 64b351e..0dc019d 100644
--- a/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig
+++ b/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.2.0
+#Version 2.3.0
 
 CLSS public abstract interface java.io.Serializable
 
@@ -42,6 +42,7 @@
 innr public abstract interface static ItemFactory
 innr public abstract interface static LambdaItemFactory
 innr public abstract interface static ModuleItemFactory
+innr public abstract interface static RecordPatternItemFactory
 innr public abstract interface static TypeCastableItemFactory
 innr public final static !enum Options
 meth protected void resolve(org.netbeans.api.java.source.CompilationController) throws java.io.IOException
@@ -55,7 +56,7 @@
  anno 4 org.netbeans.api.annotations.common.NullAllowed()
 meth public void run(org.netbeans.modules.parsing.api.ResultIterator) throws java.lang.Exception
 supr org.netbeans.modules.parsing.api.UserTask
-hfds ABSTRACT_KEYWORD,ASSERT_KEYWORD,BLOCK_KEYWORDS,BOOLEAN_KEYWORD,BREAK_KEYWORD,BYTE_KEYWORD,CASE_KEYWORD,CATCH_KEYWORD,CHAR_KEYWORD,CLASS_BODY_KEYWORDS,CLASS_KEYWORD,COLON,CONTINUE_KEYWORD,DEFAULT_KEYWORD,DOUBLE_KEYWORD,DO_KEYWORD,ELSE_KEYWORD,EMPTY,ENUM_KEYWORD,ERROR,EXPORTS_KEYWORD,EXTENDS_KEYWORD,FALSE_KEYWORD,FINALLY_KEYWORD,FINAL_KEYWORD,FLOAT_KEYWORD,FOR_KEYWORD,IF_KEYWORD,IMPLEMENTS_KEYWORD,IMPORT_KEYWORD,INIT,INSTANCEOF_KEYWORD,INTERFACE_KEYWORD,INT_KEYWORD,JAVA_LANG_CLASS,JAVA_LANG_ITERABLE,JAVA_LANG_OBJECT,LONG_KEYWORD,MODULE_BODY_KEYWORDS,MODULE_KEYWORD,NATIVE_KEYWORD,NEW_KEYWORD,NON_SEALED_KEYWORD,NULL_KEYWORD,OPENS_KEYWORD,OPEN_KEYWORD,PACKAGE_KEYWORD,PERMITS_KEYWORD,PRIM_KEYWORDS,PRIVATE_KEYWORD,PROTECTED_KEYWORD,PROVIDES_KEYWORD,PUBLIC_KEYWORD,RECORD_KEYWORD,REQUIRES_KEYWORD,RETURN_KEYWORD,SEALED_KEYWORD,SEMI,SHORT_KEYWORD,SPACE,STATEMENT_KEYWORDS,STATEMENT_SPACE_KEYWORDS,STATIC_KEYWORD,STRICT_KEYWORD,SUPER_KEYWORD,SWITCH_KEYWORD,SYNCHRONIZED_KEYWORD,THIS_KEYWORD,THROWS_KEYWORD,THROW_KEYWORD,TO_KEYWORD,TRANSIENT_KEYWORD,TRANSITIVE_KEYWORD,TRUE_KEYWORD,TRY_KEYWORD,USES_KEYWORD,VAR_KEYWORD,VOID_KEYWORD,VOLATILE_KEYWORD,WHILE_KEYWORD,WITH_KEYWORD,YIELD_KEYWORD,anchorOffset,hasAdditionalClasses,hasAdditionalMembers,itemFactory,options,results
+hfds ABSTRACT_KEYWORD,ASSERT_KEYWORD,BLOCK_KEYWORDS,BOOLEAN_KEYWORD,BREAK_KEYWORD,BYTE_KEYWORD,CASE_KEYWORD,CATCH_KEYWORD,CHAR_KEYWORD,CLASS_BODY_KEYWORDS,CLASS_KEYWORD,COLON,CONTINUE_KEYWORD,DEFAULT_KEYWORD,DOUBLE_KEYWORD,DO_KEYWORD,ELSE_KEYWORD,EMPTY,ENUM_KEYWORD,ERROR,EXPORTS_KEYWORD,EXTENDS_KEYWORD,FALSE_KEYWORD,FINALLY_KEYWORD,FINAL_KEYWORD,FLOAT_KEYWORD,FOR_KEYWORD,IF_KEYWORD,IMPLEMENTS_KEYWORD,IMPORT_KEYWORD,INIT,INSTANCEOF_KEYWORD,INTERFACE_KEYWORD,INT_KEYWORD,JAVA_LANG_CLASS,JAVA_LANG_ITERABLE,JAVA_LANG_OBJECT,LONG_KEYWORD,MODULE_BODY_KEYWORDS,MODULE_KEYWORD,NATIVE_KEYWORD,NEW_KEYWORD,NON_SEALED_KEYWORD,NULL_KEYWORD,OPENS_KEYWORD,OPEN_KEYWORD,PACKAGE_KEYWORD,PERMITS_KEYWORD,PRIM_KEYWORDS,PRIVATE_KEYWORD,PROTECTED_KEYWORD,PROVIDES_KEYWORD,PUBLIC_KEYWORD,RECORD_KEYWORD,REQUIRES_KEYWORD,RETURN_KEYWORD,SEALED_KEYWORD,SEMI,SHORT_KEYWORD,SPACE,STATEMENT_KEYWORDS,STATEMENT_SPACE_KEYWORDS,STATIC_KEYWORD,STRICT_KEYWORD,SUPER_KEYWORD,SWITCH_KEYWORD,SYNCHRONIZED_KEYWORD,THIS_KEYWORD,THROWS_KEYWORD,THROW_KEYWORD,TO_KEYWORD,TRANSIENT_KEYWORD,TRANSITIVE_KEYWORD,TRUE_KEYWORD,TRY_KEYWORD,USES_KEYWORD,VAR_KEYWORD,VOID_KEYWORD,VOLATILE_KEYWORD,WHEN_KEYWORD,WHILE_KEYWORD,WITH_KEYWORD,YIELD_KEYWORD,anchorOffset,hasAdditionalClasses,hasAdditionalMembers,itemFactory,options,results
 
 CLSS public abstract interface static org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory<%0 extends java.lang.Object>
  outer org.netbeans.modules.java.completion.JavaCompletionTask
@@ -100,6 +101,11 @@
 meth public static org.netbeans.modules.java.completion.JavaCompletionTask$Options[] values()
 supr java.lang.Enum<org.netbeans.modules.java.completion.JavaCompletionTask$Options>
 
+CLSS public abstract interface static org.netbeans.modules.java.completion.JavaCompletionTask$RecordPatternItemFactory<%0 extends java.lang.Object>
+ outer org.netbeans.modules.java.completion.JavaCompletionTask
+intf org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory<{org.netbeans.modules.java.completion.JavaCompletionTask$RecordPatternItemFactory%0}>
+meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$RecordPatternItemFactory%0} createRecordPatternItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.TypeElement,javax.lang.model.type.DeclaredType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean)
+
 CLSS public abstract interface static org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory<%0 extends java.lang.Object>
  outer org.netbeans.modules.java.completion.JavaCompletionTask
 intf org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory<{org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory%0}>
diff --git a/java/java.completion/nbproject/project.properties b/java/java.completion/nbproject/project.properties
index 1135b05..58ed850 100644
--- a/java/java.completion/nbproject/project.properties
+++ b/java/java.completion/nbproject/project.properties
@@ -31,3 +31,8 @@
 
 # requires nb.javac for compiling of tests on Mac
 requires.nb.javac=true
+
+# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
+jms-compiler.flags.jvm=
+test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/java.debug/nbproject/project.properties b/java/java.debug/nbproject/project.properties
index b3caf16..32e177b 100644
--- a/java/java.debug/nbproject/project.properties
+++ b/java/java.debug/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 spec.version.base=1.57.0
 requires.nb.javac=true
 
diff --git a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
index ab9e668..647782d 100644
--- a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
+++ b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
@@ -29,6 +29,8 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyVetoException;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -122,6 +124,7 @@
     public void panelDeactivated() {
         TreeNavigatorJavaSourceFactory.getInstance().setLookup(Lookup.EMPTY, null);
         TreeNavigatorJavaSourceFactory.CaretAwareFactoryImpl.getInstance().setTask(null);
+        setHighlights(null, null);
     }
 
     static OffsetsBag getBag(Document doc) {
@@ -133,50 +136,63 @@
         
         return bag;
     }
-    
-    static void setHighlights(FileObject file, ExplorerManager manager) {
-        if (file == null) {
+
+    private static Reference<FileObject> lastFile = null;
+    static synchronized void setHighlights(FileObject file, ExplorerManager manager) {
+        FileObject last = lastFile != null ? lastFile.get() : null;
+        Document lastDoc = documentFor(last);
+
+        if (lastDoc != null) {
+            getBag(lastDoc).clear();
+        }
+
+        Document doc = documentFor(file);
+
+        if (doc == null) {
             return;
         }
-        try {
-            DataObject od = DataObject.find(file);
 
-            EditorCookie ec = od.getLookup().lookup(EditorCookie.class);
+        OffsetsBag bag = new OffsetsBag(doc, true);
 
-            if (ec == null) {
-                return;
-            }
-            Document doc = ec.getDocument();
+        for (Node n : manager.getSelectedNodes()) {
+            if (n instanceof OffsetProvider) {
+                OffsetProvider p = (OffsetProvider) n;
+                final int start = p.getStart();
+                final int end = p.getEnd();
+                final int pref = p.getPreferredPosition();
 
-            if (doc == null) {
-                return;
-            }
-            OffsetsBag bag = new OffsetsBag(doc, true);
+                if (start >= 0 && end >= 0) {
+                    bag.addHighlight(start, end, HIGHLIGHT);
+                }
 
-            for (Node n : manager.getSelectedNodes()) {
-                if (n instanceof OffsetProvider) {
-                    OffsetProvider p = (OffsetProvider) n;
-                    final int start = p.getStart();
-                    final int end = p.getEnd();
-                    final int pref = p.getPreferredPosition();
-                    
-                    if (start >= 0 && end >= 0) {
-                        bag.addHighlight(start, end, HIGHLIGHT);
-                    }
-                    
-                    if (pref >= 0) {
-                        bag.addHighlight(pref, pref+1, HIGHLIGHT_PREF);
-                    }
+                if (pref >= 0) {
+                    bag.addHighlight(pref, pref+1, HIGHLIGHT_PREF);
                 }
             }
+        }
 
-            getBag(doc).setHighlights(bag);
-        } catch (DataObjectNotFoundException ex) {
-            Logger.getLogger(TreeNavigatorProviderImpl.class.getName()).log(Level.FINE, null, ex);
+        getBag(doc).setHighlights(bag);
+
+        if (last != file) {
+            lastFile = new WeakReference<>(file);
         }
     }
-    
-    private static final AttributeSet HIGHLIGHT = AttributesUtilities.createImmutable(StyleConstants.Background, new Color(150, 190, 180));
+
+    private static Document documentFor(FileObject file) {
+        if (file == null) {
+            return null;
+        }
+
+        EditorCookie ec = file.getLookup().lookup(EditorCookie.class);
+
+        if (ec == null) {
+            return null;
+        }
+
+        return ec.getDocument();
+    }
+
+    private static final AttributeSet HIGHLIGHT = AttributesUtilities.createImmutable(StyleConstants.Background, new Color(220, 220, 220));
     private static final AttributeSet HIGHLIGHT_PREF = AttributesUtilities.createImmutable(StyleConstants.Underline, new Color(30, 255, 0));
     
     private final class TaskImpl implements CancellableTask<CompilationInfo> {
diff --git a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
index 2d93bdc..1dfb98d 100644
--- a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
+++ b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
@@ -19,65 +19,7 @@
 package org.netbeans.modules.java.debug;
 
 import com.sun.source.doctree.DocCommentTree;
-import com.sun.source.tree.AnnotatedTypeTree;
-import com.sun.source.tree.AnnotationTree;
-import com.sun.source.tree.ArrayAccessTree;
-import com.sun.source.tree.ArrayTypeTree;
-import com.sun.source.tree.AssertTree;
-import com.sun.source.tree.AssignmentTree;
-import com.sun.source.tree.BinaryTree;
-import com.sun.source.tree.BlockTree;
-import com.sun.source.tree.BreakTree;
-import com.sun.source.tree.CaseTree;
-import com.sun.source.tree.CatchTree;
-import com.sun.source.tree.ClassTree;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.tree.CompoundAssignmentTree;
-import com.sun.source.tree.ConditionalExpressionTree;
-import com.sun.source.tree.ContinueTree;
-import com.sun.source.tree.DoWhileLoopTree;
-import com.sun.source.tree.EmptyStatementTree;
-import com.sun.source.tree.EnhancedForLoopTree;
-import com.sun.source.tree.ErroneousTree;
-import com.sun.source.tree.ExportsTree;
-import com.sun.source.tree.ExpressionStatementTree;
-import com.sun.source.tree.ForLoopTree;
-import com.sun.source.tree.IdentifierTree;
-import com.sun.source.tree.IfTree;
-import com.sun.source.tree.ImportTree;
-import com.sun.source.tree.InstanceOfTree;
-import com.sun.source.tree.IntersectionTypeTree;
-import com.sun.source.tree.LabeledStatementTree;
-import com.sun.source.tree.LambdaExpressionTree;
-import com.sun.source.tree.LiteralTree;
-import com.sun.source.tree.MemberReferenceTree;
-import com.sun.source.tree.MemberSelectTree;
-import com.sun.source.tree.MethodTree;
-import com.sun.source.tree.MethodInvocationTree;
-import com.sun.source.tree.ModifiersTree;
-import com.sun.source.tree.ModuleTree;
-import com.sun.source.tree.NewArrayTree;
-import com.sun.source.tree.NewClassTree;
-import com.sun.source.tree.PackageTree;
-import com.sun.source.tree.ParameterizedTypeTree;
-import com.sun.source.tree.ParenthesizedTree;
-import com.sun.source.tree.PrimitiveTypeTree;
-import com.sun.source.tree.ProvidesTree;
-import com.sun.source.tree.RequiresTree;
-import com.sun.source.tree.ReturnTree;
-import com.sun.source.tree.SwitchTree;
-import com.sun.source.tree.SynchronizedTree;
-import com.sun.source.tree.ThrowTree;
 import com.sun.source.tree.Tree;
-import com.sun.source.tree.TryTree;
-import com.sun.source.tree.TypeCastTree;
-import com.sun.source.tree.TypeParameterTree;
-import com.sun.source.tree.UnaryTree;
-import com.sun.source.tree.UnionTypeTree;
-import com.sun.source.tree.UsesTree;
-import com.sun.source.tree.VariableTree;
-import com.sun.source.tree.WhileLoopTree;
-import com.sun.source.tree.WildcardTree;
 import com.sun.source.util.DocTrees;
 import com.sun.source.util.TreePath;
 import java.util.ArrayList;
@@ -91,7 +33,7 @@
 import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.java.source.CompilationInfo;
-import org.netbeans.api.java.source.support.CancellableTreePathScanner;
+import org.netbeans.api.java.source.support.CancellableTreeScanner;
 import org.openide.nodes.AbstractNode;
 import org.openide.nodes.Children;
 import org.openide.nodes.Node;
@@ -213,764 +155,66 @@
         }
     }
     
-    private static class FindChildrenTreeVisitor extends CancellableTreePathScanner<Void, List<Node>> {
+    private static class FindChildrenTreeVisitor extends CancellableTreeScanner<Void, List<Node>> {
         
         private final CompilationInfo info;
+        private TreePath currentPath;
         
         public FindChildrenTreeVisitor(CompilationInfo info, AtomicBoolean cancel) {
             super(cancel);
             this.info = info;
         }
-        
-        @Override
-        public Void visitAnnotation(AnnotationTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            //???
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitAnnotation(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
+
+        public Void scan(TreePath path, List<Node> d) {
+            currentPath = path.getParentPath();
+
+            scan(path.getLeaf(), d);
+
             return null;
         }
 
         @Override
-        public Void visitMethodInvocation(MethodInvocationTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitMethodInvocation(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+        public Void scan(Tree tree, List<Node> d) {
+            if (tree != null) {
+                TreePath oldPath = currentPath;
+                try {
+                    List<Node> below = new ArrayList<Node>();
+                    currentPath = new TreePath(currentPath, tree);
 
-        @Override
-        public Void visitAssert(AssertTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitAssert(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+                    //???
+                    addCorrespondingElement(currentPath, below);
+                    addCorrespondingType(currentPath, below);
+                    addCorrespondingComments(currentPath, below);
+                    addCorrespondingJavadoc(currentPath, below);
 
-        @Override
-        public Void visitAssignment(AssignmentTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitAssignment(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+                    super.scan(tree, below);
 
-        @Override
-        public Void visitCompoundAssignment(CompoundAssignmentTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCompoundAssignment(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBinary(BinaryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBinary(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBlock(BlockTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBlock(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBreak(BreakTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBreak(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCase(CaseTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCase(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCatch(CatchTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCatch(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitClass(ClassTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitClass(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitConditionalExpression(ConditionalExpressionTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitConditionalExpression(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitContinue(ContinueTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitContinue(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitUnionType(UnionTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUnionType(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitDoWhileLoop(DoWhileLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitDoWhileLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitErroneous(ErroneousTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            scan(tree.getErrorTrees(), below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitExports(ExportsTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitExports(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitExpressionStatement(ExpressionStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitExpressionStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitEnhancedForLoop(EnhancedForLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitEnhancedForLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitForLoop(ForLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitForLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIdentifier(IdentifierTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitIdentifier(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIf(IfTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitIf(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitImport(ImportTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitImport(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitArrayAccess(ArrayAccessTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitArrayAccess(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLabeledStatement(LabeledStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLabeledStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLambdaExpression(LambdaExpressionTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLambdaExpression(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLiteral(LiteralTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLiteral(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMemberReference(MemberReferenceTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-
-            super.visitMemberReference(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMethod(MethodTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitMethod(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitModifiers(ModifiersTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitModifiers(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitModule(ModuleTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitModule(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitNewArray(NewArrayTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitNewArray(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitNewClass(NewClassTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitNewClass(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitParenthesized(ParenthesizedTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitParenthesized(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitProvides(ProvidesTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitProvides(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitRequires(RequiresTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitRequires(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitReturn(ReturnTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitReturn(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMemberSelect(MemberSelectTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitMemberSelect(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitEmptyStatement(EmptyStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitEmptyStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitSwitch(SwitchTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitSwitch(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitSynchronized(SynchronizedTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitSynchronized(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitThrow(ThrowTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitThrow(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCompilationUnit(CompilationUnitTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitCompilationUnit(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitPackage(PackageTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitPackage(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitTry(TryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitTry(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitAnnotatedType(AnnotatedTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitAnnotatedType(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitParameterizedType(ParameterizedTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitParameterizedType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitArrayType(ArrayTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitArrayType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitTypeCast(TypeCastTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitTypeCast(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIntersectionType(IntersectionTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitIntersectionType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitPrimitiveType(PrimitiveTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitPrimitiveType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitTypeParameter(TypeParameterTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitTypeParameter(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitInstanceOf(InstanceOfTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitInstanceOf(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitUnary(UnaryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUnary(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitUses(UsesTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUses(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitVariable(VariableTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitVariable(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitWhileLoop(WhileLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitWhileLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitWildcard(WildcardTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitWildcard(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
+                    d.add(new TreeNode(info, currentPath, below));
+                } finally {
+                    currentPath = oldPath;
+                }
+            }
             return null;
         }
         
-        private void addCorrespondingJavadoc(List<Node> below) {
-            DocCommentTree docCommentTree = ((DocTrees) info.getTrees()).getDocCommentTree(getCurrentPath());
+        private void addCorrespondingJavadoc(TreePath currentPath, List<Node> below) {
+            DocCommentTree docCommentTree = ((DocTrees) info.getTrees()).getDocCommentTree(currentPath);
             
             if (docCommentTree != null) {
-                below.add(new DocTreeNode(info, getCurrentPath(), docCommentTree, docCommentTree));
+                below.add(new DocTreeNode(info, currentPath, docCommentTree, docCommentTree));
             } else {
                 below.add(new NotFoundJavadocNode("<javadoc-not-found>"));
             }
         }
 
-        private void addCorrespondingElement(List<Node> below) {
-            Element el = info.getTrees().getElement(getCurrentPath());
+        private void addCorrespondingElement(TreePath currentPath, List<Node> below) {
+            Element el = info.getTrees().getElement(currentPath);
             
             below.add(nodeForElement(info, el));
         }
 
-        private void addCorrespondingType(List<Node> below) {
-            TypeMirror tm = info.getTrees().getTypeMirror(getCurrentPath());
+        private void addCorrespondingType(TreePath currentPath, List<Node> below) {
+            TypeMirror tm = info.getTrees().getTypeMirror(currentPath);
             
             if (tm != null) {
                 below.add(new TypeNode(tm));
@@ -979,9 +223,9 @@
             }
         }
         
-        private void addCorrespondingComments(List<Node> below) {
-            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Preceding_Comments"), info.getTreeUtilities().getComments(getCurrentPath().getLeaf(), true)));
-            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Trailing_Comments"), info.getTreeUtilities().getComments(getCurrentPath().getLeaf(), false)));
+        private void addCorrespondingComments(TreePath currentPath, List<Node> below) {
+            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Preceding_Comments"), info.getTreeUtilities().getComments(currentPath.getLeaf(), true)));
+            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Trailing_Comments"), info.getTreeUtilities().getComments(currentPath.getLeaf(), false)));
         }
     }
     
diff --git a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
index 22cc9b2..18dd923 100644
--- a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
+++ b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
@@ -18,7 +18,6 @@
  */
 package org.netbeans.modules.java.editor.base.semantic;
 
-import com.sun.source.tree.BindingPatternTree;
 import com.sun.source.tree.CaseLabelTree;
 import com.sun.source.tree.CaseTree;
 import com.sun.source.tree.ClassTree;
@@ -51,19 +50,19 @@
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.prefs.Preferences;
 import java.util.stream.Collectors;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.Modifier;
+import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
 import javax.swing.text.Document;
 import org.netbeans.api.java.lexer.JavaTokenId;
@@ -84,6 +83,7 @@
 import org.netbeans.modules.parsing.spi.SchedulerEvent;
 import org.netbeans.modules.parsing.spi.TaskIndexingMode;
 import org.openide.filesystems.FileUtil;
+import org.openide.util.NbPreferences;
 import org.openide.util.Pair;
 
 
@@ -92,15 +92,53 @@
  * @author Jan Lahoda
  */
 public abstract class SemanticHighlighterBase extends JavaParserResultTask {
-    
+
+    public static final String JAVA_INLINE_HINT_PARAMETER_NAME = "javaInlineHintParameterName"; //NOI18N
+    public static final String JAVA_INLINE_HINT_CHAINED_TYPES = "javaInlineHintChainedTypes"; //NOI18N
+    public static final String JAVA_INLINE_HINT_VAR_TYPE = "javaInlineHintVarType"; //NOI18N
+
+    private static final Map<String, Boolean> DEFAULT_VALUES;
+
+    static {
+        Map<String, Boolean> defaultValuesBuilder = new HashMap<>();
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_PARAMETER_NAME, true);
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_CHAINED_TYPES, false);
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_VAR_TYPE, false);
+        DEFAULT_VALUES = Collections.unmodifiableMap(defaultValuesBuilder);
+    }
+
+    private static boolean javaInlineHintParameterName;
+    private static boolean javaInlineHintChainedTypes;
+    private static boolean javaInlineHintVarType;
+
+    private static boolean isJavaInlineHintParameterName() {
+        return javaInlineHintParameterName;
+    }
+
+    private static boolean isJavaInlineHintChainedTypes() {
+        return javaInlineHintChainedTypes;
+    }
+
+    private static boolean isJavaInlineHintVarType() {
+        return javaInlineHintVarType;
+    }
+
+    private static void updateFromPreferences() {
+        Preferences preferences = NbPreferences.root().node("/org/netbeans/modules/java/editor/InlineHints/default");
+        javaInlineHintParameterName = preferences.getBoolean(JAVA_INLINE_HINT_PARAMETER_NAME, DEFAULT_VALUES.get(JAVA_INLINE_HINT_PARAMETER_NAME));
+        javaInlineHintChainedTypes = preferences.getBoolean(JAVA_INLINE_HINT_CHAINED_TYPES, DEFAULT_VALUES.get(JAVA_INLINE_HINT_CHAINED_TYPES));
+        javaInlineHintVarType = preferences.getBoolean(JAVA_INLINE_HINT_VAR_TYPE, DEFAULT_VALUES.get(JAVA_INLINE_HINT_VAR_TYPE));
+    }
+
     private AtomicBoolean cancel = new AtomicBoolean();
-    
+
     protected SemanticHighlighterBase() {
         super(Phase.RESOLVED, TaskIndexingMode.ALLOWED_DURING_SCAN);
     }
 
     @Override
     public void run(Result result, SchedulerEvent event) {
+
         CompilationInfo info = CompilationInfo.get(result);
         
         if (info == null) {
@@ -151,6 +189,8 @@
     protected abstract boolean process(CompilationInfo info, final Document doc);
     
     protected boolean process(CompilationInfo info, final Document doc, ErrorDescriptionSetter setter) {
+        updateFromPreferences();
+
         DetectorVisitor v = new DetectorVisitor(info, doc, cancel);
         
         Map<Token, Coloring> newColoring = new IdentityHashMap<>();
@@ -227,7 +267,9 @@
             return true;
         
         if (computeUnusedImports) {
-            setter.setHighlights(doc, extraColoring, v.preText);
+            Map<int[], String> preTextWithSpans = new HashMap<>();
+            v.preText.forEach((pos, text) -> preTextWithSpans.put(new int[] {pos, pos + 1}, text));
+            setter.setHighlights(doc, extraColoring, preTextWithSpans);
         }
 
         setter.setColorings(doc, newColoring);
@@ -253,7 +295,7 @@
         return el.getKind() == ElementKind.PARAMETER ||
                LOCAL_VARIABLES.contains(el.getKind());
     }
-    
+
     private static class Use {
         private boolean declaration;
         private TreePath     tree;
@@ -279,7 +321,7 @@
         private Map<Tree, List<Token>> tree2Tokens;
         private List<Token> contextKeywords;
         private List<Pair<int[], Coloring>> extraColoring;
-        private Map<int[], String> preText;
+        private Map<Integer, String> preText;
         private TokenList tl;
         private long memberSelectBypass = -1;        
         private SourcePositions sourcePositions;
@@ -690,6 +732,7 @@
                 
         @Override
         public Void visitMethodInvocation(MethodInvocationTree tree, Void p) {
+            int startTokenIndex = tl.index();
             Tree possibleIdent = tree.getMethodSelect();
             
             if (possibleIdent.getKind() == Kind.IDENTIFIER) {
@@ -727,13 +770,27 @@
             scan(tree.getArguments(), p);
             
             addParameterInlineHint(tree);
+
+            Tree parent = getCurrentPath().getParentPath().getLeaf();
+            Tree parentParent = getCurrentPath().getParentPath().getParentPath().getLeaf();
+
+            if (parent.getKind() != Kind.MEMBER_SELECT ||
+                parentParent.getKind() != Kind.METHOD_INVOCATION ||
+                ((MemberSelectTree) parent).getExpression() != tree) {
+                int afterInvocation = tl.index();
+                tl.resetToIndex(startTokenIndex);
+                addChainedTypes(getCurrentPath());
+                tl.resetToIndex(afterInvocation);
+            }
+
             return null;
         }
 
-        @Override
-        public Void visitExpressionStatement(ExpressionStatementTree node, Void p) {
+        private void addChainedTypes(TreePath current) {
+            if(! isJavaInlineHintChainedTypes()) {
+                return;
+            }
             List<TreePath> chain = new ArrayList<>(); //TODO: avoid creating an instance if possible!
-            TreePath current = new TreePath(getCurrentPath(), node.getExpression());
             OUTER: while (true) {
                 chain.add(current);
                 switch (current.getLeaf().getKind()) {
@@ -748,29 +805,59 @@
                         break OUTER;
                 }
             }
-            int prevIndex = tl.index();
             Collections.reverse(chain);
             List<Pair<String, Integer>> typeToPosition = new ArrayList<>();
+            List<Pair<String, Integer>> forcedTypeToPosition = new ArrayList<>();
             for (TreePath tp : chain) {
                 long end = info.getTrees().getSourcePositions().getEndPosition(tp.getCompilationUnit(), tp.getLeaf());
                 tl.moveToOffset(end);
                 Token t = tl.currentToken();
+                if (t != null && (t.id() == JavaTokenId.COMMA || t.id() == JavaTokenId.SEMICOLON)) {
+                    tl.moveNext();
+                    t = tl.currentToken();
+                } else if (t != null && t.id() == JavaTokenId.RPAREN) {
+                    while (t != null && t.id() == JavaTokenId.RPAREN) {
+                        tl.moveNext();
+                        t = tl.currentToken();
+                    }
+                    if (t != null && (t.id() == JavaTokenId.COMMA || t.id() == JavaTokenId.SEMICOLON)) {
+                        tl.moveNext();
+                        t = tl.currentToken();
+                    }
+                }
                 int pos;
                 if (t != null && t.id() == JavaTokenId.WHITESPACE && (pos = t.text().toString().indexOf("\n")) != -1) {
                     TypeMirror type = info.getTrees().getTypeMirror(tp);
-                    String typeName = info.getTypeUtilities().getTypeName(type).toString();
-                    if (typeToPosition.isEmpty() || !typeName.equals(typeToPosition.get(typeToPosition.size() - 1).first())) {
-                        typeToPosition.add(Pair.of(typeName, tl.offset() + pos));
+                    String typeName;
+                    if (type.getKind().isPrimitive() || type.getKind() == TypeKind.DECLARED) {
+                        typeName = info.getTypeUtilities().getTypeName(type).toString();
+                    } else {
+                        typeName = "";
+                    }
+                    int preTextPos = tl.offset() + pos;
+                    if (typeToPosition.isEmpty() || !typeName.equals(typeToPosition.get(typeToPosition.size() - 1).first()) || preText.containsKey(preTextPos)) {
+                        typeToPosition.add(Pair.of(typeName, preTextPos));
+                    }
+                    if (preText.containsKey(preTextPos)) {
+                        forcedTypeToPosition.add(Pair.of(typeName, preTextPos));
                     }
                 }
             }
             if (typeToPosition.size() >= 2) {
                 for (Pair<String, Integer> typeAndPosition : typeToPosition) {
-                    preText.put(new int[] {(int) typeAndPosition.second(), (int) typeAndPosition.second() + 1},
-                                                "  " + typeAndPosition.first());
+                    preText.compute(typeAndPosition.second(),
+                                    (p, n) -> (n == null ? " " : ";" ) + " " + typeAndPosition.first());
+                }
+            } else {
+                for (Pair<String, Integer> typeAndPosition : forcedTypeToPosition) {
+                    preText.compute(typeAndPosition.second(),
+                                    (p, n) -> (n == null ? " " : n + ";" ) + " " + typeAndPosition.first());
                 }
             }
-            tl.resetToIndex(prevIndex);
+        }
+
+        @Override
+        public Void visitExpressionStatement(ExpressionStatementTree node, Void p) {
             return super.visitExpressionStatement(node, p);
         }
 
@@ -876,6 +963,13 @@
             
             tl.moveNext();
             
+            if (info.getTreeUtilities().isVarType(getCurrentPath()) && isJavaInlineHintVarType()) {
+                int afterName = tl.offset();
+                TypeMirror type = info.getTrees().getTypeMirror(new TreePath(getCurrentPath(), tree.getType()));
+
+                this.preText.put(afterName, " : " + info.getTypeUtilities().getTypeName(type));
+            }
+
             scan(tree.getInitializer(), p);
             
             return null;
@@ -1062,6 +1156,9 @@
         }
 
         private void addParameterInlineHint(Tree tree) {
+            if(! isJavaInlineHintParameterName()) {
+                return;
+            }
             TreePath pp = getCurrentPath().getParentPath();
             Tree leaf = pp.getLeaf();
             if (leaf != null &&
@@ -1076,7 +1173,6 @@
                     Element invoked = info.getTrees().getElement(pp);
                     if (invoked != null && (invoked.getKind() == ElementKind.METHOD || invoked.getKind() == ElementKind.CONSTRUCTOR)) {
                         long start = sourcePositions.getStartPosition(info.getCompilationUnit(), tree);
-                        long end = start + 1;
                         ExecutableElement invokedMethod = (ExecutableElement) invoked;
                         pos = Math.min(pos, invokedMethod.getParameters().size() - 1);
                         if (pos != (-1)) {
@@ -1087,7 +1183,7 @@
                                 shouldBeAdded = false;
                             }
                             if (shouldBeAdded) {
-                                preText.put(new int[] {(int) start, (int) end},
+                                preText.put((int) start,
                                             invokedMethod.getParameters().get(pos).getSimpleName() + ":");
                             }
                         }
diff --git a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/UnusedDetector.java b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/UnusedDetector.java
index f2c8ca0..d5a7cad 100644
--- a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/UnusedDetector.java
+++ b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/UnusedDetector.java
@@ -141,7 +141,8 @@
                     }
                 }
             } else if ((el.getKind() == ElementKind.CONSTRUCTOR || el.getKind() == ElementKind.METHOD) && (isPrivate || isPkgPrivate)) {
-                if (!isSerializationMethod(info, (ExecutableElement)el) && !uses.contains(UseTypes.USED)) {
+                if (!isSerializationMethod(info, (ExecutableElement)el) && !uses.contains(UseTypes.USED)
+                        && !info.getElementUtilities().overridesMethod((ExecutableElement)el)) {
                     if (isPrivate || isUnusedInPkg(info, el, cancel)) {
                         result.add(new UnusedDescription(el, declaration, UnusedReason.NOT_USED));
                     }
diff --git a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
index d765eec..3cd7f85 100644
--- a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
+++ b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
@@ -255,6 +255,7 @@
 
     public void testParameterNames() throws Exception {
         setShowPrependedText(true);
+        setInlineHints(true, false, false);
         performTest("Test.java",
                     "package test;" +
                     "public class Test {" +
@@ -764,6 +765,7 @@
 
     public void testInvalidParameterList() throws Exception {
         setShowPrependedText(true);
+        setInlineHints(true, false, false);
         performTest("Test.java",
                     "public class BugSemanticHighlighterBase {\n" +
                     "    private Object testMethod(final String arg1 final String arg2) {\n" +
@@ -782,6 +784,7 @@
 
     public void testChainTypes() throws Exception {
         setShowPrependedText(true);
+        setInlineHints(true, true, false);
         performTest("Test.java",
                     "package test;\n" +
                     "public class Test<T> {\n" +
@@ -817,6 +820,7 @@
                     "[PRIVATE, METHOD], 5:10-5:14",
                     "[  Test<Integer>], 5:16-6:0",
                     "[PRIVATE, METHOD], 6:10-6:14",
+                    "[  Test<String>], 6:17-7:0",
                     "[PUBLIC, CLASS], 8:12-8:16",
                     "[PUBLIC, CLASS], 8:17-8:24",
                     "[PRIVATE, METHOD, DECLARATION], 8:26-8:30",
@@ -831,6 +835,240 @@
                     "[PRIVATE, METHOD, DECLARATION], 17:25-17:29");
     }
 
+    public void testChainTypes2() throws Exception {
+        setShowPrependedText(true);
+        setInlineHints(true, true, false);
+        performTest("Test.java",
+                    "package test;\n" +
+                    "public class Test<T> {\n" +
+                    "    public void test(Test<String> t) {\n" +
+                    "        test2(t.run1()\n" +
+                    "               .run2()\n" +
+                    "               .run3()\n" +
+                    "               .run4(),\n" +
+                    "              t.run1()\n" +
+                    "               .run2()\n" +
+                    "               .run3()\n" +
+                    "               .run4());\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run1() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run2() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run3() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run4() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    public void test2(Test<String> t1, Test<String> t2) {\n" +
+                    "    }\n" +
+                    "}\n",
+                    "[PUBLIC, CLASS, DECLARATION], 1:13-1:17",
+                    "[PUBLIC, METHOD, DECLARATION], 2:16-2:20",
+                    "[PUBLIC, CLASS], 2:21-2:25",
+                    "[PUBLIC, CLASS], 2:26-2:32",
+                    "[PARAMETER, DECLARATION], 2:34-2:35",
+                    "[PUBLIC, METHOD], 3:8-3:13",
+                    "[t1:], 3:14-3:15",
+                    "[PRIVATE, METHOD], 3:16-3:20",
+                    "[  Test<Integer>], 3:22-4:0",
+                    "[PRIVATE, METHOD], 4:16-4:20",
+                    "[  Test<String>], 4:22-5:0",
+                    "[PRIVATE, METHOD], 5:16-5:20",
+                    "[  Test<Integer>], 5:22-6:0",
+                    "[PRIVATE, METHOD], 6:16-6:20",
+                    "[  Test<String>], 6:23-7:0",
+                    "[t2:], 7:14-7:15",
+                    "[PRIVATE, METHOD], 7:16-7:20",
+                    "[  Test<Integer>], 7:22-8:0",
+                    "[PRIVATE, METHOD], 8:16-8:20",
+                    "[  Test<String>], 8:22-9:0",
+                    "[PRIVATE, METHOD], 9:16-9:20",
+                    "[  Test<Integer>], 9:22-10:0",
+                    "[PRIVATE, METHOD], 10:16-10:20",
+                    "[  Test<String>; ], 10:24-11:0",
+                    "[PUBLIC, CLASS], 12:12-12:16",
+                    "[PUBLIC, CLASS], 12:17-12:24",
+                    "[PRIVATE, METHOD, DECLARATION], 12:26-12:30",
+                    "[PUBLIC, CLASS], 15:12-15:16",
+                    "[PUBLIC, CLASS], 15:17-15:23",
+                    "[PRIVATE, METHOD, DECLARATION], 15:25-15:29",
+                    "[PUBLIC, CLASS], 18:12-18:16",
+                    "[PUBLIC, CLASS], 18:17-18:24",
+                    "[PRIVATE, METHOD, DECLARATION], 18:26-18:30",
+                    "[PUBLIC, CLASS], 21:12-21:16",
+                    "[PUBLIC, CLASS], 21:17-21:23",
+                    "[PRIVATE, METHOD, DECLARATION], 21:25-21:29",
+                    "[PUBLIC, METHOD, DECLARATION], 24:16-24:21",
+                    "[PUBLIC, CLASS], 24:22-24:26",
+                    "[PUBLIC, CLASS], 24:27-24:33",
+                    "[PARAMETER, DECLARATION], 24:35-24:37",
+                    "[PUBLIC, CLASS], 24:39-24:43",
+                    "[PUBLIC, CLASS], 24:44-24:50",
+                    "[PARAMETER, DECLARATION], 24:52-24:54");
+    }
+
+    public void testChainTypes3() throws Exception {
+        setShowPrependedText(true);
+        setInlineHints(true, true, false);
+        performTest("Test.java",
+                    "package test;\n" +
+                    "public class Test<T> {\n" +
+                    "    public void test(Test<String> t) {\n" +
+                    "        testChain3(testChain2(testChain1(t.run1()\n" +
+                    "               .run2()\n" +
+                    "               .run3()\n" +
+                    "               .run4())));\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run1() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run2() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run3() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run4() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    public Test<Integer> testChain1(Test<String> t1) {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    public Test<Number> testChain2(Test<Integer> t1) {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    public String testChain3(Test<Number> t1) {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "}\n",
+                    "[PUBLIC, CLASS, DECLARATION], 1:13-1:17",
+                    "[PUBLIC, METHOD, DECLARATION], 2:16-2:20",
+                    "[PUBLIC, CLASS], 2:21-2:25",
+                    "[PUBLIC, CLASS], 2:26-2:32",
+                    "[PARAMETER, DECLARATION], 2:34-2:35",
+                    "[PUBLIC, METHOD], 3:8-3:18",
+                    "[t1:], 3:19-3:20",
+                    "[PUBLIC, METHOD], 3:19-3:29",
+                    "[t1:], 3:30-3:31",
+                    "[PUBLIC, METHOD], 3:30-3:40",
+                    "[t1:], 3:41-3:42",
+                    "[PRIVATE, METHOD], 3:43-3:47",
+                    "[  Test<Integer>], 3:49-4:0",
+                    "[PRIVATE, METHOD], 4:16-4:20",
+                    "[  Test<String>], 4:22-5:0",
+                    "[PRIVATE, METHOD], 5:16-5:20",
+                    "[  Test<Integer>], 5:22-6:0",
+                    "[PRIVATE, METHOD], 6:16-6:20",
+                    "[  Test<String>; Test<Integer>; Test<Number>; String], 6:26-7:0",
+                    "[PUBLIC, CLASS], 8:12-8:16",
+                    "[PUBLIC, CLASS], 8:17-8:24",
+                    "[PRIVATE, METHOD, DECLARATION], 8:26-8:30",
+                    "[PUBLIC, CLASS], 11:12-11:16",
+                    "[PUBLIC, CLASS], 11:17-11:23",
+                    "[PRIVATE, METHOD, DECLARATION], 11:25-11:29",
+                    "[PUBLIC, CLASS], 14:12-14:16",
+                    "[PUBLIC, CLASS], 14:17-14:24",
+                    "[PRIVATE, METHOD, DECLARATION], 14:26-14:30",
+                    "[PUBLIC, CLASS], 17:12-17:16",
+                    "[PUBLIC, CLASS], 17:17-17:23",
+                    "[PRIVATE, METHOD, DECLARATION], 17:25-17:29",
+                    "[PUBLIC, CLASS], 20:11-20:15",
+                    "[PUBLIC, CLASS], 20:16-20:23",
+                    "[PUBLIC, METHOD, DECLARATION], 20:25-20:35",
+                    "[PUBLIC, CLASS], 20:36-20:40",
+                    "[PUBLIC, CLASS], 20:41-20:47",
+                    "[PARAMETER, DECLARATION], 20:49-20:51",
+                    "[PUBLIC, CLASS], 23:11-23:15",
+                    "[ABSTRACT, PUBLIC, CLASS], 23:16-23:22",
+                    "[PUBLIC, METHOD, DECLARATION], 23:24-23:34",
+                    "[PUBLIC, CLASS], 23:35-23:39",
+                    "[PUBLIC, CLASS], 23:40-23:47",
+                    "[PARAMETER, DECLARATION], 23:49-23:51",
+                    "[PUBLIC, CLASS], 26:11-26:17",
+                    "[PUBLIC, METHOD, DECLARATION], 26:18-26:28",
+                    "[PUBLIC, CLASS], 26:29-26:33",
+                    "[ABSTRACT, PUBLIC, CLASS], 26:34-26:40",
+                    "[PARAMETER, DECLARATION], 26:42-26:44");
+    }
+
+    public void testChainTypes4() throws Exception {
+        setShowPrependedText(true);
+        setInlineHints(true, true, false);
+        performTest("Test.java",
+                    "package test;\n" +
+                    "public class Test<T> {\n" +
+                    "    public void test(Test<String> t) {\n" +
+                    "        voidMethod(t.run1()\n" +
+                    "               .run2()\n" +
+                    "               .run3()\n" +
+                    "               .run4())));\n" +
+                    "        undefinedMethod(t.run1()\n" +
+                    "               .run2()\n" +
+                    "               .run3()\n" +
+                    "               .run4())));\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run1() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run2() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<Integer> run3() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    private Test<String> run4() {\n" +
+                    "        return null;\n" +
+                    "    }\n" +
+                    "    public void voidMethod(Test<String> t1) {\n" +
+                    "    }\n" +
+                    "}\n",
+                    "[PUBLIC, CLASS, DECLARATION], 1:13-1:17",
+                    "[PUBLIC, METHOD, DECLARATION], 2:16-2:20",
+                    "[PUBLIC, CLASS], 2:21-2:25",
+                    "[PUBLIC, CLASS], 2:26-2:32",
+                    "[PARAMETER, DECLARATION], 2:34-2:35",
+                    "[PUBLIC, METHOD], 3:8-3:18",
+                    "[t1:], 3:19-3:20",
+                    "[PRIVATE, METHOD], 3:21-3:25",
+                    "[  Test<Integer>], 3:27-4:0",
+                    "[PRIVATE, METHOD], 4:16-4:20",
+                    "[  Test<String>], 4:22-5:0",
+                    "[PRIVATE, METHOD], 5:16-5:20",
+                    "[  Test<Integer>], 5:22-6:0",
+                    "[PRIVATE, METHOD], 6:16-6:20",
+                    "[  Test<String>; ], 6:26-7:0",
+                    "[STATIC, PUBLIC, CLASS], 7:8-7:23",
+                    "[PARAMETER], 7:24-7:25",
+                    "[PRIVATE, METHOD], 7:26-7:30",
+                    "[  Test<Integer>], 7:32-8:0",
+                    "[PRIVATE, METHOD], 8:16-8:20",
+                    "[  Test<String>], 8:22-9:0",
+                    "[PRIVATE, METHOD], 9:16-9:20",
+                    "[  Test<Integer>], 9:22-10:0",
+                    "[PRIVATE, METHOD], 10:16-10:20",
+                    "[  Test<String>; ], 10:26-11:0",
+                    "[PUBLIC, CLASS], 12:12-12:16",
+                    "[PUBLIC, CLASS], 12:17-12:24",
+                    "[PRIVATE, METHOD, DECLARATION], 12:26-12:30",
+                    "[PUBLIC, CLASS], 15:12-15:16",
+                    "[PUBLIC, CLASS], 15:17-15:23",
+                    "[PRIVATE, METHOD, DECLARATION], 15:25-15:29",
+                    "[PUBLIC, CLASS], 18:12-18:16",
+                    "[PUBLIC, CLASS], 18:17-18:24",
+                    "[PRIVATE, METHOD, DECLARATION], 18:26-18:30",
+                    "[PUBLIC, CLASS], 21:12-21:16",
+                    "[PUBLIC, CLASS], 21:17-21:23",
+                    "[PRIVATE, METHOD, DECLARATION], 21:25-21:29",
+                    "[PUBLIC, METHOD, DECLARATION], 24:16-24:26",
+                    "[PUBLIC, CLASS], 24:27-24:31",
+                    "[PUBLIC, CLASS], 24:32-24:38",
+                    "[PARAMETER, DECLARATION], 24:40-24:42");
+    }
+
     public void testRawStringLiteralNETBEANS_5118() throws Exception {
         try {
             SourceVersion.valueOf("RELEASE_15");
@@ -856,6 +1094,27 @@
                     "[UNINDENTED_TEXT_BLOCK], 6:13-6:29");
     }
 
+    public void testVar() throws Exception {
+        setSourceLevel("11");
+        setShowPrependedText(true);
+        setInlineHints(true, false, true);
+        performTest("Var",
+                    "public class Var {\n" +
+                    "    private void test(java.util.List<String> l) {\n" +
+                    "        var v1 = l.iterator();\n" +
+                    "    }\n" +
+                    "}\n",
+                    "[PUBLIC, CLASS, DECLARATION], 0:13-0:16",
+                    "[PRIVATE, METHOD, UNUSED, DECLARATION], 1:17-1:21",
+                    "[PUBLIC, INTERFACE], 1:32-1:36",
+                    "[PUBLIC, CLASS], 1:37-1:43",
+                    "[PARAMETER, DECLARATION], 1:45-1:46",
+                    "[LOCAL_VARIABLE, UNUSED, DECLARATION], 2:12-2:14",
+                    "[ : Iterator<String>], 2:14-2:15",
+                    "[PARAMETER], 2:17-2:18",
+                    "[ABSTRACT, PUBLIC, METHOD], 2:19-2:27");
+    }
+
     private void performTest(String fileName) throws Exception {
         performTest(fileName, new Performer() {
             public void compute(CompilationController parameter, Document doc, final ErrorDescriptionSetter setter) {
diff --git a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/TestBase.java b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/TestBase.java
index 6164663..7af4065 100644
--- a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/TestBase.java
+++ b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/TestBase.java
@@ -40,6 +40,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.CountDownLatch;
+import java.util.prefs.Preferences;
 import javax.lang.model.SourceVersion;
 import javax.swing.event.ChangeListener;
 import java.util.stream.Collectors;
@@ -62,6 +63,7 @@
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.MIMEResolver;
 import org.openide.loaders.DataObject;
+import org.openide.util.NbPreferences;
 import org.openide.util.Pair;
 
 /**
@@ -306,7 +308,11 @@
 
         l.await();
 
-        assertEquals(Arrays.asList(expected),
+        assertEquals(highlights.stream()
+                               .map(h -> h.getHighlightTestData())
+                               .map(e -> "\"" + e + "\",")
+                               .collect(Collectors.joining("\n")),
+                     Arrays.asList(expected),
                      highlights.stream()
                                .map(h -> h.getHighlightTestData())
                                .collect(Collectors.toList()));
@@ -364,6 +370,13 @@
         this.showPrependedText = showPrependedText;
     }
 
+    protected final void setInlineHints(boolean parameterNames, boolean chainedTypes, boolean varType) {
+        Preferences preferences = NbPreferences.root().node("/org/netbeans/modules/java/editor/InlineHints/default");
+        preferences.putBoolean(SemanticHighlighterBase.JAVA_INLINE_HINT_PARAMETER_NAME, parameterNames);
+        preferences.putBoolean(SemanticHighlighterBase.JAVA_INLINE_HINT_CHAINED_TYPES, chainedTypes);
+        preferences.putBoolean(SemanticHighlighterBase.JAVA_INLINE_HINT_VAR_TYPE, varType);
+    }
+
     final class ErrorDescriptionSetterImpl implements SemanticHighlighterBase.ErrorDescriptionSetter {
         private final Set<HighlightImpl> highlights = new TreeSet<HighlightImpl>(new Comparator<HighlightImpl>() {
             public int compare(HighlightImpl o1, HighlightImpl o2) {
diff --git a/java/java.editor.lib/nbproject/project.properties b/java/java.editor.lib/nbproject/project.properties
index 5b80280..84b63e6 100644
--- a/java/java.editor.lib/nbproject/project.properties
+++ b/java/java.editor.lib/nbproject/project.properties
@@ -19,7 +19,7 @@
 javadoc.title=Java Editor Library
 javadoc.apichanges=${basedir}/apichanges.xml
 
-javac.source=1.7
+javac.source=1.8
 
 spec.version.base: 1.49.0
 is.autoload=true
diff --git a/java/java.editor/nbproject/project.properties b/java/java.editor/nbproject/project.properties
index 69e222b..69714a8 100644
--- a/java/java.editor/nbproject/project.properties
+++ b/java/java.editor/nbproject/project.properties
@@ -112,3 +112,8 @@
 
 # requires nb.javac for compiling of tests on Mac
 requires.nb.javac=true
+
+# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
+jms-compiler.flags.jvm=
+test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/java.editor/nbproject/project.xml b/java/java.editor/nbproject/project.xml
index 7c2d917..4270767 100644
--- a/java/java.editor/nbproject/project.xml
+++ b/java/java.editor/nbproject/project.xml
@@ -248,7 +248,7 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>2.23</specification-version>
+                        <specification-version>2.60</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -297,6 +297,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>9.28</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.projectapi</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/java/java.editor/src/org/netbeans/modules/editor/java/GoToSupport.java b/java/java.editor/src/org/netbeans/modules/editor/java/GoToSupport.java
index 8b85ae2..95f30da 100644
--- a/java/java.editor/src/org/netbeans/modules/editor/java/GoToSupport.java
+++ b/java/java.editor/src/org/netbeans/modules/editor/java/GoToSupport.java
@@ -123,17 +123,17 @@
  * @author Jan Lahoda
  */
 public class GoToSupport {
-    
+
     /** Creates a new instance of GoToSupport */
     public GoToSupport() {
     }
-    
+
     private static FileObject getFileObject(Document doc) {
         DataObject od = (DataObject) doc.getProperty(Document.StreamDescriptionProperty);
-        
+
         return od != null ? od.getPrimaryFile() : null;
     }
-    
+
     public static String getGoToElementTooltip(final Document doc, final int offset, final boolean goToSource, final HyperlinkType type) {
         try {
             final FileObject fo = getFileObject(doc);
@@ -186,7 +186,7 @@
                         Context resolved = resolveContext(controller, doc, offset, goToSource, false);
 
                         if (resolved == null) {
-                            target[0] = new GoToTarget(-1, -1, null, null, null, null, null, false);
+                            target[0] = new GoToTarget(-1, -1, null, null, null, null, null, null, false);
                         } else {
                             target[0] = computeGoToTarget(controller, resolved, offset);
                         }
@@ -196,7 +196,7 @@
                 });
                 if (target[0] != null && target[0].success) {
                     if (target[0].offsetToOpen < 0) {
-                        CompletableFuture<ElementOpen.Location> future = ElementOpen.getLocation(target[0].cpInfo, target[0].elementToOpen, target[0].resourceName);
+                        CompletableFuture<ElementOpen.Location> future = ElementOpen.getLocation(target[0].cpInfo, target[0].elementToOpen, target[0].resourceName, target[0].fileName);
                         return future.thenApply(location -> {
                             return location != null ? HyperlinkLocationProvider.createHyperlinkLocation(location.getFileObject(), location.getStartOffset(), location.getEndOffset()) : null;
                         });
@@ -211,11 +211,11 @@
             throw new IllegalStateException(ex);
         }
     }
-    
+
     private static boolean isError(Element el) {
         return el == null || el.asType() == null || el.asType().getKind() == TypeKind.ERROR;
     }
-    
+
     private static void performGoTo(final Document doc, final int offset, final boolean goToSource, final boolean javadoc) {
         final AtomicBoolean cancel = new AtomicBoolean();
         ProgressUtils.runOffEventDispatchThread(new Runnable() {
@@ -229,11 +229,11 @@
     private static void performGoToImpl (final Document doc, final int offset, final boolean goToSource, final boolean javadoc, final AtomicBoolean cancel) {
         try {
             final FileObject fo = getFileObject(doc);
-            
+
             if (fo == null) {
                 return ;
             }
-            
+
             GoToTarget[] target = new GoToTarget[1];
 
             ParserManager.parse(Collections.singleton (Source.create(doc)), new UserTask() {
@@ -251,23 +251,23 @@
                     Context resolved = resolveContext(controller, doc, offset, goToSource, false);
 
                     if (resolved == null) {
-                        target[0] = new GoToTarget(-1, -1, null, null, null, null, null, false);
+                        target[0] = new GoToTarget(-1, -1, null, null, null, null, null, null, false);
                         return;
                     }
-                    
+
                     if (javadoc) {
                         final URL url = SourceUtils.getPreferredJavadoc(resolved.resolved);
                         if (url != null) {
                             HtmlBrowser.URLDisplayer.getDefault().showURL(url);
                         } else {
-                            target[0] = new GoToTarget(-1, -1, null, null, null, null, null, false);
+                            target[0] = new GoToTarget(-1, -1, null, null, null, null, null, null, false);
                         }
                     } else {
                         target[0] = computeGoToTarget(controller, resolved, offset);
                     }
                 }
             });
-            
+
             if (target[0] != null) {
                 boolean openSucceeded = false;
 
@@ -282,7 +282,7 @@
                         openSucceeded = CALLER.open(fo, target[0].offsetToOpen);
                     } else {
                         if (target[0].elementToOpen != null) {
-                            openSucceeded = CALLER.open(target[0].cpInfo, target[0].elementToOpen);
+                            openSucceeded = CALLER.open(target[0].cpInfo, target[0].elementToOpen, target[0].fileName);
                         }
                     }
                     if (!openSucceeded) {
@@ -294,7 +294,7 @@
             throw new IllegalStateException(ex);
         }
     }
-    
+
     public static GoToTarget computeGoToTarget(CompilationController controller, Context resolved, int offset) {
         TreePath elpath = getPath(controller, resolved.resolved);
 
@@ -305,7 +305,7 @@
             if (startPos != (-1)) {
                 //check if the caret is inside the declaration itself, as jump in this case is not very usefull:
                 if (isCaretInsideDeclarationName(controller, tree, elpath, offset)) {
-                    return new GoToTarget(-1, -1, null, null, null, null, null, false);
+                    return new GoToTarget(-1, -1, null, null, null, null, null, null, false);
                 } else {
                     long endPos = controller.getTrees().getSourcePositions().getEndPosition(controller.getCompilationUnit(), tree);
                     //#71272: it is necessary to translate the offset:
@@ -315,20 +315,24 @@
                                           null,
                                           null,
                                           null,
+                                          null,
                                           controller.getElementUtilities().getElementName(resolved.resolved, false).toString(),
                                           true);
                 }
             } else {
-                return new GoToTarget(-1, -1, null, null, null, null, null, false);
+                return new GoToTarget(-1, -1, null, null, null, null, null, null, false);
             }
         } else {
             TypeElement te = resolved.resolved != null ? controller.getElementUtilities().outermostTypeElement(resolved.resolved) : null;
+            String resourceName = te != null ? te.getQualifiedName().toString().replace('.', '/') + ".class" : null;
+            String fileName = findFileName(resolved.resolved);
             return new GoToTarget(-1,
                                   -1,
                                   null,
                                   controller.getClasspathInfo(),
                                   ElementHandle.create(resolved.resolved),
-                                  te != null ? te.getQualifiedName().toString().replace('.', '/') + ".class" : null,
+                                  fileName,
+                                  resourceName,
                                   controller.getElementUtilities().getElementName(resolved.resolved, false).toString(),
                                   true);
         }
@@ -360,26 +364,31 @@
         public final ClasspathInfo cpInfo;
         public final ElementHandle elementToOpen;
         public final String resourceName;
+        public final String fileName;
         public final String displayNameForError;
         public final boolean success;
 
         public GoToTarget(int offsetToOpen, int endPos, int[] nameSpan, ClasspathInfo cpInfo, ElementHandle elementToOpen, String resourceName, String displayNameForError, boolean success) {
+            this(offsetToOpen, endPos, nameSpan, cpInfo, elementToOpen, null, resourceName, displayNameForError, success);
+        }
+
+        GoToTarget(int offsetToOpen, int endPos, int[] nameSpan, ClasspathInfo cpInfo, ElementHandle elementToOpen, String fileName, String resourceName, String displayNameForError, boolean success) {
             this.offsetToOpen = offsetToOpen;
             this.endPos = endPos;
             this.nameSpan = nameSpan;
             this.cpInfo = cpInfo;
             this.elementToOpen = elementToOpen;
+            this.fileName = fileName;
             this.resourceName = resourceName;
             this.displayNameForError = displayNameForError;
             this.success = success;
         }
-
     }
 
     public static void goTo(final Document doc, final int offset, final boolean goToSource) {
         performGoTo(doc, offset, goToSource, false);
     }
-    
+
     public static void goToJavadoc(Document doc, int offset) {
         performGoTo(doc, offset, false, true);
     }
@@ -553,14 +562,14 @@
             // attempt to cancel the background task once the tooltip waiting period is over
             class Ctrl implements Callable<Boolean> {
                 private volatile boolean cancel;
-                
+
                 @Override
                 public Boolean call() throws Exception {
                     return cancel;
                 }
-                
+
             };
-            
+
             final Ctrl control = new Ctrl();
             // #240060: if non-null cancel is passed, the actual URL fetch is done on background, allowing us to proceed without blocking
             final ElementJavadoc jdoc = ElementJavadoc.create(controller, resolved.resolved, control);
@@ -582,7 +591,7 @@
                 }
                 doc.putProperty("TooltipResolver.hyperlinkListener", new HyperlinkListener() { //NOI18N
                     @Override
-                    public void hyperlinkUpdate(HyperlinkEvent e) {                    
+                    public void hyperlinkUpdate(HyperlinkEvent e) {
                         if (e != null && HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
                             String desc = e.getDescription();
                             if (desc != null) {
@@ -605,12 +614,12 @@
             }
             control.cancel = true;
         } catch (Exception ex) {}
-        
-        
+
+
         if (result == null || result.isEmpty()) {
             result = v.result.toString();
         }
-        
+
         int overridableKind = overridableKind(resolved.resolved);
 
         if (overridableKind != (-1) && type != null) {
@@ -627,15 +636,15 @@
 
         return result;
     }
-    
+
     private static final Set<JavaTokenId> USABLE_TOKEN_IDS = EnumSet.of(JavaTokenId.IDENTIFIER, JavaTokenId.THIS, JavaTokenId.SUPER, JavaTokenId.ARROW);
-    
+
     public static int[] getIdentifierOrLambdaArrowSpan(final Document doc, final int offset, final Token<JavaTokenId>[] token) {
         if (getFileObject(doc) == null) {
             //do nothing if FO is not attached to the document - the goto would not work anyway:
             return null;
         }
-        final int[][] ret = new int[][] {null}; 
+        final int[][] ret = new int[][] {null};
         doc.render(new Runnable() {
             @Override
             public void run() {
@@ -687,11 +696,11 @@
         });
         return ret[0];
     }
-    
+
     private static Element handlePossibleAnonymousInnerClass(CompilationInfo info, final Element el) {
         Element encl = el.getEnclosingElement();
         Element doubleEncl = encl != null ? encl.getEnclosingElement() : null;
-        
+
         if (   doubleEncl != null
             && !doubleEncl.getKind().isClass()
             && !doubleEncl.getKind().isInterface()
@@ -699,26 +708,26 @@
             && encl.getKind() == ElementKind.CLASS) {
             TreePath enclTreePath = info.getTrees().getPath(encl);
             Tree enclTree = enclTreePath != null ? enclTreePath.getLeaf() : null;
-            
+
             if (enclTree != null && TreeUtilities.CLASS_TREE_KINDS.contains(enclTree.getKind()) && enclTreePath.getParentPath().getLeaf().getKind() == Tree.Kind.NEW_CLASS) {
                 NewClassTree nct = (NewClassTree) enclTreePath.getParentPath().getLeaf();
-                
+
                 if (nct.getClassBody() != null) {
                     Element parentElement = info.getTrees().getElement(new TreePath(enclTreePath, nct.getIdentifier()));
-                    
+
                     if (parentElement == null || parentElement.getKind().isInterface()) {
                         return parentElement;
                     } else {
                         //annonymous innerclass extending a class. Find out which constructor is used:
                         TreePath superConstructorCall = new FindSuperConstructorCall().scan(enclTreePath, null);
-                        
+
                         if (superConstructorCall != null) {
                             return info.getTrees().getElement(superConstructorCall);
                         }
                     }
                 }
             }
-            
+
             return null;//prevent jumps to incorrect positions
         } else {
             if (encl != null) {
@@ -728,7 +737,7 @@
             }
         }
     }
-    
+
     /**
      * Tries to guess element referenced by static import. It may not be deterministic
      * as in <code>import static java.awt.Color.getColor</code>.
@@ -738,7 +747,7 @@
         if (!impt.isStatic() || impIdent == null || impIdent.getKind() != Kind.MEMBER_SELECT) {
             return null;
         }
-        
+
         // resolve type element containing imported element
         Trees trees = javac.getTrees();
         MemberSelectTree select = (MemberSelectTree) impIdent;
@@ -749,7 +758,7 @@
         if (isError(selectElm)) {
             return null;
         }
-        
+
         // resolve class to determine scope
         TypeMirror clazzMir = null;
         TreePath clazzPath = null;
@@ -768,9 +777,9 @@
         if (clazzMir == null) {
             return null;
         }
-        
+
         Scope clazzScope = trees.getScope(clazzPath);
-        
+
         // choose the first acceptable member
         for (Element member : selectElm.getEnclosedElements()) {
             if (member.getModifiers().contains(Modifier.STATIC)
@@ -781,7 +790,7 @@
         }
         return null;
     }
-    
+
     private static boolean isCaretInsideDeclarationName(CompilationInfo info, Tree t, TreePath path, int caret) {
         try {
             switch (t.getKind()) {
@@ -832,7 +841,7 @@
 
         return -1;
     }
-    
+
     private static TreePath adjustPathForModuleName(TreePath path) {
         TreePath tp = path;
         while (tp != null && (tp.getLeaf().getKind() == Kind.IDENTIFIER || tp.getLeaf().getKind() == Kind.MEMBER_SELECT)) {
@@ -917,16 +926,16 @@
     }
 
     private static final class FindSuperConstructorCall extends ErrorAwareTreePathScanner<TreePath, Void> {
-        
+
         @Override
         public TreePath visitMethodInvocation(MethodInvocationTree tree, Void v) {
             if (tree.getMethodSelect().getKind() == Kind.IDENTIFIER && "super".equals(((IdentifierTree) tree.getMethodSelect()).getName().toString())) {
                 return getCurrentPath();
             }
-            
+
             return null;
         }
-        
+
         @Override
         public TreePath reduce(TreePath first, TreePath second) {
             if (first == null) {
@@ -935,9 +944,9 @@
                 return first;
             }
         }
-        
+
     }
-    
+
     private static final class DisplayNameElementVisitor extends AbstractElementVisitor9<Void, Boolean> {
 
         private final CompilationInfo info;
@@ -945,15 +954,15 @@
         public DisplayNameElementVisitor(CompilationInfo info) {
             this.info = info;
         }
-        
+
         private StringBuffer result        = new StringBuffer();
-        
+
         private void boldStartCheck(boolean highlightName) {
             if (highlightName) {
                 result.append("<b>");
             }
         }
-        
+
         private void boldStopCheck(boolean highlightName) {
             if (highlightName) {
                 result.append("</b>");
@@ -963,18 +972,18 @@
         @Override
         public Void visitModule(ModuleElement e, Boolean highlightName) {
             result.append("module ");
-            boldStartCheck(highlightName);            
-            result.append(e.getQualifiedName());            
-            boldStopCheck(highlightName);            
+            boldStartCheck(highlightName);
+            result.append(e.getQualifiedName());
+            boldStopCheck(highlightName);
             return null;
         }
-        
+
         @Override
         public Void visitPackage(PackageElement e, Boolean highlightName) {
-            result.append("package ");                   
-            boldStartCheck(highlightName);            
-            result.append(e.getQualifiedName());            
-            boldStopCheck(highlightName);            
+            result.append("package ");
+            boldStartCheck(highlightName);
+            result.append(e.getQualifiedName());
+            boldStopCheck(highlightName);
             return null;
         }
 
@@ -982,7 +991,7 @@
         public Void visitType(TypeElement e, Boolean highlightName) {
             return printType(e, null, highlightName);
         }
-        
+
         Void printType(TypeElement e, DeclaredType dt, Boolean highlightName) {
             modifier(e.getModifiers());
             switch (e.getKind()) {
@@ -1000,7 +1009,7 @@
                     break;
             }
             Element enclosing = e.getEnclosingElement();
-            
+
             if (enclosing == SourceUtils.getEnclosingTypeElement(e)) {
                 result.append(((TypeElement) enclosing).getQualifiedName());
                 result.append('.');
@@ -1010,7 +1019,7 @@
             } else {
                 result.append(e.getQualifiedName());
             }
-            
+
             if (dt != null) {
                 dumpRealTypeArguments(dt.getTypeArguments());
             }
@@ -1021,25 +1030,25 @@
         @Override
         public Void visitVariable(VariableElement e, Boolean highlightName) {
             modifier(e.getModifiers());
-            
+
             result.append(getTypeName(info, e.asType(), true));
-            
+
             result.append(' ');
-            
+
             boldStartCheck(highlightName);
 
             result.append(e.getSimpleName());
-            
+
             boldStopCheck(highlightName);
-            
+
             if (highlightName) {
                 if (e.getConstantValue() != null) {
                     result.append(" = ");
                     result.append(StringEscapeUtils.escapeHtml(e.getConstantValue().toString()));
                 }
-                
+
                 Element enclosing = e.getEnclosingElement();
-                
+
                 if (e.getKind() != ElementKind.PARAMETER && e.getKind() != ElementKind.LOCAL_VARIABLE
                         && e.getKind() != ElementKind.RESOURCE_VARIABLE && e.getKind() != ElementKind.EXCEPTION_PARAMETER
                         && e.getKind() != ElementKind.BINDING_VARIABLE) {
@@ -1049,7 +1058,7 @@
                     result.append(getTypeName(info, enclosing.asType(), true));
                 }
             }
-            
+
             return null;
         }
 
@@ -1108,10 +1117,10 @@
         public Void visitRecordComponent(RecordComponentElement e, Boolean p) {
             return visitVariable((VariableElement) e, p);
         }
-        
+
         private void modifier(Set<Modifier> modifiers) {
             boolean addSpace = false;
-            
+
             for (Modifier m : modifiers) {
                 if (addSpace) {
                     result.append(' ');
@@ -1119,33 +1128,33 @@
                 addSpace = true;
                 result.append(m.toString());
             }
-            
+
             if (addSpace) {
                 result.append(' ');
             }
         }
-        
+
 //        private void throwsDump()
 
         private void dumpTypeArguments(List<? extends TypeParameterElement> list) {
             if (list.isEmpty()) {
                 return ;
             }
-            
+
             boolean addSpace = false;
-            
+
             result.append("&lt;");
-            
+
             for (TypeParameterElement e : list) {
                 if (addSpace) {
                     result.append(", ");
                 }
-                
+
                 result.append(getTypeName(info, e.asType(), true));
-                
+
                 addSpace = true;
             }
-                
+
             result.append("&gt;");
         }
 
@@ -1173,7 +1182,7 @@
 
         private void dumpArguments(List<? extends VariableElement> list, List<? extends TypeMirror> types) {
             boolean addSpace = false;
-            
+
             result.append('(');
 
             Iterator<? extends VariableElement> listIt = list.iterator();
@@ -1183,7 +1192,7 @@
                 if (addSpace) {
                     result.append(", ");
                 }
-                
+
                 VariableElement ve = listIt.next();
                 TypeMirror      type = typesIt != null ? typesIt.next() : ve.asType();
 
@@ -1193,7 +1202,7 @@
 
                 addSpace = true;
             }
-                
+
             result.append(')');
         }
 
@@ -1201,39 +1210,43 @@
             if (list.isEmpty()) {
                 return ;
             }
-            
+
             boolean addSpace = false;
-            
+
             result.append(" throws ");
-            
+
             for (TypeMirror t : list) {
                 if (addSpace) {
                     result.append(", ");
                 }
-                
+
                 result.append(getTypeName(info, t, true));
-                
+
                 addSpace = true;
             }
         }
-            
+
     }
-    
+
     private static String getTypeName(CompilationInfo info, TypeMirror t, boolean fqn) {
         return translate(Utilities.getTypeName(info, t, fqn).toString());
     }
-    
+
     private static String[] c = new String[] {"&", "<", ">", "\n", "\""}; // NOI18N
     private static String[] tags = new String[] {"&amp;", "&lt;", "&gt;", "<br>", "&quot;"}; // NOI18N
-    
+
     private static String translate(String input) {
         for (int cntr = 0; cntr < c.length; cntr++) {
             input = input.replace(c[cntr], tags[cntr]);
         }
-        
+
         return input;
     }
-    
+
+    static String findFileName(Element resolved) {
+        return SourceUtils.findSourceFileName(resolved);
+    }
+
     static UiUtilsCaller CALLER = new UiUtilsCaller() {
         @Override
         public boolean open(FileObject fo, int pos) {
@@ -1246,8 +1259,8 @@
             StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(GoToSupport.class, "WARN_CannotGoToGeneric", value));
         }
         @Override
-        public boolean open(ClasspathInfo info, ElementHandle<?> el) {
-            return ElementOpen.open(info, el);
+        public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
+            return ElementOpen.open(info, el, fileName);
         }
         @Override
         public void warnCannotOpen(String displayName) {
@@ -1255,11 +1268,11 @@
             StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(GoToSupport.class, "WARN_CannotGoTo", displayName));
         }
     };
-    
+
     interface UiUtilsCaller {
         public boolean open(FileObject fo, int pos);
         public void beep(boolean goToSource, boolean goToJavadoc);
-        public boolean open(ClasspathInfo info, ElementHandle<?> el);
+        public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName);
         public void warnCannotOpen(String displayName);
     }
 
diff --git a/java/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java b/java/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
index 8ad3db0..12b5034 100644
--- a/java/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
+++ b/java/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
@@ -322,7 +322,7 @@
                         addAcceleretors(a, item, target);
                         item.setEnabled(a.isEnabled());
                         Object helpID = a.getValue ("helpID"); // NOI18N
-                        if (helpID != null && (helpID instanceof String))
+                        if (helpID instanceof String)
                             item.putClientProperty ("HelpID", helpID); // NOI18N
                     }else{
                         if (ExtKit.gotoSourceAction.equals(actionName)){
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionTask.java b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionTask.java
index 7dfa410..3e0e5c4 100644
--- a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionTask.java
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionTask.java
@@ -20,6 +20,7 @@
 
 import com.sun.source.doctree.DocCommentTree;
 import com.sun.source.doctree.DocTree;
+import com.sun.source.doctree.DocTree.Kind;
 import com.sun.source.doctree.ParamTree;
 import com.sun.source.doctree.ReferenceTree;
 import com.sun.source.tree.Scope;
@@ -285,7 +286,15 @@
         new DocTreePathScanner<Void, Void>() {
             @Override
             public Void scan(DocTree node, Void p) {
-                if (node != null && jdctx.positions.getStartPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, node) <= normalizedOffset && jdctx.positions.getEndPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, node) >= normalizedOffset) {
+                long endPos = jdctx.positions.getEndPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, node);
+                long startPos = jdctx.positions.getStartPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, node);
+                if (node.getKind() == Kind.ERRONEOUS && getCurrentPath() != null) {
+                    String text = jdctx.javac.getText().substring((int) startPos, (int) endPos);
+                    if (text.length() > 0 && text.charAt(0) == '{' && text.charAt(text.length() - 1) != '}') {
+                        endPos = jdctx.positions.getEndPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, getCurrentPath().getLeaf());
+                    }
+                }
+                if (node != null && startPos <= normalizedOffset && endPos >= normalizedOffset) {
                     final DocTreePath docTreePath = new DocTreePath(getCurrentPath(), node);
                     if (JavadocCompletionUtils.isBlockTag(docTreePath) || JavadocCompletionUtils.isInlineTag(docTreePath)) {
                         result[0] = docTreePath;
@@ -374,6 +383,9 @@
             case REFERENCE:
                 insideReference(tag, jdctx);
                 break;
+            case SNIPPET:
+                insideSnippet(tag, jdctx);
+                break;
         }
     }
 
@@ -1216,11 +1228,6 @@
         CharSequence text = token.text();
         int pos = caretOffset - jdts.offset();
         DocTreePath tag = getTag(jdctx, caretOffset);
-        int startPos = (int) jdctx.positions.getStartPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, tag.getLeaf());
-        String subStr = JavadocCompletionUtils.getCharSequence(jdctx.doc, startPos, caretOffset).toString();
-        int index = subStr.lastIndexOf("\n");
-        String markupLine = JavadocCompletionUtils.getCharSequence(jdctx.doc, (index + startPos), caretOffset).toString();
-        insideInlineSnippet(markupLine);
 
         if (pos > 0 && pos <= text.length() && text.charAt(pos - 1) == '{') {
             if (tag != null && !JavadocCompletionUtils.isBlockTag(tag)) {
@@ -1242,26 +1249,43 @@
         }
     }
 
+    void insideSnippet(DocTreePath tag, JavadocContext jdctx) {
+        int startPos = (int) jdctx.positions.getStartPosition(jdctx.javac.getCompilationUnit(), jdctx.comment, tag.getLeaf());
+        String subStr = JavadocCompletionUtils.getCharSequence(jdctx.doc, startPos, caretOffset).toString();
+        int index = subStr.lastIndexOf("\n");
+        String markupLine = JavadocCompletionUtils.getCharSequence(jdctx.doc, (index + startPos), caretOffset).toString();
+        insideInlineSnippet(markupLine);
+    }
+
+    private static final List<String> SNIPPET_TAGS = Collections.unmodifiableList(Arrays.asList(
+            "@highlight",
+            "@replace",
+            "@link",
+            "@start",
+            "@end"
+    ));
+
+    private static final Pattern TAG_PATTERN = Pattern.compile("@\\b\\w{1,}\\b\\s+(?!.*@\\b\\w{1,}\\b\\s+)");
+
     void insideInlineSnippet(String subStr) {
         if (subStr.contains("//")) {
-            if (subStr.endsWith("@")) {
-                List<String> inlineAttr = new ArrayList() {
-                    {
-                        add("highlight");
-                        add("replace");
-                        add("link");
-                        add("start");
-                        add("end");
+            int lastAt = subStr.lastIndexOf('@');
+            if (lastAt != (-1)) {
+                String suffix = subStr.substring(lastAt);
+                if (!suffix.contains(" ")) {
+                    for (String str : SNIPPET_TAGS) {
+                        if (str.startsWith(suffix)) {
+                            items.add(factory.createNameItem(str.substring(1), this.caretOffset));
+                        }
                     }
-                };
-                for (String str : inlineAttr) {
-                    items.add(factory.createNameItem(str, this.caretOffset));
+                    return ;
                 }
-            } else {
-                String[] tags = {"@highlight", "@replace", "@link", "@start", "@end"};
-                Matcher match = Pattern.compile("@\\b\\w{1,}\\b\\s+(?!.*@\\b\\w{1,}\\b\\s+)").matcher(subStr);
-                if (match.find() && Arrays.asList(tags).contains(match.group(0).trim())) {
-                    completeInlineMarkupTag(match.group(0).trim(), new ArrayList() {
+            }
+            Matcher match = TAG_PATTERN.matcher(subStr);
+            if (match.find()) {
+                String tag = match.group(0);
+                if (SNIPPET_TAGS.contains(tag.trim())) {
+                    completeInlineMarkupTag(tag.trim(), new ArrayList() {
                         {
                             add("substring");
                             add("regex");
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties b/java/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties
index e036916..0c03c8e 100644
--- a/java/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties
@@ -62,7 +62,7 @@
 CTL_Types_CheckBox=T&ypes
 CTL_Methods_CheckBox=&Methods
 CTL_Constants_CheckBox=&Constants
-CTL_Fields_CheckBox=&Fields
+CTL_Fields_CheckBox=
 CTL_LocalVariables_CheckBox=Local &Variables
 CTL_Exceptions_CheckBox=E&xception Throwing Points
 CTL_Exit_CheckBox=&Exit Points From Methods
@@ -149,3 +149,6 @@
 CodeCompletionPanel.javaCompletionExcludeScrollPane.TabConstraints.tabTitle=Exclude
 CodeCompletionPanel.javaCompletionExcluderTab.AccessibleContext.accessibleName=Java Completion Excluder Tab
 CodeCompletionPanel.javadocAutoCompletionTriggersField.text=
+InlineHintsPanel.javaInlineHintParameterNameCB.text=Show parameter names
+InlineHintsPanel.javaInlineHintChainedTypesCB.text=Show types of chained methods
+InlineHintsPanel.javaInlineHintVarTypeCB.text=Show type of var
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsOptionsPanelController.java b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsOptionsPanelController.java
new file mode 100644
index 0000000..915b849
--- /dev/null
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsOptionsPanelController.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.editor.options;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import javax.swing.JComponent;
+import org.netbeans.spi.options.OptionsPanelController;
+import org.openide.util.HelpCtx;
+import org.openide.util.Lookup;
+
+public final class InlineHintsOptionsPanelController extends OptionsPanelController {
+
+    private InlineHintsPanel panel;
+
+    private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
+
+    @Override
+    public void update() {
+        panel.load(this);
+    }
+
+    @Override
+    public void applyChanges() {
+        panel.store();
+    }
+
+    @Override
+    public void cancel() {
+        // need not do anything special, if no changes have been persisted yet
+    }
+
+    @Override
+    public boolean isValid() {
+        return true; // Always valid 
+    }
+
+    @Override
+    public boolean isChanged() {
+        return panel.changed();
+    }
+
+    @Override
+    public HelpCtx getHelpCtx() {
+        return new HelpCtx("netbeans.optionsDialog.java.inlineHints");
+    }
+
+    @Override
+    public synchronized JComponent getComponent(Lookup masterLookup) {
+        if (panel == null) {
+            panel = new InlineHintsPanel(this);
+        }
+        return panel;
+    }
+
+    @Override
+    public void addPropertyChangeListener(PropertyChangeListener l) {
+        pcs.addPropertyChangeListener(l);
+    }
+
+    @Override
+    public void removePropertyChangeListener(PropertyChangeListener l) {
+        pcs.removePropertyChangeListener(l);
+    }
+
+}
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.form b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.form
new file mode 100644
index 0000000..ef97e71
--- /dev/null
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.form
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+
+<Form version="1.4" maxVersion="1.4" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <Properties>
+    <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+      <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+        <EmptyBorder bottom="8" left="8" right="8" top="8"/>
+      </Border>
+    </Property>
+  </Properties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,60,0,0,2,16"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
+  <SubComponents>
+    <Component class="javax.swing.JCheckBox" name="javaInlineHintParameterNameCB">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/java/editor/options/Bundle.properties" key="InlineHintsPanel.javaInlineHintParameterNameCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="3" insetsLeft="3" insetsBottom="3" insetsRight="3" anchor="10" weightX="1.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="javaInlineHintChainedTypesCB">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/java/editor/options/Bundle.properties" key="InlineHintsPanel.javaInlineHintChainedTypesCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="3" insetsLeft="3" insetsBottom="3" insetsRight="3" anchor="10" weightX="1.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="javaInlineHintVarTypeCB">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/java/editor/options/Bundle.properties" key="InlineHintsPanel.javaInlineHintVarTypeCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="3" insetsLeft="3" insetsBottom="3" insetsRight="3" anchor="10" weightX="1.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[32767, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.Glue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+</Form>
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.java b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.java
new file mode 100644
index 0000000..de490b4
--- /dev/null
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsPanel.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.editor.options;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+import javax.swing.JCheckBox;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.editor.EditorRegistry;
+import org.netbeans.modules.editor.NbEditorUtilities;
+import org.netbeans.modules.parsing.api.indexing.IndexingManager;
+import org.openide.util.Exceptions;
+
+public class InlineHintsPanel extends javax.swing.JPanel {
+
+    public static final String JAVA_INLINE_HINT_PARAMETER_NAME = "javaInlineHintParameterName"; //NOI18N
+    public static final String JAVA_INLINE_HINT_CHAINED_TYPES = "javaInlineHintChainedTypes"; //NOI18N
+    public static final String JAVA_INLINE_HINT_VAR_TYPE = "javaInlineHintVarType"; //NOI18N
+
+    private static final Map<String, Boolean> DEFAULT_VALUES;
+
+    static {
+        Map<String, Boolean> defaultValuesBuilder = new HashMap<>();
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_PARAMETER_NAME, true);
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_CHAINED_TYPES, false);
+        defaultValuesBuilder.put(JAVA_INLINE_HINT_VAR_TYPE, false);
+        DEFAULT_VALUES = Collections.unmodifiableMap(defaultValuesBuilder);
+    }
+
+    private List<JCheckBox> boxes;
+    private InlineHintsOptionsPanelController controller;
+    private boolean changed = false;
+
+    /**
+     * Creates new form InlineHintsPanel
+     */
+    public InlineHintsPanel(InlineHintsOptionsPanelController controller) {
+        initComponents();
+//        if( "Windows".equals(UIManager.getLookAndFeel().getID()) ) //NOI18N
+//            setOpaque( false );
+        fillBoxes();
+        addListeners();
+        load(controller);
+    }
+
+    public void load(InlineHintsOptionsPanelController controller) {
+        this.controller = controller;
+
+        Preferences node = InlineHintsSettings.getCurrentNode();
+
+        for (JCheckBox box : boxes) {
+            box.setSelected(node.getBoolean(box.getActionCommand(), DEFAULT_VALUES.get(box.getActionCommand())));
+        }
+
+        changed = false;
+    }
+
+    public void store() {
+        Preferences node = InlineHintsSettings.getCurrentNode();
+
+        for (javax.swing.JCheckBox box : boxes) {
+            boolean value = box.isSelected();
+            boolean original = node.getBoolean(box.getActionCommand(),
+                    DEFAULT_VALUES.get(box.getActionCommand()));
+
+            if (value != original) {
+                node.putBoolean(box.getActionCommand(), value);
+            }
+        }
+        try {
+            node.flush();
+        } catch (BackingStoreException ex) {
+            Exceptions.printStackTrace(ex);
+        }
+        changed = false;
+
+        EditorRegistry
+                .componentList()
+                .stream()
+                .map(jtc -> jtc.getDocument())
+                .filter(doc -> doc != null)
+                .map(doc -> NbEditorUtilities.getFileObject(doc))
+                .filter(fo -> fo != null)
+                .forEach(fo -> IndexingManager.getDefault().refreshAllIndices(fo));
+    }
+
+    public boolean changed() {
+        return changed;
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        javaInlineHintParameterNameCB = new javax.swing.JCheckBox();
+        javaInlineHintChainedTypesCB = new javax.swing.JCheckBox();
+        javaInlineHintVarTypeCB = new javax.swing.JCheckBox();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 32767));
+
+        setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
+        setLayout(new java.awt.GridBagLayout());
+
+        org.openide.awt.Mnemonics.setLocalizedText(javaInlineHintParameterNameCB, org.openide.util.NbBundle.getMessage(InlineHintsPanel.class, "InlineHintsPanel.javaInlineHintParameterNameCB.text")); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
+        add(javaInlineHintParameterNameCB, gridBagConstraints);
+
+        org.openide.awt.Mnemonics.setLocalizedText(javaInlineHintChainedTypesCB, org.openide.util.NbBundle.getMessage(InlineHintsPanel.class, "InlineHintsPanel.javaInlineHintChainedTypesCB.text")); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
+        add(javaInlineHintChainedTypesCB, gridBagConstraints);
+
+        org.openide.awt.Mnemonics.setLocalizedText(javaInlineHintVarTypeCB, org.openide.util.NbBundle.getMessage(InlineHintsPanel.class, "InlineHintsPanel.javaInlineHintVarTypeCB.text")); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
+        add(javaInlineHintVarTypeCB, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 3;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        add(filler1, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.Box.Filler filler1;
+    private javax.swing.JCheckBox javaInlineHintChainedTypesCB;
+    private javax.swing.JCheckBox javaInlineHintParameterNameCB;
+    private javax.swing.JCheckBox javaInlineHintVarTypeCB;
+    // End of variables declaration//GEN-END:variables
+    // End of variables declaration
+
+    private void fillBoxes() {
+        boxes = new ArrayList<JCheckBox>();
+        boxes.add(javaInlineHintParameterNameCB);
+        boxes.add(javaInlineHintChainedTypesCB);
+        boxes.add(javaInlineHintVarTypeCB);
+
+        javaInlineHintParameterNameCB.setActionCommand(JAVA_INLINE_HINT_PARAMETER_NAME);
+        javaInlineHintChainedTypesCB.setActionCommand(JAVA_INLINE_HINT_CHAINED_TYPES);
+        javaInlineHintVarTypeCB.setActionCommand(JAVA_INLINE_HINT_VAR_TYPE);
+    }
+
+    private void addListeners() {
+        ChangeListener cl = new CheckChangeListener();
+
+        for (JCheckBox box : boxes) {
+            box.addChangeListener(cl);
+        }
+
+    }
+
+    private void fireChanged() {
+        Preferences node = InlineHintsSettings.getCurrentNode();
+        for (JCheckBox box : boxes) {
+            if (node.getBoolean(box.getActionCommand(), DEFAULT_VALUES.get(box.getActionCommand())) != box.isSelected()) {
+                changed = true;
+                return;
+            }
+        }
+        changed = false;
+    }
+
+    private class CheckChangeListener implements ChangeListener {
+
+        @Override
+        public void stateChanged(ChangeEvent evt) {
+            fireChanged();
+        }
+    }
+
+}
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsSettings.java b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsSettings.java
new file mode 100644
index 0000000..baeaf9a
--- /dev/null
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/options/InlineHintsSettings.java
@@ -0,0 +1,43 @@
+package org.netbeans.modules.java.editor.options;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.editor.options.*;
+import java.util.prefs.Preferences;
+import org.openide.util.NbPreferences;
+
+public class InlineHintsSettings {
+    
+    private static final String INLINE_HINTS = "InlineHints"; // NOI18N
+
+    private InlineHintsSettings() {
+    }
+
+    public static Preferences getCurrentNode() {
+        Preferences preferences = NbPreferences.forModule(MarkOccurencesOptionsPanelController.class);
+        return preferences.node(INLINE_HINTS).node(getCurrentProfileId());
+    }
+    
+    private static String getCurrentProfileId() {
+        return "default"; // NOI18N
+    }
+    
+}
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/resources/layer.xml b/java/java.editor/src/org/netbeans/modules/java/editor/resources/layer.xml
index 2ba8c42..8e540c0 100644
--- a/java/java.editor/src/org/netbeans/modules/java/editor/resources/layer.xml
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/resources/layer.xml
@@ -447,6 +447,16 @@
                     </folder>
                 </folder>
             </folder>
+            <folder name="InlineHints">
+                <folder name="text">
+                    <folder name="x-java">
+                        <file name="JavaInlineHints.instance">
+                            <attr name="instanceOf" stringvalue="org.netbeans.spi.options.OptionsPanelController"/>
+                            <attr name="instanceCreate" newvalue="org.netbeans.modules.java.editor.options.InlineHintsOptionsPanelController"/>
+                        </file>
+                    </folder>
+                </folder>
+            </folder>
             <folder name="CodeCompletion">
                 <folder name="text">
                     <folder name="x-java">
diff --git a/java/java.editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties b/java/java.editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
index 4e33cee..0c291cf 100644
--- a/java/java.editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
+++ b/java/java.editor/test/qa-functional/data/cp-prj-1/nbproject/project.properties
@@ -35,7 +35,7 @@
 
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}:\
diff --git a/java/java.editor/test/qa-functional/src/org/netbeans/test/java/editor/formatting/operators/FormattingOptionsOperator.java b/java/java.editor/test/qa-functional/src/org/netbeans/test/java/editor/formatting/operators/FormattingOptionsOperator.java
index 1ca9e32..ec23a7a 100644
--- a/java/java.editor/test/qa-functional/src/org/netbeans/test/java/editor/formatting/operators/FormattingOptionsOperator.java
+++ b/java/java.editor/test/qa-functional/src/org/netbeans/test/java/editor/formatting/operators/FormattingOptionsOperator.java
@@ -158,7 +158,7 @@
         public boolean checkComponent(Component comp) {
             if (comp instanceof JComponent) {
                 Object labeledBy = ((JComponent) comp).getClientProperty("labeledBy");
-                if (labeledBy != null && (labeledBy instanceof JLabel)) {
+                if (labeledBy instanceof JLabel) {
                     String labelText = ((JLabel) labeledBy).getText();
                     if (getDefaultStringComparator().equals(labelText, this.label)) {
                         if (type == null) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
index 3e68eb8..712977f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
@@ -1,24 +1,6 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testHighlightAndReplace_cornercase</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>  public static void \bmain\b(String... args) {	
 		 S<b>y</b><b>s</b>replace<b>.</b><b>o</b><b>u</b><b>t</b>.println("tests"); 	
  }
  
-</code></pre></div><p>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag.pass
index b4a6635..3f7d729 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag.pass
@@ -1,29 +1,10 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
-         System.out.println("Hello World!");  
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><a href='*1'>o</a><a href='*1'>u</a><a href='*1'>t</a>.println("Hello World!");  
  }
  }
  
-
-</code></pre></div><p>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_HighlightTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_HighlightTag.pass
index dcd50f8..cb79b7b 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_HighlightTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_HighlightTag.pass
@@ -1,29 +1,11 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_AlongWith_HighlightTag</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
          
-         System.<span style="background-color:yellow;">o</span><span style="background-color:yellow;">u</span><span style="background-color:yellow;">t</span><span style="background-color:yellow;">.</span><span style="background-color:yellow;">p</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">n</span><span style="background-color:yellow;">t</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">n</span>("Hello World!");
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><span style="background-color:yellow;"><a href='*1'>o</a></span><span style="background-color:yellow;"><a href='*1'>u</a></span><span style="background-color:yellow;"><a href='*1'>t</a></span><span style="background-color:yellow;">.</span><span style="background-color:yellow;">p</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">n</span><span style="background-color:yellow;">t</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">n</span>("Hello World!");
  }
  }
  
-</code></pre></div><p>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_ReplaceTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_ReplaceTag.pass
index 01f1f94..8a9190d 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_ReplaceTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_ReplaceTag.pass
@@ -1,29 +1,11 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_AlongWith_ReplaceTag</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
          
-         Syserr.out.println("Hello World!");
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a>err.o<a href='*1'>u</a><a href='*1'>t</a>.println("Hello World!");
  }
  }
  
-</code></pre></div><p>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_SubStringAndReplaceTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_SubStringAndReplaceTag.pass
index c193805..b3f1994 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_SubStringAndReplaceTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AlongWith_SubStringAndReplaceTag.pass
@@ -1,29 +1,11 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_AlongWith_SubStringAndReplaceTag</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
          
-         System.<span style="background-color:yellow;">r</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">p</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">a</span><span style="background-color:yellow;">c</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">d</span>out.println("Hello World!");
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><span style="background-color:yellow;">r</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">p</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">a</span><span style="background-color:yellow;">c</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">d</span>out.println("Hello World!");
  }
  }
-
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AppliesToNextLine.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AppliesToNextLine.pass
index 1479d48..80467e7 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AppliesToNextLine.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_AppliesToNextLine.pass
@@ -1,29 +1,11 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_AppliesToNextLine</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
          
-         System.out.println("Hello World!");
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><a href='*1'>o</a><a href='*1'>u</a><a href='*1'>t</a>.println("Hello World!");
  }
  }
-
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_EmptyReplacementValue.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_EmptyReplacementValue.pass
index 6b6f5a5..310a6c9 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_EmptyReplacementValue.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_EmptyReplacementValue.pass
@@ -1,29 +1,11 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_EmptyReplacementValue</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
- <pre><code> class HelloWorld {
+<pre><code> class HelloWorld {
      public static void main(String... args) {
          
-         System.out.println("Hello World!");
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><a href='*1'>o</a><a href='*1'>u</a><a href='*1'>t</a>.println("Hello World!");
  }
  }
-
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_FieldRef_ToThisClass_UsingHash.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_FieldRef_ToThisClass_UsingHash.pass
index 6ffb5a5..1916841 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_FieldRef_ToThisClass_UsingHash.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_FieldRef_ToThisClass_UsingHash.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_FieldRef_ToThisClass_UsingHash</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
@@ -24,5 +6,5 @@
          System.out.println(args[0]); 
  }
  }
-
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_Ref_ToThisClass_UsingHash.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_Ref_ToThisClass_UsingHash.pass
index 51b4c28..f2dab26 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_Ref_ToThisClass_UsingHash.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_Ref_ToThisClass_UsingHash.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_Ref_ToThisClass_UsingHash</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
@@ -24,5 +6,5 @@
          System.out.println(addExact(1,20)); 
  }
  }
-
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegexAndRegion.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegexAndRegion.pass
index 73897f5..21d75fd 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegexAndRegion.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegexAndRegion.pass
@@ -1,29 +1,12 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_With_RegexAndRegion</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
-       for (var arg : args) {                 
-           if (!arg.isBlank()) {
-               System.out.println(arg);
+       for (var <a href='*1'>a</a><a href='*1'>r</a><a href='*1'>g</a> : args) {                 
+           if (!<a href='*2'>a</a><a href='*2'>r</a><a href='*2'>g</a>.isBlank()) {
+               System.out.println(<a href='*3'>a</a><a href='*3'>r</a><a href='*3'>g</a>);
            }
        }                                      
  }
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegionAttribute.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegionAttribute.pass
index c616e44..5b5f6d3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegionAttribute.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_LinkTag_With_RegionAttribute.pass
@@ -1,31 +1,14 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLinkTag_With_RegionAttribute</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
-         System.out.println("Hello World!"); 
-         System.out.println(ArrayList.class); 
-         System.out.println("Hello World"); System.out.println(ArrayList.class);
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><a href='*1'>o</a><a href='*1'>u</a><a href='*1'>t</a>.println("Hello World!"); 
+         <a href='*3'><a href='*2'>S</a></a><a href='*3'><a href='*2'>y</a></a><a href='*3'><a href='*2'>s</a></a><a href='*3'><a href='*2'>t</a></a><a href='*3'><a href='*2'>e</a></a><a href='*3'><a href='*2'>m</a></a><a href='*3'><a href='*2'>.</a></a><a href='*3'><a href='*2'>o</a></a><a href='*3'><a href='*2'>u</a></a><a href='*3'><a href='*2'>t</a></a>.println(<a href='*4'>A</a><a href='*4'>r</a><a href='*4'>r</a><a href='*4'>a</a><a href='*4'>y</a><a href='*4'>L</a><a href='*4'>i</a><a href='*4'>s</a><a href='*4'>t</a><a href='*4'>.</a><a href='*4'>c</a><a href='*4'>l</a><a href='*4'>a</a><a href='*4'>s</a><a href='*4'>s</a>); 
+         <a href='*5'>S</a><a href='*5'>y</a><a href='*5'>s</a><a href='*5'>t</a><a href='*5'>e</a><a href='*5'>m</a><a href='*5'>.</a><a href='*5'>o</a><a href='*5'>u</a><a href='*5'>t</a>.println("Hello World"); <a href='*5'>S</a><a href='*5'>y</a><a href='*5'>s</a><a href='*5'>t</a><a href='*5'>e</a><a href='*5'>m</a><a href='*5'>.</a><a href='*5'>o</a><a href='*5'>u</a><a href='*5'>t</a>.println(<a href='*6'>A</a><a href='*6'>r</a><a href='*6'>r</a><a href='*6'>a</a><a href='*6'>y</a><a href='*6'>L</a><a href='*6'>i</a><a href='*6'>s</a><a href='*6'>t</a><a href='*6'>.</a><a href='*6'>c</a><a href='*6'>l</a><a href='*6'>a</a><a href='*6'>s</a><a href='*6'>s</a>);
          System.err.println("err");
-         System.err.println(ArrayList.class);
+         System.err.println(<a href='*13'><a href='*12'><a href='*10'>A</a></a></a><a href='*13'><a href='*12'><a href='*10'>r</a></a></a><a href='*13'><a href='*12'><a href='*10'>r</a></a></a><a href='*13'><a href='*12'><a href='*10'>a</a></a></a><a href='*13'><a href='*12'><a href='*10'>y</a></a></a><a href='*13'><a href='*12'><a href='*10'>L</a></a></a><a href='*13'><a href='*12'><a href='*10'>i</a></a></a><a href='*13'><a href='*12'><a href='*10'>s</a></a></a><a href='*13'><a href='*12'><a href='*10'>t</a></a></a><a href='*13'><a href='*12'><a href='*10'>.</a></a></a><a href='*13'><a href='*12'><a href='*10'>c</a></a></a><a href='*13'><a href='*12'><a href='*10'>l</a></a></a><a href='*13'><a href='*12'><a href='*10'>a</a></a></a><a href='*13'><a href='*12'><a href='*10'>s</a></a></a><a href='*13'><a href='*12'><a href='*10'>s</a></a></a>);
  }
  }
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Link_MultipleTag_OnSameLine.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Link_MultipleTag_OnSameLine.pass
index cecb0a1..6c0c86e 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Link_MultipleTag_OnSameLine.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Link_MultipleTag_OnSameLine.pass
@@ -1,27 +1,10 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testLink_MultipleTag_OnSameLine</b>()</pre><p>A simple program
 
  <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
-         System.out.println(ArrayList.class); 
+         <a href='*1'>S</a><a href='*1'>y</a><a href='*1'>s</a><a href='*1'>t</a><a href='*1'>e</a><a href='*1'>m</a><a href='*1'>.</a><a href='*1'>o</a><a href='*1'>u</a><a href='*1'>t</a>.println(<a href='*2'>A</a><a href='*2'>r</a><a href='*2'>r</a><a href='*2'>a</a><a href='*2'>y</a><a href='*2'>L</a><a href='*2'>i</a><a href='*2'>s</a><a href='*2'>t</a><a href='*2'>.</a><a href='*2'>c</a><a href='*2'>l</a><a href='*2'>a</a><a href='*2'>s</a><a href='*2'>s</a>); 
  }
  }
-</code></pre></div><p>
+ 
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
index 3269fdb..e746d68 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testNestedRegion_Highlight_And_replace</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void \bmain\b(String... args) {	
        for (var <i><b>a</b></i><i><b>r</b></i><i><b>g</b></i> : <i><b>a</b></i><i><b>r</b></i><i><b>g</b></i>s) {                         
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
index fa4010c..c40df37 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld<span style="background-color:yellow;">1</span> {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
index 3e45beb..5e14660 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
index 00bda0f..406ecd1 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
index 1bcbcb0..78df225 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_RegexInnComment</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
index cc66e6d..21c971b 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
index 1c7dba4..ac9a233 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
index 31c90f9..3f79d39 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_ReplaceAnnotation_Regex_DoubleQuote</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
index 071e094..a5dd54b 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_Replace_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
index c59b5c5..84036ec 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDot</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
index 7e319b5..1a57784 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDotStar</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
index 4c4a452..79366b1 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testSingleLine_Replace_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code> class HelloWorld {
      public static void main(String... args) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
index 5076e5a..f8a0fa6 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorsInHighlightTag</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
 </code></pre></div>
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_LinkTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_LinkTag.pass
index 5c29e61..297414c 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_LinkTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_LinkTag.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regardingcopyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorsInLinkTag</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>link</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
 </code></pre></div>
@@ -53,13 +35,13 @@
 </code></pre></div>
  
  <div id="snippet10" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet10">Copy</a></div>
-<pre><code> class Helloclass {
+<pre><code> <a href='*1'>c</a><a href='*1'>l</a><a href='*1'>a</a><a href='*1'>s</a><a href='*1'>s</a> Helloclass {
  }
  
 </code></pre></div>
  
  <div id="snippet11" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet11">Copy</a></div>
-<pre><code> class HelloClass {
+<pre><code> class Hello<a href='*2'>C</a><a href='*2'>l</a><a href='*2'>a</a><a href='*2'>s</a><a href='*2'>s</a> {
  }
  
 </code></pre></div>
@@ -71,7 +53,7 @@
 </code></pre></div>
  
  <div id="snippet13" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet13">Copy</a></div>
-<pre><code> class HelloClass {
+<pre><code><a href='*4'> </a>class<a href='*4'> </a>HelloClass<a href='*4'> </a>{
  }
  
 </code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
index 109e38b..3874175 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorsInNoRegionToEnd</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: no region to end @end <sub>^</sub><b><i>anonymous</b></i></span>
 </code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
index e0c29af..173fb2a 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorsInReplaceTag</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
 </code></pre></div>
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
index 60afed3..59b3db6 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorsInUnpairedRegion</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight anonymous</b></i></span>
 </code></pre></div>
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_external_file.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_external_file.pass
index ca11535..a609314 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_external_file.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_external_file.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>externalSnippetFile</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>import java.util.Optional;
 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_empty.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_empty.pass
index 73eb955..6b244a3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_empty.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_empty.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorFileEmpty</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: File invalid</span>
 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_invalid.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_invalid.pass
index 109dbbb..51dabc0 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_invalid.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_file_invalid.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorFileInvalid</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: File invalid</span>
 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
index d6cdb96..ebeb164 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>private static void <b>method</b>(<a href='*1'>R</a> r)</pre><p>A simple program.
 
  <code><a href='*2'>System.out</a></code>
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
index d2726f9..a42f299 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChange</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
       
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
index e03c964..994db22 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChangeUsingDot</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
       
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
index d2516b0..9b05d64 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightTagSubstringApplyToNextLine</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
       
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
index 4c0b96a..229f311 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
@@ -1,42 +1,20 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-<html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
-<pre><code>   public static void main(String... substring) {
-       for (var regex : substring) {
-           if (!arg.isBlank()) {
-                System.out.println("<i>i</i><i>t</i><i>a</i><i>l</i><i>i</i><i>c</i>");     
-                System.out.println("<b>b</b><b>o</b><b>l</b><b>d</b>");       
-                System.out.println("<span style="background-color:yellow;">h</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">t</span>");  
- 
-                System.out.println("italic and <span style="background-color:yellow;">h</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">t</span> and bold");
- 
-                System.out.println("<span style="background-color:yellow;">i</span><span style="background-color:yellow;">t</span><span style="background-color:yellow;">a</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">c</span><span style="background-color:yellow;">-</span><span style="background-color:yellow;">c</span><span style="background-color:yellow;">u</span><span style="background-color:yellow;">m</span><span style="background-color:yellow;">-</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">i</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">h</span><span style="background-color:yellow;">t</span><span style="background-color:yellow;">-</span><span style="background-color:yellow;">c</span><span style="background-color:yellow;">u</span><span style="background-color:yellow;">m</span><span style="background-color:yellow;">-</span><span style="background-color:yellow;">b</span><span style="background-color:yellow;">o</span><span style="background-color:yellow;">l</span><span style="background-color:yellow;">d</span>");
-                System.out.println("Highlight all "+ <b>s</b><b>u</b><b>b</b><b>s</b><b>t</b><b>r</b><b>i</b><b>n</b><b>g</b> + ":" + "sub<b>s</b><b>u</b><b>b</b><b>s</b><b>t</b><b>r</b><b>i</b><b>n</b><b>g</b>string");
-
-                System.out.println("no mark up tag");//to-do
- 
-                System.out.println("Highlight/bold/italic all "+ <b>s</b><b>u</b><b>b</b><b>s</b><b>t</b><b>r</b><b>i</b><b>n</b><b>g</b> + ":" + "sub<b>s</b><b>u</b><b>b</b><b>s</b><b>t</b><b>r</b><b>i</b><b>n</b><b>g</b>string");
-                System.out.println("Highlight all regular exp :<b>r</b><b>e</b><b>g</b><b>e</b><b>x</b>:"+ <b>r</b><b>e</b><b>g</b><b>e</b><b>x</b> + " :" + "regexregex" +" <b>r</b><b>e</b><b>g</b><b>e</b><b>x</b> ");
- 
-                System.out.println("Highlight/bold/italic all regular exp :<span style="background-color:yellow;">r</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">x</span>:"+ <span style="background-color:yellow;">r</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">x</span> + ":" + "regexregex"+" <span style="background-color:yellow;">r</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">g</span><span style="background-color:yellow;">e</span><span style="background-color:yellow;">x</span> ");
- }
- }
+<html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingMultipleSnippetTagInOneJavaDocWithRegion</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code>   public static void main(String... args) {
+       for (var <b>a</b><b>r</b><b>g</b> : <b>a</b><b>r</b><b>g</b>s) {                 
+           if (!<b>a</b><b>r</b><b>g</b>.isBlank<b>a</b><b>r</b><b>g</b>()) {
+               System.out.println(<b>a</b><b>r</b><b>g</b>);
+           }
+       }                                      
+   }
+   
+</code></pre></div>
+  <div id="snippet2" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet2">Copy</a></div>
+<pre><code>   public static void main(String... args) {
+       for (var <b>a</b><b>r</b><b>g</b> : args) {                 
+           if (!<b>a</b><b>r</b><b>g</b>.isBlankarg()) {
+               System.out.println(<b>a</b><b>r</b><b>g</b>);
+           }
+       }                                      
  }
  
 </code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
index dbd0412..0b642aa 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingNestedRegions</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void \bmain\b(String... args) {
  
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
index 1270464..7c96bd0 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingRegex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args1) {
        for (var arg : args<b>1</b>) {                 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
index cc9c754..faac4e2 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingRegionsEndedWithDoubleColon</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void \bmain\b(String... args) {
        for (var arg : args) {                         
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
index 51453e8..7230e25 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingSubstring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
        for (var arg : <b>a</b><b>r</b><b>g</b><b>s</b>) {                 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
index 9461f5c..dea56f3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingSubstringAndRegex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args1) {
        for (<b>v</b><b>a</b><b>r</b> arg : args<b>1</b>) {                 
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
index 4c0b96a..83732f2 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... substring) {
        for (var regex : substring) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
index dff623a..82b3e07 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>noMarkupTagPresent</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>   public static void main(String... args) {
      System.out.println("args"); // highligh substring = "args"
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_invalid.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_invalid.pass
index 8c73f61..d3a23a4 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_invalid.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_invalid.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>errorRegionInvalid</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code><span style="color:red;">error: snippet markup: Region not found</span>
 </code></pre></div>
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_valid.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_valid.pass
index c2488ba..9fc492d 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_valid.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_region_valid.pass
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
 <html><body><font size='+0'><b><a href='*0'>test.&#x200B;Test</a></b></font><pre>public void <b>testRegionValid</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
 <pre><code>        
         if (v.isPresent()) {
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals2.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals2.pass
new file mode 100644
index 0000000..7f77199
--- /dev/null
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals2.pass
@@ -0,0 +1,46 @@
+public abstract E get(int)
+public abstract E remove(int)
+public abstract E set(int,E)
+public abstract T[] <T>toArray(T[])
+public abstract boolean add(E)
+public abstract boolean addAll(int,java.util.Collection<? extends E>)
+public abstract boolean addAll(java.util.Collection<? extends E>)
+public abstract boolean contains(java.lang.Object)
+public abstract boolean containsAll(java.util.Collection<?>)
+public abstract boolean equals(java.lang.Object)
+public abstract boolean isEmpty()
+public abstract boolean remove(java.lang.Object)
+public abstract boolean removeAll(java.util.Collection<?>)
+public abstract boolean retainAll(java.util.Collection<?>)
+public abstract int hashCode()
+public abstract int indexOf(java.lang.Object)
+public abstract int lastIndexOf(java.lang.Object)
+public abstract int size()
+public abstract java.lang.Object[] toArray()
+public abstract java.util.Iterator<E> iterator()
+public abstract java.util.List<E> subList(int,int)
+public abstract java.util.ListIterator<E> listIterator()
+public abstract java.util.ListIterator<E> listIterator(int)
+public abstract void add(int,E)
+public abstract void clear()
+public default T[] <T>toArray(java.util.function.IntFunction<T[]>)
+public default boolean removeIf(java.util.function.Predicate<? super E>)
+public default java.util.Spliterator<E> spliterator()
+public default java.util.stream.Stream<E> parallelStream()
+public default java.util.stream.Stream<E> stream()
+public default void forEach(java.util.function.Consumer<? super T>)
+public default void replaceAll(java.util.function.UnaryOperator<E>)
+public default void sort(java.util.Comparator<? super E>)
+public static java.util.List<E> <E>copyOf(java.util.Collection<? extends E>)
+public static java.util.List<E> <E>of()
+public static java.util.List<E> <E>of(E)
+public static java.util.List<E> <E>of(E,E)
+public static java.util.List<E> <E>of(E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E,E,E,E,E)
+public static java.util.List<E> <E>of(E,E,E,E,E,E,E,E,E,E)
+public static java.util.List<E> <E>of(E...)
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals3.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals3.pass
new file mode 100644
index 0000000..2033f1f
--- /dev/null
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/11/testMethodProposals3.pass
@@ -0,0 +1,75 @@
+public boolean contains(java.lang.CharSequence)
+public boolean contentEquals(java.lang.CharSequence)
+public boolean contentEquals(java.lang.StringBuffer)
+public boolean endsWith(java.lang.String)
+public boolean equals(java.lang.Object)
+public boolean equalsIgnoreCase(java.lang.String)
+public boolean isBlank()
+public boolean isEmpty()
+public boolean matches(java.lang.String)
+public boolean regionMatches(boolean,int,java.lang.String,int,int)
+public boolean regionMatches(int,java.lang.String,int,int)
+public boolean startsWith(java.lang.String)
+public boolean startsWith(java.lang.String,int)
+public byte[] getBytes()
+public byte[] getBytes(java.lang.String)
+public byte[] getBytes(java.nio.charset.Charset)
+public char charAt(int)
+public char[] toCharArray()
+public int codePointAt(int)
+public int codePointBefore(int)
+public int codePointCount(int,int)
+public int compareTo(java.lang.String)
+public int compareToIgnoreCase(java.lang.String)
+public int hashCode()
+public int indexOf(int)
+public int indexOf(int,int)
+public int indexOf(java.lang.String)
+public int indexOf(java.lang.String,int)
+public int lastIndexOf(int)
+public int lastIndexOf(int,int)
+public int lastIndexOf(java.lang.String)
+public int lastIndexOf(java.lang.String,int)
+public int length()
+public int offsetByCodePoints(int,int)
+public java.lang.CharSequence subSequence(int,int)
+public java.lang.String concat(java.lang.String)
+public java.lang.String repeat(int)
+public java.lang.String replace(char,char)
+public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
+public java.lang.String replaceAll(java.lang.String,java.lang.String)
+public java.lang.String replaceFirst(java.lang.String,java.lang.String)
+public java.lang.String strip()
+public java.lang.String stripLeading()
+public java.lang.String stripTrailing()
+public java.lang.String substring(int)
+public java.lang.String substring(int,int)
+public java.lang.String toLowerCase()
+public java.lang.String toLowerCase(java.util.Locale)
+public java.lang.String toString()
+public java.lang.String toUpperCase()
+public java.lang.String toUpperCase(java.util.Locale)
+public java.lang.String trim()
+public java.lang.String[] split(java.lang.String)
+public java.lang.String[] split(java.lang.String,int)
+public java.util.stream.IntStream chars()
+public java.util.stream.IntStream codePoints()
+public java.util.stream.Stream<java.lang.String> lines()
+public native java.lang.String intern()
+public static java.lang.String copyValueOf(char[])
+public static java.lang.String copyValueOf(char[],int,int)
+public static java.lang.String format(java.lang.String,java.lang.Object...)
+public static java.lang.String format(java.util.Locale,java.lang.String,java.lang.Object...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.CharSequence...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable<? extends java.lang.CharSequence>)
+public static java.lang.String valueOf(boolean)
+public static java.lang.String valueOf(char)
+public static java.lang.String valueOf(char[])
+public static java.lang.String valueOf(char[],int,int)
+public static java.lang.String valueOf(double)
+public static java.lang.String valueOf(float)
+public static java.lang.String valueOf(int)
+public static java.lang.String valueOf(java.lang.Object)
+public static java.lang.String valueOf(long)
+public void getBytes(int,int,byte[],int)
+public void getChars(int,int,char[],int)
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/12/testMethodProposals3.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/12/testMethodProposals3.pass
new file mode 100644
index 0000000..a8b92ca
--- /dev/null
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/12/testMethodProposals3.pass
@@ -0,0 +1,79 @@
+public R <R>transform(java.util.function.Function<? super java.lang.String,? extends R>)
+public boolean contains(java.lang.CharSequence)
+public boolean contentEquals(java.lang.CharSequence)
+public boolean contentEquals(java.lang.StringBuffer)
+public boolean endsWith(java.lang.String)
+public boolean equals(java.lang.Object)
+public boolean equalsIgnoreCase(java.lang.String)
+public boolean isBlank()
+public boolean isEmpty()
+public boolean matches(java.lang.String)
+public boolean regionMatches(boolean,int,java.lang.String,int,int)
+public boolean regionMatches(int,java.lang.String,int,int)
+public boolean startsWith(java.lang.String)
+public boolean startsWith(java.lang.String,int)
+public byte[] getBytes()
+public byte[] getBytes(java.lang.String)
+public byte[] getBytes(java.nio.charset.Charset)
+public char charAt(int)
+public char[] toCharArray()
+public int codePointAt(int)
+public int codePointBefore(int)
+public int codePointCount(int,int)
+public int compareTo(java.lang.String)
+public int compareToIgnoreCase(java.lang.String)
+public int hashCode()
+public int indexOf(int)
+public int indexOf(int,int)
+public int indexOf(java.lang.String)
+public int indexOf(java.lang.String,int)
+public int lastIndexOf(int)
+public int lastIndexOf(int,int)
+public int lastIndexOf(java.lang.String)
+public int lastIndexOf(java.lang.String,int)
+public int length()
+public int offsetByCodePoints(int,int)
+public java.lang.CharSequence subSequence(int,int)
+public java.lang.String concat(java.lang.String)
+public java.lang.String indent(int)
+public java.lang.String repeat(int)
+public java.lang.String replace(char,char)
+public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
+public java.lang.String replaceAll(java.lang.String,java.lang.String)
+public java.lang.String replaceFirst(java.lang.String,java.lang.String)
+public java.lang.String resolveConstantDesc(java.lang.invoke.MethodHandles.Lookup)
+public java.lang.String strip()
+public java.lang.String stripLeading()
+public java.lang.String stripTrailing()
+public java.lang.String substring(int)
+public java.lang.String substring(int,int)
+public java.lang.String toLowerCase()
+public java.lang.String toLowerCase(java.util.Locale)
+public java.lang.String toString()
+public java.lang.String toUpperCase()
+public java.lang.String toUpperCase(java.util.Locale)
+public java.lang.String trim()
+public java.lang.String[] split(java.lang.String)
+public java.lang.String[] split(java.lang.String,int)
+public java.util.Optional<java.lang.String> describeConstable()
+public java.util.stream.IntStream chars()
+public java.util.stream.IntStream codePoints()
+public java.util.stream.Stream<java.lang.String> lines()
+public native java.lang.String intern()
+public static java.lang.String copyValueOf(char[])
+public static java.lang.String copyValueOf(char[],int,int)
+public static java.lang.String format(java.lang.String,java.lang.Object...)
+public static java.lang.String format(java.util.Locale,java.lang.String,java.lang.Object...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.CharSequence...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable<? extends java.lang.CharSequence>)
+public static java.lang.String valueOf(boolean)
+public static java.lang.String valueOf(char)
+public static java.lang.String valueOf(char[])
+public static java.lang.String valueOf(char[],int,int)
+public static java.lang.String valueOf(double)
+public static java.lang.String valueOf(float)
+public static java.lang.String valueOf(int)
+public static java.lang.String valueOf(java.lang.Object)
+public static java.lang.String valueOf(long)
+public void getBytes(int,int,byte[],int)
+public void getChars(int,int,char[],int)
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/13/testMethodProposals3.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/13/testMethodProposals3.pass
new file mode 100644
index 0000000..543382c
--- /dev/null
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/13/testMethodProposals3.pass
@@ -0,0 +1,82 @@
+public R <R>transform(java.util.function.Function<? super java.lang.String,? extends R>)
+public boolean contains(java.lang.CharSequence)
+public boolean contentEquals(java.lang.CharSequence)
+public boolean contentEquals(java.lang.StringBuffer)
+public boolean endsWith(java.lang.String)
+public boolean equals(java.lang.Object)
+public boolean equalsIgnoreCase(java.lang.String)
+public boolean isBlank()
+public boolean isEmpty()
+public boolean matches(java.lang.String)
+public boolean regionMatches(boolean,int,java.lang.String,int,int)
+public boolean regionMatches(int,java.lang.String,int,int)
+public boolean startsWith(java.lang.String)
+public boolean startsWith(java.lang.String,int)
+public byte[] getBytes()
+public byte[] getBytes(java.lang.String)
+public byte[] getBytes(java.nio.charset.Charset)
+public char charAt(int)
+public char[] toCharArray()
+public int codePointAt(int)
+public int codePointBefore(int)
+public int codePointCount(int,int)
+public int compareTo(java.lang.String)
+public int compareToIgnoreCase(java.lang.String)
+public int hashCode()
+public int indexOf(int)
+public int indexOf(int,int)
+public int indexOf(java.lang.String)
+public int indexOf(java.lang.String,int)
+public int lastIndexOf(int)
+public int lastIndexOf(int,int)
+public int lastIndexOf(java.lang.String)
+public int lastIndexOf(java.lang.String,int)
+public int length()
+public int offsetByCodePoints(int,int)
+public java.lang.CharSequence subSequence(int,int)
+public java.lang.String concat(java.lang.String)
+public java.lang.String formatted(java.lang.Object...)
+public java.lang.String indent(int)
+public java.lang.String repeat(int)
+public java.lang.String replace(char,char)
+public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
+public java.lang.String replaceAll(java.lang.String,java.lang.String)
+public java.lang.String replaceFirst(java.lang.String,java.lang.String)
+public java.lang.String resolveConstantDesc(java.lang.invoke.MethodHandles.Lookup)
+public java.lang.String strip()
+public java.lang.String stripIndent()
+public java.lang.String stripLeading()
+public java.lang.String stripTrailing()
+public java.lang.String substring(int)
+public java.lang.String substring(int,int)
+public java.lang.String toLowerCase()
+public java.lang.String toLowerCase(java.util.Locale)
+public java.lang.String toString()
+public java.lang.String toUpperCase()
+public java.lang.String toUpperCase(java.util.Locale)
+public java.lang.String translateEscapes()
+public java.lang.String trim()
+public java.lang.String[] split(java.lang.String)
+public java.lang.String[] split(java.lang.String,int)
+public java.util.Optional<java.lang.String> describeConstable()
+public java.util.stream.IntStream chars()
+public java.util.stream.IntStream codePoints()
+public java.util.stream.Stream<java.lang.String> lines()
+public native java.lang.String intern()
+public static java.lang.String copyValueOf(char[])
+public static java.lang.String copyValueOf(char[],int,int)
+public static java.lang.String format(java.lang.String,java.lang.Object...)
+public static java.lang.String format(java.util.Locale,java.lang.String,java.lang.Object...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.CharSequence...)
+public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable<? extends java.lang.CharSequence>)
+public static java.lang.String valueOf(boolean)
+public static java.lang.String valueOf(char)
+public static java.lang.String valueOf(char[])
+public static java.lang.String valueOf(char[],int,int)
+public static java.lang.String valueOf(double)
+public static java.lang.String valueOf(float)
+public static java.lang.String valueOf(int)
+public static java.lang.String valueOf(java.lang.Object)
+public static java.lang.String valueOf(long)
+public void getBytes(int,int,byte[],int)
+public void getChars(int,int,char[],int)
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate129140.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate129140.pass
deleted file mode 100644
index c8edec6..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate129140.pass
+++ /dev/null
@@ -1,18 +0,0 @@
-package test;
-
-import java.util.List;
-
-public class MethodProposals {
-
-    private Auxiliary a;
-    private List l;
-    private String s;
-    private List<String> ll;
-    private List<? extends String> lext;
-    private List<? super String> lsup;
-    private List<?> lub;
-
-    public <T> T[] toArray(T[] ts) {
-        return ll.toArray(ts);
-    }
-}
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625a.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625a.pass
deleted file mode 100644
index b8ee047..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625a.pass
+++ /dev/null
@@ -1,18 +0,0 @@
-package test;
-
-import java.util.List;
-
-public class MethodProposals {
-
-    private Auxiliary a;
-    private List l;
-    private String s;
-    private List<String> ll;
-    private List<? extends String> lext;
-    private List<? super String> lsup;
-    private List<?> lub;
-
-    public boolean add(String e) {
-        return lext.add(e);
-    }
-}
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625b.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625b.pass
deleted file mode 100644
index d34800c..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625b.pass
+++ /dev/null
@@ -1,18 +0,0 @@
-package test;
-
-import java.util.List;
-
-public class MethodProposals {
-
-    private Auxiliary a;
-    private List l;
-    private String s;
-    private List<String> ll;
-    private List<? extends String> lext;
-    private List<? super String> lsup;
-    private List<?> lub;
-
-    public boolean add(String e) {
-        return lsup.add(e);
-    }
-}
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625c.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625c.pass
deleted file mode 100644
index 90163e7..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625c.pass
+++ /dev/null
@@ -1,19 +0,0 @@
-package test;
-
-import java.util.Collection;
-import java.util.List;
-
-public class MethodProposals {
-
-    private Auxiliary a;
-    private List l;
-    private String s;
-    private List<String> ll;
-    private List<? extends String> lext;
-    private List<? super String> lsup;
-    private List<?> lub;
-
-    public boolean addAll(Collection<? extends String> clctn) {
-        return lsup.addAll(clctn);
-    }
-}
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625d.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625d.pass
deleted file mode 100644
index 0adc534..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testGenerate133625d.pass
+++ /dev/null
@@ -1,18 +0,0 @@
-package test;
-
-import java.util.List;
-
-public class MethodProposals {
-
-    private Auxiliary a;
-    private List l;
-    private String s;
-    private List<String> ll;
-    private List<? extends String> lext;
-    private List<? super String> lsup;
-    private List<?> lub;
-
-    public boolean add(Object e) {
-        return lub.add(e);
-    }
-}
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testMethodProposals1.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testMethodProposals1.pass
deleted file mode 100644
index 5e3abe2..0000000
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest/17/testMethodProposals1.pass
+++ /dev/null
@@ -1,5 +0,0 @@
-protected void test2()
-public java.lang.String toString()
-public static void test5()
-public void test1()
-void test3()
diff --git a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportFileNameTest.java b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportFileNameTest.java
new file mode 100644
index 0000000..e2bb5dd
--- /dev/null
+++ b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportFileNameTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.editor.java;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import javax.lang.model.element.Element;
+import static junit.framework.TestCase.assertNotNull;
+import org.netbeans.api.java.source.CompilationController;
+import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.Task;
+import org.netbeans.junit.NbTestCase;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.URLMapper;
+
+public class GoToSupportFileNameTest extends NbTestCase {
+    public GoToSupportFileNameTest(String name) {
+        super(name);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        org.netbeans.api.project.ui.OpenProjects.getDefault().getOpenProjects();
+    }
+
+    public void testFindFileName() throws Exception {
+        URL u = getClass().getResource("/org/netbeans/modules/editor/java/GoToSupportFileNameTest.class");
+        assertNotNull("Find u", u);
+        FileObject fo = URLMapper.findFileObject(u);
+        assertNotNull("Class found", fo);
+        JavaSource s = JavaSource.forFileObject(fo);
+        assertNotNull("Source found", s);
+
+        CountDownLatch cdl = new CountDownLatch(1);
+        List<Element> arr = new ArrayList<>();
+        s.runUserActionTask(new Task<CompilationController>() {
+            @Override
+            public void run(CompilationController c) {
+                arr.addAll(c.getTopLevelElements());
+                cdl.countDown();
+            }
+        }, true);
+
+        cdl.await(1, TimeUnit.SECONDS);
+
+        String name = GoToSupport.findFileName(arr.get(0));
+        assertEquals("GoToSupportFileNameTest.java", name);
+    }
+}
diff --git a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
index 2afff1e..7fe0dfe 100644
--- a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
+++ b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
@@ -51,7 +51,6 @@
 import org.netbeans.api.java.source.CompilationController;
 import org.netbeans.api.java.source.ElementHandle;
 import org.netbeans.api.java.source.JavaSource;
-import org.netbeans.api.java.source.SourceUtilsTest;
 import org.netbeans.api.java.source.SourceUtilsTestUtil;
 import org.netbeans.api.java.source.SourceUtilsTestUtil2;
 import org.netbeans.api.java.source.Task;
@@ -79,12 +78,12 @@
  * @author Jan Lahoda
  */
 public class GoToSupportTest extends NbTestCase {
-    
+
     /** Creates a new instance of GoToSupportTest */
     public GoToSupportTest(String name) {
         super(name);
     }
-    
+
     @Override
     protected void setUp() throws Exception {
         SourceUtilsTestUtil.prepareTest(new String[] {"org/netbeans/modules/java/editor/resources/layer.xml"}, new Object[0]);
@@ -92,7 +91,7 @@
         SourceUtilsTestUtil2.disableArtificalParameterNames();
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = false;
     }
-    
+
     public void testGoToMethod() throws Exception {
         final boolean[] wasCalled = new boolean[1];
 
@@ -471,7 +470,7 @@
             public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            public boolean open(ClasspathInfo info, final ElementHandle<?> el) {
+            public boolean open(ClasspathInfo info, final ElementHandle<?> el, String fileName) {
                 try {
                     JavaSource.create(info).runUserActionTask(new Task<CompilationController>() {
                         public void run(CompilationController parameter) throws Exception {
@@ -866,7 +865,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -888,7 +887,7 @@
             public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -912,7 +911,7 @@
             public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 return false;
             }
             public void warnCannotOpen(String displayName) {
@@ -960,7 +959,7 @@
             public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 assertEquals(ElementKind.CLASS, el.getKind());
                 assertEquals("java.lang.String", el.getQualifiedName());
                 wasCalled[0] = true;
@@ -980,7 +979,7 @@
 
         assertTrue(wasCalled[0]);
     }
-    
+
     public void testTooltipForConciseConstructorCall1() throws Exception {
         String code = "package test; public class Test {java.util.List<String> l = new java.util.Arr|ayList<>();}";
         int offset = code.indexOf('|');
@@ -1032,7 +1031,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1068,7 +1067,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1101,7 +1100,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 wasCalled[0] = true;
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1134,7 +1133,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 wasCalled[0] = true;
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1148,7 +1147,7 @@
 
     private String sourceLevel = "1.5";
     private FileObject source;
-    
+
     private String performTest(String sourceCode, final int offset, final OrigUiUtilsCaller validator, boolean tooltip) throws Exception {
         return performTest(sourceCode, offset, new UiUtilsCaller() {
             public boolean open(FileObject fo, int pos) {
@@ -1158,7 +1157,7 @@
             public void beep(boolean goToSource, boolean goToJavadoc) {
                 validator.beep();
             }
-            public boolean open(final ClasspathInfo info, final ElementHandle<?> el) {
+            public boolean open(final ClasspathInfo info, final ElementHandle<?> el, String fileName) {
                 try {
                     JavaSource.create(info).runUserActionTask(new Task<CompilationController>() {
                         public void run(CompilationController parameter) throws Exception {
@@ -1177,7 +1176,7 @@
             }
         }, tooltip);
     }
-    
+
     private String performTest(String sourceCode, final int offset, final UiUtilsCaller validator, boolean tooltip) throws Exception {
         return performTest(sourceCode, offset, validator, tooltip, false);
     }
@@ -1200,7 +1199,7 @@
     private String performTest(String sourceCode, String auxiliaryCode, int offset, final UiUtilsCaller validator, boolean tooltip, boolean doCompileRecursively) throws Exception {
 
         GoToSupport.CALLER = validator;
-        
+
         if (offset == (-1)) {
             offset = sourceCode.indexOf('|');
 
@@ -1216,9 +1215,9 @@
         FileObject sourceDir = FileUtil.createFolder(wd, "src");
         FileObject buildDir = FileUtil.createFolder(wd, "build");
         FileObject cacheDir = FileUtil.createFolder(wd, "cache");
-        
+
         source = FileUtil.createData(sourceDir, "test/Test.java");
-        
+
         FileObject auxiliarySource = FileUtil.createData(sourceDir, "test/Auxiliary.java");
 
         TestUtilities.copyStringToFile(source, sourceCode);
@@ -1226,28 +1225,28 @@
 
         SourceUtilsTestUtil.setSourceLevel(source, sourceLevel);
         SourceUtilsTestUtil.setSourceLevel(auxiliarySource, sourceLevel);
-        
+
         SourceUtilsTestUtil.prepareTest(sourceDir, buildDir, cacheDir, new FileObject[0]);
 
         if (doCompileRecursively) {
             SourceUtilsTestUtil.compileRecursively(sourceDir);
         }
-        
+
         DataObject od = DataObject.find(source);
         EditorCookie ec = od.getCookie(EditorCookie.class);
         Document doc = ec.openDocument();
 
         doc.putProperty(Language.class, JavaTokenId.language());
         doc.putProperty("mimeType", "text/x-java");
-        
+
         if (tooltip)
             return GoToSupport.getGoToElementTooltip(doc, offset, false, null);
         else
             GoToSupport.goTo(doc, offset, false);
-        
+
         return null;
     }
-    
+
     protected void performTest(String source, int caretPos, String textToInsert, String goldenFileName, String sourceLevel, boolean external) throws Exception {
         clearWorkDir();
         FileUtil.refreshFor(getWorkDir());
@@ -1256,13 +1255,12 @@
         FileObject sourceDir = FileUtil.createFolder(wd, "src");
         FileObject buildDir = FileUtil.createFolder(wd, "build");
         FileObject cacheDir = FileUtil.createFolder(wd, "cache");
-        
+
         File testSource = new File(getWorkDir(), "test/Test.java");
         testSource.getParentFile().mkdirs();
         copyToWorkDir(new File(getDataDir(), "org/netbeans/modules/java/editor/javadocsnippet/data/" + source + ".java"), testSource);
         FileObject testSourceFO = FileUtil.toFileObject(testSource);
-        
-        if(external) {
+        if (external) {
             FileUtil.createFolder(sourceDir, "test");
             copyFolder((new File(getDataDir(),"org/netbeans/modules/java/editor/javadocsnippet/data/snippet-files").toPath()),
                     new File(getWorkDir(), "src/test/snippet-files").toPath());
@@ -1282,21 +1280,21 @@
         int textToInsertLength = textToInsert != null ? textToInsert.length() : 0;
         if (textToInsertLength > 0)
             doc.insertString(caretPos, textToInsert, null);
-        
+
         String docText = GoToSupport.getGoToElementTooltip(doc, caretPos, false, null);
-        assertNotNull(goldenFileName);            
+        assertNotNull(goldenFileName);
 
         File output = new File(getWorkDir(), getName() + ".out2");
-        Writer out = new FileWriter(output);            
+        Writer out = new FileWriter(output);
         out.write(docText);
         out.close();
 
-        
+
         File goldenFile = getGoldenFile(goldenFileName);
         File diffFile = new File(getWorkDir(), getName() + ".diff");
 
         assertFile(output, goldenFile, diffFile, new WhitespaceIgnoringDiff());
-        
+
         LifecycleManager.getDefault().saveAll();
     }
 
@@ -1349,17 +1347,16 @@
             return lfs.getRoot();
         }
     }
-    
+
     interface OrigUiUtilsCaller {
-        
+
         public void open(FileObject fo, int pos);
         public void beep();
         public void open(ClasspathInfo info, Element el);
-        
+
     }
-    
+
     public void testRecords1() throws Exception {
-        if (!hasRecords()) return ;
         final boolean[] wasCalled = new boolean[1];
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1383,7 +1380,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1396,7 +1393,6 @@
     }
 
     public void testRecords2() throws Exception {
-        if (!hasRecords()) return ;
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1417,7 +1413,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1431,7 +1427,6 @@
     }
 
     public void testRecords3() throws Exception {
-        if (!hasRecords()) return ;
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1452,7 +1447,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 fail("Should not be called.");
                 return true;
             }
@@ -1466,7 +1461,6 @@
     }
 
     public void testRecords4() throws Exception {
-        if (!hasRecords()) return ;
         final boolean[] wasCalled = new boolean[1];
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1489,7 +1483,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 try {
                     JavaSource.create(info).runUserActionTask(new Task<CompilationController>() {
                         public void run(CompilationController parameter) throws Exception {
@@ -1515,7 +1509,6 @@
     }
 
     public void testRecords5() throws Exception {
-        if (!hasRecords()) return ;
         final boolean[] wasCalled = new boolean[1];
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1537,7 +1530,7 @@
             @Override public void beep(boolean goToSource, boolean goToJavadoc) {
                 fail("Should not be called.");
             }
-            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el) {
+            @Override public boolean open(ClasspathInfo info, ElementHandle<?> el, String fileName) {
                 try {
                     JavaSource.create(info).runUserActionTask(new Task<CompilationController>() {
                         public void run(CompilationController parameter) throws Exception {
@@ -1572,54 +1565,41 @@
         }
     }
 
-    private static boolean hasRecords() {
-        try {
-            SourceVersion.valueOf("RELEASE_14"); //NOI18N
-            return true;
-        } catch (IllegalArgumentException ex) {
-            //OK, no RELEASE_14, skip tests
-            return false;
-        }
-    }
-
     public void testJavadocSnippetHighlightRecord() throws Exception {
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
         
-        performTest("HighlightTag", 388, null, "javadocsnippet_highlightRecord.pass", this.sourceLevel, false);
+        performTest("HighlightTag", 1196, null, "javadocsnippet_highlightRecord.pass", this.sourceLevel, false);
     }
-    
+
     public void testHighlightUsingSubstring() throws Exception {
         this.sourceLevel = getLatestSourceVersion();
-        EXTRA_OPTIONS.add("--enable-preview");      
+        EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
-        
+
         performTest("HighlightTag", 1667, null, "javadocsnippet_highlightUsingSubstring.pass", this.sourceLevel, false);
     }
-    
+
     public void testHesthighlightUsingRegex() throws Exception {
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
-        
+
         performTest("HighlightTag",2092, null, "javadocsnippet_highlightUsingRegex.pass", this.sourceLevel, false);
     }
- 
+
     public void testHighlightUsingSubstringAndRegex() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
 
         performTest("HighlightTag", 2604, null, "javadocsnippet_highlightUsingSubstringAndRegex.pass", this.sourceLevel, false);
     }
-    
+
     public void testHighlightUsingSubstringRegexAndType() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1627,9 +1607,9 @@
 
         performTest("HighlightTag", 4551, null, "javadocsnippet_highlightUsingSubstringRegexAndType.pass", this.sourceLevel, false);
     }
-        
+
     public void testHighlightUsingMultipleSnippetTagInOneJavaDocWithRegion() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1637,9 +1617,9 @@
 
         performTest("HighlightTag", 5333, null, "javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass", this.sourceLevel, false);
     }
-        
+
     public void testHighlightUsingNestedRegions() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1647,9 +1627,9 @@
 
         performTest("HighlightTag", 6148, null, "javadocsnippet_highlightUsingNestedRegions.pass", this.sourceLevel, false);
     }
-    
+
     public void testHighlightUsingRegionsEndedWithDoubleColon() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1657,9 +1637,9 @@
 
         performTest("HighlightTag", 6840, null, "javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass", this.sourceLevel, false);
     }
-    
+
     public void testNoMarkupTagPresent() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1667,9 +1647,9 @@
 
         performTest("HighlightTag", 7083, null, "javadocsnippet_noMarkupTagPresent.pass", this.sourceLevel, false);
     }
- 
+
     public void testHighlightTagSubstringApplyToNextLine() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1677,9 +1657,9 @@
 
         performTest("HighlightTag", 7333, null, "javadocsnippet_highlightTagSubstringApplyToNextLine.pass", this.sourceLevel, false);
     }
- 
+
     public void testHighlightTagRegexWithAllCharacterChange() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1687,9 +1667,9 @@
 
         performTest("HighlightTag", 7598, null, "javadocsnippet_highlightTagRegexWithAllCharacterChange.pass", this.sourceLevel, false);
     }
-       
+
     public void testHighlightTagRegexWithAllCharacterChangeUsingDot() throws Exception {
-        
+
 
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
@@ -1697,9 +1677,9 @@
 
         performTest("HighlightTag", 7860, null, "javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass", this.sourceLevel, false);
     }
-    
+
     public void testSingleLine_Replace_Regex() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1707,7 +1687,7 @@
     }
 
     public void testSingleLine_Replace_RegexDotStar() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1715,7 +1695,7 @@
     }
 
     public void testSingleLine_Replace_RegexDot() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1723,7 +1703,7 @@
     }
 
     public void testSingleLine_Replace_Substring() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1731,7 +1711,7 @@
     }
 
     public void testSingleLine_MultipleReplaceAnnotation_Regex() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1739,7 +1719,7 @@
     }
 
     public void testSingleLine_MultipleReplaceAnnotation_Substring() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1747,7 +1727,7 @@
     }
 
     public void testSingleLine_ReplaceAnnotation_Regex_DoubleQuote() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1755,7 +1735,7 @@
     }
 
     public void testRegion_ReplaceAnnotation_Regex() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1763,7 +1743,7 @@
     }
 
     public void testRegion_ReplaceAnnotation_RegexInnComment() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1771,7 +1751,7 @@
     }
 
     public void testNestedRegion_ReplaceAnnotation_Substring() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1779,7 +1759,7 @@
     }
 
     public void testNestedRegion_ReplaceAnnotation_Regex() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1787,7 +1767,7 @@
     }
 
     public void testNestedRegion_Highlight_And_replace() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1795,7 +1775,7 @@
     }
 
     public void testHighlightAndReplace_cornercase() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1803,7 +1783,7 @@
     }
 
     public void testLinkTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1812,7 +1792,7 @@
     }
 
     public void testLinkTag_With_RegexAndRegion() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1821,7 +1801,7 @@
     }
 
     public void testLinkTag_AppliesToNextLine() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1830,7 +1810,7 @@
     }
 
     public void testLink_MultipleTag_OnSameLine() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1838,7 +1818,7 @@
     }
 
     public void testLinkTag_With_RegionAttribute() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1846,7 +1826,7 @@
     }
 
     public void testLinkTag_Ref_ToThisClass_UsingHash() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1854,7 +1834,7 @@
     }
 
     public void testLinkTag_FieldRef_ToThisClass_UsingHash() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1862,7 +1842,7 @@
     }
 
     public void testLinkTag_AlongWith_HighlightTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1870,7 +1850,7 @@
     }
 
     public void testLinkTag_AlongWith_ReplaceTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1878,7 +1858,7 @@
     }
 
     public void testLinkTag_AlongWith_SubStringAndReplaceTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1886,7 +1866,7 @@
     }
 
     public void testLinkTag_EmptyReplacementValue() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1894,39 +1874,39 @@
     }
 
     public void testError_HighlightTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
         performTest("Errors", 2140, null, "javadocsnippet_TestError_HighlightTag.pass", this.sourceLevel, false);
     }
-    
+
     public void testError_ReplaceTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
         performTest("Errors", 3422, null, "javadocsnippet_TestError_ReplaceTag.pass", this.sourceLevel, false);
     }
-    
+
     public void testError_LinkTag() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
         performTest("Errors", 4877, null, "javadocsnippet_TestError_LinkTag.pass", this.sourceLevel, false);
     }
-    
+
     public void testError_UnpairedRegion() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
         performTest("Errors", 5548, null, "javadocsnippet_TestError_UnpairedRegion.pass", this.sourceLevel, false);
     }
-    
+
     public void testError_NoRegionToEnd() throws Exception {
-        
+
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1934,10 +1914,6 @@
     }
 
     public void testErrorFileEmpty() throws Exception {
-
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1946,9 +1922,6 @@
     }
 
     public void testErrorFileInvalid() throws Exception {
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1957,10 +1930,6 @@
     }
 
     public void testExternalSnippetFile() throws Exception {
-
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1969,10 +1938,6 @@
     }
 
     public void testErrorRegionInvalid() throws Exception {
-
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
@@ -1981,10 +1946,6 @@
     }
 
     public void testExternalRegionValid() throws Exception {
-
-        if (!hasRecords()) {
-            return;
-        }
         this.sourceLevel = getLatestSourceVersion();
         EXTRA_OPTIONS.add("--enable-preview");
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
diff --git a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
index a3be160..1956d4d 100644
--- a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
+++ b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
@@ -160,7 +160,7 @@
         }, true);
 
         String version = System.getProperty("java.specification.version") + "/";
-        compareReferenceFiles(this.getName()+".ref",version+this.getName()+".pass",this.getName()+".diff");
+        compareReferenceFiles(this.getName()+".ref", findGoldenFile(), this.getName()+".diff");
     }
      
     private void performMethodProposalsTest(final String name) throws Exception {
@@ -229,8 +229,7 @@
             ref(s);
         }
         
-        String version = System.getProperty("java.specification.version") + "/";
-        compareReferenceFiles(this.getName()+".ref",version+this.getName()+".pass",this.getName()+".diff");
+        compareReferenceFiles(this.getName()+".ref", findGoldenFile(), this.getName()+".diff");
     }
     
     private String dump(ExecutableElement ee) {
@@ -246,6 +245,30 @@
         return result.toString();
     }
 
+    public String findGoldenFile() {
+        String version = System.getProperty("java.specification.version");
+        for (String variant : computeVersionVariantsFor(version)) {
+            String path = variant + "/" + this.getName() + ".pass";
+            File goldenFile = new File(getDataDir()+"/goldenfiles/"+ getClass().getName().replace(".", "/") + "/" + path);
+            if (goldenFile.exists())
+                return path;
+        }
+        throw new AssertionError();
+    }
+
+    private List<String> computeVersionVariantsFor(String version) {
+        int dot = version.indexOf('.');
+        version = version.substring(dot + 1);
+        int versionNum = Integer.parseInt(version);
+        List<String> versions = new ArrayList<>();
+
+        for (int v = versionNum; v >= 8; v--) {
+            versions.add(v != 8 ? "" + v : "1." + v);
+        }
+
+        return versions;
+    }
+
     private FileObject testSourceFO;
     private JavaSource source;
     
diff --git a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQueryTest.java b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQueryTest.java
index 74e42e0..8bf90d6 100644
--- a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQueryTest.java
+++ b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQueryTest.java
@@ -557,6 +557,53 @@
         performCompletionTest(code, "ClassCircularityError", "ClassFormatError", "ClassCastException", "ClassNotFoundException");
     }
     
+    public void testSnippet1() throws Exception {
+        String code =
+                "package p;\n" +
+                "class Clazz {\n" +
+                "    /**\n" +
+                "     * {@snippet\n" +
+                "     *  System.err.println(1); //@|\n" +
+                "     */\n" +
+                "    Clazz() {\n" +
+                "    }\n" +
+                "}\n";
+
+        performCompletionTest(code, "end:", "highlight:", "link:", "replace:", "start:");
+    }
+
+    public void testSnippet2() throws Exception {
+        String code =
+                "package p;\n" +
+                "class Clazz {\n" +
+                "    /**\n" +
+                "     * {@snippet\n" +
+                "     * //@e|\n" +
+                "     */\n" +
+                "    Clazz() {\n" +
+                "    }\n" +
+                "}\n";
+
+        performCompletionTest(code, "end:");
+    }
+    
+    public void testSummaryCompletionForMethod() throws Exception {
+        String code =
+                "package p;\n" +
+                "class Clazz {\n" +
+                "    /**\n" +
+                "     * {@sum|\n" +
+                "     */\n" +
+                "    void method(int p1, int p2) {\n" +
+                "    }\n" +
+                "    Clazz() {\n" +
+                "    }\n" +
+                "}\n";
+        performCompletionTest(code, "@summary:");
+    }    
+    
+    
+
     private static String stripHTML(String from) {
         StringBuilder result = new StringBuilder();
         boolean inHTMLTag = false;
diff --git a/java/java.examples/ClientEditor/nbproject/project.properties b/java/java.examples/ClientEditor/nbproject/project.properties
index ba2dcb6..422c314 100644
--- a/java/java.examples/ClientEditor/nbproject/project.properties
+++ b/java/java.examples/ClientEditor/nbproject/project.properties
@@ -41,7 +41,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/java.examples/GUIFormExamples/nbproject/project.properties b/java/java.examples/GUIFormExamples/nbproject/project.properties
index 989f072..1691c9a 100644
--- a/java/java.examples/GUIFormExamples/nbproject/project.properties
+++ b/java/java.examples/GUIFormExamples/nbproject/project.properties
@@ -47,7 +47,7 @@
 javac.deprecation=false
 javac.modulepath=
 javac.processormodulepath=
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/java.examples/anagrams/nbproject/project.properties b/java/java.examples/anagrams/nbproject/project.properties
index 38dcae1..74296d5 100644
--- a/java/java.examples/anagrams/nbproject/project.properties
+++ b/java/java.examples/anagrams/nbproject/project.properties
@@ -38,7 +38,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/java.freeform/nbproject/org-netbeans-modules-java-freeform.sig b/java/java.freeform/nbproject/org-netbeans-modules-java-freeform.sig
index 2de065c..3235cd6 100644
--- a/java/java.freeform/nbproject/org-netbeans-modules-java-freeform.sig
+++ b/java/java.freeform/nbproject/org-netbeans-modules-java-freeform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60
+#Version 1.61
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.freeform/nbproject/project.properties b/java/java.freeform/nbproject/project.properties
index 081fa47..64894b3 100644
--- a/java/java.freeform/nbproject/project.properties
+++ b/java/java.freeform/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
diff --git a/java/java.graph/nbproject/org-netbeans-modules-java-graph.sig b/java/java.graph/nbproject/org-netbeans-modules-java-graph.sig
index 376ea3d..afe790a 100644
--- a/java/java.graph/nbproject/org-netbeans-modules-java-graph.sig
+++ b/java/java.graph/nbproject/org-netbeans-modules-java-graph.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.guards/nbproject/project.properties b/java/java.guards/nbproject/project.properties
index 69ebc3a..54803b8 100644
--- a/java/java.guards/nbproject/project.properties
+++ b/java/java.guards/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/java/java.hints.declarative.test/nbproject/org-netbeans-modules-java-hints-declarative-test.sig b/java/java.hints.declarative.test/nbproject/org-netbeans-modules-java-hints-declarative-test.sig
index 2b162e5..18efd6a 100644
--- a/java/java.hints.declarative.test/nbproject/org-netbeans-modules-java-hints-declarative-test.sig
+++ b/java/java.hints.declarative.test/nbproject/org-netbeans-modules-java-hints-declarative-test.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.33.0
+#Version 1.34.0
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/java/java.hints.declarative.test/nbproject/project.properties b/java/java.hints.declarative.test/nbproject/project.properties
index a544731..e45a4fd 100644
--- a/java/java.hints.declarative.test/nbproject/project.properties
+++ b/java/java.hints.declarative.test/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.35.0
 javadoc.arch=${basedir}/arch.xml
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.hint
similarity index 66%
copy from java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
copy to java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.hint
index 1416c3a..1315d4e 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
+++ b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.hint
@@ -16,29 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.classfile;
+if ($expr instanceof $type $name) {
+    $stmts$;
+} else $else$;
+=>
+if ($expr instanceof $type) {
+    $type $name = ($type) $expr;
+    $stmts$;
+} else $else$;
+;;
 
-import junit.framework.*;
-
-/**
- *
- * @author tball
- */
-public class ConstantPoolTest extends TestCase {
-    
-    public ConstantPoolTest(String testName) {
-        super(testName);
-    }
-    
-    public void testGet() {
-    }
-
-    public void testGetClass() {
-    }
-
-    public void testGetAllConstants() {
-    }
-
-    public void testGetAllClassNames() {
-    }
-}
+if ($expr instanceof $type) {
+    $type $name = ($type) $expr;
+    $stmts$;
+} else $else$;
+=>
+if ($expr instanceof $type $name) {
+    $stmts$;
+} else $else$;
+;;
diff --git a/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.test b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.test
new file mode 100644
index 0000000..b06d016
--- /dev/null
+++ b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/PatternMatchingInstanceof.test
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+%%TestCase test-1
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String s) {
+            return s.length();
+        }
+        return -1;
+    }
+}
+%%=>
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String) {
+            String s = (String) o;
+            return s.length();
+        }
+        return -1;
+    }
+}
+%%TestCase test-2
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String s) {
+            return s.length();
+        } else {
+            return -1;
+        }
+    }
+}
+%%=>
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String) {
+            String s = (String) o;
+            return s.length();
+        } else {
+            return -1;
+        }
+    }
+}
+%%TestCase test-3
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String) {
+            String s = (String) o;
+            return s.length();
+        }
+        return -1;
+    }
+}
+%%=>
+package test;
+public class Test {
+    private int t(Object o) {
+        if (o instanceof String s) {
+            return s.length();
+        }
+        return -1;
+    }
+}
diff --git a/java/java.hints.legacy.spi/nbproject/org-netbeans-modules-java-hints-legacy-spi.sig b/java/java.hints.legacy.spi/nbproject/org-netbeans-modules-java-hints-legacy-spi.sig
index 00aa5e0..f283dcf 100644
--- a/java/java.hints.legacy.spi/nbproject/org-netbeans-modules-java-hints-legacy-spi.sig
+++ b/java/java.hints.legacy.spi/nbproject/org-netbeans-modules-java-hints-legacy-spi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.33.0
+#Version 1.34.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/java.hints.legacy.spi/nbproject/project.properties b/java/java.hints.legacy.spi/nbproject/project.properties
index eaa560d..edef4b0 100644
--- a/java/java.hints.legacy.spi/nbproject/project.properties
+++ b/java/java.hints.legacy.spi/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.35.0
 javadoc.arch=${basedir}/arch.xml
diff --git a/java/java.hints.legacy.spi/src/org/netbeans/modules/java/hints/legacy/spi/RulesManager.java b/java/java.hints.legacy.spi/src/org/netbeans/modules/java/hints/legacy/spi/RulesManager.java
index 40be6ad..f8e200b 100644
--- a/java/java.hints.legacy.spi/src/org/netbeans/modules/java/hints/legacy/spi/RulesManager.java
+++ b/java/java.hints.legacy.spi/src/org/netbeans/modules/java/hints/legacy/spi/RulesManager.java
@@ -234,9 +234,7 @@
                 Object nonGuiObject = fo.getAttribute(NON_GUI);
                 boolean toGui = true;
                 
-                if ( nonGuiObject != null &&
-                     nonGuiObject instanceof Boolean &&
-                     ((Boolean)nonGuiObject).booleanValue() ) {
+                if ( nonGuiObject instanceof Boolean && ((Boolean)nonGuiObject).booleanValue() ) {
                     toGui = false;
                 }
 
diff --git a/java/java.hints.test/nbproject/org-netbeans-modules-java-hints-test.sig b/java/java.hints.test/nbproject/org-netbeans-modules-java-hints-test.sig
index 8b91139..9fefe22 100644
--- a/java/java.hints.test/nbproject/org-netbeans-modules-java-hints-test.sig
+++ b/java/java.hints.test/nbproject/org-netbeans-modules-java-hints-test.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.36.0
+#Version 1.37.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.hints.ui/nbproject/project.properties b/java/java.hints.ui/nbproject/project.properties
index 4c3e714..fddd336 100644
--- a/java/java.hints.ui/nbproject/project.properties
+++ b/java/java.hints.ui/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.37.0
 requires.nb.javac=true
diff --git a/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.form b/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.form
index 4b35cc4..c261af9 100644
--- a/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.form
+++ b/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.form
@@ -54,7 +54,7 @@
   <SubComponents>
     <Container class="javax.swing.JSplitPane" name="jSplitPane1">
       <Properties>
-        <Property name="dividerLocation" type="int" value="320"/>
+        <Property name="dividerLocation" type="int" value="260"/>
       </Properties>
       <Constraints>
         <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
@@ -274,7 +274,7 @@
                       <Group type="103" groupAlignment="0" attributes="0">
                           <Group type="102" alignment="1" attributes="0">
                               <Component id="openInEditor" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace pref="212" max="32767" attributes="0"/>
+                              <EmptySpace pref="272" max="32767" attributes="0"/>
                               <Component id="saveButton" min="-2" max="-2" attributes="0"/>
                               <EmptySpace type="unrelated" max="-2" attributes="0"/>
                               <Component id="cancelEdit" min="-2" max="-2" attributes="0"/>
diff --git a/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.java b/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.java
index 1de47e0..46661e4 100644
--- a/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.java
+++ b/java/java.hints.ui/src/org/netbeans/modules/java/hints/spiimpl/options/HintsPanel.java
@@ -330,7 +330,6 @@
         okButton.setVisible(showOkCancel);
         cancelButton.setVisible(showOkCancel);
         validate();
-        jSplitPane1.setDividerLocation(getDividerLocation());
     }
     
     private void updateEnabledState() {
@@ -346,11 +345,6 @@
             }
         }
     }
-
-    private int getDividerLocation() {
-        final int location = (int) ((jSplitPane1.getWidth() - jSplitPane1.getDividerSize()) * 0.4f);
-        return Math.min(400, location);
-    }
     
     /** This method is called from within the constructor to
      * initialize the form.
@@ -399,7 +393,7 @@
         setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
         setLayout(new java.awt.GridBagLayout());
 
-        jSplitPane1.setDividerLocation(320);
+        jSplitPane1.setDividerLocation(260);
 
         treePanel.setOpaque(false);
         treePanel.setLayout(new java.awt.BorderLayout());
@@ -509,7 +503,7 @@
             editingButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, editingButtonsLayout.createSequentialGroup()
                 .addComponent(openInEditor)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 212, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 272, Short.MAX_VALUE)
                 .addComponent(saveButton)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                 .addComponent(cancelEdit))
diff --git a/java/java.hints/nbproject/org-netbeans-modules-java-hints.sig b/java/java.hints/nbproject/org-netbeans-modules-java-hints.sig
index a702a64..161b7e8 100644
--- a/java/java.hints/nbproject/org-netbeans-modules-java-hints.sig
+++ b/java/java.hints/nbproject/org-netbeans-modules-java-hints.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.100.0
+#Version 1.101.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
index 47ab70f..476e62c 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
@@ -21,12 +21,14 @@
 import com.sun.source.tree.BinaryTree;
 import com.sun.source.tree.BreakTree;
 import com.sun.source.tree.CaseTree;
+import com.sun.source.tree.CaseTree.CaseKind;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.ConditionalExpressionTree;
 import com.sun.source.tree.ConstantCaseLabelTree;
 import com.sun.source.tree.ContinueTree;
 import com.sun.source.tree.DoWhileLoopTree;
 import com.sun.source.tree.EnhancedForLoopTree;
+import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.ForLoopTree;
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.IfTree;
@@ -38,6 +40,7 @@
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.StatementTree;
+import com.sun.source.tree.SwitchExpressionTree;
 import com.sun.source.tree.SwitchTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.WhileLoopTree;
@@ -496,14 +499,23 @@
         
         @Override
         public State visitSwitch(SwitchTree node, Void p) {
+            return handleSwitch(node, node.getExpression(), node.getCases(), p);
+        }
+
+        @Override
+        public State visitSwitchExpression(SwitchExpressionTree node, Void p) {
+            return handleSwitch(node, node.getExpression(), node.getCases(), p);
+        }
+
+        private State handleSwitch(Tree node, ExpressionTree expression, List<? extends CaseTree> cases, Void p) {
             registerBreakTarget(node);
             State s;
-            if (returnIfRecurse(s= scan(node.getExpression(), p))) {
+            if (returnIfRecurse(s= scan(expression, p))) {
                 return s;
             }
             // look for the default case, but cannot return immediately as some return / break inside could
             // slip unnoticed.
-            boolean defaultFound = false;
+            boolean exhaustive = false;
             
             Set<Tree> saveBreaks = breakContinueJumps;
             Set<Tree> collectBreaks = Collections.emptySet();
@@ -512,9 +524,9 @@
             
             boolean saveDefinite = definitePath;
             definitePath = false;
-            for (CaseTree ct : node.getCases()) {
+            for (CaseTree ct : cases) {
                 if (ct.getExpression() == null) {
-                    defaultFound = true;
+                    exhaustive = true;
                 }
                 knownResult = null;
                 breakContinueJumps = new HashSet<Tree>();
@@ -530,7 +542,7 @@
                     // cycles, those breaks must have been found before the recursion instruction. Any jumps to
                     // nested statements should have been cleared by scan().
                     boolean self = breakContinueJumps.remove(node);
-                    if (self || !breakContinueJumps.isEmpty()) {
+                    if (self || !breakContinueJumps.isEmpty() || (ct.getCaseKind() == CaseKind.RULE && s != State.MUST)) {
                         // at least one way out
                         saveBreaks.addAll(breakContinueJumps);
                         saveBreaks.addAll(collectBreaks);
@@ -543,7 +555,7 @@
                 }
             }
             definitePath = saveDefinite;
-            if (defaultFound) {
+            if (exhaustive) {
                 return lastState;
             } else {
                 recursionPoints.clear();
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java b/java/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
index b1c9a7d..61604db 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
@@ -145,10 +145,13 @@
                 case CASE: {
                     if (tp.getParentPath().getLeaf().getKind() == Kind.SWITCH) {
                         List<? extends CaseTree> cases = ((SwitchTree) tp.getParentPath().getLeaf()).getCases();
-                        List<StatementTree> locStatements = new ArrayList<StatementTree>();
+                        List<StatementTree> locStatements = new ArrayList<>();
 
                         for (int i = cases.indexOf(tp.getLeaf()); i < cases.size(); i++) {
-                            locStatements.addAll(cases.get(i).getStatements());
+                            List<? extends StatementTree> list = cases.get(i).getStatements();
+                            if (list != null) {
+                                locStatements.addAll(list);
+                            }
                         }
 
                         statements = locStatements;
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/perf/Tiny.java b/java/java.hints/src/org/netbeans/modules/java/hints/perf/Tiny.java
index 0e158c4..7373f01 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/perf/Tiny.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/perf/Tiny.java
@@ -534,7 +534,7 @@
             List<? extends TypeMirror> type = CreateElementUtilities.resolveType(
                     EnumSet.noneOf(ElementKind.class), ctx.getInfo(), parent, leaf, pos, new TypeMirror[1], new int[1]);
 
-            if (!type.isEmpty()) {
+            if ((type != null) && !type.isEmpty()) {
                 return type.get(0);
             }
         }
diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursionTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursionTest.java
index cf0af40..a936a02 100644
--- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursionTest.java
+++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursionTest.java
@@ -506,4 +506,196 @@
                 .run(InfiniteRecursion.class)
                 .assertWarnings();
     }
+
+    /**
+     * Checks that switch expressions with value, where one arm returns,
+     * don't produce a warning.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExpressionValue1() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(int var) {\n"
+                + "        return switch (var) {\n"
+                + "            case 0 -> 0;\n"
+                + "            default -> recurse(var + 2); \n"
+                + "        };\n"
+                + "    } \n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("17")
+                .run(InfiniteRecursion.class)
+                .assertWarnings();
+    }
+
+    /**
+     * Checks that switch expressions with values produce a warning when
+     * all arms recurse.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExpressionValue2() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(int var) {\n"
+                + "        return switch (var) {\n"
+                + "            case 0 -> recurse(var + 1);\n"
+                + "            default -> recurse(var + 2); \n"
+                + "        };\n"
+                + "    } \n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("17")
+                .run(InfiniteRecursion.class)
+                .assertWarnings("5:22-5:38:verifier:The method recurse will recurse infinitely");
+    }
+
+    /**
+     * Checks that switch expressions with yields don't produce a warning when
+     * some arms may not recurse.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExpressionYield1() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(int var) {\n"
+                + "        return switch (var) {\n"
+                + "            case 0 -> { yield recurse(var + 1); }\n"
+                + "            default -> { if (var == 1) yield recurse(var + 2); else yield 0; }\n"
+                + "        };\n"
+                + "    } \n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("17")
+                .run(InfiniteRecursion.class)
+                .assertWarnings();
+    }
+
+    /**
+     * Checks that switch expressions with values produce a warning when
+     * all arms recurse.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExpressionYield2() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(int var) {\n"
+                + "        return switch (var) {\n"
+                + "            case 0 -> { yield recurse(var + 1); }\n"
+                + "            default -> { yield recurse(var + 2); }\n"
+                + "        };\n"
+                + "    } \n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("17")
+                .run(InfiniteRecursion.class)
+                .assertWarnings("5:30-5:46:verifier:The method recurse will recurse infinitely");
+    }
+
+    /**
+     * Checks that switch with rule cases does not fall through.
+     *
+     * @throws Exception
+     */
+    public void testSwitchCaseDoesNotFallThrough() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(int var) {\n"
+                + "        int i;\n"
+                + "        switch (var) {\n"
+                + "            case 0 -> i = 0;\n"
+                + "            default -> i = recurse(var + 2); \n"
+                + "        }\n"
+                + "        return i;\n"
+                + "    } \n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("17")
+                .run(InfiniteRecursion.class)
+                .assertWarnings();
+    }
+
+    /**
+     * Checks that exhaustive switches don't have an empty default,
+     * and that default shouldn't ordinarily be taken.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExhaustive1() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(I var) {\n"
+                + "        int i;\n"
+                + "        switch (var) {\n"
+                + "            case C c -> i = recurse(c); \n"
+                + "        }\n"
+                + "        return i;\n"
+                + "    } \n"
+                + "    sealed interface I {}\n"
+                + "    final class C implements I {}\n"
+                + "}\n"
+                + ""
+                )
+                .sourceLevel("19")
+                .options("--enable-preview")
+                .run(InfiniteRecursion.class)
+                .assertWarnings("6:28-6:38:verifier:The method recurse will recurse infinitely");
+    }
+
+    /**
+     * Checks that switches that should be exhaustive, but are not, don't
+     * produce a recursive warning.
+     *
+     * @throws Exception
+     */
+    public void testSwitchExhaustive2() throws Exception {
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "public final class Test {\n"
+                + "    final int v = 1;\n"
+                + "    public final int recurse(Integer var) {\n"
+                + "        int i;\n"
+                + "        switch (var) {\n"
+                + "            case null -> i = recurse(0); \n"
+                + "        }\n"
+                + "        return i;\n"
+                + "    } \n"
+                + "    sealed interface I {}\n"
+                + "    final class C implements I {}\n"
+                + "}\n"
+                + "", false
+                )
+                .sourceLevel("19")
+                .options("--enable-preview")
+                .run(InfiniteRecursion.class)
+                .assertWarnings(); //erroneous code, OK to not produce warnings
+    }
+
 }
diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertToARMTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertToARMTest.java
index c83b01a..646b284 100644
--- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertToARMTest.java
+++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertToARMTest.java
@@ -537,7 +537,7 @@
                 .run(ConvertToARM.class)
                 .findWarning("0:173-0:175:verifier:TXT_ConvertToARM")
                 .applyFix("FIX_MergeTryResources")
-                .assertOutput("package test;import java.io.InputStream;import java.io.FileInputStream;import java.io.File;public class Test { public void test() throws Exception { try (InputStream in = new FileInputStream(new File(\"a\"));InputStream in2 = new FileInputStream(new File(\"a\"))){ in.read(); } }}");
+                .assertOutput("package test;import java.io.InputStream;import java.io.FileInputStream;import java.io.File;public class Test { public void test() throws Exception { try (InputStream in = new FileInputStream(new File(\"a\")); InputStream in2 = new FileInputStream(new File(\"a\"))){ in.read(); } }}");
     }
 
     public void testEFNestedInStms() throws Exception {
@@ -559,7 +559,7 @@
                 .run(ConvertToARM.class)
                 .findWarning("0:247-0:249:verifier:TXT_ConvertToARM")
                 .applyFix("FIX_MergeTryResources")
-                .assertOutput("package test;import java.io.InputStream;import java.io.FileInputStream;import java.io.File;public class Test { public void test(InputStream in) throws Exception { try (in;InputStream in2 = new FileInputStream(new File(\"a\"))){ in.read(); } }}");
+                .assertOutput("package test;import java.io.InputStream;import java.io.FileInputStream;import java.io.File;public class Test { public void test(InputStream in) throws Exception { try (in; InputStream in2 = new FileInputStream(new File(\"a\"))){ in.read(); } }}");
     }
 
     public void testEnclosedFinally() throws Exception {
diff --git a/java/java.j2sedeploy/nbproject/org-netbeans-modules-java-j2sedeploy.sig b/java/java.j2sedeploy/nbproject/org-netbeans-modules-java-j2sedeploy.sig
index 8f22508..de72bec 100644
--- a/java/java.j2sedeploy/nbproject/org-netbeans-modules-java-j2sedeploy.sig
+++ b/java/java.j2sedeploy/nbproject/org-netbeans-modules-java-j2sedeploy.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.29
+#Version 1.30
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.j2sedeploy/nbproject/project.properties b/java/java.j2sedeploy/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/java/java.j2sedeploy/nbproject/project.properties
+++ b/java/java.j2sedeploy/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/java.j2sedeploy/src/org/netbeans/modules/java/j2sedeploy/ui/JSEDeploymentPanel.java b/java/java.j2sedeploy/src/org/netbeans/modules/java/j2sedeploy/ui/JSEDeploymentPanel.java
index b6f315c..d8a4d82 100644
--- a/java/java.j2sedeploy/src/org/netbeans/modules/java/j2sedeploy/ui/JSEDeploymentPanel.java
+++ b/java/java.j2sedeploy/src/org/netbeans/modules/java/j2sedeploy/ui/JSEDeploymentPanel.java
@@ -189,15 +189,15 @@
                 
                 // extract listeners if exist
                 Object okObject = comp.getClientProperty(J2SEDeployConstants.PASS_OK_LISTENER);
-                if(okObject != null && okObject instanceof ActionListener) {
+                if(okObject instanceof ActionListener) {
                     okListener.add((ActionListener)okObject);
                 }
                 Object storeObject = comp.getClientProperty(J2SEDeployConstants.PASS_STORE_LISTENER);
-                if(storeObject != null && storeObject instanceof ActionListener) {
+                if(storeObject instanceof ActionListener) {
                     storeListener.add((ActionListener)storeObject);
                 }
                 Object closeObject = comp.getClientProperty(J2SEDeployConstants.PASS_CLOSE_LISTENER);
-                if(closeObject != null && closeObject instanceof ActionListener) {
+                if(closeObject instanceof ActionListener) {
                     closeListener.add((ActionListener)closeObject);
                 }
                 
diff --git a/java/java.j2seembedded/nbproject/project.properties b/java/java.j2seembedded/nbproject/project.properties
index b9997a5..52833f8 100644
--- a/java/java.j2seembedded/nbproject/project.properties
+++ b/java/java.j2seembedded/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 extra.module.files=modules/ext/org-netbeans-modules-java-j2seembedded-probe.jar
 jnlp.indirect.jars=modules/ext/org-netbeans-modules-java-j2seembedded-probe.jar
diff --git a/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/customizer/CustomizerProviderImpl.java b/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/customizer/CustomizerProviderImpl.java
index bbe7783..8aaaa40 100644
--- a/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/customizer/CustomizerProviderImpl.java
+++ b/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/customizer/CustomizerProviderImpl.java
@@ -63,7 +63,7 @@
     private final ReferenceHelper refHelper;
     private final GeneratedFilesHelper genFileHelper;
 
-    private RequestProcessor rp = new RequestProcessor("customizer init",1);;
+    private RequestProcessor rp = new RequestProcessor("customizer init",1);
     
     private static final String CUSTOMIZER_FOLDER_PATH = "Projects/org-netbeans-modules-java-j2semodule/Customizer"; //NO18N
     
diff --git a/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/wizards/NewModuleWizardIterator.java b/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/wizards/NewModuleWizardIterator.java
index a7055ad..04d6039 100644
--- a/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/wizards/NewModuleWizardIterator.java
+++ b/java/java.j2semodule/src/org/netbeans/modules/java/j2semodule/ui/wizards/NewModuleWizardIterator.java
@@ -136,7 +136,7 @@
         panel = new ModuleTargetChooserPanel(project, groups);
         // Make sure list of steps is accurate.
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        String[] beforeSteps = prop != null && prop instanceof String[] ? (String[])prop : new String[0];
+        String[] beforeSteps = prop instanceof String[] ? (String[])prop : new String[0];
         int diff = 0;
         if (beforeSteps.length > 0) {
             diff = ("...".equals (beforeSteps[beforeSteps.length - 1])) ? 1 : 0; // NOI18N
diff --git a/java/java.j2seplatform/nbproject/org-netbeans-modules-java-j2seplatform.sig b/java/java.j2seplatform/nbproject/org-netbeans-modules-java-j2seplatform.sig
index 4cbb04e..b47d8e4 100644
--- a/java/java.j2seplatform/nbproject/org-netbeans-modules-java-j2seplatform.sig
+++ b/java/java.j2seplatform/nbproject/org-netbeans-modules-java-j2seplatform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60
+#Version 1.61
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java b/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
index f04f816..b41084c 100644
--- a/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
+++ b/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
@@ -67,8 +67,9 @@
         OFFICIAL_JAVADOC.put("16", "https://docs.oracle.com/en/java/javase/16/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("17", "https://docs.oracle.com/en/java/javase/17/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("18", "https://docs.oracle.com/en/java/javase/18/docs/api/"); // NOI18N
-        OFFICIAL_JAVADOC.put("19", "https://download.java.net/java/early_access/jdk19/docs/api/"); // NOI18N Early access
+        OFFICIAL_JAVADOC.put("19", "https://docs.oracle.com/en/java/javase/19/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("20", "https://download.java.net/java/early_access/jdk20/docs/api/"); // NOI18N Early access
+        OFFICIAL_JAVADOC.put("21", "https://download.java.net/java/early_access/jdk21/docs/api/"); // NOI18N Early access
     }
 
     @Override
diff --git a/java/java.j2seprofiles/nbproject/project.properties b/java/java.j2seprofiles/nbproject/project.properties
index bd782ba..9f9ea40 100644
--- a/java/java.j2seprofiles/nbproject/project.properties
+++ b/java/java.j2seprofiles/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 requires.nb.javac=true
diff --git a/java/java.j2seproject/copylibstask/nbproject/project.properties b/java/java.j2seproject/copylibstask/nbproject/project.properties
index 30a6f1b..6431fad 100644
--- a/java/java.j2seproject/copylibstask/nbproject/project.properties
+++ b/java/java.j2seproject/copylibstask/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.modulepath=
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/java.j2seproject/nbproject/org-netbeans-modules-java-j2seproject.sig b/java/java.j2seproject/nbproject/org-netbeans-modules-java-j2seproject.sig
index b5c1665..5f794c5 100644
--- a/java/java.j2seproject/nbproject/org-netbeans-modules-java-j2seproject.sig
+++ b/java/java.j2seproject/nbproject/org-netbeans-modules-java-j2seproject.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.104.0
+#Version 1.105.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/CustomizerProviderImpl.java b/java/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/CustomizerProviderImpl.java
index ab4e65e..d4d9107 100644
--- a/java/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/CustomizerProviderImpl.java
+++ b/java/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/CustomizerProviderImpl.java
@@ -64,7 +64,7 @@
     private final ReferenceHelper refHelper;
     private final GeneratedFilesHelper genFileHelper;
 
-    private RequestProcessor rp = new RequestProcessor("customizer init",1);;
+    private RequestProcessor rp = new RequestProcessor("customizer init",1);
     
     private static final String CUSTOMIZER_FOLDER_PATH = "Projects/org-netbeans-modules-java-j2seproject/Customizer"; //NO18N
     
diff --git a/java/java.kit/nbproject/project.properties b/java/java.kit/nbproject/project.properties
index 00dd64e..571c049 100644
--- a/java/java.kit/nbproject/project.properties
+++ b/java/java.kit/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 test.config.uicommit.includes=\
     org/netbeans/test/ide/IDECommitValidationTest.class
 test.config.stableBTD.includes=\
diff --git a/java/java.lexer/nbproject/org-netbeans-modules-java-lexer.sig b/java/java.lexer/nbproject/org-netbeans-modules-java-lexer.sig
index 5b6a05f..590ccda 100644
--- a/java/java.lexer/nbproject/org-netbeans-modules-java-lexer.sig
+++ b/java/java.lexer/nbproject/org-netbeans-modules-java-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.52
+#Version 1.53
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/java.lexer/nbproject/project.properties b/java/java.lexer/nbproject/project.properties
index 674c6bf..4ea9ce2 100644
--- a/java/java.lexer/nbproject/project.properties
+++ b/java/java.lexer/nbproject/project.properties
@@ -21,6 +21,11 @@
 javadoc.title=Java Lexer API
 javadoc.apichanges=${basedir}/apichanges.xml
 
+# failing or missing test files
+test.config.default.excludes=\
+    **/JavaLexerPerformanceTest.class,\
+    **/JavaFlyTokensTest.class
+
 test.config.stableBTD.includes=**/*Test.class
 test.config.stableBTD.excludes=\
     **/JavaLexerBatchTest.class,\
diff --git a/java/java.lexer/test/unit/data/testfiles/testInput.java.txt.tokens.txt b/java/java.lexer/test/unit/data/testfiles/testInput.java.txt.tokens.txt
index 4aaf6c2..2908ee2 100644
--- a/java/java.lexer/test/unit/data/testfiles/testInput.java.txt.tokens.txt
+++ b/java/java.lexer/test/unit/data/testfiles/testInput.java.txt.tokens.txt
@@ -41,7 +41,7 @@
 ----- EOF -----
 
 .t.e.s.t. String Literals
-STRING_LITERAL  """"
+STRING_LITERAL  """", la=1
 WHITESPACE      " ", la=1
 STRING_LITERAL  ""a""
 WHITESPACE      "\n", la=1
diff --git a/java/spi.java.hints/external/binaries-list b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-cloud-oracle.jar/org/netbeans/modules/cloud/oracle/Bundle.properties
similarity index 89%
rename from java/spi.java.hints/external/binaries-list
rename to java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-cloud-oracle.jar/org/netbeans/modules/cloud/oracle/Bundle.properties
index 3d8ec73..46995e9 100644
--- a/java/spi.java.hints/external/binaries-list
+++ b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-cloud-oracle.jar/org/netbeans/modules/cloud/oracle/Bundle.properties
@@ -14,4 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-1A745B7EF012EA7B96D7D6F1FAE5AFAC11FCEE3D net.bytebuddy:byte-buddy:1.10.6
+
+# Autoload default OCI config profiles.
+OCIManager_Autoload_DefaultConfig=true
diff --git a/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-gradle.jar/org/netbeans/modules/gradle/api/execute/Bundle.properties b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-gradle.jar/org/netbeans/modules/gradle/api/execute/Bundle.properties
index c199390..fb601ea 100644
--- a/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-gradle.jar/org/netbeans/modules/gradle/api/execute/Bundle.properties
+++ b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-gradle.jar/org/netbeans/modules/gradle/api/execute/Bundle.properties
@@ -18,3 +18,5 @@
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.TrustOnce=1
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.PermanentTrust=-2
 org.netbeans.modules.gradle.api.execute.TrustProjectOption.RunAlways=3
+
+org.netbeans.modules.gradle.api.execute.NetworkProxySettings.allowOverride=false
\ No newline at end of file
diff --git a/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-maven.jar/org/netbeans/modules/maven/api/execute/Bundle.properties b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-maven.jar/org/netbeans/modules/maven/api/execute/Bundle.properties
index aec63c3..32382db 100644
--- a/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-maven.jar/org/netbeans/modules/maven/api/execute/Bundle.properties
+++ b/java/java.lsp.server/nbcode/branding/modules/org-netbeans-modules-maven.jar/org/netbeans/modules/maven/api/execute/Bundle.properties
@@ -16,3 +16,4 @@
 # under the License.
 
 DEFAULT_COMPILE_ON_SAVE=none
+org.netbeans.modules.maven.api.execute.NetworkProxySettings.allowOverride=false
diff --git a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectAuditCommand.java b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectAuditCommand.java
index 7398d07..1a3f407 100644
--- a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectAuditCommand.java
+++ b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectAuditCommand.java
@@ -21,33 +21,34 @@
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.eclipse.lsp4j.CodeAction;
 import org.eclipse.lsp4j.CodeActionParams;
 import org.netbeans.api.project.FileOwnerQuery;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectInformation;
 import org.netbeans.api.project.ProjectUtils;
-import org.netbeans.modules.cloud.oracle.adm.AuditException;
+import org.netbeans.modules.cloud.oracle.OCIManager;
+import org.netbeans.modules.cloud.oracle.OCIProfile;
+import org.netbeans.modules.cloud.oracle.adm.AuditOptions;
 import org.netbeans.modules.cloud.oracle.adm.ProjectVulnerability;
 import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
 import org.netbeans.modules.java.lsp.server.protocol.NbCodeLanguageClient;
+import org.netbeans.modules.java.lsp.server.protocol.UIContext;
 import org.netbeans.modules.parsing.api.ResultIterator;
 import org.openide.DialogDisplayer;
 import org.openide.NotifyDescriptor;
-import org.openide.awt.StatusDisplayer;
 import org.openide.filesystems.FileObject;
-import org.openide.filesystems.FileUtil;
-import org.openide.filesystems.URLMapper;
+import org.openide.util.Lookup;
 import org.openide.util.NbBundle;
 import org.openide.util.lookup.ServiceProvider;
 
@@ -57,6 +58,8 @@
  */
 @ServiceProvider(service = CodeActionsProvider.class)
 public class ProjectAuditCommand extends CodeActionsProvider {
+    private static final Logger LOG = Logger.getLogger(ProjectAuditCommand.class.getName());
+    
     /**
      * Force executes the project audit using the supplied compartment and knowledgebase IDs.
      */
@@ -104,24 +107,48 @@
         if (n == null) {
             n = p.getProjectDirectory().getName();
         }
+        final String fn = n;
         if (v == null) {
             throw new IllegalArgumentException("Project " + n + " does not support vulnerability audits");
         }
-        if (arguments.size() < 3) {
-            throw new IllegalArgumentException("Expected 3 parameters: resource, compartment, knowledgebase");
+        if (arguments.size() < 3 || !(arguments.get(1) instanceof JsonPrimitive)) {
+            throw new IllegalArgumentException("Expected 3 parameters: resource, knowledgebase, options");
         }
-        String compartment = ((JsonPrimitive) arguments.get(2)).getAsString();
+        
         String knowledgeBase = ((JsonPrimitive) arguments.get(1)).getAsString();
-        boolean forceAudit;
-        if (arguments.size() > 4) {
-            forceAudit = ((JsonPrimitive)arguments.get(4)).getAsBoolean();
-        } else {
-            forceAudit = false;
+        Object o = arguments.get(2);
+        if (!(o instanceof JsonObject)) {
+            throw new IllegalArgumentException("Expected structure, got  " + o);
         }
-        final String fn = n;
-        return v.findKnowledgeBase(compartment, knowledgeBase).
+        JsonObject options = (JsonObject)o;
+        
+        // PENDING: this is for debugging, temporary. Can be removed in the future when the messaging is stabilized
+        UIContext ctx = Lookup.getDefault().lookup(UIContext.class);
+        LOG.log(Level.FINE, "Running audit command with context: {0}", ctx);
+        
+        boolean forceAudit = options.has("force") && options.get("force").getAsBoolean();
+        String preferredName = options.has("auditName") ? options.get("auditName").getAsString() : null;
+        
+        final OCIProfile auditWithProfile;
+        
+        if (options.has("profile")) {
+            String id = options.get("profile").getAsString();
+            Path path;
+            
+            if (options.has("configPath")) {
+                path = Paths.get(options.get("configPath").getAsString());
+            } else {
+                path = null;
+            }
+            
+            auditWithProfile = OCIManager.forConfig(path, id);
+        } else {
+            auditWithProfile = OCIManager.getDefault().getActiveProfile();
+        }
+        
+        return OCIManager.usingSession(auditWithProfile, () -> v.findKnowledgeBase(knowledgeBase).
                 exceptionally(th -> {
-                    DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(Bundle.ERR_KnowledgeBaseSearchFailed(fn, th.getMessage()),
+                    DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message(Bundle.ERR_KnowledgeBaseSearchFailed(fn, th.getMessage()),
                             NotifyDescriptor.ERROR_MESSAGE));
                     return null;
                 }).thenCompose((kb) -> {
@@ -132,17 +159,17 @@
             
             switch (command) {
                 case COMMAND_EXECUTE_AUDIT:
-                    exec = v.runProjectAudit(kb, true, true);
+                    exec = v.runProjectAudit(kb, AuditOptions.makeNewAudit().useSession(auditWithProfile).setAuditName(preferredName));
                     break;
                 case COMMAND_LOAD_AUDIT: {
-                    exec = v.runProjectAudit(kb, false, forceAudit);
+                    exec = v.runProjectAudit(kb, new AuditOptions().useSession(auditWithProfile).setRunIfNotExists(forceAudit).setAuditName(preferredName));
                 }
                 default:
                     return CompletableFuture.completedFuture(null);
                     
             }
             return (CompletableFuture<Object>)(CompletableFuture)exec;
-        });
+        }));
     } 
 
     @Override
diff --git a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectMetadataCommand.java b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectMetadataCommand.java
index 990bd74..07cee39 100644
--- a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectMetadataCommand.java
+++ b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/commands/ProjectMetadataCommand.java
@@ -98,7 +98,7 @@
             .registerTypeAdapterFactory(new TypeAdapterFactory() {
                 @Override
                 public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> tt) {
-                    if (tt.getRawType() != FileObject.class) {
+                    if (!FileObject.class.isAssignableFrom(tt.getRawType())) {
                         return null;
                     }
                     return new TypeAdapter<T>() {
diff --git a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
index 75a90d7..9bd3337 100644
--- a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
+++ b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
@@ -42,6 +42,7 @@
             <file name="cloud-resources-commands.instance">
                 <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.lsp.server.explorer.NodeActionsProvider.forFile"/>
                 <attr name="action:org.netbeans.modules.cloud.oracle.actions.DownloadWalletAction" stringvalue="Tools"/>
+                <attr name="action:org.netbeans.modules.cloud.oracle.actions.AddADBAction" stringvalue="Tools"/>
                 <attr name="action:org.netbeans.modules.cloud.oracle.actions.CreateAutonomousDBAction" stringvalue="Tools"/>
                 <attr name="action:org.netbeans.modules.cloud.oracle.actions.OpenServiceConsoleAction" stringvalue="Tools"/>
                 <attr name="action:org.netbeans.modules.cloud.oracle.actions.CloudRefresh" stringvalue="Tools"/>
diff --git a/java/java.lsp.server/nbcode/nbproject/platform.properties b/java/java.lsp.server/nbcode/nbproject/platform.properties
index f536168..dabb95c 100644
--- a/java/java.lsp.server/nbcode/nbproject/platform.properties
+++ b/java/java.lsp.server/nbcode/nbproject/platform.properties
@@ -67,7 +67,6 @@
     org.netbeans.libs.cglib,\
     org.netbeans.libs.commons_net,\
     org.netbeans.libs.felix,\
-    org.netbeans.libs.graaljs,\
     org.netbeans.libs.ini4j,\
     org.netbeans.libs.jshell.compile,\
     org.netbeans.libs.jsr223,\
diff --git a/java/java.lsp.server/nbproject/org-netbeans-modules-java-lsp-server.sig b/java/java.lsp.server/nbproject/org-netbeans-modules-java-lsp-server.sig
index c717fff..e3d396e 100644
--- a/java/java.lsp.server/nbproject/org-netbeans-modules-java-lsp-server.sig
+++ b/java/java.lsp.server/nbproject/org-netbeans-modules-java-lsp-server.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.0.0
+#Version 2.1.0
 
 CLSS public java.lang.Object
 cons public init()
@@ -60,7 +60,6 @@
 meth public void setEnabled(org.netbeans.modules.java.lsp.server.ui.AbstractLspHtmlViewer$View,java.lang.Object,boolean)
 meth public void setText(org.netbeans.modules.java.lsp.server.ui.AbstractLspHtmlViewer$View,java.lang.Object,java.lang.String)
 supr java.lang.Object
-hfds initial
 
 CLSS protected final org.netbeans.modules.java.lsp.server.ui.AbstractLspHtmlViewer$View
  outer org.netbeans.modules.java.lsp.server.ui.AbstractLspHtmlViewer
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ConnectionSpec.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ConnectionSpec.java
index 98dd3cc..9ab3895 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ConnectionSpec.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ConnectionSpec.java
@@ -25,6 +25,7 @@
 import java.net.Inet4Address;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -46,7 +47,10 @@
 final class ConnectionSpec implements Closeable {
     private final Boolean listen;
     private final int port;
+    // @GuardedBy (this)
     private final List<Closeable> close = new ArrayList<>();
+    // @GuardedBy (this)
+    private final List<Closeable> closed = new ArrayList<>();
 
     private ConnectionSpec(Boolean listen, int port) {
         this.listen = listen;
@@ -110,11 +114,15 @@
                 @Override
                 public void run() {
                     while (true) {
+                        Socket socket = null;
                         try {
-                            Socket socket = server.accept();
+                            socket = server.accept();
                             close.add(socket);
                             connectToSocket(socket, prefix, session, serverSetter, launcher);
                         } catch (IOException ex) {
+                            if (isClosed(server)) {
+                                break;
+                            }
                             Exceptions.printStackTrace(ex);
                         }
                     }
@@ -144,7 +152,9 @@
                     serverSetter.accept(session, connectionObject);
                     connectionObject.getRunningFuture().get();
                 } catch (IOException | InterruptedException | ExecutionException ex) {
-                    Exceptions.printStackTrace(ex);
+                    if (!isClosed(socket)) {
+                        Exceptions.printStackTrace(ex);
+                    }
                 } finally {
                     serverSetter.accept(session, null);
                 }
@@ -152,11 +162,24 @@
         };
         connectedThread.start();
     }
+    
+    private boolean isClosed(Closeable c) {
+        synchronized (this) {
+            return closed.contains(c);
+        }
+    }
 
     @Override
     public void close() throws IOException {
-        for (Closeable c : close) {
-            c.close();
+        synchronized (this) {
+            for (Closeable c : close) {
+                try {
+                    c.close();
+                    closed.add(c);
+                } catch (IOException ex) {
+                    Exceptions.printStackTrace(ex);
+                }
+            }
         }
     }
 }
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBAddConnection.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBAddConnection.java
index 20ba446..c24ddae 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBAddConnection.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBAddConnection.java
@@ -19,6 +19,7 @@
 package org.netbeans.modules.java.lsp.server.db;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonNull;
 import com.google.gson.JsonObject;
 import java.net.URL;
 import java.sql.DatabaseMetaData;
@@ -104,7 +105,7 @@
         }
         
         if (arguments != null && !arguments.isEmpty()) {
-            final Map m = gson.fromJson((JsonObject) arguments.get(0), Map.class);
+            final Map m = arguments.get(0) instanceof JsonNull ? Collections.emptyMap() : gson.fromJson((JsonObject) arguments.get(0), Map.class);
             String userId = m != null ? (String) m.get(USER_ID) : null;
             String password = m != null ? (String) m.get(PASSWORD) : null;
             String dbUrl = m != null ? (String) m.get(DB_URL) : null;
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
index 88ad474..d4ffca2 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
@@ -173,7 +173,7 @@
         NbDebugSession debugSession = context.getDebugSession();
         if (debugSession != null) {
             // Breakpoints were submitted, we can resume the debugger
-            context.getConfigurationSemaphore().notifyCongigurationDone();;
+            context.getConfigurationSemaphore().notifyCongigurationDone();
             future.complete(null);
         } else {
             ErrorUtilities.completeExceptionally(future, "Failed to launch debug session, the debugger will exit.", ResponseErrorCode.ServerNotInitialized);
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/NodeActionsProvider.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/NodeActionsProvider.java
index 5d59d04..b583025 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/NodeActionsProvider.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/NodeActionsProvider.java
@@ -41,7 +41,6 @@
 import org.openide.filesystems.FileUtil;
 import org.openide.nodes.Node;
 import org.openide.util.ContextAwareAction;
-import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
 import org.openide.util.lookup.Lookups;
 import org.openide.util.lookup.ProxyLookup;
@@ -100,15 +99,17 @@
         if (!command.startsWith(NBLS_ACTION_PREFIX)) {
             return CompletableFuture.completedFuture(false);
         }
-        JsonObject item = gson.fromJson(gson.toJson(arguments.get(0)), JsonObject.class);
-        JsonElement el = item.get("data"); // NOI18N
+        JsonElement el = null;
+        if (arguments.size() > 0) {
+            JsonObject item = gson.fromJson(gson.toJson(arguments.get(0)), JsonObject.class);
+            el = item.get("data"); // NOI18N
+        }
         int id = -1;
         
         if (el != null) {
-            JsonElement nodeId = el.getAsJsonObject().get("id");
+            JsonElement nodeId = el.getAsJsonObject().get("id"); // NOI18N
             if (nodeId != null && nodeId.isJsonPrimitive()) {
                 id = nodeId.getAsJsonPrimitive().getAsInt();
-                
             }
         }
         
@@ -171,6 +172,11 @@
         FileObject config = FileUtil.getConfigFile(path);
         String contextType = (String) config.getAttribute("type"); //NOI18N
         try {
+            if (contextType == null) {
+                Action a = Actions.forID(category, aid);
+                a.actionPerformed(new ActionEvent(client, 0, aid));
+                return CompletableFuture.completedFuture(false);
+            }
             Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(contextType);
             Object context = gson.fromJson(gson.toJson(arguments.get(0)), clazz);
             if (context != null) {
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/api/NodeChangedParams.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/api/NodeChangedParams.java
index e0f0168..3ec6906 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/api/NodeChangedParams.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/explorer/api/NodeChangedParams.java
@@ -28,10 +28,10 @@
  */
 public class NodeChangedParams {
     @NonNull
-    private final int rootId;
+    private int rootId;
     
-    private final Integer nodeId;
-
+    private Integer nodeId;
+    
     public NodeChangedParams(int rootId) {
         this.rootId = rootId;
         this.nodeId = null;
@@ -52,4 +52,16 @@
     public Integer getNodeId() {
         return nodeId;
     }
+
+    // needed for testing, as GSON deserializes the structure on the client side.
+    public NodeChangedParams() {
+    }
+
+    public void setRootId(int rootId) {
+        this.rootId = rootId;
+    }
+
+    public void setNodeId(Integer nodeId) {
+        this.nodeId = nodeId;
+    }
 }
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
index df866c4..be030ad 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
@@ -73,11 +73,14 @@
 import org.eclipse.lsp4j.WorkDoneProgressCancelParams;
 import org.eclipse.lsp4j.WorkDoneProgressParams;
 import org.eclipse.lsp4j.WorkspaceFolder;
+import org.eclipse.lsp4j.WorkspaceFoldersOptions;
+import org.eclipse.lsp4j.WorkspaceServerCapabilities;
 import org.eclipse.lsp4j.jsonrpc.Endpoint;
 import org.eclipse.lsp4j.jsonrpc.JsonRpcException;
 import org.eclipse.lsp4j.jsonrpc.Launcher;
 import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
 import org.eclipse.lsp4j.jsonrpc.MessageIssueException;
+import org.eclipse.lsp4j.jsonrpc.RemoteEndpoint;
 import org.eclipse.lsp4j.jsonrpc.messages.Either;
 import org.eclipse.lsp4j.jsonrpc.messages.Message;
 import org.eclipse.lsp4j.jsonrpc.messages.NotificationMessage;
@@ -180,6 +183,10 @@
                     }
                 });
             })
+            .setExceptionHandler((t) -> {
+                LOG.log(Level.WARNING, "Error occurred during LSP message dispatch", t);
+                return RemoteEndpoint.DEFAULT_EXCEPTION_HANDLER.apply(t);
+            })
             .create();
     }
 
@@ -255,6 +262,9 @@
                         Lookups.executeWith(ll, () -> {
                             try {
                                 delegate.consume(msg);
+                            } catch (RuntimeException | Error e) {
+                                LOG.log(Level.WARNING, "Error occurred during message dispatch", e);
+                                throw e;
                             } finally {
                                 // cancel while the OperationContext is still active.
                                 if (ftoCancel != null) {
@@ -633,6 +643,7 @@
                 projectSet.retainAll(openedProjects);
                 projectSet.addAll(projects);
 
+                Project[] prjsRequested = projects.toArray(new Project[projects.size()]);
                 Project[] prjs = projects.toArray(new Project[projects.size()]);
                 LOG.log(Level.FINER, "{0}: Finished opening projects: {1}", new Object[]{id, Arrays.asList(projects)});
                 synchronized (this) {
@@ -652,7 +663,7 @@
                         openingFileOwners.put(p, f.thenApply(unused -> p));
                     }
                 }
-                f.complete(prjs);
+                f.complete(prjsRequested);
             }).exceptionally(e -> {
                 f.completeExceptionally(e);
                 return null;
@@ -727,7 +738,7 @@
                 capabilities.setDocumentFormattingProvider(true);
                 capabilities.setDocumentRangeFormattingProvider(true);
                 capabilities.setReferencesProvider(true);
-                
+
                 CallHierarchyRegistrationOptions chOpts = new CallHierarchyRegistrationOptions();
                 chOpts.setWorkDoneProgress(true);
                 capabilities.setCallHierarchyProvider(chOpts);
@@ -764,6 +775,14 @@
                 FoldingRangeProviderOptions foldingOptions = new FoldingRangeProviderOptions();
                 capabilities.setFoldingRangeProvider(foldingOptions);
                 textDocumentService.init(init.getCapabilities(), capabilities);
+
+                // register for workspace changess
+                WorkspaceServerCapabilities wcaps = new WorkspaceServerCapabilities();
+                WorkspaceFoldersOptions wfopts = new WorkspaceFoldersOptions();
+                wfopts.setSupported(true);
+                wfopts.setChangeNotifications(true);
+                wcaps.setWorkspaceFolders(wfopts);
+                capabilities.setWorkspace(wcaps);
             }
             return new InitializeResult(capabilities);
         }
@@ -1079,10 +1098,17 @@
     private static void hackConfigureGroovySupport(NbCodeClientCapabilities caps) {
         boolean b = caps != null && caps.wantsGroovySupport();
         try {
-            Class clazz = Lookup.getDefault().lookup(ClassLoader.class).loadClass("org.netbeans.modules.groovy.editor.api.GroovyIndexer");
+            Class<?> clazz = Lookup.getDefault().lookup(ClassLoader.class).loadClass("org.netbeans.modules.groovy.editor.api.GroovyIndexer");
             Method m = clazz.getDeclaredMethod("setIndexingEnabled", Boolean.TYPE);
             m.setAccessible(true);
             m.invoke(null, b);
+        } catch (ClassNotFoundException ex) {
+            // java.lang.ClassNotFoundException is expected when Groovy support is not activated / enabled. Do not log, if the
+            // client wants groovy disabled, which is obviuously true in this case :)
+            if (b && !groovyClassWarningLogged) {
+                groovyClassWarningLogged = true;
+                LOG.log(Level.WARNING, "Unable to configure Groovy indexing: Groovy support is not enabled");
+            }
         } catch (ReflectiveOperationException ex) {
             if (!groovyClassWarningLogged) {
                 groovyClassWarningLogged = true;
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TestClassGenerator.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TestClassGenerator.java
new file mode 100644
index 0000000..7a352e0
--- /dev/null
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TestClassGenerator.java
@@ -0,0 +1,311 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.lsp.server.protocol;
+
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSyntaxException;
+import com.sun.source.tree.ClassTree;
+import com.sun.source.util.SourcePositions;
+import com.sun.source.util.TreePath;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import org.eclipse.lsp4j.CodeAction;
+import org.eclipse.lsp4j.CodeActionKind;
+import org.eclipse.lsp4j.CodeActionParams;
+import org.eclipse.lsp4j.MessageParams;
+import org.eclipse.lsp4j.MessageType;
+import org.eclipse.lsp4j.ShowDocumentParams;
+import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.api.java.project.JavaProjectConstants;
+import org.netbeans.api.java.queries.UnitTestForSourceQuery;
+import org.netbeans.api.java.source.ClasspathInfo;
+import org.netbeans.api.java.source.CompilationController;
+import org.netbeans.api.java.source.CompilationInfo;
+import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.TreeUtilities;
+import org.netbeans.api.project.FileOwnerQuery;
+import org.netbeans.api.project.Project;
+import org.netbeans.api.project.ProjectUtils;
+import org.netbeans.api.project.SourceGroup;
+import org.netbeans.modules.gsf.testrunner.api.TestCreatorProvider;
+import org.netbeans.modules.gsf.testrunner.plugin.CommonTestUtilProvider;
+import org.netbeans.modules.gsf.testrunner.plugin.GuiUtilsProvider;
+import org.netbeans.modules.java.lsp.server.Utils;
+import org.netbeans.modules.parsing.api.ResultIterator;
+import org.openide.filesystems.FileChangeAdapter;
+import org.openide.filesystems.FileChangeListener;
+import org.openide.filesystems.FileEvent;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.filesystems.URLMapper;
+import org.openide.util.Lookup;
+import org.openide.util.NbBundle;
+import org.openide.util.RequestProcessor;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ *
+ * @author Dusan Balek
+ */
+@ServiceProvider(service = CodeActionsProvider.class, position = 100)
+public final class TestClassGenerator extends CodeActionsProvider {
+
+    private static final String GENERATE_TEST_CLASS_COMMAND = "java.generate.testClass";
+
+    private final Set<String> commands = Collections.singleton(GENERATE_TEST_CLASS_COMMAND);
+
+    @Override
+    @NbBundle.Messages({
+        "# {0} - the testing framework to be used, e.g. JUnit, TestNG,...",
+        "# {1} - the location where the test class will be created",
+        "DN_GenerateTestClass=Create Test Class [{0} in {1}]"
+    })
+    public List<CodeAction> getCodeActions(ResultIterator resultIterator, CodeActionParams params) throws Exception {
+        CompilationController info = CompilationController.get(resultIterator.getParserResult());
+        if (info == null) {
+            return Collections.emptyList();
+        }
+        info.toPhase(JavaSource.Phase.RESOLVED);
+        int offset = getOffset(info, params.getRange().getStart());
+        TreePath tp = info.getTreeUtilities().pathFor(offset);
+        if (!TreeUtilities.CLASS_TREE_KINDS.contains(tp.getLeaf().getKind())) {
+            return Collections.emptyList();
+        }
+        ClassTree cls = (ClassTree) tp.getLeaf();
+        SourcePositions sourcePositions = info.getTrees().getSourcePositions();
+        int startPos = (int) sourcePositions.getStartPosition(tp.getCompilationUnit(), cls);
+        String code = info.getText();
+	if (startPos < 0 || offset < 0 || offset < startPos || offset >= code.length()) {
+            return Collections.emptyList();
+        }
+        String headerText = code.substring(startPos, offset);
+        int idx = headerText.indexOf('{');
+        if (idx >= 0) {
+            return Collections.emptyList();
+        }
+        ClassPath cp = info.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.SOURCE);
+        FileObject fileObject = info.getFileObject();
+        if (!fileObject.isValid()) {
+            return Collections.emptyList();
+        }
+        FileObject root = cp.findOwnerRoot(fileObject);
+        if (root == null) {
+            return Collections.emptyList();
+        }
+        Map<Object, List<String>> validCombinations = getValidCombinations(info);
+        if (validCombinations == null || validCombinations.isEmpty()) {
+            return Collections.emptyList();
+        }
+        List<CodeAction> result = new ArrayList<>();
+        for (Map.Entry<Object, List<String>> entrySet : validCombinations.entrySet()) {
+            Object location = entrySet.getKey();
+            for (String testingFramework : entrySet.getValue()) {
+                result.add((createCodeAction(Bundle.DN_GenerateTestClass(testingFramework, getLocationText(location)), CodeActionKind.Refactor, null, GENERATE_TEST_CLASS_COMMAND, Utils.toUri(fileObject), testingFramework, Utils.toUri(getTargetFolder(location)))));
+            }
+        }
+	return result;
+    }
+
+    @Override
+    public Set<String> getCommands() {
+        return commands;
+    }
+
+    @Override
+    public CompletableFuture<Object> processCommand(NbCodeLanguageClient client, String command, List<Object> arguments) {
+        try {
+            if (arguments.size() > 2) {
+                String uri = ((JsonPrimitive) arguments.get(0)).getAsString();
+                FileObject fileObject = Utils.fromUri(uri);
+                if (fileObject == null) {
+                    throw new IllegalArgumentException(String.format("Cannot resolve source file from uri: %s", uri));
+                }
+                String testingFramework = ((JsonPrimitive) arguments.get(1)).getAsString();
+                String targetUri = ((JsonPrimitive) arguments.get(2)).getAsString();
+                FileObject targetFolder = Utils.fromUri(targetUri);
+                if (targetFolder == null) {
+                    throw new IllegalArgumentException(String.format("Cannot resolve target folder from uri: %s", targetUri));
+                }
+                Collection<? extends Lookup.Item<TestCreatorProvider>> providers = Lookup.getDefault().lookupResult(TestCreatorProvider.class).allItems();
+                for (final Lookup.Item<TestCreatorProvider> provider : providers) {
+                    if (provider.getDisplayName().equals(testingFramework)) {
+                        final TestCreatorProvider.Context context = new TestCreatorProvider.Context(new FileObject[]{fileObject});
+                        context.setSingleClass(true);
+                        context.setTargetFolder(targetFolder);
+                        context.setTestClassName(getPreffiledName(fileObject, testingFramework));
+                        FileChangeListener fcl = new FileChangeAdapter() {
+                            @Override
+                            public void fileDataCreated(FileEvent fe) {
+                                RequestProcessor.getDefault().post(() -> {
+                                    client.showDocument(new ShowDocumentParams(Utils.toUri(fe.getFile())));
+                                }, 1000);
+                            }
+                        };
+                        targetFolder.addRecursiveListener(fcl);
+                        try {
+                            provider.getInstance().createTests(context);
+                        } finally {
+                            RequestProcessor.getDefault().post(() -> {
+                                targetFolder.removeRecursiveListener(fcl);
+                            }, 1000);
+                        }
+                    }
+                }
+            } else {
+                throw new IllegalArgumentException(String.format("Illegal number of arguments received for command: %s", command));
+            }
+        } catch (JsonSyntaxException | IllegalArgumentException | MalformedURLException ex) {
+            client.showMessage(new MessageParams(MessageType.Error, ex.getLocalizedMessage()));
+        }
+        return CompletableFuture.completedFuture(true);
+    }
+
+    private static String getLocationText(Object location) {
+	String text = location instanceof SourceGroup
+		? ((SourceGroup) location).getDisplayName()
+		: location instanceof FileObject
+		? FileUtil.getFileDisplayName((FileObject) location)
+		: location.toString();
+	return text;
+    }
+
+    private static Map<Object, List<String>> getValidCombinations(CompilationInfo info) {
+	List<String> testingFrameworks = getTestingFrameworks(info.getFileObject());
+	if (testingFrameworks.isEmpty()) {
+	    return null;
+	}
+	Map<Object, List<String>> validCombinations = new HashMap<>();
+	for (Object location : getLocations(info.getFileObject())) {
+	    String targetFolderPath = getTargetFolderPath(location);
+	    List<String> framework2Add = new ArrayList<>();
+	    for (String framework : testingFrameworks) {
+		String preffiledName = getPreffiledName(info.getFileObject(), framework);
+		preffiledName = preffiledName.replace('.', File.separatorChar).concat(".java");
+		String path = targetFolderPath.concat(File.separator).concat(preffiledName);
+		File f = new File(path);
+		FileObject fo = FileUtil.toFileObject(f);
+                if (fo == null) {
+                    framework2Add.add(framework);
+                }
+	    }
+	    if (!framework2Add.isEmpty()) {
+		validCombinations.put(location, framework2Add);
+	    }
+	}
+	return validCombinations;
+    }
+
+    private static List<String> getTestingFrameworks(FileObject fileObject) {
+	List<String> testingFrameworks = new ArrayList<>();
+	Collection<? extends Lookup.Item<TestCreatorProvider>> testCreatorProviders = Lookup.getDefault().lookupResult(TestCreatorProvider.class).allItems();
+	for (Lookup.Item<TestCreatorProvider> provider : testCreatorProviders) {
+            if (provider.getInstance().enable(new FileObject[]{fileObject})) {
+                testingFrameworks.add(provider.getDisplayName());
+            }
+	}
+        return testingFrameworks;
+    }
+
+    private static Object[] getLocations(FileObject activeFO) {
+        Object[] locations = null;
+	Collection<? extends CommonTestUtilProvider> testUtilProviders = Lookup.getDefault().lookupAll(CommonTestUtilProvider.class);
+	for (CommonTestUtilProvider provider : testUtilProviders) {
+	    locations = provider.getTestTargets(activeFO);
+	    break;
+	}
+	if (locations != null && locations.length == 0) {
+            SourceGroup sourceGroupOwner = findSourceGroupOwner(activeFO);
+            if (sourceGroupOwner != null) {
+                locations = UnitTestForSourceQuery.findUnitTests(sourceGroupOwner.getRootFolder());
+            }
+        }
+        return locations != null ? locations : new Object[0];
+    }
+
+    private static String getPreffiledName(FileObject fileObj, String selectedFramework) {
+	ClassPath cp = ClassPath.getClassPath(fileObj, ClassPath.SOURCE);
+	String className = cp.getResourceName(fileObj, '.', false);
+	return className + getTestingFrameworkSuffix(selectedFramework) + "Test";
+    }
+
+    private static String getTestingFrameworkSuffix(String selectedFramework) {
+	if (selectedFramework == null) {
+	    return "";
+	}
+	String testngFramework = "";
+	Collection<? extends GuiUtilsProvider> providers = Lookup.getDefault().lookupAll(GuiUtilsProvider.class);
+	for (GuiUtilsProvider provider : providers) {
+	    testngFramework = provider.getTestngFramework();
+	    break;
+	}
+	return selectedFramework.equals(testngFramework) ? "NG" : "";
+    }
+
+    private static FileObject getTargetFolder(Object selectedLocation) {
+	if (selectedLocation == null) {
+	    return null;
+	}
+	if (selectedLocation instanceof SourceGroup) {
+	    return ((SourceGroup) selectedLocation).getRootFolder();
+	}
+        if (selectedLocation instanceof URL) {
+	    return URLMapper.findFileObject((URL) selectedLocation);
+	}
+	assert selectedLocation instanceof FileObject;
+	return (FileObject) selectedLocation;
+    }
+
+    private static String getTargetFolderPath(Object selectedLocation) {
+	if (selectedLocation == null) {
+	    return null;
+	}
+	if (selectedLocation instanceof SourceGroup) {
+	    return ((SourceGroup) selectedLocation).getRootFolder().getPath();
+	}
+        if (selectedLocation instanceof URL) {
+	    return ((URL) selectedLocation).getPath();
+	}
+	assert selectedLocation instanceof FileObject;
+	return ((FileObject) selectedLocation).getPath();
+    }
+
+    private static SourceGroup findSourceGroupOwner(FileObject file) {
+        final Project project = FileOwnerQuery.getOwner(file);
+        if (project != null) {
+        final SourceGroup[] sourceGroups = ProjectUtils.getSources(project).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
+            for (int i = 0; i < sourceGroups.length; i++) {
+                SourceGroup srcGroup = sourceGroups[i];
+                FileObject root = srcGroup.getRootFolder();
+                if (((file==root)||(FileUtil.isParentOf(root,file))) && srcGroup.contains(file)) {
+                    return srcGroup;
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/UIContext.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/UIContext.java
index 2502e81..230021b 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/UIContext.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/UIContext.java
@@ -24,6 +24,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.eclipse.lsp4j.MessageActionItem;
 import org.eclipse.lsp4j.MessageParams;
 import org.eclipse.lsp4j.MessageType;
@@ -38,6 +40,8 @@
 import org.openide.util.Lookup;
 
 public abstract class UIContext {
+    private static final Logger LOG = Logger.getLogger(UIContext.class.getName());
+    
     private static Reference<UIContext> lastCtx = new WeakReference<>(null);
     
     /**
@@ -50,11 +54,13 @@
     public static synchronized UIContext find(Lookup lkp) {
         UIContext ctx = lkp.lookup(UIContext.class);
         if (ctx != null) {
+            LOG.log(Level.FINE, "Acquired user context from lookup: {0}, context instance: {1}", new Object[] { lkp, ctx });
             return ctx;
         }
         Lookup def = Lookup.getDefault();
         if (lkp != def) {
             ctx = def.lookup(UIContext.class);
+            LOG.log(Level.FINE, "Acquired user context from default lookup: {0}, context instance: {1}", new Object[] { lkp, ctx });
         }
         if (ctx == null) {
             // PENDING: better context transfer between threads is needed; this way the UIContext can remote to a bad
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
index d7e4494..e73d65d 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
@@ -50,7 +50,6 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -71,12 +70,14 @@
 import org.eclipse.lsp4j.CompletionItem;
 import org.eclipse.lsp4j.DidChangeConfigurationParams;
 import org.eclipse.lsp4j.DidChangeWatchedFilesParams;
+import org.eclipse.lsp4j.DidChangeWorkspaceFoldersParams;
 import org.eclipse.lsp4j.ExecuteCommandParams;
 import org.eclipse.lsp4j.Location;
 import org.eclipse.lsp4j.Position;
 import org.eclipse.lsp4j.Range;
 import org.eclipse.lsp4j.ShowDocumentParams;
 import org.eclipse.lsp4j.SymbolInformation;
+import org.eclipse.lsp4j.WorkspaceFolder;
 import org.eclipse.lsp4j.WorkspaceSymbol;
 import org.eclipse.lsp4j.WorkspaceSymbolLocation;
 import org.eclipse.lsp4j.WorkspaceSymbolParams;
@@ -129,10 +130,12 @@
 import org.netbeans.spi.project.ui.ProjectProblemsProvider;
 import org.openide.DialogDisplayer;
 import org.openide.NotifyDescriptor;
+import org.openide.awt.StatusDisplayer;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.URLMapper;
 import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
+import org.openide.util.NbBundle;
 import org.openide.util.NbPreferences;
 import org.openide.util.Pair;
 import org.openide.util.RequestProcessor;
@@ -1170,6 +1173,54 @@
         }
     }
 
+    @NbBundle.Messages({
+        "# {0} - project name",
+        "MSG_ProjectFolderInitializationComplete=Completed initialization of project {0}",
+        "# {0} - some project name",
+        "# {1} - number of other projects loaded",
+        "MSG_ProjectFolderInitializationComplete2=Completed initialization of {0} and {1} other projectss"
+    })
+    @Override
+    public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) {
+        List<FileObject> refreshProjectFolders = new ArrayList<>();
+        for (WorkspaceFolder wkspFolder : params.getEvent().getAdded()) {
+            String uri = wkspFolder.getUri();
+            try {
+                FileObject f = Utils.fromUri(uri);
+                if (f != null) {
+                    refreshProjectFolders.add(f);
+                }
+            } catch (MalformedURLException ex) {
+                // expected, perhaps some client-specific URL scheme ?
+                LOG.fine("Workspace folder URI could not be converted into fileobject: {0}");
+            }
+        }
+        if (!refreshProjectFolders.isEmpty()) {
+            server.asyncOpenSelectedProjects(refreshProjectFolders, true).thenAccept((projects) -> {
+                // report initialization of a project / projects
+                String msg;
+                if (projects.length == 0) {
+                    // this should happen immediately
+                    return;
+                } 
+                ProjectInformation pi = ProjectUtils.getInformation(projects[0]);
+                String n = pi.getDisplayName();
+                if (n == null) {
+                    n = pi.getName();
+                }
+                if (n == null) {
+                    n = projects[0].getProjectDirectory().getName();
+                }
+                if (projects.length == 1) {
+                    msg = Bundle.MSG_ProjectFolderInitializationComplete(n);
+                } else {
+                    msg = Bundle.MSG_ProjectFolderInitializationComplete2(n, projects.length);
+                }
+                StatusDisplayer.getDefault().setStatusText(msg, StatusDisplayer.IMPORTANCE_ANNOTATION);
+            });
+        }
+    }
+
     @Override
     public void didChangeWatchedFiles(DidChangeWatchedFilesParams arg0) {
         //TODO: not watching files for now
@@ -1182,7 +1233,7 @@
 
     private static final class CommandProgress extends ActionProgress {
 
-        private final CompletableFuture<Object> commandFinished = new CompletableFuture<>();;
+        private final CompletableFuture<Object> commandFinished = new CompletableFuture<>();
         private int running;
         private int success;
         private int failure;
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceUIContext.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceUIContext.java
index aa041cc..fa3ca4a 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceUIContext.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceUIContext.java
@@ -21,6 +21,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.eclipse.lsp4j.MessageActionItem;
 import org.eclipse.lsp4j.MessageParams;
 import org.eclipse.lsp4j.ShowMessageRequestParams;
@@ -36,10 +38,13 @@
  * @author sdedic
  */
 class WorkspaceUIContext extends UIContext {
+    private static final Logger LOG = Logger.getLogger(WorkspaceUIContext.class.getName());
+    
     private final NbCodeLanguageClient client;
 
     public WorkspaceUIContext(NbCodeLanguageClient client) {
         this.client = client;
+        LOG.log(Level.FINE, "Starting WorkspaceUIContext for: {0}, context instance: {1}", new Object[] { client, this });
     }
 
     @Override
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractDialogDisplayer.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractDialogDisplayer.java
index 5f8a8a3..ff7b6cf 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractDialogDisplayer.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractDialogDisplayer.java
@@ -21,6 +21,8 @@
 import java.awt.Dialog;
 import java.awt.HeadlessException;
 import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.netbeans.modules.java.lsp.server.LspServerUtils;
 import org.netbeans.modules.java.lsp.server.protocol.UIContext;
 import org.openide.DialogDescriptor;
@@ -35,40 +37,30 @@
  * @author sdedic
  */
 public class AbstractDialogDisplayer extends DialogDisplayer {
-    private final Lookup context;
+    private static final Logger LOG = Logger.getLogger(AbstractDialogDisplayer.class.getName());
     
     public AbstractDialogDisplayer() {
-        this(Lookup.getDefault());
-    }
-
-    AbstractDialogDisplayer(Lookup context) {
-        this.context = context;
+        LOG.log(Level.FINE, "Creating dialog displayer with lookup context: {0}", Lookup.getDefault());
     }
     
     @Override
     public Object notify(NotifyDescriptor descriptor) {
-        LspServerUtils.avoidClientMessageThread(context);
-        UIContext ctx = UIContext.find(context);
+        LspServerUtils.avoidClientMessageThread(Lookup.getDefault());
+        UIContext ctx = UIContext.find();
         NotifyDescriptorAdapter adapter = new NotifyDescriptorAdapter(descriptor, ctx);
         return adapter.clientNotify();
     }
     
     @Override
     public void notifyLater(final NotifyDescriptor descriptor) {
-        UIContext ctx = context.lookup(UIContext.class);
-        if (ctx == null) {
-            ctx = UIContext.find();
-        }
+        UIContext ctx = UIContext.find();
         NotifyDescriptorAdapter adapter = new NotifyDescriptorAdapter(descriptor, ctx);
         adapter.clientNotifyLater();
     }
 
     @Override
     public <T extends NotifyDescriptor> CompletableFuture<T> notifyFuture(T descriptor) {
-        UIContext ctx = context.lookup(UIContext.class);
-        if (ctx == null) {
-            ctx = UIContext.find();
-        }
+        UIContext ctx = UIContext.find();
         NotifyDescriptorAdapter adapter = new NotifyDescriptorAdapter(descriptor, ctx);
         return adapter.clientNotifyCompletion();
     }
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/NotifyDescriptorAdapter.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/NotifyDescriptorAdapter.java
index 046ad6d..9ac84a7 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/NotifyDescriptorAdapter.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/NotifyDescriptorAdapter.java
@@ -286,6 +286,7 @@
     }
     
     public CompletableFuture<Object> clientNotifyLater() {
+        LOG.log(Level.FINE, "notifyLater with context: {0}", this.client);
         return clientNotifyCompletion().thenApply(d -> d.getValue()).exceptionally(t -> {
             if (t instanceof CompletionException) {
                 t = t.getCause();
diff --git a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
index 3677181..5b620cb 100644
--- a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
+++ b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
@@ -25,7 +25,10 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.io.Writer;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
@@ -141,6 +144,7 @@
 import org.eclipse.lsp4j.WorkspaceSymbolLocation;
 import org.eclipse.lsp4j.WorkspaceSymbolParams;
 import org.eclipse.lsp4j.jsonrpc.Launcher;
+import org.eclipse.lsp4j.jsonrpc.RemoteEndpoint;
 import org.eclipse.lsp4j.jsonrpc.messages.Either;
 import org.eclipse.lsp4j.launch.LSPLauncher;
 import org.eclipse.lsp4j.services.LanguageClient;
@@ -173,6 +177,7 @@
 import org.netbeans.modules.java.source.BootClassPathUtil;
 import org.netbeans.modules.java.source.ElementHandleAccessor;
 import org.netbeans.modules.java.source.parsing.JavacParser;
+import org.netbeans.modules.java.source.parsing.ParameterNameProviderImpl;
 import org.netbeans.modules.parsing.api.ResultIterator;
 import org.netbeans.modules.parsing.impl.indexing.implspi.CacheFolderProvider;
 import org.netbeans.spi.java.classpath.ClassPathProvider;
@@ -204,7 +209,8 @@
  */
 @SuppressWarnings({"unchecked", "rawtypes", "deprecation"})
 public class ServerTest extends NbTestCase {
-
+    static final boolean ENABLE_MESSAGE_LOGGING = Boolean.getBoolean(ServerTest.class.getName() + ".traceMessages");
+    
     private final Gson gson = new Gson();
     private Socket client;
     private Thread serverThread;
@@ -216,6 +222,7 @@
     @Override
     protected void setUp() throws Exception {
         System.setProperty("java.awt.headless", Boolean.TRUE.toString());
+        ParameterNameProviderImpl.DISABLE_PARAMETER_NAMES_LOADING = true;
         super.setUp();
         clearWorkDir();
         ServerSocket srv = new ServerSocket(0, 1, InetAddress.getLoopbackAddress());
@@ -328,7 +335,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -405,7 +412,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -513,7 +520,7 @@
         OpenCloseHook hook = new OpenCloseHook();
         TextDocumentServiceImpl.HOOK_NOTIFICATION = hook::accept;
 
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -589,7 +596,7 @@
         OpenCloseHook hook = new OpenCloseHook();
         TextDocumentServiceImpl.HOOK_NOTIFICATION = hook::accept;
 
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -625,7 +632,7 @@
             w.write(code);
         }
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -732,7 +739,7 @@
         }
         file2SourceLevel.put(FileUtil.toFileObject(src.getParentFile()), "17");
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -875,7 +882,7 @@
         }
         FileUtil.refreshFor(getWorkDir());
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -959,7 +966,7 @@
         }
         FileUtil.refreshFor(getWorkDir());
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1024,7 +1031,7 @@
         }
         FileUtil.refreshFor(getWorkDir());
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1088,7 +1095,7 @@
                     "}");
         }
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1131,7 +1138,7 @@
     }
 
     public void testFindDebugAttachConfigurations() throws Exception {
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
         }, client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
@@ -1190,7 +1197,7 @@
 
         List<Diagnostic>[] diags = new List[1];
         boolean[] indexingComplete = new boolean[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1258,7 +1265,7 @@
             w.write(code);
         }
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1308,7 +1315,7 @@
             w.write(code);
         }
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1355,6 +1362,7 @@
     }
 
     public void testAdvancedCompletion1() throws Exception {
+        String javaVersion = System.getProperty("java.specification.version");
         File src = new File(getWorkDir(), "Test.java");
         src.getParentFile().mkdirs();
         try (Writer w = new FileWriter(new File(src.getParentFile(), ".test-project"))) {}
@@ -1368,7 +1376,7 @@
         }
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1422,7 +1430,11 @@
             Optional<CompletionItem> substringItem = completion.getRight().getItems().stream().filter(ci -> ci.getLabel().startsWith("substring(") && ci.getLabel().contains(",")).findAny();
             assertTrue(substringItem.isPresent());
             assertEquals(InsertTextFormat.Snippet, substringItem.get().getInsertTextFormat());
-            assertEquals("substring(${1:i}, ${2:i1})$0", substringItem.get().getInsertText());
+            if ("1.8".equals(javaVersion)) {
+                assertEquals("substring(${1:arg0}, ${2:arg1})$0", substringItem.get().getInsertText());
+            } else {
+                assertEquals("substring(${1:beginIndex}, ${2:endIndex})$0", substringItem.get().getInsertText());
+            }
         }
 
         {
@@ -1503,7 +1515,7 @@
         }
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1589,14 +1601,14 @@
         }
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void showStatusBarMessage(ShowStatusMessageParams params) {
                 if (Server.INDEXING_COMPLETED.equals(params.getMessage())) {
                     indexingComplete.countDown();
                 }
             }
-
+        
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -1661,7 +1673,7 @@
                     "}\n");
         }
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1766,7 +1778,7 @@
             w.write(code);
         }
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1826,7 +1838,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -1954,7 +1966,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2040,7 +2052,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2127,7 +2139,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2217,7 +2229,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2304,7 +2316,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2392,7 +2404,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2501,7 +2513,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2605,7 +2617,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2709,7 +2721,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2816,7 +2828,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2893,7 +2905,7 @@
             w.write(code);
         }
         AtomicReference<Object> data = new AtomicReference<>();
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -2950,7 +2962,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3042,6 +3054,7 @@
     }
 
     public void testSourceActionConstructor() throws Exception {
+        String javaVersion = System.getProperty("java.specification.version");
         File src = new File(getWorkDir(), "Test.java");
         src.getParentFile().mkdirs();
         String code = "public class Test extends Exception {\n" +
@@ -3051,7 +3064,7 @@
             w.write(code);
         }
         AtomicReference<Object> data = new AtomicReference<>();
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3093,16 +3106,29 @@
         assertEquals(new Range(new Position(2, 0),
                                new Position(2, 0)),
                      fileChanges.get(0).getRange());
-        assertEquals("\n" +
-                     "    public Test(String f1) {\n" +
-                     "        this.f1 = f1;\n" +
-                     "    }\n" +
-                     "\n" +
-                     "    public Test(String f1, String string) {\n" +
-                     "        super(string);\n" +
-                     "        this.f1 = f1;\n" +
-                     "    }\n",
-                     fileChanges.get(0).getNewText());
+        if ("1.8".equals(javaVersion)) {
+            assertEquals("\n" +
+                         "    public Test(String f1) {\n" +
+                         "        this.f1 = f1;\n" +
+                         "    }\n" +
+                         "\n" +
+                         "    public Test(String f1, String arg0) {\n" +
+                         "        super(arg0);\n" +
+                         "        this.f1 = f1;\n" +
+                         "    }\n",
+                         fileChanges.get(0).getNewText());
+        } else {
+            assertEquals("\n" +
+                         "    public Test(String f1) {\n" +
+                         "        this.f1 = f1;\n" +
+                         "    }\n" +
+                         "\n" +
+                         "    public Test(String f1, String message) {\n" +
+                         "        super(message);\n" +
+                         "        this.f1 = f1;\n" +
+                         "    }\n",
+                         fileChanges.get(0).getNewText());
+        }
     }
 
     public void testSourceActionEqualsHashCode() throws Exception {
@@ -3125,7 +3151,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<List<QuickPickItem>> showQuickPick(ShowQuickPickParams params) {
                 return CompletableFuture.completedFuture(params.getItems().size() > 2 ? params.getItems().subList(0, 2) : params.getItems());
@@ -3187,7 +3213,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3246,7 +3272,7 @@
             w.write(code);
         }
         AtomicReference<Object> data = new AtomicReference<>();
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3332,7 +3358,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3391,7 +3417,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public CompletableFuture<ApplyWorkspaceEditResponse> applyEdit(ApplyWorkspaceEditParams params) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3456,7 +3482,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3590,7 +3616,7 @@
         }
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -3674,7 +3700,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -3789,7 +3815,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -3895,7 +3921,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -4016,7 +4042,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -4153,7 +4179,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -4251,7 +4277,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -4334,6 +4360,23 @@
             }
         }
     }
+    
+    private Launcher<LanguageServer> createClientLauncherWithLogging(LanguageClient client, InputStream input, OutputStream output) {
+        Launcher.Builder<LanguageServer> builder = new LSPLauncher.Builder<LanguageServer>() 
+            .setLocalService(client)
+            .setExceptionHandler((t) -> {
+                System.err.println("Error during dispatch at client: ");
+                t.printStackTrace();
+                return RemoteEndpoint.DEFAULT_EXCEPTION_HANDLER.apply(t);
+            })
+            .setRemoteInterface(LanguageServer.class)
+            .setInput(input)
+            .setOutput(output);
+        if (ENABLE_MESSAGE_LOGGING) {
+            builder = builder.traceMessages(new PrintWriter(System.out));
+        }
+        return builder.create();
+    }
 
     public void testChangeMethodParameters() throws Exception {
         File src = new File(getWorkDir(), "a/Foo.java");
@@ -4363,7 +4406,7 @@
         List<Diagnostic>[] diags = new List[1];
         CountDownLatch indexingComplete = new CountDownLatch(1);
         WorkspaceEdit[] edit = new WorkspaceEdit[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new TestCodeLanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new TestCodeLanguageClient() {
             @Override
             public void publishDiagnostics(PublishDiagnosticsParams params) {
                 synchronized (diags) {
@@ -4461,7 +4504,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4541,7 +4584,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4625,7 +4668,7 @@
         }
 
         List<Diagnostic>[] diags = new List[1];
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4704,7 +4747,7 @@
         }
         Map<String, List<Integer>> publishedDiagnostics = new HashMap<>();
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4773,7 +4816,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4845,7 +4888,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -4908,7 +4951,7 @@
             w.write(code);
         }
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LanguageClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -4971,7 +5014,7 @@
             w.write(code);
         }
         FileUtil.refreshFor(getWorkDir());
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LanguageClient() {
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LanguageClient() {
             @Override
             public void telemetryEvent(Object arg0) {
                 throw new UnsupportedOperationException("Not supported yet.");
@@ -5404,7 +5447,7 @@
         
         Lookup d = Lookup.getDefault();
         IOProvider prov = IOProvider.getDefault();
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(lc, client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(lc, client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeParams initP = new InitializeParams();
@@ -5445,7 +5488,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
@@ -5492,7 +5535,7 @@
         try (Writer w = new FileWriter(src)) {
             w.write(code);
         }
-        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LspClient(), client.getInputStream(), client.getOutputStream());
+        Launcher<LanguageServer> serverLauncher = createClientLauncherWithLogging(new LspClient(), client.getInputStream(), client.getOutputStream());
         serverLauncher.startListening();
         LanguageServer server = serverLauncher.getRemoteProxy();
         InitializeResult result = server.initialize(new InitializeParams()).get();
diff --git a/java/java.lsp.server/vscode/CHANGELOG.md b/java/java.lsp.server/vscode/CHANGELOG.md
index 5acc999..a7f635f 100644
--- a/java/java.lsp.server/vscode/CHANGELOG.md
+++ b/java/java.lsp.server/vscode/CHANGELOG.md
@@ -20,6 +20,10 @@
     under the License.
 
 -->
+## Version 16.0.1
+* Gradle 7.6 support to work on JDK 19
+* Proxy autodection and configuration for Maven & Gradle
+
 ## Version 15.0.301
 * Native image CE debugger works on aarch64
 * Organize Imports fixed for clashing star imports
diff --git a/java/java.lsp.server/vscode/package-lock.json b/java/java.lsp.server/vscode/package-lock.json
index 99c5d0a..2a22d09 100644
--- a/java/java.lsp.server/vscode/package-lock.json
+++ b/java/java.lsp.server/vscode/package-lock.json
@@ -653,8 +653,9 @@
 			}
 		},
 		"node_modules/minimatch": {
-			"version": "3.0.4",
-			"license": "ISC",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
 			"dependencies": {
 				"brace-expansion": "^1.1.7"
 			},
@@ -663,9 +664,10 @@
 			}
 		},
 		"node_modules/mocha": {
-			"version": "9.2.0",
+			"version": "9.2.2",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+			"integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@ungap/promise-all-settled": "1.1.2",
 				"ansi-colors": "4.1.1",
@@ -680,9 +682,9 @@
 				"he": "1.2.0",
 				"js-yaml": "4.1.0",
 				"log-symbols": "4.1.0",
-				"minimatch": "3.0.4",
+				"minimatch": "4.2.1",
 				"ms": "2.1.3",
-				"nanoid": "3.2.0",
+				"nanoid": "3.3.1",
 				"serialize-javascript": "6.0.0",
 				"strip-json-comments": "3.1.1",
 				"supports-color": "8.1.1",
@@ -704,6 +706,18 @@
 				"url": "https://opencollective.com/mochajs"
 			}
 		},
+		"node_modules/mocha/node_modules/minimatch": {
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+			"integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/mocha/node_modules/ms": {
 			"version": "2.1.3",
 			"dev": true,
@@ -715,9 +729,10 @@
 			"license": "MIT"
 		},
 		"node_modules/nanoid": {
-			"version": "3.2.0",
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+			"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
 			"dev": true,
-			"license": "MIT",
 			"bin": {
 				"nanoid": "bin/nanoid.cjs"
 			},
@@ -1510,13 +1525,17 @@
 			}
 		},
 		"minimatch": {
-			"version": "3.0.4",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
 			"requires": {
 				"brace-expansion": "^1.1.7"
 			}
 		},
 		"mocha": {
-			"version": "9.2.0",
+			"version": "9.2.2",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+			"integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
 			"dev": true,
 			"requires": {
 				"@ungap/promise-all-settled": "1.1.2",
@@ -1532,9 +1551,9 @@
 				"he": "1.2.0",
 				"js-yaml": "4.1.0",
 				"log-symbols": "4.1.0",
-				"minimatch": "3.0.4",
+				"minimatch": "4.2.1",
 				"ms": "2.1.3",
-				"nanoid": "3.2.0",
+				"nanoid": "3.3.1",
 				"serialize-javascript": "6.0.0",
 				"strip-json-comments": "3.1.1",
 				"supports-color": "8.1.1",
@@ -1545,6 +1564,15 @@
 				"yargs-unparser": "2.0.0"
 			},
 			"dependencies": {
+				"minimatch": {
+					"version": "4.2.1",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+					"integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+					"dev": true,
+					"requires": {
+						"brace-expansion": "^1.1.7"
+					}
+				},
 				"ms": {
 					"version": "2.1.3",
 					"dev": true
@@ -1556,7 +1584,9 @@
 			"dev": true
 		},
 		"nanoid": {
-			"version": "3.2.0",
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+			"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
 			"dev": true
 		},
 		"normalize-path": {
diff --git a/java/java.lsp.server/vscode/package.json b/java/java.lsp.server/vscode/package.json
index 8b6139b..bbbe553 100644
--- a/java/java.lsp.server/vscode/package.json
+++ b/java/java.lsp.server/vscode/package.json
@@ -88,7 +88,7 @@
 		"viewsWelcome": [
 			{
 				"view": "database.connections",
-				"contents": "No Database Connections found.\n[Add a new connection](command:db.add.connection)"
+				"contents": "No Database Connections found.\n[Add a new connection](command:db.add.connection)\n[Add Oracle Autonomous DB](command:nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddADBAction)"
 			}
 		],
 		"configuration": {
@@ -584,6 +584,10 @@
 				"command": "nbls:Tools:org.netbeans.modules.cloud.oracle.actions.DownloadWalletAction",
 				"title": "Add DB Connection"
 			},
+                        {
+				"command": "nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddADBAction",
+				"title": "Add Oracle Autonomous Database"
+			},
 			{
 				"command": "nbls:Tools:org.netbeans.modules.cloud.oracle.actions.CreateAutonomousDBAction",
 				"title": "Create Autonomous Database"
@@ -833,7 +837,7 @@
 				},
 				{
 					"command": "java.workspace.configureRunSettings",
-					"when": "view == run-config && viewItem == configureRunSettings && config.netbeans.javaSupport.enabled",
+					"when": "view == run-config && viewItem == configureRunSettings",
 					"group": "inline@1"
 				}
 			]
diff --git a/java/java.lsp.server/vscode/src/extension.ts b/java/java.lsp.server/vscode/src/extension.ts
index 9430743..270f926 100644
--- a/java/java.lsp.server/vscode/src/extension.ts
+++ b/java/java.lsp.server/vscode/src/extension.ts
@@ -298,9 +298,7 @@
     function checkConflict(): void {
         let conf = workspace.getConfiguration();
         if (conf.get("netbeans.conflict.check") && conf.get("netbeans.javaSupport.enabled")) {
-            const id = 'redhat.java';
-            let e = vscode.extensions.getExtension(id);
-            if (e && workspace.name) {
+            if (vscode.extensions.getExtension('redhat.java')) {
                 if (vscode.extensions.getExtension('oracle-labs-graalvm.gcn')) {
                     conf.update("netbeans.javaSupport.enabled", false, true);
                 } else {
@@ -357,6 +355,7 @@
     initializeRunConfiguration().then(initialized => {
 		if (initialized) {
 			context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('java8+', runConfigurationProvider));
+			context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('java', runConfigurationProvider));
 			context.subscriptions.push(vscode.window.registerTreeDataProvider('run-config', runConfigurationNodeProvider));
 			context.subscriptions.push(vscode.commands.registerCommand('java.workspace.configureRunSettings', (...params: any[]) => {
 				configureRunSettings(context, params);
diff --git a/java/java.metrics/nbproject/project.properties b/java/java.metrics/nbproject/project.properties
index 333f747..26aa41b 100644
--- a/java/java.metrics/nbproject/project.properties
+++ b/java/java.metrics/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 requires.nb.javac=true
diff --git a/java/java.mx.project/build.xml b/java/java.mx.project/build.xml
index b02e9fc..bbd780a 100644
--- a/java/java.mx.project/build.xml
+++ b/java/java.mx.project/build.xml
@@ -31,7 +31,7 @@
             <arg value="clone"/>
             <arg value="--depth=1"/>
             <arg value="--branch"/>
-            <arg value="vm-20.3.0"/>
+            <arg value="vm-22.3.0"/>
             <arg value="--single-branch"/>
             <arg value="https://github.com/oracle/graal"/>
         </exec>
@@ -41,7 +41,7 @@
             <arg value="clone"/>
             <arg value="--depth=1"/>
             <arg value="--branch"/>
-            <arg value="5.279.0"/>
+            <arg value="6.7.0"/>
             <arg value="--single-branch"/>
             <arg value="https://github.com/graalvm/mx"/>
         </exec>
diff --git a/java/java.mx.project/nbproject/project.properties b/java/java.mx.project/nbproject/project.properties
index fc449e6..c8c37c3 100644
--- a/java/java.mx.project/nbproject/project.properties
+++ b/java/java.mx.project/nbproject/project.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 javac.source=1.8
-javac.compilerargs=-Xlint -Xlint:-serial -Werror -Xlint:-processing
+javac.compilerargs=-Xlint -Xlint:-serial -Xlint:-processing -Xlint:-options -Werror
 requires.nb.javac=true
 
 # For testing we need path to the MX executable. The executable is checked out by the buildscript.
diff --git a/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteProject.java b/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteProject.java
index 494a412..ee4e4b5 100644
--- a/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteProject.java
+++ b/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteProject.java
@@ -114,7 +114,7 @@
         private CompilerOptionsQueryImplementation.Result RESULT = new Result() {
             @Override
             public List<? extends String> getArguments() {
-                return Arrays.asList("--add-modules", "ALL-MODULE-PATH", "--limit-modules", "java.se");
+                return Arrays.asList("--add-modules", "ALL-MODULE-PATH", "--limit-modules", "java.se,jdk.unsupported,jdk.management");
             }
 
             @Override
diff --git a/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteSources.java b/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteSources.java
index 096d2bf..4156724 100644
--- a/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteSources.java
+++ b/java/java.mx.project/src/org/netbeans/modules/java/mx/project/SuiteSources.java
@@ -624,20 +624,20 @@
                 try {
                     res = ClassPathSupport.createResource(getJarRoot());
                     return Collections.singletonList(res);
-                } catch (MalformedURLException ex) {
+                } catch (MalformedURLException | URISyntaxException ex) {
                     // OK
                 }
             }
             return Collections.emptyList();
         }
 
-        private URL getJarRoot() throws MalformedURLException {
+        private URL getJarRoot() throws MalformedURLException, URISyntaxException {
             return toJarURL(getJar());
         }
 
-        private URL toJarURL(FileObject jar) throws MalformedURLException {
+        private URL toJarURL(FileObject jar) throws MalformedURLException, URISyntaxException {
             if (jar != null) {
-                return new URL("jar:" + jar.toURL() + "!/");
+                return new URI("jar:" + jar.toURL() + "!/").toURL();
             } else {
                 return null;
             }
@@ -1036,9 +1036,9 @@
             updateExists(jar.exists());
             PathResourceImplementation res;
             try {
-                res = ClassPathSupport.createResource(new URL("jar:" + Utilities.toURI(jar).toURL() + "!/"));
+                res = ClassPathSupport.createResource(new URI("jar:" + Utilities.toURI(jar).toURL() + "!/").toURL());
                 return Collections.singletonList(res);
-            } catch (MalformedURLException ex) {
+            } catch (MalformedURLException | URISyntaxException ex) {
                 return Collections.emptyList();
             }
         }
@@ -1124,9 +1124,9 @@
             updateExists(jar.exists());
             PathResourceImplementation res;
             try {
-                res = ClassPathSupport.createResource(new URL("jar:" + Utilities.toURI(jar).toURL() + "!/"));
+                res = ClassPathSupport.createResource(new URI("jar:" + Utilities.toURI(jar).toURL() + "!/").toURL());
                 return Collections.singletonList(res);
-            } catch (MalformedURLException ex) {
+            } catch (MalformedURLException | URISyntaxException ex) {
                 return Collections.emptyList();
             }
         }
diff --git a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/ParseSuitesTest.java b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/ParseSuitesTest.java
index cd894d3..9c53905 100644
--- a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/ParseSuitesTest.java
+++ b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/ParseSuitesTest.java
@@ -37,7 +37,7 @@
     }
 
     public void testParseThemAll() throws IOException {
-        assertSuitePys(getDataDir(), 14);
+        assertSuitePys(getDataDir(), 15);
     }
 
     public static void main(String... args) throws IOException {
diff --git a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteActionProviderTest.java b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteActionProviderTest.java
index 95b8a2d..b663777 100644
--- a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteActionProviderTest.java
+++ b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteActionProviderTest.java
@@ -91,7 +91,7 @@
         ap.invokeAction(ActionProvider.COMMAND_BUILD, ctx);
 
         assertTrue("Progress started", progress.started);
-        progress.finished.await(45, TimeUnit.SECONDS);
+        progress.finished.await(600, TimeUnit.SECONDS);
         assertNotNull("Progress finished", progress.success);
     }
 
diff --git a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteCheck.java b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteCheck.java
index ff1dd94..af0e918 100644
--- a/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteCheck.java
+++ b/java/java.mx.project/test/unit/src/org/netbeans/modules/java/mx/project/SuiteCheck.java
@@ -135,7 +135,7 @@
         for (SourceGroup sourceGroup : src.getSourceGroups("java")) {
             if (sourceGroup instanceof Compliance.Provider) {
                 Compliance c = ((Compliance.Provider) sourceGroup).getCompliance();
-                if (!c.includes(8)) {
+                if (!c.includes(11)) {
                     log(Level.INFO, "Skipping check of %s with compliance %s", sourceGroup, c);
                     continue;
                 }
diff --git a/java/java.nativeimage.debugger/nbproject/org-netbeans-modules-java-nativeimage-debugger.sig b/java/java.nativeimage.debugger/nbproject/org-netbeans-modules-java-nativeimage-debugger.sig
index 6995e70..53c2e7e 100644
--- a/java/java.nativeimage.debugger/nbproject/org-netbeans-modules-java-nativeimage-debugger.sig
+++ b/java/java.nativeimage.debugger/nbproject/org-netbeans-modules-java-nativeimage-debugger.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.7
+#Version 0.8
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.navigation/src/org/netbeans/modules/java/navigation/base/HistorySupport.java b/java/java.navigation/src/org/netbeans/modules/java/navigation/base/HistorySupport.java
index 28f3ba6..0f7366b 100644
--- a/java/java.navigation/src/org/netbeans/modules/java/navigation/base/HistorySupport.java
+++ b/java/java.navigation/src/org/netbeans/modules/java/navigation/base/HistorySupport.java
@@ -60,7 +60,7 @@
     private static final int HISTORY_LENGTH = 25;
 
     //@GuardedBy("HistorySupport.class")
-    private static Map<Class<?>,HistorySupport> instances = new HashMap<Class<?>, HistorySupport>();;
+    private static Map<Class<?>,HistorySupport> instances = new HashMap<Class<?>, HistorySupport>();
 
     private final PropertyChangeSupport suppot;
     //@GuardedBy("this")
diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/MissingRefOutputHint.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/MissingRefOutputHint.java
index 9012fde..0f98812 100644
--- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/MissingRefOutputHint.java
+++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/MissingRefOutputHint.java
@@ -37,7 +37,7 @@
 import org.netbeans.spi.java.hints.TriggerTreeKind;
 import org.openide.util.NbBundle.Messages;
 
-@Hint(displayName = "#DN_MissingRefOutputHint", description = "#DESC_MissingRefOutputHint", category = "general", options=Options.NO_BATCH)
+@Hint(displayName = "#DN_MissingRefOutputHint", description = "#DESC_MissingRefOutputHint", category = "general", options=Options.QUERY)
 @Messages({
     "DN_MissingRefOutputHint=Missing Reference Output",
     "DESC_MissingRefOutputHint=Checks for missing reference output in jtreg @compile tags."
diff --git a/java/java.platform.ui/nbproject/org-netbeans-modules-java-platform-ui.sig b/java/java.platform.ui/nbproject/org-netbeans-modules-java-platform-ui.sig
index b1868fd..e08bee4 100644
--- a/java/java.platform.ui/nbproject/org-netbeans-modules-java-platform-ui.sig
+++ b/java/java.platform.ui/nbproject/org-netbeans-modules-java-platform-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59
+#Version 1.60
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.platform.ui/nbproject/project.properties b/java/java.platform.ui/nbproject/project.properties
index 403cf73..446ce14 100644
--- a/java/java.platform.ui/nbproject/project.properties
+++ b/java/java.platform.ui/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/java/java.platform/nbproject/org-netbeans-modules-java-platform.sig b/java/java.platform/nbproject/org-netbeans-modules-java-platform.sig
index 661f178..d7458f8 100644
--- a/java/java.platform/nbproject/org-netbeans-modules-java-platform.sig
+++ b/java/java.platform/nbproject/org-netbeans-modules-java-platform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59
+#Version 1.60
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.platform/nbproject/project.properties b/java/java.platform/nbproject/project.properties
index 1e00b9b..683c666 100644
--- a/java/java.platform/nbproject/project.properties
+++ b/java/java.platform/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
diff --git a/java/java.platform/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQuery.java b/java/java.platform/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQuery.java
index f64cd2f..abf224a 100644
--- a/java/java.platform/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQuery.java
+++ b/java/java.platform/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQuery.java
@@ -94,22 +94,44 @@
             this.cache.put (binaryRoot, res);
             return res;
         }
-        String binaryRootS = binaryRoot.toExternalForm();
+        return searchUnregisteredPlatform(binaryRoot.toExternalForm());
+    }
+
+    static SourceForBinaryQueryImplementation2.Result searchUnregisteredPlatform(String binaryRootS) {
+        String srcZipS = null;
+        String srcZipIn = null;
         if (binaryRootS.startsWith(JAR_FILE)) {
             if (binaryRootS.endsWith(RTJAR_PATH)) {
                 //Unregistered platform
-                String srcZipS = binaryRootS.substring(4,binaryRootS.length() - RTJAR_PATH.length()) + SRC_ZIP;
-                try {
-                    URL srcZip = FileUtil.getArchiveRoot(new URL(srcZipS));
-                    FileObject fo = URLMapper.findFileObject(srcZip);
-                    if (fo != null) {
-                        return new UnregisteredPlatformResult (fo);
-                    }
-                } catch (MalformedURLException mue) {
-                    Exceptions.printStackTrace(mue);
+                srcZipS = binaryRootS.substring(4, binaryRootS.length() - RTJAR_PATH.length()) + SRC_ZIP;
+            }
+        } else if (binaryRootS.startsWith("nbjrt:")) {
+            int end = binaryRootS.indexOf('!');
+            if (end >= 0) {
+                srcZipS = binaryRootS.substring(6, end) + "lib/" + SRC_ZIP;
+                String reminder = binaryRootS.substring(end + 1);
+                final String prefix = "/modules/";
+                if (reminder.startsWith(prefix)) {
+                    srcZipIn = reminder.substring(prefix.length());
                 }
             }
         }
+        if (srcZipS != null) {
+            try {
+                URL srcZip = FileUtil.getArchiveRoot(new URL(srcZipS));
+                FileObject fo = URLMapper.findFileObject(srcZip);
+                if (fo != null) {
+                    if (srcZipIn != null) {
+                        fo = fo.getFileObject(srcZipIn);
+                    }
+                    if (fo != null) {
+                        return new UnregisteredPlatformResult(fo);
+                    }
+                }
+            } catch (MalformedURLException mue) {
+                Exceptions.printStackTrace(mue);
+            }
+        }
         return null;
     }
 
diff --git a/java/java.platform/test/unit/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQueryTest.java b/java/java.platform/test/unit/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQueryTest.java
index c5bcdc8..c42fb2f 100644
--- a/java/java.platform/test/unit/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQueryTest.java
+++ b/java/java.platform/test/unit/src/org/netbeans/modules/java/platform/queries/PlatformSourceForBinaryQueryTest.java
@@ -20,15 +20,13 @@
 package org.netbeans.modules.java.platform.queries;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
 import org.netbeans.api.java.classpath.ClassPath;
-import org.netbeans.api.java.platform.JavaPlatform;
-import org.netbeans.api.java.platform.Specification;
 import org.netbeans.api.java.platform.TestJavaPlatformProvider;
 import org.netbeans.api.java.queries.SourceForBinaryQuery;
 import org.netbeans.junit.MockServices;
@@ -37,7 +35,6 @@
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.test.TestFileUtils;
-import org.openide.modules.SpecificationVersion;
 import org.openide.util.Utilities;
 
 /**
@@ -53,6 +50,7 @@
         super.setUp();
         clearWorkDir();
         MockServices.setServices(
+            NBJRTStreamHandlerFactory.class,
             PlatformSourceForBinaryQuery.class,
             TestJavaPlatformProvider.class);
     }
@@ -82,6 +80,23 @@
         assertNull(result);
     }
 
+    public void testUnregisteredJDK11Platform() throws Exception {
+        File wd = getWorkDir();
+        FileObject wdo = FileUtil.toFileObject(wd);
+        assertNotNull(wdo);
+        FileObject p1 = wdo.createFolder("platform1");
+        FileObject fo = p1.createFolder("lib");
+        FileObject src1 = FileUtil.getArchiveRoot(createSrcZip (fo, "java.base/java/util.Map.java:class Map {}"));
+        URL url = new URL("nbjrt:" + p1.toURL() + "!/modules/java.base/");
+
+        PlatformSourceForBinaryQuery q = new PlatformSourceForBinaryQuery ();
+
+        SourceForBinaryQuery.Result result = q.findSourceRoots(url);
+        assertNotNull("Result is found", result);
+        assertEquals(1, result.getRoots().length);
+        assertEquals(src1.getFileObject("java.base"), result.getRoots()[0]);
+    }
+
     public void testTwoPlatformsoverSameSDKSourcesChange() throws Exception {
         final File binDir = new File(getWorkDir(),"boot");  //NOI18N
         binDir.mkdir();
@@ -148,10 +163,33 @@
         assertEquals(Arrays.asList(src1.getRoots()), Arrays.asList(result1.getRoots()));
         assertEquals(Arrays.asList(src1.getRoots()), Arrays.asList(result2.getRoots()));
     }
-    
 
-    private static FileObject createSrcZip (FileObject pf) throws Exception {
-        return TestFileUtils.writeZipFile(pf, "src.zip", "Test.java:class Test {}");
+
+    private static FileObject createSrcZip (FileObject pf, String... entries) throws Exception {
+        if (entries == null || entries.length == 0) {
+          entries = new String[] { "Test.java:class Test {}" };
+        }
+        return TestFileUtils.writeZipFile(pf, "src.zip", entries);
+    }
+
+    public static final class NBJRTStreamHandlerFactory implements URLStreamHandlerFactory {
+
+        @Override
+        public URLStreamHandler createURLStreamHandler(String protocol) {
+            if ("nbjrt".equals(protocol)) { //NOI18N
+                return new NBJRTURLStreamHandler();
+            }
+            return null;
+        }
+
+        private static class NBJRTURLStreamHandler extends URLStreamHandler {
+
+            @Override
+            protected URLConnection openConnection(URL u) throws IOException {
+                //Not needed
+                return null;
+            }
+        }
     }
 
 }
diff --git a/java/java.preprocessorbridge/nbproject/org-netbeans-modules-java-preprocessorbridge.sig b/java/java.preprocessorbridge/nbproject/org-netbeans-modules-java-preprocessorbridge.sig
index b300f9a..707403b 100644
--- a/java/java.preprocessorbridge/nbproject/org-netbeans-modules-java-preprocessorbridge.sig
+++ b/java/java.preprocessorbridge/nbproject/org-netbeans-modules-java-preprocessorbridge.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.66.0
+#Version 1.67.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/java.project.ui/nbproject/org-netbeans-modules-java-project-ui.sig b/java/java.project.ui/nbproject/org-netbeans-modules-java-project-ui.sig
index 53557d8..94bf3d5 100644
--- a/java/java.project.ui/nbproject/org-netbeans-modules-java-project-ui.sig
+++ b/java/java.project.ui/nbproject/org-netbeans-modules-java-project-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.92
+#Version 1.93
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/java/java.project.ui/src/org/netbeans/modules/java/project/ui/NewJavaFileWizardIterator.java b/java/java.project.ui/src/org/netbeans/modules/java/project/ui/NewJavaFileWizardIterator.java
index 72a3fbd..6790e41 100644
--- a/java/java.project.ui/src/org/netbeans/modules/java/project/ui/NewJavaFileWizardIterator.java
+++ b/java/java.project.ui/src/org/netbeans/modules/java/project/ui/NewJavaFileWizardIterator.java
@@ -440,7 +440,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA);
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps (beforeSteps, panels);
diff --git a/java/java.project/nbproject/org-netbeans-modules-java-project.sig b/java/java.project/nbproject/org-netbeans-modules-java-project.sig
index bdbb60d..2b53b9b 100644
--- a/java/java.project/nbproject/org-netbeans-modules-java-project.sig
+++ b/java/java.project/nbproject/org-netbeans-modules-java-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.89
+#Version 1.90
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/java/java.project/test/unit/src/org/netbeans/spi/java/project/support/CompilerOptionsQueryMergerTest.java b/java/java.project/test/unit/src/org/netbeans/spi/java/project/support/CompilerOptionsQueryMergerTest.java
index f4950d1..ec15369 100644
--- a/java/java.project/test/unit/src/org/netbeans/spi/java/project/support/CompilerOptionsQueryMergerTest.java
+++ b/java/java.project/test/unit/src/org/netbeans/spi/java/project/support/CompilerOptionsQueryMergerTest.java
@@ -120,7 +120,7 @@
         final CompilerOptionsQueryImpl impl1 = new CompilerOptionsQueryImpl();
         final CompilerOptionsQueryImpl impl2 = new CompilerOptionsQueryImpl();
         impl1.addRoot(root1).addArgs("a1", "a2");   //NOI18N
-        impl2.addRoot(root2).addArgs("b1", "b2");;  //NOI18N
+        impl2.addRoot(root2).addArgs("b1", "b2");  //NOI18N
         final Lookup baseLkp = Lookups.fixed(
                 impl1,
                 impl2);
diff --git a/java/java.source.base/apichanges.xml b/java/java.source.base/apichanges.xml
index bf7cc2d..27f23bf 100644
--- a/java/java.source.base/apichanges.xml
+++ b/java/java.source.base/apichanges.xml
@@ -25,6 +25,20 @@
     <apidef name="javasource_base">Java Source API</apidef>
 </apidefs>
 <changes>
+    <change id="SourceUtils.getFile">
+        <api name="javasource_base" />
+        <summary>Source file name for Element</summary>
+        <version major="1" minor="2.60"/>
+        <date day="10" month="1" year="2023"/>
+        <author login="jtulach"/>
+        <compatibility addition="yes" binary="compatible" source="compatible"/>
+        <description>
+            It is possible to hint <code>SourceUtils.getFile</code> list
+            of file names to searh for. There is also <code>SourceUtils.findSourceFileName</code>
+            to obtain name of file for an <code>Element</code>.
+        </description>
+        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
+    </change>
     <change id="TreeUtilities.isClassFile">
         <api name="javasource_base" />
         <summary>Adding TreeUtilities.isExpressionStatement(ExpressionTree)</summary>
diff --git a/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig b/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
index 335dc64..e445b2b 100644
--- a/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
+++ b/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.57.0
+#Version 2.59.0
 
 CLSS public abstract interface com.sun.source.tree.TreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.tree.TreeVisitor%1})
@@ -18,7 +18,9 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
@@ -49,6 +51,7 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
@@ -98,7 +101,9 @@
 meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
@@ -129,6 +134,7 @@
 meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
@@ -1376,6 +1382,7 @@
 meth public com.sun.source.tree.CompoundAssignmentTree CompoundAssignment(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
 meth public com.sun.source.tree.ConditionalExpressionTree ConditionalExpression(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
 meth public com.sun.source.tree.ContinueTree Continue(java.lang.CharSequence)
+meth public com.sun.source.tree.DeconstructionPatternTree RecordPattern(com.sun.source.tree.ExpressionTree,java.util.List<com.sun.source.tree.PatternTree>,com.sun.source.tree.VariableTree)
 meth public com.sun.source.tree.DoWhileLoopTree DoWhileLoop(com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
 meth public com.sun.source.tree.EmptyStatementTree EmptyStatement()
 meth public com.sun.source.tree.EnhancedForLoopTree EnhancedForLoop(com.sun.source.tree.VariableTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
diff --git a/java/java.source.base/nbproject/project.properties b/java/java.source.base/nbproject/project.properties
index 8b29bb9..dd104e3 100644
--- a/java/java.source.base/nbproject/project.properties
+++ b/java/java.source.base/nbproject/project.properties
@@ -204,3 +204,7 @@
     **/gen/TreeManipulationTest.class,\
     **/parsing/JavacParserTest.class
 
+# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
+jms-compiler.flags.jvm=
+test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/CodeStyle.java b/java/java.source.base/src/org/netbeans/api/java/source/CodeStyle.java
index 1e8859b..0e94a43 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/CodeStyle.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/CodeStyle.java
@@ -76,6 +76,7 @@
      * @deprecated Please use {@link #getDefault(javax.swing.text.Document)}
      *   or {@link #getDefault(org.openide.filesystems.FileObject)} respectively.
      */
+    @Deprecated
     public static CodeStyle getDefault(Project project) {
         return getDefault(project.getProjectDirectory());
     }
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/CompilationInfo.java b/java/java.source.base/src/org/netbeans/api/java/source/CompilationInfo.java
index 2705dd8..2d58807 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/CompilationInfo.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/CompilationInfo.java
@@ -315,6 +315,7 @@
      * the compatibility bridge, when the CompilationInfo was created by the parsing api
      * it returns null. Use {@link CompilationInfo#getSnapshot()} instead.
      */
+    @Deprecated
     public @NullUnknown JavaSource getJavaSource() {
         checkConfinement();
         return javaSource;
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
index 6b0cc4b..a902dd7 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
@@ -133,7 +133,6 @@
 import org.openide.filesystems.FileUtil;
 import org.openide.util.Exceptions;
 
-import static javax.lang.model.type.TypeKind.VOID;
 
 /**
  *
@@ -1346,6 +1345,7 @@
                 case CLASS:
                 case ENUM:
                 case INTERFACE:
+                case RECORD:
                     if (currentToImportElement.getEnclosingElement().getKind() == ElementKind.PACKAGE)
                         el = currentToImportElement.getEnclosingElement();
                     break;
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java b/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
index 2a02cdb..b2e713f 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
@@ -49,7 +49,6 @@
 import com.sun.source.util.Trees;
 import com.sun.tools.javac.api.JavacTaskImpl;
 import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Kinds;
 import com.sun.tools.javac.code.Scope.NamedImportScope;
 import com.sun.tools.javac.code.Scope.StarImportScope;
 import com.sun.tools.javac.code.Symbol;
@@ -61,19 +60,10 @@
 import com.sun.tools.javac.model.JavacElements;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
 import com.sun.tools.javac.util.Context;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.InterruptedIOException;
-import java.io.Reader;
 import java.util.function.Predicate;
 import javax.lang.model.util.ElementScanner14;
 
 import javax.swing.SwingUtilities;
-import javax.swing.text.ChangedCharSetException;
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLEditorKit;
-import javax.swing.text.html.parser.ParserDelegator;
 import javax.tools.JavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.Diagnostic;
@@ -81,16 +71,13 @@
 
 import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
-import org.netbeans.api.annotations.common.NullAllowed;
 import org.netbeans.api.editor.mimelookup.MimeLookup;
 import org.netbeans.api.editor.mimelookup.MimePath;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.classpath.JavaClassPathConstants;
 import org.netbeans.api.java.lexer.JavaTokenId;
-import org.netbeans.api.java.queries.CompilerOptionsQuery;
 import org.netbeans.api.java.queries.JavadocForBinaryQuery;
 import org.netbeans.api.java.queries.SourceForBinaryQuery;
-import org.netbeans.api.java.queries.SourceLevelQuery;
 import org.netbeans.api.java.source.ClasspathInfo.PathKind;
 import org.netbeans.api.java.source.JavaSource.Phase;
 import org.netbeans.api.java.source.matching.Matcher;
@@ -125,7 +112,6 @@
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.URLMapper;
-import org.openide.modules.SpecificationVersion;
 import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
 import org.openide.util.Pair;
@@ -161,7 +147,7 @@
         }
         return null;
     }
-    
+
     /**
      * Find duplicates for provided expression
      * @param info CompilationInfo
@@ -173,14 +159,14 @@
      */
     public static Set<TreePath> computeDuplicates(CompilationInfo info, TreePath searchingFor, TreePath scope, AtomicBoolean cancel) {
         Set<TreePath> result = new HashSet<>();
-        
+
         for (Occurrence od : Matcher.create(info).setCancel(cancel).setSearchRoot(scope).match(Pattern.createSimplePattern(searchingFor))) {
             result.add(od.getOccurrenceRoot());
         }
 
         return result;
-    }    
-    
+    }
+
     public static boolean checkTypesAssignable(CompilationInfo info, TypeMirror from, TypeMirror to) {
         Context c = ((JavacTaskImpl) info.impl.getJavacTask()).getContext();
         if (from.getKind() == TypeKind.TYPEVAR) {
@@ -194,7 +180,7 @@
         }
         return Check.instance(c).checkType(null, (Type)from, (Type)to).getKind() != TypeKind.ERROR;
     }
-    
+
     public static TypeMirror getBound(WildcardType wildcardType) {
         Type.TypeVar bound = ((Type.WildcardType)wildcardType).bound;
         return bound != null ? bound.getUpperBound() : null;
@@ -203,14 +189,14 @@
     /**
      * Returns a list of completions for an annotation attribute value suggested by
      * annotation processors.
-     * 
+     *
      * @param info the CompilationInfo used to resolve annotation processors
      * @param element the element being annotated
      * @param annotation the (perhaps partial) annotation being applied to the element
      * @param member the annotation member to return possible completions for
      * @param userText source code text to be completed
      * @return suggested completions to the annotation member
-     * 
+     *
      * @since 0.57
      */
     public static List<? extends Completion> getAttributeValueCompletions(CompilationInfo info, Element element, AnnotationMirror annotation, ExecutableElement member, String userText) {
@@ -266,23 +252,44 @@
     public static @Deprecated TypeElement getEnclosingTypeElement( Element element ) throws IllegalArgumentException {
         return ElementUtilities.enclosingTypeElementImpl(element);
     }
-    
+
     public static TypeElement getOutermostEnclosingTypeElement( Element element ) {
-	
+
 	Element ec =  getEnclosingTypeElement( element );
 	if (ec == null) {
 	    ec = element;
 	}
-	
-	while( ec.getEnclosingElement().getKind().isClass() || 
+
+	while( ec.getEnclosingElement().getKind().isClass() ||
 	       ec.getEnclosingElement().getKind().isInterface() ) {
-	
+
 	    ec = ec.getEnclosingElement();
 	}
-		
+
 	return (TypeElement)ec;
     }
 
+    /** Finds a source name that the {@code element} originates from. In case
+     * of {@code element} being created via {@link JavaSource#forFileObject(org.openide.filesystems.FileObject) source file}
+     * it should be the name (without any path) of the source file. For elements
+     * originating from {@code .class} file the returned value corresponds to
+     * the value of {@code SourceFile} attribute, if present.
+     *
+     * @param element element of a source file
+     * @return the (short) name of source file that this elements originates
+     *    from or {@code null}, if the name isn't known
+     * @since 2.60
+     */
+    public static String findSourceFileName(Element element) {
+        if (element instanceof ClassSymbol) {
+            ClassSymbol s = (ClassSymbol) element;
+            if (s.sourcefile != null) {
+                return s.sourcefile.getName();
+            }
+        }
+        return null;
+    }
+
     /**
      * Returns an array containing the JVM signature of the {@link ElementHandle}.
      * @param handle to obtain the JVM signature for.
@@ -305,11 +312,11 @@
     /**Resolve full qualified name in the given context. Adds import statement as necessary.
      * Returns name that resolved to a given FQN in given context (either simple name
      * or full qualified name). Handles import conflicts.
-     * 
+     *
      * <br><b>Note:</b> if the <code>info</code> passed to this method is not an instance of {@link WorkingCopy},
      * missing import statement is added from a separate modification task executed asynchronously.
      * <br><b>Note:</b> after calling this method, it is not permitted to rewrite copy.getCompilationUnit().
-     * 
+     *
      * @param info CompilationInfo over which the method should work
      * @param context in which the fully qualified should be resolved
      * @param fqn the fully qualified name to resolve
@@ -325,7 +332,7 @@
         if (fqn == null) {
             throw new NullPointerException();
         }
-        
+
         CodeStyle cs = DiffContext.getCodeStyle(info);
         if (cs.useFQNs()) {
             return fqn;
@@ -399,7 +406,7 @@
         if (clashing || toImport == null) {
             return fqn;
         }
-        
+
         //not imported/visible so far by any means:
         String topLevelLanguageMIMEType = info.getFileObject().getMIMEType();
         if ("text/x-java".equals(topLevelLanguageMIMEType)){ //NOI18N
@@ -465,24 +472,25 @@
             for (ImportProcessor importsProcesor : instances) {
                 importsProcesor.addImport(info.getDocument(), fqn);
             }
-            
+
         }
         return sqName.toString();
     }
-    
+
     /**
      * Returns a {@link FileObject} in which the Element is defined.
      * @param element for which the {@link FileObject} should be located
      * @param cpInfo the classpaths context
      * @return the defining {@link FileObject} or null if it cannot be
      * found
-     * 
+     *
      * @deprecated use {@link getFile(ElementHandle, ClasspathInfo)}
      */
+    @Deprecated
     public static FileObject getFile (Element element, final ClasspathInfo cpInfo) {
         Parameters.notNull("element", element); //NOI18N
         Parameters.notNull("cpInfo", cpInfo);   //NOI18N
-        
+
         Element prev = isPkgOrMdl(element.getKind()) ? element : null;
         while (!isPkgOrMdl(element.getKind())) {
             prev = element;
@@ -491,11 +499,11 @@
         final ElementKind kind = prev.getKind();
         if (!(kind.isClass() || kind.isInterface() || isPkgOrMdl(kind))) {
             return null;
-        }        
+        }
         final ElementHandle<? extends Element> handle = ElementHandle.create(prev);
-        return getFile (handle, cpInfo);
+        return getFile (handle, cpInfo, null);
     }
-    
+
     /**
      * Returns a {@link FileObject} of the source file in which the handle is declared.
      * @param handle to find the {@link FileObject} for
@@ -503,17 +511,29 @@
      * @return {@link FileObject} or null when the source file cannot be found
      */
     public static FileObject getFile (final ElementHandle<? extends Element> handle, final ClasspathInfo cpInfo) {
+      return getFile(handle, cpInfo, new String[0]);
+    }
+
+    /**
+     * Returns a {@link FileObject} of the source file in which the handle is declared.
+     * @param handle to find the {@link FileObject} for
+     * @param cpInfo classpaths for resolving handle
+     * @param names suggested file names
+     * @return {@link FileObject} or null when the source file cannot be found
+     * @since 2.60
+     */
+    public static FileObject getFile (final ElementHandle<? extends Element> handle, final ClasspathInfo cpInfo, String... names) {
         Parameters.notNull("handle", handle);
-        Parameters.notNull("cpInfo", cpInfo);        
+        Parameters.notNull("cpInfo", cpInfo);
         try {
             boolean pkg = handle.getKind() == ElementKind.PACKAGE;
             String[] signature = handle.getSignature();
             assert signature.length >= 1;
-            final ClassPath[] cps = 
+            final ClassPath[] cps =
                 new ClassPath[] {
                     cpInfo.getClassPath(ClasspathInfo.PathKind.SOURCE),
                     createClassPath(cpInfo,ClasspathInfo.PathKind.OUTPUT),
-                    createClassPath(cpInfo,ClasspathInfo.PathKind.BOOT),                    
+                    createClassPath(cpInfo,ClasspathInfo.PathKind.BOOT),
                     createClassPath(cpInfo,ClasspathInfo.PathKind.COMPILE),
                 };
             String pkgName, className = null;
@@ -536,7 +556,7 @@
                     JavaFileObject jfo = fm.getJavaFileForInput(loc, className, JavaFileObject.Kind.CLASS);
                     FileObject fo = jfo != null ? URLMapper.findFileObject(jfo.toUri().toURL()) : null;
                     if (fo != null) {
-                        FileObject foundFo = findSourceForBinary(fo.getParent(), fo, signature[0], pkgName, className, false);
+                        FileObject foundFo = findSourceForBinary(fo.getParent(), fo, signature[0], pkgName, className, false, names);
                         if (foundFo != null) {
                             return foundFo;
                         }
@@ -555,12 +575,12 @@
                 }
             }
             final List<Pair<FileObject,ClassPath>> fos = findAllResources(pkgName, filter, cps);
-            for (Pair<FileObject,ClassPath> pair : fos) {                
+            for (Pair<FileObject,ClassPath> pair : fos) {
                 FileObject root = pair.second().findOwnerRoot(pair.first());
                 if (root == null) {
                     continue;
                 }
-                FileObject foundFo = findSourceForBinary(root, pair.first(), signature[0], pkgName, className, pkg);
+                FileObject foundFo = findSourceForBinary(root, pair.first(), signature[0], pkgName, className, pkg, names);
                 if (foundFo != null) {
                     return foundFo;
                 }
@@ -568,21 +588,25 @@
         } catch (IOException e) {
             Exceptions.printStackTrace(e);
         }
-        return null;        
+        return null;
     }
 
-    private static FileObject findSourceForBinary(FileObject binaryRoot, FileObject binary, String signature, String pkgName, String className, boolean isPkg) throws IOException {
-        FileObject[] sourceRoots = SourceForBinaryQuery.findSourceRoots(binaryRoot.toURL()).getRoots();                        
+    private static FileObject findSourceForBinary(FileObject binaryRoot, FileObject binary, String signature, String pkgName, String className, boolean isPkg, String[] names) throws IOException {
+        FileObject[] sourceRoots = SourceForBinaryQuery.findSourceRoots(binaryRoot.toURL()).getRoots();
         ClassPath sourcePath = ClassPathSupport.createClassPath(sourceRoots);
         LinkedList<FileObject> folders = new LinkedList<>(sourcePath.findAllResources(pkgName));
         if (isPkg) {
             return folders.isEmpty() ? binary : folders.get(0);
         }
         final boolean caseSensitive = isCaseSensitive ();
-        final Object fnames = getSourceFileNames(className);
+        final List<String> fnames = new ArrayList<>();
+        fnames.addAll(getSourceFileNames(className));
+        if (names != null) {
+            fnames.addAll(Arrays.asList(names));
+        }
         folders.addFirst(binary);
-        if (fnames instanceof String) {
-            FileObject match = findMatchingChild((String)fnames, folders, caseSensitive);
+        if (fnames.size() == 1) {
+            FileObject match = findMatchingChild(fnames.get(0), folders, caseSensitive);
             if (match != null) {
                 return match;
             }
@@ -600,7 +624,7 @@
         }
         return sourceRoots.length == 0 ? findSource(signature,binaryRoot) : findSource(signature,sourceRoots);
     }
-    
+
     private static FileObject findMatchingChild(String sourceFileName, Collection<FileObject> folders, boolean caseSensitive) {
         final Match matchSet = caseSensitive ? new CaseSensitiveMatch(sourceFileName) : new CaseInsensitiveMatch(sourceFileName);
         for (FileObject folder : folders) {
@@ -612,7 +636,7 @@
         }
         return null;
     }
-    
+
     @NonNull
     private static List<Pair<FileObject, ClassPath>> findAllResources(
             @NonNull final String resourceName,
@@ -660,6 +684,9 @@
         }
 
         final boolean apply(final FileObject fo) {
+            if (fo.getNameExt().equals(name)) {
+                return true;
+            }
             final String foName = fo.getName();
             return match(foName,name) && isJava(fo);
         }
@@ -694,9 +721,9 @@
             return name1.equalsIgnoreCase(name2);
         }
     }
-    
+
     /**
-     * Finds {@link URL} of a javadoc page for given element when available. This method 
+     * Finds {@link URL} of a javadoc page for given element when available. This method
      * uses {@link JavadocForBinaryQuery} to find the javadoc page for the give element.
      * For {@link PackageElement} it returns the package-summary.html for given package.
      * @param element to find the Javadoc for
@@ -706,7 +733,7 @@
      * or {@link SourceUtils#getPreferredJavadoc(javax.lang.model.element.Element)}
      */
     @Deprecated
-    public static URL getJavadoc (final Element element, final ClasspathInfo cpInfo) {      
+    public static URL getJavadoc (final Element element, final ClasspathInfo cpInfo) {
         final Collection<? extends URL> res = getJavadoc(element);
         return res.isEmpty() ?
             null :
@@ -735,7 +762,7 @@
      * Finds {@link URL}s of a javadoc page for given element when available. This method
      * uses {@link JavadocForBinaryQuery} to find the javadoc page for the give element.
      * For {@link PackageElement} it returns the package-summary.html for given package.
-     * Due to the https://bugs.openjdk.java.net/browse/JDK-8025633 there are more possible 
+     * Due to the https://bugs.openjdk.java.net/browse/JDK-8025633 there are more possible
      * URLs for {@link ExecutableElement}s, this method returns all of them.
      * @param element to find the Javadoc for
      * @return the URLs of the javadoc page or an empty collection when the javadoc is not available.
@@ -753,7 +780,7 @@
             return page.getLocations();
         }
     }
-    
+
     /**
      * Tests whether the initial scan is in progress.
      */
@@ -762,11 +789,12 @@
     }
 
     /**
-     * Waits for the end of the initial scan, this helper method 
+     * Waits for the end of the initial scan, this helper method
      * is designed for tests which require to wait for end of initial scan.
      * @throws InterruptedException is thrown when the waiting thread is interrupted.
      * @deprecated use {@link JavaSource#runWhenScanFinished}
      */
+    @Deprecated
     public static void waitScanFinished () throws InterruptedException {
         try {
             class T extends UserTask implements ClasspathInfoProvider {
@@ -789,8 +817,8 @@
         } catch (Exception ex) {
         }
     }
-    
-    
+
+
     /**
      * Returns the dependent source path roots for given source root.
      * It returns all the open project source roots which have either
@@ -805,7 +833,7 @@
     public static Set<URL> getDependentRoots (@NonNull final URL root) {
         return getDependentRoots(root, true);
     }
-    
+
     /**
      * Returns the dependent source path roots for given source root. It returns
      * all the source roots which have either direct or transitive dependency on
@@ -830,7 +858,7 @@
             return Collections.<URL>singleton(root);
         }
     }
-        
+
     //Helper methods
 
     /**
@@ -857,13 +885,13 @@
         if (fo.isVirtual()) {
             throw new IllegalArgumentException ("FileObject : " + FileUtil.getFileDisplayName(fo) + " is virtual.");  //NOI18N
         }
-        final JavaSource js = JavaSource.forFileObject(fo);        
+        final JavaSource js = JavaSource.forFileObject(fo);
         if (js == null) {
             throw new IllegalArgumentException ();
         }
         try {
             final LinkedHashSet<ElementHandle<TypeElement>> result = new LinkedHashSet<> ();
-            js.runUserActionTask(new Task<CompilationController>() {            
+            js.runUserActionTask(new Task<CompilationController>() {
                 @Override
                 public void run(final CompilationController control) throws Exception {
                     if (control.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED).compareTo (JavaSource.Phase.ELEMENTS_RESOLVED)>=0) {
@@ -890,16 +918,16 @@
                             }
                         }
                     }
-                }                
+                }
 
             }, true);
             return result;
         } catch (IOException ioe) {
             Exceptions.printStackTrace(ioe);
             return Collections.<ElementHandle<TypeElement>>emptySet();
-        }		
+        }
     }
-    
+
     /**
      * Returns true when the class contains main method.
      * @param qualifiedName the fully qualified name of class
@@ -909,7 +937,7 @@
     public static boolean isMainClass (final String qualifiedName, ClasspathInfo cpInfo) {
         return isMainClass(qualifiedName, cpInfo, false);
     }
-    
+
     /**
      * Returns true when the class contains main method.
      * @param qualifiedName the fully qualified name of class
@@ -951,7 +979,7 @@
                 LOG.log(Level.INFO, "Ignoring fast check for root: {0} due to: {1}", new Object[]{entry.getURL().toString(), e.getMessage()}); //NOI18N
             }
         }
-        
+
         final boolean[] result = new boolean[]{false};
         if (!optimistic) {
             //Slow path fallback - for main in libraries
@@ -983,7 +1011,7 @@
         }
         return result[0];
     }
-    
+
     /**
      * Returns true if the method is a main method
      * @param method to be checked
@@ -1015,7 +1043,7 @@
         }
         return "java.lang.String".contentEquals(((TypeElement)((DeclaredType)compound).asElement()).getQualifiedName());   //NOI18N
     }
-    
+
     /**
      * Returns classes declared under the given source roots which have the main method.
      * @param sourceRoots the source roots
@@ -1079,7 +1107,7 @@
     }
 
     private static boolean isIncluded (final ElementHandle<TypeElement> element, final ClasspathInfo cpInfo) {
-        FileObject fobj = getFile (element,cpInfo);
+        FileObject fobj = getFile(element,cpInfo);
         if (fobj == null) {
             //Not source
             return true;
@@ -1093,20 +1121,20 @@
         }
         return true;
     }
-    
+
     private static boolean isCaseSensitive () {
         return ! new File ("a").equals (new File ("A"));    //NOI18N
     }
-    
+
     /**
-     * Returns candidate filenames given a classname. The return value is either 
+     * Returns candidate filenames given a classname. The return value is either
      * a String (top-level class, no $) or List&lt;String> as the JLS permits $ in
-     * class names. 
+     * class names.
      */
-    private static Object getSourceFileNames (String classFileName) {
+    private static List<String> getSourceFileNames(String classFileName) {
         int index = classFileName.lastIndexOf('$');
         if (index == -1) {
-            return classFileName;
+            return Collections.singletonList(classFileName);
         }
         List<String> ll = new ArrayList<>(3);
         ll.add(classFileName);
@@ -1116,18 +1144,18 @@
         }
         return ll;
     }
-        
+
     /**
      * Resolves all captured type variables to their respective wildcards in the given type.
      * @param info CompilationInfo over which the method should work
      * @param tm type to resolve
      * @return resolved type
-     * 
+     *
      * @since 0.136
      */
     public static TypeMirror resolveCapturedType(CompilationInfo info, TypeMirror tm) {
         TypeMirror type = resolveCapturedTypeInt(info, tm);
-        
+
         if (type.getKind() == TypeKind.WILDCARD) {
             TypeMirror tmirr = ((WildcardType) type).getExtendsBound();
             tmirr = tmirr != null ? tmirr : ((WildcardType) type).getSuperBound();
@@ -1137,23 +1165,23 @@
                 TypeElement tel = info.getElements().getTypeElement("java.lang.Object"); // NOI18N
                 return tel == null ? null : tel.asType();
             }
-                
+
         }
-        
+
         return type;
     }
-    
+
     private static TypeMirror resolveCapturedTypeInt(CompilationInfo info, TypeMirror tm) {
         if (tm == null) {
             return tm;
         }
-        
+
         TypeMirror orig = resolveCapturedType(tm);
 
         if (orig != null) {
             tm = orig;
         }
-        
+
         if (tm.getKind() == TypeKind.WILDCARD) {
             TypeMirror extendsBound = ((WildcardType) tm).getExtendsBound();
             TypeMirror rct = resolveCapturedTypeInt(info, extendsBound != null ? extendsBound : ((WildcardType) tm).getSuperBound());
@@ -1161,20 +1189,20 @@
                 return rct.getKind() == TypeKind.WILDCARD ? rct : info.getTypes().getWildcardType(extendsBound != null ? rct : null, extendsBound == null ? rct : null);
             }
         }
-        
+
         if (tm.getKind() == TypeKind.DECLARED) {
             DeclaredType dt = (DeclaredType) tm;
             TypeElement el = (TypeElement) dt.asElement();
             if (((DeclaredType)el.asType()).getTypeArguments().size() != dt.getTypeArguments().size()) {
                 return info.getTypes().getDeclaredType(el);
             }
-            
+
             List<TypeMirror> typeArguments = new LinkedList<>();
-            
+
             for (TypeMirror t : dt.getTypeArguments()) {
                 typeArguments.add(resolveCapturedTypeInt(info, t));
             }
-            
+
             final TypeMirror enclosingType = dt.getEnclosingType();
             if (enclosingType.getKind() == TypeKind.DECLARED) {
                 return info.getTypes().getDeclaredType((DeclaredType) enclosingType, el, typeArguments.toArray(new TypeMirror[0]));
@@ -1196,7 +1224,7 @@
                     return info.getTypes().getArrayType(componentType);
             }
         }
-        
+
         return tm;
     }
     /**
@@ -1209,7 +1237,7 @@
             return null;
         }
     }
-    
+
     /**
      * Returns all elements of the given scope that are declared after given position in a source.
      * @param path to the given search scope
@@ -1217,13 +1245,13 @@
      * @param sourcePositions
      * @param trees
      * @return collection of forward references
-     * 
+     *
      * @since 0.136
      */
     public static Collection<? extends Element> getForwardReferences(TreePath path, int pos, SourcePositions sourcePositions, Trees trees) {
         HashSet<Element> refs = new HashSet<>();
         Element el;
-        
+
         while(path != null) {
             switch(path.getLeaf().getKind()) {
                 case VARIABLE:
@@ -1252,13 +1280,13 @@
                         if (el != null) {
                             refs.add(el);
                         }
-                    }                        
+                    }
             }
             path = path.getParentPath();
         }
         return refs;
     }
-    
+
     /**
      * Returns names of all modules within given scope.
      * @param info the CompilationInfo used to resolve modules
@@ -1333,9 +1361,9 @@
 
     // --------------- Helper methods of getFile () -----------------------------
     private static ClassPath createClassPath (ClasspathInfo cpInfo, PathKind kind) throws MalformedURLException {
-	return ClasspathInfoAccessor.getINSTANCE().getCachedClassPath(cpInfo, kind);	
-    }    
-    
+	return ClasspathInfoAccessor.getINSTANCE().getCachedClassPath(cpInfo, kind);
+    }
+
     // --------------- End of getFile () helper methods ------------------------------
 
     @NonNull
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
index 73a7886..d0eecdb 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
@@ -981,6 +981,7 @@
      * @return true if {@code member} is accessible in {@code type}
      * @deprecated since 0.111, {@link Trees#isAccessible(Scope, Element, DeclaredType)} should be used instead.
      */
+    @Deprecated
     public boolean isAccessible(Scope scope, Element member, TypeMirror type) {
         return type instanceof DeclaredType ? info.getTrees().isAccessible(scope, member, (DeclaredType)type) : false;
     }
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java b/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
index 070d925..287a55e 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
@@ -20,13 +20,13 @@
 
 import com.sun.tools.javac.code.Symbol.ClassSymbol;
 import java.awt.EventQueue;
+import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.InterruptedIOException;
-import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URI;
@@ -261,10 +261,21 @@
                     try {
                         String charset = null;
                         for (;;) {
-                            try (Reader reader = charset == null?
+                            try (BufferedReader reader = new BufferedReader(charset == null ?
                                     new InputStreamReader(this.openStream()) :
-                                    new InputStreamReader(this.openStream(), charset)){
+                                    new InputStreamReader(this.openStream(), charset))) {
                                 if (urls.size() > 1) {
+                                    reader.mark(256);
+                                    String line = reader.readLine();
+                                    if (line.contains("<!DOCTYPE") && line.contains("HTML>")) {
+                                        index = 2;
+                                        if (jdocRoot != null) {
+                                            jdocCache.put(jdocRoot,index);
+                                        }
+                                        break;
+                                    } else {
+                                        reader.reset();
+                                    }
                                     final HTMLEditorKit.Parser parser = new ParserDelegator();
                                     final int[] state = {-1};
                                     try {
@@ -936,10 +947,6 @@
 
         FragmentBuilder(@NonNull ElementKind kind) {
             int size = FILTERS.size();
-            // JDK-8046068 changed the constructor format from "Name" to "<init>"
-            if (kind == ElementKind.CONSTRUCTOR) {
-                size *= 2;
-            }
             this.sbs = new StringBuilder[size];
             for (int i = 0; i < sbs.length; i++) {
                 sbs[i] = new StringBuilder();
@@ -948,24 +955,18 @@
         
         @NonNull
         FragmentBuilder constructor(@NonNull final CharSequence text) {
-            CharSequence constructor = text;
-            for (int i = 0; i < sbs.length;) {
-                for (int j = 0; j < FILTERS.size(); j++) {
-                    sbs[i].append(FILTERS.get(j).convert(constructor));
-                    i++;
-                }
-                constructor = "<init>";
+            for (int i = 0; i < sbs.length; i++) {
+                // JDK-8046068 changed the constructor format from "Name" to "<init>"
+                CharSequence constructor = i >= 2 ? "<init>" : text;
+                sbs[i].append(FILTERS.get(i).convert(constructor));
             }
             return this;
         }
 
         @NonNull
         FragmentBuilder append(@NonNull final CharSequence text) {
-            for (int i = 0; i < sbs.length;) {
-                for (int j = 0; j < FILTERS.size(); j++) {
-                    sbs[i].append(FILTERS.get(j).convert(text));
-                    i++;
-                }
+            for (int i = 0; i < sbs.length; i++) {
+                sbs[i].append(FILTERS.get(i).convert(text));
             }
             return this;
         }
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java b/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
index a6efd50..252df8a 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
@@ -564,7 +564,7 @@
         void invalidate() {
             super.invalidate();
             if (this.copsCl != null) {
-                this.cops.removeChangeListener(this.copsCl);;
+                this.cops.removeChangeListener(this.copsCl);
             }
             if (this.resCl != null) {
                 this.res.removeChangeListener(this.resCl);
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java b/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java
new file mode 100644
index 0000000..8a8874b
--- /dev/null
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.source.classpath;
+
+import java.net.URL;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.java.queries.SourceForBinaryQuery;
+import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation;
+import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation2;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.filesystems.URLMapper;
+import org.openide.util.lookup.ServiceProvider;
+
+@ServiceProvider(service = SourceForBinaryQueryImplementation.class, position = 100000)
+public final class SourceNextToBinaryQueryImpl implements SourceForBinaryQueryImplementation {
+    @Override
+    public SourceForBinaryQuery.Result findSourceRoots(URL binaryRoot) {
+        URL file = FileUtil.getArchiveFile(binaryRoot);
+        if (file != null) {
+            FileObject fo = URLMapper.findFileObject(file);
+            if (fo != null) {
+                FileObject src = fo.getParent().getFileObject(fo.getName() + "-sources", fo.getExt());
+                if (src != null) {
+                    return new SourceForBinaryQueryImplementation2.Result() {
+                        @Override
+                        public boolean preferSources() {
+                            return false;
+                        }
+
+                        @Override
+                        public FileObject[] getRoots() {
+                            return new FileObject[]{FileUtil.getArchiveRoot(src)};
+                        }
+
+                        @Override
+                        public void addChangeListener(ChangeListener l) {
+                        }
+
+                        @Override
+                        public void removeChangeListener(ChangeListener l) {
+                        }
+                    };
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/matching/CopyFinder.java b/java/java.source.base/src/org/netbeans/modules/java/source/matching/CopyFinder.java
index 8c87ca2..e1cf744 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/matching/CopyFinder.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/matching/CopyFinder.java
@@ -24,6 +24,7 @@
 import com.sun.source.tree.AssertTree;
 import com.sun.source.tree.AssignmentTree;
 import com.sun.source.tree.BinaryTree;
+import com.sun.source.tree.BindingPatternTree;
 import com.sun.source.tree.BlockTree;
 import com.sun.source.tree.BreakTree;
 import com.sun.source.tree.CaseTree;
@@ -53,6 +54,7 @@
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.ParameterizedTypeTree;
 import com.sun.source.tree.ParenthesizedTree;
+import com.sun.source.tree.PatternTree;
 import com.sun.source.tree.PrimitiveTypeTree;
 import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.Scope;
@@ -71,7 +73,6 @@
 import com.sun.source.tree.WildcardTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.tools.javac.api.JavacScope;
 import com.sun.tools.javac.code.Symbol.ClassSymbol;
 import com.sun.tools.javac.comp.AttrContext;
 import com.sun.tools.javac.comp.Enter;
@@ -1518,6 +1519,13 @@
         if (!scan(node.getExpression(), t.getExpression(), p))
             return false;
 
+        Tree nodePattern = node.getPattern();
+        Tree pPattern = t.getPattern();
+
+        if (nodePattern != null || pPattern != null) {
+            return scan(nodePattern, pPattern, p);
+        }
+
         return scan(node.getType(), t.getType(), p);
     }
 
@@ -1642,6 +1650,16 @@
         return node.getName().contentEquals(t.getName());
     }
 
+    public Boolean visitBindingPattern(BindingPatternTree node, TreePath p) {
+        if (p == null) {
+            return super.visitBindingPattern(node, p);
+        }
+
+        BindingPatternTree t = (BindingPatternTree) p.getLeaf();
+
+        return scan(node.getVariable(), t.getVariable(), p);
+    }
+
 //
 //    public Boolean visitOther(Tree node, TreePath p) {
 //        throw new UnsupportedOperationException("Not supported yet.");
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
index e04f054..063fc0a 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
@@ -419,6 +419,7 @@
         private static final String JDOC_THROWS_TAG = "@throws"; //NOI18N
         private static final String JDOC_VALUE_TAG = "@value"; //NOI18N
         private static final String JDOC_SNIPPET_TAG = "@snippet"; //NOI18N
+        private static final String JDOC_SUMMARY_TAG = "@summary"; //NOI18N
         private static final String ERROR = "<error>"; //NOI18N
 
         private final String fText;
@@ -4835,6 +4836,7 @@
                                     || JDOC_DOCROOT_TAG.equalsIgnoreCase(tokenText)
                                     || JDOC_INHERITDOC_TAG.equalsIgnoreCase(tokenText)
                                     || JDOC_VALUE_TAG.equalsIgnoreCase(tokenText)
+                                    || JDOC_SUMMARY_TAG.equalsIgnoreCase(tokenText)
                                     || JDOC_LITERAL_TAG.equalsIgnoreCase(tokenText)) {
                                 insideTag = true;
                                 addMark(Pair.of(currWSOffset >= 0 ? currWSOffset : javadocTokens.offset() - offset, 5), marks, state);
diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
index 2c7523e..0a12ba3 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
@@ -19,7 +19,6 @@
 
 package org.netbeans.api.java.source;
 
-import com.sun.source.tree.Tree;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -53,6 +52,7 @@
 import org.netbeans.api.java.source.ClasspathInfo.PathKind;
 import org.netbeans.modules.java.source.ClassIndexTestCase;
 import org.netbeans.modules.java.source.TestUtil;
+import org.netbeans.modules.java.source.parsing.ClassParser;
 import org.netbeans.modules.java.source.parsing.ParameterNameProviderImpl;
 import org.netbeans.modules.java.source.usages.ClasspathInfoAccessor;
 import org.netbeans.modules.parsing.api.indexing.IndexingManager;
@@ -69,7 +69,7 @@
  *
  * @author Jan Lahoda
  */
-public class SourceUtilsTest extends ClassIndexTestCase {       
+public class SourceUtilsTest extends ClassIndexTestCase {
 
     private JavaSource js;
     private CompilationInfo info;
@@ -77,7 +77,7 @@
     static {
         System.setProperty("org.openide.util.Lookup", SourceUtilsTestUtil.class.getName());
     }
-    
+
     public SourceUtilsTest(String testName) {
         super(testName);
     }
@@ -91,26 +91,28 @@
                     CPProvider.getDefault()
                 });
     }
-        
+
     public void testGetEnclosingTypeElement() throws Exception {
         //only a scatch of the test, add testcases as needed:
         prepareTest();
-        
+
         TypeElement test = info.getElements().getTypeElement("sourceutils.TestGetEnclosingTypeElement");
-        
+
+        assertEquals("TestGetEnclosingTypeElement.java", SourceUtils.findSourceFileName(test));
+
         assertNotNull(test);
-        
+
         ExecutableElement testMethod = ElementFilter.methodsIn(test.getEnclosedElements()).get(0);
 //        TypeElement classInMethod = ElementFilter.typesIn(testMethod.getEnclosedElements()).get(0);
-//        ExecutableElement classInMethodMethod = ElementFilter.methodsIn(classInMethod.getEnclosedElements()).get(0);;
-//        VariableElement classInMethodField = ElementFilter.fieldsIn(classInMethod.getEnclosedElements()).get(0);;
+//        ExecutableElement classInMethodMethod = ElementFilter.methodsIn(classInMethod.getEnclosedElements()).get(0);
+//        VariableElement classInMethodField = ElementFilter.fieldsIn(classInMethod.getEnclosedElements()).get(0);
 //        TypeElement classInMethodNestedClass = ElementFilter.typesIn(classInMethod.getEnclosedElements()).get(0);
         VariableElement testField = ElementFilter.fieldsIn(test.getEnclosedElements()).get(0);
         TypeElement nestedClass = ElementFilter.typesIn(test.getEnclosedElements()).get(0);
         ExecutableElement nestedClassMethod = ElementFilter.methodsIn(nestedClass.getEnclosedElements()).get(0);
         VariableElement nestedClassField = ElementFilter.fieldsIn(nestedClass.getEnclosedElements()).get(0);
         TypeElement nestedClassNestedClass = ElementFilter.typesIn(nestedClass.getEnclosedElements()).get(0);
-        
+
         assertEquals("TestGetEnclosingTypeElement", test.getSimpleName().toString());
         assertEquals("testMethod", testMethod.getSimpleName().toString());
 //        assertEquals("classInMethod", classInMethod.getSimpleName().toString());
@@ -122,7 +124,7 @@
         assertEquals("nestedClassMethod", nestedClassMethod.getSimpleName().toString());
         assertEquals("nestedClassField", nestedClassField.getSimpleName().toString());
         assertEquals("NestedClassNestedClass", nestedClassNestedClass.getSimpleName().toString());
-        
+
         assertEquals(null, SourceUtils.getEnclosingTypeElement(test));
         assertEquals(test, SourceUtils.getEnclosingTypeElement(testMethod));
         assertEquals(test, SourceUtils.getEnclosingTypeElement(testField));
@@ -130,7 +132,7 @@
         assertEquals(nestedClass, SourceUtils.getEnclosingTypeElement(nestedClassMethod));
         assertEquals(nestedClass, SourceUtils.getEnclosingTypeElement(nestedClassField));
         assertEquals(nestedClass, SourceUtils.getEnclosingTypeElement(nestedClassNestedClass));
-        
+
         try {
             SourceUtils.getEnclosingTypeElement(test.getEnclosingElement());
             fail();
@@ -138,21 +140,21 @@
             //good.
         }
     }
-    
+
     public void testIsDeprecated1() throws Exception {
         prepareTest();
-        
+
         TypeElement test = info.getElements().getTypeElement("sourceutils.TestIsDeprecated1");
-        
+
         assertNotNull(test);
-        
+
         ExecutableElement methodDeprecated = findElementBySimpleName("methodDeprecated", ElementFilter.methodsIn(test.getEnclosedElements()));
         ExecutableElement methodNotDeprecated = findElementBySimpleName("methodNotDeprecated", ElementFilter.methodsIn(test.getEnclosedElements()));
         VariableElement fieldDeprecated = findElementBySimpleName("fieldDeprecated", ElementFilter.fieldsIn(test.getEnclosedElements()));
         VariableElement fieldNotDeprecated = findElementBySimpleName("fieldNotDeprecated", ElementFilter.fieldsIn(test.getEnclosedElements()));
         TypeElement classDeprecated = findElementBySimpleName("classDeprecated", ElementFilter.typesIn(test.getEnclosedElements()));
         TypeElement classNotDeprecated = findElementBySimpleName("classNotDeprecated", ElementFilter.typesIn(test.getEnclosedElements()));
-        
+
         assertFalse(info.getElements().isDeprecated(methodNotDeprecated));
         assertFalse(info.getElements().isDeprecated(fieldNotDeprecated));
         assertFalse(info.getElements().isDeprecated(classNotDeprecated));
@@ -161,21 +163,21 @@
         assertTrue(info.getElements().isDeprecated(fieldDeprecated));
         assertTrue(info.getElements().isDeprecated(classDeprecated));
     }
-    
+
     public void testIsDeprecated2() throws Exception {
         prepareTest();
-        
+
         TypeElement test = info.getElements().getTypeElement("sourceutils.TestIsDeprecated2");
-        
+
         assertNotNull(test);
-        
+
         ExecutableElement methodDeprecated = findElementBySimpleName("methodDeprecated", ElementFilter.methodsIn(test.getEnclosedElements()));
         ExecutableElement methodNotDeprecated = findElementBySimpleName("methodNotDeprecated", ElementFilter.methodsIn(test.getEnclosedElements()));
         VariableElement fieldDeprecated = findElementBySimpleName("fieldDeprecated", ElementFilter.fieldsIn(test.getEnclosedElements()));
         VariableElement fieldNotDeprecated = findElementBySimpleName("fieldNotDeprecated", ElementFilter.fieldsIn(test.getEnclosedElements()));
         TypeElement classDeprecated = findElementBySimpleName("classDeprecated", ElementFilter.typesIn(test.getEnclosedElements()));
         TypeElement classNotDeprecated = findElementBySimpleName("classNotDeprecated", ElementFilter.typesIn(test.getEnclosedElements()));
-        
+
         assertFalse(info.getElements().isDeprecated(methodNotDeprecated));
         assertFalse(info.getElements().isDeprecated(fieldNotDeprecated));
         assertFalse(info.getElements().isDeprecated(classNotDeprecated));
@@ -184,25 +186,25 @@
         assertTrue(info.getElements().isDeprecated(fieldDeprecated));
         assertTrue(info.getElements().isDeprecated(classDeprecated));
     }
-    
+
     public void testGetOutermostEnclosingTypeElement () throws Exception {
 	prepareTest();
-	TypeElement test = info.getElements().getTypeElement("sourceutils.TestGetOutermostEnclosingTypeElement");        
+	TypeElement test = info.getElements().getTypeElement("sourceutils.TestGetOutermostEnclosingTypeElement");
         assertNotNull(test);
 	assertEquals("TestGetOutermostEnclosingTypeElement", test.getSimpleName().toString());
-	
+
 	ExecutableElement testMethod = ElementFilter.methodsIn(test.getEnclosedElements()).get(0);
 //        TypeElement classInMethod = ElementFilter.typesIn(testMethod.getEnclosedElements()).get(0);
-//        ExecutableElement classInMethodMethod = ElementFilter.methodsIn(classInMethod.getEnclosedElements()).get(0);;
-//        VariableElement classInMethodField = ElementFilter.fieldsIn(classInMethod.getEnclosedElements()).get(0);;
+//        ExecutableElement classInMethodMethod = ElementFilter.methodsIn(classInMethod.getEnclosedElements()).get(0);
+//        VariableElement classInMethodField = ElementFilter.fieldsIn(classInMethod.getEnclosedElements()).get(0);
 //        TypeElement classInMethodNestedClass = ElementFilter.typesIn(classInMethod.getEnclosedElements()).get(0);
         VariableElement testField = ElementFilter.fieldsIn(test.getEnclosedElements()).get(0);
         TypeElement nestedClass = ElementFilter.typesIn(test.getEnclosedElements()).get(0);
         ExecutableElement nestedClassMethod = ElementFilter.methodsIn(nestedClass.getEnclosedElements()).get(0);
         VariableElement nestedClassField = ElementFilter.fieldsIn(nestedClass.getEnclosedElements()).get(0);
         TypeElement nestedClassNestedClass = ElementFilter.typesIn(nestedClass.getEnclosedElements()).get(0);
-        
-        
+
+
         assertEquals("testMethod", testMethod.getSimpleName().toString());
 //        assertEquals("classInMethod", classInMethod.getSimpleName().toString());
 //        assertEquals("classInMethodMethod", classInMethodMethod.getSimpleName().toString());
@@ -213,7 +215,7 @@
         assertEquals("nestedClassMethod", nestedClassMethod.getSimpleName().toString());
         assertEquals("nestedClassField", nestedClassField.getSimpleName().toString());
         assertEquals("NestedClassNestedClass", nestedClassNestedClass.getSimpleName().toString());
-        
+
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(test));
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(testMethod));
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(testField));
@@ -221,16 +223,16 @@
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(nestedClassMethod));
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(nestedClassField));
         assertEquals(test, SourceUtils.getOutermostEnclosingTypeElement(nestedClassNestedClass));
-        
+
         try {
             SourceUtils.getOutermostEnclosingTypeElement(test.getEnclosingElement());
             fail();
         } catch (IllegalArgumentException e) {
             //good.
-        }	
+        }
     }
-    
-    
+
+
     public void testGetDependentRoots () throws Exception {
         final FileObject wd = FileUtil.toFileObject(getWorkDir());
         final FileObject url0 = FileUtil.createFolder(wd,"url0");  //NOI18N
@@ -277,7 +279,7 @@
         CPProvider.getDefault().register(url4, ClassPath.SOURCE, cp4);
         CPProvider.getDefault().register(url5, ClassPath.COMPILE, compile5);
         CPProvider.getDefault().register(url5, ClassPath.SOURCE, cp5);
-        
+
         GlobalPathRegistry.getDefault().register(ClassPath.SOURCE, cps);
         final Future<Void> f = RunWhenScanFinishedSupport.runWhenScanFinished(() -> null, Collections.emptySet());
         f.get();    //Wait for scan to finish
@@ -304,8 +306,8 @@
         result = SourceUtils.getDependentRoots(url1.toURL(), true);
         assertEquals (new URL[] {url1.toURL(), url3.toURL(), url5.toURL()}, result);
     }
-    
-                    
+
+
     public void testGetFile () throws Exception {
         File workDir = getWorkDir();
         FileObject workFo = FileUtil.toFileObject(workDir);
@@ -313,9 +315,9 @@
         FileObject src = workFo.createFolder("src");
         FileObject userDir = workFo.createFolder("ud");
         CacheFolder.setCacheFolder(userDir);
-        
+
         ensureRootValid(src.getURL());
-        
+
         FileObject srcInDefPkg = src.createData("Foo","java");
         assertNotNull(srcInDefPkg);
         FileObject sourceFile = src.createFolder("org").createFolder("me").createData("Test", "java");
@@ -330,10 +332,10 @@
         FileObject classFile = classPkg.createData("Test", "class");
         assertNotNull(classFile);
         FileObject classFileInnder = classPkg.createData("Test$Inner", "class");
-        assertNotNull(classFileInnder);        
+        assertNotNull(classFileInnder);
         SFBQImpl.getDefault().register(cls, src);
         ElementHandle<? extends Element> handle = ElementHandle.createTypeElementHandle(ElementKind.CLASS, "org.me.Test");
-        assertNotNull (handle);        
+        assertNotNull (handle);
         FileObject result = SourceUtils.getFile(handle, cpInfo);
         assertNotNull(result);
         handle = ElementHandle.createTypeElementHandle(ElementKind.CLASS, "org.me.Test$Inner");
@@ -396,7 +398,7 @@
         final FileObject emptyClass = createFile(src, "C1.class","");
         assertTrue(SourceUtils.isClassFile(emptyClass));
     }
-    
+
     public void testGenerateReadableParameterName() throws Exception {
         System.out.println("testGenerateReadableParameterName");
         Match m = new Match("java.lang.Object", "o");
@@ -425,22 +427,24 @@
         .match("com.foo.ClassWithAnAnnoyinglyLongNameThatGoesOnForever", "c");
         m.assertMatch();
     }
-    
+
     /**
      * Checks that a toplevel class that contains $ in its name is found in the
      * dollar file. Checks that inner classes of such a old-style class are also found correctly.
-     * @throws Exception 
+     * @throws Exception
      */
     public void testDollarSourceName() throws Exception {
         prepareTest();
         TypeElement test = info.getElements().getTypeElement("sourceutils.TestDollarSourceName$dollar");
         assertNotNull(test);
-        FileObject f = SourceUtils.getFile(ElementHandle.create(test), info.getClasspathInfo());
-        assertEquals("TestDollarSourceName.java", f.getNameExt());
-        
-        test = info.getElements().getTypeElement("sourceutils.TestDollarSourceName$dollar.InnerClass");
-        f = SourceUtils.getFile(ElementHandle.create(test), info.getClasspathInfo());
-        assertEquals("TestDollarSourceName.java", f.getNameExt());
+        FileObject outerFile = SourceUtils.getFile(ElementHandle.create(test), info.getClasspathInfo());
+        assertEquals("TestDollarSourceName.java", outerFile.getNameExt());
+        assertEquals("TestDollarSourceName.java", SourceUtils.findSourceFileName(test));
+
+        TypeElement inner = info.getElements().getTypeElement("sourceutils.TestDollarSourceName$dollar.InnerClass");
+        FileObject innerFile = SourceUtils.getFile(ElementHandle.create(inner), info.getClasspathInfo());
+        assertEquals("TestDollarSourceName.java", innerFile.getNameExt());
+        assertEquals("TestDollarSourceName.java", SourceUtils.findSourceFileName(inner));
     }
 
     public void testGetBound() throws Exception {
@@ -458,14 +462,57 @@
         assertEquals("java.lang.CharSequence", String.valueOf(bound));
     }
 
+    public void testNameForAClassFile() throws Exception {
+        // compiled as Hello.java
+        // package my.hello; public class Hello {}
+        byte[] classFile = new byte[] {
+            -54, -2, -70, -66, 0, 0, 0, 50, 0, 13, 10, 0, 3, 0, 10, 7, 0, 11,
+            7, 0, 12, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 0, 3, 40, 41,
+            86, 1, 0, 4, 67, 111, 100, 101, 1, 0, 15, 76, 105, 110, 101, 78,
+            117, 109, 98, 101, 114, 84, 97, 98, 108, 101, 1, 0, 10, 83, 111,
+            117, 114, 99, 101, 70, 105, 108, 101, 1, 0, 10, 72, 101, 108, 108,
+            111, 46, 106, 97, 118, 97, 12, 0, 4, 0, 5, 1, 0, 14, 109, 121, 47,
+            104, 101, 108, 108, 111, 47, 72, 101, 108, 108, 111, 1, 0, 16, 106,
+            97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116,
+            0, 33, 0, 2, 0, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 4, 0, 5, 0, 1, 0, 6,
+            0, 0, 0, 29, 0, 1, 0, 1, 0, 0, 0, 5, 42, -73, 0, 1, -79, 0, 0, 0,
+            1, 0, 7, 0, 0, 0, 6, 0, 1, 0, 0, 0, 1, 0, 1, 0, 8, 0, 0, 0, 2, 0, 9
+        };
+
+        File work = getWorkDir();
+        FileObject workFO = FileUtil.toFileObject(work);
+
+        assertNotNull(workFO);
+
+        FileObject target = FileUtil.createFolder(workFO, "target");
+        JavaSourceTest.SourceLevelQueryImpl.sourceLevel = "1.8";
+        FileObject clazz = FileUtil.createData(target, "my/hello/Hello.class");
+        try (OutputStream os = clazz.getOutputStream()) {
+            os.write(classFile);
+        }
+        FileUtil.setMIMEType("class", ClassParser.MIME_TYPE);
+        assertEquals(ClassParser.MIME_TYPE, clazz.getMIMEType());
+        js = JavaSource.forFileObject(clazz);
+        assertNotNull("JavaSource found", js);
+        info = SourceUtilsTestUtil.getCompilationInfo(js, JavaSource.Phase.RESOLVED);
+        assertNotNull("info found", info);
+        int count  = 0;
+        for (TypeElement test : info.getTopLevelElements()) {
+            assertNotNull("type element found", test);
+            assertEquals("Hello.java", SourceUtils.findSourceFileName(test));
+            count++;
+        }
+        assertEquals("One element found", 1, count);
+    }
+
     //<editor-fold defaultstate="collapsed" desc="Helper methods & Mock services">
-    
+
     private void prepareTest() throws Exception {
         File work = getWorkDir();
         FileObject workFO = FileUtil.toFileObject(work);
-        
+
         assertNotNull(workFO);
-        
+
         FileObject sourceRoot = workFO.getFileObject("src");
         if (sourceRoot == null) {
             sourceRoot = workFO.createFolder("src");
@@ -476,27 +523,27 @@
         if (packageRoot == null) {
             packageRoot = sourceRoot.createFolder("sourceutils");
         }
-        
+
         SourceUtilsTestUtil.prepareTest(sourceRoot, buildRoot, cache);
-        
+
         String capitalizedName = "T" + getName().substring(1);
-        
+
         TestUtil.copyFiles(FileUtil.toFile(sourceRoot), "sourceutils/" + capitalizedName + ".java");
-        
+
         packageRoot.refresh();
-        
+
         FileObject testSource = packageRoot.getFileObject(capitalizedName + ".java");
-        
+
         assertNotNull(testSource);
 
         SourceUtilsTestUtil.compileRecursively(sourceRoot);
-        
+
         js = JavaSource.forFileObject(testSource);
-        
+
         assertNotNull(js);
-        
+
         info = SourceUtilsTestUtil.getCompilationInfo(js, JavaSource.Phase.RESOLVED);
-        
+
         assertNotNull(info);
     }
 
@@ -584,21 +631,21 @@
         }
 
     }
-    
+
     private static class SFBQImpl implements SourceForBinaryQueryImplementation {
-        
+
         private static SFBQImpl instance;
-        
+
         private final Map<URL, FileObject> map = new HashMap<URL, FileObject> ();
-        
+
         private SFBQImpl () {
-            
+
         }
-        
+
         public void register (FileObject bin, FileObject src) throws IOException {
             map.put(bin.toURL(), src);
         }
-            
+
         public Result findSourceRoots(URL binaryRoot) {
             final FileObject src = map.get (binaryRoot);
             if (src != null) {
@@ -608,16 +655,16 @@
                         return new FileObject[] {src};
                     }
 
-                    public void addChangeListener(ChangeListener l) {                        
+                    public void addChangeListener(ChangeListener l) {
                     }
 
-                    public void removeChangeListener(ChangeListener l) {                        
+                    public void removeChangeListener(ChangeListener l) {
                     }
                 };
             }
             return null;
         }
-        
+
         public static synchronized SFBQImpl getDefault () {
             if (instance == null) {
                 instance = new SFBQImpl ();
@@ -625,7 +672,7 @@
             return instance;
         }
     }
-    
+
     private static final class Match {
         private String[] fqns;
         private String[] names;
diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTestUtil.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTestUtil.java
index 430ba45..d58997c 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTestUtil.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTestUtil.java
@@ -44,6 +44,8 @@
 import org.netbeans.modules.java.source.BootClassPathUtil;
 import org.netbeans.modules.java.source.TestUtil;
 import org.netbeans.modules.java.source.indexing.JavaCustomIndexer;
+import org.netbeans.modules.java.source.parsing.ClassParser;
+import org.netbeans.modules.java.source.parsing.ClassParserFactory;
 import org.netbeans.modules.java.source.parsing.JavacParser;
 import org.netbeans.modules.java.source.parsing.JavacParserFactory;
 import org.netbeans.modules.java.source.usages.IndexUtil;
@@ -405,11 +407,15 @@
     public static final class JavacParserProvider implements MimeDataProvider {
 
         private Lookup javaLookup = Lookups.fixed(new JavacParserFactory(), new JavaCustomIndexer.Factory());
+        private Lookup classLookup = Lookups.fixed(new ClassParserFactory(), new JavaCustomIndexer.Factory());
 
         public Lookup getLookup(MimePath mimePath) {
             if (mimePath.getPath().endsWith(JavacParser.MIME_TYPE)) {
                 return javaLookup;
             }
+            if (mimePath.getPath().endsWith(ClassParser.MIME_TYPE)) {
+                return classLookup;
+            }
 
             return Lookup.EMPTY;
         }
@@ -428,6 +434,9 @@
             if ("java".equals(fo.getExt())) {
                 return JavacParser.MIME_TYPE;
             }
+            if ("class".equals(fo.getExt())) {
+                return ClassParser.MIME_TYPE;
+            }
 
             return null;
         }
diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TestUtilitiesTest.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TestUtilitiesTest.java
index c511109..ca89748 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TestUtilitiesTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TestUtilitiesTest.java
@@ -53,7 +53,7 @@
         cache.mkdirs();
         final File sourceDir = FileUtil.normalizeFile(new File(wf,"src"));
         sourceDir.mkdirs();        
-        boot = BootClassPathUtil.getBootClassPath();;
+        boot = BootClassPathUtil.getBootClassPath();
         compile = ClassPathSupport.createClassPath(new URL[0]);
         source = ClassPathSupport.createClassPath(new URL[]{Utilities.toURI(sourceDir).toURL()});
         TestUtilities.setCacheFolder(cache);
diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/GuardedBlockTest.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/GuardedBlockTest.java
index 8df6785..769e385 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/GuardedBlockTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/GuardedBlockTest.java
@@ -137,7 +137,7 @@
                     if (type.equals(ClassPath.COMPILE))
                         return ClassPathSupport.createClassPath(new FileObject[0]);
                     if (type.equals(ClassPath.BOOT))
-                        return BootClassPathUtil.getBootClassPath();;
+                        return BootClassPathUtil.getBootClassPath();
                     return null;
             }
         };
diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java
new file mode 100644
index 0000000..0393ee8
--- /dev/null
+++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.java.source.classpath;
+
+import java.net.URL;
+import org.netbeans.api.java.queries.SourceForBinaryQuery;
+import org.netbeans.junit.NbTestCase;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.filesystems.URLMapper;
+
+public final class SourceNextToBinaryQueryImplTest extends NbTestCase {
+    public SourceNextToBinaryQueryImplTest(String n) {
+        super(n);
+    }
+
+    public void testFindSourceNextToBinary() throws Exception {
+        clearWorkDir();
+        FileObject root = FileUtil.toFileObject(getWorkDir());
+        assertNotNull("Root for testing found", root);
+        FileObject dir = root.createFolder("testFolder");
+        FileObject jar = dir.createData("junit-4.12", "jar");
+        FileObject src = dir.createData("junit-4.12-sources", "jar");
+
+        URL jarRoot = FileUtil.getArchiveRoot(URLMapper.findURL(jar, URLMapper.INTERNAL));
+        SourceNextToBinaryQueryImpl instance = new SourceNextToBinaryQueryImpl();
+        SourceForBinaryQuery.Result result = instance.findSourceRoots(jarRoot);
+        assertNotNull("result is found", result);
+        assertEquals("ONe root", 1, result.getRoots().length);
+        FileObject found = FileUtil.getArchiveFile(result.getRoots()[0]);
+        assertEquals("The right source file found", src, found);
+    }
+}
diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/usages/BinaryUsagesTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/usages/BinaryUsagesTest.java
index 3c5b7dd..46309b4 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/usages/BinaryUsagesTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/usages/BinaryUsagesTest.java
@@ -312,7 +312,7 @@
                 if (root == null) {
                     Object rootPath = fsRoot.getAttribute("FileSystem.rootPath"); //NOI18N
 
-                    if ((rootPath != null) && (rootPath instanceof String)) {
+                    if (rootPath instanceof String) {
                         rootName = (String) rootPath;
                     } else {
                         continue;
diff --git a/java/java.source.compat8/nbproject/org-netbeans-modules-java-source-compat8.sig b/java/java.source.compat8/nbproject/org-netbeans-modules-java-source-compat8.sig
index 633a4f3..ed40c7f 100644
--- a/java/java.source.compat8/nbproject/org-netbeans-modules-java-source-compat8.sig
+++ b/java/java.source.compat8/nbproject/org-netbeans-modules-java-source-compat8.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.20
+#Version 9.21
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.source.compat8/nbproject/project.properties b/java/java.source.compat8/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/java/java.source.compat8/nbproject/project.properties
+++ b/java/java.source.compat8/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/java.source.queries/nbproject/org-netbeans-modules-java-source-queries.sig b/java/java.source.queries/nbproject/org-netbeans-modules-java-source-queries.sig
index 60c092f..cc332e9 100644
--- a/java/java.source.queries/nbproject/org-netbeans-modules-java-source-queries.sig
+++ b/java/java.source.queries/nbproject/org-netbeans-modules-java-source-queries.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.35
+#Version 1.36
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/java.source.queries/nbproject/project.properties b/java/java.source.queries/nbproject/project.properties
index 46b34ec..0ffa016 100644
--- a/java/java.source.queries/nbproject/project.properties
+++ b/java/java.source.queries/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/java/java.source/nbproject/org-netbeans-modules-java-source.sig b/java/java.source/nbproject/org-netbeans-modules-java-source.sig
index 95f3426..4d5b007 100644
--- a/java/java.source/nbproject/org-netbeans-modules-java-source.sig
+++ b/java/java.source/nbproject/org-netbeans-modules-java-source.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.181.0
+#Version 0.183.0
 
 CLSS public abstract interface com.sun.source.tree.TreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.tree.TreeVisitor%1})
@@ -18,7 +18,9 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
@@ -49,6 +51,7 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
@@ -98,7 +101,9 @@
 meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
@@ -129,6 +134,7 @@
 meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
@@ -1381,6 +1387,7 @@
 meth public com.sun.source.tree.CompoundAssignmentTree CompoundAssignment(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
 meth public com.sun.source.tree.ConditionalExpressionTree ConditionalExpression(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
 meth public com.sun.source.tree.ContinueTree Continue(java.lang.CharSequence)
+meth public com.sun.source.tree.DeconstructionPatternTree RecordPattern(com.sun.source.tree.ExpressionTree,java.util.List<com.sun.source.tree.PatternTree>,com.sun.source.tree.VariableTree)
 meth public com.sun.source.tree.DoWhileLoopTree DoWhileLoop(com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
 meth public com.sun.source.tree.EmptyStatementTree EmptyStatement()
 meth public com.sun.source.tree.EnhancedForLoopTree EnhancedForLoop(com.sun.source.tree.VariableTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
diff --git a/java/java.source/nbproject/project.properties b/java/java.source/nbproject/project.properties
index c49b8a4..f800654 100644
--- a/java/java.source/nbproject/project.properties
+++ b/java/java.source/nbproject/project.properties
@@ -55,3 +55,8 @@
 test.config.jet-main.includes=\
     org/netbeans/modules/java/JavaNodeTest.class,\
     **/UiUtilsTest.class
+
+# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
+jms-compiler.flags.jvm=
+test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/java.source/src/org/netbeans/modules/java/IndentFileEntry.java b/java/java.source/src/org/netbeans/modules/java/IndentFileEntry.java
index 4806411..48421f2 100644
--- a/java/java.source/src/org/netbeans/modules/java/IndentFileEntry.java
+++ b/java/java.source/src/org/netbeans/modules/java/IndentFileEntry.java
@@ -109,7 +109,7 @@
         Object attr = getFile().getAttribute(EA_PREFORMATTED);
         boolean preformatted = false;
         
-        if (attr != null && attr instanceof Boolean) {
+        if (attr instanceof Boolean) {
             preformatted = ((Boolean)attr).booleanValue();
         }
 
diff --git a/java/java.source/src/org/netbeans/modules/java/ui/Bundle.properties b/java/java.source/src/org/netbeans/modules/java/ui/Bundle.properties
index 98f2309..7589b93 100644
--- a/java/java.source/src/org/netbeans/modules/java/ui/Bundle.properties
+++ b/java/java.source/src/org/netbeans/modules/java/ui/Bundle.properties
@@ -493,10 +493,11 @@
 default\:\
    return number > 100 ? -1 : -2;\
 }\
+}\
 public int add(int a, int b) {\
     return a + b;\
 }\
-} }
+}
 
 #do not translate
 SAMPLE_Comments=public class ClassA {\n\
diff --git a/java/java.source/test/qa-functional/data/projects/default/nbproject/project.properties b/java/java.source/test/qa-functional/data/projects/default/nbproject/project.properties
index e81feba..768acf3 100644
--- a/java/java.source/test/qa-functional/data/projects/default/nbproject/project.properties
+++ b/java/java.source/test/qa-functional/data/projects/default/nbproject/project.properties
@@ -45,7 +45,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/java.sourceui/apichanges.xml b/java/java.sourceui/apichanges.xml
index 0113e9c..4d5028b 100644
--- a/java/java.sourceui/apichanges.xml
+++ b/java/java.sourceui/apichanges.xml
@@ -84,6 +84,20 @@
     <!-- ACTUAL CHANGES BEGIN HERE: -->
 
     <changes>
+        <change id="ElementOpen_names">
+            <api name="general"/>
+            <summary>ElementOpen with suggested names</summary>
+            <version major="1" minor="67"/>
+            <date day="26" month="12" year="2022"/>
+            <author login="jtulach"/>
+            <compatibility addition="yes"/>
+            <description>
+                Provide <code>ElementOpen.open</code> with suggested list
+                of file names to open. Allows extracting name from <code>.class</code>
+                file and opening that one.
+            </description>
+            <class package="org.netbeans.api.java.source.ui" name="ElementOpen"/>
+        </change>
         <change id="StructureElement_convert">
             <api name="general"/>
             <summary>A variant conversion that works for both source and binary elements.</summary>
diff --git a/java/java.sourceui/nbproject/org-netbeans-modules-java-sourceui.sig b/java/java.sourceui/nbproject/org-netbeans-modules-java-sourceui.sig
index cdc46a3..fa79b7b 100644
--- a/java/java.sourceui/nbproject/org-netbeans-modules-java-sourceui.sig
+++ b/java/java.sourceui/nbproject/org-netbeans-modules-java-sourceui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.65.0
+#Version 1.66.0
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/java/java.sourceui/nbproject/project.properties b/java/java.sourceui/nbproject/project.properties
index 86ba376..b3bc847 100644
--- a/java/java.sourceui/nbproject/project.properties
+++ b/java/java.sourceui/nbproject/project.properties
@@ -20,6 +20,11 @@
 javadoc.arch=${basedir}/arch.xml
 spec.version.base=1.67.0
 
+# failing or missing test files
+test.config.default.excludes=\
+    **/FastIndexTest.class,\
+    **/MarkupTagProcessorTest.class
+
 test.config.stableBTD.includes=**/*Test.class
 test.config.stableBTD.excludes=\
     **/ElementHeadersTest.class
diff --git a/java/java.sourceui/nbproject/project.xml b/java/java.sourceui/nbproject/project.xml
index 84a7a65..9ac80a3 100644
--- a/java/java.sourceui/nbproject/project.xml
+++ b/java/java.sourceui/nbproject/project.xml
@@ -79,6 +79,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.lib.nbjavac</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <implementation-version/>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.libs.javacapi</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
index d55f029..ed8edb9 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
@@ -25,6 +25,7 @@
 import com.sun.source.doctree.DeprecatedTree;
 import com.sun.source.doctree.DocCommentTree;
 import com.sun.source.doctree.DocTree;
+import static com.sun.source.doctree.DocTree.Kind.SUMMARY;
 import com.sun.source.doctree.EndElementTree;
 import com.sun.source.doctree.EntityTree;
 import com.sun.source.doctree.InheritDocTree;
@@ -37,6 +38,7 @@
 import com.sun.source.doctree.SinceTree;
 import com.sun.source.doctree.SnippetTree;
 import com.sun.source.doctree.StartElementTree;
+import com.sun.source.doctree.SummaryTree;
 import com.sun.source.doctree.TextTree;
 import com.sun.source.doctree.ThrowsTree;
 import com.sun.source.doctree.UnknownBlockTagTree;
@@ -101,7 +103,6 @@
 import org.netbeans.api.java.source.JavaSource.Phase;
 import org.netbeans.api.java.source.SourceUtils;
 import org.netbeans.modules.java.preprocessorbridge.api.JavaSourceUtil;
-import org.netbeans.modules.java.source.TreeShims;
 import org.netbeans.modules.java.source.JavadocHelper;
 import org.netbeans.modules.java.source.parsing.FileObjects;
 import org.netbeans.spi.java.classpath.support.ClassPathSupport;
@@ -112,15 +113,16 @@
 import org.openide.util.RequestProcessor;
 import org.openide.xml.XMLUtil;
 
-import javax.tools.JavaCompiler;
 import javax.tools.JavaFileObject;
 import javax.tools.SimpleJavaFileObject;
-import javax.tools.ToolProvider;
 import com.sun.source.tree.ImportTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.JavacTask;
-import com.sun.tools.javac.code.ClassFinder;
+import org.netbeans.api.java.queries.SourceLevelQuery;
+import org.netbeans.api.java.queries.SourceLevelQuery.Profile;
 import org.netbeans.api.java.source.ui.snippet.MarkupTagProcessor;
+import org.netbeans.modules.java.source.parsing.JavacParser;
+import org.openide.filesystems.FileSystem;
 
 /** Utility class for viewing Javadoc comments as HTML.
  *
@@ -1060,8 +1062,8 @@
                                 }
                                 sb.append(inlineTags(unTag.getContent(), path, doc, info.getDocTrees(), null));
                                 break;
-                    }
-                    break;
+                        }
+                        break;
                 }
             }
 
@@ -1325,6 +1327,11 @@
                     snippetCount++;
                     processDocSnippet(sb, (SnippetTree)tag, snippetCount,docPath, doc, trees);
                     break;
+                case SUMMARY:
+                    SummaryTree summaryTag = (SummaryTree)tag;
+                    List<? extends DocTree> summary = summaryTag.getSummary();
+                    sb.append(inlineTags(summary, docPath, doc, trees, null));
+                    break;
             }
         }
         return sb;
@@ -1434,8 +1441,8 @@
         String error = null;
         String text = null;
 
-        pckgName = pckgName.replaceAll("\\.", "\\\\");
-        FileObject snippetFile = classPath.findResource(pckgName + "\\snippet-files\\" + fileName);
+        pckgName = pckgName.replaceAll("\\.", "/");
+        FileObject snippetFile = classPath.findResource(pckgName + "/snippet-files/" + fileName);
         if (snippetFile == null || fileName.isEmpty()) {
             error = "error: snippet markup: File invalid";
             errorList.add(error);
@@ -1758,10 +1765,20 @@
 
     private static class JavaDocSnippetLinkTagFileObject extends SimpleJavaFileObject {
 
+        private static final URI fakeFileObjectURI;
+        static {
+            try {
+                FileSystem mfs = FileUtil.createMemoryFileSystem();
+                FileObject fakeFileObject = mfs.getRoot().createData("JavaDocSnippetLinkTagFileObject.java");
+                fakeFileObjectURI = fakeFileObject.toURI();
+            } catch (IOException ex) {
+                throw new IllegalStateException(ex);
+            }
+        }
         private String text;
 
         public JavaDocSnippetLinkTagFileObject(String text) {
-            super(URI.create("myfo:/JavaDocSnippetLinkTag.java"), JavaFileObject.Kind.SOURCE); //NOI18N
+            super(fakeFileObjectURI, JavaFileObject.Kind.SOURCE); //NOI18N
             this.text = text;
         }
 
@@ -1772,17 +1789,7 @@
     }
     
     private void createSnippetMarkupLinkTag(StringBuilder sb, JavaDocSnippetLinkTagFileObject fileObject) throws IOException {
-        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-        StringBuilder prjClsPath = new StringBuilder();
-        String prjSrcPath = cpInfo.getClassPath(ClasspathInfo.PathKind.SOURCE).toString();
-        prjClsPath.append(prjSrcPath);
-        
-        for(ClassPath.Entry cpe : cpInfo.getClassPath(ClasspathInfo.PathKind.COMPILE).entries()){
-            prjClsPath.append(";");
-            prjClsPath.append(cpe.getRoot().getFileSystem().getDisplayName());
-        }
-        List<String> opt = Arrays.asList("-cp",prjClsPath.toString());
-        JavacTask task = (JavacTask) compiler.getTask(null, null, null, opt, null, Arrays.asList(fileObject));
+        JavacTask task = JavacParser.createJavacTask(cpInfo, d -> {}, SourceLevelQuery.getSourceLevel(this.fileObject), Profile.DEFAULT, null, null, null, null, Collections.singletonList(fileObject));
 
         DocTrees docTrees = DocTrees.instance(task);//trees
         
@@ -1798,7 +1805,7 @@
                     for(DocTree dTree: body){
                         if(dTree instanceof LinkTree){
                             LinkTree linkTag = (LinkTree)dTree;
-                            appendReference(sb, linkTag.getReference(), body, path, doc, docTrees);
+                            appendReference(sb, linkTag.getReference(), linkTag.getLabel(), path, doc, docTrees);
                             break main;
                         }
                     }
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
index d58e614..289c5ddd 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
@@ -68,10 +68,10 @@
 
     private ElementOpen() {
     }
-    
+
     /**
      * Opens {@link Element} corresponding to the given {@link ElementHandle}.
-     * 
+     *
      * @param cpInfo ClasspathInfo which should be used for the search
      * @param el     declaration to open
      * @return true  if and only if the declaration was correctly opened,
@@ -79,12 +79,26 @@
      * @since 1.5
      */
     public static boolean open(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el) {
+        return open(cpInfo, el, new String[0]);
+    }
+
+    /**
+     * Opens {@link Element} corresponding to the given {@link ElementHandle}.
+     *
+     * @param cpInfo ClasspathInfo which should be used for the search
+     * @param el     declaration to open
+     * @param names  suggested names for the file to search for
+     * @return true  if and only if the declaration was correctly opened,
+     *                false otherwise
+     * @since 1.67
+     */
+    public static boolean open(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String... names) {
         final AtomicBoolean cancel = new AtomicBoolean();
         if (SwingUtilities.isEventDispatchThread() && !JavaSourceAccessor.holdsParserLock()) {
             final Object[] openInfo = new Object[3];
             ProgressUtils.runOffEventDispatchThread(new Runnable() {
                     public void run() {
-                        Object[] info = getOpenInfo(cpInfo, el, cancel);
+                        Object[] info = getOpenInfo(cpInfo, el, names, cancel);
                         if (info != null) {
                             openInfo[0] = info[0];
                             openInfo[1] = info[1];
@@ -99,16 +113,16 @@
                 return false;
             }
             if (openInfo[0] instanceof FileObject) {
-                return doOpen((FileObject)openInfo[0], (int)openInfo[1], (int)openInfo[2]);                
+                return doOpen((FileObject)openInfo[0], (int)openInfo[1], (int)openInfo[2]);
             }
             return binaryOpen(cpInfo, el, cancel);
         } else {
-            return open(cpInfo, el, cancel);
+            return open(cpInfo, el, names, cancel);
         }
     }
-    
-    private static boolean open(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, AtomicBoolean cancel) {
-        Object[] openInfo = getOpenInfo(cpInfo, el, cancel);
+
+    private static boolean open(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String[] names, AtomicBoolean cancel) {
+        Object[] openInfo = getOpenInfo(cpInfo, el, names, cancel);
         if (cancel.get()) return false;
         if (openInfo != null) {
             assert openInfo[0] instanceof FileObject;
@@ -116,19 +130,19 @@
         }
         return binaryOpen(cpInfo, el, cancel);
     }
-    
+
     private static boolean binaryOpen(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, AtomicBoolean cancel) {
         BinaryElementOpen beo = Lookup.getDefault().lookup(BinaryElementOpen.class);
         if (beo != null) {
             return beo.open(cpInfo, el, cancel);
         } else {
             return false;
-        }        
+        }
     }
-    
+
     /**
      * Opens given {@link Element}.
-     * 
+     *
      * @param cpInfo ClasspathInfo which should be used for the search
      * @param el    declaration to open
      * @return true if and only if the declaration was correctly opened,
@@ -137,10 +151,10 @@
     public static boolean open(final ClasspathInfo cpInfo, final Element el) {
         return open(cpInfo, ElementHandle.create(el));
     }
-    
+
     /**
      * Opens given {@link Element}.
-     * 
+     *
      * @param toSearch fileobject whose {@link ClasspathInfo} will be used
      * @param toOpen   {@link ElementHandle} of the element which should be opened.
      * @return true if and only if the declaration was correctly opened,
@@ -176,7 +190,7 @@
             return open(toSearch, toOpen, cancel);
         }
     }
-    
+
     private static boolean open(
             @NonNull final FileObject toSearch,
             @NonNull final ElementHandle<? extends Element> toOpen,
@@ -194,7 +208,7 @@
         }
         return binaryOpen(toSearch, toOpen, cancel);
     }
-    
+
     private static boolean binaryOpen(
             @NonNull final FileObject toSearch,
             @NonNull final ElementHandle<? extends Element> toOpen,
@@ -291,17 +305,32 @@
      * @since 1.58
      */
     public static CompletableFuture<Location> getLocation(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String resourceName) {
-        final CompletableFuture<Object[]> future = getFutureOpenInfo(cpInfo, el, resourceName, new AtomicBoolean(), true);
+      return getLocation(cpInfo, el, resourceName, new String[0]);
+    }
+
+    /**
+     * Gets location of the {@link Element} corresponding to the given {@link ElementHandle}.
+     *
+     * @param cpInfo ClasspathInfo which should be used for the search
+     * @param el ElementHandle to search
+     * @param resourceName optional resource name to search
+     * @param names suggested names of the source file to seek for
+     * @return location of the given element
+     *
+     * @since 1.67
+     */
+    public static CompletableFuture<Location> getLocation(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String resourceName, String... names) {
+        final CompletableFuture<Object[]> future = getFutureOpenInfo(cpInfo, el, resourceName, new AtomicBoolean(), true, names);
         return future.thenApply(openInfo -> {
-            if (openInfo != null && openInfo[0] != null && (int) openInfo[1] != (-1) && (int) openInfo[2] != (-1)) {
+            if (openInfo != null && openInfo[0] != null) {
                 FileObject file = (FileObject) openInfo[0];
                 int start = (int) openInfo[3];
                 if (start < 0) {
-                    start = (int) openInfo[1];
+                    start = Math.max(0, (int) openInfo[1]);
                 }
                 int end = (int) openInfo[4];
                 if (end < 0) {
-                    end = (int) openInfo[2];
+                    end = Math.max(0, (int) openInfo[2]);
                 }
                 return new Location(file, start, end);
             }
@@ -357,8 +386,8 @@
         return FileObjects.CLASS.equals(file.getExt()) || ClassParser.MIME_TYPE.equals(file.getMIMEType(ClassParser.MIME_TYPE));
     }
 
-    static CompletableFuture<Object[]> getFutureOpenInfo(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String resourceName, AtomicBoolean cancel, boolean acquire) {
-        Object[] openInfo = getOpenInfo(cpInfo, el, cancel);
+    static CompletableFuture<Object[]> getFutureOpenInfo(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String resourceName, AtomicBoolean cancel, boolean acquire, String... names) {
+        Object[] openInfo = getOpenInfo(cpInfo, el, names, cancel);
         if (openInfo != null) {
             return CompletableFuture.completedFuture(openInfo);
         }
@@ -378,7 +407,7 @@
                             @Override
                             public void attachmentSucceeded() {
                                 try {
-                                    Object[] openInfo = getOpenInfo(cpInfo, el, cancel);
+                                    Object[] openInfo = getOpenInfo(cpInfo, el, null, cancel);
                                     if (openInfo != null && (int) openInfo[1] != (-1) && (int) openInfo[2] != (-1) && openInfo[5] != null) {
                                         future.complete(openInfo);
                                     } else {
@@ -411,8 +440,8 @@
         return CompletableFuture.completedFuture(generated != null ? getOpenInfo(generated, el, cancel) : null);
     }
 
-    static Object[] getOpenInfo(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, AtomicBoolean cancel) {
-        FileObject fo = SourceUtils.getFile(el, cpInfo);
+    static Object[] getOpenInfo(final ClasspathInfo cpInfo, final ElementHandle<? extends Element> el, String[] names, AtomicBoolean cancel) {
+        FileObject fo = SourceUtils.getFile(el, cpInfo, names);
         if (fo != null && fo.isFolder()) {
             fo = fo.getFileObject("package-info.java"); // NOI18N
         }
@@ -438,7 +467,7 @@
     private static boolean doOpen(FileObject fo, final int offsetA, final int offsetB) {
         if (offsetA == -1) {
             StatusDisplayer.getDefault().setStatusText(
-                    NbBundle.getMessage(ElementOpen.class, "WARN_ElementNotFound"), 
+                    NbBundle.getMessage(ElementOpen.class, "WARN_ElementNotFound"),
                     StatusDisplayer.IMPORTANCE_ANNOTATION);
         }
         boolean success = UiUtils.open(fo, offsetA);
@@ -479,7 +508,7 @@
         result[2] = -1;
         result[3] = -1;
         result[4] = -1;
-        
+
         final JavaSource js = JavaSource.forFileObject(fo);
         if (js != null) {
             final Task<CompilationController> t = new Task<CompilationController>() {
@@ -504,7 +533,7 @@
                         }
                         return;
                     }
-                    
+
                     if (el.getKind() == ElementKind.PACKAGE) {
                         // FindDeclarationVisitor does not work since there is no visitPackage.
                         // Imprecise but should usually work:
@@ -551,34 +580,34 @@
             js.runUserActionTask(t, true);
         }
     }
-    
+
     // Private innerclasses ----------------------------------------------------
-    
+
     private static class FindDeclarationVisitor extends ErrorAwareTreePathScanner<Void, Void> {
-        
+
         private Element element;
         private Tree declTree;
         private CompilationInfo info;
-        
+
         public FindDeclarationVisitor(Element element, CompilationInfo info) {
             this.element = element;
             this.info = info;
         }
-        
+
 	@Override
         public Void visitClass(ClassTree tree, Void d) {
             handleDeclaration();
             super.visitClass(tree, d);
             return null;
         }
-        
+
 	@Override
         public Void visitMethod(MethodTree tree, Void d) {
             handleDeclaration();
             super.visitMethod(tree, d);
             return null;
         }
-        
+
 	@Override
         public Void visitVariable(VariableTree tree, Void d) {
             handleDeclaration();
@@ -592,22 +621,22 @@
             super.visitModule(node, p);
             return null;
         }
-    
+
         public void handleDeclaration() {
             Element found = info.getTrees().getElement(getCurrentPath());
-            
+
             if ( element.equals( found ) ) {
                 declTree = getCurrentPath().getLeaf();
             }
         }
-    
+
     }
 
     static {
         ElementOpenAccessor.setInstance(new ElementOpenAccessor() {
             @Override
             public Object[] getOpenInfo(ClasspathInfo cpInfo, ElementHandle<? extends Element> el, AtomicBoolean cancel) {
-                return ElementOpen.getOpenInfo(cpInfo, el, cancel);
+                return ElementOpen.getOpenInfo(cpInfo, el, null, cancel);
             }
 
             @Override
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/HTMLJavadocParser.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/HTMLJavadocParser.java
index 410da0a..dd408f3 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/HTMLJavadocParser.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/HTMLJavadocParser.java
@@ -247,16 +247,28 @@
 
             int div_counter = 0;
             int li_counter = 0;
+            int section_counter = 0;
             int nextHRPos = -1;
             int lastHRPos = -1;
 
             @Override
             public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
-                if (t == HTML.Tag.HR){
-                    if (state[0] == TEXT_START){
+                if (t == HTML.Tag.HR) {
+                    if (state[0] == TEXT_START) {
                         nextHRPos = pos;
                     }
                     lastHRPos = pos;
+                } else if (state[0] == AFTER_DIV
+                        && t instanceof HTML.UnknownTag
+                        && "section".equalsIgnoreCase(t.toString())) {
+                    if (a.containsAttribute(HTML.Attribute.ENDTAG, "true")) {
+                        if (--section_counter < 0) {
+                            offset[3] = pos;
+                            state[0] = INIT;
+                        }
+                    } else {
+                        section_counter++;
+                    }
                 }
             }
 
@@ -367,13 +379,34 @@
             int div_counter = 0;
             int dl_counter = 0;
             int li_counter = 0;
+            int section_counter = 0;
             int hrPos = -1;
             boolean startWithNextText;
 
             @Override
             public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
-                if (t == HTML.Tag.HR && state[0] == PRE_CLOSE){
+                if (t == HTML.Tag.HR && state[0] == PRE_CLOSE) {
                     hrPos = pos;
+                } else if (t instanceof HTML.UnknownTag
+                        && "section".equalsIgnoreCase(t.toString())) {
+                    if (a.containsAttribute(HTML.Attribute.ENDTAG, "true")) {
+                        if (state[0] != INIT) {
+                            if (--section_counter < 0) {
+                                state[0] = INIT;
+                                offset[1] = hrPos;
+                            }
+                        }
+                    } else {
+                        if (state[0] == INIT) {
+                            String attrId = (String) a.getAttribute(HTML.Attribute.ID);
+                            if (names.contains(attrId)) {
+                                // we have found desired javadoc member info anchor
+                                state[0] = A_OPEN;
+                            }
+                        } else {
+                            section_counter++;
+                        }
+                    }
                 }
             }
 
diff --git a/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/HTMLJavadocParserTest.java b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/HTMLJavadocParserTest.java
index 1ff3f14..4fec095 100644
--- a/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/HTMLJavadocParserTest.java
+++ b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/HTMLJavadocParserTest.java
@@ -34,9 +34,9 @@
       super(testName);
   }
 
-  /**
+  /*
    * Test of getJavadocText method ised with HTML produced by standard doclet.
-   */
+   *
   public void testGetJavadocText() throws MalformedURLException {
     URL url = HTMLJavadocParserTest.class.getResource("HTMLJavadocParser.html");
     String result = HTMLJavadocParser.getJavadocText(url, false);
@@ -46,10 +46,11 @@
         new URL(url, "HTMLJavadocParser.html#getJavadocText(java.net.URL, boolean)"), false);
     assertNotNull(result);
   }
+  */
 
-  /**
+  /*
    * Test of getJavadocText method used with javadoc from Android SDK.
-   */
+   *
   public void testGetAndroidJavadocText() throws MalformedURLException {
     URL url = HTMLJavadocParserTest.class.getResource("Activity.html");
     String result = HTMLJavadocParser.getJavadocText(url, false);
@@ -70,8 +71,57 @@
     assertTrue(result.contains("See Also"));
 
   }
+  */
   
   /**
+   * Test of getJavadocText method used with class output from javadoc 17.
+   */
+  public void testJavadoc17Class() throws Exception {
+    URL root = HTMLJavadocParserTest.class.getResource("Javadoc17Class.html");
+    String result = HTMLJavadocParser.getJavadocText(root, false);
+    assertNotNull(result);
+    assertTrue(result.contains("This is an example class."));
+    assertFalse(result.contains("</section>"));
+
+    URL url = appendFragment(root, "<init>(java.lang.String)");
+    result = HTMLJavadocParser.getJavadocText(url, false);
+    assertTrue(result.contains("This is a constructor taking a single String parameter."));
+    assertFalse(result.contains("</section>"));
+
+    url = appendFragment(root, "<init>(java.lang.String,java.lang.String)");
+    result = HTMLJavadocParser.getJavadocText(url, false);
+    assertTrue(result.contains("This is a constructor taking two String parameters."));
+    assertFalse(result.contains("</section>"));
+
+    url = appendFragment(root, "hi()");
+    result = HTMLJavadocParser.getJavadocText(url, false);
+    assertTrue(result.contains("A method."));
+    assertFalse(result.contains("</section>"));
+  }
+
+  /**
+   * Test of getJavadocText method used with enum output from javadoc 17.
+   */
+  public void testJavadoc17Enum() throws Exception {
+    URL root = HTMLJavadocParserTest.class.getResource("Javadoc17Enum.html");
+    String result = HTMLJavadocParser.getJavadocText(root, false);
+    assertNotNull(result);
+    assertTrue(result.contains("This is an example enum."));
+    assertFalse(result.contains("</section>"));
+
+    URL url = appendFragment(root, "FIRST");
+    result = HTMLJavadocParser.getJavadocText(url, false);
+    assertTrue(result.contains("The first value."));
+    assertFalse(result.contains("</section>"));
+
+    url = appendFragment(root, "hi()");
+    result = HTMLJavadocParser.getJavadocText(url, false);
+    assertTrue(result.contains("A method."));
+    assertFalse(result.contains("</section>"));
+
+  }
+
+  /**
    * Test of getJavadocText method used with class output from javadoc 11.
    */
   public void testJavadoc11Class() throws Exception {
@@ -151,6 +201,7 @@
     assertTrue(result.contains("A method."));
   }
   
+/*
   public void test199194() throws MalformedURLException {
     URL url = HTMLJavadocParserTest.class.getResource("JavaApplication1.html");
     String result = HTMLJavadocParser.getJavadocText(url, false);
@@ -173,6 +224,7 @@
         assertNotNull(result);
         assertTrue(result.contains("the selected file or"));
   }
+*/
   
   private static URL appendFragment(URL root, String unencodedFragment) throws Exception {
       StringBuilder uri = new StringBuilder(root.toExternalForm());
diff --git a/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Class.html b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Class.html
new file mode 100644
index 0000000..4e26718
--- /dev/null
+++ b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Class.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+-->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) on Tue Dec 20 15:09:09 GMT 2022 -->
+<title>JavadocClass (TestJavadoc 1.0.0-SNAPSHOT API)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2022-12-20">
+<meta name="description" content="declaration: class: JavadocClass">
+<meta name="generator" content="javadoc/ClassWriterImpl">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+<script type="text/javascript" src="script-dir/jquery-3.6.0.min.js"></script>
+<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-declaration-page">
+<script type="text/javascript">var evenRowColor = "even-row-color";
+var oddRowColor = "odd-row-color";
+var tableTab = "table-tab";
+var activeTableTab = "active-table-tab";
+var pathtoroot = "./";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar-top">
+<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
+<li><a href="index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="nav-bar-cell1-rev">Class</li>
+<li><a href="class-use/JavadocClass.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html#class">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div>
+<ul class="sub-nav-list">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method-summary">Method</a></li>
+</ul>
+<ul class="sub-nav-list">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method-detail">Method</a></li>
+</ul>
+</div>
+<div class="nav-list-search"><label for="search-input">SEARCH:</label>
+<input type="text" id="search-input" value="search" disabled="disabled">
+<input type="reset" id="reset-button" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip-navbar-top"></span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<h1 title="Class JavadocClass" class="title">Class JavadocClass</h1>
+</div>
+<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
+<div class="inheritance">JavadocClass</div>
+</div>
+<section class="class-description" id="class-description">
+<hr>
+<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">JavadocClass</span>
+<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
+<div class="block">This is an example class.</div>
+<dl class="notes">
+<dt>Since:</dt>
+<dd>now</dd>
+</dl>
+</section>
+<section class="summary">
+<ul class="summary-list">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<li>
+<section class="constructor-summary" id="constructor-summary">
+<h2>Constructor Summary</h2>
+<div class="caption"><span>Constructors</span></div>
+<div class="summary-table two-column-summary">
+<div class="table-header col-first">Constructor</div>
+<div class="table-header col-last">Description</div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">JavadocClass</a>()</code></div>
+<div class="col-last even-row-color">
+<div class="block">This is the default constructor.</div>
+</div>
+<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(java.lang.String)" class="member-name-link">JavadocClass</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">This is a constructor taking a single String parameter.</div>
+</div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.String,java.lang.String)" class="member-name-link">JavadocClass</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param1,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param2)</code></div>
+<div class="col-last even-row-color">
+<div class="block">This is a constructor taking two String parameters.</div>
+</div>
+</div>
+</section>
+</li>
+<!-- ========== METHOD SUMMARY =========== -->
+<li>
+<section class="method-summary" id="method-summary">
+<h2>Method Summary</h2>
+<div id="method-summary-table">
+<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
+<div id="method-summary-table.tabpanel" role="tabpanel">
+<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hi()" class="member-name-link">hi</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">A method.</div>
+</div>
+</div>
+</div>
+</div>
+<div class="inherited-list">
+<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
+<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
+</section>
+</li>
+</ul>
+</section>
+<section class="details">
+<ul class="details-list">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<li>
+<section class="constructor-details" id="constructor-detail">
+<h2>Constructor Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="&lt;init&gt;()">
+<h3>JavadocClass</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">JavadocClass</span>()</div>
+<div class="block">This is the default constructor.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="&lt;init&gt;(java.lang.String)">
+<h3>JavadocClass</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">JavadocClass</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param)</span></div>
+<div class="block">This is a constructor taking a single String parameter.</div>
+<dl class="notes">
+<dt>Parameters:</dt>
+<dd><code>param</code> - A parameter</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="&lt;init&gt;(java.lang.String,java.lang.String)">
+<h3>JavadocClass</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">JavadocClass</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param1,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;param2)</span></div>
+<div class="block">This is a constructor taking two String parameters.</div>
+<dl class="notes">
+<dt>Parameters:</dt>
+<dd><code>param1</code> - Parameter one.</dd>
+<dd><code>param2</code> - Parameter two.</dd>
+</dl>
+</section>
+</li>
+</ul>
+</section>
+</li>
+<!-- ============ METHOD DETAIL ========== -->
+<li>
+<section class="method-details" id="method-detail">
+<h2>Method Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="hi()">
+<h3>hi</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">hi</span>()</div>
+<div class="block">A method.</div>
+<dl class="notes">
+<dt>Returns:</dt>
+<dd>"hi"</dd>
+</dl>
+</section>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</section>
+<!-- ========= END OF CLASS DATA ========= -->
+</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2022. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Enum.html b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Enum.html
new file mode 100644
index 0000000..02d1794
--- /dev/null
+++ b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/Javadoc17Enum.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+-->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) on Tue Dec 20 15:09:09 GMT 2022 -->
+<title>JavadocEnum (TestJavadoc 1.0.0-SNAPSHOT API)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2022-12-20">
+<meta name="description" content="declaration: enum: JavadocEnum">
+<meta name="generator" content="javadoc/ClassWriterImpl">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+<script type="text/javascript" src="script-dir/jquery-3.6.0.min.js"></script>
+<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-declaration-page">
+<script type="text/javascript">var evenRowColor = "even-row-color";
+var oddRowColor = "odd-row-color";
+var tableTab = "table-tab";
+var activeTableTab = "active-table-tab";
+var pathtoroot = "./";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar-top">
+<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
+<li><a href="index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="nav-bar-cell1-rev">Class</li>
+<li><a href="class-use/JavadocEnum.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html#class">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div>
+<ul class="sub-nav-list">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#enum-constant-summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method-summary">Method</a></li>
+</ul>
+<ul class="sub-nav-list">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum-constant-detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method-detail">Method</a></li>
+</ul>
+</div>
+<div class="nav-list-search"><label for="search-input">SEARCH:</label>
+<input type="text" id="search-input" value="search" disabled="disabled">
+<input type="reset" id="reset-button" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip-navbar-top"></span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<h1 title="Enum Class JavadocEnum" class="title">Enum Class JavadocEnum</h1>
+</div>
+<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
+<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">java.lang.Enum</a>&lt;<a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a>&gt;
+<div class="inheritance">JavadocEnum</div>
+</div>
+</div>
+<section class="class-description" id="class-description">
+<dl class="notes">
+<dt>All Implemented Interfaces:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a></code>, <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html" title="class or interface in java.lang" class="external-link">Comparable</a>&lt;<a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a>&gt;</code>, <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/constant/Constable.html" title="class or interface in java.lang.constant" class="external-link">Constable</a></code></dd>
+</dl>
+<hr>
+<div class="type-signature"><span class="modifiers">public enum </span><span class="element-name type-name-label">JavadocEnum</span>
+<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a>&lt;<a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a>&gt;</span></div>
+<div class="block">This is an example enum.</div>
+</section>
+<section class="summary">
+<ul class="summary-list">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<li>
+<section class="nested-class-summary" id="nested-class-summary">
+<h2>Nested Class Summary</h2>
+<div class="inherited-list">
+<h2 id="nested-classes-inherited-from-class-java.lang.Enum">Nested classes/interfaces inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a></h2>
+<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">Enum.EnumDesc</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">E</a> extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">E</a>&gt;&gt;</code></div>
+</section>
+</li>
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<li>
+<section class="constants-summary" id="enum-constant-summary">
+<h2>Enum Constant Summary</h2>
+<div class="caption"><span>Enum Constants</span></div>
+<div class="summary-table two-column-summary">
+<div class="table-header col-first">Enum Constant</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code><a href="#FIRST" class="member-name-link">FIRST</a></code></div>
+<div class="col-last even-row-color">
+<div class="block">The first value.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="#SECOND" class="member-name-link">SECOND</a></code></div>
+<div class="col-last odd-row-color">
+<div class="block">The second value.</div>
+</div>
+</div>
+</section>
+</li>
+<!-- ========== METHOD SUMMARY =========== -->
+<li>
+<section class="method-summary" id="method-summary">
+<h2>Method Summary</h2>
+<div id="method-summary-table">
+<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
+<div id="method-summary-table.tabpanel" role="tabpanel">
+<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hi()" class="member-name-link">hi</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">A method.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#valueOf(java.lang.String)" class="member-name-link">valueOf</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="block">Returns the enum constant of this class with the specified name.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a>[]</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#values()" class="member-name-link">values</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="block">Returns an array containing the constants of this enum class, in
+the order they are declared.</div>
+</div>
+</div>
+</div>
+</div>
+<div class="inherited-list">
+<h3 id="methods-inherited-from-class-java.lang.Enum">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a></h3>
+<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#compareTo(E)" title="class or interface in java.lang" class="external-link">compareTo</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#describeConstable()" title="class or interface in java.lang" class="external-link">describeConstable</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#getDeclaringClass()" title="class or interface in java.lang" class="external-link">getDeclaringClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#name()" title="class or interface in java.lang" class="external-link">name</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#ordinal()" title="class or interface in java.lang" class="external-link">ordinal</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#valueOf(java.lang.Class,java.lang.String)" title="class or interface in java.lang" class="external-link">valueOf</a></code></div>
+<div class="inherited-list">
+<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
+<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
+</section>
+</li>
+</ul>
+</section>
+<section class="details">
+<ul class="details-list">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<li>
+<section class="constant-details" id="enum-constant-detail">
+<h2>Enum Constant Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="FIRST">
+<h3>FIRST</h3>
+<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a></span>&nbsp;<span class="element-name">FIRST</span></div>
+<div class="block">The first value.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="SECOND">
+<h3>SECOND</h3>
+<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a></span>&nbsp;<span class="element-name">SECOND</span></div>
+<div class="block">The second value.</div>
+</section>
+</li>
+</ul>
+</section>
+</li>
+<!-- ============ METHOD DETAIL ========== -->
+<li>
+<section class="method-details" id="method-detail">
+<h2>Method Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="values()">
+<h3>values</h3>
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a>[]</span>&nbsp;<span class="element-name">values</span>()</div>
+<div class="block">Returns an array containing the constants of this enum class, in
+the order they are declared.</div>
+<dl class="notes">
+<dt>Returns:</dt>
+<dd>an array containing the constants of this enum class, in the order they are declared</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="valueOf(java.lang.String)">
+<h3>valueOf</h3>
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="JavadocEnum.html" title="enum class in Unnamed Package">JavadocEnum</a></span>&nbsp;<span class="element-name">valueOf</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</span></div>
+<div class="block">Returns the enum constant of this class with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this class.  (Extraneous whitespace characters are 
+not permitted.)</div>
+<dl class="notes">
+<dt>Parameters:</dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt>Returns:</dt>
+<dd>the enum constant with the specified name</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if this enum class has no constant with the specified name</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html" title="class or interface in java.lang" class="external-link">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="hi()">
+<h3>hi</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">hi</span>()</div>
+<div class="block">A method.</div>
+<dl class="notes">
+<dt>Returns:</dt>
+<dd>"hi"</dd>
+</dl>
+</section>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</section>
+<!-- ========= END OF CLASS DATA ========= -->
+</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2022. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocClass.txt b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocClass.txt
new file mode 100644
index 0000000..8f00274
--- /dev/null
+++ b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocClass.txt
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+/**
+ * This is an example class.
+ *
+ * @since now
+ */
+public class JavadocClass {
+
+    /**
+     * This is the default constructor.
+     */
+    public JavadocClass() {
+    }
+
+    /**
+     * This is a constructor taking a single String parameter.
+     *
+     * @param param A parameter
+     */
+    public JavadocClass(String param) {
+    }
+
+    /**
+     * This is a constructor taking two String parameters.
+     *
+     * @param param1 Parameter one.
+     * @param param2 Parameter two.
+     */
+    public JavadocClass(String param1, String param2) {
+    }
+
+    /**
+     * A method.
+     *
+     * @return "hi"
+     */
+    public String hi() {
+        return "hi";
+    }
+}
+
diff --git a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocEnum.txt
similarity index 67%
rename from java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
rename to java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocEnum.txt
index 1416c3a..012fb4b 100644
--- a/java/classfile/test/unit/src/org/netbeans/modules/classfile/ConstantPoolTest.java
+++ b/java/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/JavadocEnum.txt
@@ -16,29 +16,29 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.netbeans.modules.classfile;
-
-import junit.framework.*;
 
 /**
- *
- * @author tball
+ * This is an example enum.
  */
-public class ConstantPoolTest extends TestCase {
-    
-    public ConstantPoolTest(String testName) {
-        super(testName);
-    }
-    
-    public void testGet() {
+public enum JavadocEnum {
+
+    /**
+     * The first value.
+     */
+    FIRST,
+    /**
+     * The second value.
+     */
+    SECOND;
+
+    /**
+     * A method.
+     *
+     * @return "hi"
+     */
+    public String hi() {
+        return "hi";
     }
 
-    public void testGetClass() {
-    }
-
-    public void testGetAllConstants() {
-    }
-
-    public void testGetAllClassNames() {
-    }
 }
+
diff --git a/java/java.testrunner.ant/nbproject/org-netbeans-modules-java-testrunner-ant.sig b/java/java.testrunner.ant/nbproject/org-netbeans-modules-java-testrunner-ant.sig
index aea8219..8490d39 100644
--- a/java/java.testrunner.ant/nbproject/org-netbeans-modules-java-testrunner-ant.sig
+++ b/java/java.testrunner.ant/nbproject/org-netbeans-modules-java-testrunner-ant.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.19
+#Version 1.20
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/java.testrunner.ui/nbproject/org-netbeans-modules-java-testrunner-ui.sig b/java/java.testrunner.ui/nbproject/org-netbeans-modules-java-testrunner-ui.sig
index c24017a..04162cc 100644
--- a/java/java.testrunner.ui/nbproject/org-netbeans-modules-java-testrunner-ui.sig
+++ b/java/java.testrunner.ui/nbproject/org-netbeans-modules-java-testrunner-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.21
+#Version 1.22
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/java/java.testrunner/nbproject/org-netbeans-modules-java-testrunner.sig b/java/java.testrunner/nbproject/org-netbeans-modules-java-testrunner.sig
index 385b470..9300162 100644
--- a/java/java.testrunner/nbproject/org-netbeans-modules-java-testrunner.sig
+++ b/java/java.testrunner/nbproject/org-netbeans-modules-java-testrunner.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.37
+#Version 1.38
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/javadoc/nbproject/project.properties b/java/javadoc/nbproject/project.properties
index d48602b..2330bba 100644
--- a/java/javadoc/nbproject/project.properties
+++ b/java/javadoc/nbproject/project.properties
@@ -25,3 +25,6 @@
 test.config.stableBTD.includes=\
     **/hints/AnalyzerTest.class,\
     **/search/*Test.class
+
+# failing
+test.config.default.excludes=**/search/*Test.class
diff --git a/java/javadoc/src/org/netbeans/modules/javadoc/hints/Analyzer.java b/java/javadoc/src/org/netbeans/modules/javadoc/hints/Analyzer.java
index 94772b2..1a75306 100644
--- a/java/javadoc/src/org/netbeans/modules/javadoc/hints/Analyzer.java
+++ b/java/javadoc/src/org/netbeans/modules/javadoc/hints/Analyzer.java
@@ -77,6 +77,7 @@
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVariable;
 import javax.lang.model.util.Elements;
 import javax.lang.model.util.Types;
 import org.netbeans.api.java.source.CompilationInfo;
@@ -676,8 +677,8 @@
         DocSourcePositions sp = (DocSourcePositions) javac.getTrees().getSourcePositions();
         int start = (int) sp.getStartPosition(javac.getCompilationUnit(), currentDocPath.getDocComment(), tree);
         int end = (int) sp.getEndPosition(javac.getCompilationUnit(), currentDocPath.getDocComment(), tree);
-        if (ex == null || (ex.asType().getKind() == TypeKind.DECLARED
-                && types.isAssignable(ex.asType(), throwable))) {
+        boolean isType = ex != null && (ex.asType().getKind() == TypeKind.DECLARED || ex.asType().getKind() == TypeKind.TYPEVAR);
+        if (ex == null || (isType && types.isAssignable(ex.asType(), throwable))) {
             switch (currentElement.getKind()) {
                 case CONSTRUCTOR:
                 case METHOD:
@@ -685,12 +686,14 @@
                             || types.isAssignable(ex.asType(), runtime))) {
                         ExecutableElement ee = (ExecutableElement) currentElement;
                         String fqn;
-                        if (ex != null) {
-                            fqn = ((TypeElement) ex).getQualifiedName().toString();
-                        } else {
+                        if (ex == null) {
                             ExpressionTree referenceClass = javac.getTreeUtilities().getReferenceClass(new DocTreePath(currentDocPath, exName));
                             if(referenceClass == null) break;
                             fqn = referenceClass.toString();
+                        } else if (ex.asType().getKind() == TypeKind.TYPEVAR) {
+                            fqn = ex.getSimpleName().toString();
+                        } else {
+                            fqn = ((TypeElement) ex).getQualifiedName().toString();
                         }
                         checkThrowsDeclared(tree, ex, fqn, ee.getThrownTypes(), dtph, start, end, errors);
                     }
diff --git a/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/AddTagFixTest.java b/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/AddTagFixTest.java
index 784c9df..3aa3ebb 100644
--- a/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/AddTagFixTest.java
+++ b/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/AddTagFixTest.java
@@ -641,6 +641,32 @@
                 + "}\n");
     }
 
+    public void testAddThrowsTagFix_NETBEANS_1615() throws Exception {
+        // issue NETBEANS-1615
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "interface Zima {\n"
+                + "    /**\n"
+                + "     */\n"
+                + "    <X extends Exception> void leden() throws X;\n"
+                + "}\n")
+                .preference(AVAILABILITY_KEY + true, true)
+                .preference(SCOPE_KEY, "private")
+                .run(JavadocHint.class)
+                .findWarning("4:46-4:47:warning:Missing @throws tag for X")
+                .applyFix("Add @throws X tag")
+                .assertCompilable()
+                .assertOutput(
+                "package test;\n"
+                + "interface Zima {\n"
+                + "    /**\n"
+                + "     * @throws X\n"
+                + "     */\n"
+                + "    <X extends Exception> void leden() throws X;\n"
+                + "}\n");
+    }
+
     public void testAddThrowsTagFix_NestedClass_160414() throws Exception {
         // issue 160414
         HintTest.create()
diff --git a/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/Analyzer2Test.java b/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/Analyzer2Test.java
index 477c0ac..77dab6f 100644
--- a/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/Analyzer2Test.java
+++ b/java/javadoc/test/unit/src/org/netbeans/modules/javadoc/hints/Analyzer2Test.java
@@ -182,6 +182,23 @@
                 .assertNotContainsWarnings("Unknown throwable: @throws java.nio.file.NoSuchFileException");
     }
        
+    public void testExceptionTypeAnalyzer() throws Exception {
+        // issue NETBEANS-1615
+        HintTest.create()
+                .input(
+                "package test;\n"
+                + "interface Zima {\n"
+                + "    /**\n"
+                + "     * @throws X\n"
+                + "     */\n"
+                + "    <X extends Exception> void leden() throws X;\n"
+                + "}\n")
+                .preference(AVAILABILITY_KEY + true, true)
+                .preference(SCOPE_KEY, "private")
+                .run(JavadocHint.class)
+                .assertNotContainsWarnings("Missing @throws tag for X");
+    }
+
     public void testInheritanceAnalyzer() throws Exception {
         HintTest.create()
                 .input(
diff --git a/java/javaee.injection/nbproject/org-netbeans-modules-javaee-injection.sig b/java/javaee.injection/nbproject/org-netbeans-modules-javaee-injection.sig
index e01ce6b..23a132d 100644
--- a/java/javaee.injection/nbproject/org-netbeans-modules-javaee-injection.sig
+++ b/java/javaee.injection/nbproject/org-netbeans-modules-javaee-injection.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.23
+#Version 1.24
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/javaee.injection/nbproject/project.properties b/java/javaee.injection/nbproject/project.properties
index bd782ba..9f9ea40 100644
--- a/java/javaee.injection/nbproject/project.properties
+++ b/java/javaee.injection/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 requires.nb.javac=true
diff --git a/java/jellytools.java/nbproject/org-netbeans-modules-jellytools-java.sig b/java/jellytools.java/nbproject/org-netbeans-modules-jellytools-java.sig
index 472c9a2..7bc981f 100644
--- a/java/jellytools.java/nbproject/org-netbeans-modules-jellytools-java.sig
+++ b/java/jellytools.java/nbproject/org-netbeans-modules-jellytools-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.47
+#Version 3.48
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/java/jellytools.java/nbproject/project.properties b/java/jellytools.java/nbproject/project.properties
index 0dc8dfd..db1d389 100644
--- a/java/jellytools.java/nbproject/project.properties
+++ b/java/jellytools.java/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stable.includes=\
diff --git a/java/jshell.support/src/org/netbeans/modules/jshell/editor/Bundle.properties b/java/jshell.support/src/org/netbeans/modules/jshell/editor/Bundle.properties
index 3ba7806..b38dddc 100644
--- a/java/jshell.support/src/org/netbeans/modules/jshell/editor/Bundle.properties
+++ b/java/jshell.support/src/org/netbeans/modules/jshell/editor/Bundle.properties
@@ -24,7 +24,7 @@
 
 jshell-execute=Execute Shell Input
 jshell-reset=Reset Java Shell
-jshell-stop=Interrupt exeution
+jshell-stop=Interrupt execution
 jshell-save-to-class=Save To Class
 ClassNamePanel.className.text=
 ClassNamePanel.message.text=\ 
diff --git a/java/jshell.support/src/org/netbeans/modules/jshell/resources/layer.xml b/java/jshell.support/src/org/netbeans/modules/jshell/resources/layer.xml
index ce1b624..5a95097 100644
--- a/java/jshell.support/src/org/netbeans/modules/jshell/resources/layer.xml
+++ b/java/jshell.support/src/org/netbeans/modules/jshell/resources/layer.xml
@@ -34,15 +34,6 @@
     </folder>
     <folder name="jshell-snippets"/>
     <folder name="Editors">
-        <folder name="Popup">
-            <folder name="text">
-                <attr name="position" intvalue="9800"/>
-                <folder name="x-repl">
-                    <attr name="position" intvalue="9800"/>
-                </folder>
-            </folder>
-        </folder>
-
         <folder name="text">
             <folder name="x-repl">
                 <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.jshell.resources.Bundle"/>
diff --git a/java/junit.ant.ui/src/org/netbeans/modules/junit/ant/ui/AntJUnitNodeOpener.java b/java/junit.ant.ui/src/org/netbeans/modules/junit/ant/ui/AntJUnitNodeOpener.java
index 285f1d3..7742482 100644
--- a/java/junit.ant.ui/src/org/netbeans/modules/junit/ant/ui/AntJUnitNodeOpener.java
+++ b/java/junit.ant.ui/src/org/netbeans/modules/junit/ant/ui/AntJUnitNodeOpener.java
@@ -59,7 +59,7 @@
 
     public void openTestsuite(TestsuiteNode node) {
         TestSuite suite = node.getSuite();
-        if ((suite != null) && (suite instanceof JUnitTestSuite)){
+        if (suite instanceof JUnitTestSuite) {
             final FileObject fo = ((JUnitTestSuite)suite).getSuiteFO();
             if (fo != null){
                 final long[] line = new long[]{0};
diff --git a/java/junit.ui/nbproject/org-netbeans-modules-junit-ui.sig b/java/junit.ui/nbproject/org-netbeans-modules-junit-ui.sig
index 23b5870..adfe2a5 100644
--- a/java/junit.ui/nbproject/org-netbeans-modules-junit-ui.sig
+++ b/java/junit.ui/nbproject/org-netbeans-modules-junit-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.24
+#Version 1.25
 
 CLSS public java.beans.FeatureDescriptor
 cons public init()
diff --git a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/EmptyTestCaseWizardIterator.java b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/EmptyTestCaseWizardIterator.java
index 7824a99..19e81ce 100644
--- a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/EmptyTestCaseWizardIterator.java
+++ b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/EmptyTestCaseWizardIterator.java
@@ -135,7 +135,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/SimpleTestCaseWizardIterator.java b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/SimpleTestCaseWizardIterator.java
index 4a5b6fa..1dcc081 100644
--- a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/SimpleTestCaseWizardIterator.java
+++ b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/SimpleTestCaseWizardIterator.java
@@ -121,7 +121,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/TestSuiteWizardIterator.java b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/TestSuiteWizardIterator.java
index 0ea0875..cb10201 100644
--- a/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/TestSuiteWizardIterator.java
+++ b/java/junit.ui/src/org/netbeans/modules/junit/ui/wizards/TestSuiteWizardIterator.java
@@ -136,7 +136,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/junit/nbproject/org-netbeans-modules-junit.sig b/java/junit/nbproject/org-netbeans-modules-junit.sig
index 208a796..eff0ae4 100644
--- a/java/junit/nbproject/org-netbeans-modules-junit.sig
+++ b/java/junit/nbproject/org-netbeans-modules-junit.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.91
+#Version 2.92
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/ko4j.debugging/nbproject/project.properties b/java/ko4j.debugging/nbproject/project.properties
index 7550355..16bac72 100644
--- a/java/ko4j.debugging/nbproject/project.properties
+++ b/java/ko4j.debugging/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 nbm.homepage=http://bits.netbeans.org/html+java/
diff --git a/java/kotlin.editor/nbproject/project.properties b/java/kotlin.editor/nbproject/project.properties
index 7c940c4..5137752 100644
--- a/java/kotlin.editor/nbproject/project.properties
+++ b/java/kotlin.editor/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/languages.antlr/nbproject/project.xml b/java/languages.antlr/nbproject/project.xml
index 98efb93..05c1ef1 100644
--- a/java/languages.antlr/nbproject/project.xml
+++ b/java/languages.antlr/nbproject/project.xml
@@ -48,7 +48,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.18</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -141,6 +142,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.lexer.antlr4</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>1.0</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.parsing.api</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -230,20 +239,6 @@
                     </run-dependency>
                 </dependency>
             </module-dependencies>
-            <test-dependencies>
-                <test-type>
-                    <name>unit</name>
-                    <test-dependency>
-                        <code-name-base>org.netbeans.libs.junit4</code-name-base>
-                        <compile-dependency/>
-                    </test-dependency>
-                    <test-dependency>
-                        <code-name-base>org.netbeans.modules.nbjunit</code-name-base>
-                        <recursive/>
-                        <compile-dependency/>
-                    </test-dependency>
-                </test-type>
-            </test-dependencies>
             <public-packages/>
         </data>
     </configuration>
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Lexer.java b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Lexer.java
index bc07205..ea5618a 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Lexer.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Lexer.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv3Lexer.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -36,9 +36,9 @@
 import org.antlr.v4.runtime.dfa.DFA;
 import org.antlr.v4.runtime.misc.*;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class ANTLRv3Lexer extends LexerAdaptor {
-	static { RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -241,379 +241,651 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\\\u0408\b\1\b\1\b"+
-		"\1\b\1\b\1\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b"+
-		"\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t"+
-		"\20\4\21\t\21\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t"+
-		"\27\4\30\t\30\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t"+
-		"\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t"+
-		"(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t"+
-		"\62\4\63\t\63\4\64\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t"+
-		":\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4"+
-		"F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\t"+
-		"Q\4R\tR\4S\tS\4T\tT\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\"+
-		"\4]\t]\4^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h"+
-		"\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts"+
-		"\4t\tt\4u\tu\4v\tv\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177"+
-		"\t\177\4\u0080\t\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083"+
-		"\4\u0084\t\u0084\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088"+
-		"\t\u0088\4\u0089\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c"+
-		"\4\u008d\t\u008d\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091"+
-		"\t\u0091\4\u0092\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095"+
-		"\4\u0096\t\u0096\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\3\2\3"+
-		"\2\3\2\3\2\3\2\7\2\u013e\n\2\f\2\16\2\u0141\13\2\3\2\3\2\3\2\5\2\u0146"+
-		"\n\2\3\2\3\2\3\3\3\3\3\3\3\3\7\3\u014e\n\3\f\3\16\3\u0151\13\3\3\3\3\3"+
-		"\3\4\3\4\3\4\3\4\7\4\u0159\n\4\f\4\16\4\u015c\13\4\3\4\3\4\3\4\3\4\3\4"+
-		"\3\5\6\5\u0164\n\5\r\5\16\5\u0165\3\6\3\6\3\6\3\6\3\7\3\7\3\7\7\7\u016f"+
-		"\n\7\f\7\16\7\u0172\13\7\3\7\3\7\3\b\3\b\5\b\u0178\n\b\3\t\3\t\3\t\7\t"+
-		"\u017d\n\t\f\t\16\t\u0180\13\t\3\t\3\t\3\n\3\n\3\n\3\n\7\n\u0188\n\n\f"+
-		"\n\16\n\u018b\13\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13"+
-		"\3\13\5\13\u0199\n\13\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\17\3\17"+
-		"\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20"+
-		"\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22"+
-		"\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24"+
-		"\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26"+
-		"\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30"+
-		"\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31"+
-		"\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33"+
-		"\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35"+
-		"\3\36\3\36\3\36\7\36\u0219\n\36\f\36\16\36\u021c\13\36\3\37\3\37\3 \3"+
-		" \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3"+
-		"+\3,\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3"+
-		"\63\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\67\3\67\38\38\39\39\59\u0257"+
-		"\n9\39\69\u025a\n9\r9\169\u025b\39\39\3:\3:\7:\u0262\n:\f:\16:\u0265\13"+
-		":\3;\3;\7;\u0269\n;\f;\16;\u026c\13;\3<\3<\5<\u0270\n<\3=\3=\3>\3>\3?"+
-		"\3?\3?\3?\7?\u027a\n?\f?\16?\u027d\13?\3?\3?\3?\5?\u0282\n?\3@\3@\3@\3"+
-		"@\3@\7@\u0289\n@\f@\16@\u028c\13@\3@\3@\3@\5@\u0291\n@\3A\3A\3A\3A\7A"+
-		"\u0297\nA\fA\16A\u029a\13A\3B\3B\3B\3B\3B\5B\u02a1\nB\3C\3C\3C\3D\3D\3"+
-		"D\3D\3D\5D\u02ab\nD\5D\u02ad\nD\5D\u02af\nD\5D\u02b1\nD\3E\3E\3E\7E\u02b6"+
-		"\nE\fE\16E\u02b9\13E\5E\u02bb\nE\3F\3F\3G\3G\3H\3H\3H\3H\3H\3H\3H\3H\3"+
-		"H\5H\u02ca\nH\3I\3I\3I\5I\u02cf\nI\3I\3I\3J\3J\3J\7J\u02d6\nJ\fJ\16J\u02d9"+
-		"\13J\3J\3J\3K\3K\3K\7K\u02e0\nK\fK\16K\u02e3\13K\3K\3K\3L\3L\3L\7L\u02ea"+
-		"\nL\fL\16L\u02ed\13L\3M\3M\3M\3M\5M\u02f3\nM\3N\3N\3O\3O\3O\3O\3P\3P\3"+
-		"Q\3Q\3R\3R\3R\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3"+
-		"[\3\\\3\\\3]\3]\3^\3^\3_\3_\3`\3`\3a\3a\3b\3b\3b\3c\3c\3d\3d\3e\3e\3f"+
-		"\3f\3g\3g\3h\3h\3i\3i\3i\3j\3j\3k\3k\3l\3l\3m\3m\3m\3m\3m\3n\3n\3n\3n"+
-		"\3o\3o\3o\3o\3p\3p\3p\3p\3q\3q\3q\3r\3r\3r\3r\3s\3s\3t\3t\3t\3t\3t\3u"+
-		"\3u\3u\3u\3v\3v\3v\3v\3w\3w\3w\3w\3x\3x\3x\3x\3y\3y\3y\3y\3z\3z\3z\3z"+
-		"\3{\3{\3{\3|\3|\3|\3|\3}\3}\3~\3~\3~\3~\3~\3\177\3\177\3\177\3\177\3\177"+
-		"\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0082"+
-		"\3\u0082\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0083\3\u0084"+
-		"\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086"+
-		"\3\u0086\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088"+
-		"\3\u0088\3\u0089\3\u0089\3\u0089\3\u0089\3\u008a\6\u008a\u03ad\n\u008a"+
-		"\r\u008a\16\u008a\u03ae\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b"+
-		"\3\u008b\3\u008b\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008d\3\u008d"+
-		"\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e\3\u008f\3\u008f"+
-		"\3\u008f\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091\3\u0091"+
-		"\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0093"+
-		"\3\u0093\3\u0093\7\u0093\u03dd\n\u0093\f\u0093\16\u0093\u03e0\13\u0093"+
-		"\3\u0093\3\u0093\3\u0093\3\u0093\3\u0094\3\u0094\3\u0094\3\u0094\3\u0095"+
-		"\6\u0095\u03eb\n\u0095\r\u0095\16\u0095\u03ec\3\u0095\3\u0095\3\u0095"+
-		"\3\u0096\3\u0096\6\u0096\u03f4\n\u0096\r\u0096\16\u0096\u03f5\3\u0096"+
-		"\3\u0096\3\u0097\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098"+
-		"\3\u0099\3\u0099\7\u0099\u0404\n\u0099\f\u0099\16\u0099\u0407\13\u0099"+
-		"\7\u013f\u015a\u0189\u027b\u028a\2\u009a\b\3\n)\f*\16+\20,\22-\24\2\26"+
-		".\30/\32\2\34\2\36\60 \61\"\62$\63&\64(\65*#,\66.\5\60\4\62\67\648\66"+
-		"98::\36<;><@\2B=D&F>H?J@LANBPCRDTEVFXGZH\\\f^I`Jb\'d%fKhLjMlNn$pOrPtQ"+
-		"vRxSzT|\2~\2\u0080\2\u0082\2\u0084\2\u0086\2\u0088\2\u008a\2\u008c\2\u008e"+
-		"\2\u0090\2\u0092\2\u0094\2\u0096\2\u0098\2\u009a\2\u009c\2\u009e\2\u00a0"+
-		"\2\u00a2\2\u00a4\2\u00a6\2\u00a8\2\u00aa\2\u00ac\2\u00ae\2\u00b0\2\u00b2"+
-		"\2\u00b4\2\u00b6\2\u00b8\2\u00ba\2\u00bc\2\u00be\2\u00c0\2\u00c2\2\u00c4"+
-		"\2\u00c6\2\u00c8\2\u00ca\2\u00cc\2\u00ce\2\u00d0\2\u00d2\2\u00d4\2\u00d6"+
-		"\2\u00d8\2\u00da\2\u00dc\2\u00de\2\u00e0\2\u00e2\2\u00e4\2\u00e6U\u00e8"+
-		"V\u00eaW\u00ec\2\u00ee\2\u00f0\2\u00f2\2\u00f4\2\u00f6\2\u00f8\2\u00fa"+
-		"X\u00fcY\u00fe(\u0100\2\u0102\2\u0104\2\u0106Z\u0108\2\u010a\2\u010c\2"+
-		"\u010e\2\u0110\2\u0112\2\u0114\2\u0116\2\u0118\2\u011a\2\u011c\2\u011e"+
-		"\2\u0120\2\u0122\2\u0124\2\u0126\2\u0128\2\u012a\2\u012c\2\u012e\2\u0130"+
-		"\2\u0132[\u0134\\\u0136\2\b\2\3\4\5\6\7\22\4\2\f\f\17\17\4\2))^^\4\2$"+
-		"$^^\13\2$$))@@^^ddhhppttvv\5\2\62;CHch\4\2\13\13\"\"\6\2\62;C\\aac|\4"+
-		"\2\f\f\16\17\n\2$$))^^ddhhppttvv\3\2\63;\3\2\62;\6\2\f\f\17\17))^^\6\2"+
-		"\f\f\17\17$$^^\5\2\u00b9\u00b9\u0302\u0371\u2041\u2042\17\2C\\c|\u00c2"+
-		"\u00d8\u00da\u00f8\u00fa\u0301\u0372\u037f\u0381\u2001\u200e\u200f\u2072"+
-		"\u2191\u2c02\u2ff1\u3003\ud801\uf902\ufdd1\ufdf2\uffff\3\2^_\2\u0400\2"+
-		"\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2"+
-		"\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$"+
-		"\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3"+
-		"\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2"+
-		"<\3\2\2\2\2>\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3"+
-		"\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2"+
-		"\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2"+
-		"\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p"+
-		"\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\3\u00de"+
-		"\3\2\2\2\3\u00e0\3\2\2\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2\2\3\u00e6\3\2\2"+
-		"\2\3\u00e8\3\2\2\2\3\u00ea\3\2\2\2\4\u00ec\3\2\2\2\4\u00ee\3\2\2\2\4\u00f0"+
-		"\3\2\2\2\4\u00f2\3\2\2\2\4\u00f4\3\2\2\2\4\u00f6\3\2\2\2\4\u00f8\3\2\2"+
-		"\2\4\u00fa\3\2\2\2\4\u00fc\3\2\2\2\4\u00fe\3\2\2\2\5\u0100\3\2\2\2\5\u0102"+
-		"\3\2\2\2\5\u0104\3\2\2\2\5\u0106\3\2\2\2\5\u0108\3\2\2\2\5\u010a\3\2\2"+
-		"\2\5\u010c\3\2\2\2\5\u010e\3\2\2\2\5\u0110\3\2\2\2\5\u0112\3\2\2\2\5\u0114"+
-		"\3\2\2\2\5\u0116\3\2\2\2\5\u0118\3\2\2\2\6\u011a\3\2\2\2\6\u011c\3\2\2"+
-		"\2\6\u011e\3\2\2\2\6\u0120\3\2\2\2\6\u0122\3\2\2\2\6\u0124\3\2\2\2\6\u0126"+
-		"\3\2\2\2\6\u0128\3\2\2\2\6\u012a\3\2\2\2\6\u012c\3\2\2\2\6\u012e\3\2\2"+
-		"\2\7\u0130\3\2\2\2\7\u0132\3\2\2\2\7\u0134\3\2\2\2\b\u0138\3\2\2\2\n\u0149"+
-		"\3\2\2\2\f\u0154\3\2\2\2\16\u0163\3\2\2\2\20\u0167\3\2\2\2\22\u016b\3"+
-		"\2\2\2\24\u0177\3\2\2\2\26\u0179\3\2\2\2\30\u0183\3\2\2\2\32\u018f\3\2"+
-		"\2\2\34\u019a\3\2\2\2\36\u019c\3\2\2\2 \u019f\3\2\2\2\"\u01a3\3\2\2\2"+
-		"$\u01ad\3\2\2\2&\u01b6\3\2\2\2(\u01bc\3\2\2\2*\u01c4\3\2\2\2,\u01cd\3"+
-		"\2\2\2.\u01d5\3\2\2\2\60\u01db\3\2\2\2\62\u01e2\3\2\2\2\64\u01ea\3\2\2"+
-		"\2\66\u01f4\3\2\2\28\u01fb\3\2\2\2:\u0203\3\2\2\2<\u0209\3\2\2\2>\u0210"+
-		"\3\2\2\2@\u021a\3\2\2\2B\u021d\3\2\2\2D\u021f\3\2\2\2F\u0221\3\2\2\2H"+
-		"\u0223\3\2\2\2J\u0225\3\2\2\2L\u0227\3\2\2\2N\u0229\3\2\2\2P\u022b\3\2"+
-		"\2\2R\u022d\3\2\2\2T\u022f\3\2\2\2V\u0231\3\2\2\2X\u0233\3\2\2\2Z\u0235"+
-		"\3\2\2\2\\\u0237\3\2\2\2^\u023a\3\2\2\2`\u023c\3\2\2\2b\u023e\3\2\2\2"+
-		"d\u0240\3\2\2\2f\u0242\3\2\2\2h\u0244\3\2\2\2j\u0246\3\2\2\2l\u0249\3"+
-		"\2\2\2n\u024b\3\2\2\2p\u024e\3\2\2\2r\u0250\3\2\2\2t\u0252\3\2\2\2v\u0259"+
-		"\3\2\2\2x\u025f\3\2\2\2z\u0266\3\2\2\2|\u026f\3\2\2\2~\u0271\3\2\2\2\u0080"+
-		"\u0273\3\2\2\2\u0082\u0275\3\2\2\2\u0084\u0283\3\2\2\2\u0086\u0292\3\2"+
-		"\2\2\u0088\u029b\3\2\2\2\u008a\u02a2\3\2\2\2\u008c\u02a5\3\2\2\2\u008e"+
-		"\u02ba\3\2\2\2\u0090\u02bc\3\2\2\2\u0092\u02be\3\2\2\2\u0094\u02c9\3\2"+
-		"\2\2\u0096\u02cb\3\2\2\2\u0098\u02d2\3\2\2\2\u009a\u02dc\3\2\2\2\u009c"+
-		"\u02e6\3\2\2\2\u009e\u02f2\3\2\2\2\u00a0\u02f4\3\2\2\2\u00a2\u02f6\3\2"+
-		"\2\2\u00a4\u02fa\3\2\2\2\u00a6\u02fc\3\2\2\2\u00a8\u02fe\3\2\2\2\u00aa"+
-		"\u0301\3\2\2\2\u00ac\u0303\3\2\2\2\u00ae\u0305\3\2\2\2\u00b0\u0307\3\2"+
-		"\2\2\u00b2\u0309\3\2\2\2\u00b4\u030b\3\2\2\2\u00b6\u030d\3\2\2\2\u00b8"+
-		"\u030f\3\2\2\2\u00ba\u0311\3\2\2\2\u00bc\u0314\3\2\2\2\u00be\u0316\3\2"+
-		"\2\2\u00c0\u0318\3\2\2\2\u00c2\u031a\3\2\2\2\u00c4\u031c\3\2\2\2\u00c6"+
-		"\u031e\3\2\2\2\u00c8\u0320\3\2\2\2\u00ca\u0323\3\2\2\2\u00cc\u0325\3\2"+
-		"\2\2\u00ce\u0327\3\2\2\2\u00d0\u0329\3\2\2\2\u00d2\u032b\3\2\2\2\u00d4"+
-		"\u032d\3\2\2\2\u00d6\u032f\3\2\2\2\u00d8\u0332\3\2\2\2\u00da\u0334\3\2"+
-		"\2\2\u00dc\u0336\3\2\2\2\u00de\u0338\3\2\2\2\u00e0\u033d\3\2\2\2\u00e2"+
-		"\u0341\3\2\2\2\u00e4\u0345\3\2\2\2\u00e6\u0349\3\2\2\2\u00e8\u034c\3\2"+
-		"\2\2\u00ea\u0350\3\2\2\2\u00ec\u0352\3\2\2\2\u00ee\u0357\3\2\2\2\u00f0"+
-		"\u035b\3\2\2\2\u00f2\u035f\3\2\2\2\u00f4\u0363\3\2\2\2\u00f6\u0367\3\2"+
-		"\2\2\u00f8\u036b\3\2\2\2\u00fa\u036f\3\2\2\2\u00fc\u0372\3\2\2\2\u00fe"+
-		"\u0376\3\2\2\2\u0100\u0378\3\2\2\2\u0102\u037d\3\2\2\2\u0104\u0382\3\2"+
-		"\2\2\u0106\u0387\3\2\2\2\u0108\u038a\3\2\2\2\u010a\u038f\3\2\2\2\u010c"+
-		"\u0393\3\2\2\2\u010e\u0397\3\2\2\2\u0110\u039b\3\2\2\2\u0112\u039f\3\2"+
-		"\2\2\u0114\u03a3\3\2\2\2\u0116\u03a7\3\2\2\2\u0118\u03ac\3\2\2\2\u011a"+
-		"\u03b3\3\2\2\2\u011c\u03b8\3\2\2\2\u011e\u03bd\3\2\2\2\u0120\u03c2\3\2"+
-		"\2\2\u0122\u03c6\3\2\2\2\u0124\u03cb\3\2\2\2\u0126\u03cf\3\2\2\2\u0128"+
-		"\u03d3\3\2\2\2\u012a\u03d9\3\2\2\2\u012c\u03e5\3\2\2\2\u012e\u03ea\3\2"+
-		"\2\2\u0130\u03f3\3\2\2\2\u0132\u03f9\3\2\2\2\u0134\u03fd\3\2\2\2\u0136"+
-		"\u0401\3\2\2\2\u0138\u0139\7\61\2\2\u0139\u013a\7,\2\2\u013a\u013b\7,"+
-		"\2\2\u013b\u013f\3\2\2\2\u013c\u013e\13\2\2\2\u013d\u013c\3\2\2\2\u013e"+
-		"\u0141\3\2\2\2\u013f\u0140\3\2\2\2\u013f\u013d\3\2\2\2\u0140\u0145\3\2"+
-		"\2\2\u0141\u013f\3\2\2\2\u0142\u0143\7,\2\2\u0143\u0146\7\61\2\2\u0144"+
-		"\u0146\7\2\2\3\u0145\u0142\3\2\2\2\u0145\u0144\3\2\2\2\u0146\u0147\3\2"+
-		"\2\2\u0147\u0148\b\2\2\2\u0148\t\3\2\2\2\u0149\u014a\7\61\2\2\u014a\u014b"+
-		"\7\61\2\2\u014b\u014f\3\2\2\2\u014c\u014e\n\2\2\2\u014d\u014c\3\2\2\2"+
-		"\u014e\u0151\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0152"+
-		"\3\2\2\2\u0151\u014f\3\2\2\2\u0152\u0153\b\3\2\2\u0153\13\3\2\2\2\u0154"+
-		"\u0155\7\61\2\2\u0155\u0156\7,\2\2\u0156\u015a\3\2\2\2\u0157\u0159\13"+
-		"\2\2\2\u0158\u0157\3\2\2\2\u0159\u015c\3\2\2\2\u015a\u015b\3\2\2\2\u015a"+
-		"\u0158\3\2\2\2\u015b\u015d\3\2\2\2\u015c\u015a\3\2\2\2\u015d\u015e\7,"+
-		"\2\2\u015e\u015f\7\61\2\2\u015f\u0160\3\2\2\2\u0160\u0161\b\4\2\2\u0161"+
-		"\r\3\2\2\2\u0162\u0164\4\62;\2\u0163\u0162\3\2\2\2\u0164\u0165\3\2\2\2"+
-		"\u0165\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166\17\3\2\2\2\u0167\u0168"+
-		"\7)\2\2\u0168\u0169\5\24\b\2\u0169\u016a\7)\2\2\u016a\21\3\2\2\2\u016b"+
-		"\u016c\7)\2\2\u016c\u0170\5\24\b\2\u016d\u016f\5\24\b\2\u016e\u016d\3"+
-		"\2\2\2\u016f\u0172\3\2\2\2\u0170\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171"+
-		"\u0173\3\2\2\2\u0172\u0170\3\2\2\2\u0173\u0174\7)\2\2\u0174\23\3\2\2\2"+
-		"\u0175\u0178\5\32\13\2\u0176\u0178\n\3\2\2\u0177\u0175\3\2\2\2\u0177\u0176"+
-		"\3\2\2\2\u0178\25\3\2\2\2\u0179\u017e\7$\2\2\u017a\u017d\5\32\13\2\u017b"+
-		"\u017d\n\4\2\2\u017c\u017a\3\2\2\2\u017c\u017b\3\2\2\2\u017d\u0180\3\2"+
-		"\2\2\u017e\u017c\3\2\2\2\u017e\u017f\3\2\2\2\u017f\u0181\3\2\2\2\u0180"+
-		"\u017e\3\2\2\2\u0181\u0182\7$\2\2\u0182\27\3\2\2\2\u0183\u0184\7>\2\2"+
-		"\u0184\u0185\7>\2\2\u0185\u0189\3\2\2\2\u0186\u0188\13\2\2\2\u0187\u0186"+
-		"\3\2\2\2\u0188\u018b\3\2\2\2\u0189\u018a\3\2\2\2\u0189\u0187\3\2\2\2\u018a"+
-		"\u018c\3\2\2\2\u018b\u0189\3\2\2\2\u018c\u018d\7@\2\2\u018d\u018e\7@\2"+
-		"\2\u018e\31\3\2\2\2\u018f\u0198\7^\2\2\u0190\u0199\t\5\2\2\u0191\u0192"+
-		"\7w\2\2\u0192\u0193\5\34\f\2\u0193\u0194\5\34\f\2\u0194\u0195\5\34\f\2"+
-		"\u0195\u0196\5\34\f\2\u0196\u0199\3\2\2\2\u0197\u0199\13\2\2\2\u0198\u0190"+
-		"\3\2\2\2\u0198\u0191\3\2\2\2\u0198\u0197\3\2\2\2\u0199\33\3\2\2\2\u019a"+
-		"\u019b\t\6\2\2\u019b\35\3\2\2\2\u019c\u019d\5\u00b6Y\2\u019d\u019e\b\r"+
-		"\3\2\u019e\37\3\2\2\2\u019f\u01a0\5\u00b2W\2\u01a0\u01a1\3\2\2\2\u01a1"+
-		"\u01a2\b\16\4\2\u01a2!\3\2\2\2\u01a3\u01a4\7q\2\2\u01a4\u01a5\7r\2\2\u01a5"+
-		"\u01a6\7v\2\2\u01a6\u01a7\7k\2\2\u01a7\u01a8\7q\2\2\u01a8\u01a9\7p\2\2"+
-		"\u01a9\u01aa\7u\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01ac\b\17\5\2\u01ac#\3"+
-		"\2\2\2\u01ad\u01ae\7v\2\2\u01ae\u01af\7q\2\2\u01af\u01b0\7m\2\2\u01b0"+
-		"\u01b1\7g\2\2\u01b1\u01b2\7p\2\2\u01b2\u01b3\7u\2\2\u01b3\u01b4\3\2\2"+
-		"\2\u01b4\u01b5\b\20\6\2\u01b5%\3\2\2\2\u01b6\u01b7\7e\2\2\u01b7\u01b8"+
-		"\7c\2\2\u01b8\u01b9\7v\2\2\u01b9\u01ba\7e\2\2\u01ba\u01bb\7j\2\2\u01bb"+
-		"\'\3\2\2\2\u01bc\u01bd\7h\2\2\u01bd\u01be\7k\2\2\u01be\u01bf\7p\2\2\u01bf"+
-		"\u01c0\7c\2\2\u01c0\u01c1\7n\2\2\u01c1\u01c2\7n\2\2\u01c2\u01c3\7{\2\2"+
-		"\u01c3)\3\2\2\2\u01c4\u01c5\7h\2\2\u01c5\u01c6\7t\2\2\u01c6\u01c7\7c\2"+
-		"\2\u01c7\u01c8\7i\2\2\u01c8\u01c9\7o\2\2\u01c9\u01ca\7g\2\2\u01ca\u01cb"+
-		"\7p\2\2\u01cb\u01cc\7v\2\2\u01cc+\3\2\2\2\u01cd\u01ce\7i\2\2\u01ce\u01cf"+
-		"\7t\2\2\u01cf\u01d0\7c\2\2\u01d0\u01d1\7o\2\2\u01d1\u01d2\7o\2\2\u01d2"+
-		"\u01d3\7c\2\2\u01d3\u01d4\7t\2\2\u01d4-\3\2\2\2\u01d5\u01d6\7n\2\2\u01d6"+
-		"\u01d7\7g\2\2\u01d7\u01d8\7z\2\2\u01d8\u01d9\7g\2\2\u01d9\u01da\7t\2\2"+
-		"\u01da/\3\2\2\2\u01db\u01dc\7r\2\2\u01dc\u01dd\7c\2\2\u01dd\u01de\7t\2"+
-		"\2\u01de\u01df\7u\2\2\u01df\u01e0\7g\2\2\u01e0\u01e1\7t\2\2\u01e1\61\3"+
-		"\2\2\2\u01e2\u01e3\7r\2\2\u01e3\u01e4\7t\2\2\u01e4\u01e5\7k\2\2\u01e5"+
-		"\u01e6\7x\2\2\u01e6\u01e7\7c\2\2\u01e7\u01e8\7v\2\2\u01e8\u01e9\7g\2\2"+
-		"\u01e9\63\3\2\2\2\u01ea\u01eb\7r\2\2\u01eb\u01ec\7t\2\2\u01ec\u01ed\7"+
-		"q\2\2\u01ed\u01ee\7v\2\2\u01ee\u01ef\7g\2\2\u01ef\u01f0\7e\2\2\u01f0\u01f1"+
-		"\7v\2\2\u01f1\u01f2\7g\2\2\u01f2\u01f3\7f\2\2\u01f3\65\3\2\2\2\u01f4\u01f5"+
-		"\7r\2\2\u01f5\u01f6\7w\2\2\u01f6\u01f7\7d\2\2\u01f7\u01f8\7n\2\2\u01f8"+
-		"\u01f9\7k\2\2\u01f9\u01fa\7e\2\2\u01fa\67\3\2\2\2\u01fb\u01fc\7t\2\2\u01fc"+
-		"\u01fd\7g\2\2\u01fd\u01fe\7v\2\2\u01fe\u01ff\7w\2\2\u01ff\u0200\7t\2\2"+
-		"\u0200\u0201\7p\2\2\u0201\u0202\7u\2\2\u02029\3\2\2\2\u0203\u0204\7u\2"+
-		"\2\u0204\u0205\7e\2\2\u0205\u0206\7q\2\2\u0206\u0207\7r\2\2\u0207\u0208"+
-		"\7g\2\2\u0208;\3\2\2\2\u0209\u020a\7v\2\2\u020a\u020b\7j\2\2\u020b\u020c"+
-		"\7t\2\2\u020c\u020d\7q\2\2\u020d\u020e\7y\2\2\u020e\u020f\7u\2\2\u020f"+
-		"=\3\2\2\2\u0210\u0211\7v\2\2\u0211\u0212\7t\2\2\u0212\u0213\7g\2\2\u0213"+
-		"\u0214\7g\2\2\u0214?\3\2\2\2\u0215\u0219\5v9\2\u0216\u0219\5\n\3\2\u0217"+
-		"\u0219\5\f\4\2\u0218\u0215\3\2\2\2\u0218\u0216\3\2\2\2\u0218\u0217\3\2"+
-		"\2\2\u0219\u021c\3\2\2\2\u021a\u0218\3\2\2\2\u021a\u021b\3\2\2\2\u021b"+
-		"A\3\2\2\2\u021c\u021a\3\2\2\2\u021d\u021e\5\u00d8j\2\u021eC\3\2\2\2\u021f"+
-		"\u0220\7#\2\2\u0220E\3\2\2\2\u0221\u0222\5\u00a6Q\2\u0222G\3\2\2\2\u0223"+
-		"\u0224\5\u00a8R\2\u0224I\3\2\2\2\u0225\u0226\5\u00d0f\2\u0226K\3\2\2\2"+
-		"\u0227\u0228\5\u00d4h\2\u0228M\3\2\2\2\u0229\u022a\5\u00c0^\2\u022aO\3"+
-		"\2\2\2\u022b\u022c\5\u00b2W\2\u022cQ\3\2\2\2\u022d\u022e\5\u00b6Y\2\u022e"+
-		"S\3\2\2\2\u022f\u0230\5\u00aeU\2\u0230U\3\2\2\2\u0231\u0232\5\u00ccd\2"+
-		"\u0232W\3\2\2\2\u0233\u0234\5\u00c6a\2\u0234Y\3\2\2\2\u0235\u0236\5\u00c2"+
-		"_\2\u0236[\3\2\2\2\u0237\u0238\7\60\2\2\u0238\u0239\7\60\2\2\u0239]\3"+
-		"\2\2\2\u023a\u023b\5\u00b4X\2\u023b_\3\2\2\2\u023c\u023d\5\u00b8Z\2\u023d"+
-		"a\3\2\2\2\u023e\u023f\5\u00ba[\2\u023fc\3\2\2\2\u0240\u0241\7`\2\2\u0241"+
-		"e\3\2\2\2\u0242\u0243\5\u00b0V\2\u0243g\3\2\2\2\u0244\u0245\5\u00d2g\2"+
-		"\u0245i\3\2\2\2\u0246\u0247\7?\2\2\u0247\u0248\7@\2\2\u0248k\3\2\2\2\u0249"+
-		"\u024a\5\u00c4`\2\u024am\3\2\2\2\u024b\u024c\7`\2\2\u024c\u024d\7*\2\2"+
-		"\u024do\3\2\2\2\u024e\u024f\5\u00cee\2\u024fq\3\2\2\2\u0250\u0251\5\u00c8"+
-		"b\2\u0251s\3\2\2\2\u0252\u0253\5\u00dcl\2\u0253u\3\2\2\2\u0254\u025a\t"+
-		"\7\2\2\u0255\u0257\7\17\2\2\u0256\u0255\3\2\2\2\u0256\u0257\3\2\2\2\u0257"+
-		"\u0258\3\2\2\2\u0258\u025a\7\f\2\2\u0259\u0254\3\2\2\2\u0259\u0256\3\2"+
-		"\2\2\u025a\u025b\3\2\2\2\u025b\u0259\3\2\2\2\u025b\u025c\3\2\2\2\u025c"+
-		"\u025d\3\2\2\2\u025d\u025e\b9\2\2\u025ew\3\2\2\2\u025f\u0263\4C\\\2\u0260"+
-		"\u0262\t\b\2\2\u0261\u0260\3\2\2\2\u0262\u0265\3\2\2\2\u0263\u0261\3\2"+
-		"\2\2\u0263\u0264\3\2\2\2\u0264y\3\2\2\2\u0265\u0263\3\2\2\2\u0266\u026a"+
-		"\4c|\2\u0267\u0269\t\b\2\2\u0268\u0267\3\2\2\2\u0269\u026c\3\2\2\2\u026a"+
-		"\u0268\3\2\2\2\u026a\u026b\3\2\2\2\u026b{\3\2\2\2\u026c\u026a\3\2\2\2"+
-		"\u026d\u0270\5~=\2\u026e\u0270\5\u0080>\2\u026f\u026d\3\2\2\2\u026f\u026e"+
-		"\3\2\2\2\u0270}\3\2\2\2\u0271\u0272\t\7\2\2\u0272\177\3\2\2\2\u0273\u0274"+
-		"\t\t\2\2\u0274\u0081\3\2\2\2\u0275\u0276\7\61\2\2\u0276\u0277\7,\2\2\u0277"+
-		"\u027b\3\2\2\2\u0278\u027a\13\2\2\2\u0279\u0278\3\2\2\2\u027a\u027d\3"+
-		"\2\2\2\u027b\u027c\3\2\2\2\u027b\u0279\3\2\2\2\u027c\u0281\3\2\2\2\u027d"+
-		"\u027b\3\2\2\2\u027e\u027f\7,\2\2\u027f\u0282\7\61\2\2\u0280\u0282\7\2"+
-		"\2\3\u0281\u027e\3\2\2\2\u0281\u0280\3\2\2\2\u0282\u0083\3\2\2\2\u0283"+
-		"\u0284\7\61\2\2\u0284\u0285\7,\2\2\u0285\u0286\7,\2\2\u0286\u028a\3\2"+
-		"\2\2\u0287\u0289\13\2\2\2\u0288\u0287\3\2\2\2\u0289\u028c\3\2\2\2\u028a"+
-		"\u028b\3\2\2\2\u028a\u0288\3\2\2\2\u028b\u0290\3\2\2\2\u028c\u028a\3\2"+
-		"\2\2\u028d\u028e\7,\2\2\u028e\u0291\7\61\2\2\u028f\u0291\7\2\2\3\u0290"+
-		"\u028d\3\2\2\2\u0290\u028f\3\2\2\2\u0291\u0085\3\2\2\2\u0292\u0293\7\61"+
-		"\2\2\u0293\u0294\7\61\2\2\u0294\u0298\3\2\2\2\u0295\u0297\n\2\2\2\u0296"+
-		"\u0295\3\2\2\2\u0297\u029a\3\2\2\2\u0298\u0296\3\2\2\2\u0298\u0299\3\2"+
-		"\2\2\u0299\u0087\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u02a0\5\u00a4P\2\u029c"+
-		"\u02a1\t\n\2\2\u029d\u02a1\5\u008cD\2\u029e\u02a1\13\2\2\2\u029f\u02a1"+
-		"\7\2\2\3\u02a0\u029c\3\2\2\2\u02a0\u029d\3\2\2\2\u02a0\u029e\3\2\2\2\u02a0"+
-		"\u029f\3\2\2\2\u02a1\u0089\3\2\2\2\u02a2\u02a3\5\u00a4P\2\u02a3\u02a4"+
-		"\13\2\2\2\u02a4\u008b\3\2\2\2\u02a5\u02b0\7w\2\2\u02a6\u02ae\5\u0090F"+
-		"\2\u02a7\u02ac\5\u0090F\2\u02a8\u02aa\5\u0090F\2\u02a9\u02ab\5\u0090F"+
-		"\2\u02aa\u02a9\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ad\3\2\2\2\u02ac\u02a8"+
-		"\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02af\3\2\2\2\u02ae\u02a7\3\2\2\2\u02ae"+
-		"\u02af\3\2\2\2\u02af\u02b1\3\2\2\2\u02b0\u02a6\3\2\2\2\u02b0\u02b1\3\2"+
-		"\2\2\u02b1\u008d\3\2\2\2\u02b2\u02bb\7\62\2\2\u02b3\u02b7\t\13\2\2\u02b4"+
-		"\u02b6\5\u0092G\2\u02b5\u02b4\3\2\2\2\u02b6\u02b9\3\2\2\2\u02b7\u02b5"+
-		"\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8\u02bb\3\2\2\2\u02b9\u02b7\3\2\2\2\u02ba"+
-		"\u02b2\3\2\2\2\u02ba\u02b3\3\2\2\2\u02bb\u008f\3\2\2\2\u02bc\u02bd\t\6"+
-		"\2\2\u02bd\u0091\3\2\2\2\u02be\u02bf\t\f\2\2\u02bf\u0093\3\2\2\2\u02c0"+
-		"\u02c1\7v\2\2\u02c1\u02c2\7t\2\2\u02c2\u02c3\7w\2\2\u02c3\u02ca\7g\2\2"+
-		"\u02c4\u02c5\7h\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7\7n\2\2\u02c7\u02c8"+
-		"\7u\2\2\u02c8\u02ca\7g\2\2\u02c9\u02c0\3\2\2\2\u02c9\u02c4\3\2\2\2\u02ca"+
-		"\u0095\3\2\2\2\u02cb\u02ce\5\u00aaS\2\u02cc\u02cf\5\u0088B\2\u02cd\u02cf"+
-		"\n\r\2\2\u02ce\u02cc\3\2\2\2\u02ce\u02cd\3\2\2\2\u02cf\u02d0\3\2\2\2\u02d0"+
-		"\u02d1\5\u00aaS\2\u02d1\u0097\3\2\2\2\u02d2\u02d7\5\u00aaS\2\u02d3\u02d6"+
-		"\5\u0088B\2\u02d4\u02d6\n\r\2\2\u02d5\u02d3\3\2\2\2\u02d5\u02d4\3\2\2"+
-		"\2\u02d6\u02d9\3\2\2\2\u02d7\u02d5\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8\u02da"+
-		"\3\2\2\2\u02d9\u02d7\3\2\2\2\u02da\u02db\5\u00aaS\2\u02db\u0099\3\2\2"+
-		"\2\u02dc\u02e1\5\u00acT\2\u02dd\u02e0\5\u0088B\2\u02de\u02e0\n\16\2\2"+
-		"\u02df\u02dd\3\2\2\2\u02df\u02de\3\2\2\2\u02e0\u02e3\3\2\2\2\u02e1\u02df"+
-		"\3\2\2\2\u02e1\u02e2\3\2\2\2\u02e2\u02e4\3\2\2\2\u02e3\u02e1\3\2\2\2\u02e4"+
-		"\u02e5\5\u00acT\2\u02e5\u009b\3\2\2\2\u02e6\u02eb\5\u00aaS\2\u02e7\u02ea"+
-		"\5\u0088B\2\u02e8\u02ea\n\r\2\2\u02e9\u02e7\3\2\2\2\u02e9\u02e8\3\2\2"+
-		"\2\u02ea\u02ed\3\2\2\2\u02eb\u02e9\3\2\2\2\u02eb\u02ec\3\2\2\2\u02ec\u009d"+
-		"\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ee\u02f3\5\u00a0N\2\u02ef\u02f3\4\62;"+
-		"\2\u02f0\u02f3\5\u00cac\2\u02f1\u02f3\t\17\2\2\u02f2\u02ee\3\2\2\2\u02f2"+
-		"\u02ef\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f2\u02f1\3\2\2\2\u02f3\u009f\3\2"+
-		"\2\2\u02f4\u02f5\t\20\2\2\u02f5\u00a1\3\2\2\2\u02f6\u02f7\7k\2\2\u02f7"+
-		"\u02f8\7p\2\2\u02f8\u02f9\7v\2\2\u02f9\u00a3\3\2\2\2\u02fa\u02fb\7^\2"+
-		"\2\u02fb\u00a5\3\2\2\2\u02fc\u02fd\7<\2\2\u02fd\u00a7\3\2\2\2\u02fe\u02ff"+
-		"\7<\2\2\u02ff\u0300\7<\2\2\u0300\u00a9\3\2\2\2\u0301\u0302\7)\2\2\u0302"+
-		"\u00ab\3\2\2\2\u0303\u0304\7$\2\2\u0304\u00ad\3\2\2\2\u0305\u0306\7*\2"+
-		"\2\u0306\u00af\3\2\2\2\u0307\u0308\7+\2\2\u0308\u00b1\3\2\2\2\u0309\u030a"+
-		"\7}\2\2\u030a\u00b3\3\2\2\2\u030b\u030c\7\177\2\2\u030c\u00b5\3\2\2\2"+
-		"\u030d\u030e\7]\2\2\u030e\u00b7\3\2\2\2\u030f\u0310\7_\2\2\u0310\u00b9"+
-		"\3\2\2\2\u0311\u0312\7/\2\2\u0312\u0313\7@\2\2\u0313\u00bb\3\2\2\2\u0314"+
-		"\u0315\7>\2\2\u0315\u00bd\3\2\2\2\u0316\u0317\7@\2\2\u0317\u00bf\3\2\2"+
-		"\2\u0318\u0319\7?\2\2\u0319\u00c1\3\2\2\2\u031a\u031b\7A\2\2\u031b\u00c3"+
-		"\3\2\2\2\u031c\u031d\7,\2\2\u031d\u00c5\3\2\2\2\u031e\u031f\7-\2\2\u031f"+
-		"\u00c7\3\2\2\2\u0320\u0321\7-\2\2\u0321\u0322\7?\2\2\u0322\u00c9\3\2\2"+
-		"\2\u0323\u0324\7a\2\2\u0324\u00cb\3\2\2\2\u0325\u0326\7~\2\2\u0326\u00cd"+
-		"\3\2\2\2\u0327\u0328\7&\2\2\u0328\u00cf\3\2\2\2\u0329\u032a\7.\2\2\u032a"+
-		"\u00d1\3\2\2\2\u032b\u032c\7=\2\2\u032c\u00d3\3\2\2\2\u032d\u032e\7\60"+
-		"\2\2\u032e\u00d5\3\2\2\2\u032f\u0330\7\60\2\2\u0330\u0331\7\60\2\2\u0331"+
-		"\u00d7\3\2\2\2\u0332\u0333\7B\2\2\u0333\u00d9\3\2\2\2\u0334\u0335\7%\2"+
-		"\2\u0335\u00db\3\2\2\2\u0336\u0337\7\u0080\2\2\u0337\u00dd\3\2\2\2\u0338"+
-		"\u0339\5\u00b6Y\2\u0339\u033a\3\2\2\2\u033a\u033b\bm\7\2\u033b\u033c\b"+
-		"m\b\2\u033c\u00df\3\2\2\2\u033d\u033e\5\u008aC\2\u033e\u033f\3\2\2\2\u033f"+
-		"\u0340\bn\7\2\u0340\u00e1\3\2\2\2\u0341\u0342\5\u009aK\2\u0342\u0343\3"+
-		"\2\2\2\u0343\u0344\bo\7\2\u0344\u00e3\3\2\2\2\u0345\u0346\5\u0098J\2\u0346"+
-		"\u0347\3\2\2\2\u0347\u0348\bp\7\2\u0348\u00e5\3\2\2\2\u0349\u034a\5\u00b8"+
-		"Z\2\u034a\u034b\bq\t\2\u034b\u00e7\3\2\2\2\u034c\u034d\7\2\2\3\u034d\u034e"+
-		"\3\2\2\2\u034e\u034f\br\n\2\u034f\u00e9\3\2\2\2\u0350\u0351\13\2\2\2\u0351"+
-		"\u00eb\3\2\2\2\u0352\u0353\5\u00b2W\2\u0353\u0354\3\2\2\2\u0354\u0355"+
-		"\bt\13\2\u0355\u0356\bt\4\2\u0356\u00ed\3\2\2\2\u0357\u0358\5\u008aC\2"+
-		"\u0358\u0359\3\2\2\2\u0359\u035a\bu\13\2\u035a\u00ef\3\2\2\2\u035b\u035c"+
-		"\5\u009aK\2\u035c\u035d\3\2\2\2\u035d\u035e\bv\13\2\u035e\u00f1\3\2\2"+
-		"\2\u035f\u0360\5\u0098J\2\u0360\u0361\3\2\2\2\u0361\u0362\bw\13\2\u0362"+
-		"\u00f3\3\2\2\2\u0363\u0364\5\u0084@\2\u0364\u0365\3\2\2\2\u0365\u0366"+
-		"\bx\13\2\u0366\u00f5\3\2\2\2\u0367\u0368\5\u0082?\2\u0368\u0369\3\2\2"+
-		"\2\u0369\u036a\by\13\2\u036a\u00f7\3\2\2\2\u036b\u036c\5\u0086A\2\u036c"+
-		"\u036d\3\2\2\2\u036d\u036e\bz\13\2\u036e\u00f9\3\2\2\2\u036f\u0370\5\u00b4"+
-		"X\2\u0370\u0371\b{\f\2\u0371\u00fb\3\2\2\2\u0372\u0373\7\2\2\3\u0373\u0374"+
-		"\3\2\2\2\u0374\u0375\b|\n\2\u0375\u00fd\3\2\2\2\u0376\u0377\13\2\2\2\u0377"+
-		"\u00ff\3\2\2\2\u0378\u0379\5\u0084@\2\u0379\u037a\3\2\2\2\u037a\u037b"+
-		"\b~\r\2\u037b\u037c\b~\2\2\u037c\u0101\3\2\2\2\u037d\u037e\5\u0082?\2"+
-		"\u037e\u037f\3\2\2\2\u037f\u0380\b\177\16\2\u0380\u0381\b\177\2\2\u0381"+
-		"\u0103\3\2\2\2\u0382\u0383\5\u0086A\2\u0383\u0384\3\2\2\2\u0384\u0385"+
-		"\b\u0080\17\2\u0385\u0386\b\u0080\2\2\u0386\u0105\3\2\2\2\u0387\u0388"+
-		"\5\u00b2W\2\u0388\u0389\b\u0081\20\2\u0389\u0107\3\2\2\2\u038a\u038b\5"+
-		"\u00b4X\2\u038b\u038c\3\2\2\2\u038c\u038d\b\u0082\21\2\u038d\u038e\b\u0082"+
-		"\n\2\u038e\u0109\3\2\2\2\u038f\u0390\5\u0136\u0099\2\u0390\u0391\3\2\2"+
-		"\2\u0391\u0392\b\u0083\22\2\u0392\u010b\3\2\2\2\u0393\u0394\5\u00d4h\2"+
-		"\u0394\u0395\3\2\2\2\u0395\u0396\b\u0084\23\2\u0396\u010d\3\2\2\2\u0397"+
-		"\u0398\5\u00c0^\2\u0398\u0399\3\2\2\2\u0399\u039a\b\u0085\24\2\u039a\u010f"+
-		"\3\2\2\2\u039b\u039c\5\u0098J\2\u039c\u039d\3\2\2\2\u039d\u039e\b\u0086"+
-		"\25\2\u039e\u0111\3\2\2\2\u039f\u03a0\5\u008eE\2\u03a0\u03a1\3\2\2\2\u03a1"+
-		"\u03a2\b\u0087\26\2\u03a2\u0113\3\2\2\2\u03a3\u03a4\5\u00c4`\2\u03a4\u03a5"+
-		"\3\2\2\2\u03a5\u03a6\b\u0088\27\2\u03a6\u0115\3\2\2\2\u03a7\u03a8\5\u00d2"+
-		"g\2\u03a8\u03a9\3\2\2\2\u03a9\u03aa\b\u0089\30\2\u03aa\u0117\3\2\2\2\u03ab"+
-		"\u03ad\5|<\2\u03ac\u03ab\3\2\2\2\u03ad\u03ae\3\2\2\2\u03ae\u03ac\3\2\2"+
-		"\2\u03ae\u03af\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0\u03b1\b\u008a\31\2\u03b1"+
-		"\u03b2\b\u008a\2\2\u03b2\u0119\3\2\2\2\u03b3\u03b4\5\u0084@\2\u03b4\u03b5"+
-		"\3\2\2\2\u03b5\u03b6\b\u008b\r\2\u03b6\u03b7\b\u008b\2\2\u03b7\u011b\3"+
-		"\2\2\2\u03b8\u03b9\5\u0082?\2\u03b9\u03ba\3\2\2\2\u03ba\u03bb\b\u008c"+
-		"\16\2\u03bb\u03bc\b\u008c\2\2\u03bc\u011d\3\2\2\2\u03bd\u03be\5\u0086"+
-		"A\2\u03be\u03bf\3\2\2\2\u03bf\u03c0\b\u008d\17\2\u03c0\u03c1\b\u008d\2"+
-		"\2\u03c1\u011f\3\2\2\2\u03c2\u03c3\5\u00b2W\2\u03c3\u03c4\3\2\2\2\u03c4"+
-		"\u03c5\b\u008e\32\2\u03c5\u0121\3\2\2\2\u03c6\u03c7\5\u00b4X\2\u03c7\u03c8"+
-		"\3\2\2\2\u03c8\u03c9\b\u008f\21\2\u03c9\u03ca\b\u008f\n\2\u03ca\u0123"+
-		"\3\2\2\2\u03cb\u03cc\5\u0136\u0099\2\u03cc\u03cd\3\2\2\2\u03cd\u03ce\b"+
-		"\u0090\33\2\u03ce\u0125\3\2\2\2\u03cf\u03d0\5\u00c0^\2\u03d0\u03d1\3\2"+
-		"\2\2\u03d1\u03d2\b\u0091\24\2\u03d2\u0127\3\2\2\2\u03d3\u03d4\7)\2\2\u03d4"+
-		"\u03d5\5\24\b\2\u03d5\u03d6\7)\2\2\u03d6\u03d7\3\2\2\2\u03d7\u03d8\b\u0092"+
-		"\34\2\u03d8\u0129\3\2\2\2\u03d9\u03da\7)\2\2\u03da\u03de\5\24\b\2\u03db"+
-		"\u03dd\5\24\b\2\u03dc\u03db\3\2\2\2\u03dd\u03e0\3\2\2\2\u03de\u03dc\3"+
-		"\2\2\2\u03de\u03df\3\2\2\2\u03df\u03e1\3\2\2\2\u03e0\u03de\3\2\2\2\u03e1"+
-		"\u03e2\7)\2\2\u03e2\u03e3\3\2\2\2\u03e3\u03e4\b\u0093\25\2\u03e4\u012b"+
-		"\3\2\2\2\u03e5\u03e6\5\u00d2g\2\u03e6\u03e7\3\2\2\2\u03e7\u03e8\b\u0094"+
-		"\30\2\u03e8\u012d\3\2\2\2\u03e9\u03eb\5|<\2\u03ea\u03e9\3\2\2\2\u03eb"+
-		"\u03ec\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ec\u03ed\3\2\2\2\u03ed\u03ee\3\2"+
-		"\2\2\u03ee\u03ef\b\u0095\31\2\u03ef\u03f0\b\u0095\2\2\u03f0\u012f\3\2"+
-		"\2\2\u03f1\u03f4\n\21\2\2\u03f2\u03f4\5\u008aC\2\u03f3\u03f1\3\2\2\2\u03f3"+
-		"\u03f2\3\2\2\2\u03f4\u03f5\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f5\u03f6\3\2"+
-		"\2\2\u03f6\u03f7\3\2\2\2\u03f7\u03f8\b\u0096\35\2\u03f8\u0131\3\2\2\2"+
-		"\u03f9\u03fa\5\u00b8Z\2\u03fa\u03fb\3\2\2\2\u03fb\u03fc\b\u0097\n\2\u03fc"+
-		"\u0133\3\2\2\2\u03fd\u03fe\7\2\2\3\u03fe\u03ff\3\2\2\2\u03ff\u0400\b\u0098"+
-		"\n\2\u0400\u0135\3\2\2\2\u0401\u0405\5\u00a0N\2\u0402\u0404\5\u009eM\2"+
-		"\u0403\u0402\3\2\2\2\u0404\u0407\3\2\2\2\u0405\u0403\3\2\2\2\u0405\u0406"+
-		"\3\2\2\2\u0406\u0137\3\2\2\2\u0407\u0405\3\2\2\2\66\2\3\4\5\6\7\u013f"+
-		"\u0145\u014f\u015a\u0165\u0170\u0177\u017c\u017e\u0189\u0198\u0218\u021a"+
-		"\u0256\u0259\u025b\u0263\u026a\u026f\u027b\u0281\u028a\u0290\u0298\u02a0"+
-		"\u02aa\u02ac\u02ae\u02b0\u02b7\u02ba\u02c9\u02ce\u02d5\u02d7\u02df\u02e1"+
-		"\u02e9\u02eb\u02f2\u03ae\u03de\u03ec\u03f3\u03f5\u0405\36\2\4\2\3\r\2"+
-		"\7\4\2\7\5\2\7\6\2\tW\2\7\3\2\3q\3\6\2\2\t(\2\3{\4\t\3\2\t*\2\t)\2\3\u0081"+
-		"\5\tI\2\t\23\2\tA\2\tB\2\t-\2\t+\2\tN\2\tL\2\tR\2\tC\2\tS\2\t,\2\5\2\2";
+		"\u0004\u0000Z\u0406\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+
+		"\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000\u0007"+
+		"\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007"+
+		"\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007"+
+		"\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n"+
+		"\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002"+
+		"\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002"+
+		"\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002"+
+		"\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002"+
+		"\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002"+
+		"\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002"+
+		"\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002"+
+		" \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002"+
+		"%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002"+
+		"*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002"+
+		"/\u0007/\u00020\u00070\u00021\u00071\u00022\u00072\u00023\u00073\u0002"+
+		"4\u00074\u00025\u00075\u00026\u00076\u00027\u00077\u00028\u00078\u0002"+
+		"9\u00079\u0002:\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002"+
+		">\u0007>\u0002?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002"+
+		"C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002"+
+		"H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002"+
+		"M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002"+
+		"R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002"+
+		"W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002"+
+		"\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002"+
+		"a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002"+
+		"f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002"+
+		"k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002"+
+		"p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002"+
+		"u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002"+
+		"z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002"+
+		"\u007f\u0007\u007f\u0002\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002"+
+		"\u0082\u0007\u0082\u0002\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002"+
+		"\u0085\u0007\u0085\u0002\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002"+
+		"\u0088\u0007\u0088\u0002\u0089\u0007\u0089\u0002\u008a\u0007\u008a\u0002"+
+		"\u008b\u0007\u008b\u0002\u008c\u0007\u008c\u0002\u008d\u0007\u008d\u0002"+
+		"\u008e\u0007\u008e\u0002\u008f\u0007\u008f\u0002\u0090\u0007\u0090\u0002"+
+		"\u0091\u0007\u0091\u0002\u0092\u0007\u0092\u0002\u0093\u0007\u0093\u0002"+
+		"\u0094\u0007\u0094\u0002\u0095\u0007\u0095\u0002\u0096\u0007\u0096\u0002"+
+		"\u0097\u0007\u0097\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
+		"\u0000\u0005\u0000\u013c\b\u0000\n\u0000\f\u0000\u013f\t\u0000\u0001\u0000"+
+		"\u0001\u0000\u0001\u0000\u0003\u0000\u0144\b\u0000\u0001\u0000\u0001\u0000"+
+		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u014c\b\u0001"+
+		"\n\u0001\f\u0001\u014f\t\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001"+
+		"\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u0157\b\u0002\n\u0002\f\u0002"+
+		"\u015a\t\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
+		"\u0001\u0003\u0004\u0003\u0162\b\u0003\u000b\u0003\f\u0003\u0163\u0001"+
+		"\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001"+
+		"\u0005\u0005\u0005\u016d\b\u0005\n\u0005\f\u0005\u0170\t\u0005\u0001\u0005"+
+		"\u0001\u0005\u0001\u0006\u0001\u0006\u0003\u0006\u0176\b\u0006\u0001\u0007"+
+		"\u0001\u0007\u0001\u0007\u0005\u0007\u017b\b\u0007\n\u0007\f\u0007\u017e"+
+		"\t\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0005"+
+		"\b\u0186\b\b\n\b\f\b\u0189\t\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t"+
+		"\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u0197"+
+		"\b\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001"+
+		"\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+
+		"\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
+		"\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+
+		"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010"+
+		"\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010"+
+		"\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
+		"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+
+		"\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
+		"\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
+		"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+
+		"\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+
+		"\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+
+		"\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+
+		"\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017"+
+		"\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+
+		"\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019"+
+		"\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a"+
+		"\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b"+
+		"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+
+		"\u0001\u001c\u0005\u001c\u0217\b\u001c\n\u001c\f\u001c\u021a\t\u001c\u0001"+
+		"\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+
+		" \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001"+
+		"%\u0001%\u0001&\u0001&\u0001\'\u0001\'\u0001(\u0001(\u0001)\u0001)\u0001"+
+		"*\u0001*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001"+
+		".\u0001/\u0001/\u00010\u00010\u00011\u00011\u00011\u00012\u00012\u0001"+
+		"3\u00013\u00013\u00014\u00014\u00015\u00015\u00016\u00016\u00017\u0001"+
+		"7\u00037\u0255\b7\u00017\u00047\u0258\b7\u000b7\f7\u0259\u00017\u0001"+
+		"7\u00018\u00018\u00058\u0260\b8\n8\f8\u0263\t8\u00019\u00019\u00059\u0267"+
+		"\b9\n9\f9\u026a\t9\u0001:\u0001:\u0003:\u026e\b:\u0001;\u0001;\u0001<"+
+		"\u0001<\u0001=\u0001=\u0001=\u0001=\u0005=\u0278\b=\n=\f=\u027b\t=\u0001"+
+		"=\u0001=\u0001=\u0003=\u0280\b=\u0001>\u0001>\u0001>\u0001>\u0001>\u0005"+
+		">\u0287\b>\n>\f>\u028a\t>\u0001>\u0001>\u0001>\u0003>\u028f\b>\u0001?"+
+		"\u0001?\u0001?\u0001?\u0005?\u0295\b?\n?\f?\u0298\t?\u0001@\u0001@\u0001"+
+		"@\u0001@\u0001@\u0003@\u029f\b@\u0001A\u0001A\u0001A\u0001B\u0001B\u0001"+
+		"B\u0001B\u0001B\u0003B\u02a9\bB\u0003B\u02ab\bB\u0003B\u02ad\bB\u0003"+
+		"B\u02af\bB\u0001C\u0001C\u0001C\u0005C\u02b4\bC\nC\fC\u02b7\tC\u0003C"+
+		"\u02b9\bC\u0001D\u0001D\u0001E\u0001E\u0001F\u0001F\u0001F\u0001F\u0001"+
+		"F\u0001F\u0001F\u0001F\u0001F\u0003F\u02c8\bF\u0001G\u0001G\u0001G\u0003"+
+		"G\u02cd\bG\u0001G\u0001G\u0001H\u0001H\u0001H\u0005H\u02d4\bH\nH\fH\u02d7"+
+		"\tH\u0001H\u0001H\u0001I\u0001I\u0001I\u0005I\u02de\bI\nI\fI\u02e1\tI"+
+		"\u0001I\u0001I\u0001J\u0001J\u0001J\u0005J\u02e8\bJ\nJ\fJ\u02eb\tJ\u0001"+
+		"K\u0001K\u0001K\u0001K\u0003K\u02f1\bK\u0001L\u0001L\u0001M\u0001M\u0001"+
+		"M\u0001M\u0001N\u0001N\u0001O\u0001O\u0001P\u0001P\u0001P\u0001Q\u0001"+
+		"Q\u0001R\u0001R\u0001S\u0001S\u0001T\u0001T\u0001U\u0001U\u0001V\u0001"+
+		"V\u0001W\u0001W\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001"+
+		"[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001^\u0001^\u0001_\u0001_\u0001"+
+		"`\u0001`\u0001`\u0001a\u0001a\u0001b\u0001b\u0001c\u0001c\u0001d\u0001"+
+		"d\u0001e\u0001e\u0001f\u0001f\u0001g\u0001g\u0001g\u0001h\u0001h\u0001"+
+		"i\u0001i\u0001j\u0001j\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+
+		"l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001"+
+		"n\u0001o\u0001o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001q\u0001q\u0001"+
+		"r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001t\u0001"+
+		"t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001"+
+		"v\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001y\u0001"+
+		"y\u0001y\u0001z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001|\u0001|\u0001"+
+		"|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001"+
+		"~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080\u0001"+
+		"\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001"+
+		"\u0081\u0001\u0081\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001"+
+		"\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001"+
+		"\u0084\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001"+
+		"\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001"+
+		"\u0087\u0001\u0087\u0001\u0088\u0004\u0088\u03ab\b\u0088\u000b\u0088\f"+
+		"\u0088\u03ac\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089"+
+		"\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u008a\u0001\u008a\u0001\u008a"+
+		"\u0001\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+
+		"\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d"+
+		"\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e"+
+		"\u0001\u008e\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+
+		"\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+
+		"\u0001\u0091\u0001\u0091\u0001\u0091\u0005\u0091\u03db\b\u0091\n\u0091"+
+		"\f\u0091\u03de\t\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091"+
+		"\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0093\u0004\u0093"+
+		"\u03e9\b\u0093\u000b\u0093\f\u0093\u03ea\u0001\u0093\u0001\u0093\u0001"+
+		"\u0093\u0001\u0094\u0001\u0094\u0004\u0094\u03f2\b\u0094\u000b\u0094\f"+
+		"\u0094\u03f3\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095\u0001\u0095"+
+		"\u0001\u0095\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0097"+
+		"\u0001\u0097\u0005\u0097\u0402\b\u0097\n\u0097\f\u0097\u0405\t\u0097\u0005"+
+		"\u013d\u0158\u0187\u0279\u0288\u0000\u0098\u0006\u0001\b\'\n(\f)\u000e"+
+		"*\u0010+\u0012\u0000\u0014,\u0016-\u0018\u0000\u001a\u0000\u001c.\u001e"+
+		"/ 0\"1$2&3(!*4,\u0003.\u0002052647688\u001c:9<:>\u0000@;B$D<F=H>J?L@N"+
+		"APBRCTDVEXFZ\n\\G^H`%b#dIfJhKjLl\"nMpNrOtPvQxRz\u0000|\u0000~\u0000\u0080"+
+		"\u0000\u0082\u0000\u0084\u0000\u0086\u0000\u0088\u0000\u008a\u0000\u008c"+
+		"\u0000\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000\u0096\u0000\u0098"+
+		"\u0000\u009a\u0000\u009c\u0000\u009e\u0000\u00a0\u0000\u00a2\u0000\u00a4"+
+		"\u0000\u00a6\u0000\u00a8\u0000\u00aa\u0000\u00ac\u0000\u00ae\u0000\u00b0"+
+		"\u0000\u00b2\u0000\u00b4\u0000\u00b6\u0000\u00b8\u0000\u00ba\u0000\u00bc"+
+		"\u0000\u00be\u0000\u00c0\u0000\u00c2\u0000\u00c4\u0000\u00c6\u0000\u00c8"+
+		"\u0000\u00ca\u0000\u00cc\u0000\u00ce\u0000\u00d0\u0000\u00d2\u0000\u00d4"+
+		"\u0000\u00d6\u0000\u00d8\u0000\u00da\u0000\u00dc\u0000\u00de\u0000\u00e0"+
+		"\u0000\u00e2\u0000\u00e4S\u00e6T\u00e8U\u00ea\u0000\u00ec\u0000\u00ee"+
+		"\u0000\u00f0\u0000\u00f2\u0000\u00f4\u0000\u00f6\u0000\u00f8V\u00faW\u00fc"+
+		"&\u00fe\u0000\u0100\u0000\u0102\u0000\u0104X\u0106\u0000\u0108\u0000\u010a"+
+		"\u0000\u010c\u0000\u010e\u0000\u0110\u0000\u0112\u0000\u0114\u0000\u0116"+
+		"\u0000\u0118\u0000\u011a\u0000\u011c\u0000\u011e\u0000\u0120\u0000\u0122"+
+		"\u0000\u0124\u0000\u0126\u0000\u0128\u0000\u012a\u0000\u012c\u0000\u012e"+
+		"\u0000\u0130Y\u0132Z\u0134\u0000\u0006\u0000\u0001\u0002\u0003\u0004\u0005"+
+		"\u0010\u0002\u0000\n\n\r\r\u0002\u0000\'\'\\\\\u0002\u0000\"\"\\\\\t\u0000"+
+		"\"\"\'\'>>\\\\bbffnnrrtt\u0003\u000009AFaf\u0002\u0000\t\t  \u0004\u0000"+
+		"09AZ__az\u0002\u0000\n\n\f\r\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0001\u0000"+
+		"19\u0001\u000009\u0004\u0000\n\n\r\r\'\'\\\\\u0004\u0000\n\n\r\r\"\"\\"+
+		"\\\u0003\u0000\u00b7\u00b7\u0300\u036f\u203f\u2040\r\u0000AZaz\u00c0\u00d6"+
+		"\u00d8\u00f6\u00f8\u02ff\u0370\u037d\u037f\u1fff\u200c\u200d\u2070\u218f"+
+		"\u2c00\u2fef\u3001\u8000\ud7ff\u8000\uf900\u8000\ufdcf\u8000\ufdf0\u8000"+
+		"\ufffd\u0001\u0000\\]\u03fe\u0000\u0006\u0001\u0000\u0000\u0000\u0000"+
+		"\b\u0001\u0000\u0000\u0000\u0000\n\u0001\u0000\u0000\u0000\u0000\f\u0001"+
+		"\u0000\u0000\u0000\u0000\u000e\u0001\u0000\u0000\u0000\u0000\u0010\u0001"+
+		"\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000\u0000\u0016\u0001"+
+		"\u0000\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000\u0000\u001e\u0001"+
+		"\u0000\u0000\u0000\u0000 \u0001\u0000\u0000\u0000\u0000\"\u0001\u0000"+
+		"\u0000\u0000\u0000$\u0001\u0000\u0000\u0000\u0000&\u0001\u0000\u0000\u0000"+
+		"\u0000(\u0001\u0000\u0000\u0000\u0000*\u0001\u0000\u0000\u0000\u0000,"+
+		"\u0001\u0000\u0000\u0000\u0000.\u0001\u0000\u0000\u0000\u00000\u0001\u0000"+
+		"\u0000\u0000\u00002\u0001\u0000\u0000\u0000\u00004\u0001\u0000\u0000\u0000"+
+		"\u00006\u0001\u0000\u0000\u0000\u00008\u0001\u0000\u0000\u0000\u0000:"+
+		"\u0001\u0000\u0000\u0000\u0000<\u0001\u0000\u0000\u0000\u0000@\u0001\u0000"+
+		"\u0000\u0000\u0000B\u0001\u0000\u0000\u0000\u0000D\u0001\u0000\u0000\u0000"+
+		"\u0000F\u0001\u0000\u0000\u0000\u0000H\u0001\u0000\u0000\u0000\u0000J"+
+		"\u0001\u0000\u0000\u0000\u0000L\u0001\u0000\u0000\u0000\u0000N\u0001\u0000"+
+		"\u0000\u0000\u0000P\u0001\u0000\u0000\u0000\u0000R\u0001\u0000\u0000\u0000"+
+		"\u0000T\u0001\u0000\u0000\u0000\u0000V\u0001\u0000\u0000\u0000\u0000X"+
+		"\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000\u0000\u0000\u0000\\\u0001"+
+		"\u0000\u0000\u0000\u0000^\u0001\u0000\u0000\u0000\u0000`\u0001\u0000\u0000"+
+		"\u0000\u0000b\u0001\u0000\u0000\u0000\u0000d\u0001\u0000\u0000\u0000\u0000"+
+		"f\u0001\u0000\u0000\u0000\u0000h\u0001\u0000\u0000\u0000\u0000j\u0001"+
+		"\u0000\u0000\u0000\u0000l\u0001\u0000\u0000\u0000\u0000n\u0001\u0000\u0000"+
+		"\u0000\u0000p\u0001\u0000\u0000\u0000\u0000r\u0001\u0000\u0000\u0000\u0000"+
+		"t\u0001\u0000\u0000\u0000\u0000v\u0001\u0000\u0000\u0000\u0000x\u0001"+
+		"\u0000\u0000\u0000\u0001\u00dc\u0001\u0000\u0000\u0000\u0001\u00de\u0001"+
+		"\u0000\u0000\u0000\u0001\u00e0\u0001\u0000\u0000\u0000\u0001\u00e2\u0001"+
+		"\u0000\u0000\u0000\u0001\u00e4\u0001\u0000\u0000\u0000\u0001\u00e6\u0001"+
+		"\u0000\u0000\u0000\u0001\u00e8\u0001\u0000\u0000\u0000\u0002\u00ea\u0001"+
+		"\u0000\u0000\u0000\u0002\u00ec\u0001\u0000\u0000\u0000\u0002\u00ee\u0001"+
+		"\u0000\u0000\u0000\u0002\u00f0\u0001\u0000\u0000\u0000\u0002\u00f2\u0001"+
+		"\u0000\u0000\u0000\u0002\u00f4\u0001\u0000\u0000\u0000\u0002\u00f6\u0001"+
+		"\u0000\u0000\u0000\u0002\u00f8\u0001\u0000\u0000\u0000\u0002\u00fa\u0001"+
+		"\u0000\u0000\u0000\u0002\u00fc\u0001\u0000\u0000\u0000\u0003\u00fe\u0001"+
+		"\u0000\u0000\u0000\u0003\u0100\u0001\u0000\u0000\u0000\u0003\u0102\u0001"+
+		"\u0000\u0000\u0000\u0003\u0104\u0001\u0000\u0000\u0000\u0003\u0106\u0001"+
+		"\u0000\u0000\u0000\u0003\u0108\u0001\u0000\u0000\u0000\u0003\u010a\u0001"+
+		"\u0000\u0000\u0000\u0003\u010c\u0001\u0000\u0000\u0000\u0003\u010e\u0001"+
+		"\u0000\u0000\u0000\u0003\u0110\u0001\u0000\u0000\u0000\u0003\u0112\u0001"+
+		"\u0000\u0000\u0000\u0003\u0114\u0001\u0000\u0000\u0000\u0003\u0116\u0001"+
+		"\u0000\u0000\u0000\u0004\u0118\u0001\u0000\u0000\u0000\u0004\u011a\u0001"+
+		"\u0000\u0000\u0000\u0004\u011c\u0001\u0000\u0000\u0000\u0004\u011e\u0001"+
+		"\u0000\u0000\u0000\u0004\u0120\u0001\u0000\u0000\u0000\u0004\u0122\u0001"+
+		"\u0000\u0000\u0000\u0004\u0124\u0001\u0000\u0000\u0000\u0004\u0126\u0001"+
+		"\u0000\u0000\u0000\u0004\u0128\u0001\u0000\u0000\u0000\u0004\u012a\u0001"+
+		"\u0000\u0000\u0000\u0004\u012c\u0001\u0000\u0000\u0000\u0005\u012e\u0001"+
+		"\u0000\u0000\u0000\u0005\u0130\u0001\u0000\u0000\u0000\u0005\u0132\u0001"+
+		"\u0000\u0000\u0000\u0006\u0136\u0001\u0000\u0000\u0000\b\u0147\u0001\u0000"+
+		"\u0000\u0000\n\u0152\u0001\u0000\u0000\u0000\f\u0161\u0001\u0000\u0000"+
+		"\u0000\u000e\u0165\u0001\u0000\u0000\u0000\u0010\u0169\u0001\u0000\u0000"+
+		"\u0000\u0012\u0175\u0001\u0000\u0000\u0000\u0014\u0177\u0001\u0000\u0000"+
+		"\u0000\u0016\u0181\u0001\u0000\u0000\u0000\u0018\u018d\u0001\u0000\u0000"+
+		"\u0000\u001a\u0198\u0001\u0000\u0000\u0000\u001c\u019a\u0001\u0000\u0000"+
+		"\u0000\u001e\u019d\u0001\u0000\u0000\u0000 \u01a1\u0001\u0000\u0000\u0000"+
+		"\"\u01ab\u0001\u0000\u0000\u0000$\u01b4\u0001\u0000\u0000\u0000&\u01ba"+
+		"\u0001\u0000\u0000\u0000(\u01c2\u0001\u0000\u0000\u0000*\u01cb\u0001\u0000"+
+		"\u0000\u0000,\u01d3\u0001\u0000\u0000\u0000.\u01d9\u0001\u0000\u0000\u0000"+
+		"0\u01e0\u0001\u0000\u0000\u00002\u01e8\u0001\u0000\u0000\u00004\u01f2"+
+		"\u0001\u0000\u0000\u00006\u01f9\u0001\u0000\u0000\u00008\u0201\u0001\u0000"+
+		"\u0000\u0000:\u0207\u0001\u0000\u0000\u0000<\u020e\u0001\u0000\u0000\u0000"+
+		">\u0218\u0001\u0000\u0000\u0000@\u021b\u0001\u0000\u0000\u0000B\u021d"+
+		"\u0001\u0000\u0000\u0000D\u021f\u0001\u0000\u0000\u0000F\u0221\u0001\u0000"+
+		"\u0000\u0000H\u0223\u0001\u0000\u0000\u0000J\u0225\u0001\u0000\u0000\u0000"+
+		"L\u0227\u0001\u0000\u0000\u0000N\u0229\u0001\u0000\u0000\u0000P\u022b"+
+		"\u0001\u0000\u0000\u0000R\u022d\u0001\u0000\u0000\u0000T\u022f\u0001\u0000"+
+		"\u0000\u0000V\u0231\u0001\u0000\u0000\u0000X\u0233\u0001\u0000\u0000\u0000"+
+		"Z\u0235\u0001\u0000\u0000\u0000\\\u0238\u0001\u0000\u0000\u0000^\u023a"+
+		"\u0001\u0000\u0000\u0000`\u023c\u0001\u0000\u0000\u0000b\u023e\u0001\u0000"+
+		"\u0000\u0000d\u0240\u0001\u0000\u0000\u0000f\u0242\u0001\u0000\u0000\u0000"+
+		"h\u0244\u0001\u0000\u0000\u0000j\u0247\u0001\u0000\u0000\u0000l\u0249"+
+		"\u0001\u0000\u0000\u0000n\u024c\u0001\u0000\u0000\u0000p\u024e\u0001\u0000"+
+		"\u0000\u0000r\u0250\u0001\u0000\u0000\u0000t\u0257\u0001\u0000\u0000\u0000"+
+		"v\u025d\u0001\u0000\u0000\u0000x\u0264\u0001\u0000\u0000\u0000z\u026d"+
+		"\u0001\u0000\u0000\u0000|\u026f\u0001\u0000\u0000\u0000~\u0271\u0001\u0000"+
+		"\u0000\u0000\u0080\u0273\u0001\u0000\u0000\u0000\u0082\u0281\u0001\u0000"+
+		"\u0000\u0000\u0084\u0290\u0001\u0000\u0000\u0000\u0086\u0299\u0001\u0000"+
+		"\u0000\u0000\u0088\u02a0\u0001\u0000\u0000\u0000\u008a\u02a3\u0001\u0000"+
+		"\u0000\u0000\u008c\u02b8\u0001\u0000\u0000\u0000\u008e\u02ba\u0001\u0000"+
+		"\u0000\u0000\u0090\u02bc\u0001\u0000\u0000\u0000\u0092\u02c7\u0001\u0000"+
+		"\u0000\u0000\u0094\u02c9\u0001\u0000\u0000\u0000\u0096\u02d0\u0001\u0000"+
+		"\u0000\u0000\u0098\u02da\u0001\u0000\u0000\u0000\u009a\u02e4\u0001\u0000"+
+		"\u0000\u0000\u009c\u02f0\u0001\u0000\u0000\u0000\u009e\u02f2\u0001\u0000"+
+		"\u0000\u0000\u00a0\u02f4\u0001\u0000\u0000\u0000\u00a2\u02f8\u0001\u0000"+
+		"\u0000\u0000\u00a4\u02fa\u0001\u0000\u0000\u0000\u00a6\u02fc\u0001\u0000"+
+		"\u0000\u0000\u00a8\u02ff\u0001\u0000\u0000\u0000\u00aa\u0301\u0001\u0000"+
+		"\u0000\u0000\u00ac\u0303\u0001\u0000\u0000\u0000\u00ae\u0305\u0001\u0000"+
+		"\u0000\u0000\u00b0\u0307\u0001\u0000\u0000\u0000\u00b2\u0309\u0001\u0000"+
+		"\u0000\u0000\u00b4\u030b\u0001\u0000\u0000\u0000\u00b6\u030d\u0001\u0000"+
+		"\u0000\u0000\u00b8\u030f\u0001\u0000\u0000\u0000\u00ba\u0312\u0001\u0000"+
+		"\u0000\u0000\u00bc\u0314\u0001\u0000\u0000\u0000\u00be\u0316\u0001\u0000"+
+		"\u0000\u0000\u00c0\u0318\u0001\u0000\u0000\u0000\u00c2\u031a\u0001\u0000"+
+		"\u0000\u0000\u00c4\u031c\u0001\u0000\u0000\u0000\u00c6\u031e\u0001\u0000"+
+		"\u0000\u0000\u00c8\u0321\u0001\u0000\u0000\u0000\u00ca\u0323\u0001\u0000"+
+		"\u0000\u0000\u00cc\u0325\u0001\u0000\u0000\u0000\u00ce\u0327\u0001\u0000"+
+		"\u0000\u0000\u00d0\u0329\u0001\u0000\u0000\u0000\u00d2\u032b\u0001\u0000"+
+		"\u0000\u0000\u00d4\u032d\u0001\u0000\u0000\u0000\u00d6\u0330\u0001\u0000"+
+		"\u0000\u0000\u00d8\u0332\u0001\u0000\u0000\u0000\u00da\u0334\u0001\u0000"+
+		"\u0000\u0000\u00dc\u0336\u0001\u0000\u0000\u0000\u00de\u033b\u0001\u0000"+
+		"\u0000\u0000\u00e0\u033f\u0001\u0000\u0000\u0000\u00e2\u0343\u0001\u0000"+
+		"\u0000\u0000\u00e4\u0347\u0001\u0000\u0000\u0000\u00e6\u034a\u0001\u0000"+
+		"\u0000\u0000\u00e8\u034e\u0001\u0000\u0000\u0000\u00ea\u0350\u0001\u0000"+
+		"\u0000\u0000\u00ec\u0355\u0001\u0000\u0000\u0000\u00ee\u0359\u0001\u0000"+
+		"\u0000\u0000\u00f0\u035d\u0001\u0000\u0000\u0000\u00f2\u0361\u0001\u0000"+
+		"\u0000\u0000\u00f4\u0365\u0001\u0000\u0000\u0000\u00f6\u0369\u0001\u0000"+
+		"\u0000\u0000\u00f8\u036d\u0001\u0000\u0000\u0000\u00fa\u0370\u0001\u0000"+
+		"\u0000\u0000\u00fc\u0374\u0001\u0000\u0000\u0000\u00fe\u0376\u0001\u0000"+
+		"\u0000\u0000\u0100\u037b\u0001\u0000\u0000\u0000\u0102\u0380\u0001\u0000"+
+		"\u0000\u0000\u0104\u0385\u0001\u0000\u0000\u0000\u0106\u0388\u0001\u0000"+
+		"\u0000\u0000\u0108\u038d\u0001\u0000\u0000\u0000\u010a\u0391\u0001\u0000"+
+		"\u0000\u0000\u010c\u0395\u0001\u0000\u0000\u0000\u010e\u0399\u0001\u0000"+
+		"\u0000\u0000\u0110\u039d\u0001\u0000\u0000\u0000\u0112\u03a1\u0001\u0000"+
+		"\u0000\u0000\u0114\u03a5\u0001\u0000\u0000\u0000\u0116\u03aa\u0001\u0000"+
+		"\u0000\u0000\u0118\u03b1\u0001\u0000\u0000\u0000\u011a\u03b6\u0001\u0000"+
+		"\u0000\u0000\u011c\u03bb\u0001\u0000\u0000\u0000\u011e\u03c0\u0001\u0000"+
+		"\u0000\u0000\u0120\u03c4\u0001\u0000\u0000\u0000\u0122\u03c9\u0001\u0000"+
+		"\u0000\u0000\u0124\u03cd\u0001\u0000\u0000\u0000\u0126\u03d1\u0001\u0000"+
+		"\u0000\u0000\u0128\u03d7\u0001\u0000\u0000\u0000\u012a\u03e3\u0001\u0000"+
+		"\u0000\u0000\u012c\u03e8\u0001\u0000\u0000\u0000\u012e\u03f1\u0001\u0000"+
+		"\u0000\u0000\u0130\u03f7\u0001\u0000\u0000\u0000\u0132\u03fb\u0001\u0000"+
+		"\u0000\u0000\u0134\u03ff\u0001\u0000\u0000\u0000\u0136\u0137\u0005/\u0000"+
+		"\u0000\u0137\u0138\u0005*\u0000\u0000\u0138\u0139\u0005*\u0000\u0000\u0139"+
+		"\u013d\u0001\u0000\u0000\u0000\u013a\u013c\t\u0000\u0000\u0000\u013b\u013a"+
+		"\u0001\u0000\u0000\u0000\u013c\u013f\u0001\u0000\u0000\u0000\u013d\u013e"+
+		"\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000\u013e\u0143"+
+		"\u0001\u0000\u0000\u0000\u013f\u013d\u0001\u0000\u0000\u0000\u0140\u0141"+
+		"\u0005*\u0000\u0000\u0141\u0144\u0005/\u0000\u0000\u0142\u0144\u0005\u0000"+
+		"\u0000\u0001\u0143\u0140\u0001\u0000\u0000\u0000\u0143\u0142\u0001\u0000"+
+		"\u0000\u0000\u0144\u0145\u0001\u0000\u0000\u0000\u0145\u0146\u0006\u0000"+
+		"\u0000\u0000\u0146\u0007\u0001\u0000\u0000\u0000\u0147\u0148\u0005/\u0000"+
+		"\u0000\u0148\u0149\u0005/\u0000\u0000\u0149\u014d\u0001\u0000\u0000\u0000"+
+		"\u014a\u014c\b\u0000\u0000\u0000\u014b\u014a\u0001\u0000\u0000\u0000\u014c"+
+		"\u014f\u0001\u0000\u0000\u0000\u014d\u014b\u0001\u0000\u0000\u0000\u014d"+
+		"\u014e\u0001\u0000\u0000\u0000\u014e\u0150\u0001\u0000\u0000\u0000\u014f"+
+		"\u014d\u0001\u0000\u0000\u0000\u0150\u0151\u0006\u0001\u0000\u0000\u0151"+
+		"\t\u0001\u0000\u0000\u0000\u0152\u0153\u0005/\u0000\u0000\u0153\u0154"+
+		"\u0005*\u0000\u0000\u0154\u0158\u0001\u0000\u0000\u0000\u0155\u0157\t"+
+		"\u0000\u0000\u0000\u0156\u0155\u0001\u0000\u0000\u0000\u0157\u015a\u0001"+
+		"\u0000\u0000\u0000\u0158\u0159\u0001\u0000\u0000\u0000\u0158\u0156\u0001"+
+		"\u0000\u0000\u0000\u0159\u015b\u0001\u0000\u0000\u0000\u015a\u0158\u0001"+
+		"\u0000\u0000\u0000\u015b\u015c\u0005*\u0000\u0000\u015c\u015d\u0005/\u0000"+
+		"\u0000\u015d\u015e\u0001\u0000\u0000\u0000\u015e\u015f\u0006\u0002\u0000"+
+		"\u0000\u015f\u000b\u0001\u0000\u0000\u0000\u0160\u0162\u000209\u0000\u0161"+
+		"\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001\u0000\u0000\u0000\u0163"+
+		"\u0161\u0001\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164"+
+		"\r\u0001\u0000\u0000\u0000\u0165\u0166\u0005\'\u0000\u0000\u0166\u0167"+
+		"\u0003\u0012\u0006\u0000\u0167\u0168\u0005\'\u0000\u0000\u0168\u000f\u0001"+
+		"\u0000\u0000\u0000\u0169\u016a\u0005\'\u0000\u0000\u016a\u016e\u0003\u0012"+
+		"\u0006\u0000\u016b\u016d\u0003\u0012\u0006\u0000\u016c\u016b\u0001\u0000"+
+		"\u0000\u0000\u016d\u0170\u0001\u0000\u0000\u0000\u016e\u016c\u0001\u0000"+
+		"\u0000\u0000\u016e\u016f\u0001\u0000\u0000\u0000\u016f\u0171\u0001\u0000"+
+		"\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0171\u0172\u0005\'\u0000"+
+		"\u0000\u0172\u0011\u0001\u0000\u0000\u0000\u0173\u0176\u0003\u0018\t\u0000"+
+		"\u0174\u0176\b\u0001\u0000\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0175"+
+		"\u0174\u0001\u0000\u0000\u0000\u0176\u0013\u0001\u0000\u0000\u0000\u0177"+
+		"\u017c\u0005\"\u0000\u0000\u0178\u017b\u0003\u0018\t\u0000\u0179\u017b"+
+		"\b\u0002\u0000\u0000\u017a\u0178\u0001\u0000\u0000\u0000\u017a\u0179\u0001"+
+		"\u0000\u0000\u0000\u017b\u017e\u0001\u0000\u0000\u0000\u017c\u017a\u0001"+
+		"\u0000\u0000\u0000\u017c\u017d\u0001\u0000\u0000\u0000\u017d\u017f\u0001"+
+		"\u0000\u0000\u0000\u017e\u017c\u0001\u0000\u0000\u0000\u017f\u0180\u0005"+
+		"\"\u0000\u0000\u0180\u0015\u0001\u0000\u0000\u0000\u0181\u0182\u0005<"+
+		"\u0000\u0000\u0182\u0183\u0005<\u0000\u0000\u0183\u0187\u0001\u0000\u0000"+
+		"\u0000\u0184\u0186\t\u0000\u0000\u0000\u0185\u0184\u0001\u0000\u0000\u0000"+
+		"\u0186\u0189\u0001\u0000\u0000\u0000\u0187\u0188\u0001\u0000\u0000\u0000"+
+		"\u0187\u0185\u0001\u0000\u0000\u0000\u0188\u018a\u0001\u0000\u0000\u0000"+
+		"\u0189\u0187\u0001\u0000\u0000\u0000\u018a\u018b\u0005>\u0000\u0000\u018b"+
+		"\u018c\u0005>\u0000\u0000\u018c\u0017\u0001\u0000\u0000\u0000\u018d\u0196"+
+		"\u0005\\\u0000\u0000\u018e\u0197\u0007\u0003\u0000\u0000\u018f\u0190\u0005"+
+		"u\u0000\u0000\u0190\u0191\u0003\u001a\n\u0000\u0191\u0192\u0003\u001a"+
+		"\n\u0000\u0192\u0193\u0003\u001a\n\u0000\u0193\u0194\u0003\u001a\n\u0000"+
+		"\u0194\u0197\u0001\u0000\u0000\u0000\u0195\u0197\t\u0000\u0000\u0000\u0196"+
+		"\u018e\u0001\u0000\u0000\u0000\u0196\u018f\u0001\u0000\u0000\u0000\u0196"+
+		"\u0195\u0001\u0000\u0000\u0000\u0197\u0019\u0001\u0000\u0000\u0000\u0198"+
+		"\u0199\u0007\u0004\u0000\u0000\u0199\u001b\u0001\u0000\u0000\u0000\u019a"+
+		"\u019b\u0003\u00b4W\u0000\u019b\u019c\u0006\u000b\u0001\u0000\u019c\u001d"+
+		"\u0001\u0000\u0000\u0000\u019d\u019e\u0003\u00b0U\u0000\u019e\u019f\u0001"+
+		"\u0000\u0000\u0000\u019f\u01a0\u0006\f\u0002\u0000\u01a0\u001f\u0001\u0000"+
+		"\u0000\u0000\u01a1\u01a2\u0005o\u0000\u0000\u01a2\u01a3\u0005p\u0000\u0000"+
+		"\u01a3\u01a4\u0005t\u0000\u0000\u01a4\u01a5\u0005i\u0000\u0000\u01a5\u01a6"+
+		"\u0005o\u0000\u0000\u01a6\u01a7\u0005n\u0000\u0000\u01a7\u01a8\u0005s"+
+		"\u0000\u0000\u01a8\u01a9\u0001\u0000\u0000\u0000\u01a9\u01aa\u0006\r\u0003"+
+		"\u0000\u01aa!\u0001\u0000\u0000\u0000\u01ab\u01ac\u0005t\u0000\u0000\u01ac"+
+		"\u01ad\u0005o\u0000\u0000\u01ad\u01ae\u0005k\u0000\u0000\u01ae\u01af\u0005"+
+		"e\u0000\u0000\u01af\u01b0\u0005n\u0000\u0000\u01b0\u01b1\u0005s\u0000"+
+		"\u0000\u01b1\u01b2\u0001\u0000\u0000\u0000\u01b2\u01b3\u0006\u000e\u0004"+
+		"\u0000\u01b3#\u0001\u0000\u0000\u0000\u01b4\u01b5\u0005c\u0000\u0000\u01b5"+
+		"\u01b6\u0005a\u0000\u0000\u01b6\u01b7\u0005t\u0000\u0000\u01b7\u01b8\u0005"+
+		"c\u0000\u0000\u01b8\u01b9\u0005h\u0000\u0000\u01b9%\u0001\u0000\u0000"+
+		"\u0000\u01ba\u01bb\u0005f\u0000\u0000\u01bb\u01bc\u0005i\u0000\u0000\u01bc"+
+		"\u01bd\u0005n\u0000\u0000\u01bd\u01be\u0005a\u0000\u0000\u01be\u01bf\u0005"+
+		"l\u0000\u0000\u01bf\u01c0\u0005l\u0000\u0000\u01c0\u01c1\u0005y\u0000"+
+		"\u0000\u01c1\'\u0001\u0000\u0000\u0000\u01c2\u01c3\u0005f\u0000\u0000"+
+		"\u01c3\u01c4\u0005r\u0000\u0000\u01c4\u01c5\u0005a\u0000\u0000\u01c5\u01c6"+
+		"\u0005g\u0000\u0000\u01c6\u01c7\u0005m\u0000\u0000\u01c7\u01c8\u0005e"+
+		"\u0000\u0000\u01c8\u01c9\u0005n\u0000\u0000\u01c9\u01ca\u0005t\u0000\u0000"+
+		"\u01ca)\u0001\u0000\u0000\u0000\u01cb\u01cc\u0005g\u0000\u0000\u01cc\u01cd"+
+		"\u0005r\u0000\u0000\u01cd\u01ce\u0005a\u0000\u0000\u01ce\u01cf\u0005m"+
+		"\u0000\u0000\u01cf\u01d0\u0005m\u0000\u0000\u01d0\u01d1\u0005a\u0000\u0000"+
+		"\u01d1\u01d2\u0005r\u0000\u0000\u01d2+\u0001\u0000\u0000\u0000\u01d3\u01d4"+
+		"\u0005l\u0000\u0000\u01d4\u01d5\u0005e\u0000\u0000\u01d5\u01d6\u0005x"+
+		"\u0000\u0000\u01d6\u01d7\u0005e\u0000\u0000\u01d7\u01d8\u0005r\u0000\u0000"+
+		"\u01d8-\u0001\u0000\u0000\u0000\u01d9\u01da\u0005p\u0000\u0000\u01da\u01db"+
+		"\u0005a\u0000\u0000\u01db\u01dc\u0005r\u0000\u0000\u01dc\u01dd\u0005s"+
+		"\u0000\u0000\u01dd\u01de\u0005e\u0000\u0000\u01de\u01df\u0005r\u0000\u0000"+
+		"\u01df/\u0001\u0000\u0000\u0000\u01e0\u01e1\u0005p\u0000\u0000\u01e1\u01e2"+
+		"\u0005r\u0000\u0000\u01e2\u01e3\u0005i\u0000\u0000\u01e3\u01e4\u0005v"+
+		"\u0000\u0000\u01e4\u01e5\u0005a\u0000\u0000\u01e5\u01e6\u0005t\u0000\u0000"+
+		"\u01e6\u01e7\u0005e\u0000\u0000\u01e71\u0001\u0000\u0000\u0000\u01e8\u01e9"+
+		"\u0005p\u0000\u0000\u01e9\u01ea\u0005r\u0000\u0000\u01ea\u01eb\u0005o"+
+		"\u0000\u0000\u01eb\u01ec\u0005t\u0000\u0000\u01ec\u01ed\u0005e\u0000\u0000"+
+		"\u01ed\u01ee\u0005c\u0000\u0000\u01ee\u01ef\u0005t\u0000\u0000\u01ef\u01f0"+
+		"\u0005e\u0000\u0000\u01f0\u01f1\u0005d\u0000\u0000\u01f13\u0001\u0000"+
+		"\u0000\u0000\u01f2\u01f3\u0005p\u0000\u0000\u01f3\u01f4\u0005u\u0000\u0000"+
+		"\u01f4\u01f5\u0005b\u0000\u0000\u01f5\u01f6\u0005l\u0000\u0000\u01f6\u01f7"+
+		"\u0005i\u0000\u0000\u01f7\u01f8\u0005c\u0000\u0000\u01f85\u0001\u0000"+
+		"\u0000\u0000\u01f9\u01fa\u0005r\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000"+
+		"\u01fb\u01fc\u0005t\u0000\u0000\u01fc\u01fd\u0005u\u0000\u0000\u01fd\u01fe"+
+		"\u0005r\u0000\u0000\u01fe\u01ff\u0005n\u0000\u0000\u01ff\u0200\u0005s"+
+		"\u0000\u0000\u02007\u0001\u0000\u0000\u0000\u0201\u0202\u0005s\u0000\u0000"+
+		"\u0202\u0203\u0005c\u0000\u0000\u0203\u0204\u0005o\u0000\u0000\u0204\u0205"+
+		"\u0005p\u0000\u0000\u0205\u0206\u0005e\u0000\u0000\u02069\u0001\u0000"+
+		"\u0000\u0000\u0207\u0208\u0005t\u0000\u0000\u0208\u0209\u0005h\u0000\u0000"+
+		"\u0209\u020a\u0005r\u0000\u0000\u020a\u020b\u0005o\u0000\u0000\u020b\u020c"+
+		"\u0005w\u0000\u0000\u020c\u020d\u0005s\u0000\u0000\u020d;\u0001\u0000"+
+		"\u0000\u0000\u020e\u020f\u0005t\u0000\u0000\u020f\u0210\u0005r\u0000\u0000"+
+		"\u0210\u0211\u0005e\u0000\u0000\u0211\u0212\u0005e\u0000\u0000\u0212="+
+		"\u0001\u0000\u0000\u0000\u0213\u0217\u0003t7\u0000\u0214\u0217\u0003\b"+
+		"\u0001\u0000\u0215\u0217\u0003\n\u0002\u0000\u0216\u0213\u0001\u0000\u0000"+
+		"\u0000\u0216\u0214\u0001\u0000\u0000\u0000\u0216\u0215\u0001\u0000\u0000"+
+		"\u0000\u0217\u021a\u0001\u0000\u0000\u0000\u0218\u0216\u0001\u0000\u0000"+
+		"\u0000\u0218\u0219\u0001\u0000\u0000\u0000\u0219?\u0001\u0000\u0000\u0000"+
+		"\u021a\u0218\u0001\u0000\u0000\u0000\u021b\u021c\u0003\u00d6h\u0000\u021c"+
+		"A\u0001\u0000\u0000\u0000\u021d\u021e\u0005!\u0000\u0000\u021eC\u0001"+
+		"\u0000\u0000\u0000\u021f\u0220\u0003\u00a4O\u0000\u0220E\u0001\u0000\u0000"+
+		"\u0000\u0221\u0222\u0003\u00a6P\u0000\u0222G\u0001\u0000\u0000\u0000\u0223"+
+		"\u0224\u0003\u00ced\u0000\u0224I\u0001\u0000\u0000\u0000\u0225\u0226\u0003"+
+		"\u00d2f\u0000\u0226K\u0001\u0000\u0000\u0000\u0227\u0228\u0003\u00be\\"+
+		"\u0000\u0228M\u0001\u0000\u0000\u0000\u0229\u022a\u0003\u00b0U\u0000\u022a"+
+		"O\u0001\u0000\u0000\u0000\u022b\u022c\u0003\u00b4W\u0000\u022cQ\u0001"+
+		"\u0000\u0000\u0000\u022d\u022e\u0003\u00acS\u0000\u022eS\u0001\u0000\u0000"+
+		"\u0000\u022f\u0230\u0003\u00cab\u0000\u0230U\u0001\u0000\u0000\u0000\u0231"+
+		"\u0232\u0003\u00c4_\u0000\u0232W\u0001\u0000\u0000\u0000\u0233\u0234\u0003"+
+		"\u00c0]\u0000\u0234Y\u0001\u0000\u0000\u0000\u0235\u0236\u0005.\u0000"+
+		"\u0000\u0236\u0237\u0005.\u0000\u0000\u0237[\u0001\u0000\u0000\u0000\u0238"+
+		"\u0239\u0003\u00b2V\u0000\u0239]\u0001\u0000\u0000\u0000\u023a\u023b\u0003"+
+		"\u00b6X\u0000\u023b_\u0001\u0000\u0000\u0000\u023c\u023d\u0003\u00b8Y"+
+		"\u0000\u023da\u0001\u0000\u0000\u0000\u023e\u023f\u0005^\u0000\u0000\u023f"+
+		"c\u0001\u0000\u0000\u0000\u0240\u0241\u0003\u00aeT\u0000\u0241e\u0001"+
+		"\u0000\u0000\u0000\u0242\u0243\u0003\u00d0e\u0000\u0243g\u0001\u0000\u0000"+
+		"\u0000\u0244\u0245\u0005=\u0000\u0000\u0245\u0246\u0005>\u0000\u0000\u0246"+
+		"i\u0001\u0000\u0000\u0000\u0247\u0248\u0003\u00c2^\u0000\u0248k\u0001"+
+		"\u0000\u0000\u0000\u0249\u024a\u0005^\u0000\u0000\u024a\u024b\u0005(\u0000"+
+		"\u0000\u024bm\u0001\u0000\u0000\u0000\u024c\u024d\u0003\u00ccc\u0000\u024d"+
+		"o\u0001\u0000\u0000\u0000\u024e\u024f\u0003\u00c6`\u0000\u024fq\u0001"+
+		"\u0000\u0000\u0000\u0250\u0251\u0003\u00daj\u0000\u0251s\u0001\u0000\u0000"+
+		"\u0000\u0252\u0258\u0007\u0005\u0000\u0000\u0253\u0255\u0005\r\u0000\u0000"+
+		"\u0254\u0253\u0001\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000\u0000"+
+		"\u0255\u0256\u0001\u0000\u0000\u0000\u0256\u0258\u0005\n\u0000\u0000\u0257"+
+		"\u0252\u0001\u0000\u0000\u0000\u0257\u0254\u0001\u0000\u0000\u0000\u0258"+
+		"\u0259\u0001\u0000\u0000\u0000\u0259\u0257\u0001\u0000\u0000\u0000\u0259"+
+		"\u025a\u0001\u0000\u0000\u0000\u025a\u025b\u0001\u0000\u0000\u0000\u025b"+
+		"\u025c\u00067\u0000\u0000\u025cu\u0001\u0000\u0000\u0000\u025d\u0261\u0002"+
+		"AZ\u0000\u025e\u0260\u0007\u0006\u0000\u0000\u025f\u025e\u0001\u0000\u0000"+
+		"\u0000\u0260\u0263\u0001\u0000\u0000\u0000\u0261\u025f\u0001\u0000\u0000"+
+		"\u0000\u0261\u0262\u0001\u0000\u0000\u0000\u0262w\u0001\u0000\u0000\u0000"+
+		"\u0263\u0261\u0001\u0000\u0000\u0000\u0264\u0268\u0002az\u0000\u0265\u0267"+
+		"\u0007\u0006\u0000\u0000\u0266\u0265\u0001\u0000\u0000\u0000\u0267\u026a"+
+		"\u0001\u0000\u0000\u0000\u0268\u0266\u0001\u0000\u0000\u0000\u0268\u0269"+
+		"\u0001\u0000\u0000\u0000\u0269y\u0001\u0000\u0000\u0000\u026a\u0268\u0001"+
+		"\u0000\u0000\u0000\u026b\u026e\u0003|;\u0000\u026c\u026e\u0003~<\u0000"+
+		"\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026c\u0001\u0000\u0000\u0000"+
+		"\u026e{\u0001\u0000\u0000\u0000\u026f\u0270\u0007\u0005\u0000\u0000\u0270"+
+		"}\u0001\u0000\u0000\u0000\u0271\u0272\u0007\u0007\u0000\u0000\u0272\u007f"+
+		"\u0001\u0000\u0000\u0000\u0273\u0274\u0005/\u0000\u0000\u0274\u0275\u0005"+
+		"*\u0000\u0000\u0275\u0279\u0001\u0000\u0000\u0000\u0276\u0278\t\u0000"+
+		"\u0000\u0000\u0277\u0276\u0001\u0000\u0000\u0000\u0278\u027b\u0001\u0000"+
+		"\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u0279\u0277\u0001\u0000"+
+		"\u0000\u0000\u027a\u027f\u0001\u0000\u0000\u0000\u027b\u0279\u0001\u0000"+
+		"\u0000\u0000\u027c\u027d\u0005*\u0000\u0000\u027d\u0280\u0005/\u0000\u0000"+
+		"\u027e\u0280\u0005\u0000\u0000\u0001\u027f\u027c\u0001\u0000\u0000\u0000"+
+		"\u027f\u027e\u0001\u0000\u0000\u0000\u0280\u0081\u0001\u0000\u0000\u0000"+
+		"\u0281\u0282\u0005/\u0000\u0000\u0282\u0283\u0005*\u0000\u0000\u0283\u0284"+
+		"\u0005*\u0000\u0000\u0284\u0288\u0001\u0000\u0000\u0000\u0285\u0287\t"+
+		"\u0000\u0000\u0000\u0286\u0285\u0001\u0000\u0000\u0000\u0287\u028a\u0001"+
+		"\u0000\u0000\u0000\u0288\u0289\u0001\u0000\u0000\u0000\u0288\u0286\u0001"+
+		"\u0000\u0000\u0000\u0289\u028e\u0001\u0000\u0000\u0000\u028a\u0288\u0001"+
+		"\u0000\u0000\u0000\u028b\u028c\u0005*\u0000\u0000\u028c\u028f\u0005/\u0000"+
+		"\u0000\u028d\u028f\u0005\u0000\u0000\u0001\u028e\u028b\u0001\u0000\u0000"+
+		"\u0000\u028e\u028d\u0001\u0000\u0000\u0000\u028f\u0083\u0001\u0000\u0000"+
+		"\u0000\u0290\u0291\u0005/\u0000\u0000\u0291\u0292\u0005/\u0000\u0000\u0292"+
+		"\u0296\u0001\u0000\u0000\u0000\u0293\u0295\b\u0000\u0000\u0000\u0294\u0293"+
+		"\u0001\u0000\u0000\u0000\u0295\u0298\u0001\u0000\u0000\u0000\u0296\u0294"+
+		"\u0001\u0000\u0000\u0000\u0296\u0297\u0001\u0000\u0000\u0000\u0297\u0085"+
+		"\u0001\u0000\u0000\u0000\u0298\u0296\u0001\u0000\u0000\u0000\u0299\u029e"+
+		"\u0003\u00a2N\u0000\u029a\u029f\u0007\b\u0000\u0000\u029b\u029f\u0003"+
+		"\u008aB\u0000\u029c\u029f\t\u0000\u0000\u0000\u029d\u029f\u0005\u0000"+
+		"\u0000\u0001\u029e\u029a\u0001\u0000\u0000\u0000\u029e\u029b\u0001\u0000"+
+		"\u0000\u0000\u029e\u029c\u0001\u0000\u0000\u0000\u029e\u029d\u0001\u0000"+
+		"\u0000\u0000\u029f\u0087\u0001\u0000\u0000\u0000\u02a0\u02a1\u0003\u00a2"+
+		"N\u0000\u02a1\u02a2\t\u0000\u0000\u0000\u02a2\u0089\u0001\u0000\u0000"+
+		"\u0000\u02a3\u02ae\u0005u\u0000\u0000\u02a4\u02ac\u0003\u008eD\u0000\u02a5"+
+		"\u02aa\u0003\u008eD\u0000\u02a6\u02a8\u0003\u008eD\u0000\u02a7\u02a9\u0003"+
+		"\u008eD\u0000\u02a8\u02a7\u0001\u0000\u0000\u0000\u02a8\u02a9\u0001\u0000"+
+		"\u0000\u0000\u02a9\u02ab\u0001\u0000\u0000\u0000\u02aa\u02a6\u0001\u0000"+
+		"\u0000\u0000\u02aa\u02ab\u0001\u0000\u0000\u0000\u02ab\u02ad\u0001\u0000"+
+		"\u0000\u0000\u02ac\u02a5\u0001\u0000\u0000\u0000\u02ac\u02ad\u0001\u0000"+
+		"\u0000\u0000\u02ad\u02af\u0001\u0000\u0000\u0000\u02ae\u02a4\u0001\u0000"+
+		"\u0000\u0000\u02ae\u02af\u0001\u0000\u0000\u0000\u02af\u008b\u0001\u0000"+
+		"\u0000\u0000\u02b0\u02b9\u00050\u0000\u0000\u02b1\u02b5\u0007\t\u0000"+
+		"\u0000\u02b2\u02b4\u0003\u0090E\u0000\u02b3\u02b2\u0001\u0000\u0000\u0000"+
+		"\u02b4\u02b7\u0001\u0000\u0000\u0000\u02b5\u02b3\u0001\u0000\u0000\u0000"+
+		"\u02b5\u02b6\u0001\u0000\u0000\u0000\u02b6\u02b9\u0001\u0000\u0000\u0000"+
+		"\u02b7\u02b5\u0001\u0000\u0000\u0000\u02b8\u02b0\u0001\u0000\u0000\u0000"+
+		"\u02b8\u02b1\u0001\u0000\u0000\u0000\u02b9\u008d\u0001\u0000\u0000\u0000"+
+		"\u02ba\u02bb\u0007\u0004\u0000\u0000\u02bb\u008f\u0001\u0000\u0000\u0000"+
+		"\u02bc\u02bd\u0007\n\u0000\u0000\u02bd\u0091\u0001\u0000\u0000\u0000\u02be"+
+		"\u02bf\u0005t\u0000\u0000\u02bf\u02c0\u0005r\u0000\u0000\u02c0\u02c1\u0005"+
+		"u\u0000\u0000\u02c1\u02c8\u0005e\u0000\u0000\u02c2\u02c3\u0005f\u0000"+
+		"\u0000\u02c3\u02c4\u0005a\u0000\u0000\u02c4\u02c5\u0005l\u0000\u0000\u02c5"+
+		"\u02c6\u0005s\u0000\u0000\u02c6\u02c8\u0005e\u0000\u0000\u02c7\u02be\u0001"+
+		"\u0000\u0000\u0000\u02c7\u02c2\u0001\u0000\u0000\u0000\u02c8\u0093\u0001"+
+		"\u0000\u0000\u0000\u02c9\u02cc\u0003\u00a8Q\u0000\u02ca\u02cd\u0003\u0086"+
+		"@\u0000\u02cb\u02cd\b\u000b\u0000\u0000\u02cc\u02ca\u0001\u0000\u0000"+
+		"\u0000\u02cc\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce\u0001\u0000\u0000"+
+		"\u0000\u02ce\u02cf\u0003\u00a8Q\u0000\u02cf\u0095\u0001\u0000\u0000\u0000"+
+		"\u02d0\u02d5\u0003\u00a8Q\u0000\u02d1\u02d4\u0003\u0086@\u0000\u02d2\u02d4"+
+		"\b\u000b\u0000\u0000\u02d3\u02d1\u0001\u0000\u0000\u0000\u02d3\u02d2\u0001"+
+		"\u0000\u0000\u0000\u02d4\u02d7\u0001\u0000\u0000\u0000\u02d5\u02d3\u0001"+
+		"\u0000\u0000\u0000\u02d5\u02d6\u0001\u0000\u0000\u0000\u02d6\u02d8\u0001"+
+		"\u0000\u0000\u0000\u02d7\u02d5\u0001\u0000\u0000\u0000\u02d8\u02d9\u0003"+
+		"\u00a8Q\u0000\u02d9\u0097\u0001\u0000\u0000\u0000\u02da\u02df\u0003\u00aa"+
+		"R\u0000\u02db\u02de\u0003\u0086@\u0000\u02dc\u02de\b\f\u0000\u0000\u02dd"+
+		"\u02db\u0001\u0000\u0000\u0000\u02dd\u02dc\u0001\u0000\u0000\u0000\u02de"+
+		"\u02e1\u0001\u0000\u0000\u0000\u02df\u02dd\u0001\u0000\u0000\u0000\u02df"+
+		"\u02e0\u0001\u0000\u0000\u0000\u02e0\u02e2\u0001\u0000\u0000\u0000\u02e1"+
+		"\u02df\u0001\u0000\u0000\u0000\u02e2\u02e3\u0003\u00aaR\u0000\u02e3\u0099"+
+		"\u0001\u0000\u0000\u0000\u02e4\u02e9\u0003\u00a8Q\u0000\u02e5\u02e8\u0003"+
+		"\u0086@\u0000\u02e6\u02e8\b\u000b\u0000\u0000\u02e7\u02e5\u0001\u0000"+
+		"\u0000\u0000\u02e7\u02e6\u0001\u0000\u0000\u0000\u02e8\u02eb\u0001\u0000"+
+		"\u0000\u0000\u02e9\u02e7\u0001\u0000\u0000\u0000\u02e9\u02ea\u0001\u0000"+
+		"\u0000\u0000\u02ea\u009b\u0001\u0000\u0000\u0000\u02eb\u02e9\u0001\u0000"+
+		"\u0000\u0000\u02ec\u02f1\u0003\u009eL\u0000\u02ed\u02f1\u000209\u0000"+
+		"\u02ee\u02f1\u0003\u00c8a\u0000\u02ef\u02f1\u0007\r\u0000\u0000\u02f0"+
+		"\u02ec\u0001\u0000\u0000\u0000\u02f0\u02ed\u0001\u0000\u0000\u0000\u02f0"+
+		"\u02ee\u0001\u0000\u0000\u0000\u02f0\u02ef\u0001\u0000\u0000\u0000\u02f1"+
+		"\u009d\u0001\u0000\u0000\u0000\u02f2\u02f3\u0007\u000e\u0000\u0000\u02f3"+
+		"\u009f\u0001\u0000\u0000\u0000\u02f4\u02f5\u0005i\u0000\u0000\u02f5\u02f6"+
+		"\u0005n\u0000\u0000\u02f6\u02f7\u0005t\u0000\u0000\u02f7\u00a1\u0001\u0000"+
+		"\u0000\u0000\u02f8\u02f9\u0005\\\u0000\u0000\u02f9\u00a3\u0001\u0000\u0000"+
+		"\u0000\u02fa\u02fb\u0005:\u0000\u0000\u02fb\u00a5\u0001\u0000\u0000\u0000"+
+		"\u02fc\u02fd\u0005:\u0000\u0000\u02fd\u02fe\u0005:\u0000\u0000\u02fe\u00a7"+
+		"\u0001\u0000\u0000\u0000\u02ff\u0300\u0005\'\u0000\u0000\u0300\u00a9\u0001"+
+		"\u0000\u0000\u0000\u0301\u0302\u0005\"\u0000\u0000\u0302\u00ab\u0001\u0000"+
+		"\u0000\u0000\u0303\u0304\u0005(\u0000\u0000\u0304\u00ad\u0001\u0000\u0000"+
+		"\u0000\u0305\u0306\u0005)\u0000\u0000\u0306\u00af\u0001\u0000\u0000\u0000"+
+		"\u0307\u0308\u0005{\u0000\u0000\u0308\u00b1\u0001\u0000\u0000\u0000\u0309"+
+		"\u030a\u0005}\u0000\u0000\u030a\u00b3\u0001\u0000\u0000\u0000\u030b\u030c"+
+		"\u0005[\u0000\u0000\u030c\u00b5\u0001\u0000\u0000\u0000\u030d\u030e\u0005"+
+		"]\u0000\u0000\u030e\u00b7\u0001\u0000\u0000\u0000\u030f\u0310\u0005-\u0000"+
+		"\u0000\u0310\u0311\u0005>\u0000\u0000\u0311\u00b9\u0001\u0000\u0000\u0000"+
+		"\u0312\u0313\u0005<\u0000\u0000\u0313\u00bb\u0001\u0000\u0000\u0000\u0314"+
+		"\u0315\u0005>\u0000\u0000\u0315\u00bd\u0001\u0000\u0000\u0000\u0316\u0317"+
+		"\u0005=\u0000\u0000\u0317\u00bf\u0001\u0000\u0000\u0000\u0318\u0319\u0005"+
+		"?\u0000\u0000\u0319\u00c1\u0001\u0000\u0000\u0000\u031a\u031b\u0005*\u0000"+
+		"\u0000\u031b\u00c3\u0001\u0000\u0000\u0000\u031c\u031d\u0005+\u0000\u0000"+
+		"\u031d\u00c5\u0001\u0000\u0000\u0000\u031e\u031f\u0005+\u0000\u0000\u031f"+
+		"\u0320\u0005=\u0000\u0000\u0320\u00c7\u0001\u0000\u0000\u0000\u0321\u0322"+
+		"\u0005_\u0000\u0000\u0322\u00c9\u0001\u0000\u0000\u0000\u0323\u0324\u0005"+
+		"|\u0000\u0000\u0324\u00cb\u0001\u0000\u0000\u0000\u0325\u0326\u0005$\u0000"+
+		"\u0000\u0326\u00cd\u0001\u0000\u0000\u0000\u0327\u0328\u0005,\u0000\u0000"+
+		"\u0328\u00cf\u0001\u0000\u0000\u0000\u0329\u032a\u0005;\u0000\u0000\u032a"+
+		"\u00d1\u0001\u0000\u0000\u0000\u032b\u032c\u0005.\u0000\u0000\u032c\u00d3"+
+		"\u0001\u0000\u0000\u0000\u032d\u032e\u0005.\u0000\u0000\u032e\u032f\u0005"+
+		".\u0000\u0000\u032f\u00d5\u0001\u0000\u0000\u0000\u0330\u0331\u0005@\u0000"+
+		"\u0000\u0331\u00d7\u0001\u0000\u0000\u0000\u0332\u0333\u0005#\u0000\u0000"+
+		"\u0333\u00d9\u0001\u0000\u0000\u0000\u0334\u0335\u0005~\u0000\u0000\u0335"+
+		"\u00db\u0001\u0000\u0000\u0000\u0336\u0337\u0003\u00b4W\u0000\u0337\u0338"+
+		"\u0001\u0000\u0000\u0000\u0338\u0339\u0006k\u0005\u0000\u0339\u033a\u0006"+
+		"k\u0006\u0000\u033a\u00dd\u0001\u0000\u0000\u0000\u033b\u033c\u0003\u0088"+
+		"A\u0000\u033c\u033d\u0001\u0000\u0000\u0000\u033d\u033e\u0006l\u0005\u0000"+
+		"\u033e\u00df\u0001\u0000\u0000\u0000\u033f\u0340\u0003\u0098I\u0000\u0340"+
+		"\u0341\u0001\u0000\u0000\u0000\u0341\u0342\u0006m\u0005\u0000\u0342\u00e1"+
+		"\u0001\u0000\u0000\u0000\u0343\u0344\u0003\u0096H\u0000\u0344\u0345\u0001"+
+		"\u0000\u0000\u0000\u0345\u0346\u0006n\u0005\u0000\u0346\u00e3\u0001\u0000"+
+		"\u0000\u0000\u0347\u0348\u0003\u00b6X\u0000\u0348\u0349\u0006o\u0007\u0000"+
+		"\u0349\u00e5\u0001\u0000\u0000\u0000\u034a\u034b\u0005\u0000\u0000\u0001"+
+		"\u034b\u034c\u0001\u0000\u0000\u0000\u034c\u034d\u0006p\b\u0000\u034d"+
+		"\u00e7\u0001\u0000\u0000\u0000\u034e\u034f\t\u0000\u0000\u0000\u034f\u00e9"+
+		"\u0001\u0000\u0000\u0000\u0350\u0351\u0003\u00b0U\u0000\u0351\u0352\u0001"+
+		"\u0000\u0000\u0000\u0352\u0353\u0006r\t\u0000\u0353\u0354\u0006r\u0002"+
+		"\u0000\u0354\u00eb\u0001\u0000\u0000\u0000\u0355\u0356\u0003\u0088A\u0000"+
+		"\u0356\u0357\u0001\u0000\u0000\u0000\u0357\u0358\u0006s\t\u0000\u0358"+
+		"\u00ed\u0001\u0000\u0000\u0000\u0359\u035a\u0003\u0098I\u0000\u035a\u035b"+
+		"\u0001\u0000\u0000\u0000\u035b\u035c\u0006t\t\u0000\u035c\u00ef\u0001"+
+		"\u0000\u0000\u0000\u035d\u035e\u0003\u0096H\u0000\u035e\u035f\u0001\u0000"+
+		"\u0000\u0000\u035f\u0360\u0006u\t\u0000\u0360\u00f1\u0001\u0000\u0000"+
+		"\u0000\u0361\u0362\u0003\u0082>\u0000\u0362\u0363\u0001\u0000\u0000\u0000"+
+		"\u0363\u0364\u0006v\t\u0000\u0364\u00f3\u0001\u0000\u0000\u0000\u0365"+
+		"\u0366\u0003\u0080=\u0000\u0366\u0367\u0001\u0000\u0000\u0000\u0367\u0368"+
+		"\u0006w\t\u0000\u0368\u00f5\u0001\u0000\u0000\u0000\u0369\u036a\u0003"+
+		"\u0084?\u0000\u036a\u036b\u0001\u0000\u0000\u0000\u036b\u036c\u0006x\t"+
+		"\u0000\u036c\u00f7\u0001\u0000\u0000\u0000\u036d\u036e\u0003\u00b2V\u0000"+
+		"\u036e\u036f\u0006y\n\u0000\u036f\u00f9\u0001\u0000\u0000\u0000\u0370"+
+		"\u0371\u0005\u0000\u0000\u0001\u0371\u0372\u0001\u0000\u0000\u0000\u0372"+
+		"\u0373\u0006z\b\u0000\u0373\u00fb\u0001\u0000\u0000\u0000\u0374\u0375"+
+		"\t\u0000\u0000\u0000\u0375\u00fd\u0001\u0000\u0000\u0000\u0376\u0377\u0003"+
+		"\u0082>\u0000\u0377\u0378\u0001\u0000\u0000\u0000\u0378\u0379\u0006|\u000b"+
+		"\u0000\u0379\u037a\u0006|\u0000\u0000\u037a\u00ff\u0001\u0000\u0000\u0000"+
+		"\u037b\u037c\u0003\u0080=\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d"+
+		"\u037e\u0006}\f\u0000\u037e\u037f\u0006}\u0000\u0000\u037f\u0101\u0001"+
+		"\u0000\u0000\u0000\u0380\u0381\u0003\u0084?\u0000\u0381\u0382\u0001\u0000"+
+		"\u0000\u0000\u0382\u0383\u0006~\r\u0000\u0383\u0384\u0006~\u0000\u0000"+
+		"\u0384\u0103\u0001\u0000\u0000\u0000\u0385\u0386\u0003\u00b0U\u0000\u0386"+
+		"\u0387\u0006\u007f\u000e\u0000\u0387\u0105\u0001\u0000\u0000\u0000\u0388"+
+		"\u0389\u0003\u00b2V\u0000\u0389\u038a\u0001\u0000\u0000\u0000\u038a\u038b"+
+		"\u0006\u0080\u000f\u0000\u038b\u038c\u0006\u0080\b\u0000\u038c\u0107\u0001"+
+		"\u0000\u0000\u0000\u038d\u038e\u0003\u0134\u0097\u0000\u038e\u038f\u0001"+
+		"\u0000\u0000\u0000\u038f\u0390\u0006\u0081\u0010\u0000\u0390\u0109\u0001"+
+		"\u0000\u0000\u0000\u0391\u0392\u0003\u00d2f\u0000\u0392\u0393\u0001\u0000"+
+		"\u0000\u0000\u0393\u0394\u0006\u0082\u0011\u0000\u0394\u010b\u0001\u0000"+
+		"\u0000\u0000\u0395\u0396\u0003\u00be\\\u0000\u0396\u0397\u0001\u0000\u0000"+
+		"\u0000\u0397\u0398\u0006\u0083\u0012\u0000\u0398\u010d\u0001\u0000\u0000"+
+		"\u0000\u0399\u039a\u0003\u0096H\u0000\u039a\u039b\u0001\u0000\u0000\u0000"+
+		"\u039b\u039c\u0006\u0084\u0013\u0000\u039c\u010f\u0001\u0000\u0000\u0000"+
+		"\u039d\u039e\u0003\u008cC\u0000\u039e\u039f\u0001\u0000\u0000\u0000\u039f"+
+		"\u03a0\u0006\u0085\u0014\u0000\u03a0\u0111\u0001\u0000\u0000\u0000\u03a1"+
+		"\u03a2\u0003\u00c2^\u0000\u03a2\u03a3\u0001\u0000\u0000\u0000\u03a3\u03a4"+
+		"\u0006\u0086\u0015\u0000\u03a4\u0113\u0001\u0000\u0000\u0000\u03a5\u03a6"+
+		"\u0003\u00d0e\u0000\u03a6\u03a7\u0001\u0000\u0000\u0000\u03a7\u03a8\u0006"+
+		"\u0087\u0016\u0000\u03a8\u0115\u0001\u0000\u0000\u0000\u03a9\u03ab\u0003"+
+		"z:\u0000\u03aa\u03a9\u0001\u0000\u0000\u0000\u03ab\u03ac\u0001\u0000\u0000"+
+		"\u0000\u03ac\u03aa\u0001\u0000\u0000\u0000\u03ac\u03ad\u0001\u0000\u0000"+
+		"\u0000\u03ad\u03ae\u0001\u0000\u0000\u0000\u03ae\u03af\u0006\u0088\u0017"+
+		"\u0000\u03af\u03b0\u0006\u0088\u0000\u0000\u03b0\u0117\u0001\u0000\u0000"+
+		"\u0000\u03b1\u03b2\u0003\u0082>\u0000\u03b2\u03b3\u0001\u0000\u0000\u0000"+
+		"\u03b3\u03b4\u0006\u0089\u000b\u0000\u03b4\u03b5\u0006\u0089\u0000\u0000"+
+		"\u03b5\u0119\u0001\u0000\u0000\u0000\u03b6\u03b7\u0003\u0080=\u0000\u03b7"+
+		"\u03b8\u0001\u0000\u0000\u0000\u03b8\u03b9\u0006\u008a\f\u0000\u03b9\u03ba"+
+		"\u0006\u008a\u0000\u0000\u03ba\u011b\u0001\u0000\u0000\u0000\u03bb\u03bc"+
+		"\u0003\u0084?\u0000\u03bc\u03bd\u0001\u0000\u0000\u0000\u03bd\u03be\u0006"+
+		"\u008b\r\u0000\u03be\u03bf\u0006\u008b\u0000\u0000\u03bf\u011d\u0001\u0000"+
+		"\u0000\u0000\u03c0\u03c1\u0003\u00b0U\u0000\u03c1\u03c2\u0001\u0000\u0000"+
+		"\u0000\u03c2\u03c3\u0006\u008c\u0018\u0000\u03c3\u011f\u0001\u0000\u0000"+
+		"\u0000\u03c4\u03c5\u0003\u00b2V\u0000\u03c5\u03c6\u0001\u0000\u0000\u0000"+
+		"\u03c6\u03c7\u0006\u008d\u000f\u0000\u03c7\u03c8\u0006\u008d\b\u0000\u03c8"+
+		"\u0121\u0001\u0000\u0000\u0000\u03c9\u03ca\u0003\u0134\u0097\u0000\u03ca"+
+		"\u03cb\u0001\u0000\u0000\u0000\u03cb\u03cc\u0006\u008e\u0019\u0000\u03cc"+
+		"\u0123\u0001\u0000\u0000\u0000\u03cd\u03ce\u0003\u00be\\\u0000\u03ce\u03cf"+
+		"\u0001\u0000\u0000\u0000\u03cf\u03d0\u0006\u008f\u0012\u0000\u03d0\u0125"+
+		"\u0001\u0000\u0000\u0000\u03d1\u03d2\u0005\'\u0000\u0000\u03d2\u03d3\u0003"+
+		"\u0012\u0006\u0000\u03d3\u03d4\u0005\'\u0000\u0000\u03d4\u03d5\u0001\u0000"+
+		"\u0000\u0000\u03d5\u03d6\u0006\u0090\u001a\u0000\u03d6\u0127\u0001\u0000"+
+		"\u0000\u0000\u03d7\u03d8\u0005\'\u0000\u0000\u03d8\u03dc\u0003\u0012\u0006"+
+		"\u0000\u03d9\u03db\u0003\u0012\u0006\u0000\u03da\u03d9\u0001\u0000\u0000"+
+		"\u0000\u03db\u03de\u0001\u0000\u0000\u0000\u03dc\u03da\u0001\u0000\u0000"+
+		"\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u03df\u0001\u0000\u0000"+
+		"\u0000\u03de\u03dc\u0001\u0000\u0000\u0000\u03df\u03e0\u0005\'\u0000\u0000"+
+		"\u03e0\u03e1\u0001\u0000\u0000\u0000\u03e1\u03e2\u0006\u0091\u0013\u0000"+
+		"\u03e2\u0129\u0001\u0000\u0000\u0000\u03e3\u03e4\u0003\u00d0e\u0000\u03e4"+
+		"\u03e5\u0001\u0000\u0000\u0000\u03e5\u03e6\u0006\u0092\u0016\u0000\u03e6"+
+		"\u012b\u0001\u0000\u0000\u0000\u03e7\u03e9\u0003z:\u0000\u03e8\u03e7\u0001"+
+		"\u0000\u0000\u0000\u03e9\u03ea\u0001\u0000\u0000\u0000\u03ea\u03e8\u0001"+
+		"\u0000\u0000\u0000\u03ea\u03eb\u0001\u0000\u0000\u0000\u03eb\u03ec\u0001"+
+		"\u0000\u0000\u0000\u03ec\u03ed\u0006\u0093\u0017\u0000\u03ed\u03ee\u0006"+
+		"\u0093\u0000\u0000\u03ee\u012d\u0001\u0000\u0000\u0000\u03ef\u03f2\b\u000f"+
+		"\u0000\u0000\u03f0\u03f2\u0003\u0088A\u0000\u03f1\u03ef\u0001\u0000\u0000"+
+		"\u0000\u03f1\u03f0\u0001\u0000\u0000\u0000\u03f2\u03f3\u0001\u0000\u0000"+
+		"\u0000\u03f3\u03f1\u0001\u0000\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000"+
+		"\u0000\u03f4\u03f5\u0001\u0000\u0000\u0000\u03f5\u03f6\u0006\u0094\u001b"+
+		"\u0000\u03f6\u012f\u0001\u0000\u0000\u0000\u03f7\u03f8\u0003\u00b6X\u0000"+
+		"\u03f8\u03f9\u0001\u0000\u0000\u0000\u03f9\u03fa\u0006\u0095\b\u0000\u03fa"+
+		"\u0131\u0001\u0000\u0000\u0000\u03fb\u03fc\u0005\u0000\u0000\u0001\u03fc"+
+		"\u03fd\u0001\u0000\u0000\u0000\u03fd\u03fe\u0006\u0096\b\u0000\u03fe\u0133"+
+		"\u0001\u0000\u0000\u0000\u03ff\u0403\u0003\u009eL\u0000\u0400\u0402\u0003"+
+		"\u009cK\u0000\u0401\u0400\u0001\u0000\u0000\u0000\u0402\u0405\u0001\u0000"+
+		"\u0000\u0000\u0403\u0401\u0001\u0000\u0000\u0000\u0403\u0404\u0001\u0000"+
+		"\u0000\u0000\u0404\u0135\u0001\u0000\u0000\u0000\u0405\u0403\u0001\u0000"+
+		"\u0000\u00004\u0000\u0001\u0002\u0003\u0004\u0005\u013d\u0143\u014d\u0158"+
+		"\u0163\u016e\u0175\u017a\u017c\u0187\u0196\u0216\u0218\u0254\u0257\u0259"+
+		"\u0261\u0268\u026d\u0279\u027f\u0288\u028e\u0296\u029e\u02a8\u02aa\u02ac"+
+		"\u02ae\u02b5\u02b8\u02c7\u02cc\u02d3\u02d5\u02dd\u02df\u02e7\u02e9\u02f0"+
+		"\u03ac\u03dc\u03ea\u03f1\u03f3\u0403\u001c\u0000\u0002\u0000\u0001\u000b"+
+		"\u0000\u0005\u0002\u0000\u0005\u0003\u0000\u0005\u0004\u0000\u0007U\u0000"+
+		"\u0005\u0001\u0000\u0001o\u0001\u0004\u0000\u0000\u0007&\u0000\u0001y"+
+		"\u0002\u0007\u0001\u0000\u0007(\u0000\u0007\'\u0000\u0001\u007f\u0003"+
+		"\u0007G\u0000\u0007\u0011\u0000\u0007?\u0000\u0007@\u0000\u0007+\u0000"+
+		"\u0007)\u0000\u0007L\u0000\u0007J\u0000\u0007P\u0000\u0007A\u0000\u0007"+
+		"Q\u0000\u0007*\u0000\u0003\u0000\u0000";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Parser.java b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Parser.java
index 60a0d5b..7fbef6b 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Parser.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3Parser.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv3Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -36,9 +36,9 @@
 import java.util.Iterator;
 import java.util.ArrayList;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class ANTLRv3Parser extends Parser {
-	static { RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -157,7 +157,7 @@
 	}
 
 	@Override
-	public String getGrammarFileName() { return "ANTLRv3Parser.g4"; }
+	public String getGrammarFileName() { return "java-escape"; }
 
 	@Override
 	public String[] getRuleNames() { return ruleNames; }
@@ -173,6 +173,7 @@
 		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class GrammarDefContext extends ParserRuleContext {
 		public TerminalNode GRAMMAR() { return getToken(ANTLRv3Parser.GRAMMAR, 0); }
 		public Id_Context id_() {
@@ -334,7 +335,7 @@
 				setState(123); 
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DOC_COMMENT) | (1L << FRAGMENT) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC))) != 0) || _la==TOKEN_REF || _la==RULE_REF );
+			} while ( ((_la) & ~0x3f) == 0 && ((1L << _la) & 63050403373121538L) != 0 || _la==TOKEN_REF || _la==RULE_REF );
 			setState(125);
 			match(EOF);
 			}
@@ -350,6 +351,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class TokensSpecContext extends ParserRuleContext {
 		public TerminalNode TOKENS() { return getToken(ANTLRv3Parser.TOKENS, 0); }
 		public TerminalNode LBRACE() { return getToken(ANTLRv3Parser.LBRACE, 0); }
@@ -414,6 +416,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class TokenSpecContext extends ParserRuleContext {
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv3Parser.TOKEN_REF, 0); }
 		public TerminalNode SEMI() { return getToken(ANTLRv3Parser.SEMI, 0); }
@@ -484,6 +487,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AttrScopeContext extends ParserRuleContext {
 		public TerminalNode SCOPE() { return getToken(ANTLRv3Parser.SCOPE, 0); }
 		public Id_Context id_() {
@@ -531,6 +535,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ActionContext extends ParserRuleContext {
 		public TerminalNode AT() { return getToken(ANTLRv3Parser.AT, 0); }
 		public Id_Context id_() {
@@ -594,6 +599,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ActionScopeNameContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -658,6 +664,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionsSpecContext extends ParserRuleContext {
 		public TerminalNode OPTIONS() { return getToken(ANTLRv3Parser.OPTIONS, 0); }
 		public TerminalNode LBRACE() { return getToken(ANTLRv3Parser.LBRACE, 0); }
@@ -722,6 +729,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -772,6 +780,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionValueContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -852,6 +861,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rule_Context extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -926,11 +936,11 @@
 			setState(188);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 63050403373121536L) != 0) {
 				{
 				setState(187);
 				_la = _input.LA(1);
-				if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << PRIVATE) | (1L << PROTECTED) | (1L << PUBLIC))) != 0)) ) {
+				if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 63050403373121536L) != 0) ) {
 				_errHandler.recoverInline(this);
 				}
 				else {
@@ -1048,6 +1058,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleActionContext extends ParserRuleContext {
 		public TerminalNode AT() { return getToken(ANTLRv3Parser.AT, 0); }
 		public Id_Context id_() {
@@ -1095,6 +1106,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ThrowsSpecContext extends ParserRuleContext {
 		public TerminalNode THROWS() { return getToken(ANTLRv3Parser.THROWS, 0); }
 		public List<Id_Context> id_() {
@@ -1161,6 +1173,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleScopeSpecContext extends ParserRuleContext {
 		public List<TerminalNode> SCOPE() { return getTokens(ANTLRv3Parser.SCOPE); }
 		public TerminalNode SCOPE(int i) {
@@ -1282,6 +1295,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class BlockContext extends ParserRuleContext {
 		public TerminalNode LPAREN() { return getToken(ANTLRv3Parser.LPAREN, 0); }
 		public List<AlternativeContext> alternative() {
@@ -1385,6 +1399,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AltListContext extends ParserRuleContext {
 		public List<AlternativeContext> alternative() {
 			return getRuleContexts(AlternativeContext.class);
@@ -1458,6 +1473,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AlternativeContext extends ParserRuleContext {
 		public List<ElementContext> element() {
 			return getRuleContexts(ElementContext.class);
@@ -1511,7 +1527,7 @@
 					setState(297); 
 					_errHandler.sync(this);
 					_la = _input.LA(1);
-				} while ( ((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (TREE_BEGIN - 34)) | (1L << (CHAR_LITERAL - 34)) | (1L << (STRING_LITERAL - 34)) | (1L << (BEGIN_ACTION - 34)) | (1L << (DOT - 34)) | (1L << (LPAREN - 34)) | (1L << (NOT - 34)) | (1L << (TOKEN_REF - 34)) | (1L << (RULE_REF - 34)))) != 0) );
+				} while ( (((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & 457405963969281L) != 0 );
 				}
 				break;
 			case REWRITE:
@@ -1537,6 +1553,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ExceptionGroupContext extends ParserRuleContext {
 		public List<ExceptionHandlerContext> exceptionHandler() {
 			return getRuleContexts(ExceptionHandlerContext.class);
@@ -1620,6 +1637,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ExceptionHandlerContext extends ParserRuleContext {
 		public TerminalNode CATCH() { return getToken(ANTLRv3Parser.CATCH, 0); }
 		public ArgActionBlockContext argActionBlock() {
@@ -1667,6 +1685,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class FinallyClauseContext extends ParserRuleContext {
 		public TerminalNode FINALLY() { return getToken(ANTLRv3Parser.FINALLY, 0); }
 		public ActionBlockContext actionBlock() {
@@ -1709,6 +1728,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ElementContext extends ParserRuleContext {
 		public ElementNoOptionSpecContext elementNoOptionSpec() {
 			return getRuleContext(ElementNoOptionSpecContext.class,0);
@@ -1748,6 +1768,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ElementNoOptionSpecContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -2032,6 +2053,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ActionBlockContext extends ParserRuleContext {
 		public TerminalNode BEGIN_ACTION() { return getToken(ANTLRv3Parser.BEGIN_ACTION, 0); }
 		public TerminalNode END_ACTION() { return getToken(ANTLRv3Parser.END_ACTION, 0); }
@@ -2091,6 +2113,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ArgActionBlockContext extends ParserRuleContext {
 		public TerminalNode BEGIN_ARGUMENT() { return getToken(ANTLRv3Parser.BEGIN_ARGUMENT, 0); }
 		public TerminalNode END_ARGUMENT() { return getToken(ANTLRv3Parser.END_ARGUMENT, 0); }
@@ -2150,6 +2173,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AtomContext extends ParserRuleContext {
 		public Range_Context range_() {
 			return getRuleContext(Range_Context.class,0);
@@ -2331,6 +2355,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class NotSetContext extends ParserRuleContext {
 		public TerminalNode NOT() { return getToken(ANTLRv3Parser.NOT, 0); }
 		public NotTerminalContext notTerminal() {
@@ -2394,6 +2419,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class TreeSpecContext extends ParserRuleContext {
 		public TerminalNode TREE_BEGIN() { return getToken(ANTLRv3Parser.TREE_BEGIN, 0); }
 		public List<ElementContext> element() {
@@ -2441,7 +2467,7 @@
 				setState(406); 
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-			} while ( ((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (TREE_BEGIN - 34)) | (1L << (CHAR_LITERAL - 34)) | (1L << (STRING_LITERAL - 34)) | (1L << (BEGIN_ACTION - 34)) | (1L << (DOT - 34)) | (1L << (LPAREN - 34)) | (1L << (NOT - 34)) | (1L << (TOKEN_REF - 34)) | (1L << (RULE_REF - 34)))) != 0) );
+			} while ( (((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & 457405963969281L) != 0 );
 			setState(408);
 			match(RPAREN);
 			}
@@ -2457,6 +2483,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class EbnfContext extends ParserRuleContext {
 		public BlockContext block() {
 			return getRuleContext(BlockContext.class,0);
@@ -2546,6 +2573,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Range_Context extends ParserRuleContext {
 		public List<TerminalNode> CHAR_LITERAL() { return getTokens(ANTLRv3Parser.CHAR_LITERAL); }
 		public TerminalNode CHAR_LITERAL(int i) {
@@ -2591,6 +2619,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Terminal_Context extends ParserRuleContext {
 		public TerminalNode CHAR_LITERAL() { return getToken(ANTLRv3Parser.CHAR_LITERAL, 0); }
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv3Parser.TOKEN_REF, 0); }
@@ -2716,6 +2745,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class NotTerminalContext extends ParserRuleContext {
 		public TerminalNode CHAR_LITERAL() { return getToken(ANTLRv3Parser.CHAR_LITERAL, 0); }
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv3Parser.TOKEN_REF, 0); }
@@ -2743,7 +2773,7 @@
 			{
 			setState(435);
 			_la = _input.LA(1);
-			if ( !(((((_la - 42)) & ~0x3f) == 0 && ((1L << (_la - 42)) & ((1L << (CHAR_LITERAL - 42)) | (1L << (STRING_LITERAL - 42)) | (1L << (TOKEN_REF - 42)))) != 0)) ) {
+			if ( !((((_la - 42)) & ~0x3f) == 0 && ((1L << (_la - 42)) & 549755813891L) != 0) ) {
 			_errHandler.recoverInline(this);
 			}
 			else {
@@ -2764,6 +2794,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class EbnfSuffixContext extends ParserRuleContext {
 		public TerminalNode QM() { return getToken(ANTLRv3Parser.QM, 0); }
 		public TerminalNode STAR() { return getToken(ANTLRv3Parser.STAR, 0); }
@@ -2791,7 +2822,7 @@
 			{
 			setState(437);
 			_la = _input.LA(1);
-			if ( !(((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (PLUS - 69)) | (1L << (QM - 69)) | (1L << (STAR - 69)))) != 0)) ) {
+			if ( !((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 131L) != 0) ) {
 			_errHandler.recoverInline(this);
 			}
 			else {
@@ -2812,6 +2843,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RewriteContext extends ParserRuleContext {
 		public List<TerminalNode> REWRITE() { return getTokens(ANTLRv3Parser.REWRITE); }
 		public TerminalNode REWRITE(int i) {
@@ -2908,6 +2940,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_alternativeContext extends ParserRuleContext {
 		public Rewrite_templateContext rewrite_template() {
 			return getRuleContext(Rewrite_templateContext.class,0);
@@ -2968,6 +3001,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_tree_blockContext extends ParserRuleContext {
 		public TerminalNode LPAREN() { return getToken(ANTLRv3Parser.LPAREN, 0); }
 		public Rewrite_tree_alternativeContext rewrite_tree_alternative() {
@@ -3013,6 +3047,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_tree_alternativeContext extends ParserRuleContext {
 		public List<Rewrite_tree_elementContext> rewrite_tree_element() {
 			return getRuleContexts(Rewrite_tree_elementContext.class);
@@ -3054,7 +3089,7 @@
 				setState(466); 
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-			} while ( ((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (TREE_BEGIN - 34)) | (1L << (CHAR_LITERAL - 34)) | (1L << (STRING_LITERAL - 34)) | (1L << (BEGIN_ACTION - 34)) | (1L << (LPAREN - 34)) | (1L << (DOLLAR - 34)) | (1L << (TOKEN_REF - 34)) | (1L << (RULE_REF - 34)))) != 0) );
+			} while ( (((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & 431017148031745L) != 0 );
 			}
 		}
 		catch (RecognitionException re) {
@@ -3068,6 +3103,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_tree_elementContext extends ParserRuleContext {
 		public Rewrite_tree_atomContext rewrite_tree_atom() {
 			return getRuleContext(Rewrite_tree_atomContext.class,0);
@@ -3174,6 +3210,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_tree_atomContext extends ParserRuleContext {
 		public TerminalNode CHAR_LITERAL() { return getToken(ANTLRv3Parser.CHAR_LITERAL, 0); }
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv3Parser.TOKEN_REF, 0); }
@@ -3280,6 +3317,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_tree_ebnfContext extends ParserRuleContext {
 		public Rewrite_tree_blockContext rewrite_tree_block() {
 			return getRuleContext(Rewrite_tree_blockContext.class,0);
@@ -3324,6 +3362,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_treeContext extends ParserRuleContext {
 		public TerminalNode TREE_BEGIN() { return getToken(ANTLRv3Parser.TREE_BEGIN, 0); }
 		public Rewrite_tree_atomContext rewrite_tree_atom() {
@@ -3364,7 +3403,7 @@
 			setState(500);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			while (((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (TREE_BEGIN - 34)) | (1L << (CHAR_LITERAL - 34)) | (1L << (STRING_LITERAL - 34)) | (1L << (BEGIN_ACTION - 34)) | (1L << (LPAREN - 34)) | (1L << (DOLLAR - 34)) | (1L << (TOKEN_REF - 34)) | (1L << (RULE_REF - 34)))) != 0)) {
+			while ((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & 431017148031745L) != 0) {
 				{
 				{
 				setState(497);
@@ -3390,6 +3429,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_templateContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -3489,6 +3529,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_template_refContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -3539,6 +3580,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_indirect_template_headContext extends ParserRuleContext {
 		public List<TerminalNode> LPAREN() { return getTokens(ANTLRv3Parser.LPAREN); }
 		public TerminalNode LPAREN(int i) {
@@ -3599,6 +3641,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_template_argsContext extends ParserRuleContext {
 		public List<Rewrite_template_argContext> rewrite_template_arg() {
 			return getRuleContexts(Rewrite_template_argContext.class);
@@ -3676,6 +3719,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Rewrite_template_argContext extends ParserRuleContext {
 		public Id_Context id_() {
 			return getRuleContext(Id_Context.class,0);
@@ -3723,6 +3767,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Id_Context extends ParserRuleContext {
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv3Parser.TOKEN_REF, 0); }
 		public TerminalNode RULE_REF() { return getToken(ANTLRv3Parser.RULE_REF, 0); }
@@ -3771,210 +3816,365 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\\\u0224\4\2\t\2\4"+
-		"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
-		"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
-		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
-		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
-		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
-		",\t,\4-\t-\4.\t.\3\2\5\2^\n\2\3\2\3\2\3\2\3\2\5\2d\n\2\3\2\3\2\3\2\3\2"+
-		"\5\2j\n\2\3\2\5\2m\n\2\3\2\7\2p\n\2\f\2\16\2s\13\2\3\2\7\2v\n\2\f\2\16"+
-		"\2y\13\2\3\2\6\2|\n\2\r\2\16\2}\3\2\3\2\3\3\3\3\3\3\6\3\u0085\n\3\r\3"+
-		"\16\3\u0086\3\3\3\3\3\4\3\4\3\4\3\4\5\4\u008f\n\4\3\4\3\4\3\5\3\5\3\5"+
-		"\3\5\3\6\3\6\3\6\3\6\5\6\u009b\n\6\3\6\3\6\3\6\3\7\3\7\3\7\5\7\u00a3\n"+
-		"\7\3\b\3\b\3\b\7\b\u00a8\n\b\f\b\16\b\u00ab\13\b\3\b\3\b\3\t\3\t\3\t\3"+
-		"\t\3\t\3\n\3\n\3\n\3\n\3\n\5\n\u00b9\n\n\3\13\5\13\u00bc\n\13\3\13\5\13"+
-		"\u00bf\n\13\3\13\3\13\5\13\u00c3\n\13\3\13\5\13\u00c6\n\13\3\13\3\13\5"+
-		"\13\u00ca\n\13\3\13\5\13\u00cd\n\13\3\13\5\13\u00d0\n\13\3\13\5\13\u00d3"+
-		"\n\13\3\13\7\13\u00d6\n\13\f\13\16\13\u00d9\13\13\3\13\3\13\3\13\3\13"+
-		"\5\13\u00df\n\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\7\r\u00e9\n\r\f\r\16"+
-		"\r\u00ec\13\r\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u00f4\n\16\f\16\16\16"+
-		"\u00f7\13\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0101\n\16\f"+
-		"\16\16\16\u0104\13\16\3\16\3\16\5\16\u0108\n\16\3\17\3\17\5\17\u010c\n"+
-		"\17\3\17\5\17\u010f\n\17\3\17\3\17\3\17\3\17\3\17\3\17\7\17\u0117\n\17"+
-		"\f\17\16\17\u011a\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0124"+
-		"\n\20\f\20\16\20\u0127\13\20\3\21\6\21\u012a\n\21\r\21\16\21\u012b\3\21"+
-		"\5\21\u012f\n\21\3\22\6\22\u0132\n\22\r\22\16\22\u0133\3\22\5\22\u0137"+
-		"\n\22\3\22\5\22\u013a\n\22\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25"+
-		"\3\26\3\26\3\26\3\26\3\26\5\26\u014a\n\26\3\26\3\26\3\26\3\26\3\26\5\26"+
-		"\u0151\n\26\3\26\3\26\3\26\5\26\u0156\n\26\3\26\3\26\3\26\3\26\3\26\3"+
-		"\26\5\26\u015e\n\26\3\26\3\26\3\26\5\26\u0163\n\26\5\26\u0165\n\26\3\27"+
-		"\3\27\7\27\u0169\n\27\f\27\16\27\u016c\13\27\3\27\3\27\3\30\3\30\7\30"+
-		"\u0172\n\30\f\30\16\30\u0175\13\30\3\30\3\30\3\31\3\31\3\31\3\31\5\31"+
-		"\u017d\n\31\3\31\3\31\3\31\3\31\3\31\5\31\u0184\n\31\3\31\3\31\5\31\u0188"+
-		"\n\31\3\31\5\31\u018b\n\31\5\31\u018d\n\31\3\32\3\32\3\32\5\32\u0192\n"+
-		"\32\3\33\3\33\3\33\6\33\u0197\n\33\r\33\16\33\u0198\3\33\3\33\3\34\3\34"+
-		"\3\34\3\34\3\34\3\34\5\34\u01a3\n\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36"+
-		"\3\36\5\36\u01ad\n\36\3\36\3\36\5\36\u01b1\n\36\3\36\5\36\u01b4\n\36\3"+
-		"\37\3\37\3 \3 \3!\3!\3!\3!\3!\7!\u01bf\n!\f!\16!\u01c2\13!\3!\3!\3!\5"+
-		"!\u01c7\n!\3\"\3\"\3\"\5\"\u01cc\n\"\3#\3#\3#\3#\3$\6$\u01d3\n$\r$\16"+
-		"$\u01d4\3%\3%\3%\3%\3%\3%\3%\5%\u01de\n%\3%\5%\u01e1\n%\3&\3&\3&\5&\u01e6"+
-		"\n&\3&\3&\3&\3&\3&\5&\u01ed\n&\3\'\3\'\3\'\3(\3(\3(\7(\u01f5\n(\f(\16"+
-		"(\u01f8\13(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3)\5)\u0205\n)\3*\3*\3*\3*\3"+
-		"*\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\7,\u0216\n,\f,\16,\u0219\13,\3,\5,\u021c"+
-		"\n,\3-\3-\3-\3-\3.\3.\3.\2\2/\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 "+
-		"\"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\2\n\3\2,-\4\2##\679\4\2BBPP\3\2"+
-		"%&\4\2,-SS\4\2GHNN\3\2./\3\2ST\2\u0257\2]\3\2\2\2\4\u0081\3\2\2\2\6\u008a"+
-		"\3\2\2\2\b\u0092\3\2\2\2\n\u0096\3\2\2\2\f\u00a2\3\2\2\2\16\u00a4\3\2"+
-		"\2\2\20\u00ae\3\2\2\2\22\u00b8\3\2\2\2\24\u00bb\3\2\2\2\26\u00e0\3\2\2"+
-		"\2\30\u00e4\3\2\2\2\32\u0107\3\2\2\2\34\u0109\3\2\2\2\36\u011d\3\2\2\2"+
-		" \u012e\3\2\2\2\"\u0139\3\2\2\2$\u013b\3\2\2\2&\u013f\3\2\2\2(\u0142\3"+
-		"\2\2\2*\u0164\3\2\2\2,\u0166\3\2\2\2.\u016f\3\2\2\2\60\u018c\3\2\2\2\62"+
-		"\u018e\3\2\2\2\64\u0193\3\2\2\2\66\u019c\3\2\2\28\u01a4\3\2\2\2:\u01b0"+
-		"\3\2\2\2<\u01b5\3\2\2\2>\u01b7\3\2\2\2@\u01c6\3\2\2\2B\u01cb\3\2\2\2D"+
-		"\u01cd\3\2\2\2F\u01d2\3\2\2\2H\u01e0\3\2\2\2J\u01ec\3\2\2\2L\u01ee\3\2"+
-		"\2\2N\u01f1\3\2\2\2P\u0204\3\2\2\2R\u0206\3\2\2\2T\u020b\3\2\2\2V\u021b"+
-		"\3\2\2\2X\u021d\3\2\2\2Z\u0221\3\2\2\2\\^\7\3\2\2]\\\3\2\2\2]^\3\2\2\2"+
-		"^c\3\2\2\2_d\7\5\2\2`d\7\4\2\2ad\7<\2\2bd\3\2\2\2c_\3\2\2\2c`\3\2\2\2"+
-		"ca\3\2\2\2cb\3\2\2\2de\3\2\2\2ef\7\66\2\2fg\5Z.\2gi\7L\2\2hj\5\16\b\2"+
-		"ih\3\2\2\2ij\3\2\2\2jl\3\2\2\2km\5\4\3\2lk\3\2\2\2lm\3\2\2\2mq\3\2\2\2"+
-		"np\5\b\5\2on\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2rw\3\2\2\2sq\3\2\2\2"+
-		"tv\5\n\6\2ut\3\2\2\2vy\3\2\2\2wu\3\2\2\2wx\3\2\2\2x{\3\2\2\2yw\3\2\2\2"+
-		"z|\5\24\13\2{z\3\2\2\2|}\3\2\2\2}{\3\2\2\2}~\3\2\2\2~\177\3\2\2\2\177"+
-		"\u0080\7\2\2\3\u0080\3\3\2\2\2\u0081\u0082\7\63\2\2\u0082\u0084\7C\2\2"+
-		"\u0083\u0085\5\6\4\2\u0084\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0084"+
-		"\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0089\7I\2\2\u0089"+
-		"\5\3\2\2\2\u008a\u008e\7S\2\2\u008b\u008c\7B\2\2\u008c\u008f\t\2\2\2\u008d"+
-		"\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008e\u008d\3\2\2\2\u008f\u0090\3\2"+
-		"\2\2\u0090\u0091\7L\2\2\u0091\7\3\2\2\2\u0092\u0093\7\36\2\2\u0093\u0094"+
-		"\5Z.\2\u0094\u0095\5,\27\2\u0095\t\3\2\2\2\u0096\u009a\7=\2\2\u0097\u0098"+
-		"\5\f\7\2\u0098\u0099\7?\2\2\u0099\u009b\3\2\2\2\u009a\u0097\3\2\2\2\u009a"+
-		"\u009b\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009d\5Z.\2\u009d\u009e\5,\27"+
-		"\2\u009e\13\3\2\2\2\u009f\u00a3\5Z.\2\u00a0\u00a3\7\5\2\2\u00a1\u00a3"+
-		"\7\4\2\2\u00a2\u009f\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a2\u00a1\3\2\2\2\u00a3"+
-		"\r\3\2\2\2\u00a4\u00a5\7\62\2\2\u00a5\u00a9\7C\2\2\u00a6\u00a8\5\20\t"+
-		"\2\u00a7\u00a6\3\2\2\2\u00a8\u00ab\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa"+
-		"\3\2\2\2\u00aa\u00ac\3\2\2\2\u00ab\u00a9\3\2\2\2\u00ac\u00ad\7I\2\2\u00ad"+
-		"\17\3\2\2\2\u00ae\u00af\5Z.\2\u00af\u00b0\7B\2\2\u00b0\u00b1\5\22\n\2"+
-		"\u00b1\u00b2\7L\2\2\u00b2\21\3\2\2\2\u00b3\u00b9\5Z.\2\u00b4\u00b9\7-"+
-		"\2\2\u00b5\u00b9\7,\2\2\u00b6\u00b9\7+\2\2\u00b7\u00b9\7N\2\2\u00b8\u00b3"+
-		"\3\2\2\2\u00b8\u00b4\3\2\2\2\u00b8\u00b5\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8"+
-		"\u00b7\3\2\2\2\u00b9\23\3\2\2\2\u00ba\u00bc\7\3\2\2\u00bb\u00ba\3\2\2"+
-		"\2\u00bb\u00bc\3\2\2\2\u00bc\u00be\3\2\2\2\u00bd\u00bf\t\3\2\2\u00be\u00bd"+
-		"\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c2\5Z.\2\u00c1"+
-		"\u00c3\7&\2\2\u00c2\u00c1\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c5\3\2"+
-		"\2\2\u00c4\u00c6\5.\30\2\u00c5\u00c4\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6"+
-		"\u00c9\3\2\2\2\u00c7\u00c8\7:\2\2\u00c8\u00ca\5.\30\2\u00c9\u00c7\3\2"+
-		"\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\3\2\2\2\u00cb\u00cd\5\30\r\2\u00cc"+
-		"\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00cf\3\2\2\2\u00ce\u00d0\5\16"+
-		"\b\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d2\3\2\2\2\u00d1"+
-		"\u00d3\5\32\16\2\u00d2\u00d1\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d7\3"+
-		"\2\2\2\u00d4\u00d6\5\26\f\2\u00d5\u00d4\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7"+
-		"\u00d5\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00da\3\2\2\2\u00d9\u00d7\3\2"+
-		"\2\2\u00da\u00db\7>\2\2\u00db\u00dc\5\36\20\2\u00dc\u00de\7L\2\2\u00dd"+
-		"\u00df\5\"\22\2\u00de\u00dd\3\2\2\2\u00de\u00df\3\2\2\2\u00df\25\3\2\2"+
-		"\2\u00e0\u00e1\7=\2\2\u00e1\u00e2\5Z.\2\u00e2\u00e3\5,\27\2\u00e3\27\3"+
-		"\2\2\2\u00e4\u00e5\7;\2\2\u00e5\u00ea\5Z.\2\u00e6\u00e7\7@\2\2\u00e7\u00e9"+
-		"\5Z.\2\u00e8\u00e6\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00ea"+
-		"\u00eb\3\2\2\2\u00eb\31\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00ee\7\36\2"+
-		"\2\u00ee\u0108\5,\27\2\u00ef\u00f0\7\36\2\2\u00f0\u00f5\5Z.\2\u00f1\u00f2"+
-		"\7@\2\2\u00f2\u00f4\5Z.\2\u00f3\u00f1\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5"+
-		"\u00f3\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2\2\2\u00f7\u00f5\3\2"+
-		"\2\2\u00f8\u00f9\7L\2\2\u00f9\u0108\3\2\2\2\u00fa\u00fb\7\36\2\2\u00fb"+
-		"\u00fc\5,\27\2\u00fc\u00fd\7\36\2\2\u00fd\u0102\5Z.\2\u00fe\u00ff\7@\2"+
-		"\2\u00ff\u0101\5Z.\2\u0100\u00fe\3\2\2\2\u0101\u0104\3\2\2\2\u0102\u0100"+
-		"\3\2\2\2\u0102\u0103\3\2\2\2\u0103\u0105\3\2\2\2\u0104\u0102\3\2\2\2\u0105"+
-		"\u0106\7L\2\2\u0106\u0108\3\2\2\2\u0107\u00ed\3\2\2\2\u0107\u00ef\3\2"+
-		"\2\2\u0107\u00fa\3\2\2\2\u0108\33\3\2\2\2\u0109\u010e\7E\2\2\u010a\u010c"+
-		"\5\16\b\2\u010b\u010a\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010d\3\2\2\2"+
-		"\u010d\u010f\7>\2\2\u010e\u010b\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110"+
-		"\3\2\2\2\u0110\u0111\5 \21\2\u0111\u0118\5@!\2\u0112\u0113\7F\2\2\u0113"+
-		"\u0114\5 \21\2\u0114\u0115\5@!\2\u0115\u0117\3\2\2\2\u0116\u0112\3\2\2"+
-		"\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011b"+
-		"\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011c\7K\2\2\u011c\35\3\2\2\2\u011d"+
-		"\u011e\5 \21\2\u011e\u0125\5@!\2\u011f\u0120\7F\2\2\u0120\u0121\5 \21"+
-		"\2\u0121\u0122\5@!\2\u0122\u0124\3\2\2\2\u0123\u011f\3\2\2\2\u0124\u0127"+
-		"\3\2\2\2\u0125\u0123\3\2\2\2\u0125\u0126\3\2\2\2\u0126\37\3\2\2\2\u0127"+
-		"\u0125\3\2\2\2\u0128\u012a\5(\25\2\u0129\u0128\3\2\2\2\u012a\u012b\3\2"+
-		"\2\2\u012b\u0129\3\2\2\2\u012b\u012c\3\2\2\2\u012c\u012f\3\2\2\2\u012d"+
-		"\u012f\3\2\2\2\u012e\u0129\3\2\2\2\u012e\u012d\3\2\2\2\u012f!\3\2\2\2"+
-		"\u0130\u0132\5$\23\2\u0131\u0130\3\2\2\2\u0132\u0133\3\2\2\2\u0133\u0131"+
-		"\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0136\3\2\2\2\u0135\u0137\5&\24\2\u0136"+
-		"\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137\u013a\3\2\2\2\u0138\u013a\5&"+
-		"\24\2\u0139\u0131\3\2\2\2\u0139\u0138\3\2\2\2\u013a#\3\2\2\2\u013b\u013c"+
-		"\7\64\2\2\u013c\u013d\5.\30\2\u013d\u013e\5,\27\2\u013e%\3\2\2\2\u013f"+
-		"\u0140\7\65\2\2\u0140\u0141\5,\27\2\u0141\'\3\2\2\2\u0142\u0143\5*\26"+
-		"\2\u0143)\3\2\2\2\u0144\u0145\5Z.\2\u0145\u0146\t\4\2\2\u0146\u0149\5"+
-		"\60\31\2\u0147\u014a\5> \2\u0148\u014a\3\2\2\2\u0149\u0147\3\2\2\2\u0149"+
-		"\u0148\3\2\2\2\u014a\u0165\3\2\2\2\u014b\u014c\5Z.\2\u014c\u014d\t\4\2"+
-		"\2\u014d\u0150\5\34\17\2\u014e\u0151\5> \2\u014f\u0151\3\2\2\2\u0150\u014e"+
-		"\3\2\2\2\u0150\u014f\3\2\2\2\u0151\u0165\3\2\2\2\u0152\u0155\5\60\31\2"+
-		"\u0153\u0156\5> \2\u0154\u0156\3\2\2\2\u0155\u0153\3\2\2\2\u0155\u0154"+
-		"\3\2\2\2\u0156\u0165\3\2\2\2\u0157\u0165\5\66\34\2\u0158\u0165\5,\27\2"+
-		"\u0159\u015a\5,\27\2\u015a\u015d\7H\2\2\u015b\u015e\7M\2\2\u015c\u015e"+
-		"\3\2\2\2\u015d\u015b\3\2\2\2\u015d\u015c\3\2\2\2\u015e\u0165\3\2\2\2\u015f"+
-		"\u0162\5\64\33\2\u0160\u0163\5> \2\u0161\u0163\3\2\2\2\u0162\u0160\3\2"+
-		"\2\2\u0162\u0161\3\2\2\2\u0163\u0165\3\2\2\2\u0164\u0144\3\2\2\2\u0164"+
-		"\u014b\3\2\2\2\u0164\u0152\3\2\2\2\u0164\u0157\3\2\2\2\u0164\u0158\3\2"+
-		"\2\2\u0164\u0159\3\2\2\2\u0164\u015f\3\2\2\2\u0165+\3\2\2\2\u0166\u016a"+
-		"\7\61\2\2\u0167\u0169\7(\2\2\u0168\u0167\3\2\2\2\u0169\u016c\3\2\2\2\u016a"+
-		"\u0168\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016d\3\2\2\2\u016c\u016a\3\2"+
-		"\2\2\u016d\u016e\7X\2\2\u016e-\3\2\2\2\u016f\u0173\7\60\2\2\u0170\u0172"+
-		"\7W\2\2\u0171\u0170\3\2\2\2\u0172\u0175\3\2\2\2\u0173\u0171\3\2\2\2\u0173"+
-		"\u0174\3\2\2\2\u0174\u0176\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0177\7U"+
-		"\2\2\u0177/\3\2\2\2\u0178\u017c\58\35\2\u0179\u017d\7%\2\2\u017a\u017d"+
-		"\7&\2\2\u017b\u017d\3\2\2\2\u017c\u0179\3\2\2\2\u017c\u017a\3\2\2\2\u017c"+
-		"\u017b\3\2\2\2\u017d\u018d\3\2\2\2\u017e\u018d\5:\36\2\u017f\u0183\5\62"+
-		"\32\2\u0180\u0184\7%\2\2\u0181\u0184\7&\2\2\u0182\u0184\3\2\2\2\u0183"+
-		"\u0180\3\2\2\2\u0183\u0181\3\2\2\2\u0183\u0182\3\2\2\2\u0184\u018d\3\2"+
-		"\2\2\u0185\u0187\7T\2\2\u0186\u0188\5.\30\2\u0187\u0186\3\2\2\2\u0187"+
-		"\u0188\3\2\2\2\u0188\u018a\3\2\2\2\u0189\u018b\t\5\2\2\u018a\u0189\3\2"+
-		"\2\2\u018a\u018b\3\2\2\2\u018b\u018d\3\2\2\2\u018c\u0178\3\2\2\2\u018c"+
-		"\u017e\3\2\2\2\u018c\u017f\3\2\2\2\u018c\u0185\3\2\2\2\u018d\61\3\2\2"+
-		"\2\u018e\u0191\7Q\2\2\u018f\u0192\5<\37\2\u0190\u0192\5\34\17\2\u0191"+
-		"\u018f\3\2\2\2\u0191\u0190\3\2\2\2\u0192\63\3\2\2\2\u0193\u0194\7$\2\2"+
-		"\u0194\u0196\5(\25\2\u0195\u0197\5(\25\2\u0196\u0195\3\2\2\2\u0197\u0198"+
-		"\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019a\3\2\2\2\u019a"+
-		"\u019b\7K\2\2\u019b\65\3\2\2\2\u019c\u01a2\5\34\17\2\u019d\u01a3\7H\2"+
-		"\2\u019e\u01a3\7N\2\2\u019f\u01a3\7G\2\2\u01a0\u01a3\7M\2\2\u01a1\u01a3"+
-		"\3\2\2\2\u01a2\u019d\3\2\2\2\u01a2\u019e\3\2\2\2\u01a2\u019f\3\2\2\2\u01a2"+
-		"\u01a0\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3\67\3\2\2\2\u01a4\u01a5\7,\2\2"+
-		"\u01a5\u01a6\7\f\2\2\u01a6\u01a7\7,\2\2\u01a79\3\2\2\2\u01a8\u01b1\7,"+
-		"\2\2\u01a9\u01ac\7S\2\2\u01aa\u01ad\5.\30\2\u01ab\u01ad\3\2\2\2\u01ac"+
-		"\u01aa\3\2\2\2\u01ac\u01ab\3\2\2\2\u01ad\u01b1\3\2\2\2\u01ae\u01b1\7-"+
-		"\2\2\u01af\u01b1\7A\2\2\u01b0\u01a8\3\2\2\2\u01b0\u01a9\3\2\2\2\u01b0"+
-		"\u01ae\3\2\2\2\u01b0\u01af\3\2\2\2\u01b1\u01b3\3\2\2\2\u01b2\u01b4\t\5"+
-		"\2\2\u01b3\u01b2\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4;\3\2\2\2\u01b5\u01b6"+
-		"\t\6\2\2\u01b6=\3\2\2\2\u01b7\u01b8\t\7\2\2\u01b8?\3\2\2\2\u01b9\u01ba"+
-		"\7\'\2\2\u01ba\u01bb\5,\27\2\u01bb\u01bc\7H\2\2\u01bc\u01bd\5B\"\2\u01bd"+
-		"\u01bf\3\2\2\2\u01be\u01b9\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be\3\2"+
-		"\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c3"+
-		"\u01c4\7\'\2\2\u01c4\u01c7\5B\"\2\u01c5\u01c7\3\2\2\2\u01c6\u01c0\3\2"+
-		"\2\2\u01c6\u01c5\3\2\2\2\u01c7A\3\2\2\2\u01c8\u01cc\5P)\2\u01c9\u01cc"+
-		"\5F$\2\u01ca\u01cc\3\2\2\2\u01cb\u01c8\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb"+
-		"\u01ca\3\2\2\2\u01ccC\3\2\2\2\u01cd\u01ce\7E\2\2\u01ce\u01cf\5F$\2\u01cf"+
-		"\u01d0\7K\2\2\u01d0E\3\2\2\2\u01d1\u01d3\5H%\2\u01d2\u01d1\3\2\2\2\u01d3"+
-		"\u01d4\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5G\3\2\2\2"+
-		"\u01d6\u01e1\5J&\2\u01d7\u01d8\5J&\2\u01d8\u01d9\5> \2\u01d9\u01e1\3\2"+
-		"\2\2\u01da\u01dd\5N(\2\u01db\u01de\5> \2\u01dc\u01de\3\2\2\2\u01dd\u01db"+
-		"\3\2\2\2\u01dd\u01dc\3\2\2\2\u01de\u01e1\3\2\2\2\u01df\u01e1\5L\'\2\u01e0"+
-		"\u01d6\3\2\2\2\u01e0\u01d7\3\2\2\2\u01e0\u01da\3\2\2\2\u01e0\u01df\3\2"+
-		"\2\2\u01e1I\3\2\2\2\u01e2\u01ed\7,\2\2\u01e3\u01e5\7S\2\2\u01e4\u01e6"+
-		"\5.\30\2\u01e5\u01e4\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01ed\3\2\2\2\u01e7"+
-		"\u01ed\7T\2\2\u01e8\u01ed\7-\2\2\u01e9\u01ea\7O\2\2\u01ea\u01ed\5Z.\2"+
-		"\u01eb\u01ed\5,\27\2\u01ec\u01e2\3\2\2\2\u01ec\u01e3\3\2\2\2\u01ec\u01e7"+
-		"\3\2\2\2\u01ec\u01e8\3\2\2\2\u01ec\u01e9\3\2\2\2\u01ec\u01eb\3\2\2\2\u01ed"+
-		"K\3\2\2\2\u01ee\u01ef\5D#\2\u01ef\u01f0\5> \2\u01f0M\3\2\2\2\u01f1\u01f2"+
-		"\7$\2\2\u01f2\u01f6\5J&\2\u01f3\u01f5\5H%\2\u01f4\u01f3\3\2\2\2\u01f5"+
-		"\u01f8\3\2\2\2\u01f6\u01f4\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f9\3\2"+
-		"\2\2\u01f8\u01f6\3\2\2\2\u01f9\u01fa\7K\2\2\u01faO\3\2\2\2\u01fb\u01fc"+
-		"\5Z.\2\u01fc\u01fd\7E\2\2\u01fd\u01fe\5V,\2\u01fe\u01ff\7K\2\2\u01ff\u0200"+
-		"\t\b\2\2\u0200\u0205\3\2\2\2\u0201\u0205\5R*\2\u0202\u0205\5T+\2\u0203"+
-		"\u0205\5,\27\2\u0204\u01fb\3\2\2\2\u0204\u0201\3\2\2\2\u0204\u0202\3\2"+
-		"\2\2\u0204\u0203\3\2\2\2\u0205Q\3\2\2\2\u0206\u0207\5Z.\2\u0207\u0208"+
-		"\7E\2\2\u0208\u0209\5V,\2\u0209\u020a\7K\2\2\u020aS\3\2\2\2\u020b\u020c"+
-		"\7E\2\2\u020c\u020d\5,\27\2\u020d\u020e\7K\2\2\u020e\u020f\7E\2\2\u020f"+
-		"\u0210\5V,\2\u0210\u0211\7K\2\2\u0211U\3\2\2\2\u0212\u0217\5X-\2\u0213"+
-		"\u0214\7@\2\2\u0214\u0216\5X-\2\u0215\u0213\3\2\2\2\u0216\u0219\3\2\2"+
-		"\2\u0217\u0215\3\2\2\2\u0217\u0218\3\2\2\2\u0218\u021c\3\2\2\2\u0219\u0217"+
-		"\3\2\2\2\u021a\u021c\3\2\2\2\u021b\u0212\3\2\2\2\u021b\u021a\3\2\2\2\u021c"+
-		"W\3\2\2\2\u021d\u021e\5Z.\2\u021e\u021f\7B\2\2\u021f\u0220\5,\27\2\u0220"+
-		"Y\3\2\2\2\u0221\u0222\t\t\2\2\u0222[\3\2\2\2E]cilqw}\u0086\u008e\u009a"+
-		"\u00a2\u00a9\u00b8\u00bb\u00be\u00c2\u00c5\u00c9\u00cc\u00cf\u00d2\u00d7"+
-		"\u00de\u00ea\u00f5\u0102\u0107\u010b\u010e\u0118\u0125\u012b\u012e\u0133"+
-		"\u0136\u0139\u0149\u0150\u0155\u015d\u0162\u0164\u016a\u0173\u017c\u0183"+
-		"\u0187\u018a\u018c\u0191\u0198\u01a2\u01ac\u01b0\u01b3\u01c0\u01c6\u01cb"+
-		"\u01d4\u01dd\u01e0\u01e5\u01ec\u01f6\u0204\u0217\u021b";
+		"\u0004\u0001Z\u0222\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
+		"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
+		"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
+		"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
+		"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
+		"\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
+		"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
+		"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
+		"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
+		"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
+		"#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
+		"(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0001"+
+		"\u0000\u0003\u0000\\\b\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
+		"\u0000\u0003\u0000b\b\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
+		"\u0000\u0003\u0000h\b\u0000\u0001\u0000\u0003\u0000k\b\u0000\u0001\u0000"+
+		"\u0005\u0000n\b\u0000\n\u0000\f\u0000q\t\u0000\u0001\u0000\u0005\u0000"+
+		"t\b\u0000\n\u0000\f\u0000w\t\u0000\u0001\u0000\u0004\u0000z\b\u0000\u000b"+
+		"\u0000\f\u0000{\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001"+
+		"\u0001\u0004\u0001\u0083\b\u0001\u000b\u0001\f\u0001\u0084\u0001\u0001"+
+		"\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002"+
+		"\u008d\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+
+		"\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004"+
+		"\u0099\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
+		"\u0001\u0005\u0003\u0005\u00a1\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+
+		"\u0005\u0006\u00a6\b\u0006\n\u0006\f\u0006\u00a9\t\u0006\u0001\u0006\u0001"+
+		"\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
+		"\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00b7\b\b\u0001\t\u0003\t\u00ba"+
+		"\b\t\u0001\t\u0003\t\u00bd\b\t\u0001\t\u0001\t\u0003\t\u00c1\b\t\u0001"+
+		"\t\u0003\t\u00c4\b\t\u0001\t\u0001\t\u0003\t\u00c8\b\t\u0001\t\u0003\t"+
+		"\u00cb\b\t\u0001\t\u0003\t\u00ce\b\t\u0001\t\u0003\t\u00d1\b\t\u0001\t"+
+		"\u0005\t\u00d4\b\t\n\t\f\t\u00d7\t\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003"+
+		"\t\u00dd\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+
+		"\u000b\u0001\u000b\u0005\u000b\u00e7\b\u000b\n\u000b\f\u000b\u00ea\t\u000b"+
+		"\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0005\f\u00f2\b\f\n\f"+
+		"\f\f\u00f5\t\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f"+
+		"\u0001\f\u0005\f\u00ff\b\f\n\f\f\f\u0102\t\f\u0001\f\u0001\f\u0003\f\u0106"+
+		"\b\f\u0001\r\u0001\r\u0003\r\u010a\b\r\u0001\r\u0003\r\u010d\b\r\u0001"+
+		"\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0005\r\u0115\b\r\n\r\f\r\u0118"+
+		"\t\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+		"\u000e\u0001\u000e\u0005\u000e\u0122\b\u000e\n\u000e\f\u000e\u0125\t\u000e"+
+		"\u0001\u000f\u0004\u000f\u0128\b\u000f\u000b\u000f\f\u000f\u0129\u0001"+
+		"\u000f\u0003\u000f\u012d\b\u000f\u0001\u0010\u0004\u0010\u0130\b\u0010"+
+		"\u000b\u0010\f\u0010\u0131\u0001\u0010\u0003\u0010\u0135\b\u0010\u0001"+
+		"\u0010\u0003\u0010\u0138\b\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
+		"\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
+		"\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0148"+
+		"\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003"+
+		"\u0014\u014f\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0154"+
+		"\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
+		"\u0014\u0003\u0014\u015c\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003"+
+		"\u0014\u0161\b\u0014\u0003\u0014\u0163\b\u0014\u0001\u0015\u0001\u0015"+
+		"\u0005\u0015\u0167\b\u0015\n\u0015\f\u0015\u016a\t\u0015\u0001\u0015\u0001"+
+		"\u0015\u0001\u0016\u0001\u0016\u0005\u0016\u0170\b\u0016\n\u0016\f\u0016"+
+		"\u0173\t\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017"+
+		"\u0001\u0017\u0003\u0017\u017b\b\u0017\u0001\u0017\u0001\u0017\u0001\u0017"+
+		"\u0001\u0017\u0001\u0017\u0003\u0017\u0182\b\u0017\u0001\u0017\u0001\u0017"+
+		"\u0003\u0017\u0186\b\u0017\u0001\u0017\u0003\u0017\u0189\b\u0017\u0003"+
+		"\u0017\u018b\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u0190"+
+		"\b\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0004\u0019\u0195\b\u0019"+
+		"\u000b\u0019\f\u0019\u0196\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a"+
+		"\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u01a1\b\u001a"+
+		"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+
+		"\u0001\u001c\u0001\u001c\u0003\u001c\u01ab\b\u001c\u0001\u001c\u0001\u001c"+
+		"\u0003\u001c\u01af\b\u001c\u0001\u001c\u0003\u001c\u01b2\b\u001c\u0001"+
+		"\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+
+		"\u001f\u0001\u001f\u0001\u001f\u0005\u001f\u01bd\b\u001f\n\u001f\f\u001f"+
+		"\u01c0\t\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01c5\b"+
+		"\u001f\u0001 \u0001 \u0001 \u0003 \u01ca\b \u0001!\u0001!\u0001!\u0001"+
+		"!\u0001\"\u0004\"\u01d1\b\"\u000b\"\f\"\u01d2\u0001#\u0001#\u0001#\u0001"+
+		"#\u0001#\u0001#\u0001#\u0003#\u01dc\b#\u0001#\u0003#\u01df\b#\u0001$\u0001"+
+		"$\u0001$\u0003$\u01e4\b$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01eb"+
+		"\b$\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0005&\u01f3\b&\n&\f&\u01f6"+
+		"\t&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+
+		"\'\u0001\'\u0001\'\u0003\'\u0203\b\'\u0001(\u0001(\u0001(\u0001(\u0001"+
+		"(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001"+
+		"*\u0005*\u0214\b*\n*\f*\u0217\t*\u0001*\u0003*\u021a\b*\u0001+\u0001+"+
+		"\u0001+\u0001+\u0001,\u0001,\u0001,\u0000\u0000-\u0000\u0002\u0004\u0006"+
+		"\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,."+
+		"02468:<>@BDFHJLNPRTVX\u0000\b\u0001\u0000*+\u0002\u0000!!57\u0002\u0000"+
+		"@@NN\u0001\u0000#$\u0002\u0000*+QQ\u0002\u0000EFLL\u0001\u0000,-\u0001"+
+		"\u0000QR\u0255\u0000[\u0001\u0000\u0000\u0000\u0002\u007f\u0001\u0000"+
+		"\u0000\u0000\u0004\u0088\u0001\u0000\u0000\u0000\u0006\u0090\u0001\u0000"+
+		"\u0000\u0000\b\u0094\u0001\u0000\u0000\u0000\n\u00a0\u0001\u0000\u0000"+
+		"\u0000\f\u00a2\u0001\u0000\u0000\u0000\u000e\u00ac\u0001\u0000\u0000\u0000"+
+		"\u0010\u00b6\u0001\u0000\u0000\u0000\u0012\u00b9\u0001\u0000\u0000\u0000"+
+		"\u0014\u00de\u0001\u0000\u0000\u0000\u0016\u00e2\u0001\u0000\u0000\u0000"+
+		"\u0018\u0105\u0001\u0000\u0000\u0000\u001a\u0107\u0001\u0000\u0000\u0000"+
+		"\u001c\u011b\u0001\u0000\u0000\u0000\u001e\u012c\u0001\u0000\u0000\u0000"+
+		" \u0137\u0001\u0000\u0000\u0000\"\u0139\u0001\u0000\u0000\u0000$\u013d"+
+		"\u0001\u0000\u0000\u0000&\u0140\u0001\u0000\u0000\u0000(\u0162\u0001\u0000"+
+		"\u0000\u0000*\u0164\u0001\u0000\u0000\u0000,\u016d\u0001\u0000\u0000\u0000"+
+		".\u018a\u0001\u0000\u0000\u00000\u018c\u0001\u0000\u0000\u00002\u0191"+
+		"\u0001\u0000\u0000\u00004\u019a\u0001\u0000\u0000\u00006\u01a2\u0001\u0000"+
+		"\u0000\u00008\u01ae\u0001\u0000\u0000\u0000:\u01b3\u0001\u0000\u0000\u0000"+
+		"<\u01b5\u0001\u0000\u0000\u0000>\u01c4\u0001\u0000\u0000\u0000@\u01c9"+
+		"\u0001\u0000\u0000\u0000B\u01cb\u0001\u0000\u0000\u0000D\u01d0\u0001\u0000"+
+		"\u0000\u0000F\u01de\u0001\u0000\u0000\u0000H\u01ea\u0001\u0000\u0000\u0000"+
+		"J\u01ec\u0001\u0000\u0000\u0000L\u01ef\u0001\u0000\u0000\u0000N\u0202"+
+		"\u0001\u0000\u0000\u0000P\u0204\u0001\u0000\u0000\u0000R\u0209\u0001\u0000"+
+		"\u0000\u0000T\u0219\u0001\u0000\u0000\u0000V\u021b\u0001\u0000\u0000\u0000"+
+		"X\u021f\u0001\u0000\u0000\u0000Z\\\u0005\u0001\u0000\u0000[Z\u0001\u0000"+
+		"\u0000\u0000[\\\u0001\u0000\u0000\u0000\\a\u0001\u0000\u0000\u0000]b\u0005"+
+		"\u0003\u0000\u0000^b\u0005\u0002\u0000\u0000_b\u0005:\u0000\u0000`b\u0001"+
+		"\u0000\u0000\u0000a]\u0001\u0000\u0000\u0000a^\u0001\u0000\u0000\u0000"+
+		"a_\u0001\u0000\u0000\u0000a`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000"+
+		"\u0000cd\u00054\u0000\u0000de\u0003X,\u0000eg\u0005J\u0000\u0000fh\u0003"+
+		"\f\u0006\u0000gf\u0001\u0000\u0000\u0000gh\u0001\u0000\u0000\u0000hj\u0001"+
+		"\u0000\u0000\u0000ik\u0003\u0002\u0001\u0000ji\u0001\u0000\u0000\u0000"+
+		"jk\u0001\u0000\u0000\u0000ko\u0001\u0000\u0000\u0000ln\u0003\u0006\u0003"+
+		"\u0000ml\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000\u0000om\u0001\u0000"+
+		"\u0000\u0000op\u0001\u0000\u0000\u0000pu\u0001\u0000\u0000\u0000qo\u0001"+
+		"\u0000\u0000\u0000rt\u0003\b\u0004\u0000sr\u0001\u0000\u0000\u0000tw\u0001"+
+		"\u0000\u0000\u0000us\u0001\u0000\u0000\u0000uv\u0001\u0000\u0000\u0000"+
+		"vy\u0001\u0000\u0000\u0000wu\u0001\u0000\u0000\u0000xz\u0003\u0012\t\u0000"+
+		"yx\u0001\u0000\u0000\u0000z{\u0001\u0000\u0000\u0000{y\u0001\u0000\u0000"+
+		"\u0000{|\u0001\u0000\u0000\u0000|}\u0001\u0000\u0000\u0000}~\u0005\u0000"+
+		"\u0000\u0001~\u0001\u0001\u0000\u0000\u0000\u007f\u0080\u00051\u0000\u0000"+
+		"\u0080\u0082\u0005A\u0000\u0000\u0081\u0083\u0003\u0004\u0002\u0000\u0082"+
+		"\u0081\u0001\u0000\u0000\u0000\u0083\u0084\u0001\u0000\u0000\u0000\u0084"+
+		"\u0082\u0001\u0000\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085"+
+		"\u0086\u0001\u0000\u0000\u0000\u0086\u0087\u0005G\u0000\u0000\u0087\u0003"+
+		"\u0001\u0000\u0000\u0000\u0088\u008c\u0005Q\u0000\u0000\u0089\u008a\u0005"+
+		"@\u0000\u0000\u008a\u008d\u0007\u0000\u0000\u0000\u008b\u008d\u0001\u0000"+
+		"\u0000\u0000\u008c\u0089\u0001\u0000\u0000\u0000\u008c\u008b\u0001\u0000"+
+		"\u0000\u0000\u008d\u008e\u0001\u0000\u0000\u0000\u008e\u008f\u0005J\u0000"+
+		"\u0000\u008f\u0005\u0001\u0000\u0000\u0000\u0090\u0091\u0005\u001c\u0000"+
+		"\u0000\u0091\u0092\u0003X,\u0000\u0092\u0093\u0003*\u0015\u0000\u0093"+
+		"\u0007\u0001\u0000\u0000\u0000\u0094\u0098\u0005;\u0000\u0000\u0095\u0096"+
+		"\u0003\n\u0005\u0000\u0096\u0097\u0005=\u0000\u0000\u0097\u0099\u0001"+
+		"\u0000\u0000\u0000\u0098\u0095\u0001\u0000\u0000\u0000\u0098\u0099\u0001"+
+		"\u0000\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u009b\u0003"+
+		"X,\u0000\u009b\u009c\u0003*\u0015\u0000\u009c\t\u0001\u0000\u0000\u0000"+
+		"\u009d\u00a1\u0003X,\u0000\u009e\u00a1\u0005\u0003\u0000\u0000\u009f\u00a1"+
+		"\u0005\u0002\u0000\u0000\u00a0\u009d\u0001\u0000\u0000\u0000\u00a0\u009e"+
+		"\u0001\u0000\u0000\u0000\u00a0\u009f\u0001\u0000\u0000\u0000\u00a1\u000b"+
+		"\u0001\u0000\u0000\u0000\u00a2\u00a3\u00050\u0000\u0000\u00a3\u00a7\u0005"+
+		"A\u0000\u0000\u00a4\u00a6\u0003\u000e\u0007\u0000\u00a5\u00a4\u0001\u0000"+
+		"\u0000\u0000\u00a6\u00a9\u0001\u0000\u0000\u0000\u00a7\u00a5\u0001\u0000"+
+		"\u0000\u0000\u00a7\u00a8\u0001\u0000\u0000\u0000\u00a8\u00aa\u0001\u0000"+
+		"\u0000\u0000\u00a9\u00a7\u0001\u0000\u0000\u0000\u00aa\u00ab\u0005G\u0000"+
+		"\u0000\u00ab\r\u0001\u0000\u0000\u0000\u00ac\u00ad\u0003X,\u0000\u00ad"+
+		"\u00ae\u0005@\u0000\u0000\u00ae\u00af\u0003\u0010\b\u0000\u00af\u00b0"+
+		"\u0005J\u0000\u0000\u00b0\u000f\u0001\u0000\u0000\u0000\u00b1\u00b7\u0003"+
+		"X,\u0000\u00b2\u00b7\u0005+\u0000\u0000\u00b3\u00b7\u0005*\u0000\u0000"+
+		"\u00b4\u00b7\u0005)\u0000\u0000\u00b5\u00b7\u0005L\u0000\u0000\u00b6\u00b1"+
+		"\u0001\u0000\u0000\u0000\u00b6\u00b2\u0001\u0000\u0000\u0000\u00b6\u00b3"+
+		"\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b6\u00b5"+
+		"\u0001\u0000\u0000\u0000\u00b7\u0011\u0001\u0000\u0000\u0000\u00b8\u00ba"+
+		"\u0005\u0001\u0000\u0000\u00b9\u00b8\u0001\u0000\u0000\u0000\u00b9\u00ba"+
+		"\u0001\u0000\u0000\u0000\u00ba\u00bc\u0001\u0000\u0000\u0000\u00bb\u00bd"+
+		"\u0007\u0001\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bc\u00bd"+
+		"\u0001\u0000\u0000\u0000\u00bd\u00be\u0001\u0000\u0000\u0000\u00be\u00c0"+
+		"\u0003X,\u0000\u00bf\u00c1\u0005$\u0000\u0000\u00c0\u00bf\u0001\u0000"+
+		"\u0000\u0000\u00c0\u00c1\u0001\u0000\u0000\u0000\u00c1\u00c3\u0001\u0000"+
+		"\u0000\u0000\u00c2\u00c4\u0003,\u0016\u0000\u00c3\u00c2\u0001\u0000\u0000"+
+		"\u0000\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c7\u0001\u0000\u0000"+
+		"\u0000\u00c5\u00c6\u00058\u0000\u0000\u00c6\u00c8\u0003,\u0016\u0000\u00c7"+
+		"\u00c5\u0001\u0000\u0000\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000\u00c8"+
+		"\u00ca\u0001\u0000\u0000\u0000\u00c9\u00cb\u0003\u0016\u000b\u0000\u00ca"+
+		"\u00c9\u0001\u0000\u0000\u0000\u00ca\u00cb\u0001\u0000\u0000\u0000\u00cb"+
+		"\u00cd\u0001\u0000\u0000\u0000\u00cc\u00ce\u0003\f\u0006\u0000\u00cd\u00cc"+
+		"\u0001\u0000\u0000\u0000\u00cd\u00ce\u0001\u0000\u0000\u0000\u00ce\u00d0"+
+		"\u0001\u0000\u0000\u0000\u00cf\u00d1\u0003\u0018\f\u0000\u00d0\u00cf\u0001"+
+		"\u0000\u0000\u0000\u00d0\u00d1\u0001\u0000\u0000\u0000\u00d1\u00d5\u0001"+
+		"\u0000\u0000\u0000\u00d2\u00d4\u0003\u0014\n\u0000\u00d3\u00d2\u0001\u0000"+
+		"\u0000\u0000\u00d4\u00d7\u0001\u0000\u0000\u0000\u00d5\u00d3\u0001\u0000"+
+		"\u0000\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d8\u0001\u0000"+
+		"\u0000\u0000\u00d7\u00d5\u0001\u0000\u0000\u0000\u00d8\u00d9\u0005<\u0000"+
+		"\u0000\u00d9\u00da\u0003\u001c\u000e\u0000\u00da\u00dc\u0005J\u0000\u0000"+
+		"\u00db\u00dd\u0003 \u0010\u0000\u00dc\u00db\u0001\u0000\u0000\u0000\u00dc"+
+		"\u00dd\u0001\u0000\u0000\u0000\u00dd\u0013\u0001\u0000\u0000\u0000\u00de"+
+		"\u00df\u0005;\u0000\u0000\u00df\u00e0\u0003X,\u0000\u00e0\u00e1\u0003"+
+		"*\u0015\u0000\u00e1\u0015\u0001\u0000\u0000\u0000\u00e2\u00e3\u00059\u0000"+
+		"\u0000\u00e3\u00e8\u0003X,\u0000\u00e4\u00e5\u0005>\u0000\u0000\u00e5"+
+		"\u00e7\u0003X,\u0000\u00e6\u00e4\u0001\u0000\u0000\u0000\u00e7\u00ea\u0001"+
+		"\u0000\u0000\u0000\u00e8\u00e6\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001"+
+		"\u0000\u0000\u0000\u00e9\u0017\u0001\u0000\u0000\u0000\u00ea\u00e8\u0001"+
+		"\u0000\u0000\u0000\u00eb\u00ec\u0005\u001c\u0000\u0000\u00ec\u0106\u0003"+
+		"*\u0015\u0000\u00ed\u00ee\u0005\u001c\u0000\u0000\u00ee\u00f3\u0003X,"+
+		"\u0000\u00ef\u00f0\u0005>\u0000\u0000\u00f0\u00f2\u0003X,\u0000\u00f1"+
+		"\u00ef\u0001\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000\u00f3"+
+		"\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4"+
+		"\u00f6\u0001\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000\u00f6"+
+		"\u00f7\u0005J\u0000\u0000\u00f7\u0106\u0001\u0000\u0000\u0000\u00f8\u00f9"+
+		"\u0005\u001c\u0000\u0000\u00f9\u00fa\u0003*\u0015\u0000\u00fa\u00fb\u0005"+
+		"\u001c\u0000\u0000\u00fb\u0100\u0003X,\u0000\u00fc\u00fd\u0005>\u0000"+
+		"\u0000\u00fd\u00ff\u0003X,\u0000\u00fe\u00fc\u0001\u0000\u0000\u0000\u00ff"+
+		"\u0102\u0001\u0000\u0000\u0000\u0100\u00fe\u0001\u0000\u0000\u0000\u0100"+
+		"\u0101\u0001\u0000\u0000\u0000\u0101\u0103\u0001\u0000\u0000\u0000\u0102"+
+		"\u0100\u0001\u0000\u0000\u0000\u0103\u0104\u0005J\u0000\u0000\u0104\u0106"+
+		"\u0001\u0000\u0000\u0000\u0105\u00eb\u0001\u0000\u0000\u0000\u0105\u00ed"+
+		"\u0001\u0000\u0000\u0000\u0105\u00f8\u0001\u0000\u0000\u0000\u0106\u0019"+
+		"\u0001\u0000\u0000\u0000\u0107\u010c\u0005C\u0000\u0000\u0108\u010a\u0003"+
+		"\f\u0006\u0000\u0109\u0108\u0001\u0000\u0000\u0000\u0109\u010a\u0001\u0000"+
+		"\u0000\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010b\u010d\u0005<\u0000"+
+		"\u0000\u010c\u0109\u0001\u0000\u0000\u0000\u010c\u010d\u0001\u0000\u0000"+
+		"\u0000\u010d\u010e\u0001\u0000\u0000\u0000\u010e\u010f\u0003\u001e\u000f"+
+		"\u0000\u010f\u0116\u0003>\u001f\u0000\u0110\u0111\u0005D\u0000\u0000\u0111"+
+		"\u0112\u0003\u001e\u000f\u0000\u0112\u0113\u0003>\u001f\u0000\u0113\u0115"+
+		"\u0001\u0000\u0000\u0000\u0114\u0110\u0001\u0000\u0000\u0000\u0115\u0118"+
+		"\u0001\u0000\u0000\u0000\u0116\u0114\u0001\u0000\u0000\u0000\u0116\u0117"+
+		"\u0001\u0000\u0000\u0000\u0117\u0119\u0001\u0000\u0000\u0000\u0118\u0116"+
+		"\u0001\u0000\u0000\u0000\u0119\u011a\u0005I\u0000\u0000\u011a\u001b\u0001"+
+		"\u0000\u0000\u0000\u011b\u011c\u0003\u001e\u000f\u0000\u011c\u0123\u0003"+
+		">\u001f\u0000\u011d\u011e\u0005D\u0000\u0000\u011e\u011f\u0003\u001e\u000f"+
+		"\u0000\u011f\u0120\u0003>\u001f\u0000\u0120\u0122\u0001\u0000\u0000\u0000"+
+		"\u0121\u011d\u0001\u0000\u0000\u0000\u0122\u0125\u0001\u0000\u0000\u0000"+
+		"\u0123\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000"+
+		"\u0124\u001d\u0001\u0000\u0000\u0000\u0125\u0123\u0001\u0000\u0000\u0000"+
+		"\u0126\u0128\u0003&\u0013\u0000\u0127\u0126\u0001\u0000\u0000\u0000\u0128"+
+		"\u0129\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000\u0000\u0000\u0129"+
+		"\u012a\u0001\u0000\u0000\u0000\u012a\u012d\u0001\u0000\u0000\u0000\u012b"+
+		"\u012d\u0001\u0000\u0000\u0000\u012c\u0127\u0001\u0000\u0000\u0000\u012c"+
+		"\u012b\u0001\u0000\u0000\u0000\u012d\u001f\u0001\u0000\u0000\u0000\u012e"+
+		"\u0130\u0003\"\u0011\u0000\u012f\u012e\u0001\u0000\u0000\u0000\u0130\u0131"+
+		"\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000\u0131\u0132"+
+		"\u0001\u0000\u0000\u0000\u0132\u0134\u0001\u0000\u0000\u0000\u0133\u0135"+
+		"\u0003$\u0012\u0000\u0134\u0133\u0001\u0000\u0000\u0000\u0134\u0135\u0001"+
+		"\u0000\u0000\u0000\u0135\u0138\u0001\u0000\u0000\u0000\u0136\u0138\u0003"+
+		"$\u0012\u0000\u0137\u012f\u0001\u0000\u0000\u0000\u0137\u0136\u0001\u0000"+
+		"\u0000\u0000\u0138!\u0001\u0000\u0000\u0000\u0139\u013a\u00052\u0000\u0000"+
+		"\u013a\u013b\u0003,\u0016\u0000\u013b\u013c\u0003*\u0015\u0000\u013c#"+
+		"\u0001\u0000\u0000\u0000\u013d\u013e\u00053\u0000\u0000\u013e\u013f\u0003"+
+		"*\u0015\u0000\u013f%\u0001\u0000\u0000\u0000\u0140\u0141\u0003(\u0014"+
+		"\u0000\u0141\'\u0001\u0000\u0000\u0000\u0142\u0143\u0003X,\u0000\u0143"+
+		"\u0144\u0007\u0002\u0000\u0000\u0144\u0147\u0003.\u0017\u0000\u0145\u0148"+
+		"\u0003<\u001e\u0000\u0146\u0148\u0001\u0000\u0000\u0000\u0147\u0145\u0001"+
+		"\u0000\u0000\u0000\u0147\u0146\u0001\u0000\u0000\u0000\u0148\u0163\u0001"+
+		"\u0000\u0000\u0000\u0149\u014a\u0003X,\u0000\u014a\u014b\u0007\u0002\u0000"+
+		"\u0000\u014b\u014e\u0003\u001a\r\u0000\u014c\u014f\u0003<\u001e\u0000"+
+		"\u014d\u014f\u0001\u0000\u0000\u0000\u014e\u014c\u0001\u0000\u0000\u0000"+
+		"\u014e\u014d\u0001\u0000\u0000\u0000\u014f\u0163\u0001\u0000\u0000\u0000"+
+		"\u0150\u0153\u0003.\u0017\u0000\u0151\u0154\u0003<\u001e\u0000\u0152\u0154"+
+		"\u0001\u0000\u0000\u0000\u0153\u0151\u0001\u0000\u0000\u0000\u0153\u0152"+
+		"\u0001\u0000\u0000\u0000\u0154\u0163\u0001\u0000\u0000\u0000\u0155\u0163"+
+		"\u00034\u001a\u0000\u0156\u0163\u0003*\u0015\u0000\u0157\u0158\u0003*"+
+		"\u0015\u0000\u0158\u015b\u0005F\u0000\u0000\u0159\u015c\u0005K\u0000\u0000"+
+		"\u015a\u015c\u0001\u0000\u0000\u0000\u015b\u0159\u0001\u0000\u0000\u0000"+
+		"\u015b\u015a\u0001\u0000\u0000\u0000\u015c\u0163\u0001\u0000\u0000\u0000"+
+		"\u015d\u0160\u00032\u0019\u0000\u015e\u0161\u0003<\u001e\u0000\u015f\u0161"+
+		"\u0001\u0000\u0000\u0000\u0160\u015e\u0001\u0000\u0000\u0000\u0160\u015f"+
+		"\u0001\u0000\u0000\u0000\u0161\u0163\u0001\u0000\u0000\u0000\u0162\u0142"+
+		"\u0001\u0000\u0000\u0000\u0162\u0149\u0001\u0000\u0000\u0000\u0162\u0150"+
+		"\u0001\u0000\u0000\u0000\u0162\u0155\u0001\u0000\u0000\u0000\u0162\u0156"+
+		"\u0001\u0000\u0000\u0000\u0162\u0157\u0001\u0000\u0000\u0000\u0162\u015d"+
+		"\u0001\u0000\u0000\u0000\u0163)\u0001\u0000\u0000\u0000\u0164\u0168\u0005"+
+		"/\u0000\u0000\u0165\u0167\u0005&\u0000\u0000\u0166\u0165\u0001\u0000\u0000"+
+		"\u0000\u0167\u016a\u0001\u0000\u0000\u0000\u0168\u0166\u0001\u0000\u0000"+
+		"\u0000\u0168\u0169\u0001\u0000\u0000\u0000\u0169\u016b\u0001\u0000\u0000"+
+		"\u0000\u016a\u0168\u0001\u0000\u0000\u0000\u016b\u016c\u0005V\u0000\u0000"+
+		"\u016c+\u0001\u0000\u0000\u0000\u016d\u0171\u0005.\u0000\u0000\u016e\u0170"+
+		"\u0005U\u0000\u0000\u016f\u016e\u0001\u0000\u0000\u0000\u0170\u0173\u0001"+
+		"\u0000\u0000\u0000\u0171\u016f\u0001\u0000\u0000\u0000\u0171\u0172\u0001"+
+		"\u0000\u0000\u0000\u0172\u0174\u0001\u0000\u0000\u0000\u0173\u0171\u0001"+
+		"\u0000\u0000\u0000\u0174\u0175\u0005S\u0000\u0000\u0175-\u0001\u0000\u0000"+
+		"\u0000\u0176\u017a\u00036\u001b\u0000\u0177\u017b\u0005#\u0000\u0000\u0178"+
+		"\u017b\u0005$\u0000\u0000\u0179\u017b\u0001\u0000\u0000\u0000\u017a\u0177"+
+		"\u0001\u0000\u0000\u0000\u017a\u0178\u0001\u0000\u0000\u0000\u017a\u0179"+
+		"\u0001\u0000\u0000\u0000\u017b\u018b\u0001\u0000\u0000\u0000\u017c\u018b"+
+		"\u00038\u001c\u0000\u017d\u0181\u00030\u0018\u0000\u017e\u0182\u0005#"+
+		"\u0000\u0000\u017f\u0182\u0005$\u0000\u0000\u0180\u0182\u0001\u0000\u0000"+
+		"\u0000\u0181\u017e\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000"+
+		"\u0000\u0181\u0180\u0001\u0000\u0000\u0000\u0182\u018b\u0001\u0000\u0000"+
+		"\u0000\u0183\u0185\u0005R\u0000\u0000\u0184\u0186\u0003,\u0016\u0000\u0185"+
+		"\u0184\u0001\u0000\u0000\u0000\u0185\u0186\u0001\u0000\u0000\u0000\u0186"+
+		"\u0188\u0001\u0000\u0000\u0000\u0187\u0189\u0007\u0003\u0000\u0000\u0188"+
+		"\u0187\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000\u0000\u0000\u0189"+
+		"\u018b\u0001\u0000\u0000\u0000\u018a\u0176\u0001\u0000\u0000\u0000\u018a"+
+		"\u017c\u0001\u0000\u0000\u0000\u018a\u017d\u0001\u0000\u0000\u0000\u018a"+
+		"\u0183\u0001\u0000\u0000\u0000\u018b/\u0001\u0000\u0000\u0000\u018c\u018f"+
+		"\u0005O\u0000\u0000\u018d\u0190\u0003:\u001d\u0000\u018e\u0190\u0003\u001a"+
+		"\r\u0000\u018f\u018d\u0001\u0000\u0000\u0000\u018f\u018e\u0001\u0000\u0000"+
+		"\u0000\u01901\u0001\u0000\u0000\u0000\u0191\u0192\u0005\"\u0000\u0000"+
+		"\u0192\u0194\u0003&\u0013\u0000\u0193\u0195\u0003&\u0013\u0000\u0194\u0193"+
+		"\u0001\u0000\u0000\u0000\u0195\u0196\u0001\u0000\u0000\u0000\u0196\u0194"+
+		"\u0001\u0000\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u0198"+
+		"\u0001\u0000\u0000\u0000\u0198\u0199\u0005I\u0000\u0000\u01993\u0001\u0000"+
+		"\u0000\u0000\u019a\u01a0\u0003\u001a\r\u0000\u019b\u01a1\u0005F\u0000"+
+		"\u0000\u019c\u01a1\u0005L\u0000\u0000\u019d\u01a1\u0005E\u0000\u0000\u019e"+
+		"\u01a1\u0005K\u0000\u0000\u019f\u01a1\u0001\u0000\u0000\u0000\u01a0\u019b"+
+		"\u0001\u0000\u0000\u0000\u01a0\u019c\u0001\u0000\u0000\u0000\u01a0\u019d"+
+		"\u0001\u0000\u0000\u0000\u01a0\u019e\u0001\u0000\u0000\u0000\u01a0\u019f"+
+		"\u0001\u0000\u0000\u0000\u01a15\u0001\u0000\u0000\u0000\u01a2\u01a3\u0005"+
+		"*\u0000\u0000\u01a3\u01a4\u0005\n\u0000\u0000\u01a4\u01a5\u0005*\u0000"+
+		"\u0000\u01a57\u0001\u0000\u0000\u0000\u01a6\u01af\u0005*\u0000\u0000\u01a7"+
+		"\u01aa\u0005Q\u0000\u0000\u01a8\u01ab\u0003,\u0016\u0000\u01a9\u01ab\u0001"+
+		"\u0000\u0000\u0000\u01aa\u01a8\u0001\u0000\u0000\u0000\u01aa\u01a9\u0001"+
+		"\u0000\u0000\u0000\u01ab\u01af\u0001\u0000\u0000\u0000\u01ac\u01af\u0005"+
+		"+\u0000\u0000\u01ad\u01af\u0005?\u0000\u0000\u01ae\u01a6\u0001\u0000\u0000"+
+		"\u0000\u01ae\u01a7\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000"+
+		"\u0000\u01ae\u01ad\u0001\u0000\u0000\u0000\u01af\u01b1\u0001\u0000\u0000"+
+		"\u0000\u01b0\u01b2\u0007\u0003\u0000\u0000\u01b1\u01b0\u0001\u0000\u0000"+
+		"\u0000\u01b1\u01b2\u0001\u0000\u0000\u0000\u01b29\u0001\u0000\u0000\u0000"+
+		"\u01b3\u01b4\u0007\u0004\u0000\u0000\u01b4;\u0001\u0000\u0000\u0000\u01b5"+
+		"\u01b6\u0007\u0005\u0000\u0000\u01b6=\u0001\u0000\u0000\u0000\u01b7\u01b8"+
+		"\u0005%\u0000\u0000\u01b8\u01b9\u0003*\u0015\u0000\u01b9\u01ba\u0005F"+
+		"\u0000\u0000\u01ba\u01bb\u0003@ \u0000\u01bb\u01bd\u0001\u0000\u0000\u0000"+
+		"\u01bc\u01b7\u0001\u0000\u0000\u0000\u01bd\u01c0\u0001\u0000\u0000\u0000"+
+		"\u01be\u01bc\u0001\u0000\u0000\u0000\u01be\u01bf\u0001\u0000\u0000\u0000"+
+		"\u01bf\u01c1\u0001\u0000\u0000\u0000\u01c0\u01be\u0001\u0000\u0000\u0000"+
+		"\u01c1\u01c2\u0005%\u0000\u0000\u01c2\u01c5\u0003@ \u0000\u01c3\u01c5"+
+		"\u0001\u0000\u0000\u0000\u01c4\u01be\u0001\u0000\u0000\u0000\u01c4\u01c3"+
+		"\u0001\u0000\u0000\u0000\u01c5?\u0001\u0000\u0000\u0000\u01c6\u01ca\u0003"+
+		"N\'\u0000\u01c7\u01ca\u0003D\"\u0000\u01c8\u01ca\u0001\u0000\u0000\u0000"+
+		"\u01c9\u01c6\u0001\u0000\u0000\u0000\u01c9\u01c7\u0001\u0000\u0000\u0000"+
+		"\u01c9\u01c8\u0001\u0000\u0000\u0000\u01caA\u0001\u0000\u0000\u0000\u01cb"+
+		"\u01cc\u0005C\u0000\u0000\u01cc\u01cd\u0003D\"\u0000\u01cd\u01ce\u0005"+
+		"I\u0000\u0000\u01ceC\u0001\u0000\u0000\u0000\u01cf\u01d1\u0003F#\u0000"+
+		"\u01d0\u01cf\u0001\u0000\u0000\u0000\u01d1\u01d2\u0001\u0000\u0000\u0000"+
+		"\u01d2\u01d0\u0001\u0000\u0000\u0000\u01d2\u01d3\u0001\u0000\u0000\u0000"+
+		"\u01d3E\u0001\u0000\u0000\u0000\u01d4\u01df\u0003H$\u0000\u01d5\u01d6"+
+		"\u0003H$\u0000\u01d6\u01d7\u0003<\u001e\u0000\u01d7\u01df\u0001\u0000"+
+		"\u0000\u0000\u01d8\u01db\u0003L&\u0000\u01d9\u01dc\u0003<\u001e\u0000"+
+		"\u01da\u01dc\u0001\u0000\u0000\u0000\u01db\u01d9\u0001\u0000\u0000\u0000"+
+		"\u01db\u01da\u0001\u0000\u0000\u0000\u01dc\u01df\u0001\u0000\u0000\u0000"+
+		"\u01dd\u01df\u0003J%\u0000\u01de\u01d4\u0001\u0000\u0000\u0000\u01de\u01d5"+
+		"\u0001\u0000\u0000\u0000\u01de\u01d8\u0001\u0000\u0000\u0000\u01de\u01dd"+
+		"\u0001\u0000\u0000\u0000\u01dfG\u0001\u0000\u0000\u0000\u01e0\u01eb\u0005"+
+		"*\u0000\u0000\u01e1\u01e3\u0005Q\u0000\u0000\u01e2\u01e4\u0003,\u0016"+
+		"\u0000\u01e3\u01e2\u0001\u0000\u0000\u0000\u01e3\u01e4\u0001\u0000\u0000"+
+		"\u0000\u01e4\u01eb\u0001\u0000\u0000\u0000\u01e5\u01eb\u0005R\u0000\u0000"+
+		"\u01e6\u01eb\u0005+\u0000\u0000\u01e7\u01e8\u0005M\u0000\u0000\u01e8\u01eb"+
+		"\u0003X,\u0000\u01e9\u01eb\u0003*\u0015\u0000\u01ea\u01e0\u0001\u0000"+
+		"\u0000\u0000\u01ea\u01e1\u0001\u0000\u0000\u0000\u01ea\u01e5\u0001\u0000"+
+		"\u0000\u0000\u01ea\u01e6\u0001\u0000\u0000\u0000\u01ea\u01e7\u0001\u0000"+
+		"\u0000\u0000\u01ea\u01e9\u0001\u0000\u0000\u0000\u01ebI\u0001\u0000\u0000"+
+		"\u0000\u01ec\u01ed\u0003B!\u0000\u01ed\u01ee\u0003<\u001e\u0000\u01ee"+
+		"K\u0001\u0000\u0000\u0000\u01ef\u01f0\u0005\"\u0000\u0000\u01f0\u01f4"+
+		"\u0003H$\u0000\u01f1\u01f3\u0003F#\u0000\u01f2\u01f1\u0001\u0000\u0000"+
+		"\u0000\u01f3\u01f6\u0001\u0000\u0000\u0000\u01f4\u01f2\u0001\u0000\u0000"+
+		"\u0000\u01f4\u01f5\u0001\u0000\u0000\u0000\u01f5\u01f7\u0001\u0000\u0000"+
+		"\u0000\u01f6\u01f4\u0001\u0000\u0000\u0000\u01f7\u01f8\u0005I\u0000\u0000"+
+		"\u01f8M\u0001\u0000\u0000\u0000\u01f9\u01fa\u0003X,\u0000\u01fa\u01fb"+
+		"\u0005C\u0000\u0000\u01fb\u01fc\u0003T*\u0000\u01fc\u01fd\u0005I\u0000"+
+		"\u0000\u01fd\u01fe\u0007\u0006\u0000\u0000\u01fe\u0203\u0001\u0000\u0000"+
+		"\u0000\u01ff\u0203\u0003P(\u0000\u0200\u0203\u0003R)\u0000\u0201\u0203"+
+		"\u0003*\u0015\u0000\u0202\u01f9\u0001\u0000\u0000\u0000\u0202\u01ff\u0001"+
+		"\u0000\u0000\u0000\u0202\u0200\u0001\u0000\u0000\u0000\u0202\u0201\u0001"+
+		"\u0000\u0000\u0000\u0203O\u0001\u0000\u0000\u0000\u0204\u0205\u0003X,"+
+		"\u0000\u0205\u0206\u0005C\u0000\u0000\u0206\u0207\u0003T*\u0000\u0207"+
+		"\u0208\u0005I\u0000\u0000\u0208Q\u0001\u0000\u0000\u0000\u0209\u020a\u0005"+
+		"C\u0000\u0000\u020a\u020b\u0003*\u0015\u0000\u020b\u020c\u0005I\u0000"+
+		"\u0000\u020c\u020d\u0005C\u0000\u0000\u020d\u020e\u0003T*\u0000\u020e"+
+		"\u020f\u0005I\u0000\u0000\u020fS\u0001\u0000\u0000\u0000\u0210\u0215\u0003"+
+		"V+\u0000\u0211\u0212\u0005>\u0000\u0000\u0212\u0214\u0003V+\u0000\u0213"+
+		"\u0211\u0001\u0000\u0000\u0000\u0214\u0217\u0001\u0000\u0000\u0000\u0215"+
+		"\u0213\u0001\u0000\u0000\u0000\u0215\u0216\u0001\u0000\u0000\u0000\u0216"+
+		"\u021a\u0001\u0000\u0000\u0000\u0217\u0215\u0001\u0000\u0000\u0000\u0218"+
+		"\u021a\u0001\u0000\u0000\u0000\u0219\u0210\u0001\u0000\u0000\u0000\u0219"+
+		"\u0218\u0001\u0000\u0000\u0000\u021aU\u0001\u0000\u0000\u0000\u021b\u021c"+
+		"\u0003X,\u0000\u021c\u021d\u0005@\u0000\u0000\u021d\u021e\u0003*\u0015"+
+		"\u0000\u021eW\u0001\u0000\u0000\u0000\u021f\u0220\u0007\u0007\u0000\u0000"+
+		"\u0220Y\u0001\u0000\u0000\u0000C[agjou{\u0084\u008c\u0098\u00a0\u00a7"+
+		"\u00b6\u00b9\u00bc\u00c0\u00c3\u00c7\u00ca\u00cd\u00d0\u00d5\u00dc\u00e8"+
+		"\u00f3\u0100\u0105\u0109\u010c\u0116\u0123\u0129\u012c\u0131\u0134\u0137"+
+		"\u0147\u014e\u0153\u015b\u0160\u0162\u0168\u0171\u017a\u0181\u0185\u0188"+
+		"\u018a\u018f\u0196\u01a0\u01aa\u01ae\u01b1\u01be\u01c4\u01c9\u01d2\u01db"+
+		"\u01de\u01e3\u01ea\u01f4\u0202\u0215\u0219";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserBaseListener.java b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserBaseListener.java
index 1978ba1..6b97332 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserBaseListener.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv3Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -37,6 +37,7 @@
  * which can be extended to create a listener which only needs to handle a subset
  * of the available methods.
  */
+@SuppressWarnings("CheckReturnValue")
 public class ANTLRv3ParserBaseListener implements ANTLRv3ParserListener {
 	/**
 	 * {@inheritDoc}
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserListener.java b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserListener.java
index 3d27c93..6b53d62 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserListener.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr3/ANTLRv3ParserListener.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv3Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Lexer.java b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Lexer.java
index 54abded..4528264 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Lexer.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Lexer.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv4Lexer.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -36,9 +36,9 @@
 import org.antlr.v4.runtime.dfa.DFA;
 import org.antlr.v4.runtime.misc.*;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class ANTLRv4Lexer extends LexerAdaptor {
-	static { RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -211,268 +211,469 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2?\u0309\b\1\b\1\b"+
-		"\1\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t"+
-		"\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21"+
-		"\t\21\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30"+
-		"\t\30\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37"+
-		"\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)"+
-		"\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63"+
-		"\t\63\4\64\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;"+
-		"\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G"+
-		"\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR"+
-		"\4S\tS\4T\tT\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4"+
-		"^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\t"+
-		"i\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4"+
-		"u\tu\4v\tv\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3"+
-		"\3\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t\3\t"+
-		"\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u011d\n\n\f\n\16\n\u0120\13\n"+
-		"\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u012c\n\13\f\13"+
-		"\16\13\u012f\13\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7"+
-		"\f\u013d\n\f\f\f\16\f\u0140\13\f\3\f\3\f\3\r\3\r\3\16\3\16\3\16\3\16\3"+
-		"\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3"+
-		"\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3"+
-		"\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3"+
-		"\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3"+
-		"\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3"+
-		"\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3"+
-		"\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3"+
-		"\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#"+
-		"\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3"+
-		"/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\64\6\64\u01de\n\64\r\64"+
-		"\16\64\u01df\3\64\3\64\3\65\3\65\3\65\3\65\3\66\3\66\5\66\u01ea\n\66\3"+
-		"\67\3\67\38\38\39\39\39\39\79\u01f4\n9\f9\169\u01f7\139\39\39\39\59\u01fc"+
-		"\n9\3:\3:\3:\3:\3:\7:\u0203\n:\f:\16:\u0206\13:\3:\3:\3:\5:\u020b\n:\3"+
-		";\3;\3;\3;\7;\u0211\n;\f;\16;\u0214\13;\3<\3<\3<\3<\3<\5<\u021b\n<\3="+
-		"\3=\3=\3>\3>\3>\3>\3>\5>\u0225\n>\5>\u0227\n>\5>\u0229\n>\5>\u022b\n>"+
-		"\3?\3?\3?\7?\u0230\n?\f?\16?\u0233\13?\5?\u0235\n?\3@\3@\3A\3A\3B\3B\3"+
-		"B\3B\3B\3B\3B\3B\3B\5B\u0244\nB\3C\3C\3C\5C\u0249\nC\3C\3C\3D\3D\3D\7"+
-		"D\u0250\nD\fD\16D\u0253\13D\3D\3D\3E\3E\3E\7E\u025a\nE\fE\16E\u025d\13"+
-		"E\3E\3E\3F\3F\3F\7F\u0264\nF\fF\16F\u0267\13F\3G\3G\3G\3G\5G\u026d\nG"+
-		"\3H\3H\3I\3I\3I\3I\3J\3J\3K\3K\3L\3L\3L\3M\3M\3N\3N\3O\3O\3P\3P\3Q\3Q"+
-		"\3R\3R\3S\3S\3T\3T\3U\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3\\\3"+
-		"\\\3\\\3]\3]\3^\3^\3_\3_\3`\3`\3a\3a\3b\3b\3c\3c\3c\3d\3d\3e\3e\3f\3f"+
-		"\3g\3g\3g\3g\3g\3h\3h\3h\3h\3i\3i\3i\3i\3j\3j\3j\3j\3k\3k\3k\3l\3l\3l"+
-		"\3l\3m\3m\3n\3n\3n\3n\3n\3o\3o\3o\3o\3p\3p\3p\3p\3q\3q\3q\3q\3r\3r\3r"+
-		"\3r\3s\3s\3s\3s\3t\3t\3t\3t\3u\3u\3u\3v\3v\3v\3v\3w\3w\3x\3x\6x\u02f5"+
-		"\nx\rx\16x\u02f6\3x\3x\3y\3y\3y\3y\3z\3z\3z\3z\3{\3{\7{\u0305\n{\f{\16"+
-		"{\u0308\13{\4\u01f5\u0204\2|\6\6\b\7\n\b\f\t\16\n\20\13\22\f\24\r\26\16"+
-		"\30\17\32\20\34\2\36\21 \22\"\23$\24&\25(\26*\27,\30.\31\60\32\62\33\64"+
-		"\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60^\61`\62b\63d"+
-		"\64f\65h\66j\67l8n\2p\2r\2t\2v\2x\2z\2|\2~\2\u0080\2\u0082\2\u0084\2\u0086"+
-		"\2\u0088\2\u008a\2\u008c\2\u008e\2\u0090\2\u0092\2\u0094\2\u0096\2\u0098"+
-		"\2\u009a\2\u009c\2\u009e\2\u00a0\2\u00a2\2\u00a4\2\u00a6\2\u00a8\2\u00aa"+
-		"\2\u00ac\2\u00ae\2\u00b0\2\u00b2\2\u00b4\2\u00b6\2\u00b8\2\u00ba\2\u00bc"+
-		"\2\u00be\2\u00c0\2\u00c2\2\u00c4\2\u00c6\2\u00c8\2\u00ca\2\u00cc\2\u00ce"+
-		"\2\u00d0\2\u00d2\2\u00d4\2\u00d6\2\u00d89\u00da:\u00dc;\u00de\2\u00e0"+
-		"\2\u00e2\2\u00e4\2\u00e6\2\u00e8\2\u00ea\2\u00ec<\u00ee=\u00f0>\u00f2"+
-		"\2\u00f4\5\u00f6?\u00f8\2\6\2\3\4\5\17\5\2\13\f\16\17\"\"\4\2\13\13\""+
-		"\"\4\2\f\f\16\17\4\2\f\f\17\17\n\2$$))^^ddhhppttvv\3\2\63;\5\2\62;CHc"+
-		"h\3\2\62;\6\2\f\f\17\17))^^\6\2\f\f\17\17$$^^\5\2\u00b9\u00b9\u0302\u0371"+
-		"\u2041\u2042\17\2C\\c|\u00c2\u00d8\u00da\u00f8\u00fa\u0301\u0372\u037f"+
-		"\u0381\u2001\u200e\u200f\u2072\u2191\u2c02\u2ff1\u3003\ud801\uf902\ufdd1"+
-		"\ufdf2\uffff\3\2^_\2\u02f3\2\6\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2"+
-		"\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3\2\2\2"+
-		"\2\30\3\2\2\2\2\32\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2"+
-		"\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2"+
-		"\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2"+
-		"\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2"+
-		"\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V"+
-		"\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3"+
-		"\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\3\u00d0"+
-		"\3\2\2\2\3\u00d2\3\2\2\2\3\u00d4\3\2\2\2\3\u00d6\3\2\2\2\3\u00d8\3\2\2"+
-		"\2\3\u00da\3\2\2\2\3\u00dc\3\2\2\2\4\u00de\3\2\2\2\4\u00e0\3\2\2\2\4\u00e2"+
-		"\3\2\2\2\4\u00e4\3\2\2\2\4\u00e6\3\2\2\2\4\u00e8\3\2\2\2\4\u00ea\3\2\2"+
-		"\2\4\u00ec\3\2\2\2\4\u00ee\3\2\2\2\4\u00f0\3\2\2\2\5\u00f2\3\2\2\2\5\u00f4"+
-		"\3\2\2\2\5\u00f6\3\2\2\2\6\u00fa\3\2\2\2\b\u00fe\3\2\2\2\n\u0102\3\2\2"+
-		"\2\f\u0106\3\2\2\2\16\u0108\3\2\2\2\20\u010a\3\2\2\2\22\u010c\3\2\2\2"+
-		"\24\u010f\3\2\2\2\26\u0113\3\2\2\2\30\u0123\3\2\2\2\32\u0132\3\2\2\2\34"+
-		"\u0143\3\2\2\2\36\u0145\3\2\2\2 \u014c\3\2\2\2\"\u0155\3\2\2\2$\u015b"+
-		"\3\2\2\2&\u0162\3\2\2\2(\u016a\3\2\2\2*\u0174\3\2\2\2,\u017b\3\2\2\2."+
-		"\u0183\3\2\2\2\60\u018b\3\2\2\2\62\u0192\3\2\2\2\64\u0199\3\2\2\2\66\u019f"+
-		"\3\2\2\28\u01a7\3\2\2\2:\u01ac\3\2\2\2<\u01ae\3\2\2\2>\u01b0\3\2\2\2@"+
-		"\u01b2\3\2\2\2B\u01b4\3\2\2\2D\u01b6\3\2\2\2F\u01b8\3\2\2\2H\u01ba\3\2"+
-		"\2\2J\u01bc\3\2\2\2L\u01be\3\2\2\2N\u01c0\3\2\2\2P\u01c2\3\2\2\2R\u01c4"+
-		"\3\2\2\2T\u01c6\3\2\2\2V\u01c8\3\2\2\2X\u01ca\3\2\2\2Z\u01cc\3\2\2\2\\"+
-		"\u01ce\3\2\2\2^\u01d0\3\2\2\2`\u01d2\3\2\2\2b\u01d4\3\2\2\2d\u01d6\3\2"+
-		"\2\2f\u01d8\3\2\2\2h\u01da\3\2\2\2j\u01dd\3\2\2\2l\u01e3\3\2\2\2n\u01e9"+
-		"\3\2\2\2p\u01eb\3\2\2\2r\u01ed\3\2\2\2t\u01ef\3\2\2\2v\u01fd\3\2\2\2x"+
-		"\u020c\3\2\2\2z\u0215\3\2\2\2|\u021c\3\2\2\2~\u021f\3\2\2\2\u0080\u0234"+
-		"\3\2\2\2\u0082\u0236\3\2\2\2\u0084\u0238\3\2\2\2\u0086\u0243\3\2\2\2\u0088"+
-		"\u0245\3\2\2\2\u008a\u024c\3\2\2\2\u008c\u0256\3\2\2\2\u008e\u0260\3\2"+
-		"\2\2\u0090\u026c\3\2\2\2\u0092\u026e\3\2\2\2\u0094\u0270\3\2\2\2\u0096"+
-		"\u0274\3\2\2\2\u0098\u0276\3\2\2\2\u009a\u0278\3\2\2\2\u009c\u027b\3\2"+
-		"\2\2\u009e\u027d\3\2\2\2\u00a0\u027f\3\2\2\2\u00a2\u0281\3\2\2\2\u00a4"+
-		"\u0283\3\2\2\2\u00a6\u0285\3\2\2\2\u00a8\u0287\3\2\2\2\u00aa\u0289\3\2"+
-		"\2\2\u00ac\u028b\3\2\2\2\u00ae\u028e\3\2\2\2\u00b0\u0290\3\2\2\2\u00b2"+
-		"\u0292\3\2\2\2\u00b4\u0294\3\2\2\2\u00b6\u0296\3\2\2\2\u00b8\u0298\3\2"+
-		"\2\2\u00ba\u029a\3\2\2\2\u00bc\u029d\3\2\2\2\u00be\u029f\3\2\2\2\u00c0"+
-		"\u02a1\3\2\2\2\u00c2\u02a3\3\2\2\2\u00c4\u02a5\3\2\2\2\u00c6\u02a7\3\2"+
-		"\2\2\u00c8\u02a9\3\2\2\2\u00ca\u02ac\3\2\2\2\u00cc\u02ae\3\2\2\2\u00ce"+
-		"\u02b0\3\2\2\2\u00d0\u02b2\3\2\2\2\u00d2\u02b7\3\2\2\2\u00d4\u02bb\3\2"+
-		"\2\2\u00d6\u02bf\3\2\2\2\u00d8\u02c3\3\2\2\2\u00da\u02c6\3\2\2\2\u00dc"+
-		"\u02ca\3\2\2\2\u00de\u02cc\3\2\2\2\u00e0\u02d1\3\2\2\2\u00e2\u02d5\3\2"+
-		"\2\2\u00e4\u02d9\3\2\2\2\u00e6\u02dd\3\2\2\2\u00e8\u02e1\3\2\2\2\u00ea"+
-		"\u02e5\3\2\2\2\u00ec\u02e9\3\2\2\2\u00ee\u02ec\3\2\2\2\u00f0\u02f0\3\2"+
-		"\2\2\u00f2\u02f4\3\2\2\2\u00f4\u02fa\3\2\2\2\u00f6\u02fe\3\2\2\2\u00f8"+
-		"\u0302\3\2\2\2\u00fa\u00fb\5v:\2\u00fb\u00fc\3\2\2\2\u00fc\u00fd\b\2\2"+
-		"\2\u00fd\7\3\2\2\2\u00fe\u00ff\5t9\2\u00ff\u0100\3\2\2\2\u0100\u0101\b"+
-		"\3\2\2\u0101\t\3\2\2\2\u0102\u0103\5x;\2\u0103\u0104\3\2\2\2\u0104\u0105"+
-		"\b\4\2\2\u0105\13\3\2\2\2\u0106\u0107\5\u0080?\2\u0107\r\3\2\2\2\u0108"+
-		"\u0109\5\u008aD\2\u0109\17\3\2\2\2\u010a\u010b\5\u008eF\2\u010b\21\3\2"+
-		"\2\2\u010c\u010d\5\u00a8S\2\u010d\u010e\b\b\3\2\u010e\23\3\2\2\2\u010f"+
-		"\u0110\5\u00a4Q\2\u0110\u0111\3\2\2\2\u0111\u0112\b\t\4\2\u0112\25\3\2"+
-		"\2\2\u0113\u0114\7q\2\2\u0114\u0115\7r\2\2\u0115\u0116\7v\2\2\u0116\u0117"+
-		"\7k\2\2\u0117\u0118\7q\2\2\u0118\u0119\7p\2\2\u0119\u011a\7u\2\2\u011a"+
-		"\u011e\3\2\2\2\u011b\u011d\5\34\r\2\u011c\u011b\3\2\2\2\u011d\u0120\3"+
-		"\2\2\2\u011e\u011c\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u0121\3\2\2\2\u0120"+
-		"\u011e\3\2\2\2\u0121\u0122\7}\2\2\u0122\27\3\2\2\2\u0123\u0124\7v\2\2"+
-		"\u0124\u0125\7q\2\2\u0125\u0126\7m\2\2\u0126\u0127\7g\2\2\u0127\u0128"+
-		"\7p\2\2\u0128\u0129\7u\2\2\u0129\u012d\3\2\2\2\u012a\u012c\5\34\r\2\u012b"+
-		"\u012a\3\2\2\2\u012c\u012f\3\2\2\2\u012d\u012b\3\2\2\2\u012d\u012e\3\2"+
-		"\2\2\u012e\u0130\3\2\2\2\u012f\u012d\3\2\2\2\u0130\u0131\7}\2\2\u0131"+
-		"\31\3\2\2\2\u0132\u0133\7e\2\2\u0133\u0134\7j\2\2\u0134\u0135\7c\2\2\u0135"+
-		"\u0136\7p\2\2\u0136\u0137\7p\2\2\u0137\u0138\7g\2\2\u0138\u0139\7n\2\2"+
-		"\u0139\u013a\7u\2\2\u013a\u013e\3\2\2\2\u013b\u013d\5\34\r\2\u013c\u013b"+
-		"\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013f\3\2\2\2\u013f"+
-		"\u0141\3\2\2\2\u0140\u013e\3\2\2\2\u0141\u0142\7}\2\2\u0142\33\3\2\2\2"+
-		"\u0143\u0144\t\2\2\2\u0144\35\3\2\2\2\u0145\u0146\7k\2\2\u0146\u0147\7"+
-		"o\2\2\u0147\u0148\7r\2\2\u0148\u0149\7q\2\2\u0149\u014a\7t\2\2\u014a\u014b"+
-		"\7v\2\2\u014b\37\3\2\2\2\u014c\u014d\7h\2\2\u014d\u014e\7t\2\2\u014e\u014f"+
-		"\7c\2\2\u014f\u0150\7i\2\2\u0150\u0151\7o\2\2\u0151\u0152\7g\2\2\u0152"+
-		"\u0153\7p\2\2\u0153\u0154\7v\2\2\u0154!\3\2\2\2\u0155\u0156\7n\2\2\u0156"+
-		"\u0157\7g\2\2\u0157\u0158\7z\2\2\u0158\u0159\7g\2\2\u0159\u015a\7t\2\2"+
-		"\u015a#\3\2\2\2\u015b\u015c\7r\2\2\u015c\u015d\7c\2\2\u015d\u015e\7t\2"+
-		"\2\u015e\u015f\7u\2\2\u015f\u0160\7g\2\2\u0160\u0161\7t\2\2\u0161%\3\2"+
-		"\2\2\u0162\u0163\7i\2\2\u0163\u0164\7t\2\2\u0164\u0165\7c\2\2\u0165\u0166"+
-		"\7o\2\2\u0166\u0167\7o\2\2\u0167\u0168\7c\2\2\u0168\u0169\7t\2\2\u0169"+
-		"\'\3\2\2\2\u016a\u016b\7r\2\2\u016b\u016c\7t\2\2\u016c\u016d\7q\2\2\u016d"+
-		"\u016e\7v\2\2\u016e\u016f\7g\2\2\u016f\u0170\7e\2\2\u0170\u0171\7v\2\2"+
-		"\u0171\u0172\7g\2\2\u0172\u0173\7f\2\2\u0173)\3\2\2\2\u0174\u0175\7r\2"+
-		"\2\u0175\u0176\7w\2\2\u0176\u0177\7d\2\2\u0177\u0178\7n\2\2\u0178\u0179"+
-		"\7k\2\2\u0179\u017a\7e\2\2\u017a+\3\2\2\2\u017b\u017c\7r\2\2\u017c\u017d"+
-		"\7t\2\2\u017d\u017e\7k\2\2\u017e\u017f\7x\2\2\u017f\u0180\7c\2\2\u0180"+
-		"\u0181\7v\2\2\u0181\u0182\7g\2\2\u0182-\3\2\2\2\u0183\u0184\7t\2\2\u0184"+
-		"\u0185\7g\2\2\u0185\u0186\7v\2\2\u0186\u0187\7w\2\2\u0187\u0188\7t\2\2"+
-		"\u0188\u0189\7p\2\2\u0189\u018a\7u\2\2\u018a/\3\2\2\2\u018b\u018c\7n\2"+
-		"\2\u018c\u018d\7q\2\2\u018d\u018e\7e\2\2\u018e\u018f\7c\2\2\u018f\u0190"+
-		"\7n\2\2\u0190\u0191\7u\2\2\u0191\61\3\2\2\2\u0192\u0193\7v\2\2\u0193\u0194"+
-		"\7j\2\2\u0194\u0195\7t\2\2\u0195\u0196\7q\2\2\u0196\u0197\7y\2\2\u0197"+
-		"\u0198\7u\2\2\u0198\63\3\2\2\2\u0199\u019a\7e\2\2\u019a\u019b\7c\2\2\u019b"+
-		"\u019c\7v\2\2\u019c\u019d\7e\2\2\u019d\u019e\7j\2\2\u019e\65\3\2\2\2\u019f"+
-		"\u01a0\7h\2\2\u01a0\u01a1\7k\2\2\u01a1\u01a2\7p\2\2\u01a2\u01a3\7c\2\2"+
-		"\u01a3\u01a4\7n\2\2\u01a4\u01a5\7n\2\2\u01a5\u01a6\7{\2\2\u01a6\67\3\2"+
-		"\2\2\u01a7\u01a8\7o\2\2\u01a8\u01a9\7q\2\2\u01a9\u01aa\7f\2\2\u01aa\u01ab"+
-		"\7g\2\2\u01ab9\3\2\2\2\u01ac\u01ad\5\u0098K\2\u01ad;\3\2\2\2\u01ae\u01af"+
-		"\5\u009aL\2\u01af=\3\2\2\2\u01b0\u01b1\5\u00c2`\2\u01b1?\3\2\2\2\u01b2"+
-		"\u01b3\5\u00c4a\2\u01b3A\3\2\2\2\u01b4\u01b5\5\u00a0O\2\u01b5C\3\2\2\2"+
-		"\u01b6\u01b7\5\u00a2P\2\u01b7E\3\2\2\2\u01b8\u01b9\5\u00a4Q\2\u01b9G\3"+
-		"\2\2\2\u01ba\u01bb\5\u00a6R\2\u01bbI\3\2\2\2\u01bc\u01bd\5\u00acU\2\u01bd"+
-		"K\3\2\2\2\u01be\u01bf\5\u00aeV\2\u01bfM\3\2\2\2\u01c0\u01c1\5\u00b0W\2"+
-		"\u01c1O\3\2\2\2\u01c2\u01c3\5\u00b2X\2\u01c3Q\3\2\2\2\u01c4\u01c5\5\u00b4"+
-		"Y\2\u01c5S\3\2\2\2\u01c6\u01c7\5\u00b6Z\2\u01c7U\3\2\2\2\u01c8\u01c9\5"+
-		"\u00ba\\\2\u01c9W\3\2\2\2\u01ca\u01cb\5\u00b8[\2\u01cbY\3\2\2\2\u01cc"+
-		"\u01cd\5\u00be^\2\u01cd[\3\2\2\2\u01ce\u01cf\5\u00c0_\2\u01cf]\3\2\2\2"+
-		"\u01d0\u01d1\5\u00c8c\2\u01d1_\3\2\2\2\u01d2\u01d3\5\u00c6b\2\u01d3a\3"+
-		"\2\2\2\u01d4\u01d5\5\u00cad\2\u01d5c\3\2\2\2\u01d6\u01d7\5\u00cce\2\u01d7"+
-		"e\3\2\2\2\u01d8\u01d9\5\u00cef\2\u01d9g\3\2\2\2\u01da\u01db\5\u00f8{\2"+
-		"\u01dbi\3\2\2\2\u01dc\u01de\5n\66\2\u01dd\u01dc\3\2\2\2\u01de\u01df\3"+
-		"\2\2\2\u01df\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1"+
-		"\u01e2\b\64\5\2\u01e2k\3\2\2\2\u01e3\u01e4\13\2\2\2\u01e4\u01e5\3\2\2"+
-		"\2\u01e5\u01e6\b\65\6\2\u01e6m\3\2\2\2\u01e7\u01ea\5p\67\2\u01e8\u01ea"+
-		"\5r8\2\u01e9\u01e7\3\2\2\2\u01e9\u01e8\3\2\2\2\u01eao\3\2\2\2\u01eb\u01ec"+
-		"\t\3\2\2\u01ecq\3\2\2\2\u01ed\u01ee\t\4\2\2\u01ees\3\2\2\2\u01ef\u01f0"+
-		"\7\61\2\2\u01f0\u01f1\7,\2\2\u01f1\u01f5\3\2\2\2\u01f2\u01f4\13\2\2\2"+
-		"\u01f3\u01f2\3\2\2\2\u01f4\u01f7\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f5\u01f3"+
-		"\3\2\2\2\u01f6\u01fb\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f8\u01f9\7,\2\2\u01f9"+
-		"\u01fc\7\61\2\2\u01fa\u01fc\7\2\2\3\u01fb\u01f8\3\2\2\2\u01fb\u01fa\3"+
-		"\2\2\2\u01fcu\3\2\2\2\u01fd\u01fe\7\61\2\2\u01fe\u01ff\7,\2\2\u01ff\u0200"+
-		"\7,\2\2\u0200\u0204\3\2\2\2\u0201\u0203\13\2\2\2\u0202\u0201\3\2\2\2\u0203"+
-		"\u0206\3\2\2\2\u0204\u0205\3\2\2\2\u0204\u0202\3\2\2\2\u0205\u020a\3\2"+
-		"\2\2\u0206\u0204\3\2\2\2\u0207\u0208\7,\2\2\u0208\u020b\7\61\2\2\u0209"+
-		"\u020b\7\2\2\3\u020a\u0207\3\2\2\2\u020a\u0209\3\2\2\2\u020bw\3\2\2\2"+
-		"\u020c\u020d\7\61\2\2\u020d\u020e\7\61\2\2\u020e\u0212\3\2\2\2\u020f\u0211"+
-		"\n\5\2\2\u0210\u020f\3\2\2\2\u0211\u0214\3\2\2\2\u0212\u0210\3\2\2\2\u0212"+
-		"\u0213\3\2\2\2\u0213y\3\2\2\2\u0214\u0212\3\2\2\2\u0215\u021a\5\u0096"+
-		"J\2\u0216\u021b\t\6\2\2\u0217\u021b\5~>\2\u0218\u021b\13\2\2\2\u0219\u021b"+
-		"\7\2\2\3\u021a\u0216\3\2\2\2\u021a\u0217\3\2\2\2\u021a\u0218\3\2\2\2\u021a"+
-		"\u0219\3\2\2\2\u021b{\3\2\2\2\u021c\u021d\5\u0096J\2\u021d\u021e\13\2"+
-		"\2\2\u021e}\3\2\2\2\u021f\u022a\7w\2\2\u0220\u0228\5\u0082@\2\u0221\u0226"+
-		"\5\u0082@\2\u0222\u0224\5\u0082@\2\u0223\u0225\5\u0082@\2\u0224\u0223"+
-		"\3\2\2\2\u0224\u0225\3\2\2\2\u0225\u0227\3\2\2\2\u0226\u0222\3\2\2\2\u0226"+
-		"\u0227\3\2\2\2\u0227\u0229\3\2\2\2\u0228\u0221\3\2\2\2\u0228\u0229\3\2"+
-		"\2\2\u0229\u022b\3\2\2\2\u022a\u0220\3\2\2\2\u022a\u022b\3\2\2\2\u022b"+
-		"\177\3\2\2\2\u022c\u0235\7\62\2\2\u022d\u0231\t\7\2\2\u022e\u0230\5\u0084"+
-		"A\2\u022f\u022e\3\2\2\2\u0230\u0233\3\2\2\2\u0231\u022f\3\2\2\2\u0231"+
-		"\u0232\3\2\2\2\u0232\u0235\3\2\2\2\u0233\u0231\3\2\2\2\u0234\u022c\3\2"+
-		"\2\2\u0234\u022d\3\2\2\2\u0235\u0081\3\2\2\2\u0236\u0237\t\b\2\2\u0237"+
-		"\u0083\3\2\2\2\u0238\u0239\t\t\2\2\u0239\u0085\3\2\2\2\u023a\u023b\7v"+
-		"\2\2\u023b\u023c\7t\2\2\u023c\u023d\7w\2\2\u023d\u0244\7g\2\2\u023e\u023f"+
-		"\7h\2\2\u023f\u0240\7c\2\2\u0240\u0241\7n\2\2\u0241\u0242\7u\2\2\u0242"+
-		"\u0244\7g\2\2\u0243\u023a\3\2\2\2\u0243\u023e\3\2\2\2\u0244\u0087\3\2"+
-		"\2\2\u0245\u0248\5\u009cM\2\u0246\u0249\5z<\2\u0247\u0249\n\n\2\2\u0248"+
-		"\u0246\3\2\2\2\u0248\u0247\3\2\2\2\u0249\u024a\3\2\2\2\u024a\u024b\5\u009c"+
-		"M\2\u024b\u0089\3\2\2\2\u024c\u0251\5\u009cM\2\u024d\u0250\5z<\2\u024e"+
-		"\u0250\n\n\2\2\u024f\u024d\3\2\2\2\u024f\u024e\3\2\2\2\u0250\u0253\3\2"+
-		"\2\2\u0251\u024f\3\2\2\2\u0251\u0252\3\2\2\2\u0252\u0254\3\2\2\2\u0253"+
-		"\u0251\3\2\2\2\u0254\u0255\5\u009cM\2\u0255\u008b\3\2\2\2\u0256\u025b"+
-		"\5\u009eN\2\u0257\u025a\5z<\2\u0258\u025a\n\13\2\2\u0259\u0257\3\2\2\2"+
-		"\u0259\u0258\3\2\2\2\u025a\u025d\3\2\2\2\u025b\u0259\3\2\2\2\u025b\u025c"+
-		"\3\2\2\2\u025c\u025e\3\2\2\2\u025d\u025b\3\2\2\2\u025e\u025f\5\u009eN"+
-		"\2\u025f\u008d\3\2\2\2\u0260\u0265\5\u009cM\2\u0261\u0264\5z<\2\u0262"+
-		"\u0264\n\n\2\2\u0263\u0261\3\2\2\2\u0263\u0262\3\2\2\2\u0264\u0267\3\2"+
-		"\2\2\u0265\u0263\3\2\2\2\u0265\u0266\3\2\2\2\u0266\u008f\3\2\2\2\u0267"+
-		"\u0265\3\2\2\2\u0268\u026d\5\u0092H\2\u0269\u026d\4\62;\2\u026a\u026d"+
-		"\5\u00bc]\2\u026b\u026d\t\f\2\2\u026c\u0268\3\2\2\2\u026c\u0269\3\2\2"+
-		"\2\u026c\u026a\3\2\2\2\u026c\u026b\3\2\2\2\u026d\u0091\3\2\2\2\u026e\u026f"+
-		"\t\r\2\2\u026f\u0093\3\2\2\2\u0270\u0271\7k\2\2\u0271\u0272\7p\2\2\u0272"+
-		"\u0273\7v\2\2\u0273\u0095\3\2\2\2\u0274\u0275\7^\2\2\u0275\u0097\3\2\2"+
-		"\2\u0276\u0277\7<\2\2\u0277\u0099\3\2\2\2\u0278\u0279\7<\2\2\u0279\u027a"+
-		"\7<\2\2\u027a\u009b\3\2\2\2\u027b\u027c\7)\2\2\u027c\u009d\3\2\2\2\u027d"+
-		"\u027e\7$\2\2\u027e\u009f\3\2\2\2\u027f\u0280\7*\2\2\u0280\u00a1\3\2\2"+
-		"\2\u0281\u0282\7+\2\2\u0282\u00a3\3\2\2\2\u0283\u0284\7}\2\2\u0284\u00a5"+
-		"\3\2\2\2\u0285\u0286\7\177\2\2\u0286\u00a7\3\2\2\2\u0287\u0288\7]\2\2"+
-		"\u0288\u00a9\3\2\2\2\u0289\u028a\7_\2\2\u028a\u00ab\3\2\2\2\u028b\u028c"+
-		"\7/\2\2\u028c\u028d\7@\2\2\u028d\u00ad\3\2\2\2\u028e\u028f\7>\2\2\u028f"+
-		"\u00af\3\2\2\2\u0290\u0291\7@\2\2\u0291\u00b1\3\2\2\2\u0292\u0293\7?\2"+
-		"\2\u0293\u00b3\3\2\2\2\u0294\u0295\7A\2\2\u0295\u00b5\3\2\2\2\u0296\u0297"+
-		"\7,\2\2\u0297\u00b7\3\2\2\2\u0298\u0299\7-\2\2\u0299\u00b9\3\2\2\2\u029a"+
-		"\u029b\7-\2\2\u029b\u029c\7?\2\2\u029c\u00bb\3\2\2\2\u029d\u029e\7a\2"+
-		"\2\u029e\u00bd\3\2\2\2\u029f\u02a0\7~\2\2\u02a0\u00bf\3\2\2\2\u02a1\u02a2"+
-		"\7&\2\2\u02a2\u00c1\3\2\2\2\u02a3\u02a4\7.\2\2\u02a4\u00c3\3\2\2\2\u02a5"+
-		"\u02a6\7=\2\2\u02a6\u00c5\3\2\2\2\u02a7\u02a8\7\60\2\2\u02a8\u00c7\3\2"+
-		"\2\2\u02a9\u02aa\7\60\2\2\u02aa\u02ab\7\60\2\2\u02ab\u00c9\3\2\2\2\u02ac"+
-		"\u02ad\7B\2\2\u02ad\u00cb\3\2\2\2\u02ae\u02af\7%\2\2\u02af\u00cd\3\2\2"+
-		"\2\u02b0\u02b1\7\u0080\2\2\u02b1\u00cf\3\2\2\2\u02b2\u02b3\5\u00a8S\2"+
-		"\u02b3\u02b4\3\2\2\2\u02b4\u02b5\bg\7\2\u02b5\u02b6\bg\b\2\u02b6\u00d1"+
-		"\3\2\2\2\u02b7\u02b8\5|=\2\u02b8\u02b9\3\2\2\2\u02b9\u02ba\bh\7\2\u02ba"+
-		"\u00d3\3\2\2\2\u02bb\u02bc\5\u008cE\2\u02bc\u02bd\3\2\2\2\u02bd\u02be"+
-		"\bi\7\2\u02be\u00d5\3\2\2\2\u02bf\u02c0\5\u008aD\2\u02c0\u02c1\3\2\2\2"+
-		"\u02c1\u02c2\bj\7\2\u02c2\u00d7\3\2\2\2\u02c3\u02c4\5\u00aaT\2\u02c4\u02c5"+
-		"\bk\t\2\u02c5\u00d9\3\2\2\2\u02c6\u02c7\7\2\2\3\u02c7\u02c8\3\2\2\2\u02c8"+
-		"\u02c9\bl\n\2\u02c9\u00db\3\2\2\2\u02ca\u02cb\13\2\2\2\u02cb\u00dd\3\2"+
-		"\2\2\u02cc\u02cd\5\u00a4Q\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf\bn\13\2\u02cf"+
-		"\u02d0\bn\4\2\u02d0\u00df\3\2\2\2\u02d1\u02d2\5|=\2\u02d2\u02d3\3\2\2"+
-		"\2\u02d3\u02d4\bo\13\2\u02d4\u00e1\3\2\2\2\u02d5\u02d6\5\u008cE\2\u02d6"+
-		"\u02d7\3\2\2\2\u02d7\u02d8\bp\13\2\u02d8\u00e3\3\2\2\2\u02d9\u02da\5\u008a"+
-		"D\2\u02da\u02db\3\2\2\2\u02db\u02dc\bq\13\2\u02dc\u00e5\3\2\2\2\u02dd"+
-		"\u02de\5v:\2\u02de\u02df\3\2\2\2\u02df\u02e0\br\13\2\u02e0\u00e7\3\2\2"+
-		"\2\u02e1\u02e2\5t9\2\u02e2\u02e3\3\2\2\2\u02e3\u02e4\bs\13\2\u02e4\u00e9"+
-		"\3\2\2\2\u02e5\u02e6\5x;\2\u02e6\u02e7\3\2\2\2\u02e7\u02e8\bt\13\2\u02e8"+
-		"\u00eb\3\2\2\2\u02e9\u02ea\5\u00a6R\2\u02ea\u02eb\bu\f\2\u02eb\u00ed\3"+
-		"\2\2\2\u02ec\u02ed\7\2\2\3\u02ed\u02ee\3\2\2\2\u02ee\u02ef\bv\n\2\u02ef"+
-		"\u00ef\3\2\2\2\u02f0\u02f1\13\2\2\2\u02f1\u00f1\3\2\2\2\u02f2\u02f5\n"+
-		"\16\2\2\u02f3\u02f5\5|=\2\u02f4\u02f2\3\2\2\2\u02f4\u02f3\3\2\2\2\u02f5"+
-		"\u02f6\3\2\2\2\u02f6\u02f4\3\2\2\2\u02f6\u02f7\3\2\2\2\u02f7\u02f8\3\2"+
-		"\2\2\u02f8\u02f9\bx\r\2\u02f9\u00f3\3\2\2\2\u02fa\u02fb\5\u00aaT\2\u02fb"+
-		"\u02fc\3\2\2\2\u02fc\u02fd\by\n\2\u02fd\u00f5\3\2\2\2\u02fe\u02ff\7\2"+
-		"\2\3\u02ff\u0300\3\2\2\2\u0300\u0301\bz\n\2\u0301\u00f7\3\2\2\2\u0302"+
-		"\u0306\5\u0092H\2\u0303\u0305\5\u0090G\2\u0304\u0303\3\2\2\2\u0305\u0308"+
-		"\3\2\2\2\u0306\u0304\3\2\2\2\u0306\u0307\3\2\2\2\u0307\u00f9\3\2\2\2\u0308"+
-		"\u0306\3\2\2\2#\2\3\4\5\u011e\u012d\u013e\u01df\u01e9\u01f5\u01fb\u0204"+
-		"\u020a\u0212\u021a\u0224\u0226\u0228\u022a\u0231\u0234\u0243\u0248\u024f"+
-		"\u0251\u0259\u025b\u0263\u0265\u026c\u02f4\u02f6\u0306\16\2\5\2\3\b\2"+
-		"\7\4\2\2\4\2\2\3\2\t;\2\7\3\2\3k\3\6\2\2\t>\2\3u\4\5\2\2";
+		"\u0004\u0000=\u0307\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+
+		"\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
+		"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
+		"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
+		"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
+		"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
+		"\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
+		"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
+		"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
+		"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
+		"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
+		"#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
+		"(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+
+		"-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+
+		"2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+
+		"7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+
+		"<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+
+		"A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+
+		"F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+
+		"K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+
+		"P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+
+		"U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+
+		"Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+
+		"_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+
+		"d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+
+		"i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+
+		"n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+
+		"s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+
+		"x\u0007x\u0002y\u0007y\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
+		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
+		"\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+
+		"\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+
+		"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
+		"\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u011b\b\b\n\b\f\b\u011e\t\b"+
+		"\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+
+		"\t\u0001\t\u0005\t\u012a\b\t\n\t\f\t\u012d\t\t\u0001\t\u0001\t\u0001\n"+
+		"\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
+		"\n\u0005\n\u013b\b\n\n\n\f\n\u013e\t\n\u0001\n\u0001\n\u0001\u000b\u0001"+
+		"\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r"+
+		"\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+
+		"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+		"\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
+		"\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
+		"\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
+		"\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
+		"\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
+		"\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+
+		"\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001"+
+		"\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
+		"\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+
+		"\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
+		"\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
+		"\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
+		"\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+
+		"\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+
+		"\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001"+
+		"\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001"+
+		"\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001\'\u0001"+
+		"\'\u0001(\u0001(\u0001)\u0001)\u0001*\u0001*\u0001+\u0001+\u0001,\u0001"+
+		",\u0001-\u0001-\u0001.\u0001.\u0001/\u0001/\u00010\u00010\u00011\u0001"+
+		"1\u00012\u00042\u01dc\b2\u000b2\f2\u01dd\u00012\u00012\u00013\u00013\u0001"+
+		"3\u00013\u00014\u00014\u00034\u01e8\b4\u00015\u00015\u00016\u00016\u0001"+
+		"7\u00017\u00017\u00017\u00057\u01f2\b7\n7\f7\u01f5\t7\u00017\u00017\u0001"+
+		"7\u00037\u01fa\b7\u00018\u00018\u00018\u00018\u00018\u00058\u0201\b8\n"+
+		"8\f8\u0204\t8\u00018\u00018\u00018\u00038\u0209\b8\u00019\u00019\u0001"+
+		"9\u00019\u00059\u020f\b9\n9\f9\u0212\t9\u0001:\u0001:\u0001:\u0001:\u0001"+
+		":\u0003:\u0219\b:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001"+
+		"<\u0003<\u0223\b<\u0003<\u0225\b<\u0003<\u0227\b<\u0003<\u0229\b<\u0001"+
+		"=\u0001=\u0001=\u0005=\u022e\b=\n=\f=\u0231\t=\u0003=\u0233\b=\u0001>"+
+		"\u0001>\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+
+		"@\u0001@\u0001@\u0003@\u0242\b@\u0001A\u0001A\u0001A\u0003A\u0247\bA\u0001"+
+		"A\u0001A\u0001B\u0001B\u0001B\u0005B\u024e\bB\nB\fB\u0251\tB\u0001B\u0001"+
+		"B\u0001C\u0001C\u0001C\u0005C\u0258\bC\nC\fC\u025b\tC\u0001C\u0001C\u0001"+
+		"D\u0001D\u0001D\u0005D\u0262\bD\nD\fD\u0265\tD\u0001E\u0001E\u0001E\u0001"+
+		"E\u0003E\u026b\bE\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001"+
+		"H\u0001I\u0001I\u0001J\u0001J\u0001J\u0001K\u0001K\u0001L\u0001L\u0001"+
+		"M\u0001M\u0001N\u0001N\u0001O\u0001O\u0001P\u0001P\u0001Q\u0001Q\u0001"+
+		"R\u0001R\u0001S\u0001S\u0001S\u0001T\u0001T\u0001U\u0001U\u0001V\u0001"+
+		"V\u0001W\u0001W\u0001X\u0001X\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001"+
+		"[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001^\u0001^\u0001_\u0001_\u0001"+
+		"`\u0001`\u0001a\u0001a\u0001a\u0001b\u0001b\u0001c\u0001c\u0001d\u0001"+
+		"d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001"+
+		"g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001h\u0001i\u0001i\u0001"+
+		"i\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001l\u0001l\u0001l\u0001"+
+		"l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0001"+
+		"o\u0001o\u0001o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001q\u0001q\u0001"+
+		"q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001s\u0001t\u0001"+
+		"t\u0001t\u0001t\u0001u\u0001u\u0001v\u0001v\u0004v\u02f3\bv\u000bv\fv"+
+		"\u02f4\u0001v\u0001v\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x"+
+		"\u0001x\u0001y\u0001y\u0005y\u0303\by\ny\fy\u0306\ty\u0002\u01f3\u0202"+
+		"\u0000z\u0004\u0004\u0006\u0005\b\u0006\n\u0007\f\b\u000e\t\u0010\n\u0012"+
+		"\u000b\u0014\f\u0016\r\u0018\u000e\u001a\u0000\u001c\u000f\u001e\u0010"+
+		" \u0011\"\u0012$\u0013&\u0014(\u0015*\u0016,\u0017.\u00180\u00192\u001a"+
+		"4\u001b6\u001c8\u001d:\u001e<\u001f> @!B\"D#F$H%J&L\'N(P)R*T+V,X-Z.\\"+
+		"/^0`1b2d3f4h5j6l\u0000n\u0000p\u0000r\u0000t\u0000v\u0000x\u0000z\u0000"+
+		"|\u0000~\u0000\u0080\u0000\u0082\u0000\u0084\u0000\u0086\u0000\u0088\u0000"+
+		"\u008a\u0000\u008c\u0000\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000"+
+		"\u0096\u0000\u0098\u0000\u009a\u0000\u009c\u0000\u009e\u0000\u00a0\u0000"+
+		"\u00a2\u0000\u00a4\u0000\u00a6\u0000\u00a8\u0000\u00aa\u0000\u00ac\u0000"+
+		"\u00ae\u0000\u00b0\u0000\u00b2\u0000\u00b4\u0000\u00b6\u0000\u00b8\u0000"+
+		"\u00ba\u0000\u00bc\u0000\u00be\u0000\u00c0\u0000\u00c2\u0000\u00c4\u0000"+
+		"\u00c6\u0000\u00c8\u0000\u00ca\u0000\u00cc\u0000\u00ce\u0000\u00d0\u0000"+
+		"\u00d2\u0000\u00d4\u0000\u00d67\u00d88\u00da9\u00dc\u0000\u00de\u0000"+
+		"\u00e0\u0000\u00e2\u0000\u00e4\u0000\u00e6\u0000\u00e8\u0000\u00ea:\u00ec"+
+		";\u00ee<\u00f0\u0000\u00f2\u0003\u00f4=\u00f6\u0000\u0004\u0000\u0001"+
+		"\u0002\u0003\r\u0003\u0000\t\n\f\r  \u0002\u0000\t\t  \u0002\u0000\n\n"+
+		"\f\r\u0002\u0000\n\n\r\r\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0001\u000019\u0003"+
+		"\u000009AFaf\u0001\u000009\u0004\u0000\n\n\r\r\'\'\\\\\u0004\u0000\n\n"+
+		"\r\r\"\"\\\\\u0003\u0000\u00b7\u00b7\u0300\u036f\u203f\u2040\r\u0000A"+
+		"Zaz\u00c0\u00d6\u00d8\u00f6\u00f8\u02ff\u0370\u037d\u037f\u1fff\u200c"+
+		"\u200d\u2070\u218f\u2c00\u2fef\u3001\u8000\ud7ff\u8000\uf900\u8000\ufdcf"+
+		"\u8000\ufdf0\u8000\ufffd\u0001\u0000\\]\u02f1\u0000\u0004\u0001\u0000"+
+		"\u0000\u0000\u0000\u0006\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000"+
+		"\u0000\u0000\n\u0001\u0000\u0000\u0000\u0000\f\u0001\u0000\u0000\u0000"+
+		"\u0000\u000e\u0001\u0000\u0000\u0000\u0000\u0010\u0001\u0000\u0000\u0000"+
+		"\u0000\u0012\u0001\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000"+
+		"\u0000\u0016\u0001\u0000\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000"+
+		"\u0000\u001c\u0001\u0000\u0000\u0000\u0000\u001e\u0001\u0000\u0000\u0000"+
+		"\u0000 \u0001\u0000\u0000\u0000\u0000\"\u0001\u0000\u0000\u0000\u0000"+
+		"$\u0001\u0000\u0000\u0000\u0000&\u0001\u0000\u0000\u0000\u0000(\u0001"+
+		"\u0000\u0000\u0000\u0000*\u0001\u0000\u0000\u0000\u0000,\u0001\u0000\u0000"+
+		"\u0000\u0000.\u0001\u0000\u0000\u0000\u00000\u0001\u0000\u0000\u0000\u0000"+
+		"2\u0001\u0000\u0000\u0000\u00004\u0001\u0000\u0000\u0000\u00006\u0001"+
+		"\u0000\u0000\u0000\u00008\u0001\u0000\u0000\u0000\u0000:\u0001\u0000\u0000"+
+		"\u0000\u0000<\u0001\u0000\u0000\u0000\u0000>\u0001\u0000\u0000\u0000\u0000"+
+		"@\u0001\u0000\u0000\u0000\u0000B\u0001\u0000\u0000\u0000\u0000D\u0001"+
+		"\u0000\u0000\u0000\u0000F\u0001\u0000\u0000\u0000\u0000H\u0001\u0000\u0000"+
+		"\u0000\u0000J\u0001\u0000\u0000\u0000\u0000L\u0001\u0000\u0000\u0000\u0000"+
+		"N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000\u0000\u0000R\u0001"+
+		"\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000V\u0001\u0000\u0000"+
+		"\u0000\u0000X\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000\u0000\u0000\u0000"+
+		"\\\u0001\u0000\u0000\u0000\u0000^\u0001\u0000\u0000\u0000\u0000`\u0001"+
+		"\u0000\u0000\u0000\u0000b\u0001\u0000\u0000\u0000\u0000d\u0001\u0000\u0000"+
+		"\u0000\u0000f\u0001\u0000\u0000\u0000\u0000h\u0001\u0000\u0000\u0000\u0000"+
+		"j\u0001\u0000\u0000\u0000\u0001\u00ce\u0001\u0000\u0000\u0000\u0001\u00d0"+
+		"\u0001\u0000\u0000\u0000\u0001\u00d2\u0001\u0000\u0000\u0000\u0001\u00d4"+
+		"\u0001\u0000\u0000\u0000\u0001\u00d6\u0001\u0000\u0000\u0000\u0001\u00d8"+
+		"\u0001\u0000\u0000\u0000\u0001\u00da\u0001\u0000\u0000\u0000\u0002\u00dc"+
+		"\u0001\u0000\u0000\u0000\u0002\u00de\u0001\u0000\u0000\u0000\u0002\u00e0"+
+		"\u0001\u0000\u0000\u0000\u0002\u00e2\u0001\u0000\u0000\u0000\u0002\u00e4"+
+		"\u0001\u0000\u0000\u0000\u0002\u00e6\u0001\u0000\u0000\u0000\u0002\u00e8"+
+		"\u0001\u0000\u0000\u0000\u0002\u00ea\u0001\u0000\u0000\u0000\u0002\u00ec"+
+		"\u0001\u0000\u0000\u0000\u0002\u00ee\u0001\u0000\u0000\u0000\u0003\u00f0"+
+		"\u0001\u0000\u0000\u0000\u0003\u00f2\u0001\u0000\u0000\u0000\u0003\u00f4"+
+		"\u0001\u0000\u0000\u0000\u0004\u00f8\u0001\u0000\u0000\u0000\u0006\u00fc"+
+		"\u0001\u0000\u0000\u0000\b\u0100\u0001\u0000\u0000\u0000\n\u0104\u0001"+
+		"\u0000\u0000\u0000\f\u0106\u0001\u0000\u0000\u0000\u000e\u0108\u0001\u0000"+
+		"\u0000\u0000\u0010\u010a\u0001\u0000\u0000\u0000\u0012\u010d\u0001\u0000"+
+		"\u0000\u0000\u0014\u0111\u0001\u0000\u0000\u0000\u0016\u0121\u0001\u0000"+
+		"\u0000\u0000\u0018\u0130\u0001\u0000\u0000\u0000\u001a\u0141\u0001\u0000"+
+		"\u0000\u0000\u001c\u0143\u0001\u0000\u0000\u0000\u001e\u014a\u0001\u0000"+
+		"\u0000\u0000 \u0153\u0001\u0000\u0000\u0000\"\u0159\u0001\u0000\u0000"+
+		"\u0000$\u0160\u0001\u0000\u0000\u0000&\u0168\u0001\u0000\u0000\u0000("+
+		"\u0172\u0001\u0000\u0000\u0000*\u0179\u0001\u0000\u0000\u0000,\u0181\u0001"+
+		"\u0000\u0000\u0000.\u0189\u0001\u0000\u0000\u00000\u0190\u0001\u0000\u0000"+
+		"\u00002\u0197\u0001\u0000\u0000\u00004\u019d\u0001\u0000\u0000\u00006"+
+		"\u01a5\u0001\u0000\u0000\u00008\u01aa\u0001\u0000\u0000\u0000:\u01ac\u0001"+
+		"\u0000\u0000\u0000<\u01ae\u0001\u0000\u0000\u0000>\u01b0\u0001\u0000\u0000"+
+		"\u0000@\u01b2\u0001\u0000\u0000\u0000B\u01b4\u0001\u0000\u0000\u0000D"+
+		"\u01b6\u0001\u0000\u0000\u0000F\u01b8\u0001\u0000\u0000\u0000H\u01ba\u0001"+
+		"\u0000\u0000\u0000J\u01bc\u0001\u0000\u0000\u0000L\u01be\u0001\u0000\u0000"+
+		"\u0000N\u01c0\u0001\u0000\u0000\u0000P\u01c2\u0001\u0000\u0000\u0000R"+
+		"\u01c4\u0001\u0000\u0000\u0000T\u01c6\u0001\u0000\u0000\u0000V\u01c8\u0001"+
+		"\u0000\u0000\u0000X\u01ca\u0001\u0000\u0000\u0000Z\u01cc\u0001\u0000\u0000"+
+		"\u0000\\\u01ce\u0001\u0000\u0000\u0000^\u01d0\u0001\u0000\u0000\u0000"+
+		"`\u01d2\u0001\u0000\u0000\u0000b\u01d4\u0001\u0000\u0000\u0000d\u01d6"+
+		"\u0001\u0000\u0000\u0000f\u01d8\u0001\u0000\u0000\u0000h\u01db\u0001\u0000"+
+		"\u0000\u0000j\u01e1\u0001\u0000\u0000\u0000l\u01e7\u0001\u0000\u0000\u0000"+
+		"n\u01e9\u0001\u0000\u0000\u0000p\u01eb\u0001\u0000\u0000\u0000r\u01ed"+
+		"\u0001\u0000\u0000\u0000t\u01fb\u0001\u0000\u0000\u0000v\u020a\u0001\u0000"+
+		"\u0000\u0000x\u0213\u0001\u0000\u0000\u0000z\u021a\u0001\u0000\u0000\u0000"+
+		"|\u021d\u0001\u0000\u0000\u0000~\u0232\u0001\u0000\u0000\u0000\u0080\u0234"+
+		"\u0001\u0000\u0000\u0000\u0082\u0236\u0001\u0000\u0000\u0000\u0084\u0241"+
+		"\u0001\u0000\u0000\u0000\u0086\u0243\u0001\u0000\u0000\u0000\u0088\u024a"+
+		"\u0001\u0000\u0000\u0000\u008a\u0254\u0001\u0000\u0000\u0000\u008c\u025e"+
+		"\u0001\u0000\u0000\u0000\u008e\u026a\u0001\u0000\u0000\u0000\u0090\u026c"+
+		"\u0001\u0000\u0000\u0000\u0092\u026e\u0001\u0000\u0000\u0000\u0094\u0272"+
+		"\u0001\u0000\u0000\u0000\u0096\u0274\u0001\u0000\u0000\u0000\u0098\u0276"+
+		"\u0001\u0000\u0000\u0000\u009a\u0279\u0001\u0000\u0000\u0000\u009c\u027b"+
+		"\u0001\u0000\u0000\u0000\u009e\u027d\u0001\u0000\u0000\u0000\u00a0\u027f"+
+		"\u0001\u0000\u0000\u0000\u00a2\u0281\u0001\u0000\u0000\u0000\u00a4\u0283"+
+		"\u0001\u0000\u0000\u0000\u00a6\u0285\u0001\u0000\u0000\u0000\u00a8\u0287"+
+		"\u0001\u0000\u0000\u0000\u00aa\u0289\u0001\u0000\u0000\u0000\u00ac\u028c"+
+		"\u0001\u0000\u0000\u0000\u00ae\u028e\u0001\u0000\u0000\u0000\u00b0\u0290"+
+		"\u0001\u0000\u0000\u0000\u00b2\u0292\u0001\u0000\u0000\u0000\u00b4\u0294"+
+		"\u0001\u0000\u0000\u0000\u00b6\u0296\u0001\u0000\u0000\u0000\u00b8\u0298"+
+		"\u0001\u0000\u0000\u0000\u00ba\u029b\u0001\u0000\u0000\u0000\u00bc\u029d"+
+		"\u0001\u0000\u0000\u0000\u00be\u029f\u0001\u0000\u0000\u0000\u00c0\u02a1"+
+		"\u0001\u0000\u0000\u0000\u00c2\u02a3\u0001\u0000\u0000\u0000\u00c4\u02a5"+
+		"\u0001\u0000\u0000\u0000\u00c6\u02a7\u0001\u0000\u0000\u0000\u00c8\u02aa"+
+		"\u0001\u0000\u0000\u0000\u00ca\u02ac\u0001\u0000\u0000\u0000\u00cc\u02ae"+
+		"\u0001\u0000\u0000\u0000\u00ce\u02b0\u0001\u0000\u0000\u0000\u00d0\u02b5"+
+		"\u0001\u0000\u0000\u0000\u00d2\u02b9\u0001\u0000\u0000\u0000\u00d4\u02bd"+
+		"\u0001\u0000\u0000\u0000\u00d6\u02c1\u0001\u0000\u0000\u0000\u00d8\u02c4"+
+		"\u0001\u0000\u0000\u0000\u00da\u02c8\u0001\u0000\u0000\u0000\u00dc\u02ca"+
+		"\u0001\u0000\u0000\u0000\u00de\u02cf\u0001\u0000\u0000\u0000\u00e0\u02d3"+
+		"\u0001\u0000\u0000\u0000\u00e2\u02d7\u0001\u0000\u0000\u0000\u00e4\u02db"+
+		"\u0001\u0000\u0000\u0000\u00e6\u02df\u0001\u0000\u0000\u0000\u00e8\u02e3"+
+		"\u0001\u0000\u0000\u0000\u00ea\u02e7\u0001\u0000\u0000\u0000\u00ec\u02ea"+
+		"\u0001\u0000\u0000\u0000\u00ee\u02ee\u0001\u0000\u0000\u0000\u00f0\u02f2"+
+		"\u0001\u0000\u0000\u0000\u00f2\u02f8\u0001\u0000\u0000\u0000\u00f4\u02fc"+
+		"\u0001\u0000\u0000\u0000\u00f6\u0300\u0001\u0000\u0000\u0000\u00f8\u00f9"+
+		"\u0003t8\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fb\u0006\u0000"+
+		"\u0000\u0000\u00fb\u0005\u0001\u0000\u0000\u0000\u00fc\u00fd\u0003r7\u0000"+
+		"\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe\u00ff\u0006\u0001\u0000\u0000"+
+		"\u00ff\u0007\u0001\u0000\u0000\u0000\u0100\u0101\u0003v9\u0000\u0101\u0102"+
+		"\u0001\u0000\u0000\u0000\u0102\u0103\u0006\u0002\u0000\u0000\u0103\t\u0001"+
+		"\u0000\u0000\u0000\u0104\u0105\u0003~=\u0000\u0105\u000b\u0001\u0000\u0000"+
+		"\u0000\u0106\u0107\u0003\u0088B\u0000\u0107\r\u0001\u0000\u0000\u0000"+
+		"\u0108\u0109\u0003\u008cD\u0000\u0109\u000f\u0001\u0000\u0000\u0000\u010a"+
+		"\u010b\u0003\u00a6Q\u0000\u010b\u010c\u0006\u0006\u0001\u0000\u010c\u0011"+
+		"\u0001\u0000\u0000\u0000\u010d\u010e\u0003\u00a2O\u0000\u010e\u010f\u0001"+
+		"\u0000\u0000\u0000\u010f\u0110\u0006\u0007\u0002\u0000\u0110\u0013\u0001"+
+		"\u0000\u0000\u0000\u0111\u0112\u0005o\u0000\u0000\u0112\u0113\u0005p\u0000"+
+		"\u0000\u0113\u0114\u0005t\u0000\u0000\u0114\u0115\u0005i\u0000\u0000\u0115"+
+		"\u0116\u0005o\u0000\u0000\u0116\u0117\u0005n\u0000\u0000\u0117\u0118\u0005"+
+		"s\u0000\u0000\u0118\u011c\u0001\u0000\u0000\u0000\u0119\u011b\u0003\u001a"+
+		"\u000b\u0000\u011a\u0119\u0001\u0000\u0000\u0000\u011b\u011e\u0001\u0000"+
+		"\u0000\u0000\u011c\u011a\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000"+
+		"\u0000\u0000\u011d\u011f\u0001\u0000\u0000\u0000\u011e\u011c\u0001\u0000"+
+		"\u0000\u0000\u011f\u0120\u0005{\u0000\u0000\u0120\u0015\u0001\u0000\u0000"+
+		"\u0000\u0121\u0122\u0005t\u0000\u0000\u0122\u0123\u0005o\u0000\u0000\u0123"+
+		"\u0124\u0005k\u0000\u0000\u0124\u0125\u0005e\u0000\u0000\u0125\u0126\u0005"+
+		"n\u0000\u0000\u0126\u0127\u0005s\u0000\u0000\u0127\u012b\u0001\u0000\u0000"+
+		"\u0000\u0128\u012a\u0003\u001a\u000b\u0000\u0129\u0128\u0001\u0000\u0000"+
+		"\u0000\u012a\u012d\u0001\u0000\u0000\u0000\u012b\u0129\u0001\u0000\u0000"+
+		"\u0000\u012b\u012c\u0001\u0000\u0000\u0000\u012c\u012e\u0001\u0000\u0000"+
+		"\u0000\u012d\u012b\u0001\u0000\u0000\u0000\u012e\u012f\u0005{\u0000\u0000"+
+		"\u012f\u0017\u0001\u0000\u0000\u0000\u0130\u0131\u0005c\u0000\u0000\u0131"+
+		"\u0132\u0005h\u0000\u0000\u0132\u0133\u0005a\u0000\u0000\u0133\u0134\u0005"+
+		"n\u0000\u0000\u0134\u0135\u0005n\u0000\u0000\u0135\u0136\u0005e\u0000"+
+		"\u0000\u0136\u0137\u0005l\u0000\u0000\u0137\u0138\u0005s\u0000\u0000\u0138"+
+		"\u013c\u0001\u0000\u0000\u0000\u0139\u013b\u0003\u001a\u000b\u0000\u013a"+
+		"\u0139\u0001\u0000\u0000\u0000\u013b\u013e\u0001\u0000\u0000\u0000\u013c"+
+		"\u013a\u0001\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d"+
+		"\u013f\u0001\u0000\u0000\u0000\u013e\u013c\u0001\u0000\u0000\u0000\u013f"+
+		"\u0140\u0005{\u0000\u0000\u0140\u0019\u0001\u0000\u0000\u0000\u0141\u0142"+
+		"\u0007\u0000\u0000\u0000\u0142\u001b\u0001\u0000\u0000\u0000\u0143\u0144"+
+		"\u0005i\u0000\u0000\u0144\u0145\u0005m\u0000\u0000\u0145\u0146\u0005p"+
+		"\u0000\u0000\u0146\u0147\u0005o\u0000\u0000\u0147\u0148\u0005r\u0000\u0000"+
+		"\u0148\u0149\u0005t\u0000\u0000\u0149\u001d\u0001\u0000\u0000\u0000\u014a"+
+		"\u014b\u0005f\u0000\u0000\u014b\u014c\u0005r\u0000\u0000\u014c\u014d\u0005"+
+		"a\u0000\u0000\u014d\u014e\u0005g\u0000\u0000\u014e\u014f\u0005m\u0000"+
+		"\u0000\u014f\u0150\u0005e\u0000\u0000\u0150\u0151\u0005n\u0000\u0000\u0151"+
+		"\u0152\u0005t\u0000\u0000\u0152\u001f\u0001\u0000\u0000\u0000\u0153\u0154"+
+		"\u0005l\u0000\u0000\u0154\u0155\u0005e\u0000\u0000\u0155\u0156\u0005x"+
+		"\u0000\u0000\u0156\u0157\u0005e\u0000\u0000\u0157\u0158\u0005r\u0000\u0000"+
+		"\u0158!\u0001\u0000\u0000\u0000\u0159\u015a\u0005p\u0000\u0000\u015a\u015b"+
+		"\u0005a\u0000\u0000\u015b\u015c\u0005r\u0000\u0000\u015c\u015d\u0005s"+
+		"\u0000\u0000\u015d\u015e\u0005e\u0000\u0000\u015e\u015f\u0005r\u0000\u0000"+
+		"\u015f#\u0001\u0000\u0000\u0000\u0160\u0161\u0005g\u0000\u0000\u0161\u0162"+
+		"\u0005r\u0000\u0000\u0162\u0163\u0005a\u0000\u0000\u0163\u0164\u0005m"+
+		"\u0000\u0000\u0164\u0165\u0005m\u0000\u0000\u0165\u0166\u0005a\u0000\u0000"+
+		"\u0166\u0167\u0005r\u0000\u0000\u0167%\u0001\u0000\u0000\u0000\u0168\u0169"+
+		"\u0005p\u0000\u0000\u0169\u016a\u0005r\u0000\u0000\u016a\u016b\u0005o"+
+		"\u0000\u0000\u016b\u016c\u0005t\u0000\u0000\u016c\u016d\u0005e\u0000\u0000"+
+		"\u016d\u016e\u0005c\u0000\u0000\u016e\u016f\u0005t\u0000\u0000\u016f\u0170"+
+		"\u0005e\u0000\u0000\u0170\u0171\u0005d\u0000\u0000\u0171\'\u0001\u0000"+
+		"\u0000\u0000\u0172\u0173\u0005p\u0000\u0000\u0173\u0174\u0005u\u0000\u0000"+
+		"\u0174\u0175\u0005b\u0000\u0000\u0175\u0176\u0005l\u0000\u0000\u0176\u0177"+
+		"\u0005i\u0000\u0000\u0177\u0178\u0005c\u0000\u0000\u0178)\u0001\u0000"+
+		"\u0000\u0000\u0179\u017a\u0005p\u0000\u0000\u017a\u017b\u0005r\u0000\u0000"+
+		"\u017b\u017c\u0005i\u0000\u0000\u017c\u017d\u0005v\u0000\u0000\u017d\u017e"+
+		"\u0005a\u0000\u0000\u017e\u017f\u0005t\u0000\u0000\u017f\u0180\u0005e"+
+		"\u0000\u0000\u0180+\u0001\u0000\u0000\u0000\u0181\u0182\u0005r\u0000\u0000"+
+		"\u0182\u0183\u0005e\u0000\u0000\u0183\u0184\u0005t\u0000\u0000\u0184\u0185"+
+		"\u0005u\u0000\u0000\u0185\u0186\u0005r\u0000\u0000\u0186\u0187\u0005n"+
+		"\u0000\u0000\u0187\u0188\u0005s\u0000\u0000\u0188-\u0001\u0000\u0000\u0000"+
+		"\u0189\u018a\u0005l\u0000\u0000\u018a\u018b\u0005o\u0000\u0000\u018b\u018c"+
+		"\u0005c\u0000\u0000\u018c\u018d\u0005a\u0000\u0000\u018d\u018e\u0005l"+
+		"\u0000\u0000\u018e\u018f\u0005s\u0000\u0000\u018f/\u0001\u0000\u0000\u0000"+
+		"\u0190\u0191\u0005t\u0000\u0000\u0191\u0192\u0005h\u0000\u0000\u0192\u0193"+
+		"\u0005r\u0000\u0000\u0193\u0194\u0005o\u0000\u0000\u0194\u0195\u0005w"+
+		"\u0000\u0000\u0195\u0196\u0005s\u0000\u0000\u01961\u0001\u0000\u0000\u0000"+
+		"\u0197\u0198\u0005c\u0000\u0000\u0198\u0199\u0005a\u0000\u0000\u0199\u019a"+
+		"\u0005t\u0000\u0000\u019a\u019b\u0005c\u0000\u0000\u019b\u019c\u0005h"+
+		"\u0000\u0000\u019c3\u0001\u0000\u0000\u0000\u019d\u019e\u0005f\u0000\u0000"+
+		"\u019e\u019f\u0005i\u0000\u0000\u019f\u01a0\u0005n\u0000\u0000\u01a0\u01a1"+
+		"\u0005a\u0000\u0000\u01a1\u01a2\u0005l\u0000\u0000\u01a2\u01a3\u0005l"+
+		"\u0000\u0000\u01a3\u01a4\u0005y\u0000\u0000\u01a45\u0001\u0000\u0000\u0000"+
+		"\u01a5\u01a6\u0005m\u0000\u0000\u01a6\u01a7\u0005o\u0000\u0000\u01a7\u01a8"+
+		"\u0005d\u0000\u0000\u01a8\u01a9\u0005e\u0000\u0000\u01a97\u0001\u0000"+
+		"\u0000\u0000\u01aa\u01ab\u0003\u0096I\u0000\u01ab9\u0001\u0000\u0000\u0000"+
+		"\u01ac\u01ad\u0003\u0098J\u0000\u01ad;\u0001\u0000\u0000\u0000\u01ae\u01af"+
+		"\u0003\u00c0^\u0000\u01af=\u0001\u0000\u0000\u0000\u01b0\u01b1\u0003\u00c2"+
+		"_\u0000\u01b1?\u0001\u0000\u0000\u0000\u01b2\u01b3\u0003\u009eM\u0000"+
+		"\u01b3A\u0001\u0000\u0000\u0000\u01b4\u01b5\u0003\u00a0N\u0000\u01b5C"+
+		"\u0001\u0000\u0000\u0000\u01b6\u01b7\u0003\u00a2O\u0000\u01b7E\u0001\u0000"+
+		"\u0000\u0000\u01b8\u01b9\u0003\u00a4P\u0000\u01b9G\u0001\u0000\u0000\u0000"+
+		"\u01ba\u01bb\u0003\u00aaS\u0000\u01bbI\u0001\u0000\u0000\u0000\u01bc\u01bd"+
+		"\u0003\u00acT\u0000\u01bdK\u0001\u0000\u0000\u0000\u01be\u01bf\u0003\u00ae"+
+		"U\u0000\u01bfM\u0001\u0000\u0000\u0000\u01c0\u01c1\u0003\u00b0V\u0000"+
+		"\u01c1O\u0001\u0000\u0000\u0000\u01c2\u01c3\u0003\u00b2W\u0000\u01c3Q"+
+		"\u0001\u0000\u0000\u0000\u01c4\u01c5\u0003\u00b4X\u0000\u01c5S\u0001\u0000"+
+		"\u0000\u0000\u01c6\u01c7\u0003\u00b8Z\u0000\u01c7U\u0001\u0000\u0000\u0000"+
+		"\u01c8\u01c9\u0003\u00b6Y\u0000\u01c9W\u0001\u0000\u0000\u0000\u01ca\u01cb"+
+		"\u0003\u00bc\\\u0000\u01cbY\u0001\u0000\u0000\u0000\u01cc\u01cd\u0003"+
+		"\u00be]\u0000\u01cd[\u0001\u0000\u0000\u0000\u01ce\u01cf\u0003\u00c6a"+
+		"\u0000\u01cf]\u0001\u0000\u0000\u0000\u01d0\u01d1\u0003\u00c4`\u0000\u01d1"+
+		"_\u0001\u0000\u0000\u0000\u01d2\u01d3\u0003\u00c8b\u0000\u01d3a\u0001"+
+		"\u0000\u0000\u0000\u01d4\u01d5\u0003\u00cac\u0000\u01d5c\u0001\u0000\u0000"+
+		"\u0000\u01d6\u01d7\u0003\u00ccd\u0000\u01d7e\u0001\u0000\u0000\u0000\u01d8"+
+		"\u01d9\u0003\u00f6y\u0000\u01d9g\u0001\u0000\u0000\u0000\u01da\u01dc\u0003"+
+		"l4\u0000\u01db\u01da\u0001\u0000\u0000\u0000\u01dc\u01dd\u0001\u0000\u0000"+
+		"\u0000\u01dd\u01db\u0001\u0000\u0000\u0000\u01dd\u01de\u0001\u0000\u0000"+
+		"\u0000\u01de\u01df\u0001\u0000\u0000\u0000\u01df\u01e0\u00062\u0003\u0000"+
+		"\u01e0i\u0001\u0000\u0000\u0000\u01e1\u01e2\t\u0000\u0000\u0000\u01e2"+
+		"\u01e3\u0001\u0000\u0000\u0000\u01e3\u01e4\u00063\u0004\u0000\u01e4k\u0001"+
+		"\u0000\u0000\u0000\u01e5\u01e8\u0003n5\u0000\u01e6\u01e8\u0003p6\u0000"+
+		"\u01e7\u01e5\u0001\u0000\u0000\u0000\u01e7\u01e6\u0001\u0000\u0000\u0000"+
+		"\u01e8m\u0001\u0000\u0000\u0000\u01e9\u01ea\u0007\u0001\u0000\u0000\u01ea"+
+		"o\u0001\u0000\u0000\u0000\u01eb\u01ec\u0007\u0002\u0000\u0000\u01ecq\u0001"+
+		"\u0000\u0000\u0000\u01ed\u01ee\u0005/\u0000\u0000\u01ee\u01ef\u0005*\u0000"+
+		"\u0000\u01ef\u01f3\u0001\u0000\u0000\u0000\u01f0\u01f2\t\u0000\u0000\u0000"+
+		"\u01f1\u01f0\u0001\u0000\u0000\u0000\u01f2\u01f5\u0001\u0000\u0000\u0000"+
+		"\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f3\u01f1\u0001\u0000\u0000\u0000"+
+		"\u01f4\u01f9\u0001\u0000\u0000\u0000\u01f5\u01f3\u0001\u0000\u0000\u0000"+
+		"\u01f6\u01f7\u0005*\u0000\u0000\u01f7\u01fa\u0005/\u0000\u0000\u01f8\u01fa"+
+		"\u0005\u0000\u0000\u0001\u01f9\u01f6\u0001\u0000\u0000\u0000\u01f9\u01f8"+
+		"\u0001\u0000\u0000\u0000\u01fas\u0001\u0000\u0000\u0000\u01fb\u01fc\u0005"+
+		"/\u0000\u0000\u01fc\u01fd\u0005*\u0000\u0000\u01fd\u01fe\u0005*\u0000"+
+		"\u0000\u01fe\u0202\u0001\u0000\u0000\u0000\u01ff\u0201\t\u0000\u0000\u0000"+
+		"\u0200\u01ff\u0001\u0000\u0000\u0000\u0201\u0204\u0001\u0000\u0000\u0000"+
+		"\u0202\u0203\u0001\u0000\u0000\u0000\u0202\u0200\u0001\u0000\u0000\u0000"+
+		"\u0203\u0208\u0001\u0000\u0000\u0000\u0204\u0202\u0001\u0000\u0000\u0000"+
+		"\u0205\u0206\u0005*\u0000\u0000\u0206\u0209\u0005/\u0000\u0000\u0207\u0209"+
+		"\u0005\u0000\u0000\u0001\u0208\u0205\u0001\u0000\u0000\u0000\u0208\u0207"+
+		"\u0001\u0000\u0000\u0000\u0209u\u0001\u0000\u0000\u0000\u020a\u020b\u0005"+
+		"/\u0000\u0000\u020b\u020c\u0005/\u0000\u0000\u020c\u0210\u0001\u0000\u0000"+
+		"\u0000\u020d\u020f\b\u0003\u0000\u0000\u020e\u020d\u0001\u0000\u0000\u0000"+
+		"\u020f\u0212\u0001\u0000\u0000\u0000\u0210\u020e\u0001\u0000\u0000\u0000"+
+		"\u0210\u0211\u0001\u0000\u0000\u0000\u0211w\u0001\u0000\u0000\u0000\u0212"+
+		"\u0210\u0001\u0000\u0000\u0000\u0213\u0218\u0003\u0094H\u0000\u0214\u0219"+
+		"\u0007\u0004\u0000\u0000\u0215\u0219\u0003|<\u0000\u0216\u0219\t\u0000"+
+		"\u0000\u0000\u0217\u0219\u0005\u0000\u0000\u0001\u0218\u0214\u0001\u0000"+
+		"\u0000\u0000\u0218\u0215\u0001\u0000\u0000\u0000\u0218\u0216\u0001\u0000"+
+		"\u0000\u0000\u0218\u0217\u0001\u0000\u0000\u0000\u0219y\u0001\u0000\u0000"+
+		"\u0000\u021a\u021b\u0003\u0094H\u0000\u021b\u021c\t\u0000\u0000\u0000"+
+		"\u021c{\u0001\u0000\u0000\u0000\u021d\u0228\u0005u\u0000\u0000\u021e\u0226"+
+		"\u0003\u0080>\u0000\u021f\u0224\u0003\u0080>\u0000\u0220\u0222\u0003\u0080"+
+		">\u0000\u0221\u0223\u0003\u0080>\u0000\u0222\u0221\u0001\u0000\u0000\u0000"+
+		"\u0222\u0223\u0001\u0000\u0000\u0000\u0223\u0225\u0001\u0000\u0000\u0000"+
+		"\u0224\u0220\u0001\u0000\u0000\u0000\u0224\u0225\u0001\u0000\u0000\u0000"+
+		"\u0225\u0227\u0001\u0000\u0000\u0000\u0226\u021f\u0001\u0000\u0000\u0000"+
+		"\u0226\u0227\u0001\u0000\u0000\u0000\u0227\u0229\u0001\u0000\u0000\u0000"+
+		"\u0228\u021e\u0001\u0000\u0000\u0000\u0228\u0229\u0001\u0000\u0000\u0000"+
+		"\u0229}\u0001\u0000\u0000\u0000\u022a\u0233\u00050\u0000\u0000\u022b\u022f"+
+		"\u0007\u0005\u0000\u0000\u022c\u022e\u0003\u0082?\u0000\u022d\u022c\u0001"+
+		"\u0000\u0000\u0000\u022e\u0231\u0001\u0000\u0000\u0000\u022f\u022d\u0001"+
+		"\u0000\u0000\u0000\u022f\u0230\u0001\u0000\u0000\u0000\u0230\u0233\u0001"+
+		"\u0000\u0000\u0000\u0231\u022f\u0001\u0000\u0000\u0000\u0232\u022a\u0001"+
+		"\u0000\u0000\u0000\u0232\u022b\u0001\u0000\u0000\u0000\u0233\u007f\u0001"+
+		"\u0000\u0000\u0000\u0234\u0235\u0007\u0006\u0000\u0000\u0235\u0081\u0001"+
+		"\u0000\u0000\u0000\u0236\u0237\u0007\u0007\u0000\u0000\u0237\u0083\u0001"+
+		"\u0000\u0000\u0000\u0238\u0239\u0005t\u0000\u0000\u0239\u023a\u0005r\u0000"+
+		"\u0000\u023a\u023b\u0005u\u0000\u0000\u023b\u0242\u0005e\u0000\u0000\u023c"+
+		"\u023d\u0005f\u0000\u0000\u023d\u023e\u0005a\u0000\u0000\u023e\u023f\u0005"+
+		"l\u0000\u0000\u023f\u0240\u0005s\u0000\u0000\u0240\u0242\u0005e\u0000"+
+		"\u0000\u0241\u0238\u0001\u0000\u0000\u0000\u0241\u023c\u0001\u0000\u0000"+
+		"\u0000\u0242\u0085\u0001\u0000\u0000\u0000\u0243\u0246\u0003\u009aK\u0000"+
+		"\u0244\u0247\u0003x:\u0000\u0245\u0247\b\b\u0000\u0000\u0246\u0244\u0001"+
+		"\u0000\u0000\u0000\u0246\u0245\u0001\u0000\u0000\u0000\u0247\u0248\u0001"+
+		"\u0000\u0000\u0000\u0248\u0249\u0003\u009aK\u0000\u0249\u0087\u0001\u0000"+
+		"\u0000\u0000\u024a\u024f\u0003\u009aK\u0000\u024b\u024e\u0003x:\u0000"+
+		"\u024c\u024e\b\b\u0000\u0000\u024d\u024b\u0001\u0000\u0000\u0000\u024d"+
+		"\u024c\u0001\u0000\u0000\u0000\u024e\u0251\u0001\u0000\u0000\u0000\u024f"+
+		"\u024d\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000\u0000\u0000\u0250"+
+		"\u0252\u0001\u0000\u0000\u0000\u0251\u024f\u0001\u0000\u0000\u0000\u0252"+
+		"\u0253\u0003\u009aK\u0000\u0253\u0089\u0001\u0000\u0000\u0000\u0254\u0259"+
+		"\u0003\u009cL\u0000\u0255\u0258\u0003x:\u0000\u0256\u0258\b\t\u0000\u0000"+
+		"\u0257\u0255\u0001\u0000\u0000\u0000\u0257\u0256\u0001\u0000\u0000\u0000"+
+		"\u0258\u025b\u0001\u0000\u0000\u0000\u0259\u0257\u0001\u0000\u0000\u0000"+
+		"\u0259\u025a\u0001\u0000\u0000\u0000\u025a\u025c\u0001\u0000\u0000\u0000"+
+		"\u025b\u0259\u0001\u0000\u0000\u0000\u025c\u025d\u0003\u009cL\u0000\u025d"+
+		"\u008b\u0001\u0000\u0000\u0000\u025e\u0263\u0003\u009aK\u0000\u025f\u0262"+
+		"\u0003x:\u0000\u0260\u0262\b\b\u0000\u0000\u0261\u025f\u0001\u0000\u0000"+
+		"\u0000\u0261\u0260\u0001\u0000\u0000\u0000\u0262\u0265\u0001\u0000\u0000"+
+		"\u0000\u0263\u0261\u0001\u0000\u0000\u0000\u0263\u0264\u0001\u0000\u0000"+
+		"\u0000\u0264\u008d\u0001\u0000\u0000\u0000\u0265\u0263\u0001\u0000\u0000"+
+		"\u0000\u0266\u026b\u0003\u0090F\u0000\u0267\u026b\u000209\u0000\u0268"+
+		"\u026b\u0003\u00ba[\u0000\u0269\u026b\u0007\n\u0000\u0000\u026a\u0266"+
+		"\u0001\u0000\u0000\u0000\u026a\u0267\u0001\u0000\u0000\u0000\u026a\u0268"+
+		"\u0001\u0000\u0000\u0000\u026a\u0269\u0001\u0000\u0000\u0000\u026b\u008f"+
+		"\u0001\u0000\u0000\u0000\u026c\u026d\u0007\u000b\u0000\u0000\u026d\u0091"+
+		"\u0001\u0000\u0000\u0000\u026e\u026f\u0005i\u0000\u0000\u026f\u0270\u0005"+
+		"n\u0000\u0000\u0270\u0271\u0005t\u0000\u0000\u0271\u0093\u0001\u0000\u0000"+
+		"\u0000\u0272\u0273\u0005\\\u0000\u0000\u0273\u0095\u0001\u0000\u0000\u0000"+
+		"\u0274\u0275\u0005:\u0000\u0000\u0275\u0097\u0001\u0000\u0000\u0000\u0276"+
+		"\u0277\u0005:\u0000\u0000\u0277\u0278\u0005:\u0000\u0000\u0278\u0099\u0001"+
+		"\u0000\u0000\u0000\u0279\u027a\u0005\'\u0000\u0000\u027a\u009b\u0001\u0000"+
+		"\u0000\u0000\u027b\u027c\u0005\"\u0000\u0000\u027c\u009d\u0001\u0000\u0000"+
+		"\u0000\u027d\u027e\u0005(\u0000\u0000\u027e\u009f\u0001\u0000\u0000\u0000"+
+		"\u027f\u0280\u0005)\u0000\u0000\u0280\u00a1\u0001\u0000\u0000\u0000\u0281"+
+		"\u0282\u0005{\u0000\u0000\u0282\u00a3\u0001\u0000\u0000\u0000\u0283\u0284"+
+		"\u0005}\u0000\u0000\u0284\u00a5\u0001\u0000\u0000\u0000\u0285\u0286\u0005"+
+		"[\u0000\u0000\u0286\u00a7\u0001\u0000\u0000\u0000\u0287\u0288\u0005]\u0000"+
+		"\u0000\u0288\u00a9\u0001\u0000\u0000\u0000\u0289\u028a\u0005-\u0000\u0000"+
+		"\u028a\u028b\u0005>\u0000\u0000\u028b\u00ab\u0001\u0000\u0000\u0000\u028c"+
+		"\u028d\u0005<\u0000\u0000\u028d\u00ad\u0001\u0000\u0000\u0000\u028e\u028f"+
+		"\u0005>\u0000\u0000\u028f\u00af\u0001\u0000\u0000\u0000\u0290\u0291\u0005"+
+		"=\u0000\u0000\u0291\u00b1\u0001\u0000\u0000\u0000\u0292\u0293\u0005?\u0000"+
+		"\u0000\u0293\u00b3\u0001\u0000\u0000\u0000\u0294\u0295\u0005*\u0000\u0000"+
+		"\u0295\u00b5\u0001\u0000\u0000\u0000\u0296\u0297\u0005+\u0000\u0000\u0297"+
+		"\u00b7\u0001\u0000\u0000\u0000\u0298\u0299\u0005+\u0000\u0000\u0299\u029a"+
+		"\u0005=\u0000\u0000\u029a\u00b9\u0001\u0000\u0000\u0000\u029b\u029c\u0005"+
+		"_\u0000\u0000\u029c\u00bb\u0001\u0000\u0000\u0000\u029d\u029e\u0005|\u0000"+
+		"\u0000\u029e\u00bd\u0001\u0000\u0000\u0000\u029f\u02a0\u0005$\u0000\u0000"+
+		"\u02a0\u00bf\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005,\u0000\u0000\u02a2"+
+		"\u00c1\u0001\u0000\u0000\u0000\u02a3\u02a4\u0005;\u0000\u0000\u02a4\u00c3"+
+		"\u0001\u0000\u0000\u0000\u02a5\u02a6\u0005.\u0000\u0000\u02a6\u00c5\u0001"+
+		"\u0000\u0000\u0000\u02a7\u02a8\u0005.\u0000\u0000\u02a8\u02a9\u0005.\u0000"+
+		"\u0000\u02a9\u00c7\u0001\u0000\u0000\u0000\u02aa\u02ab\u0005@\u0000\u0000"+
+		"\u02ab\u00c9\u0001\u0000\u0000\u0000\u02ac\u02ad\u0005#\u0000\u0000\u02ad"+
+		"\u00cb\u0001\u0000\u0000\u0000\u02ae\u02af\u0005~\u0000\u0000\u02af\u00cd"+
+		"\u0001\u0000\u0000\u0000\u02b0\u02b1\u0003\u00a6Q\u0000\u02b1\u02b2\u0001"+
+		"\u0000\u0000\u0000\u02b2\u02b3\u0006e\u0005\u0000\u02b3\u02b4\u0006e\u0006"+
+		"\u0000\u02b4\u00cf\u0001\u0000\u0000\u0000\u02b5\u02b6\u0003z;\u0000\u02b6"+
+		"\u02b7\u0001\u0000\u0000\u0000\u02b7\u02b8\u0006f\u0005\u0000\u02b8\u00d1"+
+		"\u0001\u0000\u0000\u0000\u02b9\u02ba\u0003\u008aC\u0000\u02ba\u02bb\u0001"+
+		"\u0000\u0000\u0000\u02bb\u02bc\u0006g\u0005\u0000\u02bc\u00d3\u0001\u0000"+
+		"\u0000\u0000\u02bd\u02be\u0003\u0088B\u0000\u02be\u02bf\u0001\u0000\u0000"+
+		"\u0000\u02bf\u02c0\u0006h\u0005\u0000\u02c0\u00d5\u0001\u0000\u0000\u0000"+
+		"\u02c1\u02c2\u0003\u00a8R\u0000\u02c2\u02c3\u0006i\u0007\u0000\u02c3\u00d7"+
+		"\u0001\u0000\u0000\u0000\u02c4\u02c5\u0005\u0000\u0000\u0001\u02c5\u02c6"+
+		"\u0001\u0000\u0000\u0000\u02c6\u02c7\u0006j\b\u0000\u02c7\u00d9\u0001"+
+		"\u0000\u0000\u0000\u02c8\u02c9\t\u0000\u0000\u0000\u02c9\u00db\u0001\u0000"+
+		"\u0000\u0000\u02ca\u02cb\u0003\u00a2O\u0000\u02cb\u02cc\u0001\u0000\u0000"+
+		"\u0000\u02cc\u02cd\u0006l\t\u0000\u02cd\u02ce\u0006l\u0002\u0000\u02ce"+
+		"\u00dd\u0001\u0000\u0000\u0000\u02cf\u02d0\u0003z;\u0000\u02d0\u02d1\u0001"+
+		"\u0000\u0000\u0000\u02d1\u02d2\u0006m\t\u0000\u02d2\u00df\u0001\u0000"+
+		"\u0000\u0000\u02d3\u02d4\u0003\u008aC\u0000\u02d4\u02d5\u0001\u0000\u0000"+
+		"\u0000\u02d5\u02d6\u0006n\t\u0000\u02d6\u00e1\u0001\u0000\u0000\u0000"+
+		"\u02d7\u02d8\u0003\u0088B\u0000\u02d8\u02d9\u0001\u0000\u0000\u0000\u02d9"+
+		"\u02da\u0006o\t\u0000\u02da\u00e3\u0001\u0000\u0000\u0000\u02db\u02dc"+
+		"\u0003t8\u0000\u02dc\u02dd\u0001\u0000\u0000\u0000\u02dd\u02de\u0006p"+
+		"\t\u0000\u02de\u00e5\u0001\u0000\u0000\u0000\u02df\u02e0\u0003r7\u0000"+
+		"\u02e0\u02e1\u0001\u0000\u0000\u0000\u02e1\u02e2\u0006q\t\u0000\u02e2"+
+		"\u00e7\u0001\u0000\u0000\u0000\u02e3\u02e4\u0003v9\u0000\u02e4\u02e5\u0001"+
+		"\u0000\u0000\u0000\u02e5\u02e6\u0006r\t\u0000\u02e6\u00e9\u0001\u0000"+
+		"\u0000\u0000\u02e7\u02e8\u0003\u00a4P\u0000\u02e8\u02e9\u0006s\n\u0000"+
+		"\u02e9\u00eb\u0001\u0000\u0000\u0000\u02ea\u02eb\u0005\u0000\u0000\u0001"+
+		"\u02eb\u02ec\u0001\u0000\u0000\u0000\u02ec\u02ed\u0006t\b\u0000\u02ed"+
+		"\u00ed\u0001\u0000\u0000\u0000\u02ee\u02ef\t\u0000\u0000\u0000\u02ef\u00ef"+
+		"\u0001\u0000\u0000\u0000\u02f0\u02f3\b\f\u0000\u0000\u02f1\u02f3\u0003"+
+		"z;\u0000\u02f2\u02f0\u0001\u0000\u0000\u0000\u02f2\u02f1\u0001\u0000\u0000"+
+		"\u0000\u02f3\u02f4\u0001\u0000\u0000\u0000\u02f4\u02f2\u0001\u0000\u0000"+
+		"\u0000\u02f4\u02f5\u0001\u0000\u0000\u0000\u02f5\u02f6\u0001\u0000\u0000"+
+		"\u0000\u02f6\u02f7\u0006v\u000b\u0000\u02f7\u00f1\u0001\u0000\u0000\u0000"+
+		"\u02f8\u02f9\u0003\u00a8R\u0000\u02f9\u02fa\u0001\u0000\u0000\u0000\u02fa"+
+		"\u02fb\u0006w\b\u0000\u02fb\u00f3\u0001\u0000\u0000\u0000\u02fc\u02fd"+
+		"\u0005\u0000\u0000\u0001\u02fd\u02fe\u0001\u0000\u0000\u0000\u02fe\u02ff"+
+		"\u0006x\b\u0000\u02ff\u00f5\u0001\u0000\u0000\u0000\u0300\u0304\u0003"+
+		"\u0090F\u0000\u0301\u0303\u0003\u008eE\u0000\u0302\u0301\u0001\u0000\u0000"+
+		"\u0000\u0303\u0306\u0001\u0000\u0000\u0000\u0304\u0302\u0001\u0000\u0000"+
+		"\u0000\u0304\u0305\u0001\u0000\u0000\u0000\u0305\u00f7\u0001\u0000\u0000"+
+		"\u0000\u0306\u0304\u0001\u0000\u0000\u0000!\u0000\u0001\u0002\u0003\u011c"+
+		"\u012b\u013c\u01dd\u01e7\u01f3\u01f9\u0202\u0208\u0210\u0218\u0222\u0224"+
+		"\u0226\u0228\u022f\u0232\u0241\u0246\u024d\u024f\u0257\u0259\u0261\u0263"+
+		"\u026a\u02f2\u02f4\u0304\f\u0000\u0003\u0000\u0001\u0006\u0000\u0005\u0002"+
+		"\u0000\u0000\u0002\u0000\u0000\u0001\u0000\u00079\u0000\u0005\u0001\u0000"+
+		"\u0001i\u0001\u0004\u0000\u0000\u0007<\u0000\u0001s\u0002\u0003\u0000"+
+		"\u0000";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Parser.java b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Parser.java
index 6df7f7b..5744de8 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Parser.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4Parser.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv4Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -36,9 +36,9 @@
 import java.util.Iterator;
 import java.util.ArrayList;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class ANTLRv4Parser extends Parser {
-	static { RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -151,7 +151,7 @@
 	}
 
 	@Override
-	public String getGrammarFileName() { return "ANTLRv4Parser.g4"; }
+	public String getGrammarFileName() { return "java-escape"; }
 
 	@Override
 	public String[] getRuleNames() { return ruleNames; }
@@ -167,6 +167,7 @@
 		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class GrammarSpecContext extends ParserRuleContext {
 		public GrammarDeclContext grammarDecl() {
 			return getRuleContext(GrammarDeclContext.class,0);
@@ -213,7 +214,7 @@
 			setState(132);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << OPTIONS) | (1L << TOKENS) | (1L << CHANNELS) | (1L << IMPORT) | (1L << AT))) != 0)) {
+			while (((_la) & ~0x3f) == 0 && ((1L << _la) & 562949953482752L) != 0) {
 				{
 				{
 				setState(129);
@@ -255,6 +256,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class GrammarDeclContext extends ParserRuleContext {
 		public GrammarTypeContext grammarType() {
 			return getRuleContext(GrammarTypeContext.class,0);
@@ -302,6 +304,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class GrammarTypeContext extends ParserRuleContext {
 		public TerminalNode LEXER() { return getToken(ANTLRv4Parser.LEXER, 0); }
 		public TerminalNode GRAMMAR() { return getToken(ANTLRv4Parser.GRAMMAR, 0); }
@@ -367,6 +370,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class PrequelConstructContext extends ParserRuleContext {
 		public OptionsSpecContext optionsSpec() {
 			return getRuleContext(OptionsSpecContext.class,0);
@@ -454,6 +458,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionsSpecContext extends ParserRuleContext {
 		public TerminalNode OPTIONS() { return getToken(ANTLRv4Parser.OPTIONS, 0); }
 		public TerminalNode RBRACE() { return getToken(ANTLRv4Parser.RBRACE, 0); }
@@ -521,6 +526,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -568,6 +574,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class OptionValueContext extends ParserRuleContext {
 		public List<IdentifierContext> identifier() {
 			return getRuleContexts(IdentifierContext.class);
@@ -666,6 +673,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class DelegateGrammarsContext extends ParserRuleContext {
 		public TerminalNode IMPORT() { return getToken(ANTLRv4Parser.IMPORT, 0); }
 		public List<DelegateGrammarContext> delegateGrammar() {
@@ -735,6 +743,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class DelegateGrammarContext extends ParserRuleContext {
 		public List<IdentifierContext> identifier() {
 			return getRuleContexts(IdentifierContext.class);
@@ -795,6 +804,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class TokensSpecContext extends ParserRuleContext {
 		public TerminalNode TOKENS() { return getToken(ANTLRv4Parser.TOKENS, 0); }
 		public TerminalNode RBRACE() { return getToken(ANTLRv4Parser.RBRACE, 0); }
@@ -849,6 +859,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ChannelsSpecContext extends ParserRuleContext {
 		public TerminalNode CHANNELS() { return getToken(ANTLRv4Parser.CHANNELS, 0); }
 		public TerminalNode RBRACE() { return getToken(ANTLRv4Parser.RBRACE, 0); }
@@ -903,6 +914,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class IdListContext extends ParserRuleContext {
 		public List<IdentifierContext> identifier() {
 			return getRuleContexts(IdentifierContext.class);
@@ -979,6 +991,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class Action_Context extends ParserRuleContext {
 		public TerminalNode AT() { return getToken(ANTLRv4Parser.AT, 0); }
 		public IdentifierContext identifier() {
@@ -1042,6 +1055,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ActionScopeNameContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -1106,6 +1120,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ActionBlockContext extends ParserRuleContext {
 		public TerminalNode BEGIN_ACTION() { return getToken(ANTLRv4Parser.BEGIN_ACTION, 0); }
 		public TerminalNode END_ACTION() { return getToken(ANTLRv4Parser.END_ACTION, 0); }
@@ -1165,6 +1180,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ArgActionBlockContext extends ParserRuleContext {
 		public TerminalNode BEGIN_ARGUMENT() { return getToken(ANTLRv4Parser.BEGIN_ARGUMENT, 0); }
 		public TerminalNode END_ARGUMENT() { return getToken(ANTLRv4Parser.END_ARGUMENT, 0); }
@@ -1224,6 +1240,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ModeSpecContext extends ParserRuleContext {
 		public TerminalNode MODE() { return getToken(ANTLRv4Parser.MODE, 0); }
 		public IdentifierContext identifier() {
@@ -1290,6 +1307,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RulesContext extends ParserRuleContext {
 		public List<RuleSpecContext> ruleSpec() {
 			return getRuleContexts(RuleSpecContext.class);
@@ -1321,7 +1339,7 @@
 			setState(275);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TOKEN_REF) | (1L << RULE_REF) | (1L << FRAGMENT) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << PRIVATE))) != 0)) {
+			while (((_la) & ~0x3f) == 0 && ((1L << _la) & 7405574L) != 0) {
 				{
 				{
 				setState(272);
@@ -1345,6 +1363,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleSpecContext extends ParserRuleContext {
 		public ParserRuleSpecContext parserRuleSpec() {
 			return getRuleContext(ParserRuleSpecContext.class,0);
@@ -1400,6 +1419,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ParserRuleSpecContext extends ParserRuleContext {
 		public TerminalNode RULE_REF() { return getToken(ANTLRv4Parser.RULE_REF, 0); }
 		public TerminalNode COLON() { return getToken(ANTLRv4Parser.COLON, 0); }
@@ -1455,7 +1475,7 @@
 			setState(283);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << PRIVATE))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 7405568L) != 0) {
 				{
 				setState(282);
 				ruleModifiers();
@@ -1539,6 +1559,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ExceptionGroupContext extends ParserRuleContext {
 		public List<ExceptionHandlerContext> exceptionHandler() {
 			return getRuleContexts(ExceptionHandlerContext.class);
@@ -1607,6 +1628,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ExceptionHandlerContext extends ParserRuleContext {
 		public TerminalNode CATCH() { return getToken(ANTLRv4Parser.CATCH, 0); }
 		public ArgActionBlockContext argActionBlock() {
@@ -1654,6 +1676,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class FinallyClauseContext extends ParserRuleContext {
 		public TerminalNode FINALLY() { return getToken(ANTLRv4Parser.FINALLY, 0); }
 		public ActionBlockContext actionBlock() {
@@ -1696,6 +1719,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RulePrequelContext extends ParserRuleContext {
 		public OptionsSpecContext optionsSpec() {
 			return getRuleContext(OptionsSpecContext.class,0);
@@ -1753,6 +1777,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleReturnsContext extends ParserRuleContext {
 		public TerminalNode RETURNS() { return getToken(ANTLRv4Parser.RETURNS, 0); }
 		public ArgActionBlockContext argActionBlock() {
@@ -1795,6 +1820,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ThrowsSpecContext extends ParserRuleContext {
 		public TerminalNode THROWS() { return getToken(ANTLRv4Parser.THROWS, 0); }
 		public List<IdentifierContext> identifier() {
@@ -1861,6 +1887,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LocalsSpecContext extends ParserRuleContext {
 		public TerminalNode LOCALS() { return getToken(ANTLRv4Parser.LOCALS, 0); }
 		public ArgActionBlockContext argActionBlock() {
@@ -1903,6 +1930,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleActionContext extends ParserRuleContext {
 		public TerminalNode AT() { return getToken(ANTLRv4Parser.AT, 0); }
 		public IdentifierContext identifier() {
@@ -1950,6 +1978,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleModifiersContext extends ParserRuleContext {
 		public List<RuleModifierContext> ruleModifier() {
 			return getRuleContexts(RuleModifierContext.class);
@@ -1991,7 +2020,7 @@
 				setState(351); 
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << PRIVATE))) != 0) );
+			} while ( ((_la) & ~0x3f) == 0 && ((1L << _la) & 7405568L) != 0 );
 			}
 		}
 		catch (RecognitionException re) {
@@ -2005,6 +2034,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleModifierContext extends ParserRuleContext {
 		public TerminalNode PUBLIC() { return getToken(ANTLRv4Parser.PUBLIC, 0); }
 		public TerminalNode PRIVATE() { return getToken(ANTLRv4Parser.PRIVATE, 0); }
@@ -2033,7 +2063,7 @@
 			{
 			setState(353);
 			_la = _input.LA(1);
-			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << PROTECTED) | (1L << PUBLIC) | (1L << PRIVATE))) != 0)) ) {
+			if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 7405568L) != 0) ) {
 			_errHandler.recoverInline(this);
 			}
 			else {
@@ -2054,6 +2084,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleBlockContext extends ParserRuleContext {
 		public RuleAltListContext ruleAltList() {
 			return getRuleContext(RuleAltListContext.class,0);
@@ -2093,6 +2124,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RuleAltListContext extends ParserRuleContext {
 		public List<LabeledAltContext> labeledAlt() {
 			return getRuleContexts(LabeledAltContext.class);
@@ -2156,6 +2188,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LabeledAltContext extends ParserRuleContext {
 		public AlternativeContext alternative() {
 			return getRuleContext(AlternativeContext.class,0);
@@ -2212,6 +2245,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerRuleSpecContext extends ParserRuleContext {
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv4Parser.TOKEN_REF, 0); }
 		public TerminalNode COLON() { return getToken(ANTLRv4Parser.COLON, 0); }
@@ -2285,6 +2319,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerRuleBlockContext extends ParserRuleContext {
 		public LexerAltListContext lexerAltList() {
 			return getRuleContext(LexerAltListContext.class,0);
@@ -2324,6 +2359,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerAltListContext extends ParserRuleContext {
 		public List<LexerAltContext> lexerAlt() {
 			return getRuleContexts(LexerAltContext.class);
@@ -2387,6 +2423,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerAltContext extends ParserRuleContext {
 		public LexerElementsContext lexerElements() {
 			return getRuleContext(LexerElementsContext.class,0);
@@ -2451,6 +2488,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerElementsContext extends ParserRuleContext {
 		public List<LexerElementContext> lexerElement() {
 			return getRuleContexts(LexerElementContext.class);
@@ -2503,7 +2541,7 @@
 					setState(401); 
 					_errHandler.sync(this);
 					_la = _input.LA(1);
-				} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TOKEN_REF) | (1L << RULE_REF) | (1L << LEXER_CHAR_SET) | (1L << STRING_LITERAL) | (1L << BEGIN_ACTION) | (1L << LPAREN) | (1L << DOT) | (1L << NOT))) != 0) );
+				} while ( ((_la) & ~0x3f) == 0 && ((1L << _la) & 2533283380332814L) != 0 );
 				}
 				break;
 			case SEMI:
@@ -2529,6 +2567,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerElementContext extends ParserRuleContext {
 		public LabeledLexerElementContext labeledLexerElement() {
 			return getRuleContext(LabeledLexerElementContext.class,0);
@@ -2576,7 +2615,7 @@
 				setState(408);
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUESTION) | (1L << STAR) | (1L << PLUS))) != 0)) {
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & 24189255811072L) != 0) {
 					{
 					setState(407);
 					ebnfSuffix();
@@ -2593,7 +2632,7 @@
 				setState(412);
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUESTION) | (1L << STAR) | (1L << PLUS))) != 0)) {
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & 24189255811072L) != 0) {
 					{
 					setState(411);
 					ebnfSuffix();
@@ -2610,7 +2649,7 @@
 				setState(416);
 				_errHandler.sync(this);
 				_la = _input.LA(1);
-				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUESTION) | (1L << STAR) | (1L << PLUS))) != 0)) {
+				if (((_la) & ~0x3f) == 0 && ((1L << _la) & 24189255811072L) != 0) {
 					{
 					setState(415);
 					ebnfSuffix();
@@ -2649,6 +2688,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LabeledLexerElementContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -2729,6 +2769,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerBlockContext extends ParserRuleContext {
 		public TerminalNode LPAREN() { return getToken(ANTLRv4Parser.LPAREN, 0); }
 		public LexerAltListContext lexerAltList() {
@@ -2774,6 +2815,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerCommandsContext extends ParserRuleContext {
 		public TerminalNode RARROW() { return getToken(ANTLRv4Parser.RARROW, 0); }
 		public List<LexerCommandContext> lexerCommand() {
@@ -2840,6 +2882,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerCommandContext extends ParserRuleContext {
 		public LexerCommandNameContext lexerCommandName() {
 			return getRuleContext(LexerCommandNameContext.class,0);
@@ -2903,6 +2946,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerCommandNameContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -2959,6 +3003,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerCommandExprContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -3015,6 +3060,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AltListContext extends ParserRuleContext {
 		public List<AlternativeContext> alternative() {
 			return getRuleContexts(AlternativeContext.class);
@@ -3078,6 +3124,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AlternativeContext extends ParserRuleContext {
 		public ElementOptionsContext elementOptions() {
 			return getRuleContext(ElementOptionsContext.class,0);
@@ -3143,7 +3190,7 @@
 					setState(473); 
 					_errHandler.sync(this);
 					_la = _input.LA(1);
-				} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TOKEN_REF) | (1L << RULE_REF) | (1L << STRING_LITERAL) | (1L << BEGIN_ACTION) | (1L << LPAREN) | (1L << DOT) | (1L << NOT))) != 0) );
+				} while ( ((_la) & ~0x3f) == 0 && ((1L << _la) & 2533283380332806L) != 0 );
 				}
 				break;
 			case SEMI:
@@ -3169,6 +3216,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ElementContext extends ParserRuleContext {
 		public LabeledElementContext labeledElement() {
 			return getRuleContext(LabeledElementContext.class,0);
@@ -3315,6 +3363,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LabeledElementContext extends ParserRuleContext {
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
@@ -3395,6 +3444,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class EbnfContext extends ParserRuleContext {
 		public BlockContext block() {
 			return getRuleContext(BlockContext.class,0);
@@ -3428,7 +3478,7 @@
 			setState(503);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUESTION) | (1L << STAR) | (1L << PLUS))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 24189255811072L) != 0) {
 				{
 				setState(502);
 				blockSuffix();
@@ -3448,6 +3498,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class BlockSuffixContext extends ParserRuleContext {
 		public EbnfSuffixContext ebnfSuffix() {
 			return getRuleContext(EbnfSuffixContext.class,0);
@@ -3487,6 +3538,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class EbnfSuffixContext extends ParserRuleContext {
 		public List<TerminalNode> QUESTION() { return getTokens(ANTLRv4Parser.QUESTION); }
 		public TerminalNode QUESTION(int i) {
@@ -3582,6 +3634,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class LexerAtomContext extends ParserRuleContext {
 		public CharacterRangeContext characterRange() {
 			return getRuleContext(CharacterRangeContext.class,0);
@@ -3677,6 +3730,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class AtomContext extends ParserRuleContext {
 		public TerminalContext terminal() {
 			return getRuleContext(TerminalContext.class,0);
@@ -3767,6 +3821,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class NotSetContext extends ParserRuleContext {
 		public TerminalNode NOT() { return getToken(ANTLRv4Parser.NOT, 0); }
 		public SetElementContext setElement() {
@@ -3827,6 +3882,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class BlockSetContext extends ParserRuleContext {
 		public TerminalNode LPAREN() { return getToken(ANTLRv4Parser.LPAREN, 0); }
 		public List<SetElementContext> setElement() {
@@ -3896,6 +3952,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class SetElementContext extends ParserRuleContext {
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv4Parser.TOKEN_REF, 0); }
 		public ElementOptionsContext elementOptions() {
@@ -3989,6 +4046,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class BlockContext extends ParserRuleContext {
 		public TerminalNode LPAREN() { return getToken(ANTLRv4Parser.LPAREN, 0); }
 		public AltListContext altList() {
@@ -4031,7 +4089,7 @@
 			setState(580);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << OPTIONS) | (1L << COLON) | (1L << AT))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 562950490296320L) != 0) {
 				{
 				setState(571);
 				_errHandler.sync(this);
@@ -4079,6 +4137,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class RulerefContext extends ParserRuleContext {
 		public TerminalNode RULE_REF() { return getToken(ANTLRv4Parser.RULE_REF, 0); }
 		public ArgActionBlockContext argActionBlock() {
@@ -4143,6 +4202,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class CharacterRangeContext extends ParserRuleContext {
 		public List<TerminalNode> STRING_LITERAL() { return getTokens(ANTLRv4Parser.STRING_LITERAL); }
 		public TerminalNode STRING_LITERAL(int i) {
@@ -4188,6 +4248,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class TerminalContext extends ParserRuleContext {
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv4Parser.TOKEN_REF, 0); }
 		public ElementOptionsContext elementOptions() {
@@ -4265,6 +4326,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ElementOptionsContext extends ParserRuleContext {
 		public TerminalNode LT() { return getToken(ANTLRv4Parser.LT, 0); }
 		public List<ElementOptionContext> elementOption() {
@@ -4334,6 +4396,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ElementOptionContext extends ParserRuleContext {
 		public List<IdentifierContext> identifier() {
 			return getRuleContexts(IdentifierContext.class);
@@ -4412,6 +4475,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class IdentifierContext extends ParserRuleContext {
 		public TerminalNode RULE_REF() { return getToken(ANTLRv4Parser.RULE_REF, 0); }
 		public TerminalNode TOKEN_REF() { return getToken(ANTLRv4Parser.TOKEN_REF, 0); }
@@ -4460,243 +4524,407 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3?\u0277\4\2\t\2\4"+
-		"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
-		"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
-		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
-		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
-		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
-		",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
-		"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
-		"\4>\t>\4?\t?\4@\t@\4A\tA\3\2\3\2\7\2\u0085\n\2\f\2\16\2\u0088\13\2\3\2"+
-		"\3\2\7\2\u008c\n\2\f\2\16\2\u008f\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4"+
-		"\3\4\3\4\3\4\5\4\u009c\n\4\3\5\3\5\3\5\3\5\3\5\5\5\u00a3\n\5\3\6\3\6\3"+
-		"\6\3\6\7\6\u00a9\n\6\f\6\16\6\u00ac\13\6\3\6\3\6\3\7\3\7\3\7\3\7\3\b\3"+
-		"\b\3\b\7\b\u00b7\n\b\f\b\16\b\u00ba\13\b\3\b\3\b\3\b\5\b\u00bf\n\b\3\t"+
-		"\3\t\3\t\3\t\7\t\u00c5\n\t\f\t\16\t\u00c8\13\t\3\t\3\t\3\n\3\n\3\n\3\n"+
-		"\3\n\5\n\u00d1\n\n\3\13\3\13\5\13\u00d5\n\13\3\13\3\13\3\f\3\f\5\f\u00db"+
-		"\n\f\3\f\3\f\3\r\3\r\3\r\7\r\u00e2\n\r\f\r\16\r\u00e5\13\r\3\r\5\r\u00e8"+
-		"\n\r\3\16\3\16\3\16\3\16\5\16\u00ee\n\16\3\16\3\16\3\16\3\17\3\17\3\17"+
-		"\5\17\u00f6\n\17\3\20\3\20\7\20\u00fa\n\20\f\20\16\20\u00fd\13\20\3\20"+
-		"\3\20\3\21\3\21\7\21\u0103\n\21\f\21\16\21\u0106\13\21\3\21\3\21\3\22"+
-		"\3\22\3\22\3\22\7\22\u010e\n\22\f\22\16\22\u0111\13\22\3\23\7\23\u0114"+
-		"\n\23\f\23\16\23\u0117\13\23\3\24\3\24\5\24\u011b\n\24\3\25\5\25\u011e"+
-		"\n\25\3\25\3\25\5\25\u0122\n\25\3\25\5\25\u0125\n\25\3\25\5\25\u0128\n"+
-		"\25\3\25\5\25\u012b\n\25\3\25\7\25\u012e\n\25\f\25\16\25\u0131\13\25\3"+
-		"\25\3\25\3\25\3\25\3\25\3\26\7\26\u0139\n\26\f\26\16\26\u013c\13\26\3"+
-		"\26\5\26\u013f\n\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3\31\5\31"+
-		"\u014a\n\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\7\33\u0153\n\33\f\33\16"+
-		"\33\u0156\13\33\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\6\36\u0160\n\36"+
-		"\r\36\16\36\u0161\3\37\3\37\3 \3 \3!\3!\3!\7!\u016b\n!\f!\16!\u016e\13"+
-		"!\3\"\3\"\3\"\5\"\u0173\n\"\3#\5#\u0176\n#\3#\3#\5#\u017a\n#\3#\3#\3#"+
-		"\3#\3$\3$\3%\3%\3%\7%\u0185\n%\f%\16%\u0188\13%\3&\3&\5&\u018c\n&\3&\5"+
-		"&\u018f\n&\3\'\6\'\u0192\n\'\r\'\16\'\u0193\3\'\5\'\u0197\n\'\3(\3(\5"+
-		"(\u019b\n(\3(\3(\5(\u019f\n(\3(\3(\5(\u01a3\n(\3(\3(\5(\u01a7\n(\5(\u01a9"+
-		"\n(\3)\3)\3)\3)\5)\u01af\n)\3*\3*\3*\3*\3+\3+\3+\3+\7+\u01b9\n+\f+\16"+
-		"+\u01bc\13+\3,\3,\3,\3,\3,\3,\5,\u01c4\n,\3-\3-\5-\u01c8\n-\3.\3.\5.\u01cc"+
-		"\n.\3/\3/\3/\7/\u01d1\n/\f/\16/\u01d4\13/\3\60\5\60\u01d7\n\60\3\60\6"+
-		"\60\u01da\n\60\r\60\16\60\u01db\3\60\5\60\u01df\n\60\3\61\3\61\3\61\5"+
-		"\61\u01e4\n\61\3\61\3\61\3\61\5\61\u01e9\n\61\3\61\3\61\3\61\5\61\u01ee"+
-		"\n\61\5\61\u01f0\n\61\3\62\3\62\3\62\3\62\5\62\u01f6\n\62\3\63\3\63\5"+
-		"\63\u01fa\n\63\3\64\3\64\3\65\3\65\5\65\u0200\n\65\3\65\3\65\5\65\u0204"+
-		"\n\65\3\65\3\65\5\65\u0208\n\65\5\65\u020a\n\65\3\66\3\66\3\66\3\66\3"+
-		"\66\3\66\5\66\u0212\n\66\5\66\u0214\n\66\3\67\3\67\3\67\3\67\3\67\5\67"+
-		"\u021b\n\67\5\67\u021d\n\67\38\38\38\38\58\u0223\n8\39\39\39\39\79\u0229"+
-		"\n9\f9\169\u022c\139\39\39\3:\3:\5:\u0232\n:\3:\3:\5:\u0236\n:\3:\3:\5"+
-		":\u023a\n:\3;\3;\5;\u023e\n;\3;\7;\u0241\n;\f;\16;\u0244\13;\3;\5;\u0247"+
-		"\n;\3;\3;\3;\3<\3<\5<\u024e\n<\3<\5<\u0251\n<\3=\3=\3=\3=\3>\3>\5>\u0259"+
-		"\n>\3>\3>\5>\u025d\n>\5>\u025f\n>\3?\3?\3?\3?\7?\u0265\n?\f?\16?\u0268"+
-		"\13?\3?\3?\3@\3@\3@\3@\3@\5@\u0271\n@\5@\u0273\n@\3A\3A\3A\2\2B\2\4\6"+
-		"\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRT"+
-		"VXZ\\^`bdfhjlnprtvxz|~\u0080\2\5\4\2\22\22\26\30\4\2**--\3\2\3\4\2\u029d"+
-		"\2\u0082\3\2\2\2\4\u0092\3\2\2\2\6\u009b\3\2\2\2\b\u00a2\3\2\2\2\n\u00a4"+
-		"\3\2\2\2\f\u00af\3\2\2\2\16\u00be\3\2\2\2\20\u00c0\3\2\2\2\22\u00d0\3"+
-		"\2\2\2\24\u00d2\3\2\2\2\26\u00d8\3\2\2\2\30\u00de\3\2\2\2\32\u00e9\3\2"+
-		"\2\2\34\u00f5\3\2\2\2\36\u00f7\3\2\2\2 \u0100\3\2\2\2\"\u0109\3\2\2\2"+
-		"$\u0115\3\2\2\2&\u011a\3\2\2\2(\u011d\3\2\2\2*\u013a\3\2\2\2,\u0140\3"+
-		"\2\2\2.\u0144\3\2\2\2\60\u0149\3\2\2\2\62\u014b\3\2\2\2\64\u014e\3\2\2"+
-		"\2\66\u0157\3\2\2\28\u015a\3\2\2\2:\u015f\3\2\2\2<\u0163\3\2\2\2>\u0165"+
-		"\3\2\2\2@\u0167\3\2\2\2B\u016f\3\2\2\2D\u0175\3\2\2\2F\u017f\3\2\2\2H"+
-		"\u0181\3\2\2\2J\u018e\3\2\2\2L\u0196\3\2\2\2N\u01a8\3\2\2\2P\u01aa\3\2"+
-		"\2\2R\u01b0\3\2\2\2T\u01b4\3\2\2\2V\u01c3\3\2\2\2X\u01c7\3\2\2\2Z\u01cb"+
-		"\3\2\2\2\\\u01cd\3\2\2\2^\u01de\3\2\2\2`\u01ef\3\2\2\2b\u01f1\3\2\2\2"+
-		"d\u01f7\3\2\2\2f\u01fb\3\2\2\2h\u0209\3\2\2\2j\u0213\3\2\2\2l\u021c\3"+
-		"\2\2\2n\u0222\3\2\2\2p\u0224\3\2\2\2r\u0239\3\2\2\2t\u023b\3\2\2\2v\u024b"+
-		"\3\2\2\2x\u0252\3\2\2\2z\u025e\3\2\2\2|\u0260\3\2\2\2~\u0272\3\2\2\2\u0080"+
-		"\u0274\3\2\2\2\u0082\u0086\5\4\3\2\u0083\u0085\5\b\5\2\u0084\u0083\3\2"+
-		"\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087"+
-		"\u0089\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008d\5$\23\2\u008a\u008c\5\""+
-		"\22\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d"+
-		"\u008e\3\2\2\2\u008e\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0091\7\2"+
-		"\2\3\u0091\3\3\2\2\2\u0092\u0093\5\6\4\2\u0093\u0094\5\u0080A\2\u0094"+
-		"\u0095\7\"\2\2\u0095\5\3\2\2\2\u0096\u0097\7\23\2\2\u0097\u009c\7\25\2"+
-		"\2\u0098\u0099\7\24\2\2\u0099\u009c\7\25\2\2\u009a\u009c\7\25\2\2\u009b"+
-		"\u0096\3\2\2\2\u009b\u0098\3\2\2\2\u009b\u009a\3\2\2\2\u009c\7\3\2\2\2"+
-		"\u009d\u00a3\5\n\6\2\u009e\u00a3\5\20\t\2\u009f\u00a3\5\24\13\2\u00a0"+
-		"\u00a3\5\26\f\2\u00a1\u00a3\5\32\16\2\u00a2\u009d\3\2\2\2\u00a2\u009e"+
-		"\3\2\2\2\u00a2\u009f\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a2\u00a1\3\2\2\2\u00a3"+
-		"\t\3\2\2\2\u00a4\u00aa\7\16\2\2\u00a5\u00a6\5\f\7\2\u00a6\u00a7\7\"\2"+
-		"\2\u00a7\u00a9\3\2\2\2\u00a8\u00a5\3\2\2\2\u00a9\u00ac\3\2\2\2\u00aa\u00a8"+
-		"\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ad\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad"+
-		"\u00ae\7&\2\2\u00ae\13\3\2\2\2\u00af\u00b0\5\u0080A\2\u00b0\u00b1\7*\2"+
-		"\2\u00b1\u00b2\5\16\b\2\u00b2\r\3\2\2\2\u00b3\u00b8\5\u0080A\2\u00b4\u00b5"+
-		"\7\62\2\2\u00b5\u00b7\5\u0080A\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba\3\2\2"+
-		"\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bf\3\2\2\2\u00ba\u00b8"+
-		"\3\2\2\2\u00bb\u00bf\7\n\2\2\u00bc\u00bf\5\36\20\2\u00bd\u00bf\7\t\2\2"+
-		"\u00be\u00b3\3\2\2\2\u00be\u00bb\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bd"+
-		"\3\2\2\2\u00bf\17\3\2\2\2\u00c0\u00c1\7\21\2\2\u00c1\u00c6\5\22\n\2\u00c2"+
-		"\u00c3\7!\2\2\u00c3\u00c5\5\22\n\2\u00c4\u00c2\3\2\2\2\u00c5\u00c8\3\2"+
-		"\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c9\3\2\2\2\u00c8"+
-		"\u00c6\3\2\2\2\u00c9\u00ca\7\"\2\2\u00ca\21\3\2\2\2\u00cb\u00cc\5\u0080"+
-		"A\2\u00cc\u00cd\7*\2\2\u00cd\u00ce\5\u0080A\2\u00ce\u00d1\3\2\2\2\u00cf"+
-		"\u00d1\5\u0080A\2\u00d0\u00cb\3\2\2\2\u00d0\u00cf\3\2\2\2\u00d1\23\3\2"+
-		"\2\2\u00d2\u00d4\7\17\2\2\u00d3\u00d5\5\30\r\2\u00d4\u00d3\3\2\2\2\u00d4"+
-		"\u00d5\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d7\7&\2\2\u00d7\25\3\2\2\2"+
-		"\u00d8\u00da\7\20\2\2\u00d9\u00db\5\30\r\2\u00da\u00d9\3\2\2\2\u00da\u00db"+
-		"\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\7&\2\2\u00dd\27\3\2\2\2\u00de"+
-		"\u00e3\5\u0080A\2\u00df\u00e0\7!\2\2\u00e0\u00e2\5\u0080A\2\u00e1\u00df"+
-		"\3\2\2\2\u00e2\u00e5\3\2\2\2\u00e3\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4"+
-		"\u00e7\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e6\u00e8\7!\2\2\u00e7\u00e6\3\2"+
-		"\2\2\u00e7\u00e8\3\2\2\2\u00e8\31\3\2\2\2\u00e9\u00ed\7\63\2\2\u00ea\u00eb"+
-		"\5\34\17\2\u00eb\u00ec\7 \2\2\u00ec\u00ee\3\2\2\2\u00ed\u00ea\3\2\2\2"+
-		"\u00ed\u00ee\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\5\u0080A\2\u00f0"+
-		"\u00f1\5\36\20\2\u00f1\33\3\2\2\2\u00f2\u00f6\5\u0080A\2\u00f3\u00f6\7"+
-		"\23\2\2\u00f4\u00f6\7\24\2\2\u00f5\u00f2\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5"+
-		"\u00f4\3\2\2\2\u00f6\35\3\2\2\2\u00f7\u00fb\7\r\2\2\u00f8\u00fa\7>\2\2"+
-		"\u00f9\u00f8\3\2\2\2\u00fa\u00fd\3\2\2\2\u00fb\u00f9\3\2\2\2\u00fb\u00fc"+
-		"\3\2\2\2\u00fc\u00fe\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fe\u00ff\7<\2\2\u00ff"+
-		"\37\3\2\2\2\u0100\u0104\7\f\2\2\u0101\u0103\7;\2\2\u0102\u0101\3\2\2\2"+
-		"\u0103\u0106\3\2\2\2\u0104\u0102\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0107"+
-		"\3\2\2\2\u0106\u0104\3\2\2\2\u0107\u0108\79\2\2\u0108!\3\2\2\2\u0109\u010a"+
-		"\7\36\2\2\u010a\u010b\5\u0080A\2\u010b\u010f\7\"\2\2\u010c\u010e\5D#\2"+
-		"\u010d\u010c\3\2\2\2\u010e\u0111\3\2\2\2\u010f\u010d\3\2\2\2\u010f\u0110"+
-		"\3\2\2\2\u0110#\3\2\2\2\u0111\u010f\3\2\2\2\u0112\u0114\5&\24\2\u0113"+
-		"\u0112\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2\u0115\u0116\3\2"+
-		"\2\2\u0116%\3\2\2\2\u0117\u0115\3\2\2\2\u0118\u011b\5(\25\2\u0119\u011b"+
-		"\5D#\2\u011a\u0118\3\2\2\2\u011a\u0119\3\2\2\2\u011b\'\3\2\2\2\u011c\u011e"+
-		"\5:\36\2\u011d\u011c\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f\3\2\2\2\u011f"+
-		"\u0121\7\4\2\2\u0120\u0122\5 \21\2\u0121\u0120\3\2\2\2\u0121\u0122\3\2"+
-		"\2\2\u0122\u0124\3\2\2\2\u0123\u0125\5\62\32\2\u0124\u0123\3\2\2\2\u0124"+
-		"\u0125\3\2\2\2\u0125\u0127\3\2\2\2\u0126\u0128\5\64\33\2\u0127\u0126\3"+
-		"\2\2\2\u0127\u0128\3\2\2\2\u0128\u012a\3\2\2\2\u0129\u012b\5\66\34\2\u012a"+
-		"\u0129\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012f\3\2\2\2\u012c\u012e\5\60"+
-		"\31\2\u012d\u012c\3\2\2\2\u012e\u0131\3\2\2\2\u012f\u012d\3\2\2\2\u012f"+
-		"\u0130\3\2\2\2\u0130\u0132\3\2\2\2\u0131\u012f\3\2\2\2\u0132\u0133\7\37"+
-		"\2\2\u0133\u0134\5> \2\u0134\u0135\7\"\2\2\u0135\u0136\5*\26\2\u0136)"+
-		"\3\2\2\2\u0137\u0139\5,\27\2\u0138\u0137\3\2\2\2\u0139\u013c\3\2\2\2\u013a"+
-		"\u0138\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u013e\3\2\2\2\u013c\u013a\3\2"+
-		"\2\2\u013d\u013f\5.\30\2\u013e\u013d\3\2\2\2\u013e\u013f\3\2\2\2\u013f"+
-		"+\3\2\2\2\u0140\u0141\7\34\2\2\u0141\u0142\5 \21\2\u0142\u0143\5\36\20"+
-		"\2\u0143-\3\2\2\2\u0144\u0145\7\35\2\2\u0145\u0146\5\36\20\2\u0146/\3"+
-		"\2\2\2\u0147\u014a\5\n\6\2\u0148\u014a\58\35\2\u0149\u0147\3\2\2\2\u0149"+
-		"\u0148\3\2\2\2\u014a\61\3\2\2\2\u014b\u014c\7\31\2\2\u014c\u014d\5 \21"+
-		"\2\u014d\63\3\2\2\2\u014e\u014f\7\33\2\2\u014f\u0154\5\u0080A\2\u0150"+
-		"\u0151\7!\2\2\u0151\u0153\5\u0080A\2\u0152\u0150\3\2\2\2\u0153\u0156\3"+
-		"\2\2\2\u0154\u0152\3\2\2\2\u0154\u0155\3\2\2\2\u0155\65\3\2\2\2\u0156"+
-		"\u0154\3\2\2\2\u0157\u0158\7\32\2\2\u0158\u0159\5 \21\2\u0159\67\3\2\2"+
-		"\2\u015a\u015b\7\63\2\2\u015b\u015c\5\u0080A\2\u015c\u015d\5\36\20\2\u015d"+
-		"9\3\2\2\2\u015e\u0160\5<\37\2\u015f\u015e\3\2\2\2\u0160\u0161\3\2\2\2"+
-		"\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162;\3\2\2\2\u0163\u0164\t"+
-		"\2\2\2\u0164=\3\2\2\2\u0165\u0166\5@!\2\u0166?\3\2\2\2\u0167\u016c\5B"+
-		"\"\2\u0168\u0169\7/\2\2\u0169\u016b\5B\"\2\u016a\u0168\3\2\2\2\u016b\u016e"+
-		"\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016d\3\2\2\2\u016dA\3\2\2\2\u016e"+
-		"\u016c\3\2\2\2\u016f\u0172\5^\60\2\u0170\u0171\7\64\2\2\u0171\u0173\5"+
-		"\u0080A\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2\2\2\u0173C\3\2\2\2\u0174"+
-		"\u0176\7\22\2\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0177\3"+
-		"\2\2\2\u0177\u0179\7\3\2\2\u0178\u017a\5\n\6\2\u0179\u0178\3\2\2\2\u0179"+
-		"\u017a\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u017c\7\37\2\2\u017c\u017d\5"+
-		"F$\2\u017d\u017e\7\"\2\2\u017eE\3\2\2\2\u017f\u0180\5H%\2\u0180G\3\2\2"+
-		"\2\u0181\u0186\5J&\2\u0182\u0183\7/\2\2\u0183\u0185\5J&\2\u0184\u0182"+
-		"\3\2\2\2\u0185\u0188\3\2\2\2\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187"+
-		"I\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u018b\5L\'\2\u018a\u018c\5T+\2\u018b"+
-		"\u018a\3\2\2\2\u018b\u018c\3\2\2\2\u018c\u018f\3\2\2\2\u018d\u018f\3\2"+
-		"\2\2\u018e\u0189\3\2\2\2\u018e\u018d\3\2\2\2\u018fK\3\2\2\2\u0190\u0192"+
-		"\5N(\2\u0191\u0190\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0191\3\2\2\2\u0193"+
-		"\u0194\3\2\2\2\u0194\u0197\3\2\2\2\u0195\u0197\3\2\2\2\u0196\u0191\3\2"+
-		"\2\2\u0196\u0195\3\2\2\2\u0197M\3\2\2\2\u0198\u019a\5P)\2\u0199\u019b"+
-		"\5h\65\2\u019a\u0199\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u01a9\3\2\2\2\u019c"+
-		"\u019e\5j\66\2\u019d\u019f\5h\65\2\u019e\u019d\3\2\2\2\u019e\u019f\3\2"+
-		"\2\2\u019f\u01a9\3\2\2\2\u01a0\u01a2\5R*\2\u01a1\u01a3\5h\65\2\u01a2\u01a1"+
-		"\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a9\3\2\2\2\u01a4\u01a6\5\36\20\2"+
-		"\u01a5\u01a7\7+\2\2\u01a6\u01a5\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9"+
-		"\3\2\2\2\u01a8\u0198\3\2\2\2\u01a8\u019c\3\2\2\2\u01a8\u01a0\3\2\2\2\u01a8"+
-		"\u01a4\3\2\2\2\u01a9O\3\2\2\2\u01aa\u01ab\5\u0080A\2\u01ab\u01ae\t\3\2"+
-		"\2\u01ac\u01af\5j\66\2\u01ad\u01af\5R*\2\u01ae\u01ac\3\2\2\2\u01ae\u01ad"+
-		"\3\2\2\2\u01afQ\3\2\2\2\u01b0\u01b1\7#\2\2\u01b1\u01b2\5H%\2\u01b2\u01b3"+
-		"\7$\2\2\u01b3S\3\2\2\2\u01b4\u01b5\7\'\2\2\u01b5\u01ba\5V,\2\u01b6\u01b7"+
-		"\7!\2\2\u01b7\u01b9\5V,\2\u01b8\u01b6\3\2\2\2\u01b9\u01bc\3\2\2\2\u01ba"+
-		"\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bbU\3\2\2\2\u01bc\u01ba\3\2\2\2"+
-		"\u01bd\u01be\5X-\2\u01be\u01bf\7#\2\2\u01bf\u01c0\5Z.\2\u01c0\u01c1\7"+
-		"$\2\2\u01c1\u01c4\3\2\2\2\u01c2\u01c4\5X-\2\u01c3\u01bd\3\2\2\2\u01c3"+
-		"\u01c2\3\2\2\2\u01c4W\3\2\2\2\u01c5\u01c8\5\u0080A\2\u01c6\u01c8\7\36"+
-		"\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c6\3\2\2\2\u01c8Y\3\2\2\2\u01c9\u01cc"+
-		"\5\u0080A\2\u01ca\u01cc\7\t\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01ca\3\2\2"+
-		"\2\u01cc[\3\2\2\2\u01cd\u01d2\5^\60\2\u01ce\u01cf\7/\2\2\u01cf\u01d1\5"+
-		"^\60\2\u01d0\u01ce\3\2\2\2\u01d1\u01d4\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d2"+
-		"\u01d3\3\2\2\2\u01d3]\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d7\5|?\2\u01d6"+
-		"\u01d5\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3\2\2\2\u01d8\u01da\5`"+
-		"\61\2\u01d9\u01d8\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01d9\3\2\2\2\u01db"+
-		"\u01dc\3\2\2\2\u01dc\u01df\3\2\2\2\u01dd\u01df\3\2\2\2\u01de\u01d6\3\2"+
-		"\2\2\u01de\u01dd\3\2\2\2\u01df_\3\2\2\2\u01e0\u01e3\5b\62\2\u01e1\u01e4"+
-		"\5h\65\2\u01e2\u01e4\3\2\2\2\u01e3\u01e1\3\2\2\2\u01e3\u01e2\3\2\2\2\u01e4"+
-		"\u01f0\3\2\2\2\u01e5\u01e8\5l\67\2\u01e6\u01e9\5h\65\2\u01e7\u01e9\3\2"+
-		"\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e7\3\2\2\2\u01e9\u01f0\3\2\2\2\u01ea"+
-		"\u01f0\5d\63\2\u01eb\u01ed\5\36\20\2\u01ec\u01ee\7+\2\2\u01ed\u01ec\3"+
-		"\2\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01f0\3\2\2\2\u01ef\u01e0\3\2\2\2\u01ef"+
-		"\u01e5\3\2\2\2\u01ef\u01ea\3\2\2\2\u01ef\u01eb\3\2\2\2\u01f0a\3\2\2\2"+
-		"\u01f1\u01f2\5\u0080A\2\u01f2\u01f5\t\3\2\2\u01f3\u01f6\5l\67\2\u01f4"+
-		"\u01f6\5t;\2\u01f5\u01f3\3\2\2\2\u01f5\u01f4\3\2\2\2\u01f6c\3\2\2\2\u01f7"+
-		"\u01f9\5t;\2\u01f8\u01fa\5f\64\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa\3\2\2"+
-		"\2\u01fae\3\2\2\2\u01fb\u01fc\5h\65\2\u01fcg\3\2\2\2\u01fd\u01ff\7+\2"+
-		"\2\u01fe\u0200\7+\2\2\u01ff\u01fe\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u020a"+
-		"\3\2\2\2\u0201\u0203\7,\2\2\u0202\u0204\7+\2\2\u0203\u0202\3\2\2\2\u0203"+
-		"\u0204\3\2\2\2\u0204\u020a\3\2\2\2\u0205\u0207\7.\2\2\u0206\u0208\7+\2"+
-		"\2\u0207\u0206\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u020a\3\2\2\2\u0209\u01fd"+
-		"\3\2\2\2\u0209\u0201\3\2\2\2\u0209\u0205\3\2\2\2\u020ai\3\2\2\2\u020b"+
-		"\u0214\5x=\2\u020c\u0214\5z>\2\u020d\u0214\5n8\2\u020e\u0214\7\5\2\2\u020f"+
-		"\u0211\7\62\2\2\u0210\u0212\5|?\2\u0211\u0210\3\2\2\2\u0211\u0212\3\2"+
-		"\2\2\u0212\u0214\3\2\2\2\u0213\u020b\3\2\2\2\u0213\u020c\3\2\2\2\u0213"+
-		"\u020d\3\2\2\2\u0213\u020e\3\2\2\2\u0213\u020f\3\2\2\2\u0214k\3\2\2\2"+
-		"\u0215\u021d\5z>\2\u0216\u021d\5v<\2\u0217\u021d\5n8\2\u0218\u021a\7\62"+
-		"\2\2\u0219\u021b\5|?\2\u021a\u0219\3\2\2\2\u021a\u021b\3\2\2\2\u021b\u021d"+
-		"\3\2\2\2\u021c\u0215\3\2\2\2\u021c\u0216\3\2\2\2\u021c\u0217\3\2\2\2\u021c"+
-		"\u0218\3\2\2\2\u021dm\3\2\2\2\u021e\u021f\7\65\2\2\u021f\u0223\5r:\2\u0220"+
-		"\u0221\7\65\2\2\u0221\u0223\5p9\2\u0222\u021e\3\2\2\2\u0222\u0220\3\2"+
-		"\2\2\u0223o\3\2\2\2\u0224\u0225\7#\2\2\u0225\u022a\5r:\2\u0226\u0227\7"+
-		"/\2\2\u0227\u0229\5r:\2\u0228\u0226\3\2\2\2\u0229\u022c\3\2\2\2\u022a"+
-		"\u0228\3\2\2\2\u022a\u022b\3\2\2\2\u022b\u022d\3\2\2\2\u022c\u022a\3\2"+
-		"\2\2\u022d\u022e\7$\2\2\u022eq\3\2\2\2\u022f\u0231\7\3\2\2\u0230\u0232"+
-		"\5|?\2\u0231\u0230\3\2\2\2\u0231\u0232\3\2\2\2\u0232\u023a\3\2\2\2\u0233"+
-		"\u0235\7\n\2\2\u0234\u0236\5|?\2\u0235\u0234\3\2\2\2\u0235\u0236\3\2\2"+
-		"\2\u0236\u023a\3\2\2\2\u0237\u023a\5x=\2\u0238\u023a\7\5\2\2\u0239\u022f"+
-		"\3\2\2\2\u0239\u0233\3\2\2\2\u0239\u0237\3\2\2\2\u0239\u0238\3\2\2\2\u023a"+
-		"s\3\2\2\2\u023b\u0246\7#\2\2\u023c\u023e\5\n\6\2\u023d\u023c\3\2\2\2\u023d"+
-		"\u023e\3\2\2\2\u023e\u0242\3\2\2\2\u023f\u0241\58\35\2\u0240\u023f\3\2"+
-		"\2\2\u0241\u0244\3\2\2\2\u0242\u0240\3\2\2\2\u0242\u0243\3\2\2\2\u0243"+
-		"\u0245\3\2\2\2\u0244\u0242\3\2\2\2\u0245\u0247\7\37\2\2\u0246\u023d\3"+
-		"\2\2\2\u0246\u0247\3\2\2\2\u0247\u0248\3\2\2\2\u0248\u0249\5\\/\2\u0249"+
-		"\u024a\7$\2\2\u024au\3\2\2\2\u024b\u024d\7\4\2\2\u024c\u024e\5 \21\2\u024d"+
-		"\u024c\3\2\2\2\u024d\u024e\3\2\2\2\u024e\u0250\3\2\2\2\u024f\u0251\5|"+
-		"?\2\u0250\u024f\3\2\2\2\u0250\u0251\3\2\2\2\u0251w\3\2\2\2\u0252\u0253"+
-		"\7\n\2\2\u0253\u0254\7\61\2\2\u0254\u0255\7\n\2\2\u0255y\3\2\2\2\u0256"+
-		"\u0258\7\3\2\2\u0257\u0259\5|?\2\u0258\u0257\3\2\2\2\u0258\u0259\3\2\2"+
-		"\2\u0259\u025f\3\2\2\2\u025a\u025c\7\n\2\2\u025b\u025d\5|?\2\u025c\u025b"+
-		"\3\2\2\2\u025c\u025d\3\2\2\2\u025d\u025f\3\2\2\2\u025e\u0256\3\2\2\2\u025e"+
-		"\u025a\3\2\2\2\u025f{\3\2\2\2\u0260\u0261\7(\2\2\u0261\u0266\5~@\2\u0262"+
-		"\u0263\7!\2\2\u0263\u0265\5~@\2\u0264\u0262\3\2\2\2\u0265\u0268\3\2\2"+
-		"\2\u0266\u0264\3\2\2\2\u0266\u0267\3\2\2\2\u0267\u0269\3\2\2\2\u0268\u0266"+
-		"\3\2\2\2\u0269\u026a\7)\2\2\u026a}\3\2\2\2\u026b\u0273\5\u0080A\2\u026c"+
-		"\u026d\5\u0080A\2\u026d\u0270\7*\2\2\u026e\u0271\5\u0080A\2\u026f\u0271"+
-		"\7\n\2\2\u0270\u026e\3\2\2\2\u0270\u026f\3\2\2\2\u0271\u0273\3\2\2\2\u0272"+
-		"\u026b\3\2\2\2\u0272\u026c\3\2\2\2\u0273\177\3\2\2\2\u0274\u0275\t\4\2"+
-		"\2\u0275\u0081\3\2\2\2V\u0086\u008d\u009b\u00a2\u00aa\u00b8\u00be\u00c6"+
-		"\u00d0\u00d4\u00da\u00e3\u00e7\u00ed\u00f5\u00fb\u0104\u010f\u0115\u011a"+
-		"\u011d\u0121\u0124\u0127\u012a\u012f\u013a\u013e\u0149\u0154\u0161\u016c"+
-		"\u0172\u0175\u0179\u0186\u018b\u018e\u0193\u0196\u019a\u019e\u01a2\u01a6"+
-		"\u01a8\u01ae\u01ba\u01c3\u01c7\u01cb\u01d2\u01d6\u01db\u01de\u01e3\u01e8"+
-		"\u01ed\u01ef\u01f5\u01f9\u01ff\u0203\u0207\u0209\u0211\u0213\u021a\u021c"+
-		"\u0222\u022a\u0231\u0235\u0239\u023d\u0242\u0246\u024d\u0250\u0258\u025c"+
-		"\u025e\u0266\u0270\u0272";
+		"\u0004\u0001=\u0275\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
+		"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
+		"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
+		"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
+		"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
+		"\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
+		"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
+		"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
+		"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
+		"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
+		"#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
+		"(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+
+		"-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+
+		"2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+
+		"7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+
+		"<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0001\u0000\u0001\u0000"+
+		"\u0005\u0000\u0083\b\u0000\n\u0000\f\u0000\u0086\t\u0000\u0001\u0000\u0001"+
+		"\u0000\u0005\u0000\u008a\b\u0000\n\u0000\f\u0000\u008d\t\u0000\u0001\u0000"+
+		"\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002"+
+		"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u009a\b\u0002"+
+		"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003"+
+		"\u00a1\b\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0005\u0004"+
+		"\u00a7\b\u0004\n\u0004\f\u0004\u00aa\t\u0004\u0001\u0004\u0001\u0004\u0001"+
+		"\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001"+
+		"\u0006\u0005\u0006\u00b5\b\u0006\n\u0006\f\u0006\u00b8\t\u0006\u0001\u0006"+
+		"\u0001\u0006\u0001\u0006\u0003\u0006\u00bd\b\u0006\u0001\u0007\u0001\u0007"+
+		"\u0001\u0007\u0001\u0007\u0005\u0007\u00c3\b\u0007\n\u0007\f\u0007\u00c6"+
+		"\t\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
+		"\b\u0003\b\u00cf\b\b\u0001\t\u0001\t\u0003\t\u00d3\b\t\u0001\t\u0001\t"+
+		"\u0001\n\u0001\n\u0003\n\u00d9\b\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b"+
+		"\u0001\u000b\u0005\u000b\u00e0\b\u000b\n\u000b\f\u000b\u00e3\t\u000b\u0001"+
+		"\u000b\u0003\u000b\u00e6\b\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0003"+
+		"\f\u00ec\b\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0003\r\u00f4"+
+		"\b\r\u0001\u000e\u0001\u000e\u0005\u000e\u00f8\b\u000e\n\u000e\f\u000e"+
+		"\u00fb\t\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0005\u000f"+
+		"\u0101\b\u000f\n\u000f\f\u000f\u0104\t\u000f\u0001\u000f\u0001\u000f\u0001"+
+		"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005\u0010\u010c\b\u0010\n"+
+		"\u0010\f\u0010\u010f\t\u0010\u0001\u0011\u0005\u0011\u0112\b\u0011\n\u0011"+
+		"\f\u0011\u0115\t\u0011\u0001\u0012\u0001\u0012\u0003\u0012\u0119\b\u0012"+
+		"\u0001\u0013\u0003\u0013\u011c\b\u0013\u0001\u0013\u0001\u0013\u0003\u0013"+
+		"\u0120\b\u0013\u0001\u0013\u0003\u0013\u0123\b\u0013\u0001\u0013\u0003"+
+		"\u0013\u0126\b\u0013\u0001\u0013\u0003\u0013\u0129\b\u0013\u0001\u0013"+
+		"\u0005\u0013\u012c\b\u0013\n\u0013\f\u0013\u012f\t\u0013\u0001\u0013\u0001"+
+		"\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0005\u0014\u0137"+
+		"\b\u0014\n\u0014\f\u0014\u013a\t\u0014\u0001\u0014\u0003\u0014\u013d\b"+
+		"\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+
+		"\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0003\u0017\u0148\b\u0017\u0001"+
+		"\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+		"\u0019\u0005\u0019\u0151\b\u0019\n\u0019\f\u0019\u0154\t\u0019\u0001\u001a"+
+		"\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
+		"\u0001\u001c\u0004\u001c\u015e\b\u001c\u000b\u001c\f\u001c\u015f\u0001"+
+		"\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+
+		"\u001f\u0005\u001f\u0169\b\u001f\n\u001f\f\u001f\u016c\t\u001f\u0001 "+
+		"\u0001 \u0001 \u0003 \u0171\b \u0001!\u0003!\u0174\b!\u0001!\u0001!\u0003"+
+		"!\u0178\b!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001"+
+		"#\u0005#\u0183\b#\n#\f#\u0186\t#\u0001$\u0001$\u0003$\u018a\b$\u0001$"+
+		"\u0003$\u018d\b$\u0001%\u0004%\u0190\b%\u000b%\f%\u0191\u0001%\u0003%"+
+		"\u0195\b%\u0001&\u0001&\u0003&\u0199\b&\u0001&\u0001&\u0003&\u019d\b&"+
+		"\u0001&\u0001&\u0003&\u01a1\b&\u0001&\u0001&\u0003&\u01a5\b&\u0003&\u01a7"+
+		"\b&\u0001\'\u0001\'\u0001\'\u0001\'\u0003\'\u01ad\b\'\u0001(\u0001(\u0001"+
+		"(\u0001(\u0001)\u0001)\u0001)\u0001)\u0005)\u01b7\b)\n)\f)\u01ba\t)\u0001"+
+		"*\u0001*\u0001*\u0001*\u0001*\u0001*\u0003*\u01c2\b*\u0001+\u0001+\u0003"+
+		"+\u01c6\b+\u0001,\u0001,\u0003,\u01ca\b,\u0001-\u0001-\u0001-\u0005-\u01cf"+
+		"\b-\n-\f-\u01d2\t-\u0001.\u0003.\u01d5\b.\u0001.\u0004.\u01d8\b.\u000b"+
+		".\f.\u01d9\u0001.\u0003.\u01dd\b.\u0001/\u0001/\u0001/\u0003/\u01e2\b"+
+		"/\u0001/\u0001/\u0001/\u0003/\u01e7\b/\u0001/\u0001/\u0001/\u0003/\u01ec"+
+		"\b/\u0003/\u01ee\b/\u00010\u00010\u00010\u00010\u00030\u01f4\b0\u0001"+
+		"1\u00011\u00031\u01f8\b1\u00012\u00012\u00013\u00013\u00033\u01fe\b3\u0001"+
+		"3\u00013\u00033\u0202\b3\u00013\u00013\u00033\u0206\b3\u00033\u0208\b"+
+		"3\u00014\u00014\u00014\u00014\u00014\u00014\u00034\u0210\b4\u00034\u0212"+
+		"\b4\u00015\u00015\u00015\u00015\u00015\u00035\u0219\b5\u00035\u021b\b"+
+		"5\u00016\u00016\u00016\u00016\u00036\u0221\b6\u00017\u00017\u00017\u0001"+
+		"7\u00057\u0227\b7\n7\f7\u022a\t7\u00017\u00017\u00018\u00018\u00038\u0230"+
+		"\b8\u00018\u00018\u00038\u0234\b8\u00018\u00018\u00038\u0238\b8\u0001"+
+		"9\u00019\u00039\u023c\b9\u00019\u00059\u023f\b9\n9\f9\u0242\t9\u00019"+
+		"\u00039\u0245\b9\u00019\u00019\u00019\u0001:\u0001:\u0003:\u024c\b:\u0001"+
+		":\u0003:\u024f\b:\u0001;\u0001;\u0001;\u0001;\u0001<\u0001<\u0003<\u0257"+
+		"\b<\u0001<\u0001<\u0003<\u025b\b<\u0003<\u025d\b<\u0001=\u0001=\u0001"+
+		"=\u0001=\u0005=\u0263\b=\n=\f=\u0266\t=\u0001=\u0001=\u0001>\u0001>\u0001"+
+		">\u0001>\u0001>\u0003>\u026f\b>\u0003>\u0271\b>\u0001?\u0001?\u0001?\u0000"+
+		"\u0000@\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018"+
+		"\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0000"+
+		"\u0003\u0002\u0000\u0010\u0010\u0014\u0016\u0002\u0000((++\u0001\u0000"+
+		"\u0001\u0002\u029b\u0000\u0080\u0001\u0000\u0000\u0000\u0002\u0090\u0001"+
+		"\u0000\u0000\u0000\u0004\u0099\u0001\u0000\u0000\u0000\u0006\u00a0\u0001"+
+		"\u0000\u0000\u0000\b\u00a2\u0001\u0000\u0000\u0000\n\u00ad\u0001\u0000"+
+		"\u0000\u0000\f\u00bc\u0001\u0000\u0000\u0000\u000e\u00be\u0001\u0000\u0000"+
+		"\u0000\u0010\u00ce\u0001\u0000\u0000\u0000\u0012\u00d0\u0001\u0000\u0000"+
+		"\u0000\u0014\u00d6\u0001\u0000\u0000\u0000\u0016\u00dc\u0001\u0000\u0000"+
+		"\u0000\u0018\u00e7\u0001\u0000\u0000\u0000\u001a\u00f3\u0001\u0000\u0000"+
+		"\u0000\u001c\u00f5\u0001\u0000\u0000\u0000\u001e\u00fe\u0001\u0000\u0000"+
+		"\u0000 \u0107\u0001\u0000\u0000\u0000\"\u0113\u0001\u0000\u0000\u0000"+
+		"$\u0118\u0001\u0000\u0000\u0000&\u011b\u0001\u0000\u0000\u0000(\u0138"+
+		"\u0001\u0000\u0000\u0000*\u013e\u0001\u0000\u0000\u0000,\u0142\u0001\u0000"+
+		"\u0000\u0000.\u0147\u0001\u0000\u0000\u00000\u0149\u0001\u0000\u0000\u0000"+
+		"2\u014c\u0001\u0000\u0000\u00004\u0155\u0001\u0000\u0000\u00006\u0158"+
+		"\u0001\u0000\u0000\u00008\u015d\u0001\u0000\u0000\u0000:\u0161\u0001\u0000"+
+		"\u0000\u0000<\u0163\u0001\u0000\u0000\u0000>\u0165\u0001\u0000\u0000\u0000"+
+		"@\u016d\u0001\u0000\u0000\u0000B\u0173\u0001\u0000\u0000\u0000D\u017d"+
+		"\u0001\u0000\u0000\u0000F\u017f\u0001\u0000\u0000\u0000H\u018c\u0001\u0000"+
+		"\u0000\u0000J\u0194\u0001\u0000\u0000\u0000L\u01a6\u0001\u0000\u0000\u0000"+
+		"N\u01a8\u0001\u0000\u0000\u0000P\u01ae\u0001\u0000\u0000\u0000R\u01b2"+
+		"\u0001\u0000\u0000\u0000T\u01c1\u0001\u0000\u0000\u0000V\u01c5\u0001\u0000"+
+		"\u0000\u0000X\u01c9\u0001\u0000\u0000\u0000Z\u01cb\u0001\u0000\u0000\u0000"+
+		"\\\u01dc\u0001\u0000\u0000\u0000^\u01ed\u0001\u0000\u0000\u0000`\u01ef"+
+		"\u0001\u0000\u0000\u0000b\u01f5\u0001\u0000\u0000\u0000d\u01f9\u0001\u0000"+
+		"\u0000\u0000f\u0207\u0001\u0000\u0000\u0000h\u0211\u0001\u0000\u0000\u0000"+
+		"j\u021a\u0001\u0000\u0000\u0000l\u0220\u0001\u0000\u0000\u0000n\u0222"+
+		"\u0001\u0000\u0000\u0000p\u0237\u0001\u0000\u0000\u0000r\u0239\u0001\u0000"+
+		"\u0000\u0000t\u0249\u0001\u0000\u0000\u0000v\u0250\u0001\u0000\u0000\u0000"+
+		"x\u025c\u0001\u0000\u0000\u0000z\u025e\u0001\u0000\u0000\u0000|\u0270"+
+		"\u0001\u0000\u0000\u0000~\u0272\u0001\u0000\u0000\u0000\u0080\u0084\u0003"+
+		"\u0002\u0001\u0000\u0081\u0083\u0003\u0006\u0003\u0000\u0082\u0081\u0001"+
+		"\u0000\u0000\u0000\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001"+
+		"\u0000\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001"+
+		"\u0000\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u008b\u0003"+
+		"\"\u0011\u0000\u0088\u008a\u0003 \u0010\u0000\u0089\u0088\u0001\u0000"+
+		"\u0000\u0000\u008a\u008d\u0001\u0000\u0000\u0000\u008b\u0089\u0001\u0000"+
+		"\u0000\u0000\u008b\u008c\u0001\u0000\u0000\u0000\u008c\u008e\u0001\u0000"+
+		"\u0000\u0000\u008d\u008b\u0001\u0000\u0000\u0000\u008e\u008f\u0005\u0000"+
+		"\u0000\u0001\u008f\u0001\u0001\u0000\u0000\u0000\u0090\u0091\u0003\u0004"+
+		"\u0002\u0000\u0091\u0092\u0003~?\u0000\u0092\u0093\u0005 \u0000\u0000"+
+		"\u0093\u0003\u0001\u0000\u0000\u0000\u0094\u0095\u0005\u0011\u0000\u0000"+
+		"\u0095\u009a\u0005\u0013\u0000\u0000\u0096\u0097\u0005\u0012\u0000\u0000"+
+		"\u0097\u009a\u0005\u0013\u0000\u0000\u0098\u009a\u0005\u0013\u0000\u0000"+
+		"\u0099\u0094\u0001\u0000\u0000\u0000\u0099\u0096\u0001\u0000\u0000\u0000"+
+		"\u0099\u0098\u0001\u0000\u0000\u0000\u009a\u0005\u0001\u0000\u0000\u0000"+
+		"\u009b\u00a1\u0003\b\u0004\u0000\u009c\u00a1\u0003\u000e\u0007\u0000\u009d"+
+		"\u00a1\u0003\u0012\t\u0000\u009e\u00a1\u0003\u0014\n\u0000\u009f\u00a1"+
+		"\u0003\u0018\f\u0000\u00a0\u009b\u0001\u0000\u0000\u0000\u00a0\u009c\u0001"+
+		"\u0000\u0000\u0000\u00a0\u009d\u0001\u0000\u0000\u0000\u00a0\u009e\u0001"+
+		"\u0000\u0000\u0000\u00a0\u009f\u0001\u0000\u0000\u0000\u00a1\u0007\u0001"+
+		"\u0000\u0000\u0000\u00a2\u00a8\u0005\f\u0000\u0000\u00a3\u00a4\u0003\n"+
+		"\u0005\u0000\u00a4\u00a5\u0005 \u0000\u0000\u00a5\u00a7\u0001\u0000\u0000"+
+		"\u0000\u00a6\u00a3\u0001\u0000\u0000\u0000\u00a7\u00aa\u0001\u0000\u0000"+
+		"\u0000\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000"+
+		"\u0000\u00a9\u00ab\u0001\u0000\u0000\u0000\u00aa\u00a8\u0001\u0000\u0000"+
+		"\u0000\u00ab\u00ac\u0005$\u0000\u0000\u00ac\t\u0001\u0000\u0000\u0000"+
+		"\u00ad\u00ae\u0003~?\u0000\u00ae\u00af\u0005(\u0000\u0000\u00af\u00b0"+
+		"\u0003\f\u0006\u0000\u00b0\u000b\u0001\u0000\u0000\u0000\u00b1\u00b6\u0003"+
+		"~?\u0000\u00b2\u00b3\u00050\u0000\u0000\u00b3\u00b5\u0003~?\u0000\u00b4"+
+		"\u00b2\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000\u00b6"+
+		"\u00b4\u0001\u0000\u0000\u0000\u00b6\u00b7\u0001\u0000\u0000\u0000\u00b7"+
+		"\u00bd\u0001\u0000\u0000\u0000\u00b8\u00b6\u0001\u0000\u0000\u0000\u00b9"+
+		"\u00bd\u0005\b\u0000\u0000\u00ba\u00bd\u0003\u001c\u000e\u0000\u00bb\u00bd"+
+		"\u0005\u0007\u0000\u0000\u00bc\u00b1\u0001\u0000\u0000\u0000\u00bc\u00b9"+
+		"\u0001\u0000\u0000\u0000\u00bc\u00ba\u0001\u0000\u0000\u0000\u00bc\u00bb"+
+		"\u0001\u0000\u0000\u0000\u00bd\r\u0001\u0000\u0000\u0000\u00be\u00bf\u0005"+
+		"\u000f\u0000\u0000\u00bf\u00c4\u0003\u0010\b\u0000\u00c0\u00c1\u0005\u001f"+
+		"\u0000\u0000\u00c1\u00c3\u0003\u0010\b\u0000\u00c2\u00c0\u0001\u0000\u0000"+
+		"\u0000\u00c3\u00c6\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000"+
+		"\u0000\u00c4\u00c5\u0001\u0000\u0000\u0000\u00c5\u00c7\u0001\u0000\u0000"+
+		"\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c7\u00c8\u0005 \u0000\u0000"+
+		"\u00c8\u000f\u0001\u0000\u0000\u0000\u00c9\u00ca\u0003~?\u0000\u00ca\u00cb"+
+		"\u0005(\u0000\u0000\u00cb\u00cc\u0003~?\u0000\u00cc\u00cf\u0001\u0000"+
+		"\u0000\u0000\u00cd\u00cf\u0003~?\u0000\u00ce\u00c9\u0001\u0000\u0000\u0000"+
+		"\u00ce\u00cd\u0001\u0000\u0000\u0000\u00cf\u0011\u0001\u0000\u0000\u0000"+
+		"\u00d0\u00d2\u0005\r\u0000\u0000\u00d1\u00d3\u0003\u0016\u000b\u0000\u00d2"+
+		"\u00d1\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001\u0000\u0000\u0000\u00d3"+
+		"\u00d4\u0001\u0000\u0000\u0000\u00d4\u00d5\u0005$\u0000\u0000\u00d5\u0013"+
+		"\u0001\u0000\u0000\u0000\u00d6\u00d8\u0005\u000e\u0000\u0000\u00d7\u00d9"+
+		"\u0003\u0016\u000b\u0000\u00d8\u00d7\u0001\u0000\u0000\u0000\u00d8\u00d9"+
+		"\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000\u00da\u00db"+
+		"\u0005$\u0000\u0000\u00db\u0015\u0001\u0000\u0000\u0000\u00dc\u00e1\u0003"+
+		"~?\u0000\u00dd\u00de\u0005\u001f\u0000\u0000\u00de\u00e0\u0003~?\u0000"+
+		"\u00df\u00dd\u0001\u0000\u0000\u0000\u00e0\u00e3\u0001\u0000\u0000\u0000"+
+		"\u00e1\u00df\u0001\u0000\u0000\u0000\u00e1\u00e2\u0001\u0000\u0000\u0000"+
+		"\u00e2\u00e5\u0001\u0000\u0000\u0000\u00e3\u00e1\u0001\u0000\u0000\u0000"+
+		"\u00e4\u00e6\u0005\u001f\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000\u0000"+
+		"\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u0017\u0001\u0000\u0000\u0000"+
+		"\u00e7\u00eb\u00051\u0000\u0000\u00e8\u00e9\u0003\u001a\r\u0000\u00e9"+
+		"\u00ea\u0005\u001e\u0000\u0000\u00ea\u00ec\u0001\u0000\u0000\u0000\u00eb"+
+		"\u00e8\u0001\u0000\u0000\u0000\u00eb\u00ec\u0001\u0000\u0000\u0000\u00ec"+
+		"\u00ed\u0001\u0000\u0000\u0000\u00ed\u00ee\u0003~?\u0000\u00ee\u00ef\u0003"+
+		"\u001c\u000e\u0000\u00ef\u0019\u0001\u0000\u0000\u0000\u00f0\u00f4\u0003"+
+		"~?\u0000\u00f1\u00f4\u0005\u0011\u0000\u0000\u00f2\u00f4\u0005\u0012\u0000"+
+		"\u0000\u00f3\u00f0\u0001\u0000\u0000\u0000\u00f3\u00f1\u0001\u0000\u0000"+
+		"\u0000\u00f3\u00f2\u0001\u0000\u0000\u0000\u00f4\u001b\u0001\u0000\u0000"+
+		"\u0000\u00f5\u00f9\u0005\u000b\u0000\u0000\u00f6\u00f8\u0005<\u0000\u0000"+
+		"\u00f7\u00f6\u0001\u0000\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000"+
+		"\u00f9\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000"+
+		"\u00fa\u00fc\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000"+
+		"\u00fc\u00fd\u0005:\u0000\u0000\u00fd\u001d\u0001\u0000\u0000\u0000\u00fe"+
+		"\u0102\u0005\n\u0000\u0000\u00ff\u0101\u00059\u0000\u0000\u0100\u00ff"+
+		"\u0001\u0000\u0000\u0000\u0101\u0104\u0001\u0000\u0000\u0000\u0102\u0100"+
+		"\u0001\u0000\u0000\u0000\u0102\u0103\u0001\u0000\u0000\u0000\u0103\u0105"+
+		"\u0001\u0000\u0000\u0000\u0104\u0102\u0001\u0000\u0000\u0000\u0105\u0106"+
+		"\u00057\u0000\u0000\u0106\u001f\u0001\u0000\u0000\u0000\u0107\u0108\u0005"+
+		"\u001c\u0000\u0000\u0108\u0109\u0003~?\u0000\u0109\u010d\u0005 \u0000"+
+		"\u0000\u010a\u010c\u0003B!\u0000\u010b\u010a\u0001\u0000\u0000\u0000\u010c"+
+		"\u010f\u0001\u0000\u0000\u0000\u010d\u010b\u0001\u0000\u0000\u0000\u010d"+
+		"\u010e\u0001\u0000\u0000\u0000\u010e!\u0001\u0000\u0000\u0000\u010f\u010d"+
+		"\u0001\u0000\u0000\u0000\u0110\u0112\u0003$\u0012\u0000\u0111\u0110\u0001"+
+		"\u0000\u0000\u0000\u0112\u0115\u0001\u0000\u0000\u0000\u0113\u0111\u0001"+
+		"\u0000\u0000\u0000\u0113\u0114\u0001\u0000\u0000\u0000\u0114#\u0001\u0000"+
+		"\u0000\u0000\u0115\u0113\u0001\u0000\u0000\u0000\u0116\u0119\u0003&\u0013"+
+		"\u0000\u0117\u0119\u0003B!\u0000\u0118\u0116\u0001\u0000\u0000\u0000\u0118"+
+		"\u0117\u0001\u0000\u0000\u0000\u0119%\u0001\u0000\u0000\u0000\u011a\u011c"+
+		"\u00038\u001c\u0000\u011b\u011a\u0001\u0000\u0000\u0000\u011b\u011c\u0001"+
+		"\u0000\u0000\u0000\u011c\u011d\u0001\u0000\u0000\u0000\u011d\u011f\u0005"+
+		"\u0002\u0000\u0000\u011e\u0120\u0003\u001e\u000f\u0000\u011f\u011e\u0001"+
+		"\u0000\u0000\u0000\u011f\u0120\u0001\u0000\u0000\u0000\u0120\u0122\u0001"+
+		"\u0000\u0000\u0000\u0121\u0123\u00030\u0018\u0000\u0122\u0121\u0001\u0000"+
+		"\u0000\u0000\u0122\u0123\u0001\u0000\u0000\u0000\u0123\u0125\u0001\u0000"+
+		"\u0000\u0000\u0124\u0126\u00032\u0019\u0000\u0125\u0124\u0001\u0000\u0000"+
+		"\u0000\u0125\u0126\u0001\u0000\u0000\u0000\u0126\u0128\u0001\u0000\u0000"+
+		"\u0000\u0127\u0129\u00034\u001a\u0000\u0128\u0127\u0001\u0000\u0000\u0000"+
+		"\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012d\u0001\u0000\u0000\u0000"+
+		"\u012a\u012c\u0003.\u0017\u0000\u012b\u012a\u0001\u0000\u0000\u0000\u012c"+
+		"\u012f\u0001\u0000\u0000\u0000\u012d\u012b\u0001\u0000\u0000\u0000\u012d"+
+		"\u012e\u0001\u0000\u0000\u0000\u012e\u0130\u0001\u0000\u0000\u0000\u012f"+
+		"\u012d\u0001\u0000\u0000\u0000\u0130\u0131\u0005\u001d\u0000\u0000\u0131"+
+		"\u0132\u0003<\u001e\u0000\u0132\u0133\u0005 \u0000\u0000\u0133\u0134\u0003"+
+		"(\u0014\u0000\u0134\'\u0001\u0000\u0000\u0000\u0135\u0137\u0003*\u0015"+
+		"\u0000\u0136\u0135\u0001\u0000\u0000\u0000\u0137\u013a\u0001\u0000\u0000"+
+		"\u0000\u0138\u0136\u0001\u0000\u0000\u0000\u0138\u0139\u0001\u0000\u0000"+
+		"\u0000\u0139\u013c\u0001\u0000\u0000\u0000\u013a\u0138\u0001\u0000\u0000"+
+		"\u0000\u013b\u013d\u0003,\u0016\u0000\u013c\u013b\u0001\u0000\u0000\u0000"+
+		"\u013c\u013d\u0001\u0000\u0000\u0000\u013d)\u0001\u0000\u0000\u0000\u013e"+
+		"\u013f\u0005\u001a\u0000\u0000\u013f\u0140\u0003\u001e\u000f\u0000\u0140"+
+		"\u0141\u0003\u001c\u000e\u0000\u0141+\u0001\u0000\u0000\u0000\u0142\u0143"+
+		"\u0005\u001b\u0000\u0000\u0143\u0144\u0003\u001c\u000e\u0000\u0144-\u0001"+
+		"\u0000\u0000\u0000\u0145\u0148\u0003\b\u0004\u0000\u0146\u0148\u00036"+
+		"\u001b\u0000\u0147\u0145\u0001\u0000\u0000\u0000\u0147\u0146\u0001\u0000"+
+		"\u0000\u0000\u0148/\u0001\u0000\u0000\u0000\u0149\u014a\u0005\u0017\u0000"+
+		"\u0000\u014a\u014b\u0003\u001e\u000f\u0000\u014b1\u0001\u0000\u0000\u0000"+
+		"\u014c\u014d\u0005\u0019\u0000\u0000\u014d\u0152\u0003~?\u0000\u014e\u014f"+
+		"\u0005\u001f\u0000\u0000\u014f\u0151\u0003~?\u0000\u0150\u014e\u0001\u0000"+
+		"\u0000\u0000\u0151\u0154\u0001\u0000\u0000\u0000\u0152\u0150\u0001\u0000"+
+		"\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u01533\u0001\u0000\u0000"+
+		"\u0000\u0154\u0152\u0001\u0000\u0000\u0000\u0155\u0156\u0005\u0018\u0000"+
+		"\u0000\u0156\u0157\u0003\u001e\u000f\u0000\u01575\u0001\u0000\u0000\u0000"+
+		"\u0158\u0159\u00051\u0000\u0000\u0159\u015a\u0003~?\u0000\u015a\u015b"+
+		"\u0003\u001c\u000e\u0000\u015b7\u0001\u0000\u0000\u0000\u015c\u015e\u0003"+
+		":\u001d\u0000\u015d\u015c\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000"+
+		"\u0000\u0000\u015f\u015d\u0001\u0000\u0000\u0000\u015f\u0160\u0001\u0000"+
+		"\u0000\u0000\u01609\u0001\u0000\u0000\u0000\u0161\u0162\u0007\u0000\u0000"+
+		"\u0000\u0162;\u0001\u0000\u0000\u0000\u0163\u0164\u0003>\u001f\u0000\u0164"+
+		"=\u0001\u0000\u0000\u0000\u0165\u016a\u0003@ \u0000\u0166\u0167\u0005"+
+		"-\u0000\u0000\u0167\u0169\u0003@ \u0000\u0168\u0166\u0001\u0000\u0000"+
+		"\u0000\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000\u0000"+
+		"\u0000\u016a\u016b\u0001\u0000\u0000\u0000\u016b?\u0001\u0000\u0000\u0000"+
+		"\u016c\u016a\u0001\u0000\u0000\u0000\u016d\u0170\u0003\\.\u0000\u016e"+
+		"\u016f\u00052\u0000\u0000\u016f\u0171\u0003~?\u0000\u0170\u016e\u0001"+
+		"\u0000\u0000\u0000\u0170\u0171\u0001\u0000\u0000\u0000\u0171A\u0001\u0000"+
+		"\u0000\u0000\u0172\u0174\u0005\u0010\u0000\u0000\u0173\u0172\u0001\u0000"+
+		"\u0000\u0000\u0173\u0174\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000"+
+		"\u0000\u0000\u0175\u0177\u0005\u0001\u0000\u0000\u0176\u0178\u0003\b\u0004"+
+		"\u0000\u0177\u0176\u0001\u0000\u0000\u0000\u0177\u0178\u0001\u0000\u0000"+
+		"\u0000\u0178\u0179\u0001\u0000\u0000\u0000\u0179\u017a\u0005\u001d\u0000"+
+		"\u0000\u017a\u017b\u0003D\"\u0000\u017b\u017c\u0005 \u0000\u0000\u017c"+
+		"C\u0001\u0000\u0000\u0000\u017d\u017e\u0003F#\u0000\u017eE\u0001\u0000"+
+		"\u0000\u0000\u017f\u0184\u0003H$\u0000\u0180\u0181\u0005-\u0000\u0000"+
+		"\u0181\u0183\u0003H$\u0000\u0182\u0180\u0001\u0000\u0000\u0000\u0183\u0186"+
+		"\u0001\u0000\u0000\u0000\u0184\u0182\u0001\u0000\u0000\u0000\u0184\u0185"+
+		"\u0001\u0000\u0000\u0000\u0185G\u0001\u0000\u0000\u0000\u0186\u0184\u0001"+
+		"\u0000\u0000\u0000\u0187\u0189\u0003J%\u0000\u0188\u018a\u0003R)\u0000"+
+		"\u0189\u0188\u0001\u0000\u0000\u0000\u0189\u018a\u0001\u0000\u0000\u0000"+
+		"\u018a\u018d\u0001\u0000\u0000\u0000\u018b\u018d\u0001\u0000\u0000\u0000"+
+		"\u018c\u0187\u0001\u0000\u0000\u0000\u018c\u018b\u0001\u0000\u0000\u0000"+
+		"\u018dI\u0001\u0000\u0000\u0000\u018e\u0190\u0003L&\u0000\u018f\u018e"+
+		"\u0001\u0000\u0000\u0000\u0190\u0191\u0001\u0000\u0000\u0000\u0191\u018f"+
+		"\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192\u0195"+
+		"\u0001\u0000\u0000\u0000\u0193\u0195\u0001\u0000\u0000\u0000\u0194\u018f"+
+		"\u0001\u0000\u0000\u0000\u0194\u0193\u0001\u0000\u0000\u0000\u0195K\u0001"+
+		"\u0000\u0000\u0000\u0196\u0198\u0003N\'\u0000\u0197\u0199\u0003f3\u0000"+
+		"\u0198\u0197\u0001\u0000\u0000\u0000\u0198\u0199\u0001\u0000\u0000\u0000"+
+		"\u0199\u01a7\u0001\u0000\u0000\u0000\u019a\u019c\u0003h4\u0000\u019b\u019d"+
+		"\u0003f3\u0000\u019c\u019b\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000"+
+		"\u0000\u0000\u019d\u01a7\u0001\u0000\u0000\u0000\u019e\u01a0\u0003P(\u0000"+
+		"\u019f\u01a1\u0003f3\u0000\u01a0\u019f\u0001\u0000\u0000\u0000\u01a0\u01a1"+
+		"\u0001\u0000\u0000\u0000\u01a1\u01a7\u0001\u0000\u0000\u0000\u01a2\u01a4"+
+		"\u0003\u001c\u000e\u0000\u01a3\u01a5\u0005)\u0000\u0000\u01a4\u01a3\u0001"+
+		"\u0000\u0000\u0000\u01a4\u01a5\u0001\u0000\u0000\u0000\u01a5\u01a7\u0001"+
+		"\u0000\u0000\u0000\u01a6\u0196\u0001\u0000\u0000\u0000\u01a6\u019a\u0001"+
+		"\u0000\u0000\u0000\u01a6\u019e\u0001\u0000\u0000\u0000\u01a6\u01a2\u0001"+
+		"\u0000\u0000\u0000\u01a7M\u0001\u0000\u0000\u0000\u01a8\u01a9\u0003~?"+
+		"\u0000\u01a9\u01ac\u0007\u0001\u0000\u0000\u01aa\u01ad\u0003h4\u0000\u01ab"+
+		"\u01ad\u0003P(\u0000\u01ac\u01aa\u0001\u0000\u0000\u0000\u01ac\u01ab\u0001"+
+		"\u0000\u0000\u0000\u01adO\u0001\u0000\u0000\u0000\u01ae\u01af\u0005!\u0000"+
+		"\u0000\u01af\u01b0\u0003F#\u0000\u01b0\u01b1\u0005\"\u0000\u0000\u01b1"+
+		"Q\u0001\u0000\u0000\u0000\u01b2\u01b3\u0005%\u0000\u0000\u01b3\u01b8\u0003"+
+		"T*\u0000\u01b4\u01b5\u0005\u001f\u0000\u0000\u01b5\u01b7\u0003T*\u0000"+
+		"\u01b6\u01b4\u0001\u0000\u0000\u0000\u01b7\u01ba\u0001\u0000\u0000\u0000"+
+		"\u01b8\u01b6\u0001\u0000\u0000\u0000\u01b8\u01b9\u0001\u0000\u0000\u0000"+
+		"\u01b9S\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001\u0000\u0000\u0000\u01bb"+
+		"\u01bc\u0003V+\u0000\u01bc\u01bd\u0005!\u0000\u0000\u01bd\u01be\u0003"+
+		"X,\u0000\u01be\u01bf\u0005\"\u0000\u0000\u01bf\u01c2\u0001\u0000\u0000"+
+		"\u0000\u01c0\u01c2\u0003V+\u0000\u01c1\u01bb\u0001\u0000\u0000\u0000\u01c1"+
+		"\u01c0\u0001\u0000\u0000\u0000\u01c2U\u0001\u0000\u0000\u0000\u01c3\u01c6"+
+		"\u0003~?\u0000\u01c4\u01c6\u0005\u001c\u0000\u0000\u01c5\u01c3\u0001\u0000"+
+		"\u0000\u0000\u01c5\u01c4\u0001\u0000\u0000\u0000\u01c6W\u0001\u0000\u0000"+
+		"\u0000\u01c7\u01ca\u0003~?\u0000\u01c8\u01ca\u0005\u0007\u0000\u0000\u01c9"+
+		"\u01c7\u0001\u0000\u0000\u0000\u01c9\u01c8\u0001\u0000\u0000\u0000\u01ca"+
+		"Y\u0001\u0000\u0000\u0000\u01cb\u01d0\u0003\\.\u0000\u01cc\u01cd\u0005"+
+		"-\u0000\u0000\u01cd\u01cf\u0003\\.\u0000\u01ce\u01cc\u0001\u0000\u0000"+
+		"\u0000\u01cf\u01d2\u0001\u0000\u0000\u0000\u01d0\u01ce\u0001\u0000\u0000"+
+		"\u0000\u01d0\u01d1\u0001\u0000\u0000\u0000\u01d1[\u0001\u0000\u0000\u0000"+
+		"\u01d2\u01d0\u0001\u0000\u0000\u0000\u01d3\u01d5\u0003z=\u0000\u01d4\u01d3"+
+		"\u0001\u0000\u0000\u0000\u01d4\u01d5\u0001\u0000\u0000\u0000\u01d5\u01d7"+
+		"\u0001\u0000\u0000\u0000\u01d6\u01d8\u0003^/\u0000\u01d7\u01d6\u0001\u0000"+
+		"\u0000\u0000\u01d8\u01d9\u0001\u0000\u0000\u0000\u01d9\u01d7\u0001\u0000"+
+		"\u0000\u0000\u01d9\u01da\u0001\u0000\u0000\u0000\u01da\u01dd\u0001\u0000"+
+		"\u0000\u0000\u01db\u01dd\u0001\u0000\u0000\u0000\u01dc\u01d4\u0001\u0000"+
+		"\u0000\u0000\u01dc\u01db\u0001\u0000\u0000\u0000\u01dd]\u0001\u0000\u0000"+
+		"\u0000\u01de\u01e1\u0003`0\u0000\u01df\u01e2\u0003f3\u0000\u01e0\u01e2"+
+		"\u0001\u0000\u0000\u0000\u01e1\u01df\u0001\u0000\u0000\u0000\u01e1\u01e0"+
+		"\u0001\u0000\u0000\u0000\u01e2\u01ee\u0001\u0000\u0000\u0000\u01e3\u01e6"+
+		"\u0003j5\u0000\u01e4\u01e7\u0003f3\u0000\u01e5\u01e7\u0001\u0000\u0000"+
+		"\u0000\u01e6\u01e4\u0001\u0000\u0000\u0000\u01e6\u01e5\u0001\u0000\u0000"+
+		"\u0000\u01e7\u01ee\u0001\u0000\u0000\u0000\u01e8\u01ee\u0003b1\u0000\u01e9"+
+		"\u01eb\u0003\u001c\u000e\u0000\u01ea\u01ec\u0005)\u0000\u0000\u01eb\u01ea"+
+		"\u0001\u0000\u0000\u0000\u01eb\u01ec\u0001\u0000\u0000\u0000\u01ec\u01ee"+
+		"\u0001\u0000\u0000\u0000\u01ed\u01de\u0001\u0000\u0000\u0000\u01ed\u01e3"+
+		"\u0001\u0000\u0000\u0000\u01ed\u01e8\u0001\u0000\u0000\u0000\u01ed\u01e9"+
+		"\u0001\u0000\u0000\u0000\u01ee_\u0001\u0000\u0000\u0000\u01ef\u01f0\u0003"+
+		"~?\u0000\u01f0\u01f3\u0007\u0001\u0000\u0000\u01f1\u01f4\u0003j5\u0000"+
+		"\u01f2\u01f4\u0003r9\u0000\u01f3\u01f1\u0001\u0000\u0000\u0000\u01f3\u01f2"+
+		"\u0001\u0000\u0000\u0000\u01f4a\u0001\u0000\u0000\u0000\u01f5\u01f7\u0003"+
+		"r9\u0000\u01f6\u01f8\u0003d2\u0000\u01f7\u01f6\u0001\u0000\u0000\u0000"+
+		"\u01f7\u01f8\u0001\u0000\u0000\u0000\u01f8c\u0001\u0000\u0000\u0000\u01f9"+
+		"\u01fa\u0003f3\u0000\u01fae\u0001\u0000\u0000\u0000\u01fb\u01fd\u0005"+
+		")\u0000\u0000\u01fc\u01fe\u0005)\u0000\u0000\u01fd\u01fc\u0001\u0000\u0000"+
+		"\u0000\u01fd\u01fe\u0001\u0000\u0000\u0000\u01fe\u0208\u0001\u0000\u0000"+
+		"\u0000\u01ff\u0201\u0005*\u0000\u0000\u0200\u0202\u0005)\u0000\u0000\u0201"+
+		"\u0200\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000\u0000\u0202"+
+		"\u0208\u0001\u0000\u0000\u0000\u0203\u0205\u0005,\u0000\u0000\u0204\u0206"+
+		"\u0005)\u0000\u0000\u0205\u0204\u0001\u0000\u0000\u0000\u0205\u0206\u0001"+
+		"\u0000\u0000\u0000\u0206\u0208\u0001\u0000\u0000\u0000\u0207\u01fb\u0001"+
+		"\u0000\u0000\u0000\u0207\u01ff\u0001\u0000\u0000\u0000\u0207\u0203\u0001"+
+		"\u0000\u0000\u0000\u0208g\u0001\u0000\u0000\u0000\u0209\u0212\u0003v;"+
+		"\u0000\u020a\u0212\u0003x<\u0000\u020b\u0212\u0003l6\u0000\u020c\u0212"+
+		"\u0005\u0003\u0000\u0000\u020d\u020f\u00050\u0000\u0000\u020e\u0210\u0003"+
+		"z=\u0000\u020f\u020e\u0001\u0000\u0000\u0000\u020f\u0210\u0001\u0000\u0000"+
+		"\u0000\u0210\u0212\u0001\u0000\u0000\u0000\u0211\u0209\u0001\u0000\u0000"+
+		"\u0000\u0211\u020a\u0001\u0000\u0000\u0000\u0211\u020b\u0001\u0000\u0000"+
+		"\u0000\u0211\u020c\u0001\u0000\u0000\u0000\u0211\u020d\u0001\u0000\u0000"+
+		"\u0000\u0212i\u0001\u0000\u0000\u0000\u0213\u021b\u0003x<\u0000\u0214"+
+		"\u021b\u0003t:\u0000\u0215\u021b\u0003l6\u0000\u0216\u0218\u00050\u0000"+
+		"\u0000\u0217\u0219\u0003z=\u0000\u0218\u0217\u0001\u0000\u0000\u0000\u0218"+
+		"\u0219\u0001\u0000\u0000\u0000\u0219\u021b\u0001\u0000\u0000\u0000\u021a"+
+		"\u0213\u0001\u0000\u0000\u0000\u021a\u0214\u0001\u0000\u0000\u0000\u021a"+
+		"\u0215\u0001\u0000\u0000\u0000\u021a\u0216\u0001\u0000\u0000\u0000\u021b"+
+		"k\u0001\u0000\u0000\u0000\u021c\u021d\u00053\u0000\u0000\u021d\u0221\u0003"+
+		"p8\u0000\u021e\u021f\u00053\u0000\u0000\u021f\u0221\u0003n7\u0000\u0220"+
+		"\u021c\u0001\u0000\u0000\u0000\u0220\u021e\u0001\u0000\u0000\u0000\u0221"+
+		"m\u0001\u0000\u0000\u0000\u0222\u0223\u0005!\u0000\u0000\u0223\u0228\u0003"+
+		"p8\u0000\u0224\u0225\u0005-\u0000\u0000\u0225\u0227\u0003p8\u0000\u0226"+
+		"\u0224\u0001\u0000\u0000\u0000\u0227\u022a\u0001\u0000\u0000\u0000\u0228"+
+		"\u0226\u0001\u0000\u0000\u0000\u0228\u0229\u0001\u0000\u0000\u0000\u0229"+
+		"\u022b\u0001\u0000\u0000\u0000\u022a\u0228\u0001\u0000\u0000\u0000\u022b"+
+		"\u022c\u0005\"\u0000\u0000\u022co\u0001\u0000\u0000\u0000\u022d\u022f"+
+		"\u0005\u0001\u0000\u0000\u022e\u0230\u0003z=\u0000\u022f\u022e\u0001\u0000"+
+		"\u0000\u0000\u022f\u0230\u0001\u0000\u0000\u0000\u0230\u0238\u0001\u0000"+
+		"\u0000\u0000\u0231\u0233\u0005\b\u0000\u0000\u0232\u0234\u0003z=\u0000"+
+		"\u0233\u0232\u0001\u0000\u0000\u0000\u0233\u0234\u0001\u0000\u0000\u0000"+
+		"\u0234\u0238\u0001\u0000\u0000\u0000\u0235\u0238\u0003v;\u0000\u0236\u0238"+
+		"\u0005\u0003\u0000\u0000\u0237\u022d\u0001\u0000\u0000\u0000\u0237\u0231"+
+		"\u0001\u0000\u0000\u0000\u0237\u0235\u0001\u0000\u0000\u0000\u0237\u0236"+
+		"\u0001\u0000\u0000\u0000\u0238q\u0001\u0000\u0000\u0000\u0239\u0244\u0005"+
+		"!\u0000\u0000\u023a\u023c\u0003\b\u0004\u0000\u023b\u023a\u0001\u0000"+
+		"\u0000\u0000\u023b\u023c\u0001\u0000\u0000\u0000\u023c\u0240\u0001\u0000"+
+		"\u0000\u0000\u023d\u023f\u00036\u001b\u0000\u023e\u023d\u0001\u0000\u0000"+
+		"\u0000\u023f\u0242\u0001\u0000\u0000\u0000\u0240\u023e\u0001\u0000\u0000"+
+		"\u0000\u0240\u0241\u0001\u0000\u0000\u0000\u0241\u0243\u0001\u0000\u0000"+
+		"\u0000\u0242\u0240\u0001\u0000\u0000\u0000\u0243\u0245\u0005\u001d\u0000"+
+		"\u0000\u0244\u023b\u0001\u0000\u0000\u0000\u0244\u0245\u0001\u0000\u0000"+
+		"\u0000\u0245\u0246\u0001\u0000\u0000\u0000\u0246\u0247\u0003Z-\u0000\u0247"+
+		"\u0248\u0005\"\u0000\u0000\u0248s\u0001\u0000\u0000\u0000\u0249\u024b"+
+		"\u0005\u0002\u0000\u0000\u024a\u024c\u0003\u001e\u000f\u0000\u024b\u024a"+
+		"\u0001\u0000\u0000\u0000\u024b\u024c\u0001\u0000\u0000\u0000\u024c\u024e"+
+		"\u0001\u0000\u0000\u0000\u024d\u024f\u0003z=\u0000\u024e\u024d\u0001\u0000"+
+		"\u0000\u0000\u024e\u024f\u0001\u0000\u0000\u0000\u024fu\u0001\u0000\u0000"+
+		"\u0000\u0250\u0251\u0005\b\u0000\u0000\u0251\u0252\u0005/\u0000\u0000"+
+		"\u0252\u0253\u0005\b\u0000\u0000\u0253w\u0001\u0000\u0000\u0000\u0254"+
+		"\u0256\u0005\u0001\u0000\u0000\u0255\u0257\u0003z=\u0000\u0256\u0255\u0001"+
+		"\u0000\u0000\u0000\u0256\u0257\u0001\u0000\u0000\u0000\u0257\u025d\u0001"+
+		"\u0000\u0000\u0000\u0258\u025a\u0005\b\u0000\u0000\u0259\u025b\u0003z"+
+		"=\u0000\u025a\u0259\u0001\u0000\u0000\u0000\u025a\u025b\u0001\u0000\u0000"+
+		"\u0000\u025b\u025d\u0001\u0000\u0000\u0000\u025c\u0254\u0001\u0000\u0000"+
+		"\u0000\u025c\u0258\u0001\u0000\u0000\u0000\u025dy\u0001\u0000\u0000\u0000"+
+		"\u025e\u025f\u0005&\u0000\u0000\u025f\u0264\u0003|>\u0000\u0260\u0261"+
+		"\u0005\u001f\u0000\u0000\u0261\u0263\u0003|>\u0000\u0262\u0260\u0001\u0000"+
+		"\u0000\u0000\u0263\u0266\u0001\u0000\u0000\u0000\u0264\u0262\u0001\u0000"+
+		"\u0000\u0000\u0264\u0265\u0001\u0000\u0000\u0000\u0265\u0267\u0001\u0000"+
+		"\u0000\u0000\u0266\u0264\u0001\u0000\u0000\u0000\u0267\u0268\u0005\'\u0000"+
+		"\u0000\u0268{\u0001\u0000\u0000\u0000\u0269\u0271\u0003~?\u0000\u026a"+
+		"\u026b\u0003~?\u0000\u026b\u026e\u0005(\u0000\u0000\u026c\u026f\u0003"+
+		"~?\u0000\u026d\u026f\u0005\b\u0000\u0000\u026e\u026c\u0001\u0000\u0000"+
+		"\u0000\u026e\u026d\u0001\u0000\u0000\u0000\u026f\u0271\u0001\u0000\u0000"+
+		"\u0000\u0270\u0269\u0001\u0000\u0000\u0000\u0270\u026a\u0001\u0000\u0000"+
+		"\u0000\u0271}\u0001\u0000\u0000\u0000\u0272\u0273\u0007\u0002\u0000\u0000"+
+		"\u0273\u007f\u0001\u0000\u0000\u0000T\u0084\u008b\u0099\u00a0\u00a8\u00b6"+
+		"\u00bc\u00c4\u00ce\u00d2\u00d8\u00e1\u00e5\u00eb\u00f3\u00f9\u0102\u010d"+
+		"\u0113\u0118\u011b\u011f\u0122\u0125\u0128\u012d\u0138\u013c\u0147\u0152"+
+		"\u015f\u016a\u0170\u0173\u0177\u0184\u0189\u018c\u0191\u0194\u0198\u019c"+
+		"\u01a0\u01a4\u01a6\u01ac\u01b8\u01c1\u01c5\u01c9\u01d0\u01d4\u01d9\u01dc"+
+		"\u01e1\u01e6\u01eb\u01ed\u01f3\u01f7\u01fd\u0201\u0205\u0207\u020f\u0211"+
+		"\u0218\u021a\u0220\u0228\u022f\u0233\u0237\u023b\u0240\u0244\u024b\u024e"+
+		"\u0256\u025a\u025c\u0264\u026e\u0270";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserBaseListener.java b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserBaseListener.java
index c03504d..9f38676 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserBaseListener.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv4Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
@@ -37,6 +37,7 @@
  * which can be extended to create a listener which only needs to handle a subset
  * of the available methods.
  */
+@SuppressWarnings("CheckReturnValue")
 public class ANTLRv4ParserBaseListener implements ANTLRv4ParserListener {
 	/**
 	 * {@inheritDoc}
diff --git a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserListener.java b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserListener.java
index 80a5bdf..1117207 100644
--- a/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserListener.java
+++ b/java/languages.antlr/src/org/antlr/parser/antlr4/ANTLRv4ParserListener.java
@@ -1,4 +1,4 @@
-// Generated from ANTLRv4Parser.g4 by ANTLR 4.7.2
+// Generated from java-escape by ANTLR 4.11.1
 
 
 /*
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java
deleted file mode 100644
index eec144e..0000000
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.netbeans.modules.languages.antlr;
-
-import org.antlr.v4.runtime.misc.IntegerList;
-import org.netbeans.api.lexer.Token;
-import org.netbeans.spi.lexer.Lexer;
-import org.netbeans.spi.lexer.LexerRestartInfo;
-import org.netbeans.spi.lexer.TokenFactory;
-
-
-/**
- *
- * @author lkishalmi
- */
-public abstract class AbstractAntlrLexer implements Lexer<AntlrTokenId> {
-
-    private final TokenFactory<AntlrTokenId> tokenFactory;
-    protected final org.antlr.v4.runtime.Lexer lexer;
-    private final LexerInputCharStream input;
-
-    public AbstractAntlrLexer(LexerRestartInfo<AntlrTokenId> info, org.antlr.v4.runtime.Lexer lexer) {
-        this.tokenFactory = info.tokenFactory();
-        this.lexer = lexer;
-        this.input = (LexerInputCharStream) lexer.getInputStream();
-        if (info.state() != null) {
-            ((LexerState) info.state()).restore(lexer);
-        }
-        input.markToken();
-    }
-
-
-    @Override
-    public Object state() {
-        return new LexerState(lexer);
-    }
-
-    @Override
-    public void release() {
-    }
-
-    protected final Token<AntlrTokenId> token(AntlrTokenId id) {
-        input.markToken();
-        return tokenFactory.createToken(id);
-    }
-
-    private static class LexerState {
-        final int state;
-        final int mode;
-        final IntegerList modes;
-
-        LexerState(org.antlr.v4.runtime.Lexer lexer) {
-            this.state= lexer.getState();
-
-            this.mode = lexer._mode;
-            this.modes = new IntegerList(lexer._modeStack);
-        }
-
-        public void restore(org.antlr.v4.runtime.Lexer lexer) {
-            lexer.setState(state);
-            lexer._modeStack.addAll(modes);
-            lexer._mode = mode;
-        }
-
-        @Override
-        public String toString() {
-            return String.valueOf(state);
-        }
-
-    }
-}
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrDeclarationFinder.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrDeclarationFinder.java
index f03c81f..0035a4d 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrDeclarationFinder.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrDeclarationFinder.java
@@ -19,7 +19,6 @@
 package org.netbeans.modules.languages.antlr;
 
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Set;
 import javax.swing.text.AbstractDocument;
 import javax.swing.text.Document;
@@ -49,8 +48,17 @@
         ts.moveNext();
         Token<?> token = ts.token();
         String ref = String.valueOf(token.text());
+        FileObject fo = info.getSnapshot().getSource().getFileObject();
         Set<FileObject> scannedFiles = new HashSet<>();
-        return getDeclarationLocation(info.getSnapshot().getSource().getFileObject(), ref, DeclarationLocation.NONE, scannedFiles);
+
+        DeclarationLocation ret = getDeclarationLocation(fo, ref, DeclarationLocation.NONE, scannedFiles);
+        if (ret == DeclarationLocation.NONE) {
+            FileObject rfo = fo.getParent().getFileObject(ref, "g4");
+            if (rfo != null) {
+                ret = new DeclarationFinder.DeclarationLocation(rfo, 0);
+            }
+        }
+        return ret;
     }
 
     @Override
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrParserResult.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrParserResult.java
index 009e288..dd2797d 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrParserResult.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrParserResult.java
@@ -44,6 +44,12 @@
  */
 public abstract class AntlrParserResult<T extends Parser> extends ParserResult {
 
+    public enum GrammarType {
+        UNKNOWN, LEXER, PARSER, MIXED, TREE;
+    }
+    
+    protected GrammarType grammarType = GrammarType.UNKNOWN;
+    
     public final List<DefaultError> errors = new ArrayList<>();
     public final Map<String, Reference> references = new TreeMap<>();
     public final Map<String, List<OffsetRange>> occurrences = new HashMap<>();
@@ -53,7 +59,7 @@
 
     volatile boolean finished = false;
 
-    public static final Reference EOF = new Reference("EOF", OffsetRange.NONE); //NOI18N
+    public static final Reference EOF = new Reference(ReferenceType.TOKEN, "EOF", OffsetRange.NONE); //NOI18N
     
     public AntlrParserResult(Snapshot snapshot) {
         super(snapshot);
@@ -69,14 +75,10 @@
             parser.addParseListener(createFoldListener());
             parser.addParseListener(createReferenceListener());
             parser.addParseListener(createImportListener());
-            evaluateParser(parser);
-
-            // Start a second parsing phase for checking;
-            parser = createParser(getSnapshot());
             parser.addParseListener(createStructureListener());
             parser.addParseListener(createOccurancesListener());
-            parser.addParseListener(createCheckReferences());
             evaluateParser(parser);
+
             finished = true;
         }
         return this;
@@ -97,11 +99,21 @@
         return finished;
     }
 
+    public final GrammarType getGrammarType() {
+        return grammarType;
+    }
+
+    public enum ReferenceType {
+        FRAGMENT, TOKEN, RULE, CHANNEL, MODE
+    }
+    
     public static class Reference {
+        public final ReferenceType type;
         public final String name;
         public final OffsetRange defOffset;
 
-        public Reference(String name, OffsetRange defOffset) {
+        public Reference(ReferenceType type, String name, OffsetRange defOffset) {
+            this.type = type;
             this.name = name;
             this.defOffset = defOffset;
         }
@@ -135,8 +147,6 @@
     protected abstract ParseTreeListener createStructureListener();
     protected abstract ParseTreeListener createOccurancesListener();
 
-    protected abstract ParseTreeListener createCheckReferences();
-
     protected ANTLRErrorListener createErrorListener() {
         return new BaseErrorListener() {
             @Override
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java
index baded59..6b84425 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java
@@ -18,42 +18,34 @@
  */
 package org.netbeans.modules.languages.antlr.v3;
 
+import org.antlr.parser.antlr3.ANTLRv3Lexer;
 import org.netbeans.api.lexer.Token;
 import org.netbeans.spi.lexer.LexerRestartInfo;
 
 import static org.antlr.parser.antlr3.ANTLRv3Lexer.*;
-import org.netbeans.modules.languages.antlr.AbstractAntlrLexer;
 import org.netbeans.modules.languages.antlr.AntlrTokenId;
 import static org.netbeans.modules.languages.antlr.AntlrTokenId.*;
-import org.netbeans.modules.languages.antlr.LexerInputCharStream;
+import org.netbeans.spi.lexer.antlr4.AbstractAntlrLexerBridge;
 
 /**
  *
  * @author lkishalmi
  */
-public final class Antlr3Lexer extends AbstractAntlrLexer {
+public final class Antlr3Lexer extends AbstractAntlrLexerBridge<ANTLRv3Lexer, AntlrTokenId> {
 
 
     public Antlr3Lexer(LexerRestartInfo<AntlrTokenId> info) {
-        super(info, new org.antlr.parser.antlr3.ANTLRv3Lexer(new LexerInputCharStream(info.input())));
+        super(info, ANTLRv3Lexer::new);
     }
 
-    private org.antlr.v4.runtime.Token preFetchedToken = null;
+    @Override
+    public Object state() {
+        return new State(lexer);
+    }
 
     @Override
-    public Token<AntlrTokenId> nextToken() {
-        org.antlr.v4.runtime.Token nextToken;
-        if (preFetchedToken != null) {
-            nextToken = preFetchedToken;
-            lexer.getInputStream().seek(preFetchedToken.getStopIndex() + 1);
-            preFetchedToken = null;
-        } else {
-            nextToken = lexer.nextToken();
-        }
-        if (nextToken.getType() == EOF) {
-            return null;
-        }
-        switch (nextToken.getType()) {
+    protected Token<AntlrTokenId> mapToken(org.antlr.v4.runtime.Token antlrToken) {
+        switch (antlrToken.getType()) {
             case TOKEN_REF:
                 return token(AntlrTokenId.TOKEN);
             case RULE_REF:
@@ -129,16 +121,26 @@
                 return token(WHITESPACE);
 
             case ACTION_CONTENT:
-                preFetchedToken = lexer.nextToken();
-                while (preFetchedToken.getType() == ACTION_CONTENT) {
-                    preFetchedToken = lexer.nextToken();
-                }
-                lexer.getInputStream().seek(preFetchedToken.getStartIndex());
-                return token(ACTION);
+                return groupToken(ACTION, ACTION_CONTENT);
 
             default:
                 return token(ERROR);
         }
     }
 
+    private static class State extends AbstractAntlrLexerBridge.LexerState<ANTLRv3Lexer> {
+        final int currentRuleType;
+
+        public State(ANTLRv3Lexer lexer) {
+            super(lexer);
+            this.currentRuleType = lexer.getCurrentRuleType();
+        }
+
+        @Override
+        public void restore(ANTLRv3Lexer lexer) {
+            super.restore(lexer);
+            lexer.setCurrentRuleType(currentRuleType);
+        }
+
+    }
 }
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3ParserResult.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3ParserResult.java
index 81e01bb..bcdf435 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3ParserResult.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3ParserResult.java
@@ -65,29 +65,28 @@
     protected ParseTreeListener createReferenceListener() {
         return new ANTLRv3ParserBaseListener() {
             @Override
+            public void exitGrammarDef(ANTLRv3Parser.GrammarDefContext ctx) {
+                grammarType = GrammarType.MIXED;
+                if (ctx.LEXER() != null)  grammarType = GrammarType.LEXER;
+                if (ctx.PARSER() != null) grammarType = GrammarType.PARSER;
+                if (ctx.TREE() != null)   grammarType = GrammarType.TREE;
+            }
+            
+            @Override
             public void exitRule_(ANTLRv3Parser.Rule_Context ctx) {
                 Token token = ctx.id_().getStart();
                 OffsetRange range = new OffsetRange(token.getStartIndex(), token.getStopIndex() + 1);
                 String name = token.getText();
-                Reference ref = new Reference(name, range);
+                ReferenceType rtype = Character.isUpperCase(name.charAt(0)) ? ReferenceType.TOKEN : ReferenceType.RULE;
+                rtype = ((rtype == ReferenceType.TOKEN) && (ctx.FRAGMENT() != null)) ? ReferenceType.FRAGMENT : rtype;
+                
+                Reference ref = new Reference(rtype, name, range);
                 references.put(ref.name, ref);
             }
         };
     }
 
     @Override
-    protected ParseTreeListener createCheckReferences() {
-        return new ANTLRv3OccuranceListener((token) -> {
-            String name = token.getText();
-            if (!references.containsKey(name)) {
-                //TODO: It seems the ANTLRv3 Grammar Occurance finder could be a bit smarter
-                //Adding the following line could produce false positives.
-                //errors.add(new DefaultError(null, "Unknown Reference: " + name, null, source, token.getStartIndex(), token.getStopIndex() + 1, Severity.ERROR));
-            }
-        });
-    }
-
-    @Override
     protected ParseTreeListener createImportListener() {
         return new ANTLRv3ParserBaseListener();
     }
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java
index a2a3a98..ac82c13 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java
@@ -18,8 +18,8 @@
  */
 package org.netbeans.modules.languages.antlr.v4;
 
+import java.util.EnumSet;
 import java.util.HashMap;
-import java.util.HashSet;
 import org.netbeans.modules.languages.antlr.*;
 import java.util.Map;
 import java.util.Optional;
@@ -49,7 +49,10 @@
 import org.netbeans.api.annotations.common.StaticResource;
 
 import static org.antlr.parser.antlr4.ANTLRv4Lexer.*;
-import static org.netbeans.modules.languages.antlr.AntlrTokenSequence.DEFAULT_CHANNEL;
+import org.netbeans.modules.languages.antlr.AntlrParserResult.ReferenceType;
+import org.netbeans.spi.lexer.antlr4.AntlrTokenSequence;
+import static org.netbeans.spi.lexer.antlr4.AntlrTokenSequence.DEFAULT_CHANNEL;
+import org.openide.util.NbBundle;
 
 /**
  *
@@ -92,6 +95,11 @@
                 if (fo == null) {
                     return;
                 }
+                AntlrParserResult<?> r = AntlrParser.getParserResult(fo);
+                if (!(r instanceof Antlr4ParserResult)) {
+                    return;
+                }
+                Antlr4ParserResult result = (Antlr4ParserResult) r;
 
                 String prefix = "";
                 adoc.readLock();
@@ -107,6 +115,20 @@
 
                 if (!tokens.isEmpty()) {
 
+                    boolean inRule = false;
+
+                    while (tokens.hasNext() && (tokens.getOffset() < caretOffset)) {
+                        Optional<Token> next = tokens.next();
+                        switch (next.get().getType()) {
+                            case COLON:
+                                inRule = true;
+                                break;
+                            case SEMI:
+                                inRule = false;
+                                break;
+                        }
+                    }
+
                     tokens.seekTo(caretOffset);
                     // Check if we are in a comment (that is filtered out from the token stream)
 
@@ -127,10 +149,11 @@
                             return;
                         }
                         tokens.previous();
-                        lookAround(fo, tokens, caretOffset, prefix, resultSet);
-                    } else {
-                        //Empty grammar so far offer lexer, parser and grammar
-                        addTokens("", caretOffset, resultSet, "lexer", "parser", "grammar");
+                        if (inRule) {
+                            lookInRule(result, tokens, caretOffset, prefix, resultSet);
+                        } else {
+                            lookNonRule(result, tokens, caretOffset, prefix, resultSet);
+                        }
                     }
                 }
             } finally {
@@ -138,17 +161,86 @@
             }
         }
 
-        private void lookAround(FileObject fo, AntlrTokenSequence tokens, int caretOffset, String prefix, CompletionResultSet resultSet) {
+        private void lookInRule(Antlr4ParserResult result, AntlrTokenSequence tokens, int caretOffset, String prefix, CompletionResultSet resultSet) {
+            AntlrParserResult.GrammarType grammarType = result != null ? result.getGrammarType() : AntlrParserResult.GrammarType.UNKNOWN;
+            Optional<Token> opt = tokens.previous(DEFAULT_CHANNEL);
+            Token pt = opt.get();
+            if (((pt.getType() == RULE_REF) || (pt.getType() == TOKEN_REF)) && (caretOffset == pt.getStopIndex() + 1)) {
+                // Could be start of some keywords
+                prefix = pt.getText();
+                opt = tokens.previous(DEFAULT_CHANNEL);
+            }
+            pt = opt.get();
+            // check our previous token
+            switch (pt.getType()) {
+                case RARROW:
+                    //Command: offer 'channel', 'skip', etc...
+                    addTokens(prefix, caretOffset, resultSet, "skip", "more", "type", "channel", "mode", "pushMode", "popMode");
+                    return;
+                case LPAREN:
+                    Optional<Token> lexerCommand = tokens.previous(DEFAULT_CHANNEL);
+                    // We are not necessary in a lexerCommand here, just taking chances
+                    if (lexerCommand.isPresent()) {
+                        switch (lexerCommand.get().getText()) {
+                            case "channel":
+                                addReferences(result, prefix, caretOffset, resultSet, EnumSet.of(ReferenceType.CHANNEL));
+                                return;
+                            case "mode":
+                            case "pushMode":
+                                addReferences(result, prefix, caretOffset, resultSet, EnumSet.of(ReferenceType.MODE));
+                                return;
+                            case "type":
+                                addReferences(result, prefix, caretOffset, resultSet, EnumSet.of(ReferenceType.TOKEN));
+                                return;
+                        }
+                    }
+                // the fall through is intentional, as of betting on lexerCommand did not come through
+                default:
+
+                    EnumSet<ReferenceType> rtypes = EnumSet.noneOf(ReferenceType.class);
+
+                    //Seek to the rule definition we are in
+                    tokens.seekTo(caretOffset);
+                    tokens.previous(COLON);
+
+                    // check the rule definition type: lexer/parser
+                    Optional<Token> ref = tokens.previous(DEFAULT_CHANNEL);
+                    if (ref.isPresent() && (ref.get().getType() == RULE_REF || ref.get().getType() == TOKEN_REF)) {
+                        if (ref.get().getType() == TOKEN_REF) {
+                            rtypes.add(ReferenceType.FRAGMENT);
+                        } else {
+                            rtypes.add(ReferenceType.TOKEN);
+                            rtypes.add(ReferenceType.RULE);
+                            if (grammarType == AntlrParserResult.GrammarType.MIXED) {
+                                rtypes.add(ReferenceType.FRAGMENT);
+                            }
+                        }
+                    } else {
+                        // A bit odd definition, let's rely on the grammarType
+                        if ((grammarType == AntlrParserResult.GrammarType.LEXER) || (grammarType == AntlrParserResult.GrammarType.MIXED)) {
+                            rtypes.add(ReferenceType.FRAGMENT);
+                        }
+                        if ((grammarType == AntlrParserResult.GrammarType.PARSER) || (grammarType == AntlrParserResult.GrammarType.MIXED)) {
+                            rtypes.add(ReferenceType.TOKEN);
+                            rtypes.add(ReferenceType.RULE);
+                        }
+                    }
+                    addReferences(result, prefix, caretOffset, resultSet, rtypes);
+            }
+        }
+
+        private void lookNonRule(Antlr4ParserResult result, AntlrTokenSequence tokens, int caretOffset, String prefix, CompletionResultSet resultSet) {
+            AntlrParserResult.GrammarType grammarType = result != null ? result.getGrammarType() : AntlrParserResult.GrammarType.UNKNOWN;
             Optional<Token> opt = tokens.previous(DEFAULT_CHANNEL);
             if (!opt.isPresent()) {
                 //At the start of the file;
                 Optional<Token> t = tokens.next(DEFAULT_CHANNEL);
                 if (t.isPresent() && t.get().getType() != LEXER) {
                     addTokens(prefix, caretOffset, resultSet, "lexer");
-                }                
+                }
                 if (t.isPresent() && t.get().getType() != PARSER) {
                     addTokens(prefix, caretOffset, resultSet, "parser");
-                }                
+                }
                 if (t.isPresent() && (t.get().getType() != LEXER) && (t.get().getType() != GRAMMAR)) {
                     addTokens(prefix, caretOffset, resultSet, "grammar");
                 }
@@ -165,6 +257,7 @@
                     return;
                 } else {
                     pt = opt.get();
+                    // chack our previous token
                     switch (pt.getType()) {
                         case PARSER:
                         case LEXER:
@@ -174,39 +267,14 @@
                             }
                             return;
 
+                        case FRAGMENT:
                         case SEMI:
                             //Could be the begining of a new rule def.
-                            addTokens(prefix, caretOffset, resultSet, "mode", "fragment");
-                            return;
-                        case RARROW:
-                            //Command: offer 'channel', 'skip', etc...
-                            addTokens(prefix, caretOffset, resultSet, "skip", "more", "type", "channel", "mode", "pushMode", "popMode");
-                            return;
-                        default:
-                            tokens.seekTo(caretOffset);
-                            Optional<Token> semi = tokens.previous(SEMI);
-                            tokens.seekTo(caretOffset);
-                            Optional<Token> colon = tokens.previous(COLON);
-                            if (semi.isPresent() && colon.isPresent()
-                                    && semi.get().getStartIndex() < colon.get().getStartIndex()) {
-                                // we are in lexer/parser ruledef
-                                
-                                Set<FileObject> scanned = new HashSet<>();
-                                Map<String,AntlrParserResult.Reference> matchingRefs = new HashMap<>();
-                                addReferencesForFile(fo, prefix, matchingRefs, scanned);
-                                
-                                int startOffset = caretOffset - prefix.length();
-                                for (AntlrParserResult.Reference ref : matchingRefs.values()) {
-                                    CompletionItem item = CompletionUtilities.newCompletionItemBuilder(ref.name)
-                                            .startOffset(startOffset)
-                                            .leftHtmlText(ref.name)
-                                            .sortText(ref.name)
-                                            .build();
-                                    resultSet.addItem(item);
-                                    
-                                }
+                            if (grammarType != AntlrParserResult.GrammarType.PARSER) {
+                                addTokens(prefix, caretOffset, resultSet, "mode", "fragment");
                             }
-
+                            addUnknownReferences(result, prefix, caretOffset, resultSet);
+                            return;
                     }
 
                 }
@@ -229,33 +297,86 @@
             }
         }
 
-        public void addReferencesForFile(FileObject fo, String prefix, Map<String,AntlrParserResult.Reference> matching, Set<FileObject> scannedFiles) {
-            if (scannedFiles.contains(fo)) {
-                return;
-            }
-            scannedFiles.add(fo);
-
+        @NbBundle.Messages("newRule=<b>new</b>")
+        public void addUnknownReferences(Antlr4ParserResult result, String prefix, int caretOffset, CompletionResultSet resultSet) {
+            int startOffset = caretOffset - prefix.length();
             String mprefix = caseSensitive ? prefix : prefix.toUpperCase();
-
-            AntlrParserResult<?> result = AntlrParser.getParserResult(fo);
-            Map<String, AntlrParserResult.Reference> refs = result.references;
-            for (String ref : refs.keySet()) {
-                String mref = caseSensitive ? ref : ref.toUpperCase();
-                boolean match = mref.startsWith(mprefix);
-                if (match && !matching.containsKey(ref)) {
-                    matching.put(ref, refs.get(ref));
-                }
-            }
-
-            if (result instanceof Antlr4ParserResult) {
-                for (String s : ((Antlr4ParserResult) result).getImports()) {
-                    FileObject importedFo = fo.getParent().getFileObject(s, "g4");
-                    if (importedFo != null) {
-                        addReferencesForFile(importedFo, prefix, matching, scannedFiles);
+            for (String unknownReference : result.unknownReferences) {
+                String mref = caseSensitive ? unknownReference : unknownReference.toUpperCase();
+                if (mref.startsWith(mprefix)) {
+                    boolean ruleRef = Character.isLowerCase(unknownReference.codePointAt(0));
+                    CompletionItem item = null;
+                    if (ruleRef && ((result.getGrammarType() == AntlrParserResult.GrammarType.PARSER) || (result.getGrammarType() == AntlrParserResult.GrammarType.MIXED))) {
+                        item = CompletionUtilities.newCompletionItemBuilder(unknownReference)
+                                .iconResource(getReferenceIcon(ReferenceType.RULE))
+                                .startOffset(startOffset)
+                                .leftHtmlText(unknownReference)
+                                .rightHtmlText(Bundle.newRule())
+                                .sortText(mref)
+                                .build();
+                    }
+                    if (!ruleRef && ((result.getGrammarType() == AntlrParserResult.GrammarType.LEXER) || (result.getGrammarType() == AntlrParserResult.GrammarType.MIXED))) {
+                        item = CompletionUtilities.newCompletionItemBuilder(unknownReference)
+                                .iconResource(getReferenceIcon(ReferenceType.TOKEN))
+                                .startOffset(startOffset)
+                                .leftHtmlText(unknownReference)
+                                .rightHtmlText(Bundle.newRule())
+                                .sortText(mref)
+                                .build();
+                    }
+                    if (item != null) {
+                        resultSet.addItem(item);
                     }
                 }
             }
         }
 
+        private void addReferences(Antlr4ParserResult result, String prefix, int caretOffset, CompletionResultSet resultSet, Set<ReferenceType> rtypes) {
+
+            Map<String, AntlrParserResult.Reference> matching = new HashMap<>();
+            String mprefix = caseSensitive ? prefix : prefix.toUpperCase();
+
+            result.allImports().values().forEach((r) -> {
+                Map<String, AntlrParserResult.Reference> refs = r.references;
+                for (AntlrParserResult.Reference ref : refs.values()) {
+                    String mref = caseSensitive ? ref.name : ref.name.toUpperCase();
+                    boolean match = mref.startsWith(mprefix);
+                    if (match && !matching.containsKey(ref.name) && rtypes.contains(ref.type)) {
+                        matching.put(ref.name, ref);
+                    }
+                }
+            });
+
+            int startOffset = caretOffset - prefix.length();
+            for (AntlrParserResult.Reference ref : matching.values()) {
+                CompletionItem item = CompletionUtilities.newCompletionItemBuilder(ref.name)
+                        .iconResource(getReferenceIcon(ref.type))
+                        .startOffset(startOffset)
+                        .leftHtmlText(ref.name)
+                        .sortText(caseSensitive ? ref.name : ref.name.toUpperCase())
+                        .build();
+                resultSet.addItem(item);
+
+            }
+        }
+    }
+
+    //The folowing is an excrept of org.netbeans.modules.csl.navigation.Icons
+    private static final String ICON_BASE = "org/netbeans/modules/csl/source/resources/icons/";
+
+    private static String getReferenceIcon(ReferenceType rtype) {
+        switch (rtype) {
+            case CHANNEL:
+                return ICON_BASE + "database.gif";
+            case FRAGMENT:
+                return ICON_BASE + "constantPublic.png";
+            case MODE:
+                return ICON_BASE + "class.png";
+            case RULE:
+                return ICON_BASE + "rule.png";
+            case TOKEN:
+                return ICON_BASE + "fieldPublic.png";
+        }
+        return null;
     }
 }
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Formatter.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Formatter.java
index afc7d0e..ee57d60 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Formatter.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Formatter.java
@@ -119,6 +119,11 @@
                 tstart = token.getStartIndex();
                 tstop = token.getStopIndex();
             }
+
+            if ((cstart == cend) && (cstart == doc.getLength())) {
+                // Pressed enter at the end of the file
+                context.modifyIndent(cstart, inRule ? indentSize : 0);
+            }
         } catch (BadLocationException ex) {}
     }
 
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java
index 2c54130..ac46026 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java
@@ -18,42 +18,34 @@
  */
 package org.netbeans.modules.languages.antlr.v4;
 
+import org.antlr.parser.antlr4.ANTLRv4Lexer;
 import org.netbeans.api.lexer.Token;
 import org.netbeans.spi.lexer.LexerRestartInfo;
 
 import static org.antlr.parser.antlr4.ANTLRv4Lexer.*;
-import org.netbeans.modules.languages.antlr.AbstractAntlrLexer;
 import org.netbeans.modules.languages.antlr.AntlrTokenId;
 import static org.netbeans.modules.languages.antlr.AntlrTokenId.*;
-import org.netbeans.modules.languages.antlr.LexerInputCharStream;
+import org.netbeans.spi.lexer.antlr4.AbstractAntlrLexerBridge;
 
 /**
  *
  * @author lkishalmi
  */
-public final class Antlr4Lexer extends AbstractAntlrLexer {
+public final class Antlr4Lexer extends AbstractAntlrLexerBridge<ANTLRv4Lexer, AntlrTokenId> {
 
 
     public Antlr4Lexer(LexerRestartInfo<AntlrTokenId> info) {
-        super(info, new org.antlr.parser.antlr4.ANTLRv4Lexer(new LexerInputCharStream(info.input())));
+        super(info, ANTLRv4Lexer::new);
     }
 
-    private org.antlr.v4.runtime.Token preFetchedToken = null;
+    @Override
+    public Object state() {
+        return new State(lexer);
+    }
 
     @Override
-    public Token<AntlrTokenId> nextToken() {
-        org.antlr.v4.runtime.Token nextToken;
-        if (preFetchedToken != null) {
-            nextToken = preFetchedToken;
-            lexer.getInputStream().seek(preFetchedToken.getStopIndex() + 1);
-            preFetchedToken = null;
-        } else {
-            nextToken = lexer.nextToken();
-        }
-        if (nextToken.getType() == EOF) {
-            return null;
-        }
-        switch (nextToken.getType()) {
+    protected Token<AntlrTokenId> mapToken(org.antlr.v4.runtime.Token antlrToken) {
+        switch (antlrToken.getType()) {
             case TOKEN_REF:
                 return token(TOKEN);
             case RULE_REF:
@@ -124,16 +116,26 @@
                 return token(WHITESPACE);
 
             case ACTION_CONTENT:
-                preFetchedToken = lexer.nextToken();
-                while (preFetchedToken.getType() == ACTION_CONTENT) {
-                    preFetchedToken = lexer.nextToken();
-                }
-                lexer.getInputStream().seek(preFetchedToken.getStartIndex());
-                return token(ACTION);
+                return groupToken(ACTION, ACTION_CONTENT);
 
             default:
                 return token(ERROR);
         }
     }
 
+    private static class State extends AbstractAntlrLexerBridge.LexerState<ANTLRv4Lexer> {
+        final int currentRuleType;
+
+        public State(ANTLRv4Lexer lexer) {
+            super(lexer);
+            this.currentRuleType = lexer.getCurrentRuleType();
+        }
+
+        @Override
+        public void restore(ANTLRv4Lexer lexer) {
+            super.restore(lexer);
+            lexer.setCurrentRuleType(currentRuleType);
+        }
+
+    }
 }
diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java
index e586a69..7c9683b 100644
--- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java
+++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java
@@ -21,8 +21,11 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
 import java.util.function.Consumer;
 import java.util.logging.Logger;
 import org.antlr.parser.antlr4.ANTLRv4Lexer;
@@ -53,11 +56,16 @@
     private final List<String> imports = new ArrayList<>();
 
     private static final Logger LOG = Logger.getLogger(Antlr4ParserResult.class.getName());
-    public static final Reference HIDDEN = new Reference("HIDDEN", OffsetRange.NONE);
-    
+
+    public static final Reference HIDDEN = new Reference(ReferenceType.CHANNEL, "HIDDEN", OffsetRange.NONE);
+    public static final Reference DEFAULT_MODE = new Reference(ReferenceType.MODE, "DEFAULT_MODE", OffsetRange.NONE);
+
+    final Set<String> unknownReferences = new HashSet<>();
+
     public Antlr4ParserResult(Snapshot snapshot) {
         super(snapshot);
         references.put(HIDDEN.name, HIDDEN);
+        references.put(DEFAULT_MODE.name, DEFAULT_MODE);
     }
     
     @Override
@@ -73,6 +81,26 @@
     @Override
     protected void evaluateParser(ANTLRv4Parser parser) {
         parser.grammarSpec();
+        checkReferences();
+    }
+
+    private void checkReferences() {
+        Map<String, Reference> allRefs = new HashMap<>(references.size() * 2);
+        for (Antlr4ParserResult pr : allImports().values()) {
+            allRefs.putAll(pr.references);
+        }
+        occurrences.forEach((refName, offsets) -> {
+            if (!allRefs.containsKey(refName)) {
+                unknownReferences.add(refName);
+                for (OffsetRange offset : offsets) {
+                    errors.add(new DefaultError(null, "Unknown Reference: " + refName, null, getFileObject(), offset.getStart(), offset.getEnd(), Severity.ERROR));
+                }
+            }
+        });
+    }
+    
+    public List<String> getImports() {
+        return Collections.unmodifiableList(imports);
     }
 
     private static Token getIdentifierToken(ANTLRv4Parser.IdentifierContext ctx) {
@@ -84,18 +112,26 @@
     protected ParseTreeListener createReferenceListener() {
         return new ANTLRv4ParserBaseListener() {
             @Override
+            public void exitGrammarType(ANTLRv4Parser.GrammarTypeContext ctx) {
+                grammarType = GrammarType.MIXED;
+                if (ctx.LEXER() != null)  grammarType = GrammarType.LEXER;
+                if (ctx.PARSER() != null) grammarType = GrammarType.PARSER;                
+            }
+            
+            @Override
             public void exitParserRuleSpec(ANTLRv4Parser.ParserRuleSpecContext ctx) {
                 if (ctx.RULE_REF() != null) {
                     Token token = ctx.RULE_REF().getSymbol();
-                    addReference(token);
+                    addReference(ReferenceType.RULE, token);
                 }
             }
 
             @Override
             public void exitLexerRuleSpec(ANTLRv4Parser.LexerRuleSpecContext ctx) {
                 if (ctx.TOKEN_REF() != null) {
+                    ReferenceType type = ctx.FRAGMENT() != null ? ReferenceType.FRAGMENT : ReferenceType.TOKEN;
                     Token token = ctx.TOKEN_REF().getSymbol();
-                    addReference(token);
+                    addReference(type, token);
                 }
             }
 
@@ -104,7 +140,7 @@
                 List<ANTLRv4Parser.IdentifierContext> ids = ctx.idList().identifier();
                 for (ANTLRv4Parser.IdentifierContext id : ids) {
                     if (id.TOKEN_REF() != null) {
-                        addReference(id.TOKEN_REF().getSymbol());
+                        addReference(ReferenceType.TOKEN, id.TOKEN_REF().getSymbol());
                     }
                 }
             }
@@ -113,46 +149,27 @@
             public void exitChannelsSpec(ANTLRv4Parser.ChannelsSpecContext ctx) {
                 List<ANTLRv4Parser.IdentifierContext> ids = ctx.idList().identifier();
                 for (ANTLRv4Parser.IdentifierContext id : ids) {
-                    addReference(getIdentifierToken(id));
+                    addReference(ReferenceType.CHANNEL, getIdentifierToken(id));
                 }
             }
 
             @Override
             public void exitModeSpec(ANTLRv4Parser.ModeSpecContext ctx) {
                 if (ctx.identifier() != null) {
-                    addReference(getIdentifierToken(ctx.identifier()));
+                    addReference(ReferenceType.MODE, getIdentifierToken(ctx.identifier()));
                 }
             }
 
-            public void addReference(Token token) {
+            public void addReference(ReferenceType type, Token token) {
                 OffsetRange range = new OffsetRange(token.getStartIndex(), token.getStopIndex() + 1);
                 String name = token.getText();
-                Reference ref = new Reference(name, range);
+                Reference ref = new Reference(type, name, range);
                 references.put(ref.name, ref);
             }
 
         };
     }
 
-
-    @Override
-    protected ParseTreeListener createCheckReferences() {
-        final Map<String, Reference> allRefs = new HashMap<>(references);
-        for (String im : imports) {
-            FileObject fo = getFileObject().getParent().getFileObject(im + ".g4");
-            if (fo != null) {
-                AntlrParserResult pr = AntlrParser.getParserResult(fo);
-                allRefs.putAll(pr.references);
-            }
-        }
-        return new ANTLRv4OccuranceListener((token) -> {
-            String name = token.getText();
-            if(!allRefs.containsKey(name)) {
-                errors.add(new DefaultError(null, "Unknown Reference: " + name, null, getFileObject(), token.getStartIndex(), token.getStopIndex() + 1, Severity.ERROR));
-            }
-        });
-    }
-
     @Override
     protected ParseTreeListener createImportListener() {
         return new ANTLRv4ParserBaseListener() {
@@ -292,11 +309,38 @@
     protected ParseTreeListener createOccurancesListener() {
         return new ANTLRv4OccuranceListener(this::addOccurance);
     }
-
-    public List<String> getImports() {
-        return Collections.unmodifiableList(imports);
+    
+    private Optional<Antlr4ParserResult> getParserResult(String grammarName) {
+        Optional<Antlr4ParserResult> ret = Optional.empty();
+        FileObject fo = getFileObject().getParent().getFileObject(grammarName + ".g4");
+        
+        if (fo != null) {
+            ret = Optional.of(fo.equals(getFileObject()) ? this : (Antlr4ParserResult) AntlrParser.getParserResult(fo));
+        }
+        return ret;
     }
 
+    private void addImports(Set<String> visited, String importedGrammar) {
+        if (visited.add(importedGrammar)) {
+            getParserResult(importedGrammar).ifPresent((result) -> {
+                for (String im : result.getImports()) {
+                    addImports(visited, im);
+                }
+            });
+        }
+    }
+    
+
+    public Map<String, Antlr4ParserResult> allImports() {
+        Set<String> visited = new HashSet<>();
+        addImports(visited, getFileObject().getName());
+        Map<String, Antlr4ParserResult> ret = new HashMap<>();
+        for (String im : visited) {
+            getParserResult(im).ifPresent((result) -> ret.put(im, result));
+        }
+        return ret;
+    }
+    
     private static class ANTLRv4OccuranceListener extends ANTLRv4ParserBaseListener {
         private final Consumer<Token> onOccurance;
 
diff --git a/java/lib.jshell.agent/agentsrc/org/netbeans/lib/jshell/agent/AgentWorker.java b/java/lib.jshell.agent/agentsrc/org/netbeans/lib/jshell/agent/AgentWorker.java
index d618be8..a822ac5 100644
--- a/java/lib.jshell.agent/agentsrc/org/netbeans/lib/jshell/agent/AgentWorker.java
+++ b/java/lib.jshell.agent/agentsrc/org/netbeans/lib/jshell/agent/AgentWorker.java
@@ -143,7 +143,7 @@
     }
     
     private Executor findExecutor() {
-        Object o = System.getProperties().get(PROPERTY_EXECUTOR);;
+        Object o = System.getProperties().get(PROPERTY_EXECUTOR);
         if (o instanceof Executor) {
             return this.userExecutor = (Executor)o;
         } else if (o instanceof String) {
diff --git a/java/lib.jshell.agent/nbproject/project.properties b/java/lib.jshell.agent/nbproject/project.properties
index 04dcbe4..e9908fa 100644
--- a/java/lib.jshell.agent/nbproject/project.properties
+++ b/java/lib.jshell.agent/nbproject/project.properties
@@ -21,5 +21,5 @@
 extra.module.files=modules/ext/nb-custom-jshell-probe.jar,modules/ext/nb-mod-jshell-probe.jar
 jnlp.indirect.jars=modules/ext/nb-custom-jshell-probe.jar,modules/ext/nb-mod-jshell-probe.jar
 
-agentsrc.asm.cp=${libs.asm.dir}/core/asm-9.3.jar
+agentsrc.asm.cp=${libs.asm.dir}/core/asm-9.4.jar
 agentsrc.jshell.cp=${nb_all}/java/libs.jshell.compile/external/jshell-9.jar
diff --git a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
index d1ca38a..9bad23c 100644
--- a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
+++ b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
@@ -88,23 +88,25 @@
                 JavaFileObject origFile = c.classfile;
                 try (InputStream in = origFile.openInputStream()) {
                     byte[] data = readFile(in);
-                    int major = (Byte.toUnsignedInt(data[6]) << 8) + Byte.toUnsignedInt(data[7]);
-                    int maxMajor = ClassFile.Version.MAX().major;
-                    if (maxMajor < major) {
-                        if (log.currentSourceFile() != null) {
-                            log.warning(0, Warnings.BigMajorVersion(origFile, major, maxMajor));
-                        }
-                        data[6] = (byte) (maxMajor >> 8);
-                        data[7] = (byte) (maxMajor & 0xFF);
-                        byte[] dataFin = data;
-                        c.classfile = new ForwardingJavaFileObject(origFile) {
-                            @Override
-                            public InputStream openInputStream() throws IOException {
-                                return new ByteArrayInputStream(dataFin);
+                    if (data.length > 8) {
+                        int major = (Byte.toUnsignedInt(data[6]) << 8) + Byte.toUnsignedInt(data[7]);
+                        int maxMajor = ClassFile.Version.MAX().major;
+                        if (maxMajor < major) {
+                            if (log.currentSourceFile() != null) {
+                                log.warning(0, Warnings.BigMajorVersion(origFile, major, maxMajor));
                             }
-                        };
-                        super.readClassFile(c);
-                        return ;
+                            data[6] = (byte) (maxMajor >> 8);
+                            data[7] = (byte) (maxMajor & 0xFF);
+                            byte[] dataFin = data;
+                            c.classfile = new ForwardingJavaFileObject(origFile) {
+                                @Override
+                                public InputStream openInputStream() throws IOException {
+                                    return new ByteArrayInputStream(dataFin);
+                                }
+                            };
+                            super.readClassFile(c);
+                            return ;
+                        }
                     }
                 } catch (IOException ex) {
                     Logger.getLogger(NBClassReader.class.getName()).log(Level.FINE, null, ex);
diff --git a/java/lib.nbjshell/nbproject/org-netbeans-lib-nbjshell.sig b/java/lib.nbjshell/nbproject/org-netbeans-lib-nbjshell.sig
index 01f2f9d..77038f1 100644
--- a/java/lib.nbjshell/nbproject/org-netbeans-lib-nbjshell.sig
+++ b/java/lib.nbjshell/nbproject/org-netbeans-lib-nbjshell.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 1.19
+#Version 1.20
 
diff --git a/java/libs.cglib/nbproject/org-netbeans-libs-cglib.sig b/java/libs.cglib/nbproject/org-netbeans-libs-cglib.sig
index 6e3fdf3..12985a7 100644
--- a/java/libs.cglib/nbproject/org-netbeans-libs-cglib.sig
+++ b/java/libs.cglib/nbproject/org-netbeans-libs-cglib.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.43
+#Version 1.44
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/libs.corba.omgapi/nbproject/org-netbeans-modules-libs-corba-omgapi.sig b/java/libs.corba.omgapi/nbproject/org-netbeans-modules-libs-corba-omgapi.sig
index 97db1b5..8baee3a 100644
--- a/java/libs.corba.omgapi/nbproject/org-netbeans-modules-libs-corba-omgapi.sig
+++ b/java/libs.corba.omgapi/nbproject/org-netbeans-modules-libs-corba-omgapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.12
+#Version 1.13
 
 CLSS public com.sun.corba.ee.org.omg.CORBA.GetPropertyAction
 cons public init(java.lang.String)
diff --git a/java/libs.javacapi/external/binaries-list b/java/libs.javacapi/external/binaries-list
index b42feac..3cab39c 100644
--- a/java/libs.javacapi/external/binaries-list
+++ b/java/libs.javacapi/external/binaries-list
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-DBA592C75DD52B97EC88A6B06ADF71D4F3C3DED9 com.dukescript.nbjavac:nb-javac:jdk-19+33:api
-A36688EDA1DE51508A039AED3518771C6F75E416 com.dukescript.nbjavac:nb-javac:jdk-19+33
+D0586059323C762A59E1874B8CC74E2F959D618D com.dukescript.nbjavac:nb-javac:jdk-19.0.1-ga:api
+D4DDCBEA7886EF3AFC900CA51A76E12B93757ECB com.dukescript.nbjavac:nb-javac:jdk-19.0.1-ga
diff --git a/java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt b/java/libs.javacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
similarity index 99%
rename from java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt
rename to java/libs.javacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
index 8123b5f..31772aa 100644
--- a/java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt
+++ b/java/libs.javacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
@@ -1,7 +1,7 @@
 Name: Javac Compiler Implementation
 Description: Javac Compiler Implementation
-Version: jdk-19+33
-Files: nb-javac-jdk-19+33-api.jar nb-javac-jdk-19+33.jar
+Version: jdk-19.0.1-ga
+Files: nb-javac-jdk-19.0.1-ga-api.jar nb-javac-jdk-19.0.1-ga.jar
 License: GPL-2-CP
 Origin: OpenJDK (https://github.com/openjdk/jdk19)
 Source: https://github.com/openjdk/jdk19
diff --git a/java/libs.javacapi/nbproject/project.xml b/java/libs.javacapi/nbproject/project.xml
index 35901e2..1caa00b 100644
--- a/java/libs.javacapi/nbproject/project.xml
+++ b/java/libs.javacapi/nbproject/project.xml
@@ -40,11 +40,11 @@
             </public-packages>
             <class-path-extension>
                 <runtime-relative-path />
-                <binary-origin>external/nb-javac-jdk-19+33-api.jar</binary-origin>
+                <binary-origin>external/nb-javac-jdk-19.0.1-ga-api.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path />
-                <binary-origin>external/nb-javac-jdk-19+33.jar</binary-origin>
+                <binary-origin>external/nb-javac-jdk-19.0.1-ga.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/java/libs.jshell.compile/nbproject/org-netbeans-libs-jshell-compile.sig b/java/libs.jshell.compile/nbproject/org-netbeans-libs-jshell-compile.sig
index bba0bf1..eca8109 100644
--- a/java/libs.jshell.compile/nbproject/org-netbeans-libs-jshell-compile.sig
+++ b/java/libs.jshell.compile/nbproject/org-netbeans-libs-jshell-compile.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.23.0
+#Version 1.24.0
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/java/libs.nbjavacapi/external/binaries-list b/java/libs.nbjavacapi/external/binaries-list
index b42feac..3cab39c 100644
--- a/java/libs.nbjavacapi/external/binaries-list
+++ b/java/libs.nbjavacapi/external/binaries-list
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-DBA592C75DD52B97EC88A6B06ADF71D4F3C3DED9 com.dukescript.nbjavac:nb-javac:jdk-19+33:api
-A36688EDA1DE51508A039AED3518771C6F75E416 com.dukescript.nbjavac:nb-javac:jdk-19+33
+D0586059323C762A59E1874B8CC74E2F959D618D com.dukescript.nbjavac:nb-javac:jdk-19.0.1-ga:api
+D4DDCBEA7886EF3AFC900CA51A76E12B93757ECB com.dukescript.nbjavac:nb-javac:jdk-19.0.1-ga
diff --git a/java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt b/java/libs.nbjavacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
similarity index 99%
rename from java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt
rename to java/libs.nbjavacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
index 770d20b..409d214 100644
--- a/java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt
+++ b/java/libs.nbjavacapi/external/nb-javac-jdk-19.0.1-ga-license.txt
@@ -1,7 +1,7 @@
 Name: Javac Compiler Implementation
 Description: Javac Compiler Implementation
-Files: nb-javac-jdk-19+33-api.jar nb-javac-jdk-19+33.jar
-Version: jdk-19+33
+Files: nb-javac-jdk-19.0.1-ga-api.jar nb-javac-jdk-19.0.1-ga.jar
+Version: jdk-19.0.1-ga
 License: GPL-2-CP
 Origin: OpenJDK (https://github.com/openjdk/jdk19)
 Source: https://github.com/openjdk/jdk19
diff --git a/java/libs.nbjavacapi/nbproject/project.properties b/java/libs.nbjavacapi/nbproject/project.properties
index f48dd15..e4582a3 100644
--- a/java/libs.nbjavacapi/nbproject/project.properties
+++ b/java/libs.nbjavacapi/nbproject/project.properties
@@ -15,8 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 license.file.override=${nb_all}/nbbuild/licenses/GPL-2-CP
-release.external/nb-javac-jdk-19+33-api.jar=modules/ext/nb-javac-jdk-19-api.jar
-release.external/nb-javac-jdk-19+33.jar=modules/ext/nb-javac-jdk-19.jar
+release.external/nb-javac-jdk-19.0.1-ga-api.jar=modules/ext/nb-javac-jdk-19-api.jar
+release.external/nb-javac-jdk-19.0.1-ga.jar=modules/ext/nb-javac-jdk-19.jar
diff --git a/java/libs.nbjavacapi/nbproject/project.xml b/java/libs.nbjavacapi/nbproject/project.xml
index 5b801b8..5c2fa6a 100644
--- a/java/libs.nbjavacapi/nbproject/project.xml
+++ b/java/libs.nbjavacapi/nbproject/project.xml
@@ -37,11 +37,11 @@
             <public-packages/>
             <class-path-extension>
                 <runtime-relative-path>ext/nb-javac-jdk-19-api.jar</runtime-relative-path>
-                <binary-origin>external/nb-javac-jdk-19+33-api.jar</binary-origin>
+                <binary-origin>external/nb-javac-jdk-19.0.1-ga-api.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/nb-javac-jdk-19.jar</runtime-relative-path>
-                <binary-origin>external/nb-javac-jdk-19+33.jar</binary-origin>
+                <binary-origin>external/nb-javac-jdk-19.0.1-ga.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/java/maven.embedder/external/apache-maven-3.8.6-bin-license.txt b/java/maven.embedder/external/apache-maven-3.8.7-bin-license.txt
similarity index 99%
rename from java/maven.embedder/external/apache-maven-3.8.6-bin-license.txt
rename to java/maven.embedder/external/apache-maven-3.8.7-bin-license.txt
index 93d1be1..9494a49 100644
--- a/java/maven.embedder/external/apache-maven-3.8.6-bin-license.txt
+++ b/java/maven.embedder/external/apache-maven-3.8.7-bin-license.txt
@@ -1,6 +1,6 @@
 Name: Apache Maven Distribution
 Description: Apache Maven Distribution
-Version: 3.8.6
+Version: 3.8.7
 License: Apache-2.0
 Origin: Apache Software Foundation
 URL: https://maven.apache.org/
diff --git a/java/maven.embedder/external/apache-maven-3.8.6-bin-notice.txt b/java/maven.embedder/external/apache-maven-3.8.7-bin-notice.txt
similarity index 100%
rename from java/maven.embedder/external/apache-maven-3.8.6-bin-notice.txt
rename to java/maven.embedder/external/apache-maven-3.8.7-bin-notice.txt
diff --git a/java/maven.embedder/external/apache-maven-3.8.6-epl-license.txt b/java/maven.embedder/external/apache-maven-3.8.7-epl-license.txt
similarity index 98%
rename from java/maven.embedder/external/apache-maven-3.8.6-epl-license.txt
rename to java/maven.embedder/external/apache-maven-3.8.7-epl-license.txt
index b106b5a..e11497e 100644
--- a/java/maven.embedder/external/apache-maven-3.8.6-epl-license.txt
+++ b/java/maven.embedder/external/apache-maven-3.8.7-epl-license.txt
@@ -1,9 +1,9 @@
 Name: Apache Maven components under EPL v1.0
 Description: These Apache Maven components are under EPL v1.0: org.eclipse.sisu.inject-0.3.5.jar org.eclipse.sisu.plexus-0.3.5.jar
-Version: 3.8.6
+Version: 3.8.7
 License: Maven-EPL-v10
 Origin: Apache Software Foundation
-Files: apache-maven-3.8.6-bin.zip!/apache-maven-3.8.6/lib/org.eclipse.sisu.inject-0.3.5.jar apache-maven-3.8.6-bin.zip!/apache-maven-3.8.6/lib/org.eclipse.sisu.plexus-0.3.5.jar
+Files: apache-maven-3.8.7-bin.zip!/apache-maven-3.8.7/lib/org.eclipse.sisu.inject-0.3.5.jar apache-maven-3.8.7-bin.zip!/apache-maven-3.8.7/lib/org.eclipse.sisu.plexus-0.3.5.jar
 
 Eclipse Public License - v 1.0
 
diff --git a/java/maven.embedder/external/apache-maven-3.8.6-slf4j-license.txt b/java/maven.embedder/external/apache-maven-3.8.7-slf4j-license.txt
similarity index 93%
rename from java/maven.embedder/external/apache-maven-3.8.6-slf4j-license.txt
rename to java/maven.embedder/external/apache-maven-3.8.7-slf4j-license.txt
index c3874aa..c72f3d2 100644
--- a/java/maven.embedder/external/apache-maven-3.8.6-slf4j-license.txt
+++ b/java/maven.embedder/external/apache-maven-3.8.7-slf4j-license.txt
@@ -1,9 +1,9 @@
 Name: slf4j
 Description: Part of Apache Maven Distribution
-Version: 3.8.6
+Version: 3.8.7
 License: MIT-slf4j
 Origin: Apache Software Foundation
-Files: apache-maven-3.8.6-bin.zip!/apache-maven-3.8.6/lib/slf4j-api-1.7.36.jar
+Files: apache-maven-3.8.7-bin.zip!/apache-maven-3.8.7/lib/slf4j-api-1.7.36.jar
 
 Copyright (c) 2004-2017 QOS.ch
 All rights reserved.
diff --git a/java/maven.embedder/external/binaries-list b/java/maven.embedder/external/binaries-list
index 12301b7..45072a6 100644
--- a/java/maven.embedder/external/binaries-list
+++ b/java/maven.embedder/external/binaries-list
@@ -16,4 +16,4 @@
 # under the License.
 A2AC1CD690AB4C80DEFE7F9BCE14D35934C35CEC jdom:jdom:1.0
 5D9CE6ADD7B714B8095F0E3E396C5E9F8C5DCFEF org.apache.maven.shared:maven-dependency-tree:2.2
-3ABB90E23BE975D397BBAA43773DD0861DAE26C6 org.apache.maven:apache-maven:3.8.6:bin@zip
+4CAAED06DFADFE54EA5C0DD8806EFC0B65812081 org.apache.maven:apache-maven:3.8.7:bin@zip
diff --git a/java/maven.embedder/external/binariesembedded-list b/java/maven.embedder/external/binariesembedded-list
index 814ec38..41694f6 100644
--- a/java/maven.embedder/external/binariesembedded-list
+++ b/java/maven.embedder/external/binariesembedded-list
@@ -16,7 +16,6 @@
 # under the License.
 
 C51C00206BB913CD8612B24ABD9FA98AE89719B1;commons-cli:commons-cli:1.4
-815893DF5F31DA2ECE4040FE0A12FD44B577AFAF;commons-io:commons-io:2.6
 6505A72A097D9270F7A9E7BF42C4238283247755;org.apache.commons:commons-lang3:3.8.1
 BDAAB946CA5AD20253502D873BA0C3313D141036;com.google.guava:guava:25.1-android
 FA13659F9128F4C011C8E1D06F137083B4876377;com.google.inject:guice:4.2.2:no_aop
@@ -24,26 +23,26 @@
 6975DA39A7040257BD51D21A231B76C915872D38;javax.inject:javax.inject:1
 D877E195A05ACA4A2F1AD2FF14BFEC1393AF4B5E;org.slf4j:jcl-over-slf4j:1.7.36
 479C1E06DB31C432330183F5CAE684163F186146;javax.annotation:javax.annotation.api:1.2
-1637B7E8FC392E389752E79B827B883629285626;org.apache.maven:maven-artifact:3.8.6
-4D22A3FAA8880EFEF2E960BB8A00C2A0B351C46A;org.apache.maven:maven-builder-support:3.8.6
-CAF3154F8E2DBBA1CAD6625919F795F19C50EA69;org.apache.maven:maven-compat:3.8.6
-F945F1F19452214D360D453D9357275313F1CFD9;org.apache.maven:maven-core:3.8.6
-9E13CAA4D04B3DE8E990E68FB955C65E9D2E0D8F;org.apache.maven:maven-embedder:3.8.6
-8AD31867C493C63AC60A3FA42356A72D20F8457B;org.apache.maven:maven-model:3.8.6
-8323A726C657BECBFFC8EA807970935DDE3E3903;org.apache.maven:maven-model-builder:3.8.6
-4138E2E9B39F364902AC263888FEB7B2407A298E;org.apache.maven:maven-plugin-api:3.8.6
-C60A7640E1B829E60F8791B5EDF3CF56A6556ACA;org.apache.maven:maven-repository-metadata:3.8.6
+4B820734B856682F99F6AD2DE4F1F7DD4B82335F;org.apache.maven:maven-artifact:3.8.7
+D98AC7F943FE6E18205E15B92F86D1FEF753F933;org.apache.maven:maven-builder-support:3.8.7
+A68781144147DCA0ADC17FCFF63A680E310B35E6;org.apache.maven:maven-compat:3.8.7
+7AE5D5EF206ED50B18B01BA405B5AD47387EF195;org.apache.maven:maven-core:3.8.7
+48543C6C3DD1872614B07CEBC2DF85CDE1CC4738;org.apache.maven:maven-embedder:3.8.7
+A6A1F77AA36D158C8EC7917112192083B9467CD4;org.apache.maven:maven-model:3.8.7
+D2FD892B20BD945B441607A7D49ADFD1FC133E31;org.apache.maven:maven-model-builder:3.8.7
+80C6BA199912C82627C11BC65BA81A6D21BD172F;org.apache.maven:maven-plugin-api:3.8.7
+42F7CC6120C8A755ED8C3C3BB5DCD5366D2E11EE;org.apache.maven:maven-repository-metadata:3.8.7
 5EE235AA5AC5994B5DC847F8E78FFE9D77DD55D7;org.apache.maven.resolver:maven-resolver-api:1.6.3
 D1C8F8E30C2AAE85330E21329D42D7E7F12A7CC3;org.apache.maven.resolver:maven-resolver-connector-basic:1.6.3
 2714FFE60BD71259A41B3E4816122504B5F2DB93;org.apache.maven.resolver:maven-resolver-impl:1.6.3
-C6DADEDC9F6B5C1C02D0A93AFD1857460B0F501D;org.apache.maven:maven-resolver-provider:3.8.6
+6DE6CE43DDD256A9EDD02B5F74961181A961816A;org.apache.maven:maven-resolver-provider:3.8.7
 176425F73FE768BF9CDB8B5A742E7A00C1D8D178;org.apache.maven.resolver:maven-resolver-spi:1.6.3
 7BEC7BC7F6C71A0A793EF355CC908BFAA3DD5F6D;org.apache.maven.resolver:maven-resolver-transport-wagon:1.6.3
 07D5A6879037B34C61C2F527DFCFB59084E86ED0;org.apache.maven.resolver:maven-resolver-util:1.6.3
-9BA5114C6C61C66FBC6B93C73085DC5B15585524;org.apache.maven:maven-settings:3.8.6
-E5C92138DFFD1F9E5454CD8224CF8E18253B1803;org.apache.maven:maven-settings-builder:3.8.6
+2FB7EB81EA304E0B7DC0DA3CC986EE6887915644;org.apache.maven:maven-settings:3.8.7
+DB330482100FD0CD27F113FB55A8F67794E9E0EE;org.apache.maven:maven-settings-builder:3.8.7
 F87A61ADB1E12A00DCC6CC6005A51E693AA7C4AC;org.apache.maven.shared:maven-shared-utils:3.3.4
-F68CB36830CD5B163BAD35F065A77E1248332983;org.apache.maven:maven-slf4j-provider:3.8.6
+A203B0E1A4FD692612FD2251F007EF174F86B145;org.apache.maven:maven-slf4j-provider:3.8.7
 D4265DD4F0F1D7A06D80DF5A5F475D5FF9C17140;org.eclipse.sisu:org.eclipse.sisu.inject:0.3.5
 D71996BB2E536F966B3B70E647067FFF3B73D32F;org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.5
 425EA8E534716B4BFF1EA90F39BD76BE951D651B;org.codehaus.plexus:plexus-cipher:2.0
@@ -53,6 +52,6 @@
 F89C5080614FFD0764E49861895DBEDDE1B47237;org.codehaus.plexus:plexus-sec-dispatcher:2.0
 9B41B2B76B1BFE3774411FE22F5868058A9FC822;org.codehaus.plexus:plexus-utils:3.3.1
 6C62681A2F655B49963A5983B8B0950A6120AE14;org.slf4j:slf4j-api:1.7.36
-292E503E558E6758FC3A6D26A80B46017D4FEDEA;org.apache.maven.wagon:wagon-file:3.5.1
-C7504D054C4D909D0C1C8CE8883B70DD337971FE;org.apache.maven.wagon:wagon-http:3.5.1:shaded
-118E63F22D05B14535451933AE207BE47EC45D91;org.apache.maven.wagon:wagon-provider-api:3.5.1
+A09F59BE3767DBFF0401828463D1752A9CB0C551;org.apache.maven.wagon:wagon-file:3.5.3
+56C28B4EB4A8065D17700BDD0A815026889A6A92;org.apache.maven.wagon:wagon-http:3.5.3:shaded
+39C44EBB3945DEE359665272D8ACB83F9460491B;org.apache.maven.wagon:wagon-provider-api:3.5.3
diff --git a/java/maven.embedder/nbproject/org-netbeans-modules-maven-embedder.sig b/java/maven.embedder/nbproject/org-netbeans-modules-maven-embedder.sig
index 0343151..8ba0195 100644
--- a/java/maven.embedder/nbproject/org-netbeans-modules-maven-embedder.sig
+++ b/java/maven.embedder/nbproject/org-netbeans-modules-maven-embedder.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.71
+#Version 2.72
 
 CLSS public abstract interface !annotation com.google.common.annotations.Beta
  anno 0 com.google.common.annotations.GwtCompatible(boolean emulated=false, boolean serializable=false)
diff --git a/java/maven.embedder/nbproject/project.properties b/java/maven.embedder/nbproject/project.properties
index a37a104..3d4ff42 100644
--- a/java/maven.embedder/nbproject/project.properties
+++ b/java/maven.embedder/nbproject/project.properties
@@ -20,7 +20,7 @@
 javac.compilerargs=-Xlint -Xlint:-serial
 release.external/jdom-1.0.jar=modules/ext/maven/jdom-1.0.jar
 release.external/maven-dependency-tree-2.2.jar=modules/ext/maven/maven-dependency-tree-2.2.jar
-bundled.maven=apache-maven-3.8.6
+bundled.maven=apache-maven-3.8.7
 extra.module.files=maven/
 nbm.executable.files=maven/bin/mvn,maven/bin/mvnDebug,maven/bin/mvnyjp
 extra.license.files=${cluster}/maven/LICENSE.txt,${cluster}/maven/NOTICE.txt
diff --git a/java/maven.embedder/nbproject/project.xml b/java/maven.embedder/nbproject/project.xml
index 592120a..58963c1 100644
--- a/java/maven.embedder/nbproject/project.xml
+++ b/java/maven.embedder/nbproject/project.xml
@@ -293,9 +293,6 @@
                 <runtime-relative-path>../maven/lib/commons-cli-1.4.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/commons-io-2.6.jar</runtime-relative-path>
-            </class-path-extension>
-            <class-path-extension>
                 <runtime-relative-path>../maven/lib/commons-lang3-3.8.1.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
@@ -317,31 +314,31 @@
                 <runtime-relative-path>../maven/lib/jcl-over-slf4j-1.7.36.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-artifact-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-artifact-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-builder-support-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-builder-support-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-compat-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-compat-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-core-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-core-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-embedder-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-embedder-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-model-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-model-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-model-builder-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-model-builder-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-plugin-api-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-plugin-api-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-repository-metadata-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-repository-metadata-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>../maven/lib/maven-resolver-api-1.6.3.jar</runtime-relative-path>
@@ -353,7 +350,7 @@
                 <runtime-relative-path>../maven/lib/maven-resolver-impl-1.6.3.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-resolver-provider-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-resolver-provider-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>../maven/lib/maven-resolver-spi-1.6.3.jar</runtime-relative-path>
@@ -365,16 +362,16 @@
                 <runtime-relative-path>../maven/lib/maven-resolver-util-1.6.3.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-settings-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-settings-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-settings-builder-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-settings-builder-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>../maven/lib/maven-shared-utils-3.3.4.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/maven-slf4j-provider-3.8.6.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/maven-slf4j-provider-3.8.7.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>../maven/lib/org.eclipse.sisu.inject-0.3.5.jar</runtime-relative-path>
@@ -401,13 +398,13 @@
                 <runtime-relative-path>../maven/lib/slf4j-api-1.7.36.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/wagon-file-3.5.1.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/wagon-file-3.5.3.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/wagon-http-3.5.1-shaded.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/wagon-http-3.5.3-shaded.jar</runtime-relative-path>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>../maven/lib/wagon-provider-api-3.5.1.jar</runtime-relative-path>
+                <runtime-relative-path>../maven/lib/wagon-provider-api-3.5.3.jar</runtime-relative-path>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/java/maven.grammar/nbproject/org-netbeans-modules-maven-grammar.sig b/java/maven.grammar/nbproject/org-netbeans-modules-maven-grammar.sig
index c502ac9..c64cbea 100644
--- a/java/maven.grammar/nbproject/org-netbeans-modules-maven-grammar.sig
+++ b/java/maven.grammar/nbproject/org-netbeans-modules-maven-grammar.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64.0
+#Version 1.65.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/maven.grammar/src/org/netbeans/modules/maven/grammar/Bundle.properties b/java/maven.grammar/src/org/netbeans/modules/maven/grammar/Bundle.properties
index 651a095..bf75109 100644
--- a/java/maven.grammar/src/org/netbeans/modules/maven/grammar/Bundle.properties
+++ b/java/maven.grammar/src/org/netbeans/modules/maven/grammar/Bundle.properties
@@ -23,3 +23,4 @@
 ShowEffPomDiffPanel.rbCustom.text=By Profiles and Properties
 ShowEffPomDiffPanel.lblProfiles.text=Profiles:
 ShowEffPomDiffPanel.lblProperties.text=Properties:
+Editors/text/x-maven-pom+xml=Maven POM
\ No newline at end of file
diff --git a/java/maven.grammar/src/org/netbeans/modules/maven/grammar/layer.xml b/java/maven.grammar/src/org/netbeans/modules/maven/grammar/layer.xml
index f3c0a47..9af8c01 100644
--- a/java/maven.grammar/src/org/netbeans/modules/maven/grammar/layer.xml
+++ b/java/maven.grammar/src/org/netbeans/modules/maven/grammar/layer.xml
@@ -150,8 +150,7 @@
                 </folder>                
             </folder>
             <folder name="x-maven-pom+xml">
-                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.maven.grammar.Bundle"/>
-                
+                <attr name="displayName" bundlevalue="org.netbeans.modules.maven.grammar.Bundle#Editors/text/x-maven-pom+xml"/>
                 <folder name="CodeTemplates">
                     <folder name="Defaults">
                         <file name="org-netbeans-modules-maven-grammar-CodeTemplates.xml" url="POM-abbreviations.xml"/>
diff --git a/java/maven.grammar/src/org/netbeans/modules/maven/navigator/POMModelPanel.java b/java/maven.grammar/src/org/netbeans/modules/maven/navigator/POMModelPanel.java
index f6c74df..adda19c 100644
--- a/java/maven.grammar/src/org/netbeans/modules/maven/navigator/POMModelPanel.java
+++ b/java/maven.grammar/src/org/netbeans/modules/maven/navigator/POMModelPanel.java
@@ -656,7 +656,7 @@
                 for (Node childNode : childs) {
                     POMCutHolder holder = childNode.getLookup().lookup(POMCutHolder.class);
                     Object currentObj = holder.getCutValues()[0];
-                    if (currentObj != null && currentObj instanceof POMComponent) {
+                    if (currentObj instanceof POMComponent) {
                         if (currentObj == currentpc) {
                             treeView.expandNode(currentNode);
                             currentNode = childNode;
@@ -664,7 +664,7 @@
                             break;
                         }
                     }
-                    if (currentObj != null && currentObj instanceof String) {
+                    if (currentObj instanceof String) {
                         String qnName = getElementNameFromNode(childNode);
 
                         if (qnName == null || (!(currentpc instanceof POMExtensibilityElement))) {
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/layer.xml b/java/maven.hints/src/org/netbeans/modules/maven/hints/layer.xml
index ad64474..812b814 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/layer.xml
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/layer.xml
@@ -65,6 +65,9 @@
         <file name="org-netbeans-modules-maven-hints-pom-UseReleaseOptionHint.instance">
             <attr name="position" intvalue="1200"/>
         </file>
+        <file name="org-netbeans-modules-maven-hints-pom-UpdateDependencyHint.instance">
+            <attr name="position" intvalue="1300"/>
+        </file>
     </folder>
 
             
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/Bundle.properties b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/Bundle.properties
index 4359537..3147319 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/Bundle.properties
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/Bundle.properties
@@ -74,3 +74,5 @@
 JavaNetRepositoryErrorCustomizer.rbSelected.text=Only Selected Repositories with Urls:
 JavaNetRepositoryErrorCustomizer.jLabel1.text=Please enter one URL per line
 JavaNetRepositoryErrorCustomizer.jLabel1.toolTipText=
+UpdateDependencyHintCustomizer.cbNoMajorUpgrade.text=don't suggest major version upgrades
+UpdateDependencyHintCustomizer.cbNoMajorUpgrade.toolTipText=example: 5.2.1 -> 5.x.x but not to 6.x.x
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.form
index 4a12463..c1d76ca 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.form
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.form
@@ -54,10 +54,7 @@
   <SubComponents>
     <Container class="javax.swing.JSplitPane" name="jSplitPane1">
       <Properties>
-        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-          <Border info="null"/>
-        </Property>
-        <Property name="dividerLocation" type="int" value="320"/>
+        <Property name="dividerLocation" type="int" value="260"/>
         <Property name="opaque" type="boolean" value="false"/>
       </Properties>
       <Constraints>
@@ -118,17 +115,29 @@
             </Constraint>
           </Constraints>
 
-          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="descriptionPanel" pref="249" max="32767" attributes="0"/>
+                  <Component id="optionsPanel" alignment="1" pref="0" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="optionsPanel" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
+                      <Component id="descriptionPanel" pref="213" max="32767" attributes="0"/>
+                      <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
           <SubComponents>
             <Container class="javax.swing.JPanel" name="optionsPanel">
               <Properties>
                 <Property name="opaque" type="boolean" value="false"/>
               </Properties>
-              <Constraints>
-                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
-                  <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="12" insetsRight="0" anchor="18" weightX="1.0" weightY="0.7"/>
-                </Constraint>
-              </Constraints>
 
               <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
               <SubComponents>
@@ -215,11 +224,6 @@
               <Properties>
                 <Property name="opaque" type="boolean" value="false"/>
               </Properties>
-              <Constraints>
-                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
-                  <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.3"/>
-                </Constraint>
-              </Constraints>
 
               <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
               <SubComponents>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.java
index 3a36baa..b051d5b 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanel.java
@@ -71,21 +71,12 @@
         
         DefaultTreeModel mdl = new DefaultTreeModel(new DefaultMutableTreeNode());
         errorTree.setModel( mdl );
-        RequestProcessor.getDefault().post(new Runnable() {
-            @Override
-            public void run() {
-                final TreeModel m = RulesManager.getHintsTreeModel();
-                SwingUtilities.invokeLater(new Runnable() {
-
-                    @Override
-                    public void run() {
-                        errorTree.setModel( m );
-                    }
-                });
-            }
+        RequestProcessor.getDefault().post(() -> {
+            final TreeModel m = RulesManager.getHintsTreeModel();
+            SwingUtilities.invokeLater(() -> {
+                errorTree.setModel( m );
+            });
         });
-        
-        
     }
     
     /** This method is called from within the constructor to
@@ -115,8 +106,7 @@
         setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
         setLayout(new java.awt.GridBagLayout());
 
-        jSplitPane1.setBorder(null);
-        jSplitPane1.setDividerLocation(320);
+        jSplitPane1.setDividerLocation(260);
         jSplitPane1.setOpaque(false);
 
         treePanel.setOpaque(false);
@@ -132,7 +122,6 @@
 
         detailsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 6, 0, 0));
         detailsPanel.setOpaque(false);
-        detailsPanel.setLayout(new java.awt.GridBagLayout());
 
         optionsPanel.setOpaque(false);
         optionsPanel.setLayout(new java.awt.GridBagLayout());
@@ -182,16 +171,6 @@
         gridBagConstraints.insets = new java.awt.Insets(8, 0, 0, 0);
         optionsPanel.add(customizerPanel, gridBagConstraints);
 
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 0;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
-        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
-        gridBagConstraints.weightx = 1.0;
-        gridBagConstraints.weighty = 0.7;
-        gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 0);
-        detailsPanel.add(optionsPanel, gridBagConstraints);
-
         descriptionPanel.setOpaque(false);
         descriptionPanel.setLayout(new java.awt.GridBagLayout());
 
@@ -217,13 +196,21 @@
         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
         descriptionPanel.add(descriptionLabel, gridBagConstraints);
 
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 1;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
-        gridBagConstraints.weightx = 1.0;
-        gridBagConstraints.weighty = 0.3;
-        detailsPanel.add(descriptionPanel, gridBagConstraints);
+        javax.swing.GroupLayout detailsPanelLayout = new javax.swing.GroupLayout(detailsPanel);
+        detailsPanel.setLayout(detailsPanelLayout);
+        detailsPanelLayout.setHorizontalGroup(
+            detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(descriptionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE)
+            .addComponent(optionsPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+        );
+        detailsPanelLayout.setVerticalGroup(
+            detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(detailsPanelLayout.createSequentialGroup()
+                .addComponent(optionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(descriptionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 213, Short.MAX_VALUE)
+                .addGap(1, 1, 1))
+        );
 
         jSplitPane1.setRightComponent(detailsPanel);
 
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanelLogic.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanelLogic.java
index 325a371..c76e45a 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanelLogic.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/HintsPanelLogic.java
@@ -99,16 +99,16 @@
         this.tasklistCheckBox = tasklistCheckBox;
         this.customizerPanel = customizerPanel;
         this.descriptionTextArea = descriptionTextArea;        
-        
-        valueChanged( null );
-        
+
         errorTree.addKeyListener(this);
         errorTree.addMouseListener(this);
         errorTree.getSelectionModel().addTreeSelectionListener(this);
             
         severityComboBox.addActionListener(this);
         tasklistCheckBox.addChangeListener(this);
-        
+
+        valueChanged(null);
+
     }
     
     void disconnect() {
@@ -122,9 +122,13 @@
                 
         componentsSetEnabled( false );
         for (POMErrorFixBase hint : changes.keySet()) {
-            if(hint instanceof POMErrorFixProvider) {
+            if (hint instanceof POMErrorFixProvider) {
                 ((POMErrorFixProvider) hint).cancel();
             }
+            Configuration config = hint.getConfiguration();
+            if (config != null) {
+                config.resetSavedValues();
+            }
         }
         changes.clear();
     }
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.form
index ded7530..01c9914 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.form
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.form
@@ -51,7 +51,7 @@
                           <Component id="rbSelected" alignment="0" min="-2" max="-2" attributes="0"/>
                           <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
                       </Group>
-                      <EmptySpace min="0" pref="124" max="32767" attributes="0"/>
+                      <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                   </Group>
               </Group>
               <EmptySpace max="-2" attributes="0"/>
@@ -66,7 +66,7 @@
               <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
               <Component id="rbSelected" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="jScrollPane1" pref="195" max="32767" attributes="0"/>
+              <Component id="jScrollPane1" pref="103" max="32767" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
               <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.java
index 86b1164..eeec620 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/JavaNetRepositoryErrorCustomizer.java
@@ -43,7 +43,7 @@
  */
 public class JavaNetRepositoryErrorCustomizer extends javax.swing.JPanel {
     private final Preferences preferences;
-    private final Map<String, Object> id2Saved = new HashMap<String, Object>();
+    private final Map<String, Object> id2Saved = new HashMap<>();
 
     /** Creates new form ReleaseVersionErrorCustomizer */
     public JavaNetRepositoryErrorCustomizer(Preferences prefs) {
@@ -116,8 +116,7 @@
 
         GroupLayout layout = new GroupLayout(this);
         this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(Alignment.LEADING)
+        layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(Alignment.LEADING)
@@ -127,18 +126,17 @@
                             .addComponent(rbAny)
                             .addComponent(rbSelected)
                             .addComponent(jLabel1))
-                        .addGap(0, 124, Short.MAX_VALUE)))
+                        .addGap(0, 0, Short.MAX_VALUE)))
                 .addContainerGap())
         );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(Alignment.LEADING)
+        layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addComponent(rbAny)
                 .addPreferredGap(ComponentPlacement.UNRELATED)
                 .addComponent(rbSelected)
                 .addPreferredGap(ComponentPlacement.RELATED)
-                .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
+                .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)
                 .addPreferredGap(ComponentPlacement.RELATED)
                 .addComponent(jLabel1)
                 .addContainerGap())
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MavenSelectionHintsTask.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MavenSelectionHintsTask.java
index db703f9..1e36b92 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MavenSelectionHintsTask.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MavenSelectionHintsTask.java
@@ -24,6 +24,7 @@
 import javax.swing.text.Document;
 import javax.swing.text.Position;
 import javax.swing.text.StyledDocument;
+import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.project.FileOwnerQuery;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.maven.hints.pom.spi.SelectionPOMFixProvider;
@@ -68,17 +69,18 @@
         List<ErrorDescription> errors = computeErrors(result, ss, se, cursorEvent.getCaretOffset());
         HintsController.setErrors(result.getPomFile(), PomModelUtils.LAYER_POM_SELECTION, errors);
     }
-    
+
+    @NonNull
     static List<ErrorDescription> computeErrors(MavenResult result, int ss, int se, int co) {
+        final List<ErrorDescription> errors = new ArrayList<>();
         FileObject fo = result.getPomFile();
         Project project = FileOwnerQuery.getOwner(fo);
         Document document = result.getSnapshot().getSource().getDocument(false);
         if (fo == null || project == null || project.getProjectDirectory() != fo.getParent()) {
             // ?? pom file ought to form a project!
-            return null;
+            return errors;
         }
         final POMModel model = result.getProjectModel();
-        final List<ErrorDescription> errors = new ArrayList<ErrorDescription>();
         // clear selection hints in case of an error; validation errors are handled by 
         // MavenFileHintsTask.
         StyledDocument styled = null;
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.form
index adeaa08..bde3245 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.form
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.form
@@ -53,7 +53,7 @@
               <EmptySpace max="-2" attributes="0"/>
               <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="jScrollPane1" pref="193" max="32767" attributes="0"/>
+              <Component id="jScrollPane1" pref="178" max="32767" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
       </Group>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.java
index b78e8ea..ad2e6e2 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/MoveToDependencyManagementPanel.java
@@ -79,12 +79,9 @@
      *
      */
     public void showWaitNode() {
-        SwingUtilities.invokeLater(new Runnable() {
-            @Override
-            public void run() {
-               treeView.setRootVisible(true);
-               explorerManager.setRootContext(createWaitNode());
-            }
+        SwingUtilities.invokeLater(() -> {
+            treeView.setRootVisible(true);
+            explorerManager.setRootContext(createWaitNode());
         });
     }
     private static Node createWaitNode() {
@@ -103,21 +100,18 @@
             lin = MavenEmbedder.getModelDescriptors(nbprj.getMavenProject());
         }
         if (lin != null) {
-                    final Children ch = new PomChildren(lin);
-                    SwingUtilities.invokeLater(new Runnable() {
-                @Override
-                        public void run() {
-                           treeView.setRootVisible(false);
-                           explorerManager.setRootContext(new AbstractNode(ch));
-                            try {
-                                explorerManager.setSelectedNodes(new Node[]{
-                                    explorerManager.getRootContext().getChildren().getNodes()[0]
-                                });
-                            } catch (PropertyVetoException ex) {
-                                Exceptions.printStackTrace(ex);
-                            }
-                        }
+            final Children ch = new PomChildren(lin);
+            SwingUtilities.invokeLater(() -> {
+                treeView.setRootVisible(false);
+                explorerManager.setRootContext(new AbstractNode(ch));
+                try {
+                    explorerManager.setSelectedNodes(new Node[]{
+                        explorerManager.getRootContext().getChildren().getNodes()[0]
                     });
+                } catch (PropertyVetoException ex) {
+                    Exceptions.printStackTrace(ex);
+                }
+            });
         }
     }
 
@@ -140,7 +134,7 @@
 
         @Override
         protected Node[] createNodes(List<MavenEmbedder.ModelDescription> key) {
-            List<POMNode> nds = new ArrayList<POMNode>();
+            List<POMNode> nds = new ArrayList<>();
             for (MavenEmbedder.ModelDescription mdl : key) {
                 if(mdl.getLocation() != null ) {
                     File fl = mdl.getLocation();
@@ -247,7 +241,7 @@
                 .addContainerGap()
                 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE)
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
                 .addContainerGap())
         );
     }// </editor-fold>//GEN-END:initComponents
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.form
index 7deb3eb..030ca8b 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.form
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.form
@@ -1,4 +1,4 @@
-<?xml version="1.1" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8" ?>
 
 <!--
 
@@ -51,7 +51,7 @@
                   <Component id="rbSources" alignment="0" min="-2" max="-2" attributes="0"/>
                   <Component id="rbLatest" alignment="0" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace pref="37" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
@@ -64,7 +64,7 @@
               <Component id="rbLatest" min="-2" max="-2" attributes="0"/>
               <EmptySpace type="unrelated" max="-2" attributes="0"/>
               <Component id="cbSnapshots" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="215" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.java
index ecce61e..65b89fd 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ParentVersionErrorCustomizer.java
@@ -31,7 +31,7 @@
  */
 public class ParentVersionErrorCustomizer extends javax.swing.JPanel {
     private Preferences preferences;
-    private final Map<String, Object> id2Saved = new HashMap<String, Object>();
+    private final Map<String, Object> id2Saved = new HashMap<>();
 
     /** Creates new form ParentVersionErrorCustomizer */
     public ParentVersionErrorCustomizer(Preferences prefs) {
@@ -43,20 +43,14 @@
         rbLatest.setSelected(!preferences.getBoolean(ParentVersionError.PROP_SOURCES, true));
         cbSnapshots.setSelected(preferences.getBoolean(ParentVersionError.PROP_SNAPSHOT, false));
         enableSnapshots();
-        ActionListener al = new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                preferences.putBoolean(ParentVersionError.PROP_SOURCES, rbSources.isSelected());
-                enableSnapshots();
-            }
+        ActionListener al = (ActionEvent e) -> {
+            preferences.putBoolean(ParentVersionError.PROP_SOURCES, rbSources.isSelected());
+            enableSnapshots();
         };
         rbSources.addActionListener(al);
         rbLatest.addActionListener(al);
-        cbSnapshots.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                preferences.putBoolean(ParentVersionError.PROP_SNAPSHOT, cbSnapshots.isSelected());
-            }
+        cbSnapshots.addActionListener((ActionEvent e) -> {
+            preferences.putBoolean(ParentVersionError.PROP_SNAPSHOT, cbSnapshots.isSelected());
         });
     
         id2Saved.put(ParentVersionError.PROP_SOURCES, rbSources.isSelected());
@@ -108,7 +102,7 @@
                         .addComponent(cbSnapshots))
                     .addComponent(rbSources)
                     .addComponent(rbLatest))
-                .addContainerGap(37, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -119,7 +113,7 @@
                 .addComponent(rbLatest)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                 .addComponent(cbSnapshots)
-                .addContainerGap(215, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
     }// </editor-fold>//GEN-END:initComponents
 
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/PomModelUtils.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/PomModelUtils.java
index bcc6ab6..0e97c09 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/PomModelUtils.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/PomModelUtils.java
@@ -57,7 +57,9 @@
 import org.netbeans.modules.maven.hints.pom.spi.POMErrorFixBase;
 import org.netbeans.modules.maven.hints.pom.spi.POMErrorFixProvider;
 import org.netbeans.modules.maven.indexer.api.RepositoryPreferences;
+import org.netbeans.modules.maven.model.pom.POMComponent;
 import org.netbeans.modules.maven.model.pom.POMModel;
+import org.netbeans.modules.maven.model.pom.Properties;
 import org.netbeans.modules.xml.xam.Model;
 import org.netbeans.spi.editor.hints.ErrorDescription;
 import org.netbeans.spi.editor.hints.ErrorDescriptionFactory;
@@ -151,7 +153,7 @@
     }
     
     public static List<ErrorDescription> findHints(final @NonNull POMModel model, final Project project) {
-        final List<ErrorDescription> err = new ArrayList<ErrorDescription>();
+        final List<ErrorDescription> err = new ArrayList<>();
         //before checkModelValid because of #216093
         runMavenValidation(model, err);
         if (!checkModelValid(model)) {
@@ -181,7 +183,7 @@
 
         @Override
         public ModelSource2 getRelatedSource(String relative) {
-            return new M2S(new File(pomFile, relative), null);
+            return new M2S(new File(pomFile.getParentFile(), relative), null);
         }
 
         @Override
@@ -230,7 +232,7 @@
         try {
             problems = embedder.lookupComponent(ProjectBuilder.class).build(new M2S(pom, doc), req).getProblems();
         } catch (ProjectBuildingException x) {
-            problems = new ArrayList<ModelProblem>();
+            problems = new ArrayList<>();
             List<ProjectBuildingResult> results = x.getResults();
             if (results != null) { //one code point throwing ProjectBuildingException contains results,
                 for (ProjectBuildingResult result : results) {
@@ -244,7 +246,7 @@
                 }
             }
         }
-        List<ModelProblem> toRet = new LinkedList<ModelProblem>();
+        List<ModelProblem> toRet = new LinkedList<>();
         for (ModelProblem problem : problems) {
             if(ModelUtils.checkByCLIMavenValidationLevel(problem)) {
                 toRet.add(problem);
@@ -272,5 +274,46 @@
         });
         return providers;
     }
-    
+
+    /**
+     * Returns true if the given text could be a maven property.
+     */
+    static boolean isPropertyExpression(String expression) {
+        return expression != null && expression.startsWith("${") && expression.endsWith("}");
+    }
+
+    /**
+     * Returns the property name of a property expression.
+     */
+    static String getPropertyName(String expression) {
+        if (isPropertyExpression(expression)) {
+            return expression.substring(2, expression.length() - 1);
+        }
+        return expression;
+    }
+
+    /**
+     * Returns the value of the maven property or null.
+     * @param expression the property text, for example: <code>${java.version}</code>.
+     */
+    static String getProperty(POMModel model, String expression) {
+        Properties properties = model.getProject().getProperties();
+        if (properties != null) {
+            return properties.getProperty(getPropertyName(expression));
+        }
+        return null;
+    }
+
+    /**
+     * Returns the first child component with the given name or null.
+     */
+    static POMComponent getFirstChild(POMComponent parent, String name) {
+        for (POMComponent child : parent.getChildren()) {
+            if (name.equals(child.getPeer().getNodeName())) {
+                return child;
+            }
+        }
+        return null;
+    }
+
 }
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.form
index 5301f29..31b9096 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.form
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.form
@@ -1,4 +1,4 @@
-<?xml version="1.1" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8" ?>
 
 <!--
 
@@ -44,7 +44,7 @@
                   <Component id="cbLatest" alignment="0" min="-2" max="-2" attributes="0"/>
                   <Component id="cbSnapshot" alignment="0" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace pref="118" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
@@ -57,7 +57,7 @@
               <Component id="cbLatest" min="-2" max="-2" attributes="0"/>
               <EmptySpace type="unrelated" max="-2" attributes="0"/>
               <Component id="cbSnapshot" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="215" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.java
index 589338b..504b225 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/ReleaseVersionErrorCustomizer.java
@@ -37,7 +37,7 @@
  */
 public class ReleaseVersionErrorCustomizer extends javax.swing.JPanel {
     private final Preferences preferences;
-    private final Map<String, Object> id2Saved = new HashMap<String, Object>();
+    private final Map<String, Object> id2Saved = new HashMap<>();
 
     /** Creates new form ReleaseVersionErrorCustomizer */
     public ReleaseVersionErrorCustomizer(Preferences prefs) {
@@ -68,19 +68,22 @@
         cbRelease = new JCheckBox();
         cbLatest = new JCheckBox();
         cbSnapshot = new JCheckBox();
-        Mnemonics.setLocalizedText(cbRelease, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbRelease.text"));
+
+        Mnemonics.setLocalizedText(cbRelease, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbRelease.text")); // NOI18N
         cbRelease.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
                 cbReleaseActionPerformed(evt);
             }
         });
-        Mnemonics.setLocalizedText(cbLatest, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbLatest.text"));
+
+        Mnemonics.setLocalizedText(cbLatest, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbLatest.text")); // NOI18N
         cbLatest.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
                 cbLatestActionPerformed(evt);
             }
         });
-        Mnemonics.setLocalizedText(cbSnapshot, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbSnapshot.text"));
+
+        Mnemonics.setLocalizedText(cbSnapshot, NbBundle.getMessage(ReleaseVersionErrorCustomizer.class, "ReleaseVersionErrorCustomizer.cbSnapshot.text")); // NOI18N
         cbSnapshot.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
                 cbSnapshotActionPerformed(evt);
@@ -89,18 +92,16 @@
 
         GroupLayout layout = new GroupLayout(this);
         this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(Alignment.LEADING)
+        layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(Alignment.LEADING)
                     .addComponent(cbRelease)
                     .addComponent(cbLatest)
                     .addComponent(cbSnapshot))
-                .addContainerGap(118, Short.MAX_VALUE))
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(Alignment.LEADING)
+        layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addComponent(cbRelease)
@@ -108,7 +109,7 @@
                 .addComponent(cbLatest)
                 .addPreferredGap(ComponentPlacement.UNRELATED)
                 .addComponent(cbSnapshot)
-                .addContainerGap(215, Short.MAX_VALUE))
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
     }// </editor-fold>//GEN-END:initComponents
 
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/RulesManager.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/RulesManager.java
index c612767..796a2e1 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/RulesManager.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/RulesManager.java
@@ -122,9 +122,7 @@
                 Object nonGuiObject = fo.getAttribute(NON_GUI);
                 boolean toGui = true;
                 
-                if ( nonGuiObject != null && 
-                     nonGuiObject instanceof Boolean &&
-                     ((Boolean)nonGuiObject).booleanValue() ) {
+                if (nonGuiObject instanceof Boolean && ((Boolean)nonGuiObject).booleanValue()) {
                     toGui = false;
                 }
                 
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHint.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHint.java
new file mode 100644
index 0000000..bd7c499
--- /dev/null
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHint.java
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.maven.hints.pom;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.prefs.Preferences;
+import javax.swing.JComponent;
+import javax.swing.text.Document;
+import org.apache.maven.artifact.versioning.ComparableVersion;
+import org.netbeans.api.project.Project;
+import org.netbeans.modules.editor.NbEditorUtilities;
+import org.netbeans.modules.maven.hints.pom.spi.Configuration;
+import org.netbeans.modules.maven.hints.pom.spi.POMErrorFixProvider;
+import org.netbeans.modules.maven.indexer.api.NBVersionInfo;
+import org.netbeans.modules.maven.indexer.api.RepositoryQueries;
+import org.netbeans.modules.maven.model.pom.Build;
+import org.netbeans.modules.maven.model.pom.Dependency;
+import org.netbeans.modules.maven.model.pom.DependencyManagement;
+import org.netbeans.modules.maven.model.pom.POMComponent;
+import org.netbeans.modules.maven.model.pom.POMExtensibilityElement;
+import org.netbeans.modules.maven.model.pom.POMModel;
+import org.netbeans.modules.maven.model.pom.PluginManagement;
+import org.netbeans.modules.maven.model.pom.Properties;
+import org.netbeans.modules.maven.model.pom.VersionablePOMComponent;
+import org.netbeans.spi.editor.hints.ChangeInfo;
+import org.netbeans.spi.editor.hints.ErrorDescription;
+import org.netbeans.spi.editor.hints.ErrorDescriptionFactory;
+import org.netbeans.spi.editor.hints.Fix;
+import org.netbeans.spi.editor.hints.Severity;
+import org.openide.util.NbBundle;
+
+import static org.netbeans.modules.maven.hints.pom.Bundle.*;
+
+/**
+ * Marks the artifact if there is a newer version available and provides a fix
+ * which updates the version.
+ * @author mbien
+ */
+@NbBundle.Messages({
+    "TIT_UpdateDependencyHint=Mark artifact upgrade opportunities.",
+    "DESC_UpdateDependencyHint=Marks the artifact if there is a new version available and provides a version upgrde fix."
+                            + "<p>Upgrades of major versions can be optionally omitted.</p>",
+    "HINT_UpdateDependencyHint=New version available: ",
+    "FIX_UpdateDependencyHint=upgrade to: "})
+public class UpdateDependencyHint implements POMErrorFixProvider {
+
+    private static final Configuration config = new Configuration(UpdateDependencyHint.class.getSimpleName(),
+                TIT_UpdateDependencyHint(), DESC_UpdateDependencyHint(), true, Configuration.HintSeverity.WARNING);
+
+    static final String KEY_NO_MAJOR_UPGRADE = "no_major_upgrade";
+
+    private boolean noMajorUpgrde;
+    private UpdateDependencyHintCustomizer customizer;
+
+    @Override
+    public List<ErrorDescription> getErrorsForDocument(POMModel model, Project prj) {
+
+        noMajorUpgrde = getNoMajorUpgradeOption();
+
+        Map<POMComponent, ErrorDescription> hints = new HashMap<>();
+
+        List<Dependency> deps = model.getProject().getDependencies();
+        if (deps != null) {
+            addHintsTo(deps, hints);
+        }
+
+        DependencyManagement depman = model.getProject().getDependencyManagement();
+        if (depman != null && depman.getDependencies() != null) {
+            addHintsTo(depman.getDependencies(), hints);
+        }
+
+        Build build = model.getProject().getBuild();
+        if (build != null) {
+            if (build.getPlugins() != null) {
+                addHintsTo(build.getPlugins(), hints);
+            }
+
+            PluginManagement plugman = build.getPluginManagement();
+            if (plugman != null && plugman.getPlugins() != null) {
+                addHintsTo(plugman.getPlugins(), hints);
+            }
+        }
+
+        return new ArrayList<>(hints.values());
+    }
+
+    private void addHintsTo(List<? extends VersionablePOMComponent> components, Map<POMComponent, ErrorDescription> hints) {
+
+        for (VersionablePOMComponent comp : components) {
+
+            String groupId = comp.getGroupId();
+            String artifactId = comp.getArtifactId();
+
+            if (groupId != null && artifactId != null && !groupId.isEmpty() && !artifactId.isEmpty()) {
+
+                boolean property = false;
+                String version = comp.getVersion();
+                if (PomModelUtils.isPropertyExpression(version)) {
+                    version = PomModelUtils.getProperty(comp.getModel(), version);
+                    property = true;
+                }
+
+                if (version != null) {
+
+                    // don't upgrade clean numerical versions to timestamps or non-numerical versions (other way around is allowed)
+                    boolean allow_qualifier = !isNumerical(version);
+                    boolean allow_timestamp = !noTimestamp(version);
+                    String requiredPrefix = noMajorUpgrde ? getMajorComponentPrefix(version) : "";
+
+                    Optional<ComparableVersion> latest = RepositoryQueries.getVersionsResult(groupId, artifactId, null)
+                            .getResults().stream()
+                            .map(NBVersionInfo::getVersion)
+                            .filter((v) -> !v.isEmpty() && v.startsWith(requiredPrefix))
+                            .filter((v) -> allow_qualifier || !Character.isDigit(v.charAt(0)) || isNumerical(v))
+                            .filter((v) -> allow_timestamp || !Character.isDigit(v.charAt(0)) || noTimestamp(v))
+                            .map(ComparableVersion::new)
+                            .max(ComparableVersion::compareTo);
+
+                    if (latest.isPresent() && latest.get().compareTo(new ComparableVersion(version)) > 0) {
+                        POMComponent version_comp = null;
+                        if (property) {
+                            Properties props = comp.getModel().getProject().getProperties();
+                            if (props != null) {
+                                version_comp = PomModelUtils.getFirstChild(props, PomModelUtils.getPropertyName(comp.getVersion()));
+                            }
+                        } else {
+                            version_comp = PomModelUtils.getFirstChild(comp, "version");
+                        }
+                        if (version_comp instanceof POMExtensibilityElement) {
+                            ErrorDescription previous = hints.get(version_comp);
+                            if (previous == null || compare(((UpdateVersionFix) previous.getFixes().getFixes().get(0)).version, version) > 0) {
+                                hints.put(version_comp, createHintForComponent((POMExtensibilityElement) version_comp, latest.get().toString()));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private static boolean isNumerical(String v) {
+        for (char c : v.toCharArray()) {
+            if (!(Character.isDigit(c) || c == '.')) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private boolean noTimestamp(String v) {
+        char[] chars = v.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            if (!(Character.isDigit(chars[i]))) {
+                return i == 0 || Integer.parseInt(v.substring(0, i)) < 10_000;
+            }
+        }
+        return Integer.parseInt(v) < 10_000;
+    }
+
+    // example: in '3.14' -> out '3.'
+    private String getMajorComponentPrefix(String v) {
+        int dot = v.indexOf('.');
+        if (dot > 0) {
+            String major = v.substring(0, dot+1);
+            if (isNumerical(major)) {
+                return major;
+            }
+        }
+        return "";
+    }
+
+    private static int compare(String version1, String version2) {
+        return new ComparableVersion(version1).compareTo(new ComparableVersion(version2));
+    }
+
+    private ErrorDescription createHintForComponent(POMExtensibilityElement comp, String version) {
+        Document doc = comp.getModel().getBaseDocument();
+        int line = NbEditorUtilities.getLine(doc, comp.findPosition(), false).getLineNumber() + 1;
+        List<Fix> fix =  Collections.singletonList(new UpdateVersionFix(comp, version));
+        return ErrorDescriptionFactory.createErrorDescription(Severity.HINT, HINT_UpdateDependencyHint() + version, fix, doc, line);
+    }
+
+    private static class UpdateVersionFix implements Fix {
+
+        private final POMExtensibilityElement version_comp;
+        private final String version;
+
+        private UpdateVersionFix(POMExtensibilityElement component, String toVersion) {
+            this.version_comp = component;
+            this.version = toVersion;
+        }
+
+        @Override
+        public String getText() {
+            return FIX_UpdateDependencyHint() + version;
+        }
+
+        @Override
+        public ChangeInfo implement() throws Exception {
+            PomModelUtils.implementInTransaction(version_comp.getModel(), () -> {
+                version_comp.setElementText(version);
+            });
+            return new ChangeInfo();
+        }
+
+    }
+
+    @Override
+    public void cancel() {
+        customizer = null;
+    }
+
+    @Override
+    public Configuration getConfiguration() {
+        return config;
+    }
+
+    private static boolean getNoMajorUpgradeOption() {
+        return config.getPreferences().getBoolean(KEY_NO_MAJOR_UPGRADE, false);
+    }
+
+    @Override
+    public String getSavedValue(JComponent customizer, String key) {
+        if (KEY_NO_MAJOR_UPGRADE.equals(key) && customizer instanceof UpdateDependencyHintCustomizer) {
+            return Boolean.toString(((UpdateDependencyHintCustomizer)customizer).getSavedNoMajorUpgradeOption());
+        }
+        return null;
+    }
+
+    @Override
+    public JComponent getCustomizer(Preferences prefsCopy) {
+        if (customizer == null) {
+            customizer = new UpdateDependencyHintCustomizer(prefsCopy, getNoMajorUpgradeOption());
+        }
+        return customizer;
+    }
+
+}
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.form b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.form
new file mode 100644
index 0000000..5e885dc
--- /dev/null
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.form
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="cbNoMajorUpgrade" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="cbNoMajorUpgrade" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JCheckBox" name="cbNoMajorUpgrade">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/maven/hints/pom/Bundle.properties" key="UpdateDependencyHintCustomizer.cbNoMajorUpgrade.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+        <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/maven/hints/pom/Bundle.properties" key="UpdateDependencyHintCustomizer.cbNoMajorUpgrade.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.java
new file mode 100644
index 0000000..e5b4f4a
--- /dev/null
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UpdateDependencyHintCustomizer.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.maven.hints.pom;
+
+import java.util.prefs.Preferences;
+import javax.swing.GroupLayout;
+import javax.swing.GroupLayout.Alignment;
+import javax.swing.JCheckBox;
+import org.openide.awt.Mnemonics;
+import org.openide.util.NbBundle;
+
+/**
+ * Options panel for {@link UpdateDependencyHint}.
+ * @author mbien
+ */
+public class UpdateDependencyHintCustomizer extends javax.swing.JPanel {
+    
+    private final boolean noMajorUpgradeOld;
+
+    public UpdateDependencyHintCustomizer(Preferences preferences, boolean noMajorUpgradeInitial) {
+        initComponents();
+        noMajorUpgradeOld = noMajorUpgradeInitial;
+        cbNoMajorUpgrade.setSelected(noMajorUpgradeInitial);
+        cbNoMajorUpgrade.addActionListener((e) -> {
+            preferences.putBoolean(UpdateDependencyHint.KEY_NO_MAJOR_UPGRADE, cbNoMajorUpgrade.isSelected());
+        });
+    }
+
+    boolean getSavedNoMajorUpgradeOption() {
+        return noMajorUpgradeOld;
+    }
+    
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        cbNoMajorUpgrade = new JCheckBox();
+
+        Mnemonics.setLocalizedText(cbNoMajorUpgrade, NbBundle.getMessage(UpdateDependencyHintCustomizer.class, "UpdateDependencyHintCustomizer.cbNoMajorUpgrade.text")); // NOI18N
+        cbNoMajorUpgrade.setToolTipText(NbBundle.getMessage(UpdateDependencyHintCustomizer.class, "UpdateDependencyHintCustomizer.cbNoMajorUpgrade.toolTipText")); // NOI18N
+
+        GroupLayout layout = new GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cbNoMajorUpgrade)
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cbNoMajorUpgrade)
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private JCheckBox cbNoMajorUpgrade;
+    // End of variables declaration//GEN-END:variables
+
+}
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHint.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHint.java
index f99f82f..b51a3b9 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHint.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHint.java
@@ -21,9 +21,11 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.prefs.Preferences;
 import javax.swing.JComponent;
 import javax.xml.namespace.QName;
+import org.apache.maven.artifact.versioning.ComparableVersion;
 import org.netbeans.api.project.Project;
 import org.netbeans.modules.editor.NbEditorUtilities;
 import org.netbeans.modules.maven.hints.pom.spi.Configuration;
@@ -60,38 +62,44 @@
     private static final String SOURCE_TAG = "source";
     private static final String RELEASE_TAG = "release";
 
+    private static final ComparableVersion MIN_VERSION = new ComparableVersion("3.6");
+
     private static final Configuration config = new Configuration(UseReleaseOptionHint.class.getName(),
                 TIT_UseReleaseVersionHint(), DESC_UseReleaseVersionHint(), true, Configuration.HintSeverity.WARNING);
 
     @Override
     public List<ErrorDescription> getErrorsForDocument(POMModel model, Project prj) {
 
-        List<ErrorDescription> hints = new ArrayList<>();
-
         Build build = model.getProject().getBuild();
-        if (build != null) {
-            for (Plugin plugin : build.getPlugins()) {
-                if ("maven-compiler-plugin".equals(plugin.getArtifactId())) {
-                    if (!isPluginCompatible(plugin)) {
-                        return Collections.emptyList();
+
+        if (build != null && build.getPlugins() != null) {
+
+            List<ErrorDescription> hints = new ArrayList<>();
+            Optional<Plugin> compilerPlugin = build.getPlugins().stream()
+                    .filter((p) -> "maven-compiler-plugin".equals(p.getArtifactId()))
+                    .filter(this::isPluginCompatible)
+                    .findFirst();
+
+            if (compilerPlugin.isPresent()) {
+                hints.addAll(createHintsForParent("", compilerPlugin.get().getConfiguration()));
+                if (compilerPlugin.get().getExecutions() != null) {
+                    for (PluginExecution exec : compilerPlugin.get().getExecutions()) {
+                        hints.addAll(createHintsForParent("", exec.getConfiguration()));
                     }
-                    hints.addAll(createHintsForParent("", plugin.getConfiguration()));
-                    if (plugin.getExecutions() != null) {
-                        for (PluginExecution exec : plugin.getExecutions()) {
-                            hints.addAll(createHintsForParent("", exec.getConfiguration()));
-                        }
-                    }
-                    break;
                 }
+            } else {
+                return Collections.emptyList();
             }
+
+            Properties properties = model.getProject().getProperties();
+            if (properties != null) {
+                hints.addAll(createHintsForParent("maven.compiler.", properties));
+            }
+
+            return hints;
         }
 
-        Properties properties = model.getProject().getProperties();
-        if (properties != null) {
-            hints.addAll(createHintsForParent("maven.compiler.", properties));
-        }
-
-        return hints;
+        return Collections.emptyList();
     }
 
     private List<ErrorDescription> createHintsForParent(String prefix, POMComponent parent) {
@@ -108,15 +116,15 @@
 
         try {
             String sourceText = parent.getChildElementText(POMQName.createQName(prefix+SOURCE_TAG, true));
-            if (isProperty(sourceText)) {
+            if (PomModelUtils.isPropertyExpression(sourceText)) {
                 release = sourceText;
-                sourceText = getProperty(sourceText, parent.getModel());
+                sourceText = PomModelUtils.getProperty(parent.getModel(), sourceText);
             }
 
             String targetText = parent.getChildElementText(POMQName.createQName(prefix+TARGET_TAG, true));
-            if (isProperty(targetText)) {
+            if (PomModelUtils.isPropertyExpression(targetText)) {
                 release = targetText;
-                targetText = getProperty(targetText, parent.getModel());
+                targetText = PomModelUtils.getProperty(parent.getModel(), targetText);
             }
 
             source = Integer.parseInt(sourceText);
@@ -152,35 +160,11 @@
      * maven-compiler-plugin version must be >= 3.6
      */
     private boolean isPluginCompatible(Plugin plugin) {
-        String string = plugin.getVersion();
-        if (string == null) {
+        String version = plugin.getVersion();
+        if (version == null || version.isEmpty()) {
             return false;
         }
-        String[] version = string.split("-")[0].split("\\.");
-        try {
-            int major = version.length > 0 ? Integer.parseInt(version[0]) : 0;
-            int minor = version.length > 1 ? Integer.parseInt(version[1]) : 0;
-            if (major < 3 || (major == 3 && minor < 6)) {
-                return false;
-            }
-        } catch (NumberFormatException ignored) {
-            return false;
-        }
-        return true;
-    }
-
-    private static boolean isProperty(String property) {
-        return property != null && property.startsWith("$");
-    }
-
-    private static String getProperty(String prop, POMModel model) {
-        if (prop.length() > 3) {
-            Properties properties = model.getProject().getProperties();
-            if (properties != null) {
-                return properties.getProperty(prop.substring(2, prop.length()-1));
-            }
-        }
-        return null;
+        return new ComparableVersion(version).compareTo(MIN_VERSION) >= 0;
     }
 
     private static class ConvertToReleaseOptionFix implements Fix {
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/Configuration.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/Configuration.java
index f98649c..19936ef 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/Configuration.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/Configuration.java
@@ -38,7 +38,7 @@
     static final String IN_TASK_LIST_KEY = "inTaskList"; // NOI18N
     private final HintSeverity defaultSeverity;
     private final String displayName;
-    private final Map<String, Object> id2Saved = new HashMap<String, Object>();
+    private final Map<String, Object> id2Saved = new HashMap<>();
 
     public Configuration(String id, String displayName, String description, boolean defaultEnabled, HintSeverity defaultSeverity) {
         this.id = id;
@@ -95,7 +95,7 @@
     }
 
 
-    /** Gets current severiry of the hint.
+    /** Gets current severity of the hint.
      * @return Hints severity in current profile.
      */
     public final HintSeverity getSeverity(Preferences p) {
@@ -116,10 +116,17 @@
         return id2Saved.get(key);
     }
 
+    /**
+     * Resets the saved preference values of this configuration.
+     * This should be called once saved or if canceled to be ready for the next round of changes.
+     */
+    public void resetSavedValues() {
+        id2Saved.clear();
+    }
 
     /** Severity of hint
      *  <li><code>ERROR</code>  - will show up as error
-     *  <li><code>WARNING</code>  - will show up as warrnig
+     *  <li><code>WARNING</code>  - will show up as warning
      */
     public static enum HintSeverity {
         ERROR,
diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/POMErrorFixBase.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/POMErrorFixBase.java
index 7ebaa3f..a819aed 100644
--- a/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/POMErrorFixBase.java
+++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/pom/spi/POMErrorFixBase.java
@@ -30,7 +30,7 @@
     
     /** Gets the UI description for this rule. It is fine to return null
      * to get the default behavior. Notice that the Preferences node is a copy
-     * of the node returned from {link:Configuration.getPreferences()}. This is in oder to permit
+     * of the node returned from {link:Configuration.getPreferences()}. This is in order to permit
      * canceling changes done in the options dialog.<BR>
      * It is fine to return null.
      * @param node Preferences node the customizer should work on.
diff --git a/java/maven.hints/test/unit/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHintTest.java b/java/maven.hints/test/unit/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHintTest.java
index 58aefb0..40ac031 100644
--- a/java/maven.hints/test/unit/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHintTest.java
+++ b/java/maven.hints/test/unit/src/org/netbeans/modules/maven/hints/pom/UseReleaseOptionHintTest.java
@@ -50,7 +50,7 @@
         work = FileUtil.toFileObject(getWorkDir());
     }
 
-    public void testProperties() throws Exception {
+    public void testNoPluginNegative() throws Exception {
         FileObject pom = TestFileUtils.writeFile(work, "pom.xml",
             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
             "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
@@ -71,35 +71,10 @@
         Project project = ProjectManager.getDefault().findProject(pom.getParent());
 
         List<ErrorDescription> hints = new UseReleaseOptionHint().getErrorsForDocument(model, project);
-        assertEquals(2, hints.size());
-    }
-
-    public void testPropertiesNegative() throws Exception {
-        FileObject pom = TestFileUtils.writeFile(work, "pom.xml",
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-            "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
-            "    <modelVersion>4.0.0</modelVersion>\n" +
-            "    <groupId>test</groupId>\n" +
-            "    <artifactId>mavenproject1</artifactId>\n" +
-            "    <version>1.0-SNAPSHOT</version>\n" +
-            "    <packaging>jar</packaging>\n" +
-            "    <properties>\n" +
-            "        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n" +
-            "        <exec.mainClass>test.mavenproject1.Mavenproject1</exec.mainClass>\n" +
-            "        <maven.compiler.source>8</maven.compiler.source>\n" +
-            "        <maven.compiler.target>8</maven.compiler.target>\n" +
-            "    </properties>\n" +
-            "</project>");
-
-        POMModel model = POMModelFactory.getDefault().getModel(Utilities.createModelSource(pom));
-        Project project = ProjectManager.getDefault().findProject(pom.getParent());
-
-        List<ErrorDescription> hints = new UseReleaseOptionHint().getErrorsForDocument(model, project);
         assertEquals(0, hints.size());
     }
 
-    public void testCompilerPlugin() throws Exception {
-        FileObject pom = TestFileUtils.writeFile(work, "pom.xml",
+    private static final String COMPILER_POM =
             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
             "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
             "    <modelVersion>4.0.0</modelVersion>\n" +
@@ -141,7 +116,10 @@
             "            </plugin>\n" +
             "        </plugins>\n" +
             "    </build>\n" +
-            "</project>");
+            "</project>";
+
+    public void testCompilerPlugin() throws Exception {
+        FileObject pom = TestFileUtils.writeFile(work, "pom.xml", COMPILER_POM);
 
         POMModel model = POMModelFactory.getDefault().getModel(Utilities.createModelSource(pom));
         Project project = ProjectManager.getDefault().findProject(pom.getParent());
@@ -150,4 +128,24 @@
         assertEquals(6, hints.size());
     }
 
+    public void testOldCompilerPluginNegative() throws Exception {
+        FileObject pom = TestFileUtils.writeFile(work, "pom.xml", COMPILER_POM.replaceFirst("3.10.1", "3.5"));
+
+        POMModel model = POMModelFactory.getDefault().getModel(Utilities.createModelSource(pom));
+        Project project = ProjectManager.getDefault().findProject(pom.getParent());
+
+        List<ErrorDescription> hints = new UseReleaseOptionHint().getErrorsForDocument(model, project);
+        assertEquals(0, hints.size());
+    }
+
+    public void testCompilerPluginButOldTargetNegative() throws Exception {
+        FileObject pom = TestFileUtils.writeFile(work, "pom.xml", COMPILER_POM.replace("11", "5").replace("17", "1.4"));
+
+        POMModel model = POMModelFactory.getDefault().getModel(Utilities.createModelSource(pom));
+        Project project = ProjectManager.getDefault().findProject(pom.getParent());
+
+        List<ErrorDescription> hints = new UseReleaseOptionHint().getErrorsForDocument(model, project);
+        assertEquals(0, hints.size());
+    }
+
 }
diff --git a/java/maven.indexer.ui/nbproject/org-netbeans-modules-maven-indexer-ui.sig b/java/maven.indexer.ui/nbproject/org-netbeans-modules-maven-indexer-ui.sig
index 7e74ba7..a9ff8af 100644
--- a/java/maven.indexer.ui/nbproject/org-netbeans-modules-maven-indexer-ui.sig
+++ b/java/maven.indexer.ui/nbproject/org-netbeans-modules-maven-indexer-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.51
+#Version 2.52
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/maven.indexer/nbproject/org-netbeans-modules-maven-indexer.sig b/java/maven.indexer/nbproject/org-netbeans-modules-maven-indexer.sig
index 351321f..ea25952 100644
--- a/java/maven.indexer/nbproject/org-netbeans-modules-maven-indexer.sig
+++ b/java/maven.indexer/nbproject/org-netbeans-modules-maven-indexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.57
+#Version 2.58
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
index 428a552..ec029d9 100644
--- a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
+++ b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
@@ -22,7 +22,6 @@
 
 package org.netbeans.modules.maven.indexer;
 
-import org.netbeans.modules.maven.indexer.api.RepositoryQueries;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -92,6 +91,7 @@
 import org.netbeans.modules.maven.indexer.api.QueryField;
 import org.netbeans.modules.maven.indexer.api.RepositoryInfo;
 import org.netbeans.modules.maven.indexer.api.RepositoryPreferences;
+import org.netbeans.modules.maven.indexer.api.RepositoryQueries;
 import org.netbeans.modules.maven.indexer.spi.ArchetypeQueries;
 import org.netbeans.modules.maven.indexer.spi.BaseQueries;
 import org.netbeans.modules.maven.indexer.spi.ChecksumQueries;
@@ -152,7 +152,16 @@
     private static final HashMap<String,Mutex> repoMutexMap = new HashMap<>(4);
 
     private static final Set<Mutex> indexingMutexes = new HashSet<>();
-    private static final RequestProcessor RP = new RequestProcessor("indexing", 1);
+
+    /**
+     * For local IO heavy repo indexing tasks and everything what does not involve downloads.
+     */
+    private static final RequestProcessor RP_LOCAL = new RequestProcessor("maven-local-indexing");
+
+    /**
+     * For remote repo download and indexing tasks.
+     */
+    private static final RequestProcessor RP_REMOTE = new RequestProcessor("maven-remote-indexing");
 
     @Override
     public boolean handlesRepository(RepositoryInfo repo) {
@@ -294,7 +303,7 @@
         }
         // At least one of the group caches could not be loaded, so rebuild it
         if(needGroupCacheRebuild) {
-            RP.submit(() -> {
+            RP_LOCAL.submit(() -> {
                 try {
                     context.rebuildGroups();
                     storeGroupCache(repo, context);
@@ -637,7 +646,12 @@
 
     //spawn the indexing into a separate thread..
     private void spawnIndexLoadedRepo(final RepositoryInfo repo) {
-        RP.post(() -> {
+
+        // 2 RPs allow concurrent local repo indexing during remote index downloads
+        // while also largely avoiding to run two disk-IO heavy tasks at once.
+        RequestProcessor rp = repo.isLocal() ? RP_LOCAL : RP_REMOTE;
+
+        rp.post(() -> {
             getRepoMutex(repo).writeAccess((Mutex.Action<Void>) () -> {
                 try {
                     indexLoadedRepo(repo, true);
diff --git a/java/maven.junit.ui/src/org/netbeans/modules/maven/junit/ui/MavenJUnitNodeOpener.java b/java/maven.junit.ui/src/org/netbeans/modules/maven/junit/ui/MavenJUnitNodeOpener.java
index 87e27f8..daf44d4 100644
--- a/java/maven.junit.ui/src/org/netbeans/modules/maven/junit/ui/MavenJUnitNodeOpener.java
+++ b/java/maven.junit.ui/src/org/netbeans/modules/maven/junit/ui/MavenJUnitNodeOpener.java
@@ -63,7 +63,7 @@
         Children childrens = node.getChildren();
         if (childrens != null) {
             Node child = childrens.getNodeAt(0);
-            if ((child != null) && (child instanceof MavenJUnitTestMethodNode)) {
+            if (child instanceof MavenJUnitTestMethodNode) {
                 final FileObject fo = ((MavenJUnitTestMethodNode) child).getTestcaseFileObject();
                 if (fo != null) {
                     final long[] line = new long[]{0};
diff --git a/java/maven.model/nbproject/org-netbeans-modules-maven-model.sig b/java/maven.model/nbproject/org-netbeans-modules-maven-model.sig
index 11667d5..9fb2ce8 100644
--- a/java/maven.model/nbproject/org-netbeans-modules-maven-model.sig
+++ b/java/maven.model/nbproject/org-netbeans-modules-maven-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61
+#Version 1.62
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/maven.osgi/src/org/netbeans/modules/maven/osgi/templates/ActivatorIterator.java b/java/maven.osgi/src/org/netbeans/modules/maven/osgi/templates/ActivatorIterator.java
index 869397e..a04aee6 100644
--- a/java/maven.osgi/src/org/netbeans/modules/maven/osgi/templates/ActivatorIterator.java
+++ b/java/maven.osgi/src/org/netbeans/modules/maven/osgi/templates/ActivatorIterator.java
@@ -204,7 +204,7 @@
         // Creating steps.
         Object prop = wiz.getProperty (WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[])prop;
         }
         String[] steps = createSteps (beforeSteps, panels);
diff --git a/java/maven/build.xml b/java/maven/build.xml
index 96e8916..3ee3811 100644
--- a/java/maven/build.xml
+++ b/java/maven/build.xml
@@ -30,8 +30,7 @@
         <javac srcdir="mavensrc" destdir="build/mavenclasses" 
             debug="${build.compiler.debug}" 
             deprecation="${build.compiler.deprecation}" 
-            source="1.7"
-            target="1.7"
+            release="8"
             includeantruntime="false">
             <classpath>
                 <fileset dir="${maven.embedder.dir}/maven/lib">
@@ -55,7 +54,13 @@
         </jar>
         <copy overwrite="true" tofile="build/mavenclasses/META-INF/plexus/components.xml" file="mavensrc/org/netbeans/modules/maven/event/components.xml"/>
         <!-- we use jarjar to repackage simple json, to avoid clashes with 3rd party maven plugins possibly including it in their dependencies -->
-        <taskdef name="jarjar" classpath="./external/jarjar-1.5.jar" classname="org.pantsbuild.jarjar.JarJarTask" loaderref="lib.path.loader"/>
+        <taskdef name="jarjar" classname="org.pantsbuild.jarjar.JarJarTask" loaderref="lib.path.loader">
+            <classpath>
+                <pathelement location="./external/asm-7.0.jar"/>
+                <pathelement location="./external/asm-commons-7.0.jar"/>
+                <pathelement location="./external/jarjar-1.7.2.jar"/>
+            </classpath>
+        </taskdef>
         <jarjar jarfile="${cluster}/maven-nblib/netbeans-eventspy.jar" compress="false">
             <fileset dir="build/mavenclasses" >
                 <include name="org/netbeans/modules/maven/event/**"/>
diff --git a/java/maven/external/asm-7.0-license.txt b/java/maven/external/asm-7.0-license.txt
new file mode 100644
index 0000000..5a40894
--- /dev/null
+++ b/java/maven/external/asm-7.0-license.txt
@@ -0,0 +1,42 @@
+Name: ASM
+Description: ASM is an all purpose Java bytecode manipulation and analysis framework
+Origin: https://asm.ow2.io/
+Version: 7.0
+License: ASM
+URL: https://asm.ow2.io/
+Files: asm-7.0.jar, asm-commons-7.0.jar
+Type: compile-time
+Comment: Used to build ueber-jar bundling for simple json library into NbEventSpy
+
+ASM License
+
+ASM: a very small and fast Java bytecode manipulation framework
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/java/maven/external/binaries-list b/java/maven/external/binaries-list
index cb061d7..bfe1b24 100644
--- a/java/maven/external/binaries-list
+++ b/java/maven/external/binaries-list
@@ -14,5 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-E7A996E498FCE8543B5635E83C4EF803CE5C9FEF org.pantsbuild.jarjar:jarjar:1.5
+8E258F158B4572D40598D7F4793CFBFE84A7CC70 org.pantsbuild:jarjar:1.7.2
+D74D4BA0DEE443F68FB2DCB7FCDB945A2CD89912 org.ow2.asm:asm:7.0
+478006D07B7C561AE3A92DDC1829BCA81AE0CDD1 org.ow2.asm:asm-commons:7.0
 E48292EAE5E14EC44978AA53DEBB1AF7DDD6DF93 org.sonatype.aether:aether-api:1.13.1
diff --git a/java/maven/external/jarjar-1.5-license.txt b/java/maven/external/jarjar-1.7.2-license.txt
similarity index 98%
rename from java/maven/external/jarjar-1.5-license.txt
rename to java/maven/external/jarjar-1.7.2-license.txt
index 0c34e8e..74e79da 100644
--- a/java/maven/external/jarjar-1.5-license.txt
+++ b/java/maven/external/jarjar-1.7.2-license.txt
@@ -1,9 +1,11 @@
 Name: Jar Jar Links
 Description: Jar Jar Links is a utility that makes it easy to repackage Java libraries and embed them into your own distribution.
 Origin: pantsbuild
-Version: 1.5
+Version: 1.7.2
 License: Apache-2.0
 URL: https://github.com/pantsbuild/jarjar
+Type: compile-time
+Comment: Used to build ueber-jar bundling for simple json library into NbEventSpy
 
                                  Apache License
                            Version 2.0, January 2004
diff --git a/java/maven/licenseinfo.xml b/java/maven/licenseinfo.xml
index 86205c1..467836a5 100644
--- a/java/maven/licenseinfo.xml
+++ b/java/maven/licenseinfo.xml
@@ -82,6 +82,9 @@
     <fileset>
         <file>src/org/netbeans/modules/maven/resources/AppTest.java.template</file>
         <file>src/org/netbeans/modules/maven/resources/App.java.template</file>
+        <file>src/org/netbeans/modules/maven/execute/proxies.template.xml</file>
+        <file>src/org/netbeans/modules/maven/execute/proxy.template.xml</file>
+        <file>src/org/netbeans/modules/maven/settings.template.xml</file>
         <license ref="Apache-2.0-ASF" />
         <comment type="TEMPLATE_MINIMAL_IP"/>
     </fileset>
diff --git a/java/maven/nbproject/org-netbeans-modules-maven.sig b/java/maven/nbproject/org-netbeans-modules-maven.sig
index ac26815..f73e8e3 100644
--- a/java/maven/nbproject/org-netbeans-modules-maven.sig
+++ b/java/maven/nbproject/org-netbeans-modules-maven.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.154
+#Version 2.156
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1133,6 +1133,8 @@
 meth public java.net.URI getWebAppDirectory()
 meth public java.net.URI[] getResources(boolean)
 meth public org.apache.maven.model.Model getRawModel() throws org.apache.maven.model.building.ModelBuildingException
+meth public org.apache.maven.project.MavenProject getEvaluatedProject(org.netbeans.api.project.ProjectActionContext)
+ anno 0 org.netbeans.api.annotations.common.NonNull()
 meth public org.apache.maven.project.MavenProject getMavenProject()
  anno 0 org.netbeans.api.annotations.common.NonNull()
 meth public org.apache.maven.project.MavenProject loadAlternateMavenProject(org.netbeans.modules.maven.embedder.MavenEmbedder,java.util.List<java.lang.String>,java.util.Properties)
@@ -1155,7 +1157,7 @@
 meth public void triggerDependencyDownload()
 meth public void triggerSourceJavadocDownload(boolean)
 supr java.lang.Object
-hfds BINARYRP,NONBINARYRP,files,listener,project,support,task
+hfds BINARYRP,LOG,NONBINARYRP,files,listener,project,support,task
 hcls AccessorImpl,FCHSL
 
 CLSS public org.netbeans.modules.maven.api.PluginPropertyUtils
@@ -1469,7 +1471,7 @@
 meth public void setActiveConfiguration(org.netbeans.modules.maven.api.customizer.ModelHandle2$Configuration)
 meth public void setRawAuxiliaryProperty(java.lang.String,java.lang.String,boolean)
 supr java.lang.Object
-hfds active,auxiliaryProps,configurations,mappings,modConfig,model,modifiedMappings,pomOperations,project,transPropsPrivate,transPropsShared
+hfds active,allActions,auxiliaryProps,configurations,mappings,modConfig,model,modifiedMappings,pomOperations,project,transPropsPrivate,transPropsShared
 hcls AccessorImpl
 
 CLSS public static org.netbeans.modules.maven.api.customizer.ModelHandle2$Configuration
@@ -1847,6 +1849,9 @@
 meth public static org.netbeans.modules.maven.execute.AbstractOutputHandler$Level[] values()
 supr java.lang.Enum<org.netbeans.modules.maven.execute.AbstractOutputHandler$Level>
 
+CLSS public abstract interface org.netbeans.modules.maven.execute.ActionNameProvider
+meth public abstract java.util.ResourceBundle getTranslations()
+
 CLSS public final org.netbeans.modules.maven.execute.ActionToGoalUtils
 fld public static org.netbeans.modules.maven.execute.ActionToGoalUtils$ContextAccessor ACCESSOR
 innr public abstract static ContextAccessor
@@ -1955,6 +1960,7 @@
 CLSS public org.netbeans.modules.maven.execute.DefaultActionGoalProvider
 cons public init()
 meth protected java.io.InputStream getActionDefinitionStream()
+meth public static org.netbeans.modules.maven.execute.model.io.xpp3.NetbeansBuildActionXpp3Reader createI18nReader(java.util.ResourceBundle)
 supr org.netbeans.modules.maven.spi.actions.AbstractMavenActionsProvider
 hfds MAPPINGS
 
diff --git a/java/maven/src/org/netbeans/modules/maven/actions/CreateLibraryAction.java b/java/maven/src/org/netbeans/modules/maven/actions/CreateLibraryAction.java
index e704451..1653298 100644
--- a/java/maven/src/org/netbeans/modules/maven/actions/CreateLibraryAction.java
+++ b/java/maven/src/org/netbeans/modules/maven/actions/CreateLibraryAction.java
@@ -75,7 +75,7 @@
 public class CreateLibraryAction extends AbstractAction implements LookupListener {
     private final Lookup lookup;
     private final Lookup.Result<DependencyNode> result;
-    private static final @StaticResource String LIBRARIES_ICON = "org/netbeans/modules/maven/actions/libraries.gif";;
+    private static final @StaticResource String LIBRARIES_ICON = "org/netbeans/modules/maven/actions/libraries.gif";
     private boolean createRunning;
 
     @Messages("ACT_Library=Create Library")
diff --git a/java/maven/src/org/netbeans/modules/maven/api/NbMavenProject.java b/java/maven/src/org/netbeans/modules/maven/api/NbMavenProject.java
index a390eac..9c08bad 100644
--- a/java/maven/src/org/netbeans/modules/maven/api/NbMavenProject.java
+++ b/java/maven/src/org/netbeans/modules/maven/api/NbMavenProject.java
@@ -612,7 +612,7 @@
     }
 
     public static void addPropertyChangeListener(Project prj, PropertyChangeListener listener) {
-        if (prj != null && prj instanceof NbMavenProjectImpl) {
+        if (prj instanceof NbMavenProjectImpl) {
             // cannot call getLookup() -> stackoverflow when called from NbMavenProjectImpl.createBasicLookup()..
             NbMavenProject watcher = ((NbMavenProjectImpl)prj).getProjectWatcher();
             watcher.addPropertyChangeListener(listener);
@@ -622,7 +622,7 @@
     }
     
     public static void removePropertyChangeListener(Project prj, PropertyChangeListener listener) {
-        if (prj != null && prj instanceof NbMavenProjectImpl) {
+        if (prj instanceof NbMavenProjectImpl) {
             // cannot call getLookup() -> stackoverflow when called from NbMavenProjectImpl.createBasicLookup()..
             NbMavenProject watcher = ((NbMavenProjectImpl)prj).getProjectWatcher();
             watcher.removePropertyChangeListener(listener);
diff --git a/nbbuild/travis/hide-logs.sh b/java/maven/src/org/netbeans/modules/maven/api/execute/Bundle.properties
old mode 100755
new mode 100644
similarity index 80%
rename from nbbuild/travis/hide-logs.sh
rename to java/maven/src/org/netbeans/modules/maven/api/execute/Bundle.properties
index b0030f5..d17e291
--- a/nbbuild/travis/hide-logs.sh
+++ b/java/maven/src/org/netbeans/modules/maven/api/execute/Bundle.properties
@@ -1,5 +1,3 @@
-#!/bin/bash
-
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -17,12 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-"$@" > "/tmp/command_log.txt" 2>&1
-
-RESULT=$?
-
-if [ $RESULT -ne 0 ] ; then
-    echo "$(</tmp/command_log.txt)"
-fi
-
-exit $RESULT
+# Branding API
+# Enables on-the-fly override of proxy in maven sttings. Permitted values: true, false.
+org.netbeans.modules.maven.api.execute.NetworkProxySettings.allowOverride=true
diff --git a/java/maven/src/org/netbeans/modules/maven/api/output/OutputUtils.java b/java/maven/src/org/netbeans/modules/maven/api/output/OutputUtils.java
index 88a8e09..fc54c0e 100644
--- a/java/maven/src/org/netbeans/modules/maven/api/output/OutputUtils.java
+++ b/java/maven/src/org/netbeans/modules/maven/api/output/OutputUtils.java
@@ -28,6 +28,8 @@
 import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.queries.SourceForBinaryQuery;
 import org.netbeans.api.project.Project;
@@ -35,6 +37,7 @@
 import org.netbeans.spi.java.classpath.support.ClassPathSupport;
 import org.openide.awt.StatusDisplayer;
 import org.openide.cookies.EditorCookie;
+import org.openide.cookies.OpenCookie;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.URLMapper;
 import org.openide.loaders.DataObject;
@@ -50,7 +53,9 @@
  * @author mkleint
  */
 public final class OutputUtils {
-    public static final Pattern linePattern = Pattern.compile("(?:\\[catch\\])?\\sat (.*)\\((?:Native Method|(.*)\\.java\\:(\\d+))\\)"); //NOI18N
+
+    // example: '[WARN]  	at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)'
+    public static final Pattern linePattern = Pattern.compile("(?:\\[\\w+\\])?\\s*(?:\\[catch\\]\\s)?at\\s(.*)\\((?:Native Method|(.*)\\.java\\:(\\d+))\\)"); //NOI18N
  
     private static final Map<Project, StacktraceOutputListener> projectStacktraceListeners = new WeakHashMap<>();
     private static final Map<FileObject, StacktraceOutputListener> fileStacktraceListeners = new WeakHashMap<>();
@@ -115,13 +120,10 @@
         return null;
     }
     
-    /**
-     * 
-     * @param line
-     * @param classPath
-     * @return 
-     */
     private static StacktraceAttributes matchStackTraceLine(String line) {
+        if (!line.endsWith(")")) {
+            return null; // fast path -> not a stack trace
+        }
         Matcher match = linePattern.matcher(line);
         if (match.matches() && match.groupCount() == 3) {
             String method = match.group(1);
@@ -175,17 +177,21 @@
                 Logger.getLogger(OutputUtils.class.getName()).log(Level.WARNING, "No file found for output line {0}", ev.getLine()); // NOI18N
                 StatusDisplayer.getDefault().setStatusText(Bundle.NoSource(ev.getLine()));
                 return;
-            } 
-            
-            ClassPath classPath = getClassPath();
-            int index = sa.method.indexOf(sa.file);
-            String packageName = sa.method.substring(0, index).replace('.', '/'); //NOI18N
+            }
+
+            // example: at java.base/java.io.FileReader.<init>(FileReader.java:60)
+            int start = sa.method.indexOf('/') + 1;
+            int end = sa.method.indexOf(sa.file);
+            String packageName = sa.method.substring(start, end).replace('.', '/'); //NOI18N
             String resourceName = packageName + sa.file + ".class"; //NOI18N
+
             // issue #258546; have to check all resources. javafx unpacks all classes to target,
             // SourceForBinaryQuery then fails to find the according java file ...            
+            ClassPath classPath = getClassPath();
             List<FileObject> resources = classPath.findAllResources(resourceName);
             if (resources != null) {
-                for (FileObject resource : resources) {                    
+                // find and open source file
+                for (FileObject resource : resources) {
                     FileObject root = classPath.findOwnerRoot(resource);
                     if (root != null) {
                         URL url = URLMapper.findURL(root, URLMapper.INTERNAL);
@@ -215,8 +221,18 @@
                             }
                         }
                     }
-                }                
-                StatusDisplayer.getDefault().setStatusText(Bundle.NoSource(sa.file));
+                }
+                // open class file as fallback
+                try {
+                    FileObject resource = classPath.findResource(resourceName);
+                    if (resource != null) {
+                        DataObject dao = DataObject.find(resource);
+                        OpenCookie cookie = dao.getLookup().lookup(OpenCookie.class);
+                        if (cookie != null) {
+                            cookie.open();
+                        }
+                    }
+                } catch (DataObjectNotFoundException ignore) {}
             } else {
                 StatusDisplayer.getDefault().setStatusText(Bundle.NotFound(sa.file));
             }
@@ -229,6 +245,11 @@
         public void outputLineCleared(OutputEvent ev) {
         }
     }
+
+    private static ClassPath createProxyClassPath(Stream<ClassPath> paths) {
+        List<ClassPath> cp = paths.collect(Collectors.toList());
+        return ClassPathSupport.createProxyClassPath(cp.toArray(new ClassPath[0]));
+    }
     
     private static class ProjectStacktraceOutputListener extends StacktraceOutputListener {
         private final WeakReference<Project> ref;
@@ -241,8 +262,11 @@
         protected ClassPath getClassPath() {
             Project prj = ref.get();
             if(prj != null) {
-                ClassPath[] cp = prj.getLookup().lookup(ProjectSourcesClassPathProvider.class).getProjectClassPaths(ClassPath.EXECUTE);
-                return ClassPathSupport.createProxyClassPath(cp);
+                ProjectSourcesClassPathProvider prov = prj.getLookup().lookup(ProjectSourcesClassPathProvider.class);
+                return createProxyClassPath(
+                    Stream.concat(Stream.of(prov.getProjectClassPaths(ClassPath.EXECUTE)),
+                                  Stream.of(prov.getProjectClassPaths(ClassPath.BOOT)))
+                );
             }
             return null;
         }        
@@ -259,7 +283,9 @@
         protected ClassPath getClassPath() {
             FileObject fileObject = ref.get();
             if(fileObject != null) {
-                return ClassPath.getClassPath(fileObject, ClassPath.EXECUTE);
+                return createProxyClassPath(
+                    Stream.of(ClassPath.getClassPath(fileObject, ClassPath.EXECUTE),
+                              ClassPath.getClassPath(fileObject, ClassPath.BOOT)));
             }
             return null;
         }        
diff --git a/java/maven/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImpl.java b/java/maven/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImpl.java
index 2f471d9..ba919d1 100644
--- a/java/maven/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImpl.java
+++ b/java/maven/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImpl.java
@@ -94,11 +94,8 @@
         if (oldValues == null) {
             return (newValues != null);
         }
-        Iterator<PathResourceImplementation> it = oldValues.iterator();
-        ArrayList<PathResourceImplementation> nl = new ArrayList<PathResourceImplementation>();
-        nl.addAll(newValues);
-        while (it.hasNext()) {
-            PathResourceImplementation res = it.next();
+        ArrayList<PathResourceImplementation> nl = new ArrayList<>(newValues);
+        for (PathResourceImplementation res : oldValues) {
             URL oldUrl = res.getRoots()[0];
             boolean found = false;
             if (nl.isEmpty()) {
@@ -144,12 +141,7 @@
     abstract URI[] createPath();
     
     private List<PathResourceImplementation> getPath() {
-        List<PathResourceImplementation> base = getPath(createPath(), new Includer() {
-            @Override public boolean includes(URL root, String resource) {
-                return AbstractProjectClassPathImpl.this.includes(root, resource);
-            }
-        });
-        return Collections.<PathResourceImplementation>unmodifiableList(base);
+        return Collections.unmodifiableList(getPath(createPath(), AbstractProjectClassPathImpl.this::includes));
     }
 
     protected boolean includes(URL root, String resource) {
@@ -160,12 +152,12 @@
         boolean includes(URL root, String resource);
     }
     
-    public static  List<PathResourceImplementation> getPath(URI[] pieces, final Includer includer) {
-        List<PathResourceImplementation> result = new ArrayList<PathResourceImplementation>();
-        for (int i = 0; i < pieces.length; i++) {
+    public static List<PathResourceImplementation> getPath(URI[] pieces, final Includer includer) {
+        List<PathResourceImplementation> result = new ArrayList<>();
+        for (URI piece : pieces) {
             try {
                 // XXX would be cleaner to take a File[] if that is what these all are anyway!
-                final URL entry = FileUtil.urlForArchiveOrDir(Utilities.toFile(pieces[i]));
+                final URL entry = FileUtil.urlForArchiveOrDir(Utilities.toFile(piece));
                 if (entry != null) {
                     result.add(new FilteringPathResourceImplementation() {
                         @Override public boolean includes(URL root, String resource) {
@@ -182,7 +174,7 @@
                     });
                 }
             } catch (IllegalArgumentException exc) {
-                Logger.getLogger(AbstractProjectClassPathImpl.class.getName()).log(Level.INFO, "Cannot use uri " + pieces[i] + " for classpath", exc);
+                Logger.getLogger(AbstractProjectClassPathImpl.class.getName()).log(Level.INFO, "Cannot use uri " + piece + " for classpath", exc);
             }
         }
         return result;
diff --git a/java/maven/src/org/netbeans/modules/maven/classpath/ClassPathProviderImpl.java b/java/maven/src/org/netbeans/modules/maven/classpath/ClassPathProviderImpl.java
index c6a7db4..009555c 100644
--- a/java/maven/src/org/netbeans/modules/maven/classpath/ClassPathProviderImpl.java
+++ b/java/maven/src/org/netbeans/modules/maven/classpath/ClassPathProviderImpl.java
@@ -25,8 +25,8 @@
 import java.io.File;
 import java.net.URI;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.List;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -49,7 +49,6 @@
 import org.netbeans.modules.maven.api.NbMavenProject;
 import org.netbeans.spi.java.classpath.ClassPathFactory;
 import org.netbeans.spi.java.classpath.ClassPathProvider;
-import static org.netbeans.spi.java.classpath.support.ClassPathSupport.Selector.PROP_ACTIVE_CLASS_PATH;
 import org.netbeans.spi.project.ProjectServiceProvider;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -57,6 +56,8 @@
 import org.openide.util.Utilities;
 import org.openide.util.WeakListeners;
 
+import static org.netbeans.spi.java.classpath.support.ClassPathSupport.Selector.PROP_ACTIVE_CLASS_PATH;
+
 /**
  * Defines class path for maven2 projects..
  *
@@ -111,46 +112,23 @@
      */
     @Override public ClassPath[] getProjectClassPaths(String type) {
         return ProjectManager.mutex().readAccess((Mutex.Action<ClassPath[]>) () -> {
-            if (ClassPath.BOOT.equals(type)) {
-                //TODO
-                return new ClassPath[]{ getBootClassPath(TYPE_SRC), getBootClassPath(TYPE_TESTSRC) };
-            }
-            if (ClassPathSupport.ENDORSED.equals(type)) {
-                return new ClassPath[]{ getEndorsedClassPath() };
-            }
-            if (ClassPath.COMPILE.equals(type)) {
-                List<ClassPath> l = new ArrayList<>(2);
-                l.add(getCompileTimeClasspath(TYPE_SRC));
-                l.add(getCompileTimeClasspath(TYPE_TESTSRC));
-                return l.toArray(new ClassPath[l.size()]);
-            }
-            if (ClassPath.EXECUTE.equals(type)) {
-                List<ClassPath> l = new ArrayList<>(2);
-                l.add(getRuntimeClasspath(TYPE_SRC));
-                l.add(getRuntimeClasspath(TYPE_TESTSRC));
-                return l.toArray(new ClassPath[l.size()]);
-            }
-
-            if (ClassPath.SOURCE.equals(type)) {
-                List<ClassPath> l = new ArrayList<>(2);
-                l.add(getSourcepath(TYPE_SRC));
-                l.add(getSourcepath(TYPE_TESTSRC));
-                return l.toArray(new ClassPath[l.size()]);
-            }
-            if (JavaClassPathConstants.MODULE_BOOT_PATH.equals(type)) {
-                return new ClassPath[] {getModuleBootPath()}; 
-            }
-            if (JavaClassPathConstants.MODULE_COMPILE_PATH.equals(type)) {
-                ClassPath[] l = new ClassPath[2];
-                l[0] = getModuleCompilePath(TYPE_SRC);
-                l[1] = getModuleCompilePath(TYPE_TESTSRC);
-                return l;
-            }
-            if (JavaClassPathConstants.MODULE_CLASS_PATH.equals(type)) {
-                ClassPath[] l = new ClassPath[2];
-                l[0] = getModuleLegacyClassPath(TYPE_SRC);
-                l[1] = getModuleLegacyClassPath(TYPE_TESTSRC);
-                return l;
+            if (null != type) switch (type) {
+                case ClassPath.BOOT:
+                    return new ClassPath[] { getBootClassPath(TYPE_SRC), getBootClassPath(TYPE_TESTSRC) };
+                case ClassPathSupport.ENDORSED:
+                    return new ClassPath[] { getEndorsedClassPath() };
+                case ClassPath.COMPILE:
+                    return new ClassPath[] { getCompileTimeClasspath(TYPE_SRC), getCompileTimeClasspath(TYPE_TESTSRC) };
+                case ClassPath.EXECUTE:
+                    return new ClassPath[] { getRuntimeClasspath(TYPE_SRC), getRuntimeClasspath(TYPE_TESTSRC) };
+                case ClassPath.SOURCE:
+                    return new ClassPath[] { getSourcepath(TYPE_SRC), getSourcepath(TYPE_TESTSRC) };
+                case JavaClassPathConstants.MODULE_BOOT_PATH:
+                    return new ClassPath[] { getModuleBootPath() };
+                case JavaClassPathConstants.MODULE_COMPILE_PATH:
+                    return new ClassPath[] { getModuleCompilePath(TYPE_SRC), getModuleCompilePath(TYPE_TESTSRC) };
+                case JavaClassPathConstants.MODULE_CLASS_PATH:
+                    return new ClassPath[] { getModuleLegacyClassPath(TYPE_SRC), getModuleLegacyClassPath(TYPE_TESTSRC) };
             }
             return new ClassPath[0];
         });
@@ -161,37 +139,18 @@
      * (i.e., excluding tests roots).
      */
     @Override public ClassPath getProjectSourcesClassPath(String type) {
-        if (ClassPath.BOOT.equals(type)) {
-            return getBootClassPath(TYPE_SRC);
+        switch (type) {
+            case ClassPath.BOOT: return getBootClassPath(TYPE_SRC);
+            case ClassPath.COMPILE: return getCompileTimeClasspath(TYPE_SRC);
+            case ClassPath.EXECUTE: return getRuntimeClasspath(TYPE_SRC);
+            case ClassPath.SOURCE: return getSourcepath(TYPE_SRC);
+            case ClassPathSupport.ENDORSED: return getEndorsedClassPath();
+            case JavaClassPathConstants.MODULE_BOOT_PATH: return getModuleBootPath();
+            case JavaClassPathConstants.MODULE_COMPILE_PATH: return getModuleCompilePath(TYPE_SRC);
+            case JavaClassPathConstants.MODULE_CLASS_PATH: return getModuleLegacyClassPath(TYPE_SRC);
+            case JavaClassPathConstants.MODULE_EXECUTE_PATH: return getModuleExecutePath(TYPE_SRC);
+            case JavaClassPathConstants.MODULE_EXECUTE_CLASS_PATH: return getModuleLegacyRuntimeClassPath(TYPE_SRC);
         }
-        if (ClassPathSupport.ENDORSED.equals(type)) {
-            return getEndorsedClassPath();
-        }
-        if (ClassPath.COMPILE.equals(type)) {
-            return getCompileTimeClasspath(TYPE_SRC);
-        }
-        if (ClassPath.SOURCE.equals(type)) {
-            return getSourcepath(TYPE_SRC);
-        }
-        if (ClassPath.EXECUTE.equals(type)) {
-            return getRuntimeClasspath(TYPE_SRC);
-        }
-        if (type.equals(JavaClassPathConstants.MODULE_BOOT_PATH)) {            
-            return getModuleBootPath(); 
-        }
-        if (type.equals(JavaClassPathConstants.MODULE_COMPILE_PATH)) {            
-            return getModuleCompilePath(TYPE_SRC);
-        }
-        if (type.equals(JavaClassPathConstants.MODULE_CLASS_PATH)) {            
-            return getModuleLegacyClassPath(TYPE_SRC);
-        }
-        if (JavaClassPathConstants.MODULE_EXECUTE_PATH.equals(type)) {
-            return getModuleExecutePath(TYPE_SRC);
-        }
-        if (JavaClassPathConstants.MODULE_EXECUTE_CLASS_PATH.equals(type)) {
-            return getModuleLegacyRuntimeClassPath(TYPE_SRC);
-        }
-        assert false;
         return null;
     }
     
@@ -206,30 +165,19 @@
             LOGGER.log(Level.FINEST, " bad type={0} for {1}", new Object[] {type, file}); //NOI18N
             return null;
         }
-        if (type.equals(ClassPath.COMPILE)) {
-            return getCompileTimeClasspath(fileType);
-        } else if (type.equals(ClassPath.EXECUTE)) {
-            return getRuntimeClasspath(fileType);
-        } else if (ClassPath.SOURCE.equals(type)) {
-            return getSourcepath(fileType);
-        } else if (type.equals(ClassPath.BOOT)) {
-            return getBootClassPath(fileType);
-        } else if (type.equals(ClassPathSupport.ENDORSED)) {
-            return getEndorsedClassPath();
-        } else if (type.equals(JavaClassPathConstants.PROCESSOR_PATH)) {
-            return getAnnotationProcClassPath(fileType);
-        } else if (type.equals(JavaClassPathConstants.MODULE_BOOT_PATH)) {            
-            return getModuleBootPath();
-        } else if (type.equals(JavaClassPathConstants.MODULE_COMPILE_PATH)) {            
-            return getModuleCompilePath(fileType);
-        } else if (type.equals(JavaClassPathConstants.MODULE_CLASS_PATH)) {            
-            return getModuleLegacyClassPath(fileType);
-        } else if (type.equals(JavaClassPathConstants.MODULE_EXECUTE_PATH)) {
-            return getModuleExecutePath(fileType);
-        } else if (type.equals(JavaClassPathConstants.MODULE_EXECUTE_CLASS_PATH)) {
-            return getModuleLegacyRuntimeClassPath(fileType);
-        } else {
-            return null;
+        switch (type) {
+            case ClassPath.BOOT: return getBootClassPath(fileType);
+            case ClassPath.COMPILE: return getCompileTimeClasspath(fileType);
+            case ClassPath.EXECUTE: return getRuntimeClasspath(fileType);
+            case ClassPath.SOURCE: return getSourcepath(fileType);
+            case ClassPathSupport.ENDORSED: return getEndorsedClassPath();
+            case JavaClassPathConstants.PROCESSOR_PATH: return getAnnotationProcClassPath(fileType);
+            case JavaClassPathConstants.MODULE_BOOT_PATH: return getModuleBootPath();
+            case JavaClassPathConstants.MODULE_COMPILE_PATH: return getModuleCompilePath(fileType);
+            case JavaClassPathConstants.MODULE_CLASS_PATH: return getModuleLegacyClassPath(fileType);
+            case JavaClassPathConstants.MODULE_EXECUTE_PATH: return getModuleExecutePath(fileType);
+            case JavaClassPathConstants.MODULE_EXECUTE_CLASS_PATH: return getModuleLegacyRuntimeClassPath(fileType);
+            default: return null;
         }
     }
 
@@ -247,19 +195,6 @@
         return false;
     }
     
-    public static FileObject[] convertStringsToFileObjects(List<String> strings) {
-        FileObject[] fos = new FileObject[strings.size()];
-        int index = 0;
-        Iterator<String> it = strings.iterator();
-        while (it.hasNext()) {
-            String str = it.next();
-            fos[index] = FileUtilities.convertStringToFileObject(str);
-            index++;
-        }
-        return fos;
-    }
-    
-    
     private int getType(FileObject file) {
         if(file == null) {
             return TYPE_UNKNOWN;
@@ -370,7 +305,13 @@
     
     private ClassPath getJava8RunTimeClassPath(int type) {
         final int ftype = type == TYPE_WEB ? TYPE_SRC : type;
-        return computeIfAbsent(JAVA8_RUNTIME_PATH + ftype, () -> ClassPathFactory.createClassPath(ftype == TYPE_SRC ? new RuntimeClassPathImpl(getNBMavenProject()) : new TestRuntimeClassPathImpl(getNBMavenProject(), false)));
+        return computeIfAbsent(JAVA8_RUNTIME_PATH + ftype,
+                () -> ClassPathFactory.createClassPath(
+                        ftype == TYPE_SRC
+                            ? new RuntimeClassPathImpl(getNBMavenProject())
+                            : new TestRuntimeClassPathImpl(getNBMavenProject(), false)
+                )
+        );
     }
     
     private ClassPath getTestScopedRuntimeClasspath() {
@@ -626,11 +567,7 @@
             if ( hasTestModuleDescriptor ) {
                 return testPath.get();
             } else {
-                if(hasMainModuleDescriptor) {
-                    return path.get();
-                } else {
-                    return ClassPath.EMPTY;
-                }
+                return hasMainModuleDescriptor ? path.get() : ClassPath.EMPTY;
             }
         }
     }
@@ -650,11 +587,7 @@
             if ( hasTestModuleDescriptor ) {
                 return ClassPath.EMPTY;
             } else {
-                if(hasMainModuleDescriptor) {
-                    return testScopedPath.get();
-                } else {
-                    return testPath.get();
-                }
+                return hasMainModuleDescriptor ? testScopedPath.get() : testPath.get();
             }
         }
     }
@@ -672,12 +605,12 @@
             ClassPath ret = active;
             if (ret == null) {
                 MavenProject mp = proj.getOriginalMavenProject();
-                boolean hasMainModuleDescriptor = mp.getCompileSourceRoots().stream().anyMatch((sourceRoot) -> (new File(sourceRoot, MODULE_INFO_JAVA).exists()));
+                boolean hasMainModuleDescriptor = hasModuleDescriptor(mp.getCompileSourceRoots());
                 if(hasMainModuleDescriptor) {
                     LOGGER.log(Level.FINER, "TestPathSelector {0} for project {1}: has main module-info.java", new Object [] {logDesc, proj.getProjectDirectory().getPath()}); // NOI18N
                 }
                 
-                boolean hasTestModuleDescriptor = mp.getTestCompileSourceRoots().stream().anyMatch((testSourceRoot) -> (new File(testSourceRoot, MODULE_INFO_JAVA).exists()));
+                boolean hasTestModuleDescriptor = hasModuleDescriptor(mp.getTestCompileSourceRoots());
                 if(hasTestModuleDescriptor) {
                     LOGGER.log(Level.FINER, "TestPathSelector {0} for project {1}: has test module-info.java", new Object [] {logDesc, proj.getProjectDirectory().getPath()}); // NOI18N
                 }
@@ -690,6 +623,10 @@
             return ret;
         }
 
+        private boolean hasModuleDescriptor(List<String> roots) {
+            return roots.stream().anyMatch((root) -> Files.exists(Paths.get(root, MODULE_INFO_JAVA)));
+        }
+
         protected abstract ClassPath getActiveClassPath(boolean hasTestModuleDescriptor, boolean hasMainModuleDescriptor);
 
         @Override
@@ -712,7 +649,8 @@
      * This selector chooses the annotation classpath, if it is not empty (has items, or is broken), or the regular
      * compile classpath if annotation path is empty. The selector reacts 
      */
-    private static class AnnotationPathSelector extends ClassPathSelector {
+    private static class AnnotationPathSelector extends ClassPathSelector
+            implements PropertyChangeListener {
         private final ClassPath annotationCP;
         private final Supplier<ClassPath> compileClassPath;
         
@@ -721,18 +659,15 @@
             this.annotationCP = anno;
             this.compileClassPath = compile;
             
-            anno.addPropertyChangeListener(WeakListeners.propertyChange(
-                    e -> {
-                        active = null;
-                        support.firePropertyChange(PROP_ACTIVE_CLASS_PATH, null, null);
-                    }, ClassPath.PROP_ROOTS, anno
-            ));
-//            proj.getProjectWatcher().addPropertyChangeListener((e) -> {
-//                if (NbMavenProject.PROP_PROJECT.equals(e.getPropertyName())) {
-//                    active = null;
-//                    support.firePropertyChange(PROP_ACTIVE_CLASS_PATH, null, null);
-//                }
-//            });
+            anno.addPropertyChangeListener(WeakListeners.propertyChange(this, anno));
+            NbMavenProject watcher = proj.getProjectWatcher();
+            watcher.addPropertyChangeListener(WeakListeners.propertyChange(this, watcher));
+        }
+
+        @Override
+        public void propertyChange(PropertyChangeEvent evt) {
+            active = null;
+            support.firePropertyChange(PROP_ACTIVE_CLASS_PATH, null, null);
         }
 
         @Override
@@ -766,7 +701,7 @@
             // maven checks recursively all source roots for module-info,
             // for performace reasons we will be checking and listening only on the root of a source root
             NbMavenProject.addPropertyChangeListener(proj, (evt) -> {
-                    if (isReset(evt)) {
+                if (isReset(evt)) {
                     active = null;
                     support.firePropertyChange(PROP_ACTIVE_CLASS_PATH, null, null);
                 }
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/CommandLineOutputHandler.java b/java/maven/src/org/netbeans/modules/maven/execute/CommandLineOutputHandler.java
index 8ad34b0..3bc178d 100644
--- a/java/maven/src/org/netbeans/modules/maven/execute/CommandLineOutputHandler.java
+++ b/java/maven/src/org/netbeans/modules/maven/execute/CommandLineOutputHandler.java
@@ -78,17 +78,25 @@
     private static final RequestProcessor PROCESSOR = new RequestProcessor("Maven ComandLine Output Redirection", Integer.getInteger("maven.concurrent.builds", 16) * 2); //NOI18N
     private static final Logger LOG = Logger.getLogger(CommandLineOutputHandler.class.getName());
     private InputOutput inputOutput;
-    /*test*/ static final Pattern DOWNLOAD = Pattern.compile("^(\\d+(/\\d*)? ?(M|K|b|KB|B|\\?)\\s*)+$"); //NOI18N
-    private static final Pattern linePattern = Pattern.compile("\\[(DEBUG|INFO|WARNING|ERROR|FATAL)\\] (.*)"); // NOI18N
+
+    /*
+     * example: '[WARN] [stderr] Exception in thread "main" java.lang.UnsupportedOperationException'
+     * @see Output#mapLevel for details
+     */
+    private static final Pattern linePattern = Pattern.compile("(\\[(DEBUG|TRACE|INFO|WARN|WARNING|ERROR|FATAL)\\]\\s)?(?:\\[(?:stderr|stdout)\\]\\s)?(.*)"); // NOI18N
+
     public static final Pattern startPatternM2 = Pattern.compile("\\[INFO\\] \\[([\\w]*):([\\w]*)[ ]?.*\\]"); // NOI18N
     public static final Pattern startPatternM3 = Pattern.compile("\\[INFO\\] --- (\\S+):\\S+:(\\S+)(?: [(]\\S+[)])? @ \\S+ ---"); // ExecutionEventLogger.mojoStarted NOI18N
+
     private static final Pattern mavenSomethingPlugin = Pattern.compile("maven-(.+)-plugin"); // NOI18N
     private static final Pattern somethingMavenPlugin = Pattern.compile("(.+)-maven-plugin"); // NOI18N
+
     /** @see org.apache.maven.cli.ExecutionEventLogger#logReactorSummary */
     static final Pattern reactorFailure = Pattern.compile("\\[INFO\\] (.+) [.]* FAILURE \\[.+\\]"); // NOI18N
-    private static final Pattern stackTraceElement = OutputUtils.linePattern;
-    
     public static final Pattern reactorSummaryLine = Pattern.compile("(.+) [.]* (FAILURE|SUCCESS) (\\[.+\\])?"); // NOI18N
+
+    private static final Pattern stackTraceElement = OutputUtils.linePattern;
+
     private OutputWriter stdOut;
     private String currentProject;
     private String currentTag;
@@ -107,6 +115,7 @@
     private boolean inStackTrace = false;
     private boolean addMojoFold = false;
     private boolean addProjectFold = false;
+    private boolean foldsBroken;
     private URL[] mavencoreurls;
 
     public CommandLineOutputHandler(InputOutput io, Project proj, ProgressHandle hand, RunConfig config, boolean createVisitorContext) {
@@ -184,7 +193,7 @@
             if (urls == null) {
                 exec.setClasspathURLs(coreurls);
             } else {
-                List<URL> newones = new ArrayList<URL>();
+                List<URL> newones = new ArrayList<>(urls.length + coreurls.length);
                 newones.addAll(Arrays.asList(urls));
                 newones.addAll(Arrays.asList(coreurls));
                 exec.setClasspathURLs(newones.toArray(new URL[0]));
@@ -314,31 +323,27 @@
                         checkSleepiness();
                     }
                     
-                    boolean isDownloadProgress = false;
                     if(line.length() > 0 && line.charAt(line.length() - 1) == '\r') {
-                        // issue #252514
-                        if (DOWNLOAD.matcher(line).matches()) {
-                            isDownloadProgress = true;
-                        } else {
-                            line = line.substring(0, line.length() - 1);
-                        }
+                        line = line.substring(0, line.length() - 1);
                     }
-                    if(!isDownloadProgress) {
-                        Matcher match = linePattern.matcher(line);
-                        if (match.matches()) {
-                            String levelS = match.group(1);
-                            Level level = Level.valueOf(levelS);
-                            String text = match.group(2);
-                            updateFoldForException(text);
-                            processLine(MavenSettings.getDefault().isShowLoggingLevel() ? line : text, stdOut, level);
-                            if (level == Level.INFO && contextImpl == null) { //only perform for maven 2.x now
-                                checkProgress(text);
-                            }
+                    Matcher lineMatcher = linePattern.matcher(line);
+                    if (lineMatcher.matches()) {
+                        String level_group = lineMatcher.group(1);
+                        Level level = mapLevel(lineMatcher.group(2));
+                        String msg = lineMatcher.group(3);
+                        updateFoldForException(msg);
+                        if (MavenSettings.getDefault().isShowLoggingLevel() && level_group != null) {
+                            processLine(level_group + msg, stdOut, level);
                         } else {
-                            // oh well..
-                            updateFoldForException(line);
-                            processLine(line, stdOut, Level.INFO);
+                            processLine(msg, stdOut, level);
                         }
+                        if (level == Level.INFO && contextImpl == null) { //only perform for maven 2.x now
+                            checkProgress(msg);
+                        }
+                    } else {
+                        // shouldn't happen since linePattern should match everything
+                        updateFoldForException(line);
+                        processLine(line, stdOut, Level.INFO);
                     }
                     if (contextImpl == null && firstFailure == null) {
                         Matcher match = reactorFailure.matcher(line);
@@ -350,17 +355,17 @@
                     //however there's no other way to have the proper line marked as beginning of a section (as the event comes first)
                     //without this, the last line of previous output would be marked as beginning of the fold.
                     if (addMojoFold && line.startsWith("[INFO] ---")) {     //NOI18N
-                        currentTreeNode.startFold(inputOutput);
+                        foldsBroken |= currentTreeNode.startFold(inputOutput);
                         addMojoFold = false;
                     }
                     if (addProjectFold && line.startsWith("[INFO] Building")) {
-                        currentTreeNode.startFold(inputOutput);
+                        foldsBroken |= currentTreeNode.startFold(inputOutput);
                         addProjectFold = false;
                     }
                     line = nextLine != null ? nextLine : readLine();
                 }
             } catch (IOException ex) {
-                java.util.logging.Logger.getLogger(CommandLineOutputHandler.class.getName()).log(java.util.logging.Level.FINE, null, ex);
+                LOG.log(java.util.logging.Level.FINE, null, ex);
             } finally {
                 if (contextImpl == null) {
                     CommandLineOutputHandler.this.processEnd(getEventId(PRJ_EXECUTE, null), stdOut);
@@ -376,6 +381,24 @@
             }
         }
 
+        // mvnd uses standard SLF4J levels while mvn prints WARN as WARNING
+        // see MavenSimpleLogger#renderLevel(int) in the maven repo
+        private Level mapLevel(String string) {
+            if (string == null) {
+                return Level.INFO;
+            } else if ("WARN".equals(string)) {
+                return Level.WARNING;
+            } else if ("TRACE".equals(string)) {
+                return Level.DEBUG; // where is trace?
+            } else {
+                try {
+                    return Level.valueOf(string);
+                } catch (IllegalArgumentException ex) {
+                    return Level.INFO;
+                }
+            }
+        }
+
         private ExecutionEventObject parseExecEvent(String line) {
             String jsonContent = line.substring(INFO_NETBEANS_EXEC_EVENT.length());
             try {
@@ -399,7 +422,7 @@
          * or is another text, and update folds accordingly.
          */
         private void updateFoldForException(String line) {
-            if (stackTraceElement.matcher(line).find()) {
+            if (line.endsWith(")") && stackTraceElement.matcher(line).matches()) {
                 inStackTrace = true;
                 if (!currentTreeNode.hasInnerOutputFold()) {
                     currentTreeNode.startInnerOutputFold(inputOutput);
@@ -545,6 +568,9 @@
     }
 
     private void trimTree(ExecutionEventObject obj) {
+        if (foldsBroken) {
+            return;
+        }
         ExecutionEventObject start = currentTreeNode.getStartEvent();
         while (!matchingEvents(obj.type, start.type)) { //#229877
             ExecutionEventObject innerEnd = createEndForStart(start);
@@ -592,7 +618,7 @@
 
     private static final Map<ExecutionEvent.Type, ExecutionEvent.Type> END_TO_START_Mappings;
     static {
-        END_TO_START_Mappings = new EnumMap<ExecutionEvent.Type, ExecutionEvent.Type>(ExecutionEvent.Type.class);
+        END_TO_START_Mappings = new EnumMap<>(ExecutionEvent.Type.class);
         END_TO_START_Mappings.put(ExecutionEvent.Type.ForkFailed, ExecutionEvent.Type.ForkStarted);
         END_TO_START_Mappings.put(ExecutionEvent.Type.ForkSucceeded, ExecutionEvent.Type.ForkStarted);
         END_TO_START_Mappings.put(ExecutionEvent.Type.ForkedProjectFailed, ExecutionEvent.Type.ForkedProjectStarted);
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/MavenCommandLineExecutor.java b/java/maven/src/org/netbeans/modules/maven/execute/MavenCommandLineExecutor.java
index b1805f6..da53628 100644
--- a/java/maven/src/org/netbeans/modules/maven/execute/MavenCommandLineExecutor.java
+++ b/java/maven/src/org/netbeans/modules/maven/execute/MavenCommandLineExecutor.java
@@ -38,6 +38,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.ExecutionException;
 import java.util.function.Consumer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -84,6 +85,7 @@
 import org.netbeans.spi.project.ui.support.BuildExecutionSupport;
 import org.openide.LifecycleManager;
 import org.openide.awt.HtmlBrowser;
+import org.openide.awt.NotificationDisplayer;
 import org.openide.execution.ExecutionEngine;
 import org.openide.execution.ExecutorTask;
 import org.openide.filesystems.FileObject;
@@ -92,7 +94,9 @@
 import org.openide.modules.Places;
 import org.openide.modules.SpecificationVersion;
 import org.openide.util.Exceptions;
+import org.openide.util.ImageUtilities;
 import org.openide.util.Lookup;
+import org.openide.util.NbBundle;
 import org.openide.util.RequestProcessor;
 import org.openide.util.Task;
 import org.openide.util.TaskListener;
@@ -143,6 +147,8 @@
     private static final RequestProcessor RP = new RequestProcessor(MavenCommandLineExecutor.class.getName(),1);
 
     private static final RequestProcessor UPDATE_INDEX_RP = new RequestProcessor(RunUtils.class.getName(), 5);
+
+    private static final String ICON_MAVEN_PROJECT = "org/netbeans/modules/maven/resources/Maven2Icon.gif"; // NOI18N
     /**
      * Execute maven build in NetBeans execution engine.
      * Most callers should rather use {@link #run} as this variant does no (non-late-bound) prerequisite checks.
@@ -200,6 +206,11 @@
         this.io = io;
     }
 
+    @NbBundle.Messages({
+        "# {0} - original message",
+        "ERR_CannotOverrideProxy=Could not override the proxy: {0}",
+        "ERR_BuildCancelled=Build cancelled by the user"
+    })
     /**
      * not to be called directly.. use execute();
      */
@@ -225,6 +236,49 @@
         int executionresult = -10;
         final InputOutput ioput = getInputOutput();
 
+        // TODO: maybe global instance for project-less operation ?
+        MavenProxySupport mps = (clonedConfig.getProject() == null) ? null : clonedConfig.getProject().getLookup().lookup(MavenProxySupport.class);
+        if (mps != null) {
+            boolean ok = false;
+            try {
+                MavenProxySupport.ProxyResult res = mps.checkProxySettings().get();
+                
+                if (res != null) {
+                    res.configure(clonedConfig);
+                }
+                if (res.getStatus() == MavenProxySupport.Status.ABORT) {
+                    IOException ex = res.getException();
+                    
+                    if (ex == null) {
+                        ioput.getErr().append(Bundle.ERR_BuildCancelled());
+                    } else {
+                        throw ex;
+                    }
+                    
+                } else {
+                    ok = true;
+                }
+            } catch (IOException ex) {
+                NotificationDisplayer.getDefault().notify(Bundle.TITLE_ProxyUpdateFailed(),
+                        ImageUtilities.loadImageIcon(ICON_MAVEN_PROJECT, false),
+                        ex.getLocalizedMessage(), null, NotificationDisplayer.Priority.NORMAL, NotificationDisplayer.Category.ERROR);
+                ioput.getErr().append(Bundle.ERR_CannotOverrideProxy(ex.getLocalizedMessage()));
+                // FIXME: log exception
+            } catch (ExecutionException ex) {
+                // FIXME: log exception
+            } catch (InterruptedException ex) {
+                // FIXME: log exception
+            } finally {
+                if (!ok) {
+                    ioput.getOut().close();
+                    ioput.getErr().close();
+                    actionStatesAtFinish(null, null);
+                    markFreeTab();
+                    return;
+                }
+            }
+        }
+        
         final ProgressHandle handle = ProgressHandle.createHandle(clonedConfig.getTaskDisplayName(), this, new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -469,7 +523,11 @@
                 toRet.add(rel != null ? rel : mp.getGroupId() + ':' + mp.getArtifactId());
             }
         }
-
+        Object o = config.getInternalProperties().get("NbIde.configOverride"); // NOI18N
+        if (o instanceof String) {
+            toRet.add("--settings");
+            toRet.add(o.toString());
+        }
         String opts = MavenSettings.getDefault().getDefaultOptions();
         if (opts != null) {
             try {
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/MavenProxySupport.java b/java/maven/src/org/netbeans/modules/maven/execute/MavenProxySupport.java
new file mode 100644
index 0000000..adcd448
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/execute/MavenProxySupport.java
@@ -0,0 +1,1000 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.maven.execute;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.StyledDocument;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
+import org.codehaus.plexus.util.xml.pull.MXParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.netbeans.api.editor.document.AtomicLockDocument;
+import org.netbeans.api.editor.document.LineDocument;
+import org.netbeans.api.editor.document.LineDocumentUtils;
+import org.netbeans.api.project.Project;
+import org.netbeans.api.templates.FileBuilder;
+import org.netbeans.modules.maven.api.NbMavenProject;
+import org.netbeans.modules.maven.embedder.EmbedderFactory;
+import org.netbeans.modules.maven.options.MavenSettings;
+import org.netbeans.modules.maven.options.NetworkProxySettings;
+import org.netbeans.spi.project.ProjectServiceProvider;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.awt.NotificationDisplayer;
+import org.openide.cookies.EditorCookie;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.loaders.SaveAsCapable;
+import org.openide.modules.Places;
+import org.openide.util.Exceptions;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Lookup;
+import org.openide.util.MapFormat;
+import org.openide.util.NbBundle;
+
+/**
+ * Checks the proxy settings and possibly reconfigures Maven settings. The class checks the effective proxy settings using {@link ProxySelector} API, then reads the current Maven
+ * settings using {@link EmbedderFactory#getProjectEmbedder()}. If the maven settings do not contain proper proxy setup, maven options ({@link MavenSettings#getNetworkProxy()} is consulted:
+ * <ul>
+ * <li>IGNORE - no special handling
+ * <li>NOTICE - a notice is printed into the notifications area informing about possible bad proxy setup, no other action taken
+ * <li>UPDATE - maven configuration will be automatically updated (see below)
+ * <li>OVERRIDE - persistent global configuration is not changed, but a new settings file will be generated in $nbuser/var/cache/maven and maven {@link BeanRunConfig} will be instructed to use it
+ * <li>ASK - asks the user
+ * </ul>
+ * If maven settings are updated, the original contents is preserved as <code>settings.xml.old</code> or a numbered <code>settings.xml.old.N</code>, first unused N is selected. If the settings file contins
+ * the proxy in effect, but not active, the <code>active</code> property of that proxy will be set to true, and the others to false. Otherwise a new proxy entry with the desired proxy host/port is created.
+ * To disable proxies, all <code>active</code> entries are set to false.
+ * <p>
+ * The {@link ProxyResult#configure(org.netbeans.modules.maven.execute.BeanRunConfig)} should be run before each maven online invocation to potentially replace the global settings file with a customized one,
+ * that specifies the correct proxy.
+ * <p>
+ * When creating customized settings.xml files, the files are named like <code>settings-[hashcode of the oroginal]-[sanitized proxy host].xml. If the settings.xml file does not exist at all, "new" is used
+ * instead of the hashcode. Proxy host sanitization just replaces weird characters by "_".
+ * 
+ * @author sdedic
+ */
+@ProjectServiceProvider(service = MavenProxySupport.class, projectType = NbMavenProject.TYPE)
+public class MavenProxySupport {
+    private static final Logger LOG = Logger.getLogger(MavenProxySupport.class.getName());
+    /**
+     * Sample probe URI - google's public DNS server
+     */
+    private static final String PROBE_URI_STRING = "http://search.maven.org"; // NOI18N
+    
+    private static final String FILENAME_SUFFIX_OLD = ".old"; // NOI18N
+
+    private static final String ICON_MAVEN_PROJECT = "org/netbeans/modules/maven/resources/Maven2Icon.gif"; // NOi18N
+        
+
+    /**
+     * Tag name in settings file.
+     */
+    private static final String TAG_SETTINGS = "settings"; // NOI18N
+
+    /**
+     * Tag name in settings file.
+     */
+    private static final String TAG_PROXIES = "proxies"; // NOI18N
+
+    /**
+     * Tag name in settings file.
+     */
+    private static final String TAG_NAME_ACTIVE = "active"; // NOI18N
+
+    /**
+     * Complete tag start/end. End tag should contain a newline.
+     */
+    private static final String TAG_ACTIVE_START = "<active>"; // NOI18N
+    private static final String TAG_ACTIVE_END = "</active>\n"; // NOI18N
+
+    /**
+     * Tag name in settings file.
+     */
+    private static final String TAG_PROXY = "proxy"; // NOI18N
+
+    /**
+     * Suffix to add to customized settings filename when no proxy is configured (all disabled)
+     */
+    private static final String SUFFIX_NONE_PROXY = "-none"; // NOI18N
+    
+    /**
+     * Suffix for custom settings filename if global settings is missing.
+     */
+    private static final String SUFFIX_NEW_PROXY = "-new";
+    
+    /**
+     * Extension for the settings file
+     */
+    private static final String FILENAME_SETTINGS_EXT = ".xml"; // NOI18N
+    
+    /**
+     * Global settings file name
+     */
+    private static final String FILENAME_BASE_SETTINGS = "settings"; // NOI18N
+    private static final String FILENAME_SETTINGS = FILENAME_BASE_SETTINGS + FILENAME_SETTINGS_EXT;
+
+    
+    private static final int PORT_DEFAULT_HTTPS = 1080;
+    private static final int PORT_DEFAULT_HTTP = 80;
+    
+    /**
+     * Past decisions made by the user during this session. The Map is used so the user si not bothered that often with questions.
+     * If the user chooses 'override' or 'continue' (no action), the Map receives the public proxy spec and the result. If the same
+     * effective proxy is detected, the user is not asked again.
+     */
+    // @GuardedBy(this)
+    private Map<String, ProxyResult>    acknowledgedResults = new HashMap<>();
+    
+    public MavenProxySupport(Project project) {
+    }
+    
+    public CompletableFuture<ProxyResult> checkProxySettings() {
+        return new Processor().checkProxy();
+    }
+    
+    public enum Status {
+        UNKNOWN,
+        CONTINUE,
+        RECONFIGURED,
+        OVERRIDE,
+        ABORT
+    }
+    
+    public static final class ProxyResult {
+        private final Proxy proxy;
+        private final String toolProxy;
+        private final String proxyHost;
+        private final String proxySpec;
+        private final int proxyPort;
+        private final Settings mavenSettings;
+        private final boolean nonDefaultPort;
+        private volatile Status status;
+        TextInfo textInfo;
+        FileObject settingsDir;
+        String settingsFileName = FILENAME_SETTINGS;
+        IOException exception;
+        
+        public ProxyResult(Status status, Proxy proxy) {
+            this.status = status;
+            this.proxy = proxy;
+            this.toolProxy = null;
+            this.proxySpec = null;
+            this.proxyHost = null;
+            this.proxyPort = -1;
+            this.mavenSettings = null;
+            this.nonDefaultPort = false;
+        }
+        
+        public ProxyResult(Status status, Proxy proxy, String toolProxy, String proxySpec, String proxyHost, int proxyPort, boolean nonDefault, Settings mavenSettings) {
+            this.status = status;
+            this.proxy = proxy;
+            this.toolProxy = toolProxy;
+            this.proxySpec = proxySpec;
+            this.proxyHost = proxyHost;
+            this.proxyPort = proxyPort;
+            this.mavenSettings = mavenSettings;
+            this.nonDefaultPort = nonDefault;
+        }
+
+        public Status getStatus() {
+            return status;
+        }
+
+        public Proxy getProxy() {
+            return proxy;
+        }
+
+        public String getToolProxy() {
+            return toolProxy;
+        }
+
+        public String getProxySpec() {
+            return proxySpec;
+        }
+
+        public IOException getException() {
+            return exception;
+        }
+
+        @NbBundle.Messages({
+            "# {0} - settings directory name",
+            "ERR_CannotCreateSettingsDir=Could not create settings directory: {0}",
+            "# {0} - settings file name",
+            "ERR_CannoLocateSettings=Could not locate and open settings file: {0}",
+            "# {0} - proxy id",
+            "# {1} - proxy host",
+            "ERR_CannotDisableProxy=Could not disable proxy id {0}, host {1}",
+            "# {0} - proxy id",
+            "# {1} - proxy host",
+            "ERR_CannotEnableProxy=Could not enable proxy id {0}, host {1}",
+            "# {0} - proxy host",
+            "ERR_CannotInsertProxy=Could not add proxy host {0}"
+        })
+        private FileObject generateNewSettingsFile(Path settingsPath) throws IOException {
+            FileObject settingsDir = this.settingsDir != null ? this.settingsDir : FileUtil.toFileObject(settingsPath.getParent().toFile());
+            if (settingsDir == null) {
+                Path dir = Files.createDirectory(settingsPath.getParent());
+                settingsDir = FileUtil.toFileObject(dir.toFile());
+                if (settingsDir == null) {
+                    throw new IOException(Bundle.ERROR_ConfigUpdateFailed(settingsPath.getParent()));
+                }
+            }
+            Map<String, Object> params = new HashMap<>();
+            params.put("proxyHost", proxyHost);
+            params.put("proxyPort", proxyPort);
+            return FileBuilder.createFromTemplate(
+                    FileUtil.getConfigFile("Templates/Project/Maven2/settings.xml"), settingsDir, settingsFileName, 
+                    params, FileBuilder.Mode.FAIL);
+        }
+        
+        private File getMavenSettings() {
+            return new File(new File(System.getProperty("user.home"), ".m2"), FILENAME_SETTINGS); // NOI18N
+        }
+        
+        public BeanRunConfig configure(BeanRunConfig config) throws IOException {
+            if (status != Status.OVERRIDE) {
+                return config;
+            }
+            // compute digest
+            String uniqueString = "";
+            try {
+                Path p = getMavenSettings().toPath();
+                if (!Files.exists(p)) {
+                    uniqueString = SUFFIX_NEW_PROXY; // NOI18N
+                } else {
+                    MessageDigest dg = MessageDigest.getInstance("SHA1");
+                    byte[] bytes = dg.digest(Files.readAllBytes(p));
+                    StringBuilder sb = new StringBuilder("-");
+                    for (int i = 0; i < bytes.length; i++) {
+                        sb.append(Integer.toHexString(bytes[i] & 0xff));
+                    }
+                    uniqueString = sb.toString();
+                }
+            } catch (NoSuchAlgorithmException | IOException ex) {
+                return config;
+            }
+            settingsDir = FileUtil.toFileObject(Places.getCacheSubdirectory("maven"));
+            if (settingsDir == null) {
+                return config;
+            }
+            if (proxyHost == null) {
+                uniqueString += SUFFIX_NONE_PROXY;
+            } else {
+                uniqueString += "-" + proxySpec.replace(":", "_");
+            }
+            settingsFileName = FILENAME_BASE_SETTINGS + uniqueString + FILENAME_SETTINGS_EXT;
+            FileObject alreadyDone = settingsDir.getFileObject(settingsFileName);
+            if (alreadyDone != null) {
+                config.setInternalProperty("NbIde.configOverride", alreadyDone.getPath());
+                return config;
+            }
+            
+            updateMavenProxy();
+            alreadyDone = settingsDir.getFileObject(settingsFileName);
+            config.setInternalProperty("NbIde.configOverride", alreadyDone.getPath());
+            return config;
+        }
+        
+        private void loadMavenTextInfo() throws IOException, IllegalArgumentException {
+            Path settingsPath = getMavenSettings().toPath();
+            if (!Files.isReadable(settingsPath) && Files.isRegularFile(settingsPath)) {
+                generateNewSettingsFile(settingsPath);
+                return;
+            }
+            XppDelegate del = new XppDelegate(EntityReplacementMap.defaultEntityReplacementMap);
+            
+            try (FileInputStream in = new FileInputStream(settingsPath.toFile())) {
+                del.setInput( ReaderFactory.newXmlReader( in ));
+                while (del.next() != XmlPullParser.END_DOCUMENT) {
+                    // empty, just read
+                }
+                textInfo = del.textInfo;
+            } catch (XmlPullParserException ex) {
+                throw new IOException(ex);
+            }
+        }
+        
+        private AtomicLockDocument adoc;
+        private LineDocument settingsLineDoc;
+        private EditorCookie settingsEditor;
+        private Lookup fileLookup;
+        
+        private void loadSettingsContents() throws IOException {
+            if (settingsEditor != null) {
+                return;
+            }
+            Path settingsPath = getMavenSettings().toPath();
+            FileObject fo = FileUtil.toFileObject(settingsPath.toFile());
+            if (fo == null) {
+                return;
+            }
+            fileLookup = fo.getLookup();
+            EditorCookie cake = fileLookup.lookup(EditorCookie.class);
+            if (cake == null) {
+                throw new IOException(Bundle.ERR_CannoLocateSettings(settingsPath));
+            }
+            StyledDocument doc = cake.openDocument();
+            settingsLineDoc = LineDocumentUtils.as(doc, LineDocument.class);
+            adoc = LineDocumentUtils.asRequired(doc, AtomicLockDocument.class);
+            if (settingsLineDoc == null) {
+                throw new IOException(Bundle.ERR_CannoLocateSettings(settingsPath));
+            }
+            settingsEditor = cake;
+            
+            loadMavenTextInfo();
+        }
+        
+        private String padding(int num) {
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < num; i++) {
+                sb.append(' ');
+            }
+            return sb.toString();
+        }
+        
+        /**
+         * Insert a new proxy:
+         * - if at least one 'proxy' block exists, insert the new definition before all the other ones
+         * - if "proxies" element exists, but no proxy definition, insert right after "proxies"
+         * - if no proxies element exists insert at the position of the first element including the 'proxies' clause.
+         */
+        private void insertNewProxy() throws IOException {
+            int startColumn = 0;
+            LineAndColumn insertAt;
+            
+            StringBuilder textBuilder = new StringBuilder();
+            if (textInfo.proxyTags.isEmpty()) {
+                if (textInfo.proxiesEndTag != null) {
+                    // TODO: obey IDE formatting for xml files ?
+                    insertAt = textInfo.proxiesEndTag;
+                    startColumn = insertAt.column - 1 + 4;
+                    // add 4 spaces, indent between <proxies> and nested <proxy>, we're using padding of the </proxies> here.
+                    textBuilder.append("    "); // NOI18N
+                } else {
+                    insertAt = textInfo.firstTag;
+                    startColumn = insertAt.column - 1;
+                }
+            } else {
+                insertAt = textInfo.proxyTags.get(0).tags.get(TAG_PROXY).startTag;
+                startColumn = insertAt.column - 1;
+            }
+            
+            // inserting at the position of first "proxy" element: no padding in front, add padding at the end.
+            // inserting at the position of </proxies> closing tag: 4-space padding at the start, 
+            try (
+                InputStream inputStream = getClass().getResourceAsStream(textInfo.proxiesEndTag != null ? "proxy.template.xml" : "proxies.template.xml");
+                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) {
+                String s;
+                boolean first = true;
+                
+                while ((s = reader.readLine()) != null) {
+                    if (!first) {
+                        textBuilder.append(padding(startColumn));
+                    }
+                    first = false;
+                    textBuilder.append(s).append("\n");
+                }
+            }
+            // add necessary padding
+            if (!textInfo.proxyTags.isEmpty()) {
+                textBuilder.append(padding(startColumn));
+            } else if (textInfo.proxiesEndTag != null) {
+                textBuilder.append(padding(textInfo.proxiesEndTag.column - 1));
+            } else {
+                textBuilder.append(padding(startColumn));
+            }
+            Map<String, String> args = new HashMap<>();
+            args.put(FMT_PROXY_HOST, proxyHost);
+            args.put(FMT_PROXY_PORT, Integer.toString(proxyPort));
+            
+            MapFormat fmt = new MapFormat(args);
+            fmt.setLeftBrace("${");
+            String contents = fmt.format(textBuilder.toString());
+            
+            IOException[] err = new IOException[1];
+            adoc.runAtomic(() -> {
+                try {
+                    int lineOffset = LineDocumentUtils.getLineStartFromIndex(settingsLineDoc, insertAt.line - 1);
+                    int startOffset = lineOffset + insertAt.column - 1;
+
+                    settingsLineDoc.insertString(startOffset, contents, null);
+                } catch (BadLocationException ex) {
+                    err[0] =  new IOException(Bundle.ERR_CannotInsertProxy(proxyHost));
+                }
+            });
+
+            if (err[0] != null) {
+                throw err[0];
+            }
+        }
+        private static final String FMT_PROXY_PORT = "proxyPort"; // NOI18N
+        private static final String FMT_PROXY_HOST = "proxyHost"; // NOI18N
+        
+        private void enableProxy(org.apache.maven.settings.Proxy p, int proxyIndex, boolean enable) throws IOException {
+            String failureMsg = enable ? Bundle.ERR_CannotEnableProxy(p.getId(), p.getHost()) : Bundle.ERR_CannotDisableProxy(p.getId(), p.getHost());
+            if (textInfo.proxyTags.size() < proxyIndex) {
+                throw new IOException(failureMsg);
+            }
+            ProxyInfo pi = textInfo.proxyTags.get(proxyIndex);
+            TagInfo activeTag = pi.tags.get(TAG_NAME_ACTIVE);
+            IOException[] err = new IOException[1];
+            
+            if (activeTag != null) {
+                adoc.runAtomic(() -> {
+                    try {
+                        int lineOffset = LineDocumentUtils.getLineStartFromIndex(settingsLineDoc, activeTag.startTag.line - 1);
+                        int startOffset = lineOffset + activeTag.startTag.column - 1;
+                        
+                        int endLineOffset = LineDocumentUtils.getLineStartFromIndex(settingsLineDoc, activeTag.endTag.line - 1);
+                        int endOffset = endLineOffset + activeTag.endTag.column - 1;
+                        
+                        String content = settingsLineDoc.getText(startOffset, endOffset - startOffset);
+                        int endStartTagPos = content.indexOf(">");
+                        if (endStartTagPos == -1 || endStartTagPos >= (endOffset - startOffset)) {
+                            // cannot find end of start tag
+                            err[0] =  new IOException(Bundle.ERR_CannotDisableProxy(p.getId(), p.getHost()));
+                            return;
+                        }
+                        int from = startOffset + endStartTagPos + 1;
+                        settingsLineDoc.remove(from, endOffset - from);
+                        settingsLineDoc.insertString(from, enable ? "true" : "false", null); // NOI18N
+                    } catch (BadLocationException ex) {
+                        err[0] =  new IOException(failureMsg);
+                    }
+                });
+            } else {
+                if (pi.firstTag == null) {
+                    throw new IOException(Bundle.ERR_CannotDisableProxy(p.getId(), p.getHost()));
+                }
+                String toInsert = padding(pi.firstTag.column) + TAG_ACTIVE_START + enable + TAG_ACTIVE_END; // NOI18N
+                adoc.runAtomic(() -> {
+                    try {
+                        int lineOffset = LineDocumentUtils.getLineStartFromIndex(settingsLineDoc, pi.firstTag.line - 1);
+                        settingsLineDoc.insertString(lineOffset, toInsert, null);
+                    } catch (BadLocationException ex) {
+                        err[0] =  new IOException(failureMsg);
+                    }
+                });
+            }
+            
+            if (err[0] != null) {
+                throw err[0];
+            }
+        }
+
+        private void updateMavenProxy() throws IOException {
+            loadSettingsContents();
+            
+            if (textInfo == null) {
+                if (settingsDir != null) {
+                    generateNewSettingsFile(FileUtil.toFile(settingsDir).toPath().resolve(settingsFileName));
+                } else {
+                    generateNewSettingsFile(getMavenSettings().toPath());
+                }
+                return;
+            }
+            
+            // case 1: proxy should not be set, let's deactivate all the proxies
+            int pos = 0;
+            if (proxyHost == null) {
+                for (org.apache.maven.settings.Proxy p : mavenSettings.getProxies()) {
+                    if (p.isActive()) {
+                        enableProxy(p, pos, false);
+                    }
+                    pos++;
+                }
+            } else {
+
+                // case 2: there MAY be a matching proxy already defined, but not active.
+                org.apache.maven.settings.Proxy existingProxy = null;
+
+                for (org.apache.maven.settings.Proxy p : mavenSettings.getProxies()) {
+                    if (proxyHost.equals(p.getHost())) {
+                        if (!nonDefaultPort || proxyPort == p.getPort()) {
+                            existingProxy = p;
+                            break;
+                        }
+                    }
+                }
+
+                for (org.apache.maven.settings.Proxy p : mavenSettings.getProxies()) {
+                    if (p != existingProxy) {
+                        enableProxy(p, pos, false);
+                    }
+                    pos++;
+                }
+                if (existingProxy != null) {
+                    if (!existingProxy.isActive()) {
+                        int proxyIndex = mavenSettings.getProxies().indexOf(existingProxy);
+                        if (proxyIndex == -1) {
+                            throw new IOException(Bundle.ERR_CannotEnableProxy(existingProxy.getId(), existingProxy.getHost()));
+                        }
+                        enableProxy(existingProxy, proxyIndex, true);
+                    }
+                } else {
+                    insertNewProxy();
+                }
+            }
+            
+            if (settingsEditor.isModified()) {
+                if (settingsDir != null) {
+                    SaveAsCapable saa = fileLookup.lookup(SaveAsCapable.class);
+                    if (saa != null) {
+                        saa.saveAs(settingsDir, settingsFileName);
+                    } else {
+                        // FIXME: log a warning
+                    }
+                } else {
+                    File settings = getMavenSettings();
+                    String base = settings + FILENAME_SUFFIX_OLD;
+                    File f = new File(settings.getParentFile(), base);
+                    int n = 1;
+                    while (f.exists()) {
+                        f = new File(settings.getParentFile(), base + "." + n); // NOI18N
+                        n++;
+                    }
+                    settings.renameTo(f);
+                    settingsEditor.saveDocument();
+                }
+            }
+        }
+    }
+
+    @NbBundle.Messages({
+        "TITLE_MavenProxyMismatch=Possible Network Proxy Issue",
+        "# {0} - gradle proxy",
+        "MSG_ProxyMisconfiguredDirect=Maven is configured for a proxy {0}, but the system does not require a proxy for network connections. Proxy settings should be removed from user gradle.properties.",
+        "# {0} - system proxy",
+        "MSG_ProxyMisconfiguredMissing=Maven is not configured to use a network proxy, but the proxy {0} seems to be required for network communication. User gradle.properties should be updated to specify a proxy.",
+        "# {0} - system proxy",
+        "# {1} - gradle proxy",
+        "MSG_ProxyMisconfiguredOther=Maven is configured to use a network proxy {1}, but the proxy {0} seems to be required for network communication. Proxy settings should be updated in user gradle.properties.",
+        "MSG_AppendAskUpdate=\nUpdate Maven configuration ? Choose \"Override\" to apply detected proxy only to IDE operations.",
+        "MSG_AppendAskUpdate2=\nUpdate Maven configuration ?",
+        "ACTION_Override=Override",
+        "ACTION_Continue=Keep settings",
+        "# {0} - date/time of the update",
+        "COMMENT_CreatedByNetBeans=# This proxy configuration has been updated by Apache NetBeans on {0}",
+        "TITLE_ConfigUpdateFailed=Configuration update failed",
+        "# {0} - error message",
+        "ERROR_ConfigUpdateFailed=Failed to modify Maven user properties: {0}",
+        "# {0} - proxy specification",
+        "MSG_ProxySetTo=Maven Network proxy set to: {0}",
+        "MSG_ProxyCleared=Maven Network proxy removed",
+    })
+    /**
+     * Encapsulates a single check to avoid an enormous method or a ton of parameters passed through
+     * a method chain. Should be constructed for each new check separately.
+     */
+    private class Processor {
+        Proxy publicProxy;
+        String publicProxyHost;
+        int publicProxyPort;
+        int publicProxyNonDefaultPort;
+        
+        String proxyAuthority;
+        String proxyHost;
+        String publicProxySpec;
+        
+        int proxyPort;
+        
+        Settings mavenSettings;
+        
+        public CompletableFuture<ProxyResult> checkProxy() {
+            boolean supportOverride = NetworkProxySettings.allowProxyOverride();
+            NetworkProxySettings action = MavenSettings.getDefault().getNetworkProxy();
+            if (action == NetworkProxySettings.IGNORE) {
+                return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+            }
+            
+            obtainPublicProxy();
+            loadProjectProxy();
+            
+            boolean direct = publicProxy == null || publicProxy.type() == Proxy.Type.DIRECT;
+            
+            if (direct && proxyAuthority == null) {
+                LOG.log(Level.FINE, "Project does not specify a proxy and none is needed");
+                return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+            }
+            
+            if (publicProxy != null) {
+                if (publicProxyHost == null) {
+                    // unable to decipher proxy address
+                    LOG.log(Level.WARNING, "Unable to decipher proxy: {0}", publicProxy);
+                    return CompletableFuture.completedFuture(new ProxyResult(Status.UNKNOWN, null));
+                }
+                if (publicProxyHost.equals(proxyHost) && proxyPort == publicProxyPort) {
+                    LOG.log(Level.FINE, "Project specifies detected proxy: {0}", publicProxySpec);
+                    return CompletableFuture.completedFuture(new ProxyResult(Status.CONTINUE, publicProxy));
+                }
+            }
+            
+            // at this point, it's obvious that 
+            
+            String userMessage;
+            
+            if (direct) {
+                userMessage = Bundle.MSG_ProxyMisconfiguredDirect(proxyAuthority);
+            } else if (proxyAuthority == null) {
+                userMessage = Bundle.MSG_ProxyMisconfiguredMissing(publicProxySpec);
+            } else {
+                userMessage = Bundle.MSG_ProxyMisconfiguredOther(publicProxySpec, proxyAuthority);
+            }
+            
+            ProxyResult result;
+            synchronized (this) {
+                result = acknowledgedResults.get(publicProxySpec);
+            }
+            if (result != null) {
+                LOG.log(Level.FINE, "Reusing previous decision: {0} with proxy {1}", new Object[] { result.getStatus(), result.proxySpec });
+                switch (result.getStatus()) {
+                    case CONTINUE:
+                        // includes noth NOTICE and IGNORE settings !
+                        action = NetworkProxySettings.IGNORE;
+                        break;
+                    case OVERRIDE: 
+                        action = NetworkProxySettings.OVERRIDE;
+                        break;
+                    case RECONFIGURED:
+                        action = NetworkProxySettings.UPDATE;
+                        break;
+                }
+            }
+
+            switch (action) {
+                case IGNORE:
+                    return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+                    
+                case NOTICE:
+                    NotificationDisplayer.getDefault().notify(Bundle.TITLE_MavenProxyMismatch(),
+                            ImageUtilities.loadImageIcon(ICON_MAVEN_PROJECT, false),
+                            userMessage, null, NotificationDisplayer.Priority.NORMAL, NotificationDisplayer.Category.WARNING);
+                    return CompletableFuture.completedFuture(createResult(Status.CONTINUE));
+                
+                case OVERRIDE:
+                    return CompletableFuture.completedFuture(createResult(Status.OVERRIDE));
+                    
+                case UPDATE:
+                    try {
+                        result = createResult(Status.RECONFIGURED);
+                        result.updateMavenProxy();
+                    } catch (IOException ex) {
+                        result = createResult(ex);
+                    }
+                    return CompletableFuture.completedFuture(result);
+                    
+                case ASK:
+                    if (result != null) {
+                        return CompletableFuture.completedFuture(result);
+                    }
+                    String promptMsg;
+                    
+                    if (supportOverride) {
+                        promptMsg = userMessage + Bundle.MSG_AppendAskUpdate();
+                    } else {
+                        promptMsg = userMessage + Bundle.MSG_AppendAskUpdate2();
+                    }
+                    NotifyDescriptor desc = new NotifyDescriptor.Confirmation(
+                            promptMsg, Bundle.TITLE_MavenProxyMismatch(),
+                            NotifyDescriptor.OK_CANCEL_OPTION,  NotifyDescriptor.WARNING_MESSAGE);
+                    if (supportOverride) {
+                        desc.setAdditionalOptions(new Object[] { Bundle.ACTION_Continue(), Bundle.ACTION_Override() });
+                    } else {
+                        desc.setAdditionalOptions(new Object[] { Bundle.ACTION_Continue() });
+                    }
+                    desc.setValue(NotifyDescriptor.OK_OPTION);
+                    
+                    return DialogDisplayer.getDefault().notifyFuture(desc).thenApply(this::processUserConfirmation).exceptionally(t -> {
+                        if ((t instanceof CompletionException) && (t.getCause() instanceof CancellationException)) {
+                            return createResult(Status.ABORT);
+                        } else {
+                            return createResult(Status.UNKNOWN);
+                        }
+                    });
+            }
+            
+            return null;
+        }
+
+        ProxyResult createResult(IOException ex) {
+            ProxyResult r = createResult(Status.ABORT);
+            r.exception = ex;
+            LOG.log(Level.WARNING, "Failed to configure proxy", ex);
+            return r;
+        }
+
+        ProxyResult createResult(Status s) {
+            boolean keep = false;
+            switch (s) {
+                case OVERRIDE:
+                    keep = true;
+                    LOG.log(Level.FINE, "Will override proxy to {0}", publicProxy);
+                    break;
+                case ABORT:
+                    LOG.log(Level.FINE, "Will abort operation");
+                    break;
+                case CONTINUE:
+                    keep = true;
+                    LOG.log(Level.FINE, "No action will be taken");
+                    break;
+                case RECONFIGURED:
+                    LOG.log(Level.FINE, "User properties were reconfigured to {0}", publicProxy);
+                    break;
+            }
+            ProxyResult r = new ProxyResult(s, publicProxy, proxyAuthority, publicProxySpec, publicProxyHost, publicProxyPort, publicProxyNonDefaultPort > 0, mavenSettings);
+            if (keep) {
+                synchronized (this) {
+                    acknowledgedResults.put(publicProxySpec, r);
+                }
+            }
+            return r;
+        }
+        
+        @NbBundle.Messages({
+            "TITLE_ProxyUpdateFailed=Update of proxy configuration failed"
+        })
+        ProxyResult processUserConfirmation(NotifyDescriptor desc) {
+            Object val = desc.getValue();
+            if (val == NotifyDescriptor.CANCEL_OPTION) {
+                return createResult(Status.ABORT);
+            } else if (val == Bundle.ACTION_Continue()) {
+                return createResult(Status.CONTINUE);
+            } else if (val == Bundle.ACTION_Override()) {
+                return createResult(Status.OVERRIDE);
+            } else if (val == NotifyDescriptor.OK_OPTION) {
+                try {
+                    ProxyResult result = createResult(Status.RECONFIGURED);
+                    result.updateMavenProxy();
+                } catch (IOException ex) {
+                    return createResult(ex);
+                }
+            }
+            return createResult(Status.UNKNOWN);
+        }
+        
+        private void obtainPublicProxy() {
+            URI probeUri;
+            try {
+                probeUri = new URI(PROBE_URI_STRING);
+            } catch (URISyntaxException ex) {
+                // this is competely unexpected
+                Exceptions.printStackTrace(ex);
+                return;
+            }
+            List<Proxy> proxies = ProxySelector.getDefault().select(probeUri);
+            LOG.log(Level.FINER, "Detected proxies for URI {0}: {1}", new Object[] { probeUri, proxies });
+            for (Proxy p : proxies) {
+                if (p.type() == Proxy.Type.HTTP) {
+                    publicProxy = p;
+                    LOG.log(Level.FINE, "Selected HTTP proxy: {0}", p);
+                    break;
+                } else if (p.type() == Proxy.Type.SOCKS) {
+                    if (publicProxy == null) {
+                        LOG.log(Level.FINE, "Found SOCKS proxy: {0}", p);
+                        publicProxy = p;
+                    }
+                }
+            }
+            if (publicProxy != null) {
+                SocketAddress proxyAddress = publicProxy.address();
+                if (proxyAddress instanceof InetSocketAddress) {
+                    InetSocketAddress iaddr = (InetSocketAddress)proxyAddress;
+                    int port = iaddr.getPort();
+                    int defPort = -1;
+
+                    switch(publicProxy.type()) {
+                        case HTTP:
+                            defPort = PORT_DEFAULT_HTTP; 
+                            break;
+                        case SOCKS:
+                            defPort = PORT_DEFAULT_HTTPS; 
+                            break;
+                    }
+                    
+                    if (port > 1) {
+                        publicProxyPort = port;
+                        if (publicProxyPort != defPort) {
+                            publicProxyNonDefaultPort = port;
+                        }
+                    }
+                    publicProxyHost = ((InetSocketAddress) proxyAddress).getHostString();
+                    publicProxySpec = publicProxyHost + ((publicProxyNonDefaultPort == 0) ? "" : ":" + publicProxyNonDefaultPort);
+                    LOG.log(Level.FINE, "Detected proxy: {0}", publicProxySpec);
+                }
+            }
+        }
+
+        private void loadProjectProxy() {
+            mavenSettings = EmbedderFactory.getProjectEmbedder().getSettings();
+            org.apache.maven.settings.Proxy activeProxy = mavenSettings.getActiveProxy();
+            if (activeProxy != null) {
+                proxyHost = activeProxy.getHost();
+                proxyPort = activeProxy.getPort();
+                
+                if (proxyPort > 0) {
+                    proxyAuthority = proxyHost + ":" + proxyPort;
+                }
+            } else {
+                proxyAuthority = null;
+                proxyHost = null;
+                proxyPort = -1;
+            }
+        }
+        
+    }
+    
+    static class LineAndColumn {
+        int offset = -1;
+        int line;
+        int column;
+
+        public LineAndColumn(int line, int column) {
+            this.line = line;
+            this.column = column;
+        }
+    }
+    
+    static class TagInfo {
+        String tagName;
+        LineAndColumn  startTag;
+        LineAndColumn  content;
+        LineAndColumn  endTag;
+
+        public TagInfo(String tagName, LineAndColumn start) {
+            this.tagName = tagName;
+            this.startTag = start;
+        }
+    }
+    
+    static class ProxyInfo {
+        LineAndColumn firstTag;
+        Map<String, TagInfo> tags = new HashMap<>();
+    }
+    
+    static class TextInfo {
+        LineAndColumn firstTag;
+        LineAndColumn firstProxyTag;
+        LineAndColumn proxiesEndTag;
+        List<ProxyInfo> proxyTags = new ArrayList<>();
+    }
+
+    static class XppDelegate extends MXParser {
+        private static final int UNKNOWN = 0;
+        private static final int PROXIES = 1;
+        private static final int PROXY = 2;
+        private static final int INSIDE_PROXY = 3;
+        
+        private TextInfo textInfo = new TextInfo();
+        private LinkedList<TagInfo> tagStack = new LinkedList<>();
+        private ProxyInfo current;
+        private int state = UNKNOWN;
+
+        public XppDelegate(EntityReplacementMap entityReplacementMap) {
+            super(entityReplacementMap);
+        }
+        
+        @Override
+        public int nextTag() throws XmlPullParserException, IOException {
+            int t = super.nextTag(); 
+            return processToken(t);
+        }
+
+        @Override
+        public int next() throws XmlPullParserException, IOException {
+            int t = super.next();
+            return processToken(t);
+        }
+        
+        private LineAndColumn startPos() {
+            int ln = getLineNumber();
+            int col = getColumnNumber();
+            col -= (posEnd - posStart);
+            return new LineAndColumn(ln, col);
+        }
+
+        private LineAndColumn pos() {
+            return new LineAndColumn(getLineNumber(), getColumnNumber());
+        }
+        
+        private int processToken(int token) {
+            
+            switch (token) {
+                case XmlPullParser.END_TAG:
+                    String en = getName();
+                    if (state >= PROXY) {
+                        if (TAG_PROXY.equals(en)) {
+                            state = PROXIES;
+                            current = null;
+                            tagStack.clear();
+                            break;
+                        }
+                        if (!tagStack.isEmpty()) {
+                            tagStack.getLast().endTag = startPos();
+                            tagStack.removeLast();
+                        }
+                    } else if (state == PROXIES && TAG_PROXIES.equals(en)) {
+                        state = UNKNOWN;
+                        textInfo.proxiesEndTag = startPos();
+                        break;
+                    }
+                    break;
+                case XmlPullParser.START_TAG:
+                    String n = getName();
+                    if (state == UNKNOWN) {
+                        if (TAG_PROXIES.equals(n)) {
+                            state = 1;
+                        } else if (!TAG_SETTINGS.equals(n) && textInfo.firstTag == null) {
+                            textInfo.firstTag = startPos();
+                        }
+                        break;
+                    }
+                    if (state == PROXIES && TAG_PROXY.equals(n)) {
+                        textInfo.firstProxyTag = pos();
+                        state = INSIDE_PROXY;
+                        current = new ProxyInfo();
+                        textInfo.proxyTags.add(current);
+                        // fall through, so proxy is recorded
+                    }
+                    if (state >= PROXY) {
+                        TagInfo ti = new TagInfo(n, startPos());
+                        if (current != null) {
+                            if (current.firstTag == null) {
+                                current.firstTag = ti.startTag;
+                            }
+                            current.tags.putIfAbsent(ti.tagName, ti);
+                        }
+                        tagStack.add(ti);
+                        break;
+                    }
+            }
+            return token;
+        }
+    }
+}
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/cmd/ExecutionEventObject.java b/java/maven/src/org/netbeans/modules/maven/execute/cmd/ExecutionEventObject.java
index 06f23c7..8b4cf06 100644
--- a/java/maven/src/org/netbeans/modules/maven/execute/cmd/ExecutionEventObject.java
+++ b/java/maven/src/org/netbeans/modules/maven/execute/cmd/ExecutionEventObject.java
@@ -165,30 +165,36 @@
          * Start fold for the curent tree.
          *
          * @param io InputOutput the output is written to.
+         * @return true if the fold system is too broken to use
          */
-        public void startFold(InputOutput io) {
+        public boolean startFold(InputOutput io) {
             if (!IOFolding.isSupported(io)) {
-                return;
+                return false;
             }
 
             assert foldHandle == null;
             ExecutionEventObject.Tree parentProject = findParentNodeOfType(ExecutionEvent.Type.MojoStarted);
             if (parentProject != null) {
                 //in forked environment..
-                assert parentProject.foldHandle != null;
+                if (parentProject.foldHandle == null) {
+                    return true;
+                }
                 this.foldHandle = parentProject.foldHandle.silentStartFold(true);
-                return;
+                return false;
             }
 
             parentProject = findParentNodeOfType(ExecutionEvent.Type.ProjectStarted);
             if (parentProject == null) {
                 this.foldHandle = IOFolding.startFold(io, true);
+                return false;
             } else {
+                boolean broken = false;
                 if (parentProject.foldHandle == null) {
-                    parentProject.startFold(io);
+                    broken = parentProject.startFold(io);
                 }
                 assert parentProject.foldHandle != null;
                 this.foldHandle = parentProject.foldHandle.silentStartFold(true);
+                return broken;
             }
         }
 
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/defaultActionMappings.xml b/java/maven/src/org/netbeans/modules/maven/execute/defaultActionMappings.xml
index 6c1769c..a030ddf0 100644
--- a/java/maven/src/org/netbeans/modules/maven/execute/defaultActionMappings.xml
+++ b/java/maven/src/org/netbeans/modules/maven/execute/defaultActionMappings.xml
@@ -115,7 +115,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs></exec.vmArgs>
@@ -132,7 +132,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address}</exec.vmArgs>
@@ -150,7 +150,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs></exec.vmArgs>
@@ -168,7 +168,7 @@
         </packagings>
         <goals>
             <goal>process-test-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address}</exec.vmArgs>
@@ -236,7 +236,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs></exec.vmArgs>
@@ -253,7 +253,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
             <exec.vmArgs></exec.vmArgs>
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/proxies.template.xml b/java/maven/src/org/netbeans/modules/maven/execute/proxies.template.xml
new file mode 100644
index 0000000..f1b2f3f
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/execute/proxies.template.xml
@@ -0,0 +1,9 @@
+<proxies>
+    <proxy>
+        <id>netbeans-default-proxy</id>
+        <active>true</active>
+        <protocol>http</protocol>
+        <host>${proxyHost}</host>
+        <port>${proxyPort}</port>
+    </proxy>
+</proxies>
diff --git a/java/maven/src/org/netbeans/modules/maven/execute/proxy.template.xml b/java/maven/src/org/netbeans/modules/maven/execute/proxy.template.xml
new file mode 100644
index 0000000..486e867
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/execute/proxy.template.xml
@@ -0,0 +1,7 @@
+<proxy>
+    <id>netbeans-default-proxy</id>
+    <active>true</active>
+    <protocol>http</protocol>
+    <host>${proxyHost}</host>
+    <port>${proxyPort}</port>
+</proxy>
diff --git a/java/maven/src/org/netbeans/modules/maven/layer.xml b/java/maven/src/org/netbeans/modules/maven/layer.xml
index b23427b..a80ef96 100644
--- a/java/maven/src/org/netbeans/modules/maven/layer.xml
+++ b/java/maven/src/org/netbeans/modules/maven/layer.xml
@@ -49,6 +49,11 @@
                         </folder>
                     </folder>
                 </folder>
+                
+                <file name="settings.xml" url="settings.template.xml">
+                    <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
+                    <attr name="template.openFile" boolvalue="false"/>
+                </file>
             </folder>
         </folder>
     </folder>
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
index b3913e1..c125f11 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
@@ -105,6 +105,7 @@
     /**
      * @deprecated Hook into {@link IDENativeTemplateHandler} instead.
      */
+    @Deprecated
     protected CreateProjectBuilder createBuilder(File projFile, ProjectInfo vi, ProgressHandle handle) {
             CreateProjectBuilder builder = new CreateProjectBuilder(projFile, vi.groupId, vi.artifactId, vi.version)
                     .setProgressHandle(handle)
diff --git a/java/maven/src/org/netbeans/modules/maven/options/Bundle.properties b/java/maven/src/org/netbeans/modules/maven/options/Bundle.properties
index d4e3327..9e300b9 100644
--- a/java/maven/src/org/netbeans/modules/maven/options/Bundle.properties
+++ b/java/maven/src/org/netbeans/modules/maven/options/Bundle.properties
@@ -56,6 +56,7 @@
 SUPPRESS_UPTODATE_CHECK=Suppress upToDate check for any relevant registered plugins.\n\nExclusive with --check-plugin-updates.
 FORCES_A_CHECK=Forces a check for updated releases and snapshots on remote repositories.
 DON'T_USE_PLUGIN-REGISTRY=Don't use ~/.m2/plugin-registry.xml for plugin versions
+NO_TRANSFER_PROGRESS=Don't print the download progress.
 TIT_Add_Globals=Add Global Option(s)
 SettingsPanel.jLabel1.text=Dependency Download Strategy :
 TIT_NEVER=Never
@@ -90,3 +91,4 @@
 SettingsPanel.lblJdkHome.text=Default &JDK
 SettingsPanel.comManageJdks.text=Mana&ge Java Platforms
 SettingsPanel.cbPreferWrapper.text=Prefer Maven Wrapper that comes with project
+SettingsPanel.lbNetworkSettings.text=Network pro&xy:
diff --git a/java/maven/src/org/netbeans/modules/maven/options/MavenSettings.java b/java/maven/src/org/netbeans/modules/maven/options/MavenSettings.java
index 53ab296..bda5cba 100644
--- a/java/maven/src/org/netbeans/modules/maven/options/MavenSettings.java
+++ b/java/maven/src/org/netbeans/modules/maven/options/MavenSettings.java
@@ -85,6 +85,7 @@
     private static final String PROP_PLUGIN_POLICY = "pluginUpdatePolicy"; //NOI18N
     private static final String PROP_FAILURE_BEHAVIOUR = "failureBehaviour"; //NOI18N
     private static final String PROP_USE_REGISTRY = "usePluginRegistry"; //NOI18N
+    public static final String PROP_NETWORK_PROXY = "networkProxy";
       
     private static final MavenSettings INSTANCE = new MavenSettings();
     
@@ -159,7 +160,7 @@
         //import from older versions
         String defOpts = getPreferences().get(PROP_DEFAULT_OPTIONS, null);
         if (defOpts == null) {
-            defOpts = "";
+            defOpts = getDefaultOptions();
             //only when not already set by user or by previous import
             String debug = getPreferences().get(PROP_DEBUG, null);
             if (debug != null) {
@@ -223,7 +224,7 @@
     }
 
     public String getDefaultOptions() {
-        return getPreferences().get(PROP_DEFAULT_OPTIONS, ""); //NOI18N
+        return getPreferences().get(PROP_DEFAULT_OPTIONS, "--no-transfer-progress"); //NOI18N
     }
 
     public void setDefaultOptions(String options) {
@@ -591,4 +592,16 @@
         }
     }
     
+    public NetworkProxySettings getNetworkProxy() {
+        String s = getPreferences().get(PROP_NETWORK_PROXY, NetworkProxySettings.ASK.name());
+        try {
+            return NetworkProxySettings.valueOf(s);
+        } catch (IllegalArgumentException ex) {
+            return NetworkProxySettings.ASK;
+        }
+    }
+    
+    public void setNetworkProxy(NetworkProxySettings s) {
+        getPreferences().put(PROP_NETWORK_PROXY, s.name());
+    }
 }
diff --git a/java/maven/src/org/netbeans/modules/maven/options/NetworkProxySettings.java b/java/maven/src/org/netbeans/modules/maven/options/NetworkProxySettings.java
new file mode 100644
index 0000000..5f19dbf
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/options/NetworkProxySettings.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.maven.options;
+
+import org.netbeans.modules.maven.api.execute.RunUtils;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author sdedic
+ */
+@NbBundle.Messages({
+    "PROXY_IGNORE=Do not check",
+    "PROXY_NOTICE=Display Mismatch Notice",
+    "PROXY_UPDATE=Update User Properties",
+    "PROXY_ASK=Ask Before Execution",
+    "PROXY_OVERRIDE=Override on execution",
+})
+public enum NetworkProxySettings {
+    /**
+     * Do not verify proxy settings.
+     */
+    IGNORE(Bundle.PROXY_IGNORE()),
+    /**
+     * Display a notice that proxy settings mismatch.
+     */
+    NOTICE(Bundle.PROXY_NOTICE()),
+    /**
+     * Update user's gradle.properties file.
+     */
+    UPDATE(Bundle.PROXY_UPDATE()),
+    /**
+     * Ask the user for confirmation.
+     */
+    ASK(Bundle.PROXY_ASK()),
+    /**
+     * Automatically override on execution, but do not change gradle.properties.
+     */
+    OVERRIDE(Bundle.PROXY_OVERRIDE());
+    
+    private String displayName;
+    
+    public String toString() {
+        return displayName;
+    }
+
+    private static final String BRANDING_API_OVERRIDE_ENABLED = "org.netbeans.modules.maven.api.execute.NetworkProxySettings.allowOverride"; // NOI18N
+    
+    private NetworkProxySettings(String dispName) {
+        this.displayName = dispName;
+    }
+    
+    /**
+     * Determines if override is a valid option.
+     * @return true, if override should be offered as an option
+     */
+    public static boolean allowProxyOverride() {
+        return Boolean.parseBoolean(NbBundle.getMessage(RunUtils.class, BRANDING_API_OVERRIDE_ENABLED));
+    }
+}
diff --git a/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.form b/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.form
index 49c6cfb..151e2a9 100644
--- a/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.form
+++ b/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.form
@@ -216,7 +216,7 @@
                       </Group>
                       <EmptySpace max="-2" attributes="0"/>
                       <Component id="jLabel3" min="-2" pref="44" max="-2" attributes="0"/>
-                      <EmptySpace pref="218" max="32767" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -322,7 +322,7 @@
                       <Component id="cbDisableIndex" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
                       <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace pref="290" max="32767" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -422,7 +422,7 @@
                           <Component id="txtDirectory" alignment="3" min="-2" max="-2" attributes="0"/>
                           <Component id="btnDirectory" alignment="3" min="-2" max="-2" attributes="0"/>
                       </Group>
-                      <EmptySpace pref="180" max="32767" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -481,12 +481,16 @@
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="119" max="-2" attributes="0"/>
+                      <Component id="lblExternalVersion" max="32767" attributes="0"/>
+                  </Group>
                   <Group type="102" attributes="0">
-                      <EmptySpace min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
+                          <Group type="102" alignment="0" attributes="0">
                               <Group type="103" groupAlignment="1" attributes="0">
-                                  <Group type="102" attributes="0">
+                                  <Group type="102" alignment="1" attributes="0">
                                       <Group type="103" groupAlignment="0" attributes="0">
                                           <Component id="cbAlwaysShow" min="-2" max="-2" attributes="0"/>
                                           <Component id="cbReuse" alignment="0" min="-2" max="-2" attributes="0"/>
@@ -496,7 +500,7 @@
                                               <EmptySpace max="-2" attributes="0"/>
                                               <Group type="103" groupAlignment="0" attributes="0">
                                                   <Component id="cbOutputTabShowConfig" min="-2" max="-2" attributes="0"/>
-                                                  <Group type="102" attributes="0">
+                                                  <Group type="102" alignment="0" attributes="0">
                                                       <Component id="rbOutputTabName" min="-2" max="-2" attributes="0"/>
                                                       <EmptySpace max="-2" attributes="0"/>
                                                       <Component id="rbOutputTabId" min="-2" max="-2" attributes="0"/>
@@ -510,18 +514,11 @@
                                   </Group>
                                   <Component id="cbSkipTests" alignment="0" min="-2" max="-2" attributes="0"/>
                               </Group>
-                              <EmptySpace min="0" pref="55" max="32767" attributes="0"/>
+                              <EmptySpace min="-2" pref="58" max="-2" attributes="0"/>
                           </Group>
                           <Group type="102" attributes="0">
                               <Group type="103" groupAlignment="0" attributes="0">
                                   <Group type="102" alignment="0" attributes="0">
-                                      <Component id="lblOptions" min="-2" max="-2" attributes="0"/>
-                                      <EmptySpace max="-2" attributes="0"/>
-                                      <Component id="txtOptions" max="32767" attributes="0"/>
-                                      <EmptySpace max="-2" attributes="0"/>
-                                      <Component id="btnOptions" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                                  <Group type="102" alignment="0" attributes="0">
                                       <Group type="103" groupAlignment="0" attributes="0">
                                           <Component id="lblCommandLine" min="-2" max="-2" attributes="0"/>
                                           <Component id="lblJdkHome" min="-2" max="-2" attributes="0"/>
@@ -540,15 +537,24 @@
                                           </Group>
                                       </Group>
                                   </Group>
+                                  <Group type="102" alignment="1" attributes="0">
+                                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                                          <Component id="lblOptions" max="32767" attributes="0"/>
+                                          <Component id="lbNetworkSettings" max="32767" attributes="0"/>
+                                      </Group>
+                                      <EmptySpace max="-2" attributes="0"/>
+                                      <Group type="103" groupAlignment="0" attributes="0">
+                                          <Component id="cbNetworkProxy" max="32767" attributes="0"/>
+                                          <Component id="txtOptions" max="32767" attributes="0"/>
+                                      </Group>
+                                      <EmptySpace max="-2" attributes="0"/>
+                                      <Component id="btnOptions" min="-2" max="-2" attributes="0"/>
+                                  </Group>
                               </Group>
                               <EmptySpace max="-2" attributes="0"/>
                           </Group>
                       </Group>
                   </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace min="-2" pref="119" max="-2" attributes="0"/>
-                      <Component id="lblExternalVersion" max="32767" attributes="0"/>
-                  </Group>
               </Group>
             </DimensionLayout>
             <DimensionLayout dim="1">
@@ -575,7 +581,15 @@
                           <Component id="txtOptions" alignment="3" min="-2" max="-2" attributes="0"/>
                           <Component id="btnOptions" alignment="3" min="-2" max="-2" attributes="0"/>
                       </Group>
-                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Component id="cbNetworkProxy" alignment="1" min="-2" max="-2" attributes="0"/>
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="lbNetworkSettings" min="-2" pref="16" max="-2" attributes="0"/>
+                              <EmptySpace min="3" pref="3" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
                       <Component id="cbSkipTests" min="-2" max="-2" attributes="0"/>
                       <EmptySpace type="separate" max="-2" attributes="0"/>
                       <Component id="btnGoals" min="-2" max="-2" attributes="0"/>
@@ -591,11 +605,11 @@
                           <Component id="rbOutputTabName" alignment="3" min="-2" max="-2" attributes="0"/>
                           <Component id="rbOutputTabId" alignment="3" min="-2" max="-2" attributes="0"/>
                       </Group>
-                      <EmptySpace max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
                       <Component id="cbOutputTabShowConfig" min="-2" max="-2" attributes="0"/>
                       <EmptySpace type="unrelated" max="-2" attributes="0"/>
                       <Component id="cbCollapseSuccessFolds" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -759,6 +773,26 @@
                 </Property>
               </Properties>
             </Component>
+            <Component class="javax.swing.JComboBox" name="cbNetworkProxy">
+              <Properties>
+                <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+                  <StringArray count="0"/>
+                </Property>
+              </Properties>
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;NetworkProxySettings&gt;"/>
+              </AuxValues>
+            </Component>
+            <Component class="javax.swing.JLabel" name="lbNetworkSettings">
+              <Properties>
+                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+                  <ComponentRef name="cbNetworkProxy"/>
+                </Property>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="org/netbeans/modules/maven/options/Bundle.properties" key="SettingsPanel.lbNetworkSettings.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+              </Properties>
+            </Component>
           </SubComponents>
         </Container>
       </SubComponents>
diff --git a/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.java b/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.java
index 3df8aff..b960bfc 100644
--- a/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.java
+++ b/java/maven/src/org/netbeans/modules/maven/options/SettingsPanel.java
@@ -229,6 +229,13 @@
                 return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
             }
         });
+
+        DefaultComboBoxModel mdl = new DefaultComboBoxModel<>(NetworkProxySettings.values());
+        if (!NetworkProxySettings.allowProxyOverride()) {
+            mdl.removeElement(NetworkProxySettings.OVERRIDE);
+        }
+        cbNetworkProxy.setModel(mdl);
+        cbNetworkProxy.addActionListener(listener);
     }
 
     /** XXX update for M3 from {@link org.apache.maven.cli.CLIManager#CLIManager} */
@@ -245,7 +252,8 @@
             "--check-plugin-updates", //NOI18N
             "--no-plugin-updates", //NOI18N
             "--update-snapshots", //NOI18N
-            "--no-plugin-registry" //NOI18N
+            "--no-plugin-registry", //NOI18N
+            "--no-transfer-progress" //NOI18N
         };
 
 
@@ -263,7 +271,8 @@
             org.openide.util.NbBundle.getMessage(SettingsPanel.class, "FORCE_UPTODATE_CHECK"),
             org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SUPPRESS_UPTODATE_CHECK"),
             org.openide.util.NbBundle.getMessage(SettingsPanel.class, "FORCES_A_CHECK"),
-            org.openide.util.NbBundle.getMessage(SettingsPanel.class, "DON'T_USE_PLUGIN-REGISTRY")
+            org.openide.util.NbBundle.getMessage(SettingsPanel.class, "DON'T_USE_PLUGIN-REGISTRY"),
+            org.openide.util.NbBundle.getMessage(SettingsPanel.class, "NO_TRANSFER_PROGRESS")
         };
     }
 
@@ -395,6 +404,8 @@
         comJdkHome = new javax.swing.JComboBox();
         comManageJdks = new javax.swing.JButton();
         cbPreferWrapper = new javax.swing.JCheckBox();
+        cbNetworkProxy = new javax.swing.JComboBox<>();
+        lbNetworkSettings = new javax.swing.JLabel();
         jScrollPane1 = new javax.swing.JScrollPane();
         lstCategory = new javax.swing.JList();
         lblCategory = new javax.swing.JLabel();
@@ -514,7 +525,7 @@
                     .addComponent(comSource, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(218, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlDependencies, "dependencies");
@@ -574,7 +585,7 @@
                 .addComponent(cbDisableIndex)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(jLabel5)
-                .addContainerGap(290, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
         pnlCards.add(pnlIndex, "index");
@@ -630,7 +641,7 @@
                     .addComponent(lblDirectory)
                     .addComponent(txtDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(btnDirectory))
-                .addContainerGap(180, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
         pnlCards.add(plnExperimental, "experimental");
@@ -688,11 +699,17 @@
 
         org.openide.awt.Mnemonics.setLocalizedText(cbPreferWrapper, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.cbPreferWrapper.text")); // NOI18N
 
+        lbNetworkSettings.setLabelFor(cbNetworkProxy);
+        org.openide.awt.Mnemonics.setLocalizedText(lbNetworkSettings, org.openide.util.NbBundle.getMessage(SettingsPanel.class, "SettingsPanel.lbNetworkSettings.text")); // NOI18N
+
         javax.swing.GroupLayout pnlExecutionLayout = new javax.swing.GroupLayout(pnlExecution);
         pnlExecution.setLayout(pnlExecutionLayout);
         pnlExecutionLayout.setHorizontalGroup(
             pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlExecutionLayout.createSequentialGroup()
+                .addGap(119, 119, 119)
+                .addComponent(lblExternalVersion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+            .addGroup(pnlExecutionLayout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(pnlExecutionLayout.createSequentialGroup()
@@ -715,16 +732,10 @@
                                     .addComponent(btnGoals))
                                 .addGap(18, 18, 18))
                             .addComponent(cbSkipTests, javax.swing.GroupLayout.Alignment.LEADING))
-                        .addGap(0, 55, Short.MAX_VALUE))
+                        .addGap(58, 58, 58))
                     .addGroup(pnlExecutionLayout.createSequentialGroup()
                         .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                             .addGroup(pnlExecutionLayout.createSequentialGroup()
-                                .addComponent(lblOptions)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(txtOptions)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(btnOptions))
-                            .addGroup(pnlExecutionLayout.createSequentialGroup()
                                 .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                     .addComponent(lblCommandLine)
                                     .addComponent(lblJdkHome))
@@ -737,11 +748,18 @@
                                     .addGroup(pnlExecutionLayout.createSequentialGroup()
                                         .addComponent(comJdkHome, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(comManageJdks)))))
+                                        .addComponent(comManageJdks))))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlExecutionLayout.createSequentialGroup()
+                                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addComponent(lblOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                    .addComponent(lbNetworkSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(cbNetworkProxy, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                    .addComponent(txtOptions))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(btnOptions)))
                         .addContainerGap())))
-            .addGroup(pnlExecutionLayout.createSequentialGroup()
-                .addGap(119, 119, 119)
-                .addComponent(lblExternalVersion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
         pnlExecutionLayout.setVerticalGroup(
             pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -764,7 +782,13 @@
                     .addComponent(lblOptions)
                     .addComponent(txtOptions, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(btnOptions))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(pnlExecutionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(cbNetworkProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(pnlExecutionLayout.createSequentialGroup()
+                        .addComponent(lbNetworkSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(3, 3, 3)))
+                .addGap(18, 18, 18)
                 .addComponent(cbSkipTests)
                 .addGap(18, 18, 18)
                 .addComponent(btnGoals)
@@ -779,11 +803,11 @@
                     .addComponent(lblOutputTab)
                     .addComponent(rbOutputTabName)
                     .addComponent(rbOutputTabId))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGap(6, 6, 6)
                 .addComponent(cbOutputTabShowConfig)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                 .addComponent(cbCollapseSuccessFolds)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
         );
 
         pnlCards.add(pnlExecution, "execution");
@@ -933,6 +957,7 @@
     private javax.swing.JCheckBox cbAlwaysShow;
     private javax.swing.JCheckBox cbCollapseSuccessFolds;
     private javax.swing.JCheckBox cbDisableIndex;
+    private javax.swing.JComboBox<NetworkProxySettings> cbNetworkProxy;
     private javax.swing.JCheckBox cbOutputTabShowConfig;
     private javax.swing.JCheckBox cbPreferWrapper;
     private javax.swing.JComboBox cbProjectNodeNameMode;
@@ -953,6 +978,7 @@
     private javax.swing.JLabel jLabel4;
     private javax.swing.JLabel jLabel5;
     private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JLabel lbNetworkSettings;
     private javax.swing.JLabel lblBinaries;
     private javax.swing.JLabel lblCategory;
     private javax.swing.JLabel lblCommandLine;
@@ -1155,6 +1181,8 @@
             }
         }
         
+         cbNetworkProxy.setSelectedItem(MavenSettings.getDefault().getNetworkProxy());
+        
         changed = false;  //#163955 - do not fire change events on load
     }
     
@@ -1213,6 +1241,8 @@
             //a predefined pattern entry was selected
             MavenSettings.getDefault().setProjectNodeNamePattern(cbProjectNodeNameMode.getSelectedItem().toString());
         } 
+        
+        MavenSettings.getDefault().setNetworkProxy((NetworkProxySettings)cbNetworkProxy.getSelectedItem());
         changed = false;
     }
     
@@ -1281,6 +1311,7 @@
                 isChanged |= (projectNodeNamePattern == null ? !cbProjectNodeNameMode.getSelectedItem().toString().isEmpty() : !projectNodeNamePattern.equals(cbProjectNodeNameMode.getSelectedItem().toString()));
             }
         }
+        isChanged |= MavenSettings.getDefault().getNetworkProxy() != cbNetworkProxy.getSelectedItem();
         changed = isChanged;
     }
 
diff --git a/java/maven/src/org/netbeans/modules/maven/output/DefaultOutputProcessorFactory.java b/java/maven/src/org/netbeans/modules/maven/output/DefaultOutputProcessorFactory.java
index 18f923c..7f57110 100644
--- a/java/maven/src/org/netbeans/modules/maven/output/DefaultOutputProcessorFactory.java
+++ b/java/maven/src/org/netbeans/modules/maven/output/DefaultOutputProcessorFactory.java
@@ -33,13 +33,13 @@
 public class DefaultOutputProcessorFactory implements ContextOutputProcessorFactory {
     
     @Override public Set<OutputProcessor> createProcessorsSet(Project project) {
-        Set<OutputProcessor> toReturn = new HashSet<OutputProcessor>();
+        Set<OutputProcessor> toReturn = new HashSet<>();
         if (project != null) {
             toReturn.add(new JavadocOutputProcessor());
             toReturn.add(new TestOutputListenerProvider());
             toReturn.add(new SiteOutputProcessor(project));
             NbMavenProjectImpl nbprj = project.getLookup().lookup(NbMavenProjectImpl.class);
-            toReturn.add(new ExecPluginOutputListenerProvider(nbprj));
+            toReturn.add(new JavaStacktraceOutputProcessor(nbprj));
             toReturn.add(new DependencyAnalyzeOutputProcessor(nbprj));
         }
         return toReturn;
diff --git a/java/maven/src/org/netbeans/modules/maven/output/DependencyAnalyzeOutputProcessor.java b/java/maven/src/org/netbeans/modules/maven/output/DependencyAnalyzeOutputProcessor.java
index cbdf86d..a48a7d3 100644
--- a/java/maven/src/org/netbeans/modules/maven/output/DependencyAnalyzeOutputProcessor.java
+++ b/java/maven/src/org/netbeans/modules/maven/output/DependencyAnalyzeOutputProcessor.java
@@ -22,7 +22,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.netbeans.api.project.Project;
-import org.netbeans.modules.maven.NbMavenProjectImpl;
 import org.netbeans.modules.maven.api.ModelUtils;
 import org.netbeans.modules.maven.api.output.OutputProcessor;
 import org.netbeans.modules.maven.api.output.OutputVisitor;
@@ -51,7 +50,7 @@
     DependencyAnalyzeOutputProcessor(Project project) {
         started = false;
         start = Pattern.compile(".*Used undeclared dependencies.*", Pattern.DOTALL); //NOI18N
-        dependency = Pattern.compile("\\s*(?:\\[WARNING\\])?\\s*(.*):(.*):(.*):(.*):(.*)", Pattern.DOTALL); //NOI18N
+        dependency = Pattern.compile("\\s*(?:\\[WARNING|WARN\\])?\\s*(.*):(.*):(.*):(.*):(.*)", Pattern.DOTALL); //NOI18N
         this.project = project;
     }
 
diff --git a/java/maven/src/org/netbeans/modules/maven/output/ExecPluginOutputListenerProvider.java b/java/maven/src/org/netbeans/modules/maven/output/ExecPluginOutputListenerProvider.java
index 2da6103..8eaeec3 100644
--- a/java/maven/src/org/netbeans/modules/maven/output/ExecPluginOutputListenerProvider.java
+++ b/java/maven/src/org/netbeans/modules/maven/output/ExecPluginOutputListenerProvider.java
@@ -19,64 +19,26 @@
 package org.netbeans.modules.maven.output;
 
 import org.netbeans.modules.maven.NbMavenProjectImpl;
-import org.netbeans.modules.maven.api.output.OutputProcessor;
-import org.netbeans.modules.maven.api.output.OutputUtils;
-import org.netbeans.modules.maven.api.output.OutputVisitor;
-import org.netbeans.api.java.classpath.ClassPath;
-import org.netbeans.api.project.Project;
-import org.netbeans.modules.maven.api.classpath.ProjectSourcesClassPathProvider;
-import org.netbeans.spi.java.classpath.support.ClassPathSupport;
-import org.openide.windows.OutputListener;
-
-
 
 
 /**
  * exec plugin output processing, just handle stacktraces.
  * @author  Milos Kleint
+ * 
+ * @deprecated use JavaStacktraceOutputListenerProvider instead
  */
-public class ExecPluginOutputListenerProvider implements OutputProcessor {
-    
+@Deprecated
+public class ExecPluginOutputListenerProvider extends JavaStacktraceOutputProcessor {
+
     private static final String[] EXECGOALS = new String[] {
         "mojo-execute#exec:exec", //NOI18N
         "mojo-execute#exec:java", //NOI18N
         "mojo-execute#javafx:run" //NOI18N
     };
-    private final NbMavenProjectImpl project;
-    
+
     /** Creates a new instance of ExecPluginOutputListenerProvider */
     public ExecPluginOutputListenerProvider(NbMavenProjectImpl proj) {
-        project = proj;
-    }
-    
-    @Override
-    public void processLine(String line, OutputVisitor visitor) {
-        OutputVisitor.Context context = visitor.getContext();
-        Project prj = project;
-        if (context != null && context.getCurrentProject() != null) {
-            prj = context.getCurrentProject();
-        }
-        OutputListener list = OutputUtils.matchStackTraceLine(line, prj);
-        if (list != null) {
-            visitor.setOutputListener(list);
-        }
+        super(proj, EXECGOALS);
     }
 
-    @Override
-    public String[] getRegisteredOutputSequences() {
-        return EXECGOALS;
-    }
-
-    @Override
-    public void sequenceStart(String sequenceId, OutputVisitor visitor) {
-    }
-
-    @Override
-    public void sequenceEnd(String sequenceId, OutputVisitor visitor) {
-    }
-    
-    @Override
-    public void sequenceFail(String sequenceId, OutputVisitor visitor) {
-    }
-    
 }
diff --git a/java/maven/src/org/netbeans/modules/maven/output/JavaOutputListenerProvider.java b/java/maven/src/org/netbeans/modules/maven/output/JavaOutputListenerProvider.java
index 9750a70..31b99e3 100644
--- a/java/maven/src/org/netbeans/modules/maven/output/JavaOutputListenerProvider.java
+++ b/java/maven/src/org/netbeans/modules/maven/output/JavaOutputListenerProvider.java
@@ -83,7 +83,7 @@
         this.config = config;
         //[javac] required because of forked compilation
         //DOTALL seems to fix MEVENIDE-455 on windows. one of the characters seems to be a some kind of newline and that's why the line doesnt' get matched otherwise.
-        failPattern = Pattern.compile("\\s*(?:\\[(WARNING|ERROR)\\])?(?:\\[javac\\])?(?:Compilation failure)?\\s*(?<" + GROUP_CLAZZ_NAME + ">.*)\\.java\\:\\[(?<" + GROUP_LINE_NR + ">[0-9]*),([0-9]*)\\] (?<" + GROUP_TEXT + ">.*)", Pattern.DOTALL); //NOI18N
+        failPattern = Pattern.compile("\\s*(?:\\[(WARNING|WARN|ERROR)\\])?(?:\\[javac\\])?(?:Compilation failure)?\\s*(?<" + GROUP_CLAZZ_NAME + ">.*)\\.java\\:\\[(?<" + GROUP_LINE_NR + ">[0-9]*),([0-9]*)\\] (?<" + GROUP_TEXT + ">.*)", Pattern.DOTALL); //NOI18N
     }
     
     private static final Pattern COMPILER_PROBLEM = Pattern.compile(".*module-info\\.java:.*module not found: .*");
diff --git a/java/maven/src/org/netbeans/modules/maven/output/JavaStacktraceOutputProcessor.java b/java/maven/src/org/netbeans/modules/maven/output/JavaStacktraceOutputProcessor.java
new file mode 100644
index 0000000..56ef8a3
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/output/JavaStacktraceOutputProcessor.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.maven.output;
+
+import org.netbeans.modules.maven.NbMavenProjectImpl;
+import org.netbeans.modules.maven.api.output.OutputProcessor;
+import org.netbeans.modules.maven.api.output.OutputUtils;
+import org.netbeans.modules.maven.api.output.OutputVisitor;
+import org.netbeans.api.project.Project;
+import org.openide.windows.OutputListener;
+
+
+/**
+ * Provides links for stack traces in the output window.
+ * 
+ * @author mbien
+ */
+public class JavaStacktraceOutputProcessor implements OutputProcessor {
+
+    private final String[] goals;
+    private final NbMavenProjectImpl project;
+
+    /**
+     * Creates a JavaStacktraceOutputProcessor with global scope (goal: "session-execute").
+     */
+    public JavaStacktraceOutputProcessor(NbMavenProjectImpl project) {
+        this(project, new String[] { "session-execute" });
+    }
+
+    /**
+     * Creates a JavaStacktraceOutputProcessor which is only active during the given goals.
+     */
+    public JavaStacktraceOutputProcessor(NbMavenProjectImpl project, String[] goals) {
+        this.project = project;
+        this.goals = goals;
+    }
+
+    @Override
+    public void processLine(String line, OutputVisitor visitor) {
+        OutputVisitor.Context context = visitor.getContext();
+        Project prj = project;
+        if (context != null && context.getCurrentProject() != null) {
+            prj = context.getCurrentProject();
+        }
+        OutputListener list = OutputUtils.matchStackTraceLine(line, prj);
+        if (list != null) {
+            visitor.setOutputListener(list);
+        }
+    }
+
+    @Override
+    public String[] getRegisteredOutputSequences() {
+        return goals;
+    }
+
+    @Override
+    public void sequenceStart(String sequenceId, OutputVisitor visitor) {}
+
+    @Override
+    public void sequenceEnd(String sequenceId, OutputVisitor visitor) {}
+
+    @Override
+    public void sequenceFail(String sequenceId, OutputVisitor visitor) {}
+
+}
diff --git a/java/maven/src/org/netbeans/modules/maven/problems/SanityBuildAction.java b/java/maven/src/org/netbeans/modules/maven/problems/SanityBuildAction.java
index dea2d93..c0f88d3 100644
--- a/java/maven/src/org/netbeans/modules/maven/problems/SanityBuildAction.java
+++ b/java/maven/src/org/netbeans/modules/maven/problems/SanityBuildAction.java
@@ -21,6 +21,7 @@
 
 import java.util.Arrays;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -30,11 +31,14 @@
 import org.netbeans.modules.maven.api.execute.RunConfig.ReactorStyle;
 import org.netbeans.modules.maven.api.execute.RunUtils;
 import org.netbeans.modules.maven.execute.BeanRunConfig;
+import org.netbeans.modules.maven.execute.MavenProxySupport;
+import org.netbeans.modules.maven.execute.MavenProxySupport.ProxyResult;
 import static org.netbeans.modules.maven.problems.Bundle.*;
 import org.netbeans.spi.project.ui.ProjectProblemResolver;
 import org.netbeans.spi.project.ui.ProjectProblemsProvider;
 import org.openide.execution.ExecutorTask;
 import org.openide.filesystems.FileUtil;
+import org.openide.util.NbBundle;
 import org.openide.util.NbBundle.Messages;
 
 /**
@@ -67,6 +71,11 @@
         return this.pendingResult;
     }
 
+    @NbBundle.Messages({
+        "ERR_SanityBuildCancalled=Sanity build cancelled",
+        "# {0} - message",
+        "ERR_ProxyUpdateFailed=Proxy setup failed: {0}"
+    })
     @Override
     public CompletableFuture<ProjectProblemsProvider.Result> resolve() {
         CompletableFuture<ProjectProblemsProvider.Result> pr = pendingResult;
@@ -97,6 +106,27 @@
                     String label = build_label(nbproject.getProjectDirectory().getNameExt());
                     config.setExecutionName(label);
                     config.setTaskDisplayName(label);
+                    
+                    MavenProxySupport mps = nbproject.getLookup().lookup(MavenProxySupport.class);
+                    if (mps != null) {
+                        ProxyResult res;
+                        try {
+                            res = mps.checkProxySettings().get();
+                            if (res.getStatus() == MavenProxySupport.Status.ABORT) {
+                                ProjectProblemsProvider.Result r = ProjectProblemsProvider.Result.create(ProjectProblemsProvider.Status.UNRESOLVED, ERR_SanityBuildCancalled());
+                                publicResult.complete(r);
+                                return;
+                            }
+                        } catch (ExecutionException ex) {
+                            ProjectProblemsProvider.Result r = ProjectProblemsProvider.Result.create(ProjectProblemsProvider.Status.UNRESOLVED, ERR_ProxyUpdateFailed(ex.getLocalizedMessage()));
+                            publicResult.complete(r);
+                            return;
+                        } catch (InterruptedException ex) {
+                            ProjectProblemsProvider.Result r = ProjectProblemsProvider.Result.create(ProjectProblemsProvider.Status.UNRESOLVED, ERR_SanityBuildCancalled());
+                            publicResult.complete(r);
+                            return;
+                        }
+                    }
                     LOG.log(Level.FINE, "Executing sanity build: goals = {0}, properties = {1}", new Object[] { config.getGoals(), config.getProperties() });
                     ExecutorTask et = RunUtils.run(config);
                     et.addTaskListener(t -> {
diff --git a/java/maven/src/org/netbeans/modules/maven/queries/Info.java b/java/maven/src/org/netbeans/modules/maven/queries/Info.java
index d92eeef..e2a6c22 100644
--- a/java/maven/src/org/netbeans/modules/maven/queries/Info.java
+++ b/java/maven/src/org/netbeans/modules/maven/queries/Info.java
@@ -69,7 +69,7 @@
                             pcs.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME, null, null);
                         }
                     }
-                };;
+                };
     private final AtomicBoolean prefChangeListenerSet = new AtomicBoolean(false);
     
     private boolean displayNameRunning = false;
diff --git a/java/maven/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementation.java b/java/maven/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementation.java
index 5865e51..4ed75f7 100644
--- a/java/maven/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementation.java
+++ b/java/maven/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementation.java
@@ -207,7 +207,7 @@
         };
         
         return new MavenDependencyResult(nbMavenProject.getMavenProject(), 
-                convert2(n, compositeFiter, broken), new ArrayList<>(scopes), broken, 
+                convertDependencies(n, compositeFiter, broken), new ArrayList<>(scopes), broken, 
                 project, nbMavenProject);
     }
     
@@ -236,10 +236,57 @@
         }
     }
     
-    private Dependency convert2(org.apache.maven.shared.dependency.tree.DependencyNode n, Dependency.Filter filter, Set<ArtifactSpec> broken) {
-        List<Dependency> ch = new ArrayList<>();
+    private static String getFullArtifactId(Artifact a) {
+        if (a.getDependencyTrail() == null) {
+            return "/" + a.getId();
+        } else {
+            return String.join("/", a.getDependencyTrail()) + "/" + a.getId(); // NOI18N
+        }
+    }
+    
+    private void findRealNodes(org.apache.maven.shared.dependency.tree.DependencyNode n, Map<String, List<org.apache.maven.shared.dependency.tree.DependencyNode>> result) {
+        if (n.getArtifact() == null) {
+            return;
+        }
+        Artifact a = n.getArtifact();
+        if (n.getState() != org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED) {
+            return;
+        }
+        // register (if not present) using plain artifact ID, but also using the full path, which will be preferred for the lookup.
+        result.putIfAbsent(a.getId(), n.getChildren());
+        result.put(getFullArtifactId(a), n.getChildren());
+        
         for (org.apache.maven.shared.dependency.tree.DependencyNode c : n.getChildren()) {
-            Dependency cd = convert2(c, filter, broken);
+            findRealNodes(c, result);
+        }
+    }
+
+    private Dependency convertDependencies(org.apache.maven.shared.dependency.tree.DependencyNode n, Dependency.Filter filter, Set<ArtifactSpec> broken) {
+        Map<String, List<org.apache.maven.shared.dependency.tree.DependencyNode>> realNodes = new HashMap<>();
+        findRealNodes(n, realNodes);
+        return convert2(n, filter, realNodes, broken);
+    }
+    
+    private Dependency convert2(org.apache.maven.shared.dependency.tree.DependencyNode n, Dependency.Filter filter, Map<String, List<org.apache.maven.shared.dependency.tree.DependencyNode>> realNodes, Set<ArtifactSpec> broken) {
+        List<Dependency> ch = new ArrayList<>();
+        
+        List<org.apache.maven.shared.dependency.tree.DependencyNode> children = null;
+        
+        if (n.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.OMITTED_FOR_CONFLICT || 
+            n.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.OMITTED_FOR_DUPLICATE) {
+            // attempt to find / copy the children subtree, [refer full artifact path.
+            if (n.getRelatedArtifact() != null) {
+                children = realNodes.get(getFullArtifactId(n.getRelatedArtifact()));
+            }
+            if (children == null) {
+                children = realNodes.getOrDefault(n.getArtifact().getId(), n.getChildren());
+            }
+        } else {
+            children = n.getChildren();
+        }
+        
+        for (org.apache.maven.shared.dependency.tree.DependencyNode c : children) {
+            Dependency cd = convert2(c, filter, realNodes, broken);
             if (cd != null) {
                 ch.add(cd);
             }
diff --git a/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java b/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
index 4f883f2..49f20f3 100644
--- a/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
+++ b/java/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java
@@ -77,21 +77,19 @@
 
     @Override public boolean checkRunConfig(RunConfig config) {
         String actionName = config.getActionName();
-        for (Map.Entry<? extends String,? extends String> entry : config.getProperties().entrySet()) {
-            if ("exec.executable".equals(entry.getKey())) { //NOI18N
-                // check for "java" and replace it with absolute path to
-                // project j2seplaform's java.exe
-                if ("java".equals(entry.getValue())) { //NOI18N
-                    //TODO somehow use the config.getMavenProject() call rather than looking up the
-                    // ActiveJ2SEPlatformProvider from lookup. The loaded project can be different from the executed one.
-                    ActiveJ2SEPlatformProvider plat = config.getProject().getLookup().lookup(ActiveJ2SEPlatformProvider.class);
-                    assert plat != null;
-                    FileObject fo = plat.getJavaPlatform().findTool(entry.getValue());
-                    if (fo != null) {
-                        File fl = FileUtil.toFile(fo);
-                        config.setProperty("exec.executable", fl.getAbsolutePath()); //NOI18N
-                    }
-                }
+
+        // check for "java" and replace it with absolute path to
+        // project j2seplaform's java.exe
+        String tool = config.getProperties().get("exec.executable"); //NOI18N
+        if ("java".equals(tool)) { //NOI18N
+            //TODO somehow use the config.getMavenProject() call rather than looking up the
+            // ActiveJ2SEPlatformProvider from lookup. The loaded project can be different from the executed one.
+            ActiveJ2SEPlatformProvider plat = config.getProject().getLookup().lookup(ActiveJ2SEPlatformProvider.class);
+            assert plat != null;
+            FileObject fo = plat.getJavaPlatform().findTool(tool);
+            if (fo != null) {
+                File fl = FileUtil.toFile(fo);
+                config.setProperty("exec.executable", fl.getAbsolutePath()); //NOI18N
             }
         }
 
diff --git a/java/maven/src/org/netbeans/modules/maven/settings.template.xml b/java/maven/src/org/netbeans/modules/maven/settings.template.xml
new file mode 100644
index 0000000..8415028
--- /dev/null
+++ b/java/maven/src/org/netbeans/modules/maven/settings.template.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settings>
+<#if proxyHost?? && proxyHost != "">
+    <proxies>
+        <!-- Proxy defined by NetBeans IDE -->
+        <proxy>
+            <id>netbeans-default-proxy</id>
+            <active>true</active>
+            <protocol>http</protocol>
+            <host>${proxyHost}</host>
+            <port>${proxyPort}</port>
+            <!-- Proxy exclusion list: separate by pipe-symbol, e.g. 127.0.0.8|localhost -->
+            <nonProxyHosts>localhost|127.0.0.0/8|localhost.localdomain|127.0.0.1|[::1]</nonProxyHosts> 
+        </proxy>
+    </proxies>
+</#if>
+</settings>
diff --git a/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/README.md b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/README.md
new file mode 100644
index 0000000..bf8a67a
--- /dev/null
+++ b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/README.md
@@ -0,0 +1 @@
+# Sample of a real-world project
\ No newline at end of file
diff --git a/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/pom.xml b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/pom.xml
new file mode 100644
index 0000000..6ee12a8
--- /dev/null
+++ b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example</groupId>
+  <artifactId>demo</artifactId>
+  <version>0.1</version>
+  <packaging>${packaging}</packaging>
+
+  <parent>
+    <groupId>io.micronaut</groupId>
+    <artifactId>micronaut-parent</artifactId>
+    <version>3.7.0</version>
+  </parent>
+
+  <properties>
+    <packaging>jar</packaging>
+    <jdk.version>8</jdk.version>
+    <release.version>8</release.version>
+    <micronaut.version>3.7.0</micronaut.version>
+    <micronaut.runtime>netty</micronaut.runtime>
+    <exec.mainClass>com.example.Application</exec.mainClass>
+  </properties>
+
+  <repositories>
+    <repository>
+      <id>central</id>
+      <url>https://repo.maven.apache.org/maven2</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.micronaut</groupId>
+      <artifactId>micronaut-inject</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micronaut</groupId>
+      <artifactId>micronaut-validation</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micronaut</groupId>
+      <artifactId>micronaut-http-client</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micronaut</groupId>
+      <artifactId>micronaut-http-server-netty</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micronaut</groupId>
+      <artifactId>micronaut-jackson-databind</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.annotation</groupId>
+      <artifactId>jakarta.annotation-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micronaut.test</groupId>
+      <artifactId>micronaut-test-junit5</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>io.micronaut.build</groupId>
+        <artifactId>micronaut-maven-plugin</artifactId>
+      </plugin>
+      
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <!-- Uncomment to enable incremental compilation -->
+          <!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->
+
+          <annotationProcessorPaths combine.children="append">
+            <path>
+              <groupId>io.micronaut</groupId>
+              <artifactId>micronaut-http-validation</artifactId>
+              <version>${micronaut.version}</version>
+            </path>
+          </annotationProcessorPaths>
+          <compilerArgs>
+            <arg>-Amicronaut.processing.group=com.example</arg>
+            <arg>-Amicronaut.processing.module=demo</arg>
+          </compilerArgs>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/main/java/com/example/Application.java b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/main/java/com/example/Application.java
new file mode 100644
index 0000000..e13ce43
--- /dev/null
+++ b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/main/java/com/example/Application.java
@@ -0,0 +1,9 @@
+package com.example;
+
+import io.micronaut.runtime.Micronaut;
+
+public class Application {
+    public static void main(String[] args) {
+        Micronaut.run(Application.class, args);
+    }
+}
diff --git a/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/test/java/com/example/DemoTest.java b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/test/java/com/example/DemoTest.java
new file mode 100644
index 0000000..1bd97d9
--- /dev/null
+++ b/java/maven/test/unit/data/projects/dependencies/duplicates/micronaut/src/test/java/com/example/DemoTest.java
@@ -0,0 +1,21 @@
+package com.example;
+
+import io.micronaut.runtime.EmbeddedApplication;
+import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
+
+import jakarta.inject.Inject;
+
+@MicronautTest
+class DemoTest {
+
+    @Inject
+    EmbeddedApplication<?> application;
+
+    @Test
+    void testItWorks() {
+        Assertions.assertTrue(application.isRunning());
+    }
+
+}
diff --git a/java/maven/test/unit/data/projects/dependencies/golden/testCompileDependencies b/java/maven/test/unit/data/projects/dependencies/golden/testCompileDependencies
index 9bdfe88..45e7f03 100644
--- a/java/maven/test/unit/data/projects/dependencies/golden/testCompileDependencies
+++ b/java/maven/test/unit/data/projects/dependencies/golden/testCompileDependencies
@@ -1,6 +1,6 @@
 [ ] nbtest.grp:test-app:12.6[jar] / compilation
  +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
  +-- [ ] nbtest.grp:test-lib:13[jar] / compilation
- |    +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
  |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
  |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
diff --git a/java/maven/test/unit/data/projects/dependencies/golden/testDuplicatedDependencies b/java/maven/test/unit/data/projects/dependencies/golden/testDuplicatedDependencies
new file mode 100644
index 0000000..2095848
--- /dev/null
+++ b/java/maven/test/unit/data/projects/dependencies/golden/testDuplicatedDependencies
@@ -0,0 +1,1832 @@
+[ ] com.example:demo:0.1[jar] / compilation
+ +-- [ ] ch.qos.logback:logback-classic:1.2.11[jar] / runtime
+ |    +-- [ ] ch.qos.logback:logback-core:1.2.11[jar] / runtime
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / runtime
+ +-- [ ] io.micronaut:micronaut-http-client:3.7.0[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-http-client-core:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-http-netty:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-buffer-netty:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-websocket:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http-client-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-http2:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-websocket:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-http-client-core:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.netty:netty-handler-proxy:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-socks:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ +-- [ ] io.micronaut:micronaut-http-server-netty:3.7.0[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-http-netty:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-buffer-netty:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-websocket:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http-client-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-http2:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-http-server:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-router:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-websocket:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http-client-core:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-runtime:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.netty:netty-codec-http:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-handler:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-codec:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport-native-unix-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    +-- [ ] io.netty:netty-transport:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-buffer:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    |    |    +-- [ ] io.netty:netty-resolver:4.1.82.Final[jar] / compilation
+ |    |    |    |    +-- [ ] io.netty:netty-common:4.1.82.Final[jar] / compilation
+ |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ +-- [ ] io.micronaut:micronaut-jackson-databind:3.7.0[jar] / compilation
+ |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    +-- [ ] com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-databind:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-jackson-core:3.7.0[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-annotations:2.13.4[jar] / compilation
+ |    |    +-- [ ] com.fasterxml.jackson.core:jackson-core:2.13.4[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-json-core:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-context:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-aop:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] io.micronaut:micronaut-http:3.7.0[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    |    |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    |    |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    |    |    |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    |    |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ +-- [ ] io.micronaut:micronaut-validation:3.7.0[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-core-reactive:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    +-- [ ] io.micronaut:micronaut-inject:3.7.0[jar] / compilation
+ |    |    +-- [ ] io.micronaut:micronaut-core:3.7.0[jar] / compilation
+ |    |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
+ |    |    +-- [ ] jakarta.inject:jakarta.inject-api:2.0.1[jar] / compilation
+ |    |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ |    |    +-- [ ] org.yaml:snakeyaml:1.32[jar] / compilation
+ |    +-- [ ] io.projectreactor:reactor-core:3.4.23[jar] / runtime
+ |    |    +-- [ ] org.reactivestreams:reactive-streams:1.0.4[jar] / runtime
+ |    +-- [ ] javax.validation:validation-api:2.0.1.Final[jar] / compilation
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
+ +-- [ ] jakarta.annotation:jakarta.annotation-api:2.1.1[jar] / compilation
diff --git a/java/maven/test/unit/data/projects/dependencies/golden/testRuntimeDependencies b/java/maven/test/unit/data/projects/dependencies/golden/testRuntimeDependencies
index 4b8eb97..4dc8bbc 100644
--- a/java/maven/test/unit/data/projects/dependencies/golden/testRuntimeDependencies
+++ b/java/maven/test/unit/data/projects/dependencies/golden/testRuntimeDependencies
@@ -1,9 +1,9 @@
 [ ] nbtest.grp:test-app:12.6[jar] / compilation
  +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
- +-- [ ] nbtest.grp:test-lib:13[jar] / compilation
- |    +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
- |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
- |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
  +-- [ ] nbtest.grp:test-lib4:12.6[jar] / runtime
+ +-- [ ] nbtest.grp:test-lib:13[jar] / compilation
+ |    +-- [ ] javax.annotation:javax.annotation-api:1.3.2[jar] / compilation
+ |    +-- [ ] nbtest.grp:annotation:12.6[jar] / compilation
+ |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / compilation
  +-- [ ] org.slf4j:slf4j-jdk14:1.7.36[jar] / runtime
  |    +-- [ ] org.slf4j:slf4j-api:1.7.36[jar] / runtime
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/api/customizer/ModelHandle2Test.java b/java/maven/test/unit/src/org/netbeans/modules/maven/api/customizer/ModelHandle2Test.java
index e0b1446..d0d66a1 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/api/customizer/ModelHandle2Test.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/api/customizer/ModelHandle2Test.java
@@ -162,7 +162,7 @@
 "            </packagings>\n" +
 "            <goals>\n" +
 "                <goal>process-classes</goal>\n" +
-"                <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>\n" +
+"                <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>\n" +
 "            </goals>\n" +
 "            <properties>\n" +
 "                <exec.args>-classpath %classpath ${packageClassName}</exec.args>\n" +
@@ -177,7 +177,7 @@
 "            </packagings>\n" +
 "            <goals>\n" +
 "                <goal>process-classes</goal>\n" +
-"                <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>\n" +
+"                <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>\n" +
 "            </goals>\n" +
 "            <properties>\n" +
 "                <exec.args>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ${packageClassName}</exec.args>\n" +
@@ -199,7 +199,7 @@
 "            </packagings>\n" +
 "            <goals>\n" +
 "                <goal>process-classes</goal>\n" +
-"                <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>\n" +
+"                <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>\n" +
 "            </goals>\n" +
 "            <properties>\n" +
 "                <exec.args>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ${packageClassName}</exec.args>\n" +
@@ -223,7 +223,7 @@
             RunConfig run = ActionToGoalUtils.createRunConfig("debug.single.main", (NbMavenProjectImpl) project, project.getLookup());
             assertEquals("Two goals: " + run.getGoals(), 2, run.getGoals().size());
             assertEquals("process-classes", run.getGoals().get(0));
-            assertEquals("org.codehaus.mojo:exec-maven-plugin:3.0.0:exec", run.getGoals().get(1));
+            assertEquals("org.codehaus.mojo:exec-maven-plugin:3.1.0:exec", run.getGoals().get(1));
             assertEquals("One profile activated in action: " + run.getActivatedProfiles(), 1, run.getActivatedProfiles().size());
             assertEquals("jetty", run.getActivatedProfiles().get(0));
         }
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/CommandLineOutputHandlerTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/CommandLineOutputHandlerTest.java
index 33148d5..dd38324 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/CommandLineOutputHandlerTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/CommandLineOutputHandlerTest.java
@@ -20,7 +20,6 @@
 package org.netbeans.modules.maven.execute;
 
 import java.util.regex.Matcher;
-import static junit.framework.TestCase.fail;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -42,23 +41,6 @@
     @AfterClass
     public static void tearDownClass() throws Exception {
     }
-
-    @Test
-    public void testDownloadPattern() {
-        String[] lines = {
-            "51521/?", "11/12K", "11/12M", "51521/120000b",
-            "51521/? 12/25K", "34/263M 464/500b",
-            "51521/? 13/25K 4034/4640M",
-            // #189465: M3 ConsoleMavenTransferListener.doProgress
-            "59/101 KB    ", "1/3 B  ", "55 KB", "300 B  ",
-            "10/101 KB   48/309 KB   ", // sometimes seems to jam
-        };
-        for (String line : lines) {
-            if (!CommandLineOutputHandler.DOWNLOAD.matcher(line).matches()) {
-                fail("Line " + line + " not skipped");
-            }
-        }
-    }
     
     @Test
     public void testRegExp() throws Exception {
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/MavenExecutionTestBase.java b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/MavenExecutionTestBase.java
index 38666c3..ecefcf3 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/MavenExecutionTestBase.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/MavenExecutionTestBase.java
@@ -183,7 +183,7 @@
                 + "            <plugin>\n"
                 + "                <groupId>org.codehaus.mojo</groupId>\n"
                 + "                <artifactId>exec-maven-plugin</artifactId>\n"
-                + "                <version>3.0.0</version>\n"
+                + "                <version>3.1.0</version>\n"
                 + "                <configuration>\n"
                 +                      argsString 
                 + "                </configuration>\n"
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/ModelRunConfigTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/ModelRunConfigTest.java
index fbb8c6e..612a6b5 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/ModelRunConfigTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/ModelRunConfigTest.java
@@ -20,32 +20,14 @@
 package org.netbeans.modules.maven.execute;
 
 import java.io.IOException;
-import org.netbeans.modules.maven.api.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.function.Function;
 import static junit.framework.TestCase.assertEquals;
-import org.apache.maven.project.MavenProject;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectManager;
 import org.netbeans.junit.NbTestCase;
-import org.netbeans.modules.maven.api.ModelUtils.Descriptor;
-import org.netbeans.modules.maven.api.ModelUtils.LibraryDescriptor;
 import org.netbeans.modules.maven.api.customizer.ModelHandle2;
 import org.netbeans.modules.maven.configurations.M2ConfigProvider;
-import org.netbeans.modules.maven.configurations.M2Configuration;
 import org.netbeans.modules.maven.execute.ModelRunConfig;
 import org.netbeans.modules.maven.execute.model.NetbeansActionMapping;
-import org.netbeans.modules.maven.model.ModelOperation;
-import org.netbeans.modules.maven.model.Utilities;
-import org.netbeans.modules.maven.model.pom.POMModel;
-import org.netbeans.modules.maven.model.pom.Repository;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.test.TestFileUtils;
@@ -260,7 +242,7 @@
                 + "            <plugin>\n"
                 + "                <groupId>org.codehaus.mojo</groupId>\n"
                 + "                <artifactId>exec-maven-plugin</artifactId>\n"
-                + "                <version>3.0.0</version>\n"
+                + "                <version>3.1.0</version>\n"
                 + "                <configuration>\n"
                 + "                    <executable>${java.home}/bin/java</executable>\n"
                 +                      argsString 
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementationTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementationTest.java
index a2d4948..f652935 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementationTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenDependenciesImplementationTest.java
@@ -23,6 +23,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -74,6 +75,9 @@
         return new File(destDir);
     }
     protected @Override void setUp() throws Exception {
+        // this property could be eventually initialized by NB module system, as MavenCacheDisabler i @OnStart, but that's unreliable.
+        System.setProperty("maven.defaultProjectBuilder.disableGlobalModelCache", "true");
+        
         clearWorkDir();
         
         // This is needed, otherwose the core window's startup code will redirect
@@ -127,7 +131,7 @@
             }
         };
         ap.invokeAction(ActionProvider.COMMAND_PRIME, Lookups.fixed(prg));
-        primeLatch.await(20, TimeUnit.SECONDS);
+        primeLatch.await(300, TimeUnit.SECONDS);
     }
     
     public void testCompileDependencies() throws Exception {
@@ -248,12 +252,42 @@
         assertTrue(text.contains("<artifactId>test-lib</artifactId>"));
     }
     
+    /**
+     * Checks that a complete dependency graph of a real-world project is printed out. Note that
+     * the dependency graph is enormous as it contains lots of duplicated shared libraries.
+     * 
+     * @throws Exception 
+     */
+    public void testDuplicatedDependencies() throws Exception {
+        FileUtil.toFileObject(getWorkDir()).refresh();
+
+        FileObject testApp = dataFO.getFileObject("projects/dependencies/duplicates/micronaut");
+        FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "micronaut");
+        
+        Project p = ProjectManager.getDefault().findProject(prjCopy);
+        assertNotNull(p);
+
+        primeProject(p);
+        DependencyResult dr = ProjectDependencies.findDependencies(p, ProjectDependencies.newQuery(Scopes.RUNTIME));
+        
+        assertContents(printDependencyTree(dr.getRoot()), getName());
+    }
+    
     void assertContents(String contents, String golden) throws IOException {
         File f = new File(getDataDir(), "projects/dependencies/golden/" + golden);
         Path res = Files.write(getWorkDir().toPath().resolve(getName() + ".output"), 
                 Arrays.asList(contents.split("\n")),
                 StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
-        assertFile(res.toFile(), f, new File(getWorkDir(), getName() + ".diff"));
+        File diff = new File(getWorkDir(), getName() + ".diff");
+        try {
+            assertFile(res.toFile(), f, diff);
+        } catch (AssertionError err) {
+            System.err.println("Differences: ");
+            System.err.println(String.join("\n", Files.readAllLines(diff.toPath())));
+            System.err.println("Actual contents:");
+            System.err.println(contents);
+            throw err;
+        }
     }
     
     static String printDependencyTree(Dependency root) {
@@ -280,7 +314,11 @@
         }
         sb.append("\n");
         int index = 0;
-        for (Dependency c : (List<Dependency>)from.getChildren()) {
+        List<Dependency> sorted = new ArrayList<>(from.getChildren());
+        Collections.sort(sorted, (d1, d2) -> {
+            return d1.getArtifact().toString().compareToIgnoreCase(d2.getArtifact().toString());
+        });
+        for (Dependency c : sorted) {
             printDependencyTree(c, levels + 1, sb);
             index++;
         }
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/nbactions-template.xml b/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/nbactions-template.xml
index 79b91bb..f310502 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/nbactions-template.xml
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/runjar/nbactions-template.xml
@@ -27,7 +27,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
                 &runProperties;
@@ -40,7 +40,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
                 &debugProperties;
@@ -53,7 +53,7 @@
         </packagings>
         <goals>
             <goal>process-classes</goal>
-            <goal>org.codehaus.mojo:exec-maven-plugin:3.0.0:exec</goal>
+            <goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
         </goals>
         <properties>
                 &profileProperties;
diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/spi/actions/ProvidedConfigurationsTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/spi/actions/ProvidedConfigurationsTest.java
index 88438fe..d15793e 100644
--- a/java/maven/test/unit/src/org/netbeans/modules/maven/spi/actions/ProvidedConfigurationsTest.java
+++ b/java/maven/test/unit/src/org/netbeans/modules/maven/spi/actions/ProvidedConfigurationsTest.java
@@ -144,7 +144,7 @@
         RunConfig cfg = ActionToGoalUtils.createRunConfig("run", pimpl, Lookup.EMPTY);
         assertEquals(Arrays.asList(
                 "process-classes",
-                "org.codehaus.mojo:exec-maven-plugin:3.0.0:exec"), cfg.getGoals());
+                "org.codehaus.mojo:exec-maven-plugin:3.1.0:exec"), cfg.getGoals());
         
         ProjectConfigurationProvider<MavenConfiguration> pcp = p.getLookup().lookup(ProjectConfigurationProvider.class);
         MavenConfiguration c = pcp.getConfigurations().stream().filter(x -> "Micronaut: dev mode".equals(x.getDisplayName())).findAny().get();
diff --git a/java/nashorn.execution/nbproject/project.properties b/java/nashorn.execution/nbproject/project.properties
index 72cd061..0884480 100644
--- a/java/nashorn.execution/nbproject/project.properties
+++ b/java/nashorn.execution/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 
 
diff --git a/java/performance.java/nbproject/project.properties b/java/performance.java/nbproject/project.properties
index 7c2fda5..6452901 100644
--- a/java/performance.java/nbproject/project.properties
+++ b/java/performance.java/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 
 test.config.perf.includes=\
diff --git a/java/performance.java/test/qa-functional/data/PerformanceTestData/nbproject/project.properties b/java/performance.java/test/qa-functional/data/PerformanceTestData/nbproject/project.properties
index f2ab437..60f1204 100644
--- a/java/performance.java/test/qa-functional/data/PerformanceTestData/nbproject/project.properties
+++ b/java/performance.java/test/qa-functional/data/PerformanceTestData/nbproject/project.properties
@@ -38,7 +38,7 @@
 javac.classpath=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/performance/actionsframework/src/org/netbeans/actions/simple/Interpreter.java b/java/performance/actionsframework/src/org/netbeans/actions/simple/Interpreter.java
index 5fc7f7e..3c1c32c 100644
--- a/java/performance/actionsframework/src/org/netbeans/actions/simple/Interpreter.java
+++ b/java/performance/actionsframework/src/org/netbeans/actions/simple/Interpreter.java
@@ -655,7 +655,7 @@
             return null;
         }
     }
-    private static final String ATT_VALUE="value";;
+    private static final String ATT_VALUE="value";
     private String findKeyValue(AttributeList l) throws SAXException {
         String result = l.getValue(ATT_VALUE);
         if (result != null) {
diff --git a/java/performance/enterprise/test/qa-functional/data/BPELTestProject/nbproject/project.properties b/java/performance/enterprise/test/qa-functional/data/BPELTestProject/nbproject/project.properties
index a1fb910..79c5629 100644
--- a/java/performance/enterprise/test/qa-functional/data/BPELTestProject/nbproject/project.properties
+++ b/java/performance/enterprise/test/qa-functional/data/BPELTestProject/nbproject/project.properties
@@ -37,7 +37,7 @@
 jar.name=SynchronousSample.jar
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 meta.inf=${source.root}/conf
 platform.active=default_platform
diff --git a/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationService/nbproject/project.properties b/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationService/nbproject/project.properties
index e9941b1..e4c78c2 100644
--- a/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationService/nbproject/project.properties
+++ b/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationService/nbproject/project.properties
@@ -31,7 +31,7 @@
 jar.name=TravelReservationService.jar
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 jbi.se.type=sun-bpel-engine
 jbi.service-unit.description=Represents this Service Unit
diff --git a/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationServiceApplication/nbproject/project.properties b/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationServiceApplication/nbproject/project.properties
index dbb7155..e5039f8 100644
--- a/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationServiceApplication/nbproject/project.properties
+++ b/java/performance/enterprise/test/qa-functional/data/TravelReservationService/TravelReservationServiceApplication/nbproject/project.properties
@@ -29,7 +29,7 @@
 jar.compress=false
 javac.debug=true
 javac.deprecation=false
-javac.source=1.4
+javac.source=1.8
 javac.target=1.8
 javadoc.author=false
 javadoc.encoding=
diff --git a/java/performance/nbproject/project.properties b/java/performance/nbproject/project.properties
index 6fb8952..4ab7c94 100644
--- a/java/performance/nbproject/project.properties
+++ b/java/performance/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.7
+javac.source=1.8
 test.config.memoryleak.includes=\
     org/netbeans/test/ide/PerfMemoryValidationTest.class
 nbplatform.default.harness.dir=${netbeans.dest.dir}/harness
diff --git a/java/projectimport.eclipse.core/nbproject/org-netbeans-modules-projectimport-eclipse-core.sig b/java/projectimport.eclipse.core/nbproject/org-netbeans-modules-projectimport-eclipse-core.sig
index 07a1b0d..cf4e9f2 100644
--- a/java/projectimport.eclipse.core/nbproject/org-netbeans-modules-projectimport-eclipse-core.sig
+++ b/java/projectimport.eclipse.core/nbproject/org-netbeans-modules-projectimport-eclipse-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.47
+#Version 2.48
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/projectimport.eclipse.core/nbproject/project.properties b/java/projectimport.eclipse.core/nbproject/project.properties
index 9901499..18fb849 100644
--- a/java/projectimport.eclipse.core/nbproject/project.properties
+++ b/java/projectimport.eclipse.core/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 nbm.homepage=http://www.netbeans.org/kb/articles/import-eclipse.html
 test.unit.run.cp.extra=\
     ${libs.xerces.dir}/modules/ext/xerces-2.8.0.jar:\
diff --git a/java/projectimport.eclipse.j2se/nbproject/project.properties b/java/projectimport.eclipse.j2se/nbproject/project.properties
index 2843028..e2794a7 100644
--- a/java/projectimport.eclipse.j2se/nbproject/project.properties
+++ b/java/projectimport.eclipse.j2se/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.47.0
diff --git a/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig b/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
index 26adf5a..ddb63fe 100644
--- a/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
+++ b/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.78.0
+#Version 1.80.0
 
 CLSS public abstract interface com.sun.source.doctree.DocTreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
 meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitAttribute(com.sun.source.doctree.AttributeTree,{com.sun.source.doctree.DocTreeVisitor%1})
@@ -57,7 +57,9 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
@@ -88,6 +90,7 @@
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
@@ -137,7 +140,9 @@
 meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
@@ -168,6 +173,7 @@
 meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
diff --git a/java/refactoring.java/nbproject/project.properties b/java/refactoring.java/nbproject/project.properties
index 90af342..d5dadad 100644
--- a/java/refactoring.java/nbproject/project.properties
+++ b/java/refactoring.java/nbproject/project.properties
@@ -67,3 +67,8 @@
 
 requires.nb.javac=true
 test.unit.cp.extra=../java.source.nbjavac/build/test-nb-javac/cluster/modules/org-netbeans-modules-java-source-nbjavac-test.jar
+
+# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
+jms-compiler.flags.jvm=
+test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTopComponent.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTopComponent.java
index 8a3f77d..95c4393 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTopComponent.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTopComponent.java
@@ -57,7 +57,7 @@
     private static final String PREFERRED_ID = "CallHierarchyTopComponent"; // NOI18N
     
     private final ExplorerManager manager;
-    private final ExplorerManager managerCtx = new ExplorerManager();;
+    private final ExplorerManager managerCtx = new ExplorerManager();
     private CallHierarchyModel model;
 
     private CallHierarchyTopComponent() {
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java
index b297c37..35477b5 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/RenameTransformer.java
@@ -301,7 +301,7 @@
                     } else if(elementToFind.getKind() == ElementKind.METHOD) {
                         ElementUtilities utils = workingCopy.getElementUtilities();
                         if(utils.alreadyDefinedIn((CharSequence) newName, (ExecutableType) elementToFind.asType(), (TypeElement) enclosingTypeElement)) {
-                            boolean isSuper = false;;
+                            boolean isSuper = false;
                             if (tree.getKind() == Tree.Kind.MEMBER_SELECT) {
                                 String superString = ((MemberSelectTree) tree).getExpression().toString();
                                 if (superString.equals("super") || superString.endsWith(".super")) { // NOI18N
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/EncapsulateFieldsRefactoring.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/EncapsulateFieldsRefactoring.java
index 0b0672e..62723ff 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/EncapsulateFieldsRefactoring.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/EncapsulateFieldsRefactoring.java
@@ -38,7 +38,7 @@
     
     private Collection<EncapsulateFieldInfo> refactorFields = Collections.emptyList();
     private Set<Modifier> methodModifiers = Collections.emptySet();
-    private Set<Modifier> fieldModifiers = Collections.emptySet();;
+    private Set<Modifier> fieldModifiers = Collections.emptySet();
     private boolean alwaysUseAccessors;
     private boolean isGeneratePropertyChangeSupport;
     private boolean isGenerateVetoableSupport;
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassPanel.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassPanel.java
index 4451668..b76d152 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassPanel.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassPanel.java
@@ -515,6 +515,7 @@
 
                                 @Override
                                 public void run(CompilationController parameter) throws Exception {
+                                    parameter.toPhase(JavaSource.Phase.RESOLVED);
                                     for (ElementHandle<TypeElement> elementHandle : result) {
                                         TypeElement element = elementHandle.resolve(parameter);
                                         if (element != null) {
@@ -627,7 +628,7 @@
 
     public TreePathHandle getTargetClass() {
         final Object selectedItem = typeCombobox.getSelectedItem();
-        if(typeCheckBox.isSelected() && selectedItem != null && selectedItem instanceof ClassItem) {
+        if(typeCheckBox.isSelected() && selectedItem instanceof ClassItem) {
             return ((ClassItem)selectedItem).getHandle();
         }
         return null;
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
index 9176f43..b826a98 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
@@ -285,7 +285,7 @@
             if (e == null) {
                 return null;
             }
-            JEditorPane textC = NbDocument.findRecentEditorPane(ec);;
+            JEditorPane textC = NbDocument.findRecentEditorPane(ec);
             if (textC == null) {
                 try {
                     return new MoveClassUI(DataObject.find(files[0]), tar, paste);
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveMembersPanel.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveMembersPanel.java
index b0055a9..e7ad8e4 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveMembersPanel.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveMembersPanel.java
@@ -312,6 +312,7 @@
 
                                 @Override
                                 public void run(CompilationController parameter) throws Exception {
+                                    parameter.toPhase(JavaSource.Phase.RESOLVED);
                                     for (ElementHandle<TypeElement> elementHandle : result) {
                                         TypeElement element = elementHandle.resolve(parameter);
                                         if (element != null) {
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java
index 919f618..92f9c5a 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java
@@ -96,7 +96,7 @@
                 return TreeElementFactory.getTreeElement(p);
             }
             Object orig = fo.getAttribute("orig-file");
-            if(orig != null && orig instanceof URL) {
+            if(orig instanceof URL) {
                 URL root = FileUtil.getArchiveFile((URL) orig);
                 try {
                     FileObject arch = FileUtil.toFileObject(Utilities.toFile(root.toURI()));
diff --git a/java/refactoring.java/test/qa-functional/data/projects/RefactoringTest/nbproject/project.properties b/java/refactoring.java/test/qa-functional/data/projects/RefactoringTest/nbproject/project.properties
index 3714555..c82d221 100644
--- a/java/refactoring.java/test/qa-functional/data/projects/RefactoringTest/nbproject/project.properties
+++ b/java/refactoring.java/test/qa-functional/data/projects/RefactoringTest/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/refactoring.java/test/unit/data/SimpleJ2SEAppChild/nbproject/project.properties b/java/refactoring.java/test/unit/data/SimpleJ2SEAppChild/nbproject/project.properties
index f89e698..dd5b0d8 100644
--- a/java/refactoring.java/test/unit/data/SimpleJ2SEAppChild/nbproject/project.properties
+++ b/java/refactoring.java/test/unit/data/SimpleJ2SEAppChild/nbproject/project.properties
@@ -51,7 +51,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RefactoringTestBase.java b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RefactoringTestBase.java
index 19fe2ef..ebc261b 100644
--- a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RefactoringTestBase.java
+++ b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RefactoringTestBase.java
@@ -353,7 +353,7 @@
         org.netbeans.api.project.ui.OpenProjects.getDefault().close(new Project[] {prj});
         CountDownLatch cdl = new CountDownLatch(1);
         RepositoryUpdater.getDefault().stop(() -> {
-            cdl.countDown();;
+            cdl.countDown();
         });
         cdl.await();
         prj = null;
diff --git a/java/selenium2.java/nbproject/org-netbeans-modules-selenium2-java.sig b/java/selenium2.java/nbproject/org-netbeans-modules-selenium2-java.sig
index 6bc11bd..f8ce257d 100644
--- a/java/selenium2.java/nbproject/org-netbeans-modules-selenium2-java.sig
+++ b/java/selenium2.java/nbproject/org-netbeans-modules-selenium2-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.19
+#Version 1.20
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/selenium2.java/nbproject/project.properties b/java/selenium2.java/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/java/selenium2.java/nbproject/project.properties
+++ b/java/selenium2.java/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/selenium2.maven/nbproject/project.properties b/java/selenium2.maven/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/java/selenium2.maven/nbproject/project.properties
+++ b/java/selenium2.maven/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/spellchecker.bindings.java/nbproject/project.properties b/java/spellchecker.bindings.java/nbproject/project.properties
index f934435..991a6ed 100644
--- a/java/spellchecker.bindings.java/nbproject/project.properties
+++ b/java/spellchecker.bindings.java/nbproject/project.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 is.eager=true
 
 nbm.homepage=http://spellchecker.netbeans.org
diff --git a/java/spi.debugger.jpda.ui/nbproject/org-netbeans-spi-debugger-jpda-ui.sig b/java/spi.debugger.jpda.ui/nbproject/org-netbeans-spi-debugger-jpda-ui.sig
index b97952f..64ca9dc 100644
--- a/java/spi.debugger.jpda.ui/nbproject/org-netbeans-spi-debugger-jpda-ui.sig
+++ b/java/spi.debugger.jpda.ui/nbproject/org-netbeans-spi-debugger-jpda-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.20
+#Version 3.21
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/spi.debugger.jpda.ui/nbproject/project.properties b/java/spi.debugger.jpda.ui/nbproject/project.properties
index 17e4d76..496d3b8 100644
--- a/java/spi.debugger.jpda.ui/nbproject/project.properties
+++ b/java/spi.debugger.jpda.ui/nbproject/project.properties
@@ -19,7 +19,7 @@
 cp.extra=${tools.jar}:${jpda.classes.dir}
 jpda.classes.dir=${build.dir}/jpda/classes/
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
diff --git a/java/spi.java.hints/external/byte-buddy-1.10.6-license.txt b/java/spi.java.hints/external/byte-buddy-1.10.6-license.txt
deleted file mode 100644
index 21be18d..0000000
--- a/java/spi.java.hints/external/byte-buddy-1.10.6-license.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-Name: Byte Buddy
-Version: 1.10.6
-Description: Code Generation Library
-License: Apache-2.0+BSD-INRIA
-Origin: Byte Buddy
-URL: https://github.com/raphw/byte-buddy
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in the
-*    documentation and/or other materials provided with the distribution.
-* 3. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-* THE POSSIBILITY OF SUCH DAMAGE.
-*******************************************************************************
diff --git a/java/spi.java.hints/nbproject/org-netbeans-spi-java-hints.sig b/java/spi.java.hints/nbproject/org-netbeans-spi-java-hints.sig
index 223ce42..eb8e177 100644
--- a/java/spi.java.hints/nbproject/org-netbeans-spi-java-hints.sig
+++ b/java/spi.java.hints/nbproject/org-netbeans-spi-java-hints.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49.0
+#Version 1.50.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/spi.java.hints/nbproject/project.properties b/java/spi.java.hints/nbproject/project.properties
index fddcc1c..c15560c 100644
--- a/java/spi.java.hints/nbproject/project.properties
+++ b/java/spi.java.hints/nbproject/project.properties
@@ -21,4 +21,3 @@
 requires.nb.javac=true
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
-release.external/byte-buddy-1.10.6.jar=modules/ext/byte-buddy-1.10.6.jar
diff --git a/java/spi.java.hints/nbproject/project.xml b/java/spi.java.hints/nbproject/project.xml
index b336b3b..d5a4f3f 100644
--- a/java/spi.java.hints/nbproject/project.xml
+++ b/java/spi.java.hints/nbproject/project.xml
@@ -508,10 +508,6 @@
                 <package>org.netbeans.spi.java.hints.matching</package>
                 <package>org.netbeans.spi.java.hints.support</package>
             </public-packages>
-            <class-path-extension>
-                <runtime-relative-path>ext/byte-buddy-1.10.6.jar</runtime-relative-path>
-                <binary-origin>external/byte-buddy-1.10.6.jar</binary-origin>
-            </class-path-extension>
         </data>
     </configuration>
 </project>
diff --git a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Hacks.java b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Hacks.java
index 3ff7261..715b879 100644
--- a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Hacks.java
+++ b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Hacks.java
@@ -113,7 +113,7 @@
             if (TreeUtilities.CLASS_TREE_KINDS.contains(tp.getLeaf().getKind())) {
                 Element currentElement = info.getTrees().getElement(tp);
 
-                if (currentElement == null || !(currentElement instanceof ClassSymbol)) return null;
+                if (!(currentElement instanceof ClassSymbol)) return null;
 
                 Enter enter = Enter.instance(JavaSourceAccessor.getINSTANCE().getJavacTask(info).getContext());
                 Env<AttrContext> env = enter.getEnv((ClassSymbol) currentElement);
diff --git a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
index a3dae10..a88aabb 100644
--- a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
+++ b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
@@ -91,7 +91,6 @@
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
-import java.lang.invoke.MethodHandles;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
 import java.net.URI;
@@ -129,9 +128,6 @@
 import javax.tools.JavaCompiler.CompilationTask;
 import javax.tools.JavaFileObject;
 import javax.tools.SimpleJavaFileObject;
-import net.bytebuddy.dynamic.DynamicType.Loaded;
-import net.bytebuddy.dynamic.DynamicType.Unloaded;
-import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
 import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.java.classpath.ClassPath;
@@ -451,7 +447,7 @@
                             Element currentElement = trees.getElement(getCurrentPath());
 
                             if (!isError(currentElement)) {
-                                if (currentElement.getKind() == ElementKind.PACKAGE && el.getPackageElement(node.toString()) == null) {
+                                if (currentElement.getKind() == ElementKind.PACKAGE && el.getAllPackageElements(node.toString()).isEmpty()) {
                                     ((JCFieldAccess) node).sym = symtab.errSymbol;
                                     ((JCFieldAccess) node).type = symtab.errType;
                                 } else {
@@ -466,7 +462,7 @@
                             Element currentElement = trees.getElement(getCurrentPath());
 
                             if (!isError(currentElement)) {
-                                if (currentElement.getKind() == ElementKind.PACKAGE && el.getPackageElement(node.toString()) == null) {
+                                if (currentElement.getKind() == ElementKind.PACKAGE && el.getAllPackageElements(node.toString()).isEmpty()) {
                                     ((JCIdent) node).sym = symtab.errSymbol;
                                     ((JCIdent) node).type = symtab.errType;
                                 } else {
@@ -1291,18 +1287,6 @@
         return true;
     }
 
-    static <T> Loaded<T> load(Unloaded<T> unloaded) {
-        ClassLoadingStrategy<ClassLoader> strategy;
-
-        try {
-            strategy = ClassLoadingStrategy.UsingLookup.of(MethodHandles.lookup());
-        } catch (IllegalStateException ex) {
-            strategy = new ClassLoadingStrategy.ForUnsafeInjection();
-        }
-
-        return unloaded.load(JackpotTrees.class.getClassLoader(), strategy);
-    }
-
     private static class JackpotJavacParser extends NBJavacParser {
 
         private final Context ctx;
diff --git a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/pm/NFABasedBulkSearch.java b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/pm/NFABasedBulkSearch.java
index 16919be..9036adf 100644
--- a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/pm/NFABasedBulkSearch.java
+++ b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/pm/NFABasedBulkSearch.java
@@ -448,7 +448,9 @@
                 throw new IllegalStateException(ex);
             }
         }
-        if (cancel.get());
+        if (cancel.get()) {
+            return;
+        }
         new CollectIdentifiers<Void, Void>(new HashSet<>(), cancel) {
             private boolean encode = true;
             @Override
@@ -511,7 +513,6 @@
 
         ctx.setIdentifiers(identifiers);
         ctx.setContent(content);
-        if (cancel.get());
     }
 
     @Override
diff --git a/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/UtilitiesTest.java b/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/UtilitiesTest.java
index ddcd2b2..4411e9c 100644
--- a/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/UtilitiesTest.java
+++ b/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/UtilitiesTest.java
@@ -234,7 +234,7 @@
 
         assertTrue(result.getKind().name(), result.getKind() == Kind.TRY);
 
-        String golden = "try ($t$ final $type $name = $init) { $stmts$; }$catches$";
+        String golden = "try ($t$ $type $name = $init) { $stmts$; }$catches$";
         String resultString = result.toString();
         //nb-javac: nb-javac and JDK's javac produce different semicolons for the TWR resources:
         resultString = resultString.replace("$t$;", "$t$");
@@ -250,7 +250,7 @@
 
         assertTrue(result.getKind().name(), result.getKind() == Kind.TRY);
 
-        String golden = "try (final $t $n = $init$) { $stmts$; }$catches$";
+        String golden = "try ($t $n = $init$) { $stmts$; }$catches$";
         String resultString = result.toString();
         //nb-javac: nb-javac and JDK's javac produce different semicolons for the TWR resources:
         resultString = resultString.replace("$init$;", "$init$");
@@ -380,7 +380,7 @@
         String golden = "case $expr: foo bar; $stmts$; ";
         assertEquals(golden.replaceAll("[ \n\r]+", " "), result.toString().replaceAll("[ \n\r]+", " "));
         assertDiagnostics(errors, "19-19:compiler.err.expected");
-        assertPositions(result, positions[0], code, "$expr", "$stmts$", "$stmts$;", "case $expr: foo bar $stmts$;", "foo", "foo bar ");
+        assertPositions(result, positions[0], code, "$expr", "$expr", "$stmts$", "$stmts$;", "case $expr: foo bar $stmts$;", "foo", "foo bar ");
     }
 
     public void testLambdaPattern() throws Exception {
diff --git a/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/processor/JavaHintsAnnotationProcessorTest.java b/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/processor/JavaHintsAnnotationProcessorTest.java
index 8f4b420..a1d22b1 100644
--- a/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/processor/JavaHintsAnnotationProcessorTest.java
+++ b/java/spi.java.hints/test/unit/src/org/netbeans/modules/java/hints/spiimpl/processor/JavaHintsAnnotationProcessorTest.java
@@ -20,6 +20,7 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.util.Locale;
 import org.netbeans.junit.NbTestCase;
 import org.openide.util.test.AnnotationProcessorTestUtils;
 import org.openide.util.test.TestFileUtils;
@@ -34,6 +35,21 @@
         super(name);
     }
 
+    private Locale originalLocale;
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        Locale.setDefault(originalLocale);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        originalLocale = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+    }
+
     public void testErrors1() throws Exception {
         File src = new File(getWorkDir(), "src");
         File dest = new File(getWorkDir(), "classes");
diff --git a/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/JavaFixUtilitiesTest.java b/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/JavaFixUtilitiesTest.java
index 228d548..3957df6 100644
--- a/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/JavaFixUtilitiesTest.java
+++ b/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/JavaFixUtilitiesTest.java
@@ -536,9 +536,7 @@
                            "import java.io.InputStream;\n" +
                            "public class Test {\n" +
                            "    private void t() throws Exception {\n" +
-//                           "        try (InputStream in = null) {\n" +
-                           //XXX:
-                           "        try (final InputStream in = null) {\n" +
+                           "        try (InputStream in = null) {\n" +
                            "        } finally {\n" +
                            "            in.close()\n" +
                            "        }\n" +
diff --git a/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/matching/CopyFinderTest.java b/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/matching/CopyFinderTest.java
index fa13f05..2d177a9 100644
--- a/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/matching/CopyFinderTest.java
+++ b/java/spi.java.hints/test/unit/src/org/netbeans/spi/java/hints/matching/CopyFinderTest.java
@@ -38,6 +38,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
+import javax.lang.model.SourceVersion;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeMirror;
 import javax.swing.text.Document;
@@ -1257,7 +1258,80 @@
                              false,
                              false);
     }
-    
+
+
+    public void testPatternMatchingInstanceOf() throws Exception {
+        try {
+            SourceVersion.valueOf("RELEASE_17");
+        } catch (IllegalArgumentException ex) {
+            System.err.println("Skipping testPatternMatchingInstanceOf," +
+                               "as SourceVersion.RELEASE_17 is not available.");
+            return ;
+        }
+        sourceLevel = "17";
+        performVariablesTest("package test;\n" +
+                             "public class Test {\n" +
+                             "    boolean test(Object o) {\n" +
+                             "      return o instanceof String s;\n" +
+                             "    }\n" +
+                             "}\n",
+                             "$expr instanceof $type $name",
+                             new Pair[] {
+                                 new Pair<String, int[]>("$expr", new int[] {76, 77}),
+                                 new Pair<String, int[]>("$type", new int[] {89, 95}),
+                                 new Pair<String, int[]>("$name", new int[] {89, 97}),
+                             },
+                             new Pair[0],
+                             new Pair[] {
+                                 new Pair<String, String >("$name", "s"),
+                             },
+                             false,
+                             false);
+    }
+
+    public void testNotPatternMatchingInstanceOf() throws Exception {
+        performVariablesTest("package test;\n" +
+                             "public class Test {\n" +
+                             "    boolean test(Object o) {\n" +
+                             "      return o instanceof String;\n" +
+                             "    }\n" +
+                             "}\n",
+                             "$expr instanceof $type",
+                             new Pair[] {
+                                 new Pair<String, int[]>("$expr", new int[] {76, 77}),
+                                 new Pair<String, int[]>("$type", new int[] {89, 95})
+                             },
+                             new Pair[0],
+                             new Pair[0],
+                             false,
+                             false);
+    }
+
+    public void testInsidePatternMatchingInstanceOf() throws Exception {
+        try {
+            SourceVersion.valueOf("RELEASE_17");
+        } catch (IllegalArgumentException ex) {
+            System.err.println("Skipping testPatternMatchingInstanceOf," +
+                               "as SourceVersion.RELEASE_17 is not available.");
+            return ;
+        }
+        sourceLevel = "17";
+        performVariablesTest("package test;\n" +
+                             "public class Test {\n" +
+                             "    boolean test(Object o) {\n" +
+                             "      return o.toString() instanceof String s;\n" +
+                             "    }\n" +
+                             "}\n",
+                             "$expr.toString()",
+                             new Pair[] {
+                                 new Pair<String, int[]>("$expr", new int[] {76, 77}),
+                             },
+                             new Pair[0],
+                             new Pair[0],
+                             false,
+                             false);
+    }
+
     public void testKeepImplicitThis() throws Exception {
         prepareTest("package test; public class Test { void t() { toString(); } }", -1);
 
@@ -1312,6 +1386,8 @@
 
         TestUtilities.copyStringToFile(data, code);
 
+        SourceUtilsTestUtil.setSourceLevel(data, sourceLevel);
+
         data.refresh();
 
         SourceUtilsTestUtil.prepareTest(sourceRoot, buildRoot, cache);
@@ -1363,6 +1439,7 @@
 
     protected CompilationInfo info;
     private Document doc;
+    private String sourceLevel;
 
     private void performTest(String code) throws Exception {
         performTest(code, true);
diff --git a/java/spring.beans/nbproject/org-netbeans-modules-spring-beans.sig b/java/spring.beans/nbproject/org-netbeans-modules-spring-beans.sig
index 17fa363..951881a 100644
--- a/java/spring.beans/nbproject/org-netbeans-modules-spring-beans.sig
+++ b/java/spring.beans/nbproject/org-netbeans-modules-spring-beans.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57.0
+#Version 1.58.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/spring.beans/src/org/netbeans/modules/spring/beans/completion/SpringXMLConfigCompletionItem.java b/java/spring.beans/src/org/netbeans/modules/spring/beans/completion/SpringXMLConfigCompletionItem.java
index 5678dfc..f4733e2 100644
--- a/java/spring.beans/src/org/netbeans/modules/spring/beans/completion/SpringXMLConfigCompletionItem.java
+++ b/java/spring.beans/src/org/netbeans/modules/spring/beans/completion/SpringXMLConfigCompletionItem.java
@@ -504,7 +504,7 @@
         private static final String METHOD_ST_PROTECTED = "org/netbeans/modules/editor/resources/completion/method_static_protected_16.png"; //NOI18N
         private static final String METHOD_ST_PRIVATE = "org/netbeans/modules/editor/resources/completion/method_static_private_16.png"; //NOI18N
         private static final String METHOD_ST_PACKAGE = "org/netbeans/modules/editor/resources/completion/method_static_package_private_16.png"; //NOI18N
-        private static final String METHOD_COLOR = getHTMLColor(0, 0, 0);; //NOI18N
+        private static final String METHOD_COLOR = getHTMLColor(0, 0, 0); //NOI18N
         private static final String PARAMETER_NAME_COLOR = getHTMLColor(160, 96, 1);
         private static ImageIcon icon[][] = new ImageIcon[2][4];
 
diff --git a/java/spring.beans/src/org/netbeans/modules/spring/beans/wizards/NewSpringXMLConfigWizardIterator.java b/java/spring.beans/src/org/netbeans/modules/spring/beans/wizards/NewSpringXMLConfigWizardIterator.java
index 154bb93..66c14d6 100644
--- a/java/spring.beans/src/org/netbeans/modules/spring/beans/wizards/NewSpringXMLConfigWizardIterator.java
+++ b/java/spring.beans/src/org/netbeans/modules/spring/beans/wizards/NewSpringXMLConfigWizardIterator.java
@@ -321,7 +321,7 @@
     private String[] createSteps() {
         String[] beforeSteps = null;
         Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
 
diff --git a/java/testng.ui/src/org/netbeans/modules/testng/ui/JumpAction.java b/java/testng.ui/src/org/netbeans/modules/testng/ui/JumpAction.java
index 9651192..c329b73 100644
--- a/java/testng.ui/src/org/netbeans/modules/testng/ui/JumpAction.java
+++ b/java/testng.ui/src/org/netbeans/modules/testng/ui/JumpAction.java
@@ -39,7 +39,7 @@
         Node node = getNode();
         if (node instanceof TestNGSuiteNode) {
             TestSuite suite = ((TestNGSuiteNode) node).getSuite();
-            if ((suite != null) && (suite instanceof TestNGTestSuite)) {
+            if (suite instanceof TestNGTestSuite) {
                 return ((TestNGTestSuite) suite).getSuiteFO() != null;
             }
         }
diff --git a/java/testng.ui/src/org/netbeans/modules/testng/ui/TestNGNodeOpener.java b/java/testng.ui/src/org/netbeans/modules/testng/ui/TestNGNodeOpener.java
index 81a04f7..2274018 100644
--- a/java/testng.ui/src/org/netbeans/modules/testng/ui/TestNGNodeOpener.java
+++ b/java/testng.ui/src/org/netbeans/modules/testng/ui/TestNGNodeOpener.java
@@ -59,7 +59,7 @@
 
     public void openTestsuite(TestsuiteNode node) {
         TestSuite suite = node.getSuite();
-        if ((suite != null) && (suite instanceof TestSuite)) {
+        if (suite instanceof TestSuite) {
             final FileObject fo = ((TestNGTestSuite) suite).getSuiteFO();
             if (fo != null) {
                 int[] location = XmlSuiteHandler.getSuiteLocation(fo, suite.getName());
diff --git a/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestSuiteWizardIterator.java b/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestSuiteWizardIterator.java
index 7c65afb..34d8685 100644
--- a/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestSuiteWizardIterator.java
+++ b/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestSuiteWizardIterator.java
@@ -126,7 +126,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty("WizardPanel_contentData"); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestWizardIterator.java b/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestWizardIterator.java
index b60775e..ba8d4f1 100644
--- a/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestWizardIterator.java
+++ b/java/testng.ui/src/org/netbeans/modules/testng/ui/wizards/NewTestWizardIterator.java
@@ -162,7 +162,7 @@
         // Make sure list of steps is accurate.
         String[] beforeSteps = null;
         Object prop = wiz.getProperty("WizardPanel_contentData"); // NOI18N
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/testng/nbproject/org-netbeans-modules-testng.sig b/java/testng/nbproject/org-netbeans-modules-testng.sig
index 08a6c13..4c6f6fe 100644
--- a/java/testng/nbproject/org-netbeans-modules-testng.sig
+++ b/java/testng/nbproject/org-netbeans-modules-testng.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.37
+#Version 2.38
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/websvc.jaxws21/nbproject/org-netbeans-modules-websvc-jaxws21.sig b/java/websvc.jaxws21/nbproject/org-netbeans-modules-websvc-jaxws21.sig
index def3125..33c2749 100644
--- a/java/websvc.jaxws21/nbproject/org-netbeans-modules-websvc-jaxws21.sig
+++ b/java/websvc.jaxws21/nbproject/org-netbeans-modules-websvc-jaxws21.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public abstract com.sun.codemodel.CodeWriter
 cons public init()
diff --git a/java/websvc.jaxws21api/nbproject/org-netbeans-modules-websvc-jaxws21api.sig b/java/websvc.jaxws21api/nbproject/org-netbeans-modules-websvc-jaxws21api.sig
index e617d37..90a6dd5 100644
--- a/java/websvc.jaxws21api/nbproject/org-netbeans-modules-websvc-jaxws21api.sig
+++ b/java/websvc.jaxws21api/nbproject/org-netbeans-modules-websvc-jaxws21api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.49
+#Version 1.50
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/websvc.saas.codegen.java/nbproject/org-netbeans-modules-websvc-saas-codegen-java.sig b/java/websvc.saas.codegen.java/nbproject/org-netbeans-modules-websvc-saas-codegen-java.sig
index 283504e..34acd08 100644
--- a/java/websvc.saas.codegen.java/nbproject/org-netbeans-modules-websvc-saas-codegen-java.sig
+++ b/java/websvc.saas.codegen.java/nbproject/org-netbeans-modules-websvc-saas-codegen-java.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/java/websvc.saas.codegen.java/src/org/netbeans/modules/websvc/saas/codegen/java/SoapClientPojoCodeGenerator.java b/java/websvc.saas.codegen.java/src/org/netbeans/modules/websvc/saas/codegen/java/SoapClientPojoCodeGenerator.java
index f9818a6..70d2bfb 100644
--- a/java/websvc.saas.codegen.java/src/org/netbeans/modules/websvc/saas/codegen/java/SoapClientPojoCodeGenerator.java
+++ b/java/websvc.saas.codegen.java/src/org/netbeans/modules/websvc/saas/codegen/java/SoapClientPojoCodeGenerator.java
@@ -525,7 +525,7 @@
         }
         if ("java.lang.String".equals(type)) {
             //NOI18N
-            if (defaultVal != null && defaultVal instanceof String) {
+            if (defaultVal instanceof String) {
                 return "\"" + (String) defaultVal + "\";";
             }
             return "\"\";"; //NOI18N
diff --git a/java/whitelist/nbproject/org-netbeans-modules-whitelist.sig b/java/whitelist/nbproject/org-netbeans-modules-whitelist.sig
index 665c89b..9f5cdd5 100644
--- a/java/whitelist/nbproject/org-netbeans-modules-whitelist.sig
+++ b/java/whitelist/nbproject/org-netbeans-modules-whitelist.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.40
+#Version 1.41
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/java/whitelist/nbproject/project.properties b/java/whitelist/nbproject/project.properties
index 97e8084..c2291df 100644
--- a/java/whitelist/nbproject/project.properties
+++ b/java/whitelist/nbproject/project.properties
@@ -22,3 +22,6 @@
 requires.nb.javac=true
 
 test.config.stableBTD.includes=**/*Test.class
+
+# for JDK 11+
+test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
diff --git a/java/xml.jaxb/nbproject/org-netbeans-modules-xml-jaxb.sig b/java/xml.jaxb/nbproject/org-netbeans-modules-xml-jaxb.sig
index 9cdf998..21761f5 100644
--- a/java/xml.jaxb/nbproject/org-netbeans-modules-xml-jaxb.sig
+++ b/java/xml.jaxb/nbproject/org-netbeans-modules-xml-jaxb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract interface org.netbeans.modules.xml.jaxb.spi.JAXBWizModuleConstants
 fld public final static java.lang.String CATALOG_FILE = "jaxb.catalog.file"
diff --git a/java/xml.jaxb/src/org/netbeans/modules/xml/jaxb/ui/JAXBWizardIterator.java b/java/xml.jaxb/src/org/netbeans/modules/xml/jaxb/ui/JAXBWizardIterator.java
index eda1153..8052d80 100644
--- a/java/xml.jaxb/src/org/netbeans/modules/xml/jaxb/ui/JAXBWizardIterator.java
+++ b/java/xml.jaxb/src/org/netbeans/modules/xml/jaxb/ui/JAXBWizardIterator.java
@@ -109,7 +109,7 @@
         
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); //NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
@@ -192,7 +192,7 @@
 
         Object prop = wiz.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
         String[] beforeSteps = null;
-        if (prop != null && prop instanceof String[]) {
+        if (prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
         String[] steps = createSteps(beforeSteps, panels);
diff --git a/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/GenerateDOMScannerSupport.java b/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/GenerateDOMScannerSupport.java
index 23d4902..2178bdd 100644
--- a/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/GenerateDOMScannerSupport.java
+++ b/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/GenerateDOMScannerSupport.java
@@ -286,7 +286,7 @@
                                 varTree,
                                 Collections.<ExpressionTree>emptyList(),
                                 sb.toString(),
-                                null );;
+                                null );
                             commentText = "Scan through org.w3c.dom.Element named " + tagName + ".";
                             comment = Comment.create(Comment.Style.JAVADOC, -2, -2, -2, commentText);
                             make.addComment(method, comment, true);
diff --git a/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/SAXGeneratorSupport.java b/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/SAXGeneratorSupport.java
index a43a1ed..fc3cbf3 100644
--- a/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/SAXGeneratorSupport.java
+++ b/java/xml.tools.java/src/org/netbeans/modules/xml/tools/java/generator/SAXGeneratorSupport.java
@@ -504,7 +504,7 @@
                         var = make.Variable(mods, "context", etree, null);
                         varTree.add(var);      
                         type =  workingCopy.getElements().getTypeElement("java.lang.StringBuffer");// NOI18N
-                        etree = make.QualIdent(type);;
+                        etree = make.QualIdent(type);
                         var = make.Variable(mods, "buffer", etree, null);
                         varTree.add(var);
                         type =  workingCopy.getElements().getTypeElement("org.xml.sax.EntityResolver");// NOI18N
diff --git a/javafx/javafx2.editor/nbproject/org-netbeans-modules-javafx2-editor.sig b/javafx/javafx2.editor/nbproject/org-netbeans-modules-javafx2-editor.sig
index 3b27183..2d80fa8 100644
--- a/javafx/javafx2.editor/nbproject/org-netbeans-modules-javafx2-editor.sig
+++ b/javafx/javafx2.editor/nbproject/org-netbeans-modules-javafx2-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.38.0
+#Version 1.39.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/codegen/GeneratorUtils.java b/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/codegen/GeneratorUtils.java
index 6d310a5..ef13243 100644
--- a/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/codegen/GeneratorUtils.java
+++ b/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/codegen/GeneratorUtils.java
@@ -88,7 +88,7 @@
         GuardedDocument gdoc = null;
         try {
             Document doc = wc.getDocument();
-            if (doc != null && doc instanceof GuardedDocument) {
+            if (doc instanceof GuardedDocument) {
                 gdoc = (GuardedDocument)doc;
             }
         } catch (IOException ioe) {}
diff --git a/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/fxml/FxmlSchemaCatalog.java b/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/fxml/FxmlSchemaCatalog.java
index f8b5ed0..84a7f22 100644
--- a/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/fxml/FxmlSchemaCatalog.java
+++ b/javafx/javafx2.editor/src/org/netbeans/modules/javafx2/editor/fxml/FxmlSchemaCatalog.java
@@ -54,7 +54,7 @@
     private Map<String, String> publicIdMap;
     
     public FxmlSchemaCatalog() {
-        Map m = new HashMap<String, String>();
+        Map<String, String> m = new HashMap<>();
         m.put(FXML_INSTANCE_URI, FXML_INSTANCE_LOCAL);
         m.put(FXML_INSTANCE_URI2, FXML_INSTANCE_LOCAL);
         m.put(JavaFXEditorUtils.FXML_FX_NAMESPACE_CURRENT, FXML_INSTANCE_LOCAL);
diff --git a/javafx/javafx2.platform/nbproject/org-netbeans-modules-javafx2-platform.sig b/javafx/javafx2.platform/nbproject/org-netbeans-modules-javafx2-platform.sig
index f242672..c93e4be 100644
--- a/javafx/javafx2.platform/nbproject/org-netbeans-modules-javafx2-platform.sig
+++ b/javafx/javafx2.platform/nbproject/org-netbeans-modules-javafx2-platform.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.43
+#Version 1.44
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/javafx/javafx2.project/nbproject/org-netbeans-modules-javafx2-project.sig b/javafx/javafx2.project/nbproject/org-netbeans-modules-javafx2-project.sig
index 49522e5..4fc9d67 100644
--- a/javafx/javafx2.project/nbproject/org-netbeans-modules-javafx2-project.sig
+++ b/javafx/javafx2.project/nbproject/org-netbeans-modules-javafx2-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/javafx/javafx2.samples/AdvancedMedia/nbproject/project.properties b/javafx/javafx2.samples/AdvancedMedia/nbproject/project.properties
index 24c6010..fc459808 100644
--- a/javafx/javafx2.samples/AdvancedMedia/nbproject/project.properties
+++ b/javafx/javafx2.samples/AdvancedMedia/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/AudioVisualizer3D/nbproject/project.properties b/javafx/javafx2.samples/AudioVisualizer3D/nbproject/project.properties
index f1ee7eb..28e8a62 100644
--- a/javafx/javafx2.samples/AudioVisualizer3D/nbproject/project.properties
+++ b/javafx/javafx2.samples/AudioVisualizer3D/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/BrickBreaker/nbproject/project.properties b/javafx/javafx2.samples/BrickBreaker/nbproject/project.properties
index 4d45bc4..c58321d 100644
--- a/javafx/javafx2.samples/BrickBreaker/nbproject/project.properties
+++ b/javafx/javafx2.samples/BrickBreaker/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChangeListener/nbproject/project.properties b/javafx/javafx2.samples/ChangeListener/nbproject/project.properties
index 76bf92d..6037a92 100644
--- a/javafx/javafx2.samples/ChangeListener/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChangeListener/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedArea/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedArea/nbproject/project.properties
index c537b3d..a8e9791 100644
--- a/javafx/javafx2.samples/ChartAdvancedArea/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedArea/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedBar/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedBar/nbproject/project.properties
index 5434e81..5d1886b 100644
--- a/javafx/javafx2.samples/ChartAdvancedBar/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedBar/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedPie/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedPie/nbproject/project.properties
index 10c3594..2ce7678 100644
--- a/javafx/javafx2.samples/ChartAdvancedPie/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedPie/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedScatter/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedScatter/nbproject/project.properties
index 4ef3a68..7a8aa1e 100644
--- a/javafx/javafx2.samples/ChartAdvancedScatter/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedScatter/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedScatterLive/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedScatterLive/nbproject/project.properties
index 82651f2..0db0c26 100644
--- a/javafx/javafx2.samples/ChartAdvancedScatterLive/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedScatterLive/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAdvancedStockLine/nbproject/project.properties b/javafx/javafx2.samples/ChartAdvancedStockLine/nbproject/project.properties
index 1c1a2e9..a2f44af 100644
--- a/javafx/javafx2.samples/ChartAdvancedStockLine/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAdvancedStockLine/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAudioArea/nbproject/project.properties b/javafx/javafx2.samples/ChartAudioArea/nbproject/project.properties
index 33a4702..78bf1a7 100644
--- a/javafx/javafx2.samples/ChartAudioArea/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAudioArea/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartAudioBar/nbproject/project.properties b/javafx/javafx2.samples/ChartAudioBar/nbproject/project.properties
index e674ffc..f895a78 100644
--- a/javafx/javafx2.samples/ChartAudioBar/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartAudioBar/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ChartLine/nbproject/project.properties b/javafx/javafx2.samples/ChartLine/nbproject/project.properties
index 2415c99..2ff0f44 100644
--- a/javafx/javafx2.samples/ChartLine/nbproject/project.properties
+++ b/javafx/javafx2.samples/ChartLine/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ColorPicker/nbproject/project.properties b/javafx/javafx2.samples/ColorPicker/nbproject/project.properties
index c17b02b..5dc9a38 100644
--- a/javafx/javafx2.samples/ColorPicker/nbproject/project.properties
+++ b/javafx/javafx2.samples/ColorPicker/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/ColorfulCircles/nbproject/project.properties b/javafx/javafx2.samples/ColorfulCircles/nbproject/project.properties
index 9dca206..97f7736 100644
--- a/javafx/javafx2.samples/ColorfulCircles/nbproject/project.properties
+++ b/javafx/javafx2.samples/ColorfulCircles/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/CreateAdvancedStage/nbproject/project.properties b/javafx/javafx2.samples/CreateAdvancedStage/nbproject/project.properties
index 93bf61b..0a9d338 100644
--- a/javafx/javafx2.samples/CreateAdvancedStage/nbproject/project.properties
+++ b/javafx/javafx2.samples/CreateAdvancedStage/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/Cube3D/nbproject/project.properties b/javafx/javafx2.samples/Cube3D/nbproject/project.properties
index 401b27b..998cbee 100644
--- a/javafx/javafx2.samples/Cube3D/nbproject/project.properties
+++ b/javafx/javafx2.samples/Cube3D/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/CubeSystem3D/nbproject/project.properties b/javafx/javafx2.samples/CubeSystem3D/nbproject/project.properties
index f796af2..84911e4 100644
--- a/javafx/javafx2.samples/CubeSystem3D/nbproject/project.properties
+++ b/javafx/javafx2.samples/CubeSystem3D/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/DigitalClock/nbproject/project.properties b/javafx/javafx2.samples/DigitalClock/nbproject/project.properties
index a998038..514263b 100644
--- a/javafx/javafx2.samples/DigitalClock/nbproject/project.properties
+++ b/javafx/javafx2.samples/DigitalClock/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/FXML-LoginDemo/nbproject/project.properties b/javafx/javafx2.samples/FXML-LoginDemo/nbproject/project.properties
index 4cd51eb..561397d 100644
--- a/javafx/javafx2.samples/FXML-LoginDemo/nbproject/project.properties
+++ b/javafx/javafx2.samples/FXML-LoginDemo/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/HTMLEditorApp/nbproject/project.properties b/javafx/javafx2.samples/HTMLEditorApp/nbproject/project.properties
index b940d96..bf2553c 100644
--- a/javafx/javafx2.samples/HTMLEditorApp/nbproject/project.properties
+++ b/javafx/javafx2.samples/HTMLEditorApp/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/KeyStrokeMotion/nbproject/project.properties b/javafx/javafx2.samples/KeyStrokeMotion/nbproject/project.properties
index 4d68e4a..c51823f 100644
--- a/javafx/javafx2.samples/KeyStrokeMotion/nbproject/project.properties
+++ b/javafx/javafx2.samples/KeyStrokeMotion/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/MouseEvents/nbproject/project.properties b/javafx/javafx2.samples/MouseEvents/nbproject/project.properties
index ef7ebe9..16b0af1 100644
--- a/javafx/javafx2.samples/MouseEvents/nbproject/project.properties
+++ b/javafx/javafx2.samples/MouseEvents/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/PaginationDemo/nbproject/project.properties b/javafx/javafx2.samples/PaginationDemo/nbproject/project.properties
index 7a1fde8..ee32b31 100644
--- a/javafx/javafx2.samples/PaginationDemo/nbproject/project.properties
+++ b/javafx/javafx2.samples/PaginationDemo/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/StopWatch/nbproject/project.properties b/javafx/javafx2.samples/StopWatch/nbproject/project.properties
index b870b1e..8b73ca0 100644
--- a/javafx/javafx2.samples/StopWatch/nbproject/project.properties
+++ b/javafx/javafx2.samples/StopWatch/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/SwingInterop/nbproject/project.properties b/javafx/javafx2.samples/SwingInterop/nbproject/project.properties
index 915890b..0a22b5b 100644
--- a/javafx/javafx2.samples/SwingInterop/nbproject/project.properties
+++ b/javafx/javafx2.samples/SwingInterop/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/TimelineEvents/nbproject/project.properties b/javafx/javafx2.samples/TimelineEvents/nbproject/project.properties
index ed94274..76d594d 100644
--- a/javafx/javafx2.samples/TimelineEvents/nbproject/project.properties
+++ b/javafx/javafx2.samples/TimelineEvents/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/TimelineInterpolator/nbproject/project.properties b/javafx/javafx2.samples/TimelineInterpolator/nbproject/project.properties
index 4ab80a8..58b29d6 100644
--- a/javafx/javafx2.samples/TimelineInterpolator/nbproject/project.properties
+++ b/javafx/javafx2.samples/TimelineInterpolator/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/TransitionPath/nbproject/project.properties b/javafx/javafx2.samples/TransitionPath/nbproject/project.properties
index 635fe7a..df42fe8 100644
--- a/javafx/javafx2.samples/TransitionPath/nbproject/project.properties
+++ b/javafx/javafx2.samples/TransitionPath/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/TransitionRotate/nbproject/project.properties b/javafx/javafx2.samples/TransitionRotate/nbproject/project.properties
index 8bb1b17..ad65954 100644
--- a/javafx/javafx2.samples/TransitionRotate/nbproject/project.properties
+++ b/javafx/javafx2.samples/TransitionRotate/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/WebViewBrowser/nbproject/project.properties b/javafx/javafx2.samples/WebViewBrowser/nbproject/project.properties
index 23929f0..bb944a2 100644
--- a/javafx/javafx2.samples/WebViewBrowser/nbproject/project.properties
+++ b/javafx/javafx2.samples/WebViewBrowser/nbproject/project.properties
@@ -58,7 +58,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/javafx/javafx2.samples/nbproject/project.properties b/javafx/javafx2.samples/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/javafx/javafx2.samples/nbproject/project.properties
+++ b/javafx/javafx2.samples/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/nb/autoupdate.pluginimporter/src/org/netbeans/modules/autoupdate/pluginimporter/Bundle.properties b/nb/autoupdate.pluginimporter/src/org/netbeans/modules/autoupdate/pluginimporter/Bundle.properties
index ca02a85..8369750 100644
--- a/nb/autoupdate.pluginimporter/src/org/netbeans/modules/autoupdate/pluginimporter/Bundle.properties
+++ b/nb/autoupdate.pluginimporter/src/org/netbeans/modules/autoupdate/pluginimporter/Bundle.properties
@@ -39,5 +39,13 @@
 PluginImporter.Importing.Plugin=Importing {0}...
 PluginImporter.Importing.RestartNeeded=Restart needed to import plugins. Do you want to restart NetBeans IDE now?
 #Blacklist codeNameBase of dangerous plugins which cannot be imported like: org.dangerous.plugin,com.nextdangerous.module,... etc.
-plugin.import.blacklist=org.netbeans.shortcuts,org.jmarsault.shortcuts
+plugin.import.blacklist=\
+org.netbeans.shortcuts,\
+org.jmarsault.shortcuts,\
+org.netbeans.lib.nbjavac,\
+org.netbeans.modules.nbjavac,\
+org.netbeans.modules.nbjavac.api,\
+org.netbeans.modules.nbjavac.impl,\
+org.netbeans.modules.java.source.nbjavac
+
 apachenetbeanspreviousversion=@@metabuild.apachepreviousversion@@
diff --git a/nb/deadlock.detector/nbproject/project.properties b/nb/deadlock.detector/nbproject/project.properties
index 7c940c4..5137752 100644
--- a/nb/deadlock.detector/nbproject/project.properties
+++ b/nb/deadlock.detector/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/nb/ide.launcher/unix/netbeans b/nb/ide.launcher/unix/netbeans
index b033a37..bf9b842 100644
--- a/nb/ide.launcher/unix/netbeans
+++ b/nb/ide.launcher/unix/netbeans
@@ -206,8 +206,8 @@
         extra_automatic_options=""
 
         # Java/AWT/Swing will correctly detect text anti-aliasing settings on
-        # GNOME, but not on KDE. Force anti-aliasing on in this case using the
-        # "awt.useSystemAAFontSettings" property, as recommended in
+        # GNOME, but not (always) on KDE. Force anti-aliasing on in this case
+        # using the "awt.useSystemAAFontSettings" property, as recommended in
         # https://bugs.openjdk.java.net/browse/JDK-6408759 . Said bug is old,
         # but the relevant logic (in sun.awt.X11.XToolkit.initXSettingsIfNeeded ,
         # and fontpath.c ) seems not to have changed significantly since then.
@@ -222,8 +222,29 @@
         # information."
         # https://userbase.kde.org/KDE_System_Administration/Environment_Variables
         if [ ! -z "$KDE_FULL_SESSION" ] ; then
-            echo "Detected KDE; adding awt.useSystemAAFontSettings=on"
-            extra_automatic_options="-J-Dawt.useSystemAAFontSettings=on"
+            # Try to detect the correct subpixel antialiasing mode
+            # (https://github.com/apache/netbeans/issues/4228)
+
+            # See https://docs.gtk.org/gtk4/property.Settings.gtk-xft-rgba.html
+            # See https://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html#aaFonts
+            case "`command xrdb -query 2> /dev/null | grep Xft.rgba | cut -d ':' -f2 | xargs`" in
+                rgb)
+                    extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_hrgb"
+                    ;;
+                bgr)
+                    extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_hbgr"
+                    ;;
+                vrgb)
+                    extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_vrgb"
+                    ;;
+                vbgr)
+                    extra_automatic_options="-J-Dawt.useSystemAAFontSettings=lcd_vbgr"
+                    ;;
+                *)
+                    extra_automatic_options="-J-Dawt.useSystemAAFontSettings=on"
+                    ;;
+            esac
+            echo "Detected KDE; use explicit setting for font antialiasing ($extra_automatic_options)"
         fi
 
         # Add extra_automatic_options before default_options, to allow system
diff --git a/nb/updatecenters/nbproject/project.properties b/nb/updatecenters/nbproject/project.properties
index b56701d..52d8d55 100644
--- a/nb/updatecenters/nbproject/project.properties
+++ b/nb/updatecenters/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.eager=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 release.build/ide.ks=core/ide.ks
 extra.module.files=core/ide.ks
diff --git a/nb/welcome/nbproject/project.properties b/nb/welcome/nbproject/project.properties
index c1f9e43..66cdde2 100644
--- a/nb/welcome/nbproject/project.properties
+++ b/nb/welcome/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 
 test.config.stableBTD.includes=**/*Test.class
 test.config.stableBTD.excludes=\
diff --git a/nb/welcome/src/org/netbeans/modules/welcome/content/ActionButton.java b/nb/welcome/src/org/netbeans/modules/welcome/content/ActionButton.java
index eb53a51..dad7f07 100644
--- a/nb/welcome/src/org/netbeans/modules/welcome/content/ActionButton.java
+++ b/nb/welcome/src/org/netbeans/modules/welcome/content/ActionButton.java
@@ -40,7 +40,7 @@
         this.action = a;
         this.urlString = urlString;
         Object icon = a.getValue( Action.SMALL_ICON );
-        if( null != icon && icon instanceof Icon )
+        if(icon instanceof Icon)
             setIcon( (Icon)icon );
         Object tooltip = a.getValue( Action.SHORT_DESCRIPTION );
         if( null != tooltip )
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml b/nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml
index 91970b5..9f14935 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml
@@ -53,12 +53,12 @@
             Describe the overall architecture. 
             <hint>
             What will be API for 
-            <a href="http://wiki.netbeans.org/API_Design#Separate_API_for_clients_from_support_API">
+            <a href="https://netbeans.apache.org/wiki/API_Design#Separate_API_for_clients_from_support_API">
                 clients and what support API</a>? 
             What parts will be pluggable?
             How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
             to describe your general APIs and specify their
-            <a href="http://wiki.netbeans.org/API_Stability#Private">
+            <a href="https://netbeans.apache.org/wiki/API_Stability#private">
             stability categories</a>.
             If possible please provide simple diagrams.
             </hint>
@@ -73,7 +73,7 @@
                 at the root of your javadoc
             </hint>
         
-            Describe the main <a href="http://wiki.netbeans.org/API_Design#The_Importance_of_Being_Use_Case_Oriented">
+            Describe the main <a href="https://netbeans.apache.org/wiki/API_Design#The_Importance_of_Being_Use_Case_Oriented">
             use cases</a> of the new API. Who will use it under
             what circumstances? What kind of code would typically need to be written
             to use the module?
@@ -90,7 +90,7 @@
         </question>
         
         <question id="arch-quality" when="init">
-            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
+            How will the <a href="https://netbeans.apache.org/participate/qualityevangelism.html">quality</a>
             of your code be tested and 
             how are future regressions going to be prevented?
             <hint>
@@ -316,7 +316,7 @@
             <hint>
             As this is some kind of intermodule dependency, it is a kind of API.
             Please describe it and classify according to 
-            <a href="http://wiki.netbeans.org/API_Design#What_is_an_API.3F">
+            <a href="https://netbeans.apache.org/wiki/API_Design#What_is_an_API">
             common stability categories</a>.
             </hint>
         </question>
@@ -406,7 +406,7 @@
             <hint>
             If there is a property that can change the behavior of your 
             code, somebody will likely use it. You should describe what it does 
-            and the <a href="http://wiki.netbeans.org/API_Stability">stability category</a>
+            and the <a href="https://netbeans.apache.org/wiki/API_Stability">stability category</a>
             of this API. You may use
             <pre>
                 &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/Arch.xsl b/nbbuild/antsrc/org/netbeans/nbbuild/Arch.xsl
index 6b3b959..131ba44 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/Arch.xsl
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/Arch.xsl
@@ -354,16 +354,16 @@
             <td> <!-- stability category -->
                 <a>
                     <xsl:attribute name="href">
-                        <xsl:text>http://wiki.netbeans.org/API_Stability#</xsl:text>
+                        <xsl:text>https://netbeans.apache.org/wiki/API_Stability#</xsl:text>
                         <xsl:choose>
-                            <xsl:when test="$category='official'">Official</xsl:when>
-                            <xsl:when test="$category='stable'">Stable</xsl:when>
-                            <xsl:when test="$category='devel'">Devel</xsl:when>
-                            <xsl:when test="$category='third'">Third_Party</xsl:when>
-                            <xsl:when test="$category='standard'">Standard</xsl:when>
-                            <xsl:when test="$category='friend'">Friend</xsl:when>
-                            <xsl:when test="$category='private'">Private</xsl:when>
-                            <xsl:when test="$category='deprecated'">Deprecated</xsl:when>
+                            <xsl:when test="$category='official'">official</xsl:when>
+                            <xsl:when test="$category='stable'">stable</xsl:when>
+                            <xsl:when test="$category='devel'">devel</xsl:when>
+                            <xsl:when test="$category='third'">third_party</xsl:when>
+                            <xsl:when test="$category='standard'">standard</xsl:when>
+                            <xsl:when test="$category='friend'">friend</xsl:when>
+                            <xsl:when test="$category='private'">private</xsl:when>
+                            <xsl:when test="$category='deprecated'">deprecated</xsl:when>
                             <xsl:otherwise>
                                 <xsl:message>
                                     WARNING: <xsl:value-of select="$category"/>
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/CheckLinks.java b/nbbuild/antsrc/org/netbeans/nbbuild/CheckLinks.java
index d0bbc40..5b7c766 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/CheckLinks.java
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/CheckLinks.java
@@ -21,8 +21,13 @@
 
 import java.io.*;
 import java.net.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import java.util.regex.*;
 
 import org.apache.tools.ant.BuildException;
@@ -50,6 +55,7 @@
     private List<Mapper> mappers = new LinkedList<>();
     private List<Filter> filters = new ArrayList<>();
     private File report;
+    private File externallinksdump;
 
     /** Set whether to check external links (absolute URLs).
      * Local relative links are always checked.
@@ -91,6 +97,12 @@
     }
 
     /**
+     * Folder where we collect all external links for further inspection
+     */
+    public void setExternallinkslist(File externallinksdump) {
+        this.externallinksdump = externallinksdump;
+    }
+    /**
      * Add a mapper to translate file names to the "originals".
      */
     public Mapper createMapper() {
@@ -132,7 +144,7 @@
         JUnitReportWriter.writeReport(this, null, report, Collections.singletonMap("testBrokenLinks", testMessage));
     }
     
-    private static Pattern hrefOrAnchor = Pattern.compile("<(a|img|link)(\\s+shape=\"rect\")?(?:\\s+rel=\"stylesheet\")?\\s+(href|name|src)=\"([^\"#]*)(#[^\"]+)?\"(\\s+shape=\"rect\")?(?:\\s+type=\"text/css\")?\\s*/?>", Pattern.CASE_INSENSITIVE);
+    private static Pattern hrefOrAnchor = Pattern.compile("<(a|img|link|h3)(\\s+shape=\"rect\")?(?:\\s+rel=\"stylesheet\")?\\s+(href|name|id|src)=\"([^\"#]*)(#[^\"$]+)?\"(\\s+shape=\"rect\")?(?:\\s+type=\"text/css\")?\\s*/?>", Pattern.CASE_INSENSITIVE);
     private static Pattern lineBreak = Pattern.compile("^", Pattern.MULTILINE);
     
     /**
@@ -459,7 +471,7 @@
             while (m.find()) {
                 // Get the stuff involved:
                 String type = m.group(3);
-                if (type.equalsIgnoreCase("name")) {
+                if (type.equalsIgnoreCase("name") || (type.equalsIgnoreCase("id") && !unescape(m.group(4)).startsWith("#"))) {
                     // We have an anchor, therefore refs to it are valid.
                     String name = unescape(m.group(4));
                     if (names.add(name)) {
@@ -633,8 +645,26 @@
                 throw new BuildException ("Each filter must have pattern attribute");
             }
             
-            if (pattern.matcher (u.toString ()).matches ()) {
-                log ("Matched " + u + " accepted: " + accept, org.apache.tools.ant.Project.MSG_VERBOSE);
+            if (pattern.matcher(u.toString()).matches()) {
+                log("Matched " + u + " accepted: " + accept, org.apache.tools.ant.Project.MSG_VERBOSE);
+                if (externallinksdump != null) {
+                    try {
+                        // triage result to file for later processing.
+                        String dumpFileName = accept ? "acceptednetbeans.txt" : "rejectednetbeans.txt";
+
+                        Path dumppath = externallinksdump.toPath().resolve(dumpFileName);
+                        if (Files.notExists(dumppath)) {
+                            Files.createDirectories(dumppath.getParent());
+                            Files.createFile(dumppath);
+                        }
+                        Set<String> sortedEntries = new TreeSet<>(Files.readAllLines(externallinksdump.toPath().resolve(dumpFileName)));
+                        sortedEntries.add(u.toString());
+                        // ordered and unique per Set usage
+                        Files.write(dumppath, sortedEntries, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);
+                    } catch (IOException ex) {
+                        Logger.getLogger(CheckLinks.class.getName()).log(Level.SEVERE, null, ex);
+                    }
+                }
                 return accept;
             }
             return null;
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java b/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java
index 5474644..c2f69cb 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java
@@ -226,12 +226,16 @@
                 continue;
             }
             int i = clazz.indexOf('$');
-            File enclosing = new File(d, clazz.substring(0, i) + ".class");
-            if (!enclosing.isFile()) {
-                File enclosed = new File(d, clazz);
-                log(clazz + " will be deleted since " + enclosing.getName() + " is missing", Project.MSG_VERBOSE);
-                if (!enclosed.delete()) {
-                    throw new BuildException("could not delete " + enclosed, getLocation());
+            // ignore filenames that start right with '$' (separatorChar preceded), these could not be inner classes.
+            if (i > 0 && clazz.charAt(i - 1) != File.separatorChar) {
+                File enclosing = new File(d, clazz.substring(0, i) + ".class");
+                // no inner class' filename may begin directly with '$', it must be preceded by an outer class' name.
+                if (!enclosing.isFile()) {
+                    File enclosed = new File(d, clazz);
+                    log(clazz + " will be deleted since " + enclosing.getName() + " is missing", Project.MSG_VERBOSE);
+                    if (!enclosed.delete()) {
+                        throw new BuildException("could not delete " + enclosed, getLocation());
+                    }
                 }
             }
         }
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/JavadocIndex.java b/nbbuild/antsrc/org/netbeans/nbbuild/JavadocIndex.java
index ae63357..924c6ce 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/JavadocIndex.java
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/JavadocIndex.java
@@ -24,7 +24,6 @@
 import java.util.*;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.regex.*;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
@@ -32,6 +31,12 @@
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.FileSet;
 
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+
 /** Generates a file with index of all files.
  *
  * @author Jaroslav Tulach
@@ -40,7 +45,7 @@
     private File target;
     private FileSet set;
     private Map<String,List<Clazz>> classes = new HashMap<>(101);
-    
+
     /** The file to generate the index to.
      */
     public void setTarget (File f) {
@@ -49,13 +54,14 @@
 
     /** List of indexes to search in.
      */
-    public void addPackagesList(FileSet set) throws BuildException {        
+    public void addPackagesList(FileSet set) throws BuildException {
         if (this.set != null) {
             throw new BuildException ("Package list can be associated only once");
         }
         this.set = set;
     }
-    
+
+    @Override
     public void execute() throws BuildException {
         if (target == null) {
             throw new BuildException ("Target must be set"); // NOI18N
@@ -63,7 +69,7 @@
         if (set == null) {
             throw new BuildException ("Set of files must be provided: " + set); // NOI18N
         }
-        
+
         DirectoryScanner scan =  set.getDirectoryScanner(this.getProject());
         File bdir = scan.getBasedir();
         for (String n : scan.getIncludedFiles()) {
@@ -85,90 +91,72 @@
         } catch (IOException ex) {
             throw new BuildException (ex);
         }
-    }    
+    }
 
-    
-    
+
+
     /** Stores parsed info in classes variable */
     private void parseForClasses (File f) throws BuildException {
         log ("Parsing file: " + f, Project.MSG_DEBUG);
         try {
-            BufferedReader is = new BufferedReader (new FileReader (f));
-            
-            
             String urlPrefix;
             try {
                 String fullDir = f.getParentFile ().getCanonicalPath ();
                 String fullTgz = target.getParentFile ().getCanonicalPath ();
-                
+
                 if (!fullDir.startsWith (fullTgz)) {
                     throw new BuildException ("The directory of target file must be above all parsed files. Directory: " + fullTgz + " the file dir: " + fullDir);
                 }
-                
+
                 urlPrefix = fullDir.substring (fullTgz.length () + 1);
             } catch (IOException ex) {
                 throw new BuildException (ex);
             }
-            
-            // parse following string
-            // <A HREF="org/openide/xml/XMLUtil.html" title="class in org.openide.xml">XMLUtil</A
-            String mask = ".*<A HREF=\"([^\"]*)\" title=\"(class|interface|annotation) in ([^\"]*)\"[><I]*>([\\p{Alnum}\\.]*)</.*A>.*";
-            Pattern p = Pattern.compile (mask, Pattern.CASE_INSENSITIVE);
-            // group 1: relative URL to a class or interface
-            // group 2: interface, class or annotation string
-            // group 3: name of package
-            // group 4: name of class
-            
+
+            Document doc = Jsoup.parse(f, "UTF-8", "");
+            Elements ul = doc.getElementsByTag("ul");
+            // should be only one list
+            if (ul.size() != 1) {
+                throw new BuildException("File is not valid for parsing classes : " + f);
+            }
             int matches = 0;
-            for (;;) {
-                String line = is.readLine ();
-                if (line == null) break;
-                
-                Matcher m = p.matcher (line);
-                if (m.matches ()) {
+            for (Element li : ul.first().getElementsByTag("li")) {
+                // class Name is the only text in all the tag
+                String className = li.text();
+                // we need anchor to get the inforation
+                Element anchor = li.getElementsByTag("a").first();
+                // left of title is type of element (interface,annotation,class,enum ....)
+                // right of title is package of element
+                String[] title = anchor.attr("title").split(" in ");
+                if (title.length == 2) {
                     matches++;
-                    log ("Accepted line: " + line, Project.MSG_DEBUG);
-                    
-                    if (m.groupCount () != 4) {
-                        StringBuffer sb = new StringBuffer ();
-                        sb.append ("Line " + line + " has " + m.groupCount () + " groups and not four");
-                        for (int i = 0; i <= m.groupCount (); i++) {
-                            sb.append ("\n  " + i + " grp: " + m.group (i));
-                        }
-                        throw new BuildException (sb.toString ());
-                    }
-                   
-                    Clazz c = new Clazz (
-                        m.group (3),
-                        m.group (4),
-                        "interface".equals (m.group (2)),
-                        urlPrefix + "/" + m.group (1)
+                    Clazz c = new Clazz(
+                            title[1].trim(),
+                            className,
+                            "interface".equals(title[0].trim()),
+                            urlPrefix + "/" + anchor.attr("href")
                     );
-                    if (c.name == null) throw new NullPointerException ("Null name for " + line + "\nclass: " + c);
-                    if (c.name.length () == 0) throw new IllegalStateException ("Empty name for " + line + "\nclass: " + c);
-                    
-                    log ("Adding class: " + c, Project.MSG_DEBUG);
-                    
+                    if (c.name.isEmpty()) {
+                        throw new IllegalStateException("Empty name for " + li.html() + "\nclass: " + c);
+                    }
+                    log("Adding class: " + c, Project.MSG_DEBUG);
                     List<Clazz> l = classes.get(c.pkg);
                     if (l == null) {
                         l = new ArrayList<>();
                         classes.put (c.pkg, l);
                     }
                     l.add (c);
-                } else {
-                    log ("Refused line: " + line, Project.MSG_DEBUG);
                 }
             }
-            
             if (matches == 0) {
                 throw new BuildException ("No classes defined in file: " + f);
             }
-            
+
         } catch (java.io.IOException ex) {
             throw new BuildException (ex);
         }
     }
-    
+
     private void printClassesAsHtml (PrintStream ps) {
         ps.println ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
         ps.println ("<HTML>\n<HEAD><TITLE>List of All Classes</TITLE></HEAD>");
@@ -212,7 +200,7 @@
         }
         ps.println ("</classes>");
     }
-    
+
     /** An information about one class in api */
     private static final class Clazz extends Object implements Comparable<Clazz> {
         public final String pkg;
@@ -225,12 +213,14 @@
             this.isInterface = isInterface;
             this.url = url;
         }
-        
+
         /** Compares based on class names */
+        @Override
         public int compareTo(Clazz o) {
             return name.compareTo(o.name);
         }
 
+        @Override
         public String toString () {
             return "PKG: " + pkg + " NAME: " + name + " INTERFACE: " + isInterface + " url: " + url;
         }
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
index 07ff8af..c89db0c 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
@@ -29,8 +29,6 @@
 # It happens that maven 3.3.9 uses commons-lang-2.6.jar, same as o.apache.commons.lang
 # and commons-io-2.5.jar, same as java.lsp.server
 # These are used independently, different functional goals
-# maven 3.8.6 use common-io-2.6 java/java.lsp.server/external/commons-io-2.5.jar java/maven.embedder/external/apache-maven-3.6.3-bin.zip
-platform/o.apache.commons.io/external/commons-io-2.6.jar java/maven.embedder/external/apache-maven-3.8.6-bin.zip
 
 # Contains test data (badPackageFileInJar.jar is packaged twice) - this is an
 # upstream problem
@@ -46,9 +44,9 @@
 enterprise/javaee.api/external/javax.annotation-api-1.2.jar java/maven.indexer/external/javax.annotation-api-1.2.jar
 enterprise/javaee7.api/external/javax.annotation-api-1.2.jar enterprise/javaee8.api/external/javax.annotation-api-1.2.jar
 enterprise/javaee8.api/external/javax.annotation-api-1.2.jar java/maven.indexer/external/javax.annotation-api-1.2.jar
-enterprise/javaee8.api/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.6-bin.zip
-enterprise/javaee7.api/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.6-bin.zip
-java/maven.indexer/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.6-bin.zip
+enterprise/javaee8.api/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.7-bin.zip
+enterprise/javaee7.api/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.7-bin.zip
+java/maven.indexer/external/javax.annotation-api-1.2.jar java/maven.embedder/external/apache-maven-3.8.7-bin.zip
 
 
 # jaxb-api-osgi is used by multiple modules.
@@ -70,21 +68,21 @@
 extide/gradle/external/gradle-7.4-bin.zip enterprise/libs.amazon/external/ion-java-1.0.2.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/c.jcraft.jsch/external/jsch-0.1.55.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/c.jcraft.jzlib/external/jzlib-1.1.3.jar
-extide/gradle/external/gradle-7.4-bin.zip ide/libs.antlr4.runtime/external/antlr4-runtime-4.7.2.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/libs.commons_compress/external/commons-compress-1.21.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/libs.tomlj/external/tomlj-1.0.0.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/o.apache.commons.lang/external/commons-lang-2.6.jar
 extide/gradle/external/gradle-7.4-bin.zip ide/o.eclipse.jgit/external/org.eclipse.jgit-5.7.0.202003110725-r.jar
-extide/gradle/external/gradle-7.4-bin.zip java/maven.embedder/external/apache-maven-3.8.6-bin.zip
+extide/gradle/external/gradle-7.4-bin.zip java/debugger.jpda.truffle/external/antlr4-runtime-4.7.2.jar
+extide/gradle/external/gradle-7.4-bin.zip java/maven.embedder/external/apache-maven-3.8.7-bin.zip
 extide/gradle/external/gradle-7.4-bin.zip platform/libs.junit4/external/hamcrest-core-1.3.jar
 extide/gradle/external/gradle-7.4-bin.zip platform/libs.junit4/external/junit-4.13.2.jar
 extide/gradle/external/gradle-7.4-bin.zip platform/libs.testng/external/jcommander-1.78.jar
 extide/gradle/external/gradle-7.4-bin.zip platform/o.apache.commons.io/external/commons-io-2.6.jar
 extide/gradle/external/gradle-7.4-bin.zip enterprise/cloud.oracle/external/jsr305-3.0.2.jar
 extide/gradle/external/gradle-7.4-bin.zip platform/o.apache.commons.codec/external/commons-codec-1.15.jar
-extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-9.3.jar
-extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-commons-9.3.jar
-extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-tree-9.3.jar
+extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-9.4.jar
+extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-commons-9.4.jar
+extide/gradle/external/gradle-7.4-bin.zip platform/libs.asm/external/asm-tree-9.4.jar
 extide/gradle/external/gradle-7.4-bin.zip platform/libs.batik.read/external/xml-apis-1.4.01.jar
 
 # These are the endorsed version of the javaee apis and create libraries, so they are better kept separate
@@ -105,9 +103,6 @@
 ide/db/external/derby-10.14.2.0.jar ide/db.metadata.model/external/derby-10.14.2.0.jar
 ide/derby/external/derby-10.14.2.0.jar ide/db.metadata.model/external/derby-10.14.2.0.jar
 
-# Antlr4 is used internally in two unrelated modules:
-ide/libs.antlr4.runtime/external/antlr4-runtime-4.7.2.jar java/debugger.jpda.truffle/external/antlr4-runtime-4.7.2.jar
-
 # Only used as testdata (not redistributed) and modules should be testable independed of each other
 webcommon/javascript2.doc/external/testfiles-jsdoc-1.zip webcommon/javascript2.editor/external/testfiles-jsdoc-1.zip are identical
 webcommon/javascript2.editor/external/testfiles-jsdoc-1.zip webcommon/javascript2.extdoc/external/testfiles-jsdoc-1.zip are identical
@@ -118,8 +113,11 @@
 harness/apisupport.harness/external/launcher-12.5-distribution.zip platform/o.n.bootstrap/external/launcher-12.5-distribution.zip
 
 # only one is part of the product:
-java/libs.javacapi/external/nb-javac-jdk-19+33-api.jar java/libs.nbjavacapi/external/nb-javac-jdk-19+33-api.jar
-java/libs.javacapi/external/nb-javac-jdk-19+33.jar java/libs.nbjavacapi/external/nb-javac-jdk-19+33.jar
+java/libs.javacapi/external/nb-javac-jdk-19.0.1-ga-api.jar java/libs.nbjavacapi/external/nb-javac-jdk-19.0.1-ga-api.jar
+java/libs.javacapi/external/nb-javac-jdk-19.0.1-ga.jar java/libs.nbjavacapi/external/nb-javac-jdk-19.0.1-ga.jar
 
 # Maven and Gradle are self-contained distributions - ignoring overlaps
-platform/o.apache.commons.lang3/external/commons-lang3-3.8.1.jar java/maven.embedder/external/apache-maven-3.8.6-bin.zip
+platform/o.apache.commons.lang3/external/commons-lang3-3.8.1.jar java/maven.embedder/external/apache-maven-3.8.7-bin.zip
+
+# Used only in unittests for mysql db specific tests
+ide/db.metadata.model/external/mysql-connector-j-8.0.31.jar ide/db.mysql/external/mysql-connector-j-8.0.31.jar
diff --git a/nbbuild/build.properties b/nbbuild/build.properties
index 08dab86..743fc7e 100644
--- a/nbbuild/build.properties
+++ b/nbbuild/build.properties
@@ -73,6 +73,7 @@
 
 # List of modules that provide stable javadoc
 config.javadoc.stable=\
+    ${config.javadoc.forwarded.all},\
     api.annotations.common,\
     api.htmlui,\
     api.intent,\
@@ -87,7 +88,6 @@
     autoupdate.ui,\
     core.ide,\
     core.multiview,\
-    openide.util,\
     openide.util.lookup,\
     openide.util.ui,\
     openide.actions,\
@@ -143,7 +143,6 @@
     java.platform.ui,\
     java.project,\
     java.project.ui,\
-    java.source,\
     java.source.base,\
     java.sourceui,\
     editor.fold,\
@@ -152,30 +151,38 @@
     api.xml,\
     o.apache.tools.ant.module,\
     db,\
-    db.core,\
     spi.quicksearch,\
     print,\
     extexecution,\
-    lib.uihandler,\
-    uihandler
+    extexecution.base
 
 #FIXME: changes for retouche merge:
 #   editor/codetemplates,\
 
+config.javadoc.forwarded.all=\
+    ${config.javadoc.forwarded.devel},\
+    ${config.javadoc.forwarded.friend},\
+    ${config.javadoc.forwarded.deprecated}
+
+# List of javadocs under development quoted on stable javadoc
+config.javadoc.forwarded.devel=\
+    openide.util,\
+    editor.indent,\
+    editor.bracesmatching,\
+    editor.lib,\
+    editor,\
+    lib.uihandler,\
+    uihandler,\
+    spi.editor.hints
+
 # List of javadocs under development
 config.javadoc.devel=\
-    nbjunit,\
-    jellytools.platform,\
-    jellytools.ide,\
+    junit,\
     core.multitabs,\
     core.netigso,\
     gradle,\
     gradle.java,\
     o.n.swing.outline,\
-    o.n.swing.tabcontrol,\
-    editor.indent,\
-    editor.indent.support,\
-    editor.bracesmatching,\
     j2ee.metadata,\
     jumpto,\
     libs.git,\
@@ -186,15 +193,26 @@
     versioning,\
     bugtracking,\
     sampler,\
-    spi.editor.hints,\
     spi.java.hints,\
     java.hints.test,\
     api.web.webmodule,\
     xml.xam,\
     xml.xdm
 
+# List of javadocs dedicated just for friend usage quoted on stable javadoc
+config.javadoc.forwarded.friend=\
+    editor.util,\
+    editor.indent.support,\
+    db.core,\
+    java.source,\
+    maven
+
 # List of javadocs dedicated just for friend usage
 config.javadoc.friend=\
+    nbjunit,\
+    jellytools.platform,\
+    jellytools.ide,\
+    jellytools.java,\
     o.n.bootstrap,\
     o.n.core,\
     core.network,\
@@ -202,28 +220,31 @@
     core.startup,\
     classfile,\
     o.n.swing.plaf,\
-    editor.util,\
     editor.settings.storage,\
-    editor.lib,\
-    editor,\
     j2ee.dd,\
     j2eeserver,\
     java.api.common,\
     java.j2seproject,\
-    junit,\
     lib.v8debug,\
     nativeimage.api,\
     versioning.core,\
     masterfs,\
     masterfs.ui,\
-    projectui
+    projectui,\
+    o.n.swing.tabcontrol,\
+    xml.wsdl.model
+    
+
+# List of javadocs dedicated just for deprecated usage quoted on stable javadoc
+config.javadoc.forwarded.deprecated=\
+   o.openidex.util
 
 # List of old and deprecated APIs for building complete javadoc
-
 config.javadoc.deprecated=\
-    openide.compat,\
-    openide.options,\
-    o.openidex.util
+    openide.options
+
+#deprecated not linked
+# openide.compat,\
 
 # List of all javadocs for development version
 # is composed from the javadocs split by stability
diff --git a/nbbuild/build.xml b/nbbuild/build.xml
index 5447200..1243bdd 100644
--- a/nbbuild/build.xml
+++ b/nbbuild/build.xml
@@ -95,6 +95,8 @@
         <include name="platform/javahelp/external/jhall*.jar"/>
         <!-- For json parsing -->
         <include name="nbbuild/external/json-simple*.jar"/>
+        <!-- For parsing some web : -->
+        <include name="nbbuild/external/jsoup*.jar"/>
       </fileset>
     </path>
     <javac srcdir="antsrc" destdir="${build.ant.classes.dir}" deprecation="true" debug="${build.compiler.debug}" source="1.8" target="1.8">
@@ -324,6 +326,7 @@
           <buildpath path="${modules.sorted}"/>
           <property name="base.nbm.target.dir" value="${base.nbm.target.dir}"/>
           <property name="nbm.always.create" value="true" />
+          <property name="buildnumber" value="${buildnumber}" />
       </subant-junit>
   </target>
 
@@ -334,6 +337,7 @@
       <subant-junit target="nbm-nosignature" failonerror="${nbms.fail.on.error}" report="${nb.build.dir}/build-nbms.xml" inheritall="false">
           <buildpath path="${modules.sorted}"/>
           <property name="base.nbm.target.dir" value="${base.nbm.target.dir}"/>
+          <property name="buildnumber" value="${buildnumber}" />
       </subant-junit>
   </target>
 
diff --git a/nbbuild/cluster.properties b/nbbuild/cluster.properties
index c5164b6..4fe13ec 100644
--- a/nbbuild/cluster.properties
+++ b/nbbuild/cluster.properties
@@ -399,6 +399,7 @@
         extexecution.process,\
         extexecution.process.jdk9,\
         git,\
+        go.lang,\
         gototest,\
         gsf.codecoverage,\
         gsf.testrunner,\
@@ -430,6 +431,7 @@
         languages.toml,\
         languages.yaml,\
         lexer,\
+        lexer.antlr4,\
         lexer.nbbridge,\
         lib.terminalemulator,\
         libs.antlr3.runtime,\
diff --git a/nbbuild/external/binaries-list b/nbbuild/external/binaries-list
index 175b394..b4d662a 100644
--- a/nbbuild/external/binaries-list
+++ b/nbbuild/external/binaries-list
@@ -19,3 +19,4 @@
 B8A142EBDE0CDC071A347B2E93C8548C2A5D09B0 org.netbeans.tools:sigtest-maven-plugin:1.4
 C9AD4A0850AB676C5C64461A05CA524CDFFF59F1 com.googlecode.json-simple:json-simple:1.1.1
 3A4E4ECCF553036BB0DDBA675486D574B62A01D8 org.apache.netbeans.modules.jackpot30:tool:12.3
+F6E1D8A8819F854B681C8EAA57FD59A42329E10C org.jsoup:jsoup:1.15.3
diff --git a/nbbuild/external/jsoup-1.15.3-license.txt b/nbbuild/external/jsoup-1.15.3-license.txt
new file mode 100644
index 0000000..9a232b6
--- /dev/null
+++ b/nbbuild/external/jsoup-1.15.3-license.txt
@@ -0,0 +1,27 @@
+Name: jsoup
+Version: 1.15.3
+License: MIT-jsoup22
+Description: jsoup library
+Origin: https://github.com/jhy/jsoup
+
+The MIT License
+
+Copyright (c) 2009-2022 Jonathan Hedley <jonathan@hedley.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/nbbuild/installer/components/products/jdk/nbproject/project.properties b/nbbuild/installer/components/products/jdk/nbproject/project.properties
index a37bada..e99eee1 100644
--- a/nbbuild/installer/components/products/jdk/nbproject/project.properties
+++ b/nbbuild/installer/components/products/jdk/nbproject/project.properties
@@ -54,7 +54,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/jdk/src/org/netbeans/installer/products/jdk/wizard/panels/JDKPanel.java b/nbbuild/installer/components/products/jdk/src/org/netbeans/installer/products/jdk/wizard/panels/JDKPanel.java
index d264771..94b4ca8 100644
--- a/nbbuild/installer/components/products/jdk/src/org/netbeans/installer/products/jdk/wizard/panels/JDKPanel.java
+++ b/nbbuild/installer/components/products/jdk/src/org/netbeans/installer/products/jdk/wizard/panels/JDKPanel.java
@@ -64,7 +64,7 @@
         // add jdk.getInstallationLocation() to the all java list so that 
         // in silent installation this location is initialized and used by default        
         final Object objectContext = getWizard().getContext().get(Product.class);
-        if (objectContext != null && objectContext instanceof Product) {
+        if (objectContext instanceof Product) {
             Product jdk = (Product) objectContext;
             SearchForJavaAction.addJavaLocation(
                     jdk.getInstallationLocation(),
@@ -146,7 +146,7 @@
         
         private static Product getBundledJDK(JDKPanel panel) {
             final Object objectContext = panel.getWizard().getContext().get(Product.class);
-            if(objectContext != null && objectContext instanceof Product) {
+            if(objectContext instanceof Product) {
                 return  (Product) objectContext;                
             }
             return null;
diff --git a/nbbuild/installer/components/products/nb-all/nbproject/project.properties b/nbbuild/installer/components/products/nb-all/nbproject/project.properties
index abf8a84..d3ce99b 100644
--- a/nbbuild/installer/components/products/nb-all/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-all/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-cnd/nbproject/project.properties b/nbbuild/installer/components/products/nb-cnd/nbproject/project.properties
index 145c26c..72b81b9 100644
--- a/nbbuild/installer/components/products/nb-cnd/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-cnd/nbproject/project.properties
@@ -42,7 +42,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-extide/nbproject/project.properties b/nbbuild/installer/components/products/nb-extide/nbproject/project.properties
index 3dc44b8..092d73d 100644
--- a/nbbuild/installer/components/products/nb-extide/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-extide/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-javaee/nbproject/project.properties b/nbbuild/installer/components/products/nb-javaee/nbproject/project.properties
index 90335a1..e1a439f 100644
--- a/nbbuild/installer/components/products/nb-javaee/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-javaee/nbproject/project.properties
@@ -43,7 +43,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-javase/nbproject/project.properties b/nbbuild/installer/components/products/nb-javase/nbproject/project.properties
index 391798a..a624469 100644
--- a/nbbuild/installer/components/products/nb-javase/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-javase/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-php/nbproject/project.properties b/nbbuild/installer/components/products/nb-php/nbproject/project.properties
index 1407ce5..72b81b9 100644
--- a/nbbuild/installer/components/products/nb-php/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-php/nbproject/project.properties
@@ -42,7 +42,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/components/products/nb-webcommon/nbproject/project.properties b/nbbuild/installer/components/products/nb-webcommon/nbproject/project.properties
index fc5040f..28aa938 100644
--- a/nbbuild/installer/components/products/nb-webcommon/nbproject/project.properties
+++ b/nbbuild/installer/components/products/nb-webcommon/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/engine/nbproject/project.properties b/nbbuild/installer/engine/nbproject/project.properties
index 1441b49..bbe8769 100644
--- a/nbbuild/installer/engine/nbproject/project.properties
+++ b/nbbuild/installer/engine/nbproject/project.properties
@@ -60,7 +60,7 @@
 javac.processormodulepath=
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/installer/engine/src/org/netbeans/installer/wizard/components/panels/netbeans/NbPreInstallSummaryPanel.java b/nbbuild/installer/engine/src/org/netbeans/installer/wizard/components/panels/netbeans/NbPreInstallSummaryPanel.java
index 6d74453..04c4a11 100644
--- a/nbbuild/installer/engine/src/org/netbeans/installer/wizard/components/panels/netbeans/NbPreInstallSummaryPanel.java
+++ b/nbbuild/installer/engine/src/org/netbeans/installer/wizard/components/panels/netbeans/NbPreInstallSummaryPanel.java
@@ -458,13 +458,11 @@
             
             installationSizeLabel.setText(
                     panel.getProperty(INSTALLATION_SIZE_PROPERTY));
-            installationSizeValue.setText(StringUtils.formatSize(
-                    installationSize));
+            installationSizeValue.setText(StringUtils.formatSize(installationSize));
             
             downloadSizeLabel.setText(
                     panel.getProperty(DOWNLOAD_SIZE_PROPERTY));
-            downloadSizeValue.setText(StringUtils.formatSize(
-                    downloadSize));
+            downloadSizeValue.setText(StringUtils.formatSize(downloadSize));
             
             if (registry.getProductsToInstall().isEmpty()) {
                 locationsPane.setVisible(false);
diff --git a/nbbuild/installer/infra/nbi-autoupdate/provider/nbproject/project.properties b/nbbuild/installer/infra/nbi-autoupdate/provider/nbproject/project.properties
index 6d4b7f2..6962573 100644
--- a/nbbuild/installer/infra/nbi-autoupdate/provider/nbproject/project.properties
+++ b/nbbuild/installer/infra/nbi-autoupdate/provider/nbproject/project.properties
@@ -16,6 +16,6 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-javac.source=1.5
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 nbm.module.author=Name
diff --git a/nbbuild/installer/test/nbproject/project.properties b/nbbuild/installer/test/nbproject/project.properties
index 0acce27..b823879 100644
--- a/nbbuild/installer/test/nbproject/project.properties
+++ b/nbbuild/installer/test/nbproject/project.properties
@@ -53,7 +53,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbbuild/javadoctools/apichanges.xsl b/nbbuild/javadoctools/apichanges.xsl
index 4c6be16..e12c520 100644
--- a/nbbuild/javadoctools/apichanges.xsl
+++ b/nbbuild/javadoctools/apichanges.xsl
@@ -304,7 +304,7 @@
             <br/><strong>Compatibility: </strong> <xsl:apply-templates select="compatibility/node()"/>
         </xsl:if>
         <xsl:if test="compatibility/@source = 'incompatible' and compatibility/@binary = 'compatible'">
-            <br/><em><a href="http://wiki.netbeans.org/VersioningPolicy#Compatible_change_on_the_trunk">Binary-compatible</a></em>
+            <br/><em><a href="https://netbeans.apache.org/wiki/VersioningPolicy#Compatible_change_on_the_trunk">Binary-compatible</a></em>
         </xsl:if>
     </xsl:template>
 
diff --git a/nbbuild/javadoctools/build.xml b/nbbuild/javadoctools/build.xml
index fe678a7..3397691 100644
--- a/nbbuild/javadoctools/build.xml
+++ b/nbbuild/javadoctools/build.xml
@@ -33,12 +33,12 @@
     <target name="build-javadoc" depends="-jdk-init,-load-build-properties,init-tasks,set-buildnumber" description="Builds Javadoc documentation for modules; on branches pass e.g. -Djavadoc.web.root=http://bits.netbeans.org/6.7/javadoc">
         <resolvelist name="allmodules" path="modules.fullpath" dir="${nb_all}" list="${nb.clusters.list}" modules="${config.javadoc.all}"/>
         <sortsuitemodules unsortedmodules="${modules.fullpath}" sortedmodulesproperty="modules.sorted"/>
-        
+
         <property name="export.interfaces" location="${netbeans.javadoc.dir}/../ModulesExportedInterfaces"/>
         <property name="export.apichanges" location="${netbeans.javadoc.dir}/../APIChanges"/>
         <mkdir dir="${export.interfaces}"/>
         <mkdir dir="${export.apichanges}"/>
-        
+
         <property name="javadoc.fail.on.error" value="true"/>
         <subant-junit target="javadoc" failonerror="${javadoc.fail.on.error}" report="${nb_all}/nbbuild/build/build-all-javadoc.xml">
             <buildpath path="${modules.sorted}"/>
@@ -80,43 +80,50 @@
             </zipfileset>
         </zip>
     </target>
-    
+
     <target name="generate-xml" depends="init">
         <echo file="${export.apichanges}/header.gen">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
             &lt;changes&gt;
         </echo>
-        
+
         <echo file="${export.apichanges}/footer.gen">
             &lt;/changes&gt;
         </echo>
-        
+
         <concat destfile="${netbeans.javadoc.dir}/apichanges.xml">
             <fileset dir="${export.apichanges}" includes="header.gen"/>
             <fileset dir="${export.apichanges}" includes="*" excludes="*.gen"/>
             <fileset dir="${export.apichanges}" includes="footer.gen"/>
         </concat>
-        
+
         <echo file="${export.interfaces}/header.gen">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
             &lt;apis&gt;
         </echo>
-        
+
         <echo file="${export.interfaces}/footer.gen">
             &lt;/apis&gt;
         </echo>
-        
+
         <concat destfile="${netbeans.javadoc.dir}/modules.xml">
             <fileset dir="${export.interfaces}" includes="header.gen"/>
             <fileset dir="${export.interfaces}" includes="*" excludes="*.gen"/>
             <fileset dir="${export.interfaces}" includes="footer.gen"/>
         </concat>
-        
-        <taskdef name="javadoc-index" classname="org.netbeans.nbbuild.JavadocIndex" classpath="${nbantext.jar}"/>
+
+        <taskdef name="javadoc-index" classname="org.netbeans.nbbuild.JavadocIndex">
+            <classpath>
+                <pathelement location="${nbantext.jar}"/>
+                <fileset dir="${nb_all}/nbbuild/external">
+                    <include name="jsoup*.jar"/>
+                </fileset>
+            </classpath>
+        </taskdef>
         <javadoc-index target="${netbeans.javadoc.dir}/allclasses.xml">
             <packageslist dir="${netbeans.javadoc.dir}">
                 <include name="**/allclasses-noframe.html"/>
             </packageslist>
         </javadoc-index>
-        
+
         <!-- we concat all xml into one big xml file alldatas.xml -->
         <echo file="${export.interfaces}/header.gen">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
             &lt;alldata&gt;
@@ -135,10 +142,10 @@
                 <linecontainsregexp negate="true">
                     <regexp pattern="&lt;\?xml version"/>
                 </linecontainsregexp>
-            </filterchain>  
+            </filterchain>
         </concat>
     </target>
-    
+
     <target name="generate-html" depends="init">
         <!-- reformulate dev version from json to more human version -->
         <condition property="json.uversion" value="${json.version}" else="Development Version">
@@ -152,7 +159,7 @@
             <param name="version" expression="${json.uversion}" />
             <param name="releaseinfo" expression="${xmlrelease}" />
         </style>
-        
+
         <style in="${netbeans.javadoc.dir}/alldatas.xml" out="${netbeans.javadoc.dir}/apichanges.html" style="export2apichanges.xsl">
             <param name="date" expression="${modules-javadoc-date}"/>
             <param name="changes-since-year" expression="${previous.release.year}"/>
@@ -180,7 +187,7 @@
         <condition property="javadoc.style.sheet.exists">
             <available file="${netbeans.javadoc.dir}/org-openide-util/javadoc.css"/>
         </condition>
-        
+
         <fail unless="javadoc.style.sheet.exists">
             The org-openide-util/javadoc.css has to exist as we are referring to
             it from master module Javadoc pages. If it does not anymore, update
@@ -188,18 +195,18 @@
         </fail>
 <!--
         <style in="${netbeans.javadoc.dir}/allclasses.xml" out="${netbeans.javadoc.dir}/allclasses-frame.html" style="export2allclasses.xsl"/>
-        
+
         <style in="${netbeans.javadoc.dir}/modules.xml" out="${netbeans.javadoc.dir}/overview-frame.html" style="export2allmodules.xsl">
             <param name="date" expression="${modules-javadoc-date}"/>
         </style>
--->        
+-->
         <style in="${netbeans.javadoc.dir}/alldatas.xml" out="${netbeans.javadoc.dir}/layers.html" style="export2layer.xsl">
             <param name="date" expression="${modules-javadoc-date}"/>
             <param name="maturity" expression="${json.maturity}" />
             <param name="version" expression="${json.uversion}" />
             <param name="releaseinfo" expression="${xmlrelease}" />
         </style>
-        
+
         <style in="${netbeans.javadoc.dir}/alldatas.xml" out="${netbeans.javadoc.dir}/properties.html" style="export2property.xsl">
             <param name="date" expression="${modules-javadoc-date}"/>
              <param name="maturity" expression="${json.maturity}" />
@@ -213,8 +220,8 @@
             <param name="version" expression="${json.uversion}" />
             <param name="releaseinfo" expression="${xmlrelease}" />
         </style>
-        
-        <!-- at the end generate the index.html so people know where to start -->      
+
+        <!-- at the end generate the index.html so people know where to start -->
         <style in="${netbeans.javadoc.dir}/alldatas.xml" out="${netbeans.javadoc.dir}/index.html" style="export2index.xsl">
             <param name="date" expression="${modules-javadoc-date}"/>
             <param name="maturity" expression="${json.maturity}" />
@@ -226,23 +233,29 @@
         <replace dir="${netbeans.javadoc.dir}">
             <include name="*.html"/>
             <replacefilter token="@JDK@" value="${javaapidocurl}"/>
-            &replaces;   
+            &replaces;
             <replacefilter token="http://root/" value="."/>
             <replacefilter token="$${javadoc.web.root}" value="."/>
         </replace>
-        
+
         <echo message="Javadoc index has been generated to ${netbeans.javadoc.dir}/index.html"/>
     </target>
-    
+
     <target name="check-broken-links" depends="init" unless="javadoc.skip.brokenlinks.check">
         <taskdef name="checklinks" classname="org.netbeans.nbbuild.CheckLinks" classpath="${nbantext.jar}"/>
         <property name="javadoc.check.forbidden.links" value="true"/>
-        <checklinks basedir="${netbeans.javadoc.dir}" checkexternal="${javadoc.check.external.links}" checkforbidden="${javadoc.check.forbidden.links}" checkspaces="false" report="${netbeans.javadoc.dir}/checklinks-errors.xml">
+        <!-- -->
+        <property name="javadoc.externallinks" location="${nb_all}/nbbuild/build/javadoclinks"/>
+        <mkdir dir="${javadoc.externallinks}"/>
+        <delete file="${javadoc.externallinks}*.txt" failonerror="false"/>
+        <!-- -->
+        <checklinks basedir="${netbeans.javadoc.dir}" checkexternal="${javadoc.check.external.links}" checkforbidden="${javadoc.check.forbidden.links}" checkspaces="false" report="${netbeans.javadoc.dir}/checklinks-errors.xml" externallinkslist="${javadoc.externallinks}">
             <include name="*/overview-summary.html"/>
             <include name="*/apichanges.html"/>
             <include name="*/architecture-summary.html"/>
             <include name="*/**/package-summary.html"/>
-            <include name="*/**/doc-files/**/*.html"/>
+           <!-- <include name="*/**/doc-files/**/*.html"/> -->
+            <include name="*/**/*.html"/>
             <include name="*.html"/>
             &disallowed-links;
         </checklinks>
diff --git a/nbbuild/javadoctools/disallowed-links.xml b/nbbuild/javadoctools/disallowed-links.xml
index 3d10d0e..3251f38 100644
--- a/nbbuild/javadoctools/disallowed-links.xml
+++ b/nbbuild/javadoctools/disallowed-links.xml
@@ -23,52 +23,189 @@
     <!-- if you find a general URL from netbeans.org site that make sence to reference, feel free
       to add it here with accept='true'
       -->
-    <!-- link to any API changes are ok -->
-    <filter pattern="http://www\.netbeans\.org/download/dev/javadoc/apichanges\.html" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org/download/release41/javadoc/apichanges\.html" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org/download/[0-9]_[0-9]/javadoc/apichanges\.html" accept="true"/>
-    <filter pattern="http://bits\.netbeans\.org/[0-9.]+/javadoc/apichanges\.html" accept="true"/>
-    <filter pattern="http://bits\.netbeans\.org/" accept="true"/>
-    <!-- sources -->
-    <filter pattern="http://www\.netbeans\.org/(unbranded-)?source/browse/.*" accept="true"/>
-    <filter pattern="http://hg\.netbeans\.org.*" accept="true"/>
-    <filter pattern="http://openide\.netbeans\.org/versioning-policy\.html.*" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org/issues/show_bug\.cgi.*" accept="true"/>
-    <filter pattern="http://openide\.netbeans\.org.*tutorial.*api-design.*" accept="true"/>
-    <filter pattern="http://openide\.netbeans\.org.*tutorial.*api.html.*" accept="true"/>
-    <filter pattern="http://platform\.netbeans\.org/" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org.products.ide.index.html" accept="true"/>
-    <filter pattern="http://mdr\.netbeans\.org/example\.html" accept="true"/>
-    <filter pattern="http://mdr\.netbeans\.org/uml2mof.*" accept="true"/>
-    <filter pattern="http://java\.netbeans\.org/models/java/java\.xml" accept="true"/>
-    <filter pattern="http://autoupdate\.netbeans\.org/nbm/nbm_package\.html.*" accept="true"/>
-    <!-- Winsys important documents -->
-    <filter pattern="http://core\.netbeans\.org/windowsystem/.*html.*" accept="true"/>
-    <!-- UI specifications -->
-    <filter pattern="http://ui\.netbeans\.org/docs/hi/javamdr/.*" accept="true"/>
-    <filter pattern="http://ui.netbeans.org/docs/ui/VersioningSpecification.*" accept="true"/>
-    <filter pattern="http://ui\.netbeans\.org/docs/ui/code_folding/cf_uispec\.html" accept="true"/>
-    <!-- is used in generated question from arch.xml -->
-    <filter pattern="http://www\.netbeans\.org/community/guidelines/q-evangelism\.html" accept="true"/>
-    <!-- direct link to main website is ok as well -->
-    <filter pattern="http://www\.netbeans\.org/" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org/community/lists/top\.html" accept="true"/>
-    <filter pattern="http://translatedfiles\.netbeans\.org/" accept="true"/>
-    <!-- dtd are fine they cannot change anyway -->
-    <filter pattern="http://www\.netbeans\.org/dtds/.*" accept="true"/>
-    <filter pattern="http://www\.netbeans\.org/servlets/.*" accept="true"/>
-    <filter pattern="http://openide\.netbeans\.org/proposals/.*" accept="true"/>        
-    <!-- logger module uses references to real website pages -->
-    <filter pattern="http://logger\.netbeans\.org/nonav/welcome/.*" accept="true"/>        
-    <!-- allow xsd files -->
-    <filter pattern="http://www\.netbeans\.org/ns/.*" accept="true"/>
-    <!-- allow Project Design document -->
-    <filter pattern="http://projects\.netbeans\.org/buildsys/.*" accept="true"/>
-    <filter pattern="http://platform\.netbeans\.org/articles/.*" accept="true"/>
-    <filter pattern="http://ui\.netbeans\.org/docs/ui/themes/themes\.html" accept="true"/>
-    <filter pattern="http://wiki.netbeans.org/.*" accept="true"/>
-    <!-- Useful to point to open layer positions (see e.g. HOWTO-MIME.html): -->
-    <filter pattern="http://deadlock\.netbeans\.org/hudson/job/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/build/generated/layers\.txt" accept="true"/>
-    <filter pattern="http://deadlock\.netbeans\.org/job/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/build/generated/layers\.txt" accept="true"/>
-    <!-- forbid the rest of NetBeans sites -->
-    <filter pattern="http://.*netbeans\.org/.*" accept="false"/>
+    <!-- issue tracking system -->
+
+    <filter pattern="https://bz\.apache\.org/netbeans/show_bug\.cgi\?id=.*" accept="true"/>   
+    <filter pattern="https://issues\.apache\.org/jira/browse/NETBEANS-\d+" accept="true"/>
+
+    <!-- some ant issue linked -->
+    <filter pattern="https://bz\.apache\.org/bugzilla/show_bug\.cgi\?id=.*" accept="true"/>
+    <!-- some sun jdk issue linked -->
+    
+    <filter pattern="http://bugs\.sun\.com/bugdatabase/.*" accept="true"/>
+    
+    
+    <!-- version control ours and others  -->
+    <filter pattern="https://github\.com/apache/netbeans.*" accept="true" />
+    <filter pattern="https://gitbox\.apache\.org/repos/asf\?p=netbeans\.git" accept="true" />
+    <!-- transition  -->
+    <filter pattern="https://github\.com/emilianbold/netbeans-releases/.*" accept="true" />
+
+    <filter pattern="https://github\.com/graalvm/fastr" accept="true" />
+    <filter pattern="https://github\.com/graalvm/graalpython" accept="true" />
+    <filter pattern="https://github\.com/graalvm/truffleruby" accept="true" />
+    <filter pattern="https://github\.com/twall/jna" accept="true" />
+    <filter pattern="https://github\.com/openjdk/.*" accept="true" />
+    <filter pattern="https://github\.com/simpligility/.*" accept="true" />
+    
+    
+    <!-- project site we use -->
+    <filter pattern="https://bits\.netbeans\.org/html\+java/dev" accept="true" />
+    <filter pattern="https://graalvm\.org" accept="true" />
+    <filter pattern="https://freemarker\.apache\.org" accept="true" />
+    <filter pattern="https://felix\.apache\.org" accept="true" />
+    <filter pattern="https://ant\.apache\.org" accept="true" />
+    <filter pattern="https://ant\.apache\.org/manual/running\.html#sysprops" accept="true" />
+    <filter pattern="https://ant\.apache\.org/manual/Types/antlib\.html" accept="true" />
+    
+    <filter pattern="https://river\.apache\.org" accept="true" /> <!-- jini -->
+    <filter pattern="http://findbugs\.sourceforge\.net" accept="true" />
+    <filter pattern="http://www\.saxproject\.org" accept="true" />
+    <filter pattern="https://www\.eclipse\.org/jgit" accept="true" />
+    <filter pattern="https://knockoutjs\.com" accept="true" />
+    <filter pattern="https://services\.gradle\.org/versions/all" accept="true" /> 
+    
+    <!-- documentation API -->
+    <filter pattern="https://docs\.oracle\.com/javase.*" accept="true" />
+    <filter pattern="https://docs\.oracle\.com/javaee.*" accept="true" />
+    <filter pattern="https://docs\.microsoft\.com/.*" accept="true" />
+    
+    <filter pattern="https://www\.graalvm\.org/truffle/javadoc/.*" accept="true" />
+    <filter pattern="https://openjfx\.io/javadoc/.*" accept="true" />
+    <filter pattern="https://www\.oracle\.com/technetwork/java/jaf-1-150219\.pdf*" accept="true" />
+    <!-- javahelp documentation -->
+    <filter pattern="https://docs\.oracle\.com/cd/E19253-01/819-0913/819-0913\.pdf" accept="true" />
+    <!-- https://docs.oracle.com/javase/specs/ -->
+    <filter pattern="https://www\.oracle\.com/java/technologies/jaxp-introduction\.html" accept="true" />
+    <filter pattern="https://docs\.gradle\.org/.*" accept="true" />
+    <filter pattern="https://search\.maven\.org/search\?q=org\.netbeans\.api" accept="true" />
+    
+    <filter pattern="https://www\.ietf\.org/rfc/rfc3023\.txt" accept="true" />
+    <filter pattern="https://www\.rfc-editor\.org/rfc/rfc4288\.html#section-4\.2" accept="true" />
+    <filter pattern="https://www\.w3\.org/XML" accept="true" />
+    <filter pattern="https://openjdk\.org/projects/coin" accept="true" />
+    
+    <filter pattern="https://junit\.org/junit4/javadoc/latest/org/junit/Ignore\.html" accept="true" />
+    
+    <!-- wiki apidesing former netbeans sources -->
+    <filter pattern="http://wiki\.apidesign\.org/wiki/CodeInjection" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Netbinox" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Privileged_API" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Startup#Morning_Launch" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Startup#Multi_User_Initial_Launch" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Startup" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Bck2Brwsr" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/Netbinox" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/OrderOfElements" accept="true" />
+    <filter pattern="http://wiki\.apidesign\.org/wiki/ExtendingInterfaces" accept="true" />
+    <filter pattern="http://source\.apidesign\.org/hg/netbeans/misc/file/tip/platform/samples/window-system-groups" accept="true" />
+    <filter pattern="http://source\.apidesign\.org/hg/netbeans/misc/file/tip/platform/samples/window-system-basic" accept="true" />
+
+
+    <!-- book -->
+    <filter pattern="https://leanpub\.com/nbp4beginners" accept="true" />
+    <filter pattern="https://www.martinfowler.com/articles/injection\.html" accept="true" />
+    <filter pattern="https://software\.intel\.com/en-us/multi-os-engine" accept="true" />
+    
+    
+    <!-- dtd and xsl -->
+    <filter pattern="http://www\.netbeans\.org/dtds/annotation-type-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/attributes-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/connection-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/editor-palette-item-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/filesystem-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/filesystem-1_1\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/filesystem-1_2\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/group-properties2_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/java-platformdefinition-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/jdbc-driver-1_1\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/library-declaration-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/mode-properties2_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/module-auto-deps-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/module-status-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/properties-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/sessionsettings-1_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/tc_group2_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/tc_ref2_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/windowmanager-properties2_0\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/EditorFontsColors-1_1\.dtd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/dtds/EditorKeyBindings-1_1\.dtd" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/dtds/EditorFontsColors-1_2\.dtd" accept="true"/>
+    <!-- xsd used in documentation -->
+    <filter pattern="http://www\.netbeans\.org/ns/ant-project-libraries/1\.xsd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/ns/j2se-project/1\.xsd" accept="true"/>
+    <filter pattern="http://www\.netbeans\.org/ns/j2se-project/2\.xsd" accept="true"/>
+    
+    <!-- j2ee dtd-->
+    <filter pattern="http://java\.sun\.com/dtd/.*" accept="true"/>
+    <filter pattern="http://java\.sun\.com/j2ee/dtds/.*" accept="true"/>
+    <filter pattern="https://www\.oracle\.com/webfolder/technetwork/.*" accept="true"/>
+    <filter pattern="http://www\.oracle\.com/webfolder/technetwork/.*" accept="true"/>
+    <filter pattern="https://jcp\.org/aboutJava/communityprocess/.*" accept="true"/>
+    
+    
+    <!-- not in website
+    
+    -->
+    <!-- wiki pagess -->
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#private" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#friend" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#devel" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#stable" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#official" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#third_party" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#standard" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability#deprecated" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Stability" accept="true"/>
+
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Design#Separate_API_for_clients_from_support_API" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Design#The_Importance_of_Being_Use_Case_Oriented" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Design#What_is_an_API" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/API_Design" accept="true"/>
+    
+    <filter pattern="https://netbeans\.apache\.org/wiki/APIDevelopment" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/Authenticator" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/FitnessViaPostMortem" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/FitnessViaTimersCounter" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/VersioningPolicy#Compatible_change_on_the_trunk" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/SignatureTest" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/DevFaqNetBeansFullHack" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/RunConfigurations49636" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/ParsingAPI" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/BugtrackingCookbook" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/TaskManagementUseCases" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/TaskDashboardDesignSpec" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/BugtrackingAPISPIUseCases" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/Java_DevelopersGuide" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/wiki/FolderOrdering103187" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/DevFaqActionContextSensitive" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/DevFaqLookupDefault" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/DevFaqAddGlobalContext" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/BackwardCompatibilityPatches" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/BuildSystemHowTo" accept="true"/>
+    <filter pattern="https://netbeans\.apache\.org/wiki/JavaHT_Modification" accept="true"/>
+    
+    <filter pattern="https://en\.wikipedia\.org/wiki/Proxy_auto-config" accept="true"/> 
+    <filter pattern="https://en\.wikipedia\.org/wiki/Web_Proxy_Auto-Discovery_Protocol" accept="true"/> 
+    <filter pattern="https://en\.wikipedia\.org/wiki/ANSI_escape_code" accept="true"/> 
+    
+    <!-- main site links page -->
+    <filter pattern="https://netbeans\.apache\.org/tutorials/.*" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/kb/.*" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/participate/qualityevangelism\.html*" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org" accept="true"/> 
+    <filter pattern="https://netbeans\.apache\.org/download/index\.html" accept="true"/>
+    
+    <!-- old blog entry -->
+    <filter pattern="https://netbeans\.apache\.org/blogs/.*" accept="true"/>
+    <!-- old projects entry -->
+    <filter pattern="https://netbeans\.apache\.org/projects/.*" accept="true"/>
+    
+    <!-- jenkins page -->
+    <filter pattern="https://ci-builds\.apache\.org/job/Netbeans/job/netbeans-linux/lastSuccessfulBuild/artifact/nbbuild/build/generated/layers\.txt" accept="true"/>
+    
+     <!-- ui gesture -->
+    <filter pattern="http://www\.netbeans\.org/servlets/Join" accept="false"/>
+    <!-- all other links are disallowed -->
+    <filter pattern="https://.*" accept="false"/>
+    <filter pattern="http://.*" accept="false"/>
diff --git a/nbbuild/javadoctools/export2color.xsl b/nbbuild/javadoctools/export2color.xsl
index d43d1eb..90dcc94 100644
--- a/nbbuild/javadoctools/export2color.xsl
+++ b/nbbuild/javadoctools/export2color.xsl
@@ -27,30 +27,30 @@
             <xsl:when test="descendant::api[@category='stable' and @group='java' and @type='export']"><![CDATA[
 stability.color=#ffffff
 stability.title=Stable
-stability.definition.url=http://wiki.netbeans.org/API_Stability#Stable
+stability.definition.url=https://netbeans.apache.org/wiki/API_Stability#stable
 ]]></xsl:when>
             <xsl:when test="descendant::api[@category='official' and @group='java' and @type='export']"><![CDATA[
 stability.color=#ffffff
 stability.title=Official
-stability.definition.url=http://wiki.netbeans.org/API_Stability#Official
+stability.definition.url=https://netbeans.apache.org/wiki/API_Stability#official
 ]]></xsl:when>
             <xsl:when test="descendant::api[@category='devel' and @group='java' and @type='export']"><![CDATA[
 stability.color=#ddcc80
 stability.image=resources/stability-devel.png
 stability.title=Under Development
-stability.definition.url=http://wiki.netbeans.org/API_Stability#Devel
+stability.definition.url=https://netbeans.apache.org/wiki/API_Stability#devel
 ]]></xsl:when>
             <xsl:when test="descendant::api[@category='deprecated' and @group='java' and @type='export']"><![CDATA[
 stability.color=#afafaf
 stability.image=resources/stability-deprecated.png
 stability.title=Deprecated
-stability.definition.url=http://wiki.netbeans.org/API_Stability#Deprecated
+stability.definition.url=https://netbeans.apache.org/wiki/API_Stability#deprecated
 ]]></xsl:when>
             <xsl:otherwise><![CDATA[
 stability.color=#e0a0a0
 stability.image=resources/stability-friend.png
 stability.title=Friend, Private or Third Party
-stability.definition.url=http://wiki.netbeans.org/API_Stability#Friend
+stability.definition.url=https://netbeans.apache.org/wiki/API_Stability#friend
 ]]></xsl:otherwise>
         </xsl:choose>
     </xsl:template>
diff --git a/nbbuild/javadoctools/export2html.xsl b/nbbuild/javadoctools/export2html.xsl
index e27054c..99617fc 100644
--- a/nbbuild/javadoctools/export2html.xsl
+++ b/nbbuild/javadoctools/export2html.xsl
@@ -82,24 +82,24 @@
 
                 This document provides a list of <em>NetBeans APIs</em> with a short description
                 of what they are used for, and a table describing different types of interfaces
-                (see <a href="http://wiki.netbeans.org/API_Design">What is
+                (see <a href="https://netbeans.apache.org/wiki/API_Design">What is
                     an API?</a> to understand why we list DTDs, file formats, etc.) and with
                 a stability category (<span style="background:#ffffff">stable and official</span>,
                 <span style="background:#ddcc80">under development</span>,
                 <span style="background:#afafaf;text-decoration:line-through">deprecated</span>,
                 <span style="background:#e0c0c0">friend or private</span>;
-                see <a href="http://wiki.netbeans.org/API_Stability">API
+                see <a href="https://netbeans.apache.org/wiki/API_Stability">API
                     stability</a> for more info).
                 The aim is to provide as detailed a definition of NetBeans module 
                 external interfaces as possible and give other developers a chance to decide
                 whether they want to depend on a particular API or not.
                 <p/>
                 Some of these APIs are part of the 
-                <a href="http://platform.netbeans.org/">NetBeans Platform</a>
+                <a href="https://netbeans.apache.org/kb/docs/platform/">NetBeans Platform</a>
                 (for example lookup,
                 loaders, utilities, nodes, explorer, window systems, multiview, etc.), some of them
                 are specific to 
-                <a href="http://www.netbeans.org/products/ide/index.html">NetBeans IDE</a> 
+                <a href="https://netbeans.apache.org">NetBeans IDE</a> 
                 (projects, javacore, diff, etc.) and some
                 are not included in the release at all and are just provided for download
                 (usually via autoupdate). Basically when building an application based on
@@ -213,7 +213,7 @@
                 <p/>
                 To get the API of your module listed here, see the documentation for the 
                 Javadoc building
-                <a href="http://wiki.netbeans.org/APIDevelopment">infrastructure</a>.
+                <a href="https://netbeans.apache.org/wiki/APIDevelopment">infrastructure</a>.
         
                 <h4>Additional Sources of Information</h4>
         
@@ -310,7 +310,7 @@
                                 </a>
                             </b>
                             - no API description provided
-                            (see <a href="http://wiki.netbeans.org/APIDevelopment">how to do it</a>)
+                            (see <a href="https://netbeans.apache.org/wiki/APIDevelopment">how to do it</a>)
                         </li>
                     </xsl:otherwise>
                 </xsl:choose>
@@ -469,14 +469,28 @@
             <td> <!-- stability category -->
                 <a>
                     <xsl:attribute name="href">
-                        <xsl:text>http://wiki.netbeans.org/API_Stability#</xsl:text>
-                        <xsl:value-of select="$category" />
+                        <xsl:text>https://netbeans.apache.org/wiki/API_Stability#</xsl:text>
+                        <xsl:choose>
+                            <xsl:when test="$category='official'">official</xsl:when>
+                            <xsl:when test="$category='stable'">stable</xsl:when>
+                            <xsl:when test="$category='devel'">devel</xsl:when>
+                            <xsl:when test="$category='third'">third_party</xsl:when>
+                            <xsl:when test="$category='standard'">standard</xsl:when>
+                            <xsl:when test="$category='friend'">friend</xsl:when>
+                            <xsl:when test="$category='private'">private</xsl:when>
+                            <xsl:when test="$category='deprecated'">deprecated</xsl:when>
+                            <xsl:otherwise>
+                                <xsl:message>
+                                    WARNING: <xsl:value-of select="$category"/>
+                                </xsl:message>
+                            </xsl:otherwise>
+                        </xsl:choose>
                     </xsl:attribute>
                     <xsl:choose>
                         <xsl:when test="$category='official'">Official</xsl:when>
                         <xsl:when test="$category='stable'">Stable</xsl:when>
-                        <xsl:when test="$category='devel'">Devel</xsl:when>
-                        <xsl:when test="$category='third'">Third_Party</xsl:when>
+                        <xsl:when test="$category='devel'">Under Development</xsl:when>
+                        <xsl:when test="$category='third'">Third party</xsl:when>
                         <xsl:when test="$category='standard'">Standard</xsl:when>
                         <xsl:when test="$category='friend'">Friend</xsl:when>
                         <xsl:when test="$category='private'">Private</xsl:when>
diff --git a/nbbuild/javadoctools/export2index.xsl b/nbbuild/javadoctools/export2index.xsl
index 3633bb3..9e8292d 100644
--- a/nbbuild/javadoctools/export2index.xsl
+++ b/nbbuild/javadoctools/export2index.xsl
@@ -74,23 +74,23 @@
                         <div class="abstract">
                             This document provides a list of <em>NetBeans APIs</em> with a short description
                             of what they are used for, and a table describing different types of interfaces
-                            (see <a href="http://wiki.netbeans.org/API_Design">What is
+                            (see <a href="https://netbeans.apache.org/wiki/API_Design">What is
                                 an API?</a> to understand why we list DTDs, file formats, etc.) and with
                             a stability category (<span style="background:#ffffff">stable and official</span>,
                             <span style="background:#ddcc80">under development</span>,
                             <span style="background:#afafaf;text-decoration:line-through">deprecated</span>,
                             <span style="background:#e0c0c0">friend or private</span>;
-                            see <a href="http://wiki.netbeans.org/API_Stability">API stability</a> for more info).
+                            see <a href="https://netbeans.apache.org/wiki/API_Stability">API stability</a> for more info).
                             The aim is to provide as detailed a definition of NetBeans module 
                             external interfaces as possible and give other developers a chance to decide
                             whether they want to depend on a particular API or not.
                             <p/>
                             Some of these APIs are part of the 
-                            <a href="http://platform.netbeans.org/">NetBeans Platform</a>
+                            <a href="https://netbeans.apache.org/kb/docs/platform/">NetBeans Platform</a>
                             (for example lookup,
                             loaders, utilities, nodes, explorer, window systems, multiview, etc.), some of them
                             are specific to 
-                            <a href="http://www.netbeans.org/products/ide/index.html">NetBeans IDE</a> 
+                            <a href="https://netbeans.apache.org">NetBeans IDE</a> 
                             (projects, javacore, diff, etc.) and some
                             are not included in the release at all and are just provided for download
                             (usually via autoupdate). Basically when building an application based on
@@ -107,7 +107,7 @@
                                     </xsl:with-param>
                                 </xsl:call-template>
                             </p>-->
-                            <p>To get the API of your module listed here, see the documentation for the Javadoc building <a href="http://wiki.netbeans.org/APIDevelopment">infrastructure</a>.</p>
+                            <p>To get the API of your module listed here, see the documentation for the Javadoc building <a href="https://netbeans.apache.org/wiki/APIDevelopment">infrastructure</a>.</p>
                         
                             <p>Can't find what you're looking for? Try the <a href="https://netbeans.apache.org" target="_top">Apache NetBeans website</a>.</p>
                         </div>
@@ -182,7 +182,7 @@
                                 </a>
                             </b>
                             - no API description provided
-                            (see <a href="http://wiki.netbeans.org/APIDevelopment">how to do it</a>)
+                            (see <a href="https://netbeans.apache.org/wiki/APIDevelopment">how to do it</a>)
                         </li>
                     </xsl:otherwise>
                 </xsl:choose>
@@ -341,14 +341,28 @@
             <td> <!-- stability category -->
                 <a>
                     <xsl:attribute name="href">
-                        <xsl:text>http://wiki.netbeans.org/API_Stability#</xsl:text>
-                        <xsl:value-of select="$category" />
+                        <xsl:text>https://netbeans.apache.org/wiki/API_Stability#</xsl:text>
+                        <xsl:choose>
+                            <xsl:when test="$category='official'">official</xsl:when>
+                            <xsl:when test="$category='stable'">stable</xsl:when>
+                            <xsl:when test="$category='devel'">devel</xsl:when>
+                            <xsl:when test="$category='third'">third_party</xsl:when>
+                            <xsl:when test="$category='standard'">standard</xsl:when>
+                            <xsl:when test="$category='friend'">friend</xsl:when>
+                            <xsl:when test="$category='private'">private</xsl:when>
+                            <xsl:when test="$category='deprecated'">deprecated</xsl:when>
+                            <xsl:otherwise>
+                                <xsl:message>
+                                    WARNING: <xsl:value-of select="$category"/>
+                                </xsl:message>
+                            </xsl:otherwise>
+                        </xsl:choose>
                     </xsl:attribute>
                     <xsl:choose>
                         <xsl:when test="$category='official'">Official</xsl:when>
                         <xsl:when test="$category='stable'">Stable</xsl:when>
-                        <xsl:when test="$category='devel'">Devel</xsl:when>
-                        <xsl:when test="$category='third'">Third_Party</xsl:when>
+                        <xsl:when test="$category='devel'">Under Development</xsl:when>
+                        <xsl:when test="$category='third'">Third party</xsl:when>
                         <xsl:when test="$category='standard'">Standard</xsl:when>
                         <xsl:when test="$category='friend'">Friend</xsl:when>
                         <xsl:when test="$category='private'">Private</xsl:when>
diff --git a/nbbuild/javadoctools/exportOverview.xsl b/nbbuild/javadoctools/exportOverview.xsl
index 2dca495..101127c 100644
--- a/nbbuild/javadoctools/exportOverview.xsl
+++ b/nbbuild/javadoctools/exportOverview.xsl
@@ -198,14 +198,28 @@
             <td> <!-- stability category -->
                 <a>
                     <xsl:attribute name="href">
-                        <xsl:text>http://wiki.netbeans.org/API_Stability#</xsl:text>
-                        <xsl:value-of select="$category" />
+                        <xsl:text>https://netbeans.apache.org/wiki/API_Stability#</xsl:text>
+                        <xsl:choose>
+                            <xsl:when test="$category='official'">official</xsl:when>
+                            <xsl:when test="$category='stable'">stable</xsl:when>
+                            <xsl:when test="$category='devel'">devel</xsl:when>
+                            <xsl:when test="$category='third'">third_party</xsl:when>
+                            <xsl:when test="$category='standard'">standard</xsl:when>
+                            <xsl:when test="$category='friend'">friend</xsl:when>
+                            <xsl:when test="$category='private'">private</xsl:when>
+                            <xsl:when test="$category='deprecated'">deprecated</xsl:when>
+                            <xsl:otherwise>
+                                <xsl:message>
+                                    WARNING: <xsl:value-of select="$category"/>
+                                </xsl:message>
+                            </xsl:otherwise>
+                        </xsl:choose>
                     </xsl:attribute>
                     <xsl:choose>
                         <xsl:when test="$category='official'">Official</xsl:when>
                         <xsl:when test="$category='stable'">Stable</xsl:when>
-                        <xsl:when test="$category='devel'">Devel</xsl:when>
-                        <xsl:when test="$category='third'">Third_Party</xsl:when>
+                        <xsl:when test="$category='devel'">Under Development</xsl:when>
+                        <xsl:when test="$category='third'">Third party</xsl:when>
                         <xsl:when test="$category='standard'">Standard</xsl:when>
                         <xsl:when test="$category='friend'">Friend</xsl:when>
                         <xsl:when test="$category='private'">Private</xsl:when>
diff --git a/nbbuild/javadoctools/links.xml b/nbbuild/javadoctools/links.xml
index 96e4fe0..0a93906 100644
--- a/nbbuild/javadoctools/links.xml
+++ b/nbbuild/javadoctools/links.xml
@@ -241,3 +241,5 @@
 <link href="${javadoc.docs.org-netbeans-modules-db-core}" offline="true" packagelistloc="${netbeans.javadoc.dir}/org-netbeans-modules-db-core"/>
 <link href="${javadoc.docs.org-netbeans-modules-nativeimage-api}" offline="true" packagelistloc="${netbeans.javadoc.dir}/org-netbeans-modules-nativeimage-api"/>
 <link href="${javadoc.docs.org-netbeans-api-lsp}" offline="true" packagelistloc="${netbeans.javadoc.dir}/org-netbeans-api-lsp"/>
+<link href="${javadoc.docs.org-netbeans-modules-java-j2seplatform}" offline="true" packagelistloc="${netbeans.javadoc.dir}/org-netbeans-modules-java-j2seplatform"/>
+<link href="${javadoc.docs.org-netbeans-modules-xml-wsdl-model}" offline="true" packagelistloc="${netbeans.javadoc.dir}/org-netbeans-modules-xml-wsdl-model"/>
diff --git a/nbbuild/javadoctools/properties.xml b/nbbuild/javadoctools/properties.xml
index 65a0f95..850e5c8 100644
--- a/nbbuild/javadoctools/properties.xml
+++ b/nbbuild/javadoctools/properties.xml
@@ -238,3 +238,5 @@
 <property name="javadoc.docs.org-netbeans-modules-db-core" value="${javadoc.web.root}/org-netbeans-modules-db-core"/>
 <property name="javadoc.docs.org-netbeans-modules-nativeimage-api" value="${javadoc.web.root}/org-netbeans-modules-nativeimage-api"/>
 <property name="javadoc.docs.org-netbeans-api-lsp" value="${javadoc.web.root}/org-netbeans-api-lsp"/>
+<property name="javadoc.docs.org-netbeans-modules-java-j2seplatform" value="${javadoc.web.root}/org-netbeans-modules-java-j2seplatform"/>
+<property name="javadoc.docs.org-netbeans-modules-xml-wsdl-model" value="${javadoc.web.root}/org-netbeans-modules-xml-wsdl-model"/>
diff --git a/nbbuild/javadoctools/replaces.xml b/nbbuild/javadoctools/replaces.xml
index e911454..c6471a4 100644
--- a/nbbuild/javadoctools/replaces.xml
+++ b/nbbuild/javadoctools/replaces.xml
@@ -27,12 +27,11 @@
    to decide whether such change shall be commited to the repository
    or not
 -->
-<replacefilter token="@org-openide-compat@" value="${javadoc.docs.org-openide-compat}"/>
+
 <replacefilter token="@org-openide-util@" value="${javadoc.docs.org-openide-util}"/>
 <replacefilter token="@org-openide-nodes@" value="${javadoc.docs.org-openide-nodes}"/>
 <replacefilter token="@org-netbeans-modules-nbjunit@" value="${javadoc.docs.org-netbeans-modules-nbjunit}"/>
 <replacefilter token="@org-openide-actions@" value="${javadoc.docs.org-openide-actions}"/>
-<replacefilter token="@org-openide-options@" value="${javadoc.docs.org-openide-options}"/>
 <replacefilter token="@org-openide-awt@" value="${javadoc.docs.org-openide-awt}"/>
 <replacefilter token="@org-openide-dialogs@" value="${javadoc.docs.org-openide-dialogs}"/>
 <replacefilter token="@org-openide-explorer@" value="${javadoc.docs.org-openide-explorer}"/>
@@ -42,7 +41,6 @@
 <replacefilter token="@org-openide-loaders@" value="${javadoc.docs.org-openide-loaders}"/>
 <replacefilter token="@org-openide-io@" value="${javadoc.docs.org-openide-io}"/>
 <replacefilter token="@org-openide-execution@" value="${javadoc.docs.org-openide-execution}"/>
-<replacefilter token="@org-openidex-util@" value="${javadoc.docs.org-openidex-util}"/>
 <replacefilter token="@org-apache-tools-ant-module@" value="${javadoc.docs.org-apache-tools-ant-module}"/>
 <replacefilter token="@org-netbeans-modules-javahelp@" value="${javadoc.docs.org-netbeans-modules-javahelp}"/>
 <replacefilter token="@org-netbeans-modules-settings@" value="${javadoc.docs.org-netbeans-modules-settings}"/>
@@ -238,3 +236,11 @@
 <replacefilter token="@org-netbeans-modules-db-core@" value="${javadoc.docs.org-netbeans-modules-db-core}"/>
 <replacefilter token="@org-netbeans-modules-nativeimage-api@" value="${javadoc.docs.org-netbeans-modules-nativeimage-api}"/>
 <replacefilter token="@org-netbeans-api-lsp@" value="${javadoc.docs.org-netbeans-api-lsp}"/>
+<replacefilter token="@org-netbeans-modules-java-j2seplatform@" value="${javadoc.docs.org-netbeans-modules-java-j2seplatform}"/>
+<replacefilter token="@org-netbeans-modules-xml-wsdl-model@" value="${javadoc.docs.org-netbeans-modules-xml-wsdl-model}"/>
+<!-- deprecated -->
+<replacefilter token="@org-openidex-util@" value="${javadoc.docs.org-openidex-util}"/>
+<!-- deprecated not linked-->
+<!-- replacefilter token="@org-openide-compat@" value="${javadoc.docs.org-openide-compat}"/ -->
+<!-- replacefilter token="@org-openide-options@" value="${javadoc.docs.org-openide-options}"/ -->
+<!-- unsorted filter -->
\ No newline at end of file
diff --git a/nbbuild/javadoctools/template.xml b/nbbuild/javadoctools/template.xml
index f23003f..24f8288 100644
--- a/nbbuild/javadoctools/template.xml
+++ b/nbbuild/javadoctools/template.xml
@@ -62,9 +62,9 @@
     </target>
 
     <!-- javadoc -->
-    
+
     <target name="javadoc-init" >
-    
+
         <!-- Output dir (will create ${javadoc.name}/ and ${javadoc.name}.zip beneath this): -->
         <property name="javadoc.out" location="${netbeans.javadoc.dir}"/>
         <property name="javadoc.out.dir" location="${javadoc.out}/${javadoc.name}"/>
@@ -82,11 +82,10 @@
         <mkdir dir="${javadoc.overview}/../" />
         <property name="javadoc.apichanges" location="apichanges-empty.xml"/>
         <property name="javadoc.arch" location="arch-empty.xml"/>
-        
-        
+
         <!-- Docs to link to: -->
         <property name="javadoc.web.root" value="http://root/"/>
-        <property name="javadoc.docs.jdk" value="http://download.oracle.com/javase/8/docs/api"/>
+        <property name="javadoc.docs.jdk" value="https://docs.oracle.com/javase/8/docs/api"/>
         &properties;
         <!-- add more here as needed... -->
         <property name="javadoc.css.dir" location="."/>
@@ -117,19 +116,19 @@
                 <isset property="stability.image"/>
             </not>
         </condition>
-        
+
         <mkdir dir="${javadoc.out.dir}"/>
-        
+
         <condition property="javadoc.files.provided">
         	<isset property="javadoc.files" />
         </condition>
-        
+
         <!-- default value for javadoc-files -->
         <selector id="all-java-files" >
             <filename name="**/*.java" />
         </selector>
         <property name="javadoc.files" value="all-java-files" />
-        
+
         <property file="../build.properties" />
 
         <condition property="javadoc.reference.generated" >
@@ -147,21 +146,21 @@
 </concat>
 
         <replace
-            token="${netbeans.javadoc.dir}" 
-            value="$${netbeans.javadoc.dir}" 
+            token="${netbeans.javadoc.dir}"
+            value="$${netbeans.javadoc.dir}"
             file="links.xml"
         />
-        
+
         <!-- set the property for use in this script -->
         <property name="javadoc.docs.${javadoc.name}" value="${javadoc.web.root}/${javadoc.name}" />
     </target>
-    
+
     <target name="javadoc-generate-overview" depends="javadoc-init,javadoc-check-timestamps" unless="javadoc.overview.should.not.be.generated" >
         <delete file="${javadoc.overview}" />
 
         <property file="${export.interfaces}/properties/all.properties" />
         <arch xsl="exportOverview.xsl" answers="${javadoc.arch}" output="${javadoc.overview}" stylesheet="prose.css"
-            apichanges="${javadoc.apichanges}" project="${javadoc.project}" 
+            apichanges="${javadoc.apichanges}" project="${javadoc.project}"
         >
             <!--
             <param name="changes-since-year" expression="${previous.release.year}"/>
@@ -243,7 +242,7 @@
         <!-- if no packages are specified, this is used to generate index.html from the overview page -->
         <copy file="${javadoc.overview}" tofile="${javadoc.out.dir}/index.html" />
     </target>
-    
+
     <target name="javadoc-stage-main" depends="javadoc-init,javadoc-check-timestamps,javadoc-exec-files,javadoc-exec-packages" unless="javadoc.should.not.be.generated" >
         <tstamp>
             <format property="YEAR" pattern="yyyy"/>
@@ -263,7 +262,7 @@
             <fileset refid="javadoc.resources.files"/>
         </copy>
     </target>
-    
+
     <target name="javadoc-exec-condition" depends="javadoc-check-timestamps" >
         <condition property="javadoc.exec.packages">
             <or>
@@ -280,12 +279,19 @@
         <!-- Timestamp is handled in javadoc.css to avoid too many commits on generated HTML files. -->
         <property name="javadoc.footer" value='&lt;span class="footnote"&gt;&lt;/span&gt;&lt;!-- See javadoc.css for timestamp information --&gt;'/>
     </target>
+
+    <condition property="apidoc.check" value="true" else="false">
+        <isset property="apidocfullcheck"/>
+        <!-- CI parameter -->
+        <!-- fail on error and warning as error means no javadoc content and missing page on bits.netbeans.org -->        
+    </condition>
     
     <target name="javadoc-exec-packages" depends="javadoc-init,javadoc-generate-references,javadoc-generate-overview,javadoc-exec-condition,javadoc-check-timestamps,javadoc-make-plain-title,javadoc-make-hyperlinked-title,javadoc-exec-condition,-javadoc-set-footer" unless="javadoc.exec.packages">
-        <javadoc source="${javac.source}" author="false" destdir="${javadoc.out.dir}" packagenames="${javadoc.packages}" stylesheetfile="${javadoc.css.main}" windowtitle="${javadoc.title}" overview="${javadoc.overview}" splitindex="true" use="true" version="false" useexternalfile="true" encoding="UTF-8">
+        <javadoc source="${javac.source}" failonerror="${apidoc.check}" failonwarning="${apidoc.check}" author="false" destdir="${javadoc.out.dir}" packagenames="${javadoc.packages}" stylesheetfile="${javadoc.css.main}" windowtitle="${javadoc.title}" overview="${javadoc.overview}" splitindex="true" use="true" version="false" useexternalfile="true" encoding="UTF-8">
             <sourcepath>
                 <pathelement location="${javadoc.docfiles}"/>
                 <pathelement location="${javadoc.src}"/>
+                <pathelement location="${javadoc.src}/../build/classes-generated"/>
             </sourcepath>
             <doclet
                 name="org.apidesign.javadoc.codesnippet.Doclet"
@@ -293,7 +299,7 @@
             >
                 <param name="-snippetpath" value="${javadoc.base}/src"/>
                 <param name="-snippetpath" value="${javadoc.base}/test/unit/src"/>
-                <param name="-maxLineLength" value="120"/>
+                <param name="-maxLineLength" value="240"/> <!-- 120 was too short -->
                 <param name="-snippetmode" value="jep413"/>
             </doclet>
             <classpath path="${javadoc.classpath}"/>
@@ -308,7 +314,6 @@
             <bottom>${javadoc.footer}</bottom>
             <!-- Avoid timestamp comments in _all_ html generated files, to reduce unnecessary git commits -->
             <arg value="-notimestamp" />
-            <arg value="--allow-script-in-comments" />
         </javadoc>
     </target>
     
@@ -369,12 +374,12 @@
         </taskdef>
         <!-- Warn about incorrect question version, but do not make build fail: -->
         <property name="arch.warn" value="true"/>
-        <arch answers="${javadoc.arch}" 
-            output="${javadoc.out.dir}/architecture-summary.html" 
-            stylesheet="prose.css" 
-            overviewlink="overview-summary.html" 
-            footer="@FOOTER@" 
-            project="${javadoc.project}" 
+        <arch answers="${javadoc.arch}"
+            output="${javadoc.out.dir}/architecture-summary.html"
+            stylesheet="prose.css"
+            overviewlink="overview-summary.html"
+            footer="@FOOTER@"
+            project="${javadoc.project}"
         />
     </target>
 
@@ -401,9 +406,9 @@
             </fileset>
         </concat>
     </target>
-    
+
     <target name="javadoc-stage-replace-apichanges" depends="javadoc-stage-main,javadoc-generate-references,javadoc-stage-alternative,javadoc-stage-apichanges,javadoc-stage-arch,javadoc-stage-export-interfaces" unless="javadoc.up.to.date" if="export.apichanges" >
-        <replace dir="${export.apichanges}" >        
+        <replace dir="${export.apichanges}" >
             <include name="${javadoc.name}"/>
             <replacefilter token="@JDK@" value="${javadoc.docs.jdk}"/>
             <replacefilter token="@FOOTER@" value="${javadoc.footer}"/>
@@ -422,7 +427,7 @@
             &replaces;
         </replace>
     </target>
-    
+
     <target name="javadoc-stage-replace" depends="javadoc-stage-main,javadoc-generate-references,javadoc-stage-alternative,javadoc-stage-apichanges,javadoc-stage-arch,javadoc-stage-export-interfaces,javadoc-stage-replace-interfaces,javadoc-stage-replace-apichanges" unless="javadoc.up.to.date">
         <replace dir="${javadoc.out.dir}">
             <include name="**/*.html"/>
@@ -430,7 +435,7 @@
             &replaces;
             <replacefilter token="@FOOTER@" value="${javadoc.footer}"/>
         </replace>
-        
+
         <replace dir="${javadoc.out.dir}">
             <include name="**/*.html"/>
             <replacefilter token="http://root/" value="@TOP@.." />
@@ -442,6 +447,17 @@
         <replace dir="${javadoc.out.dir}" token="@TOP@/" value="@TOP@">
             <include name="**/*.html"/>
         </replace>
+        <replaceregexp match="href=&quot;.*\@TOP\@" replace="href=&quot;\@TOP\@" flags="g" >
+            <fileset dir="${javadoc.out.dir}" includes="index-files/**/*.html"/>
+        </replaceregexp>
+        <replaceregexp match="href=&quot;.*\@TOP\@" replace="href=&quot;\@TOP\@" flags="g" >
+            <fileset dir="${javadoc.out.dir}" includes="**/**/deprecated-list.html"/>
+        </replaceregexp>
+        <replaceregexp match="href=&quot;.*\@TOP\@" replace="href=&quot;\@TOP\@" flags="g" >
+            <fileset dir="${javadoc.out.dir}" includes="**/**/class-use/*.html"/>
+        </replaceregexp>
+
+
         <replace dir="${javadoc.out.dir}">
             <replacetoken><![CDATA[<ul class="navList" title="Navigation">]]></replacetoken>
             <replacevalue><![CDATA[<ul class="navList" title="Navigation"><li><a href="@TOP@apichanges.html">API Changes</a></li><li><a href="@TOP@architecture-summary.html">Architecture Summary</a></li>]]></replacevalue>
@@ -475,8 +491,14 @@
         <replace dir="${javadoc.out.dir}" token="@TOP@" value="../../../../../../../../">
             <include name="*/*/*/*/*/*/*/*/*.html"/>
         </replace>
+        <replace dir="${javadoc.out.dir}" token="@TOP@" value="../../../../../../../../../">
+            <include name="*/*/*/*/*/*/*/*/*/*.html"/>
+        </replace>
+        <replace dir="${javadoc.out.dir}" token="@TOP@" value="../../../../../../../../../../">
+            <include name="*/*/*/*/*/*/*/*/*/*/*.html"/>
+        </replace>
     </target>
-    
+
     <target name="javadoc-stage-check" depends="javadoc-stage-replace" unless="javadoc.up.to.date">
         <taskdef name="checklinks" classname="org.netbeans.nbbuild.CheckLinks">
             <classpath>
@@ -489,10 +511,12 @@
             <include name="apichanges.html"/>
             <include name="architecture-summary.html"/>
             <include name="**/package-summary.html"/>
-            <include name="**/doc-files/**/*.html"/>
+            <!--<include name="**/doc-files/**/*.html"/>-->
+            <include name="**/*.html"/>
             <!-- XXX why are not all **/*.html checked? Would then need to allow e.g. http://blogs.sun.com/geertjan/entry/swing_outline_component from OutlineView.html -->
             <!-- Make hyperlinks point to the source files, not the copied files: -->
             <!-- XXX but line numbers are wrong in several cases! -->
+            <!-- checking all html file for now on -->
             <mapper type="glob" from="${javadoc.out.dir}/overview-summary.html" to="${javadoc.arch}"/>
             <mapper type="glob" from="${javadoc.out.dir}/*/package-summary.html" to="${javadoc.docfiles}/*/package.html"/>
             <mapper type="glob" from="${javadoc.out.dir}/*/package-summary.html" to="${javadoc.src}/*/package.html"/>
@@ -501,7 +525,7 @@
             <mapper type="glob" from="${javadoc.out.dir}/*.html" to="${javadoc.docfiles}/*.html"/>
             <mapper type="glob" from="${javadoc.out.dir}/*.html" to="${javadoc.src}/*.html"/>
 
-						&disallowed-links;    
+						&disallowed-links;
         </checklinks>
         <!-- XXX run doctorj (doctorj.sf.net) if it is installed? -->
     </target>
diff --git a/nbbuild/licenses/BSD-antlr-go-grammar b/nbbuild/licenses/BSD-antlr-go-grammar
new file mode 100644
index 0000000..17eca23
--- /dev/null
+++ b/nbbuild/licenses/BSD-antlr-go-grammar
@@ -0,0 +1,29 @@
+ [The "BSD licence"]
+ Copyright (c) 2017 Sasa Coh, Michał Błotniak
+ Copyright (c) 2019 Ivan Kochurkin, kvanttt@gmail.com, Positive Technologies
+ Copyright (c) 2019 Dmitry Rassadin, flipparassa@gmail.com, Positive Technologies
+ Copyright (c) 2021 Martin Mirchev, mirchevmartin2203@gmail.com
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/nbbuild/licenses/BSD-antlr-runtime4-2 b/nbbuild/licenses/BSD-antlr-runtime4-2
new file mode 100644
index 0000000..28e8005
--- /dev/null
+++ b/nbbuild/licenses/BSD-antlr-runtime4-2
@@ -0,0 +1,31 @@
+Use of Antlr version 4.11.1 is governed by the terms of the license below:
+
+ [The "BSD license"]
+Copyright (c) 2012-2022 The ANTLR Project. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. Neither name of copyright holders nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/nbbuild/licenses/GPL-mysql-connector b/nbbuild/licenses/GPL-mysql-connector
index 9c5e8b8..d1674c9 100644
--- a/nbbuild/licenses/GPL-mysql-connector
+++ b/nbbuild/licenses/GPL-mysql-connector
@@ -10,7 +10,7 @@
    third-party software which may be included in this distribution of
    MySQL Connector/J 8.0.
 
-   Last updated: June 2019
+   Last updated: August 2022
 
 Licensing Information
 
@@ -33,8 +33,7 @@
    a copy of which is reproduced below and can also be found along with
    its FAQ at http://oss.oracle.com/licenses/universal-foss-exception.
 
-   Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights
-   reserved.
+   Copyright (c) 2017, 2022, Oracle and/or its affiliates.
 
 Election of GPLv2
 
@@ -59,6 +58,11 @@
 either express or implied. See the License for the specific language
 governing permissions and limitations under the License.
 
+
+  ======================================================================
+  ======================================================================
+
+
 GNU GENERAL PUBLIC LICENSE
 Version 2, June 1991
 
@@ -138,7 +142,6 @@
 Program (independent of having been made by running the Program).
 Whether that is true depends on what the Program does.
 
-
   1. You may copy and distribute verbatim copies of the Program's
 source code as you receive it, in any medium, provided that you
 conspicuously and appropriately publish on each copy an appropriate
@@ -150,7 +153,6 @@
 You may charge a fee for the physical act of transferring a copy, and
 you may at your option offer warranty protection in exchange for a fee.
 
-
   2. You may modify your copy or copies of the Program or any portion
 of it, thus forming a work based on the Program, and copy and
 distribute such modifications or work under the terms of Section 1
@@ -195,7 +197,6 @@
 a storage or distribution medium does not bring the other work under
 the scope of this License.
 
-
   3. You may copy and distribute the Program (or a work based on it,
 under Section 2) in object code or executable form under the terms of
 Sections 1 and 2 above provided that you also do one of the following:
@@ -235,7 +236,6 @@
 distribution of the source code, even though third parties are not
 compelled to copy the source along with the object code.
 
-
   4. You may not copy, modify, sublicense, or distribute the Program
 except as expressly provided under this License.  Any attempt
 otherwise to copy, modify, sublicense or distribute the Program is
@@ -244,7 +244,6 @@
 this License will not have their licenses terminated so long as such
 parties remain in full compliance.
 
-
   5. You are not required to accept this License, since you have not
 signed it.  However, nothing else grants you permission to modify or
 distribute the Program or its derivative works.  These actions are
@@ -254,7 +253,6 @@
 all its terms and conditions for copying, distributing or modifying
 the Program or works based on it.
 
-
   6. Each time you redistribute the Program (or any work based on the
 Program), the recipient automatically receives a license from the
 original licensor to copy, distribute or modify the Program subject to
@@ -263,7 +261,6 @@
 You are not responsible for enforcing compliance by third parties to
 this License.
 
-
   7. If, as a consequence of a court judgment or allegation of patent
 infringement or for any other reason (not limited to patent issues),
 conditions are imposed on you (whether by court order, agreement or
@@ -296,7 +293,6 @@
 This section is intended to make thoroughly clear what is believed to
 be a consequence of the rest of this License.
 
-
   8. If the distribution and/or use of the Program is restricted in
 certain countries either by patents or by copyrighted interfaces, the
 original copyright holder who places the Program under this License
@@ -305,7 +301,6 @@
 countries not thus excluded.  In such case, this License incorporates
 the limitation as if written in the body of this License.
 
-
   9. The Free Software Foundation may publish revised and/or new
 versions of the General Public License from time to time.  Such new
 versions will be similar in spirit to the present version, but may
@@ -416,6 +411,9 @@
 applications with the library.  If this is what you want to do, use
 the GNU Lesser General Public License instead of this License.
 
+   ======================================================================
+   ======================================================================
+
 The Universal FOSS Exception, Version 1.0
 
    In addition to the rights set forth in the other license(s) included in
@@ -430,6 +428,7 @@
    Software with Other FOSS, and the constants, function signatures, data
    structures and other invocation methods used to run or interact with
    each of them (as to each, such software's "Interfaces"):
+
     i. The Software's Interfaces may, to the extent permitted by the
        license of the Other FOSS, be copied into, used and distributed in
        the Other FOSS in order to enable interoperability, without
@@ -439,6 +438,7 @@
        including without limitation as used in the Other FOSS (which upon
        any such use also then contains a portion of the Software under the
        Software License).
+
    ii. The Other FOSS's Interfaces may, to the extent permitted by the
        license of the Other FOSS, be copied into, used and distributed in
        the Software in order to enable interoperability, without requiring
@@ -446,6 +446,7 @@
        License or otherwise altering their original terms, if this does
        not require any portion of the Software other than such Interfaces
        to be licensed under the terms other than the Software License.
+
    iii. If only Interfaces and no other code is copied between the
        Software and the Other FOSS in either direction, the use and/or
        distribution of the Software with the Other FOSS shall not be
@@ -467,103 +468,281 @@
        of any kind for use or distribution of the Software in conjunction
        with software other than Other FOSS.
 
+   ======================================================================
+   ======================================================================
+
 Licenses for Third-Party Components
 
    The following sections contain licensing information for libraries that
-   we have included with the MySQL Connector/J 8.0 source and components
-   used to test MySQL Connector/J 8.0. Commonly used licenses referenced
-   herein can be found in Commonly Used Licenses. We are thankful to all
-   individuals that have created these.
-
-Ant-Contrib
-
-   The following software may be included in this product:
-Ant-Contrib
-Copyright (c) 2001-2003 Ant-Contrib project. All rights reserved.
-Licensed under the Apache 1.1 License Agreement, a copy of which is reproduced b
-elow.
-
-The Apache Software License, Version 1.1
-
-Copyright (c) 2001-2003 Ant-Contrib project.  All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
-
- 4. The name Ant-Contrib must not be used to endorse or promote
-    products derived from this software without prior written
-    permission. For written permission, please contact
-    ant-contrib-developers@lists.sourceforge.net.
-
-
- 5. Products derived from this software may not be called "Ant-Contrib"
-    nor may "Ant-Contrib" appear in their names without prior written
-    permission of the Ant-Contrib project.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR ITS
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
+   may be included with this product. We are thankful to all individuals
+   that have created these. Standard licenses referenced herein are
+   detailed in the Standard Licenses section.
 
 c3p0 JDBC Library
 
-   This product may include a copy of c3p0-0.9.1-pre6.jar in both source
-   and object code in the following /src/lib/c3p0-0.9.1-pre6.jar. The
-   terms of the Oracle license do NOT apply to c3p0-0.9.1-pre6.jar; it is
-   licensed under the following license, separately from the Oracle
-   programs you receive. If you do not wish to install this library, you
-   may remove the file /src/lib/c3p0-0.9.1-pre6.jar, but the Oracle
-   program might not operate properly or at all without the library.
+   The MySQL Connector/J implements interfaces that are included in c3p0,
+   although no part of c3p0 is included or distributed with MySQL.
 
-   This component is licensed under GNU Lesser General Public License
-   Version 2.1, February 1999.
+Copyright (C) 2019 Machinery For Change, Inc.
+
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of EITHER:
+ *
+ *     1) The GNU Lesser General Public License (LGPL), version 2.1, as
+ *        published by the Free Software Foundation
+ *
+ * OR
+ *
+ *     2) The Eclipse Public License (EPL), version 1.0
+ * You may choose which license to accept if you wish to redistribute
+ * or modify this work. You may offer derivatives of this work
+ * under the license you have chosen, or you may provide the same
+ * choice of license which you have been offered here.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received copies of both LGPL v2.1 and EPL v1.0
+ * along with this software; see the files LICENSE-EPL and LICENSE-LGPL.
+ * If not, the text of these licenses are currently available at
+ *
+ * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+ *  EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+
+   distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+   ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additionsto
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and such
+derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to
+its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other intellectual
+property rights of any other entity. Each Contributor disclaims any liability to
+Recipient for claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby assumes sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+     i) effectively disclaims on behalf of all Contributors all warranties
+        and conditions, express and implied, including warranties or conditions
+        of title and non-infringement, and implied warranties or conditions of
+        merchantability and fitness for a particular purpose;
+
+    ii) effectively excludes on behalf of all Contributors all liability for
+        damages, including direct, indirect, special, incidental and
+        consequential damages, such as lost profits;
+
+   iii) states that any provisions which differ from this Agreement are
+        offered by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such
+        Contributor, and informs licensees how to obtain it in a reasonable
+        manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement , including but not limited to the risks and costs
+of program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation
+may assign the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions) may always
+be distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property of
+any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
+
+   The LGPL v2.1 can be found in GNU Lesser General Public License Version
+   2.1, February 1999.
+
+   ======================================================================
+   ======================================================================
 
 Google Protocol Buffers
 
-   The following software may be included in this product:
 Copyright 2008 Google Inc.  All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:
 
-
     * Redistributions of source code must retain the above copyright
 notice, this list of conditions and the following disclaimer.
-
     * Redistributions in binary form must reproduce the above
 copyright notice, this list of conditions and the following disclaimer
 in the documentation and/or other materials provided with the
 distribution.
-
     * Neither the name of Google Inc. nor the names of its
 contributors may be used to endorse or promote products derived from
 this software without specific prior written permission.
@@ -585,134 +764,13 @@
 standalone and requires a support library to be linked with it.  This
 support library is itself covered by the above license.
 
-jboss-common-jdbc-wrapper.jar
-
-   This product may include a copy of jboss-common-jdbc-wrapper.jar in
-   both source and object code in the following
-   /src/lib/jboss-common-jdbc-wrapper.jar. The terms of the Oracle license
-   do NOT apply to jboss-common-jdbc-wrapper.jar; it is licensed under the
-   following license, separately from the Oracle programs you receive. If
-   you do not wish to install this library, you may remove the file
-   /src/lib/jboss-common-jdbc-wrapper.jar, but the Oracle program might
-   not operate properly or at all without the library.
-
-   This component is licensed under GNU Lesser General Public License
-   Version 2.1, February 1999.
-
-NanoXML
-
-   The following software may be included in this product:
-
-   NanoXML
-
- * Copyright (C) 2000-2002 Marc De Scheemaecker, All Rights Reserved.
- *
-
- * This software is provided 'as-is', without any express or implied warranty.
-
- * In no event will the authors be held liable for any damages arising from the
-
- * use of this software.
- *
-
- * Permission is granted to anyone to use this software for any purpose,
-
- * including commercial applications, and to alter it and redistribute it
-
- * freely, subject to the following restrictions:
- *
-
- *  1. The origin of this software must not be misrepresented; you must not
-
- *     claim that you wrote the original software. If you use this software in
-
- *     a product, an acknowledgment in the product documentation would be
-
- *     appreciated but is not required.
- *
-
- *  2. Altered source versions must be plainly marked as such, and must not be
-
- *     misrepresented as being the original software.
- *
-
- *  3. This notice may not be removed or altered from any source distribution.
- *
-
-rox.jar
-
-   The following software may be included in this product:
-
-   rox.jar
-Copyright (c) 2006, James Greenfield
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-
-    * Redistributions of source code must retain the above copyright notice, thi
-s
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    * Neither the name of the <ORGANIZATION> nor the names of its contributors
-      may be used to endorse or promote products derived from this software
-      without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIE
-D
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVI
-CES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Simple Logging Facade for Java (SLF4J)
-
-   The following software may be included in this product:
-Simple Logging Facade for Java (SLF4J)
-
-Copyright (c) 2004-2011 QOS.ch
-All rights reserved.
-
-Permission is hereby granted, free of charge,
-to any person obtaining a copy of this software
-and associated documentation files (the "Software"),
-to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify,
-merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom
-the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
-OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
-EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
+   ======================================================================
+   ======================================================================
 
 Unicode Data Files
 
-   The following software may be included in this product:
-
    Unicode Data Files
+
 COPYRIGHT AND PERMISSION NOTICE
 
 Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. Distributed under
@@ -732,154 +790,25 @@
 documentation associated with the Data File(s) or Software that the data or
 software has been modified.
 
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE
-DATA FILES OR SOFTWARE.
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
+PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+SOFTWARE.
 
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other
-dealings in these Data Files or Software without prior written authorization
-of the copyright holder.
+Except as contained in this notice, the name of a copyright holder shall not be
+used in advertising or otherwise to promote the sale, use or other dealings in
+these Data Files or Software without prior written authorization of the
+copyright holder.
 
-Commonly Used Licenses
+   ======================================================================
+   ======================================================================
 
-Artistic License (Perl) 1.0
-
-The "Artistic License"
-
-Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
-        "Package" refers to the collection of files distributed by the
-        Copyright Holder, and derivatives of that collection of files
-        created through textual modification.
-
-        "Standard Version" refers to such a Package if it has not been
-        modified, or has been modified in accordance with the wishes
-        of the Copyright Holder as specified below.
-
-        "Copyright Holder" is whoever is named in the copyright or
-        copyrights for the package.
-
-        "You" is you, if you're thinking about copying or distributing
-        this Package.
-
-        "Reasonable copying fee" is whatever you can justify on the
-        basis of media cost, duplication charges, time of people involved,
-        and so on.  (You will not be required to justify it to the
-        Copyright Holder, but only to the computing community at large
-        as a market that must bear the fee.)
-
-        "Freely Available" means that no fee is charged for the item
-        itself, though there may be fees involved in handling the item.
-        It also means that recipients of the item may redistribute it
-        under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder.  A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
-    a) place your modifications in the Public Domain or otherwise make them
-    Freely Available, such as by posting said modifications to Usenet or
-    an equivalent medium, or placing the modifications on a major archive
-    site such as uunet.uu.net, or by allowing the Copyright Holder to include
-    your modifications in the Standard Version of the Package.
-
-    b) use the modified Package only within your corporation or organization.
-
-    c) rename any non-standard executables so the names do not conflict
-    with standard executables, which must also be provided, and provide
-    a separate manual page for each non-standard executable that clearly
-    documents how it differs from the Standard Version.
-
-    d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
-    a) distribute a Standard Version of the executables and library files,
-    together with instructions (in the manual page or equivalent) on where
-    to get the Standard Version.
-
-    b) accompany the distribution with the machine-readable source of
-    the Package with your modifications.
-
-    c) give non-standard executables non-standard names, and clearly
-    document the differences in manual pages (or equivalent), together
-    with instructions on where to get the Standard Version.
-
-    d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package.  You may charge any fee you choose for support of this
-Package.  You may not charge a fee for this Package itself.  However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own.  You may embed this Package's interpreter within
-an executable of yours (by linking); this shall be construed as a mere
-form of aggregation, provided that the complete Standard Version of the
-interpreter is so embedded.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whoever generated
-them, and may be sold commercially, and may be aggregated with this
-Package.  If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you do
-not represent such an executable image as a Standard Version of this
-Package.
-
-7. C subroutines (or comparably compiled subroutines in other
-languages) supplied by you and linked into this Package in order to
-emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. Aggregation of this Package with a commercial distribution is always
-permitted provided that the use of this Package is embedded; that is,
-when no overt attempt is made to make this Package's interfaces visible
-to the end user of the commercial distribution.  Such use shall not be
-construed as a distribution of this Package.
-
-9. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-                                The End
+Standard Licenses
 
 GNU Lesser General Public License Version 2.1, February 1999
 
@@ -1045,7 +974,6 @@
 writing it).  Whether that is true depends on what the Library does
 and what the program that uses the Library does.
 
-
   1. You may copy and distribute verbatim copies of the Library's
 complete source code as you receive it, in any medium, provided that
 you conspicuously and appropriately publish on each copy an
@@ -1058,7 +986,6 @@
 and you may at your option offer warranty protection in exchange for a
 fee.
 
-
   2. You may modify your copy or copies of the Library or any portion
 of it, thus forming a work based on the Library, and copy and
 distribute such modifications or work under the terms of Section 1
@@ -1108,7 +1035,6 @@
 a storage or distribution medium does not bring the other work under
 the scope of this License.
 
-
   3. You may opt to apply the terms of the ordinary GNU General Public
 License instead of this License to a given copy of the Library.  To do
 this, you must alter all the notices that refer to this License, so
@@ -1125,7 +1051,6 @@
   This option is useful when you wish to copy part of the code of
 the Library into a program that is not a library.
 
-
   4. You may copy and distribute the Library (or a portion or
 derivative of it, under Section 2) in object code or executable form
 under the terms of Sections 1 and 2 above provided that you accompany
@@ -1139,7 +1064,6 @@
 distribute the source code, even though third parties are not
 compelled to copy the source along with the object code.
 
-
   5. A program that contains no derivative of any portion of the
 Library, but is designed to work with the Library by being compiled or
 linked with it, is called a "work that uses the Library".  Such a
@@ -1171,7 +1095,6 @@
 Any executables containing that work also fall under Section 6,
 whether or not they are linked directly with the Library itself.
 
-
   6. As an exception to the Sections above, you may also combine or
 link a "work that uses the Library" with the Library to produce a
 work containing portions of the Library, and distribute that work
@@ -1234,7 +1157,6 @@
 use both them and the Library together in an executable that you
 distribute.
 
-
   7. You may place library facilities that are a work based on the
 Library side-by-side in a single library together with other library
 facilities not covered by this License, and distribute such a combined
@@ -1251,7 +1173,6 @@
     that part of it is a work based on the Library, and explaining
     where to find the accompanying uncombined form of the same work.
 
-
   8. You may not copy, modify, sublicense, link with, or distribute
 the Library except as expressly provided under this License.  Any
 attempt otherwise to copy, modify, sublicense, link with, or
@@ -1260,7 +1181,6 @@
 or rights, from you under this License will not have their licenses
 terminated so long as such parties remain in full compliance.
 
-
   9. You are not required to accept this License, since you have not
 signed it.  However, nothing else grants you permission to modify or
 distribute the Library or its derivative works.  These actions are
@@ -1412,473 +1332,8 @@
 
 That's all there is to it!
 
-GNU Lesser General Public License Version 2, June 1991
-
-GNU LIBRARY GENERAL PUBLIC LICENSE
-
-Version 2, June 1991
-
-Copyright (C) 1991 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is numbered 2
-because it goes with version 2 of the ordinary GPL.]
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to
-share and change it. By contrast, the GNU General Public Licenses are
-intended to guarantee your freedom to share and change free software--to make
-sure the software is free for all its users.
-
-This license, the Library General Public License, applies to some specially
-designated Free Software Foundation software, and to any other libraries
-whose authors decide to use it. You can use it for your libraries, too.
-
-When we speak of free software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you have the freedom
-to distribute copies of free software (and charge for this service if you
-wish), that you receive source code or can get it if you want it, that you
-can change the software or use pieces of it in new free programs; and that
-you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to
-deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the library, or if you modify it.
-
-For example, if you distribute copies of the library, whether gratis or for a
-fee, you must give the recipients all the rights that we gave you. You must
-make sure that they, too, receive or can get the source code. If you link a
-program with the library, you must provide complete object files to the
-recipients so that they can relink them with the library, after making
-changes to the library and recompiling it. And you must show them these terms
-so they know their rights.
-
-Our method of protecting your rights has two steps: (1) copyright the
-library, and (2) offer you this license which gives you legal permission to
-copy, distribute and/or modify the library.
-
-Also, for each distributor's protection, we want to make certain that
-everyone understands that there is no warranty for this free library. If the
-library is modified by someone else and passed on, we want its recipients to
-know that what they have is not the original version, so that any problems
-introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We
-wish to avoid the danger that companies distributing free software will
-individually obtain patent licenses, thus in effect transforming the program
-into proprietary software. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-Most GNU software, including some libraries, is covered by the ordinary GNU
-General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary one;
-be sure to read it in full, and don't assume that anything in it is the same
-as in the ordinary license.
-
-The reason we have a separate public license for some libraries is that they
-blur the distinction we usually make between modifying or adding to a program
-and simply using it. Linking a program with a library, without changing the
-library, is in some sense simply using the library, and is analogous to
-running a utility program or application program. However, in a textual and
-legal sense, the linked executable is a combined work, a derivative of the
-original library, and the ordinary General Public License treats it as such.
-
-Because of this blurred distinction, using the ordinary General Public
-License for libraries did not effectively promote software sharing, because
-most developers did not use the libraries. We concluded that weaker
-conditions might promote sharing better.
-
-However, unrestricted linking of non-free programs would deprive the users of
-those programs of all benefit from the free status of the libraries
-themselves. This Library General Public License is intended to permit
-developers of non-free programs to use free libraries, while preserving your
-freedom as a user of such programs to change the free libraries that are
-incorporated in them. (We have not seen how to achieve this as regards
-changes in header files, but we have achieved it as regards changes in the
-actual functions of the Library.) The hope is that this will lead to faster
-development of free libraries.
-
-The precise terms and conditions for copying, distribution and modification
-follow. Pay close attention to the difference between a "work based on the
-library" and a "work that uses the library". The former contains code derived
-from the library, while the latter only works together with the library.
-
-Note that it is possible for a library to be covered by the ordinary General
-Public License rather than by this special one.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License Agreement applies to any software library which contains a
-notice placed by the copyright holder or other authorized party saying it may
-be distributed under the terms of this Library General Public License (also
-called "this License"). Each licensee is addressed as "you".
-
-A "library" means a collection of software functions and/or data prepared so
-as to be conveniently linked with application programs (which use some of
-those functions and data) to form executables.
-
-The "Library", below, refers to any such software library or work which has
-been distributed under these terms. A "work based on the Library" means
-either the Library or any derivative work under copyright law: that is to
-say, a work containing the Library or a portion of it, either verbatim or
-with modifications and/or translated straightforwardly into another language.
-(Hereinafter, translation is included without limitation in the term
-"modification".)
-
-"Source code" for a work means the preferred form of the work for making
-modifications to it. For a library, complete source code means all the source
-code for all modules it contains, plus any associated interface definition
-files, plus the scripts used to control compilation and installation of the
-library.
-
-Activities other than copying, distribution and modification are not covered
-by this License; they are outside its scope. The act of running a program
-using the Library is not restricted, and output from such a program is
-covered only if its contents constitute a work based on the Library
-(independent of the use of the Library in a tool for writing it). Whether
-that is true depends on what the Library does and what the program that uses
-the Library does.
-
-1. You may copy and distribute verbatim copies of the Library's complete
-source code as you receive it, in any medium, provided that you conspicuously
-and appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this
-License and to the absence of any warranty; and distribute a copy of this
-License along with the Library.
-
-You may charge a fee for the physical act of transferring a copy, and you may
-at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Library or any portion of it,
-thus forming a work based on the Library, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that you
-also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-    b) You must cause the files modified to carry prominent notices stating
-that you changed the files and the date of any change.
-    c) You must cause the whole of the work to be licensed at no charge to
-all third parties under the terms of this License.
-    d) If a facility in the modified Library refers to a function or a table
-of data to be supplied by an application program that uses the facility,
-other than as an argument passed when the facility is invoked, then you must
-make a good faith effort to ensure that, in the event an application does not
-supply such function or table, the facility still operates, and performs
-whatever part of its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has a
-purpose that is entirely well-defined independent of the application.
-Therefore, Subsection 2d requires that any application-supplied function or
-table used by this function must be optional: if the application does not
-supply it, the square root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Library, and can be reasonably
-considered independent and separate works in themselves, then this License,
-and its terms, do not apply to those sections when you distribute them as
-separate works. But when you distribute the same sections as part of a whole
-which is a work based on the Library, the distribution of the whole must be
-on the terms of this License, whose permissions for other licensees extend to
-the entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Library.
-
-In addition, mere aggregation of another work not based on the Library with
-the Library (or with a work based on the Library) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-
-3. You may opt to apply the terms of the ordinary GNU General Public License
-instead of this License to a given copy of the Library. To do this, you must
-alter all the notices that refer to this License, so that they refer to the
-ordinary GNU General Public License, version 2, instead of to this License.
-(If a newer version than version 2 of the ordinary GNU General Public License
-has appeared, then you can specify that version instead if you wish.) Do not
-make any other change in these notices.
-
-Once this change is made in a given copy, it is irreversible for that copy,
-so the ordinary GNU General Public License applies to all subsequent copies
-and derivative works made from that copy.
-
-This option is useful when you wish to copy part of the code of the Library
-into a program that is not a library.
-
-4. You may copy and distribute the Library (or a portion or derivative of it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you accompany it with the complete
-corresponding machine-readable source code, which must be distributed under
-the terms of Sections 1 and 2 above on a medium customarily used for software
-interchange.
-
-If distribution of object code is made by offering access to copy from a
-designated place, then offering equivalent access to copy the source code
-from the same place satisfies the requirement to distribute the source code,
-even though third parties are not compelled to copy the source along with the
-object code.
-
-5. A program that contains no derivative of any portion of the Library, but
-is designed to work with the Library by being compiled or linked with it, is
-called a "work that uses the Library". Such a work, in isolation, is not a
-derivative work of the Library, and therefore falls outside the scope of this
-License.
-
-However, linking a "work that uses the Library" with the Library creates an
-executable that is a derivative of the Library (because it contains portions
-of the Library), rather than a "work that uses the library". The executable
-is therefore covered by this License. Section 6 states terms for distribution
-of such executables.
-
-When a "work that uses the Library" uses material from a header file that is
-part of the Library, the object code for the work may be a derivative work of
-the Library even though the source code is not. Whether this is true is
-especially significant if the work can be linked without the Library, or if
-the work is itself a library. The threshold for this to be true is not
-precisely defined by law.
-
-If such an object file uses only numerical parameters, data structure layouts
-and accessors, and small macros and small inline functions (ten lines or less
-in length), then the use of the object file is unrestricted, regardless of
-whether it is legally a derivative work. (Executables containing this object
-code plus portions of the Library will still fall under Section 6.)
-
-Otherwise, if the work is a derivative of the Library, you may distribute the
-object code for the work under the terms of Section 6. Any executables
-containing that work also fall under Section 6, whether or not they are
-linked directly with the Library itself.
-
-6. As an exception to the Sections above, you may also compile or link a
-"work that uses the Library" with the Library to produce a work containing
-portions of the Library, and distribute that work under terms of your choice,
-provided that the terms permit modification of the work for the customer's
-own use and reverse engineering for debugging such modifications.
-
-You must give prominent notice with each copy of the work that the Library is
-used in it and that the Library and its use are covered by this License. You
-must supply a copy of this License. If the work during execution displays
-copyright notices, you must include the copyright notice for the Library
-among them, as well as a reference directing the user to the copy of this
-License. Also, you must do one of these things:
-
-    a) Accompany the work with the complete corresponding machine-readable
-source code for the Library including whatever changes were used in the work
-(which must be distributed under Sections 1 and 2 above); and, if the work is
-an executable linked with the Library, with the complete machine-readable
-"work that uses the Library", as object code and/or source code, so that the
-user can modify the Library and then relink to produce a modified executable
-containing the modified Library. (It is understood that the user who changes
-the contents of definitions files in the Library will not necessarily be able
-to recompile the application to use the modified definitions.)
-    b) Accompany the work with a written offer, valid for at least three
-years, to give the same user the materials specified in Subsection 6a, above,
-for a charge no more than the cost of performing this distribution.
-    c) If distribution of the work is made by offering access to copy from a
-designated place, offer equivalent access to copy the above specified
-materials from the same place.
-    d) Verify that the user has already received a copy of these materials or
-that you have already sent this user a copy.
-
-For an executable, the required form of the "work that uses the Library" must
-include any data and utility programs needed for reproducing the executable
-from it. However, as a special exception, the source code distributed need
-not include anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component itself
-accompanies the executable.
-
-It may happen that this requirement contradicts the license restrictions of
-other proprietary libraries that do not normally accompany the operating
-system. Such a contradiction means you cannot use both them and the Library
-together in an executable that you distribute.
-
-7. You may place library facilities that are a work based on the Library
-side-by-side in a single library together with other library facilities not
-covered by this License, and distribute such a combined library, provided
-that the separate distribution of the work based on the Library and of the
-other library facilities is otherwise permitted, and provided that you do
-these two things:
-
-    a) Accompany the combined library with a copy of the same work based on
-the Library, uncombined with any other library facilities. This must be
-distributed under the terms of the Sections above.
-    b) Give prominent notice with the combined library of the fact that part
-of it is a work based on the Library, and explaining where to find the
-accompanying uncombined form of the same work.
-
-8. You may not copy, modify, sublicense, link with, or distribute the Library
-except as expressly provided under this License. Any attempt otherwise to
-copy, modify, sublicense, link with, or distribute the Library is void, and
-will automatically terminate your rights under this License. However, parties
-who have received copies, or rights, from you under this License will not
-have their licenses terminated so long as such parties remain in full
-compliance.
-
-9. You are not required to accept this License, since you have not signed it.
-However, nothing else grants you permission to modify or distribute the
-Library or its derivative works. These actions are prohibited by law if you
-do not accept this License. Therefore, by modifying or distributing the
-Library (or any work based on the Library), you indicate your acceptance of
-this License to do so, and all its terms and conditions for copying,
-distributing or modifying the Library or works based on it.
-
-10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the original
-licensor to copy, distribute, link with or modify the Library subject to
-these terms and conditions. You may not impose any further restrictions on
-the recipients' exercise of the rights granted herein. You are not
-responsible for enforcing compliance by third parties to this License.
-
-11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not excuse
-you from the conditions of this License. If you cannot distribute so as to
-satisfy simultaneously your obligations under this License and any other
-pertinent obligations, then as a consequence you may not distribute the
-Library at all. For example, if a patent license would not permit
-royalty-free redistribution of the Library by all those who receive copies
-directly or indirectly through you, then the only way you could satisfy both
-it and this License would be to refrain entirely from distribution of the
-Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply, and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents
-or other property right claims or to contest validity of any such claims;
-this section has the sole purpose of protecting the integrity of the free
-software distribution system which is implemented by public license
-practices. Many people have made generous contributions to the wide range of
-software distributed through that system in reliance on consistent
-application of that system; it is up to the author/donor to decide if he or
-she is willing to distribute software through any other system and a licensee
-cannot impose that choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-12. If the distribution and/or use of the Library is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Library under this License may add an
-explicit geographical distribution limitation excluding those countries, so
-that distribution is permitted only in or among countries not thus excluded.
-In such case, this License incorporates the limitation as if written in the
-body of this License.
-
-13. The Free Software Foundation may publish revised and/or new versions of
-the Library General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and "any later
-version", you have the option of following the terms and conditions either of
-that version or of any later version published by the Free Software
-Foundation. If the Library does not specify a license version number, you may
-choose any version ever published by the Free Software Foundation.
-
-14. If you wish to incorporate parts of the Library into other free programs
-whose distribution conditions are incompatible with these, write to the
-author to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes make
-exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and of
-promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
-THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
-STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
-LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
-THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER
-SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-END OF TERMS AND CONDITIONS
-How to Apply These Terms to Your New Libraries
-
-If you develop a new library, and you want it to be of the greatest possible
-use to the public, we recommend making it free software that everyone can
-redistribute and change. You can do so by permitting redistribution under
-these terms (or, alternatively, under the terms of the ordinary General
-Public License).
-
-To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-one line to give the library's name and an idea of what it does.
-Copyright (C) year  name of author
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the
-Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-Boston, MA  02110-1301, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest in
-the library `Frob' (a library for tweaking knobs) written
-by James Random Hacker.
-
-signature of Ty Coon, 1 April 1990
-Ty Coon, President of Vice
-
-That's all there is to it!
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
+   ======================================================================
+   ======================================================================
 
 Written Offer for Source Code
 
@@ -1892,6 +1347,7 @@
    request to the address listed below or by sending an email to Oracle
    using the following link:
    http://www.oracle.com/goto/opensourcecode/request.
+
   Oracle America, Inc.
   Attn: Senior Vice President
   Development and Engineering Legal
@@ -1915,11 +1371,14 @@
 
      * A telephone number in the event we need to reach you.
 
+
    We may charge you a fee to cover the cost of physical media and
    processing.
 
    Your request must be sent
+
     a. within three (3) years of the date you received the Oracle product
        that included the binary that is the subject of your request, or
+
     b. in the case of code licensed under the GPL v3 for as long as Oracle
        offers spare parts or customer support for that product model.
diff --git a/nbbuild/licenses/MIT-jsoup22 b/nbbuild/licenses/MIT-jsoup22
new file mode 100644
index 0000000..71023ff
--- /dev/null
+++ b/nbbuild/licenses/MIT-jsoup22
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009-2022 Jonathan Hedley <jonathan@hedley.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/nbbuild/nbproject/project.xml b/nbbuild/nbproject/project.xml
index fba343c..b275928 100644
--- a/nbbuild/nbproject/project.xml
+++ b/nbbuild/nbproject/project.xml
@@ -208,7 +208,7 @@
         <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/4">
             <compilation-unit>
                 <package-root>antsrc</package-root>
-                <classpath mode="compile">${ant.core.lib}:${nb_all}/platform/javahelp/external/jhall-2.0_05.jar:${nb_all}/nbbuild/external/json-simple-1.1.1.jar</classpath>
+                <classpath mode="compile">${ant.core.lib}:${nb_all}/platform/javahelp/external/jhall-2.0_05.jar:${nb_all}/nbbuild/external/json-simple-1.1.1.jar:${nb_all}/nbbuild/external/external/jsoup-1.15.3.jar</classpath>
                 <built-to>${nb.build.dir}/antclasses</built-to>
                 <built-to>${nbantext.jar}</built-to>
                 <source-level>1.8</source-level>
diff --git a/nbbuild/notice-stub.txt b/nbbuild/notice-stub.txt
index 48bff50..2f43092 100644
--- a/nbbuild/notice-stub.txt
+++ b/nbbuild/notice-stub.txt
@@ -1,5 +1,5 @@
 Apache NetBeans
-Copyright 2017-2022 The Apache Software Foundation
+Copyright 2017-2023 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/nbbuild/templates/common.xml b/nbbuild/templates/common.xml
index b8f4d3e..8f9aebc 100644
--- a/nbbuild/templates/common.xml
+++ b/nbbuild/templates/common.xml
@@ -79,10 +79,10 @@
         <tstamp>
             <format property="module.build.started.time" pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
         </tstamp>
-        <condition property="asm.jar" value="${nbplatform.active.dir}/platform/core/asm-9.3.jar">
-            <available file="${nbplatform.active.dir}/platform/core/asm-9.3.jar"/>
+        <condition property="asm.jar" value="${nbplatform.active.dir}/platform/core/asm-9.4.jar">
+            <available file="${nbplatform.active.dir}/platform/core/asm-9.4.jar"/>
         </condition>
-        <property name="asm.jar" location="${platform/libs.asm.dir}/core/asm-9.3.jar"/>
+        <property name="asm.jar" location="${platform/libs.asm.dir}/core/asm-9.4.jar"/>
         <property name="tsaurl" value=""/>
         <property name="tsacert" value=""/>
     </target>
diff --git a/nbbuild/templates/projectized.xml b/nbbuild/templates/projectized.xml
index 287fe6b..d73a5ea 100644
--- a/nbbuild/templates/projectized.xml
+++ b/nbbuild/templates/projectized.xml
@@ -123,7 +123,7 @@
         </condition>
     </target>
     <target name="-init-bootclasspath-prepend-run9" depends="-init-bootclasspath-prepend-compile" if="have-jdk-1.9">
-        <condition property="test.bootclasspath.prepend.args" value="--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming,jdk.jdi">
+        <condition property="test.bootclasspath.prepend.args" value="--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming,jdk.jdi,jdk.unsupported">
             <and>
                 <istrue value="${requires.nb.javac}"/>
                 <not>
diff --git a/nbbuild/test/unit/src/org/netbeans/nbbuild/ArchQuestionsTest.java b/nbbuild/test/unit/src/org/netbeans/nbbuild/ArchQuestionsTest.java
index e4fd32f..8886f57 100644
--- a/nbbuild/test/unit/src/org/netbeans/nbbuild/ArchQuestionsTest.java
+++ b/nbbuild/test/unit/src/org/netbeans/nbbuild/ArchQuestionsTest.java
@@ -189,7 +189,7 @@
             "Describe the overall architecture. \n" +
             "<hint>\n" +
             "What will be API for \n" +
-            "<a href='http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi'>\n" +
+            "<a href='https://netbeans.apache.org/wiki/API_Design#Separate_API_for_clients_from_support_API'>\n" +
                 "clients and what support API</a>? \n" +
             "What parts will be pluggable?\n" +
             "How will plug-ins be registered? Please use <code>&lt;api type='export'/&gt;</code>\n" +
@@ -286,7 +286,7 @@
             "Describe the overall architecture. \n" +
             "<hint>\n" +
             "What will be API for \n" +
-            "<a href='http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi'>\n" +
+            "<a href='https://netbeans.apache.org/wiki/API_Design#Separate_API_for_clients_from_support_API'>\n" +
                 "clients and what support API</a>? \n" +
             "What parts will be pluggable?\n" +
             "How will plug-ins be registered? Please use <code>&lt;api type='export'/&gt;</code>\n" +
diff --git a/nbbuild/test/unit/src/org/netbeans/nbbuild/arch-profiler.xml b/nbbuild/test/unit/src/org/netbeans/nbbuild/arch-profiler.xml
index 9cf34b5..df86dc8 100644
--- a/nbbuild/test/unit/src/org/netbeans/nbbuild/arch-profiler.xml
+++ b/nbbuild/test/unit/src/org/netbeans/nbbuild/arch-profiler.xml
@@ -36,7 +36,7 @@
             Describe the overall architecture.
             <hint>
             What will be API for
-            <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
+            <a href="https://netbeans.apache.org/wiki/API_Design#Separate_API_for_clients_from_support_API">
                 clients and what support API</a>?
             What parts will be pluggable?
             How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
@@ -77,7 +77,7 @@
 
 <!--
         <question id="arch-quality" when="init">
-            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
+            How will the <a href="https://netbeans.apache.org/participate/qualityevangelism.html">quality</a>
             of your code be tested and
             how are future regressions going to be prevented?
             <hint>
@@ -131,7 +131,7 @@
                 at the root of your javadoc
             </hint>
 
-            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
+            Describe the main <a href="https://netbeans.apache.org/wiki/API_Design#The_Importance_of_Being_Use_Case_Oriented">
             use cases</a> of the new API. Who will use it under
             what circumstances? What kind of code would typically need to be written
             to use the module?
@@ -499,7 +499,7 @@
             <hint>
             If there is a property that can change the behavior of your
             code, somebody will likely use it. You should describe what it does
-            and the <a href="http://openide.netbeans.org/tutorial/api-design.html#life">stability category</a>
+            and the <a href="https://netbeans.apache.org/wiki/API_Design#Life-cycle_of_an_API">stability category</a>
             of this API. You may use
             <pre>
                 &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
@@ -871,7 +871,7 @@
             <hint>
             As this is some kind of intermodule dependency, it is a kind of API.
             Please describe it and classify according to
-            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
+            <a href="https://netbeans.apache.org/wiki/API_Design#categories">
             common stability categories</a>.
             </hint>
         </question>
diff --git a/nbbuild/travis/ant.sh b/nbbuild/travis/ant.sh
deleted file mode 100755
index b79eaf1..0000000
--- a/nbbuild/travis/ant.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-set -e
-
-function install() {
-    mkdir -p nbbuild/
-    cd nbbuild/
-    rm -rf travisbuildjdk*
-    wget https://raw.githubusercontent.com/sormuras/bach/master/install-jdk.sh
-    chmod a+x install-jdk.sh
-    ./install-jdk.sh --feature 11 --license GPL --target travisbuildjdk
-}
-
-function download() {
-    JDKURL=https://cdn.azul.com/zulu/bin/zulu11.37.17-ca-jdk11.0.6-linux_x64.zip
-    JDKSHA=0038707cd44ae1d3f535b20aab35e3cf7286371c0c7644e5d7392b52f45caa0a
-    mkdir -p nbbuild/
-    cd nbbuild/
-    rm -rf travisbuildjdk*
-    echo Downloading Java from $JDKURL
-    curl -s $JDKURL -o travisbuildjdk.zip
-    SUM=`sha256sum travisbuildjdk.zip | cut -f 1 -d " "`
-    echo SHA-256: $SUM
-    if [ "$SUM" != "$JDKSHA" ]; then
-        echo Expecting $JDKSHA
-        exit 1
-    fi
-    unzip -q travisbuildjdk.zip
-    mv zulu*jdk*linux* travisbuildjdk
-}
-
-AT=`pwd`
-if ! `pwd`/nbbuild/travisbuildjdk/bin/java -version >/dev/null 2>/dev/null; then
-    # download
-    install
-    cd travisbuildjdk
-    echo Java is ready in `pwd`
-    ./bin/java -version
-fi
-cd "$AT"
-
-echo Running ant -q $* at `pwd`
-JAVA_HOME=`pwd`/nbbuild/travisbuildjdk/ ant -q $*
diff --git a/nbbuild/travis/print-junit-report.sh b/nbbuild/travis/print-junit-report.sh
deleted file mode 100755
index 8c3efdd..0000000
--- a/nbbuild/travis/print-junit-report.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# 
-files=$(grep -L 'errors="0".*failures="0"' ./*/*/build/test/*/results/TEST-*.xml 2> /dev/null) || exit 0
-
-echo =================== JUnit Report Summary / failed tests ===================
-realfiles=''
-for file in $files ; do 
-    TEST=$(xmllint --xpath '//testsuite[@errors>0 or @failures>0]/@name' $file 2>/dev/null)
-    status=$?
-
-    if [ $status -eq 0 ]; then
-        realfiles="$realfiles $file"
-        echo
-        echo $TEST | cut -f2 -d '=' | tr -d '"'
-        xmllint --xpath '//testsuite/testcase[./failure]/@name' $file 2> /dev/null | sed -r 's/name="([^"]+)"/     failed: \1\n/g' 
-        xmllint --xpath '//testsuite/testcase[./error]/@name' $file 2> /dev/null | sed -r 's/name="([^"]+)"/     errored: \1\n/g' 
-    fi
-done
-
-echo
-echo ====================== JUnit failure details ===============================
-echo
-for file in $realfiles ; do 
-    classname=$(xmllint --xpath '//testsuite[@errors>0 or @failures>0]/@name' $file 2>/dev/null | cut -f2 -d '=' | tr -d '"')
-    echo Suite: $classname 
-    
-    for err in $(xmllint --xpath "//testsuite/testcase[@classname='${classname}'][./error]/@name" $file 2> /dev/null | sed -r 's/name="([^"]+)"/\1/g') ; do 
-        msg=$(xmllint --xpath "//testsuite/testcase[@classname='${classname}' and @name='${err}']/error/@message" $file 2> /dev/null | sed -r 's/message="([^"]+)"/\1/g' )
-        echo "      $err ERRORED : $msg"
-        xmllint --xpath "//testsuite/testcase[@classname='${classname}' and @name='${err}']/error/text()" $file 2> /dev/null | sed -r 's/^(.*$)/          \1/g'
-    done 
-    for err in $(xmllint --xpath "//testsuite/testcase[@classname='${classname}'][./failure]/@name" $file 2> /dev/null | sed -r 's/name="([^"]+)"/\1/g') ; do 
-        msg=$(xmllint --xpath "//testsuite/testcase[@classname='${classname}' and @name='${err}']/failure/@message" $file 2> /dev/null | sed -r 's/message="([^"]+)"/\1/g' )
-        echo "      $err FAILED : $msg"
-        xmllint --xpath "//testsuite/testcase[@classname='${classname}' and @name='${err}']/failure/text()" $file 2> /dev/null | sed -r 's/^(.*$)/          \1/g'
-    done 
-    text=$(xmllint --nocdata --xpath "//testsuite//system-out/text()" $file 2> /dev/null)
-    [ -n "$text" ] && { echo "Stdout ----------%<----------%<-------------%<-------------%<---------------" ; echo "$text" ; }
-    text=$(xmllint --nocdata --xpath "//testsuite//system-err/text()" $file 2> /dev/null)
-    [ -n "$text" ] && { echo "Stderr ----------%<----------%<-------------%<-------------%<---------------" ; echo "$text" ; }
-    echo "------------- End suite $classname ------------"
-    
-done
-echo
-echo ======================= End of JUnit report ===============================
diff --git a/nbbuild/travis/scripting.sh b/nbbuild/travis/scripting.sh
deleted file mode 100755
index d95cea3..0000000
--- a/nbbuild/travis/scripting.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-set -e
-
-
-if [ -z "$GRAALVM" ]; then
-  if [ -z "$GRAAL_VERSION" ]; then
-        echo "GraalVM version not set. Please specify a valid $GRAAL_VERSION string."
-        exit 1
-  fi
-  BASE=graalvm-ce-java8-$GRAAL_VERSION
-  URL=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-$GRAAL_VERSION/graalvm-ce-java8-linux-amd64-$GRAAL_VERSION.tar.gz
-  curl -L $URL --output graalvm.tgz
-  tar fxz graalvm.tgz
-  ls -l
-  GRAALVM=`pwd`/$BASE
-fi
-
-$GRAALVM/bin/gu install python
-$GRAALVM/bin/gu install R
-$GRAALVM/bin/gu install ruby
-
-# Test on GraalVM
-
-JAVA_HOME=$GRAALVM
-echo "ant -f platform/api.scripting/build.xml test"
-hide-logs.sh ant -f platform/api.scripting/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f ide/libs.graalsdk/build.xml test"
-hide-logs.sh ant -f ide/libs.graalsdk/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f platform/core.network/build.xml test"
-hide-logs.sh ant -f platform/core.network/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f webcommon/libs.graaljs/build.xml test"
-hide-logs.sh ant -f webcommon/libs.graaljs/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f profiler/profiler.oql/build.xml test"
-hide-logs.sh ant -f profiler/profiler.oql/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f java/nashorn.execution/build.xml test"
-hide-logs.sh ant -f java/nashorn.execution/build.xml test
-JAVA_HOME=$GRAALVM
-echo "ant -f java/debugger.jpda.truffle/build.xml test"
-hide-logs.sh ant -f java/debugger.jpda.truffle/build.xml test
-
-echo "DONE"
diff --git a/nbi/engine/src/org/netbeans/installer/Installer.java b/nbi/engine/src/org/netbeans/installer/Installer.java
index 8f4f6fa..faf93f5 100644
--- a/nbi/engine/src/org/netbeans/installer/Installer.java
+++ b/nbi/engine/src/org/netbeans/installer/Installer.java
@@ -151,7 +151,7 @@
     public void finish() {
         int exitCode = NORMAL_ERRORCODE;
         final Object prop = System.getProperties().get(EXIT_CODE_PROPERTY);
-        if ( prop!= null && prop instanceof Integer) {
+        if (prop instanceof Integer) {
             try {
                 exitCode = ((Integer)prop).intValue();
             } catch (NumberFormatException e) {
diff --git a/nbi/engine/src/org/netbeans/installer/utils/StringUtils.java b/nbi/engine/src/org/netbeans/installer/utils/StringUtils.java
index 467e789..0d0aaab 100644
--- a/nbi/engine/src/org/netbeans/installer/utils/StringUtils.java
+++ b/nbi/engine/src/org/netbeans/installer/utils/StringUtils.java
@@ -168,8 +168,6 @@
     
     public static String formatSize(
             final long longBytes) {
-        StringBuffer result = new StringBuffer();
-        
         double bytes = (double) longBytes;
         
         // try as GB
diff --git a/nbi/engine/src/org/netbeans/installer/utils/UiUtils.java b/nbi/engine/src/org/netbeans/installer/utils/UiUtils.java
index 0d1c33e..cef7602 100644
--- a/nbi/engine/src/org/netbeans/installer/utils/UiUtils.java
+++ b/nbi/engine/src/org/netbeans/installer/utils/UiUtils.java
@@ -370,8 +370,7 @@
                             } else if (e instanceof ExceptionInInitializerError) {
                                 final Throwable cause = e.getCause();
                                 
-                                if ((cause != null) &&
-                                        (cause instanceof HeadlessException)) {
+                                if (cause instanceof HeadlessException) {
                                     System.err.println(cause.getMessage());
                                 }
                             }                            
diff --git a/nbi/engine/src/org/netbeans/installer/utils/system/launchers/impl/ShLauncher.java b/nbi/engine/src/org/netbeans/installer/utils/system/launchers/impl/ShLauncher.java
index 1b8698e..6d69531 100644
--- a/nbi/engine/src/org/netbeans/installer/utils/system/launchers/impl/ShLauncher.java
+++ b/nbi/engine/src/org/netbeans/installer/utils/system/launchers/impl/ShLauncher.java
@@ -297,7 +297,7 @@
                 replace("\t","\\\\t").
                 replace("\r","\\\\r").
                 replace("`","\\`").
-                replaceAll("\"","\\\\\"");
+                replace("\"","\\\\\"");
         
     }
     private String escapeSlashesAndChars(String str) {
diff --git a/nbi/engine/src/org/netbeans/installer/wizard/components/panels/JdkLocationPanel.java b/nbi/engine/src/org/netbeans/installer/wizard/components/panels/JdkLocationPanel.java
index 58863bf..2365ea4 100644
--- a/nbi/engine/src/org/netbeans/installer/wizard/components/panels/JdkLocationPanel.java
+++ b/nbi/engine/src/org/netbeans/installer/wizard/components/panels/JdkLocationPanel.java
@@ -317,7 +317,7 @@
         final Object obj = getWizard().
                 getContext().
                 get(Product.class);
-        if (obj != null && obj instanceof Product) {
+        if (obj instanceof Product) {
             final Product product = (Product) obj;
             final String jdkSysPropName = product.getUid() + StringUtils.DOT +
                     JdkLocationPanel.JDK_LOCATION_PROPERTY;
@@ -563,7 +563,7 @@
         
         final Object objectContext = getWizard().getContext().get(Product.class);
         boolean sort = false;
-        if(objectContext != null && objectContext instanceof Product) {
+        if(objectContext instanceof Product) {
             final Product product = (Product) objectContext;
             for (Dependency dependency : product.getDependencies(InstallAfter.class)) {
                 
diff --git a/nbi/infra/server/modules/ejb/nbproject/project.properties b/nbi/infra/server/modules/ejb/nbproject/project.properties
index 1bb97d0..3d03983 100644
--- a/nbi/infra/server/modules/ejb/nbproject/project.properties
+++ b/nbi/infra/server/modules/ejb/nbproject/project.properties
@@ -39,7 +39,7 @@
     ${reference.NetBeans_Installer_Engine.jar}
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/server/modules/war-admin/nbproject/project.properties b/nbi/infra/server/modules/war-admin/nbproject/project.properties
index 0479748..6cef413 100644
--- a/nbi/infra/server/modules/war-admin/nbproject/project.properties
+++ b/nbi/infra/server/modules/war-admin/nbproject/project.properties
@@ -48,7 +48,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/server/modules/war-client/nbproject/project.properties b/nbi/infra/server/modules/war-client/nbproject/project.properties
index fb429b1..f35d75b 100644
--- a/nbi/infra/server/modules/war-client/nbproject/project.properties
+++ b/nbi/infra/server/modules/war-client/nbproject/project.properties
@@ -48,7 +48,7 @@
 javac.compilerargs=
 javac.debug=true
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/utils/basic-style-checker/nbproject/project.properties b/nbi/infra/utils/basic-style-checker/nbproject/project.properties
index 8029bdf..5f7d8d2 100644
--- a/nbi/infra/utils/basic-style-checker/nbproject/project.properties
+++ b/nbi/infra/utils/basic-style-checker/nbproject/project.properties
@@ -43,7 +43,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/utils/comment-correcter/nbproject/project.properties b/nbi/infra/utils/comment-correcter/nbproject/project.properties
index 05e143c..dcf3bf5 100644
--- a/nbi/infra/utils/comment-correcter/nbproject/project.properties
+++ b/nbi/infra/utils/comment-correcter/nbproject/project.properties
@@ -52,7 +52,7 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/utils/newline-correcter/nbproject/project.properties b/nbi/infra/utils/newline-correcter/nbproject/project.properties
index 7f9c577..07ebe48 100644
--- a/nbi/infra/utils/newline-correcter/nbproject/project.properties
+++ b/nbi/infra/utils/newline-correcter/nbproject/project.properties
@@ -42,7 +42,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/nbi/infra/utils/platform-tester/nbproject/project.properties b/nbi/infra/utils/platform-tester/nbproject/project.properties
index a642a3c..9bf0b8c 100644
--- a/nbi/infra/utils/platform-tester/nbproject/project.properties
+++ b/nbi/infra/utils/platform-tester/nbproject/project.properties
@@ -42,7 +42,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/php/languages.neon/nbproject/org-netbeans-modules-languages-neon.sig b/php/languages.neon/nbproject/org-netbeans-modules-languages-neon.sig
index f3a454a..6e5044f 100644
--- a/php/languages.neon/nbproject/org-netbeans-modules-languages-neon.sig
+++ b/php/languages.neon/nbproject/org-netbeans-modules-languages-neon.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.39
+#Version 1.40
 
 CLSS public abstract interface java.lang.annotation.Annotation
 meth public abstract boolean equals(java.lang.Object)
diff --git a/php/languages.neon/nbproject/project.properties b/php/languages.neon/nbproject/project.properties
index 75a1a5e..0f73a11 100644
--- a/php/languages.neon/nbproject/project.properties
+++ b/php/languages.neon/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/php/libs.javacup/nbproject/org-netbeans-libs-javacup.sig b/php/libs.javacup/nbproject/org-netbeans-libs-javacup.sig
index d1992c5..e62244c 100644
--- a/php/libs.javacup/nbproject/org-netbeans-libs-javacup.sig
+++ b/php/libs.javacup/nbproject/org-netbeans-libs-javacup.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41.0
+#Version 1.42.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/php/php.api.annotation/nbproject/org-netbeans-modules-php-api-annotation.sig b/php/php.api.annotation/nbproject/org-netbeans-modules-php-api-annotation.sig
index d0fd887..4ee07b3 100644
--- a/php/php.api.annotation/nbproject/org-netbeans-modules-php-api-annotation.sig
+++ b/php/php.api.annotation/nbproject/org-netbeans-modules-php-api-annotation.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.35
+#Version 0.36
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/php/php.api.documentation/nbproject/org-netbeans-modules-php-api-documentation.sig b/php/php.api.documentation/nbproject/org-netbeans-modules-php-api-documentation.sig
index c5b0db5..3bee54c 100644
--- a/php/php.api.documentation/nbproject/org-netbeans-modules-php-api-documentation.sig
+++ b/php/php.api.documentation/nbproject/org-netbeans-modules-php-api-documentation.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.30
+#Version 0.31
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/php/php.api.editor/nbproject/org-netbeans-modules-php-api-editor.sig b/php/php.api.editor/nbproject/org-netbeans-modules-php-api-editor.sig
index 6cefdc6..704ba52 100644
--- a/php/php.api.editor/nbproject/org-netbeans-modules-php-api-editor.sig
+++ b/php/php.api.editor/nbproject/org-netbeans-modules-php-api-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.44
+#Version 0.45
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/php/php.api.executable/nbproject/org-netbeans-modules-php-api-executable.sig b/php/php.api.executable/nbproject/org-netbeans-modules-php-api-executable.sig
index 28855f1..771bbc2 100644
--- a/php/php.api.executable/nbproject/org-netbeans-modules-php-api-executable.sig
+++ b/php/php.api.executable/nbproject/org-netbeans-modules-php-api-executable.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.47
+#Version 0.48
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/php/php.api.framework/nbproject/org-netbeans-modules-php-api-framework.sig b/php/php.api.framework/nbproject/org-netbeans-modules-php-api-framework.sig
index 2179074..952a264 100644
--- a/php/php.api.framework/nbproject/org-netbeans-modules-php-api-framework.sig
+++ b/php/php.api.framework/nbproject/org-netbeans-modules-php-api-framework.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.42
+#Version 0.43
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/php/php.api.phpmodule/nbproject/org-netbeans-modules-php-api-phpmodule.sig b/php/php.api.phpmodule/nbproject/org-netbeans-modules-php-api-phpmodule.sig
index 0e63028..980d2b6 100644
--- a/php/php.api.phpmodule/nbproject/org-netbeans-modules-php-api-phpmodule.sig
+++ b/php/php.api.phpmodule/nbproject/org-netbeans-modules-php-api-phpmodule.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.84
+#Version 2.85
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/php/php.api.templates/nbproject/org-netbeans-modules-php-api-templates.sig b/php/php.api.templates/nbproject/org-netbeans-modules-php-api-templates.sig
index 355f977..1f2ec0e 100644
--- a/php/php.api.templates/nbproject/org-netbeans-modules-php-api-templates.sig
+++ b/php/php.api.templates/nbproject/org-netbeans-modules-php-api-templates.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.26
+#Version 0.27
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/php/php.api.testing/nbproject/org-netbeans-modules-php-api-testing.sig b/php/php.api.testing/nbproject/org-netbeans-modules-php-api-testing.sig
index 00c5c84..7bd850a 100644
--- a/php/php.api.testing/nbproject/org-netbeans-modules-php-api-testing.sig
+++ b/php/php.api.testing/nbproject/org-netbeans-modules-php-api-testing.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.36
+#Version 0.37
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/php/php.composer/nbproject/org-netbeans-modules-php-composer.sig b/php/php.composer/nbproject/org-netbeans-modules-php-composer.sig
index d13570a..0e35e4b 100644
--- a/php/php.composer/nbproject/org-netbeans-modules-php-composer.sig
+++ b/php/php.composer/nbproject/org-netbeans-modules-php-composer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.47
+#Version 0.48
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/LineBreakpoint.java b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/LineBreakpoint.java
index 5021118..199e74f 100644
--- a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/LineBreakpoint.java
+++ b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/LineBreakpoint.java
@@ -104,7 +104,7 @@
                 DataObject dataObject = DataEditorSupport.findDataObject(myLine);
                 EditorCookie editorCookie = (EditorCookie) dataObject.getLookup().lookup(EditorCookie.class);
                 final StyledDocument styledDocument = editorCookie.getDocument();
-                if (styledDocument != null && styledDocument instanceof BaseDocument) {
+                if (styledDocument instanceof BaseDocument) {
                     try {
                         final BaseDocument baseDocument = (BaseDocument) styledDocument;
                         Source source = Source.create(baseDocument);
@@ -113,7 +113,7 @@
                             @Override
                             public void run(ResultIterator resultIterator) throws Exception {
                                 Parser.Result parserResult = resultIterator.getParserResult();
-                                if (parserResult != null && parserResult instanceof PHPParseResult) {
+                                if (parserResult instanceof PHPParseResult) {
                                     PHPParseResult phpParserResult = (PHPParseResult) parserResult;
                                     int rowStart = LineDocumentUtils.getLineStartFromIndex(baseDocument, myLine.getLineNumber());
                                     int contentStart = Utilities.getRowFirstNonWhite(baseDocument, rowStart);
diff --git a/php/php.editor/nbproject/org-netbeans-modules-php-editor.sig b/php/php.editor/nbproject/org-netbeans-modules-php-editor.sig
index 5a859f8..42e5046 100644
--- a/php/php.editor/nbproject/org-netbeans-modules-php-editor.sig
+++ b/php/php.editor/nbproject/org-netbeans-modules-php-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.17.0
+#Version 2.18.0
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/completion/DocRenderer.java b/php/php.editor/src/org/netbeans/modules/php/editor/completion/DocRenderer.java
index ea38ac6e..d2df49d 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/completion/DocRenderer.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/completion/DocRenderer.java
@@ -257,7 +257,7 @@
             LINK_TAGS.add("@use"); // NOI18N
         }
         private final CCDocHtmlFormatter header;
-        private final StringBuilder phpDoc = new StringBuilder();;
+        private final StringBuilder phpDoc = new StringBuilder();
         private final PhpElement indexedElement;
         private final List<String> links = new ArrayList<>();
         private final ASTNode node;
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/indent/FormatVisitor.java b/php/php.editor/src/org/netbeans/modules/php/editor/indent/FormatVisitor.java
index 521f2d1..b23284d 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/indent/FormatVisitor.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/indent/FormatVisitor.java
@@ -1331,7 +1331,7 @@
         }
 
         ASTNode body = node.getStatement();
-        if (body != null && (body instanceof Block && !((Block) body).isCurly())) {
+        if (body instanceof Block && !((Block) body).isCurly()) {
             addAllUntilOffset(body.getStartOffset());
             formatTokens.add(new FormatToken.IndentToken(body.getStartOffset(), options.indentSize));
             scan(node.getStatement());
@@ -1398,7 +1398,7 @@
             formatTokens.add(new FormatToken(FormatToken.Kind.HAS_NEWLINE_WITHIN_FOR, ts.offset() + ts.token().length()));
         }
         ASTNode body = node.getBody();
-        if (body != null && (body instanceof Block && !((Block) body).isCurly())) {
+        if (body instanceof Block && !((Block) body).isCurly()) {
             addAllUntilOffset(body.getStartOffset());
             formatTokens.add(new FormatToken.IndentToken(body.getStartOffset(), options.indentSize));
             scan(node.getBody());
@@ -1924,7 +1924,7 @@
         formatTokens.add(new FormatToken.IndentToken(ts.offset(), -1 * options.continualIndentSize));
         // #268541
         boolean isTrueStatementCurly = false;
-        if (trueStatement != null && trueStatement instanceof Block && !((Block) trueStatement).isCurly()) {
+        if (trueStatement instanceof Block && !((Block) trueStatement).isCurly()) {
             isCurly = false;
             addAllUntilOffset(trueStatement.getStartOffset());
             formatTokens.add(new FormatToken.IndentToken(trueStatement.getStartOffset(), options.indentSize));
@@ -1942,7 +1942,7 @@
             scan(trueStatement);
         }
         Statement falseStatement = node.getFalseStatement();
-        if (falseStatement != null && falseStatement instanceof Block && !((Block) falseStatement).isCurly()
+        if (falseStatement instanceof Block && !((Block) falseStatement).isCurly()
                 && !(falseStatement instanceof IfStatement)) {
             isCurly = false;
             while (ts.moveNext() && ts.offset() < falseStatement.getStartOffset()) {
@@ -2278,7 +2278,7 @@
     public void visit(WhileStatement node) {
         scan(node.getCondition());
         ASTNode body = node.getBody();
-        if (body != null && (body instanceof Block && !((Block) body).isCurly())) {
+        if (body instanceof Block && !((Block) body).isCurly()) {
             addAllUntilOffset(body.getStartOffset());
             formatTokens.add(new FormatToken.IndentToken(body.getStartOffset(), options.indentSize));
             scan(node.getBody());
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/model/FindUsageSupport.java b/php/php.editor/src/org/netbeans/modules/php/editor/model/FindUsageSupport.java
index 095f7b5..bc00d8a 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/model/FindUsageSupport.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/model/FindUsageSupport.java
@@ -114,7 +114,7 @@
                     @Override
                     public void run(ResultIterator resultIterator) throws Exception {
                         Result parameter = resultIterator.getParserResult();
-                        if (parameter != null && parameter instanceof PHPParseResult) {
+                        if (parameter instanceof PHPParseResult) {
                             Model model = ModelFactory.getModel((PHPParseResult) parameter);
                             ModelVisitor modelVisitor = model.getModelVisitor();
                             retval.addAll(modelVisitor.getOccurence(element));
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/EditorSupportImpl.java b/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/EditorSupportImpl.java
index 4b2a79c..c665e6c 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/EditorSupportImpl.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/EditorSupportImpl.java
@@ -82,7 +82,7 @@
                     @Override
                     public void run(ResultIterator resultIterator) throws Exception {
                         Parser.Result pr = resultIterator.getParserResult();
-                        if (pr != null && pr instanceof PHPParseResult) {
+                        if (pr instanceof PHPParseResult) {
                             Model model = ModelFactory.getModel((PHPParseResult) pr);
                             FileScope fileScope = model.getFileScope();
                             Collection<? extends TypeScope> allTypes = ModelUtils.getDeclaredTypes(fileScope);
@@ -109,7 +109,7 @@
                     @Override
                     public void run(ResultIterator resultIterator) throws Exception {
                         Parser.Result pr = resultIterator.getParserResult();
-                        if (pr != null && pr instanceof PHPParseResult) {
+                        if (pr instanceof PHPParseResult) {
                             Model model = ModelFactory.getModel((PHPParseResult) pr);
                             FileScope fileScope = model.getFileScope();
                             Collection<? extends ClassScope> allClasses = ModelUtils.getDeclaredClasses(fileScope);
@@ -156,7 +156,7 @@
                     @Override
                     public void run(ResultIterator resultIterator) throws Exception {
                         Parser.Result pr = resultIterator.getParserResult();
-                        if (pr != null && pr instanceof PHPParseResult) {
+                        if (pr instanceof PHPParseResult) {
                             Model model = ModelFactory.getModel((PHPParseResult) pr);
                             retval.add(getPhpBaseElement(model.getVariableScopeForNamedElement(offset)));
                         }
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Parser.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Parser.java
index baee407..9a904c9 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Parser.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Parser.java
@@ -2442,7 +2442,7 @@
     protected final static Integer STATIC = Integer.valueOf(BodyDeclaration.Modifier.STATIC);
     protected final static Integer READONLY = Integer.valueOf(BodyDeclaration.Modifier.READONLY);
 
-    private ErrorStrategy defaultStrategy = new DefaultErrorStrategy();;
+    private ErrorStrategy defaultStrategy = new DefaultErrorStrategy();
     private ErrorStrategy errorStrategy = defaultStrategy;
 
     private ParserErrorHandler errorHandler = null;
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/PHPParseResult.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/PHPParseResult.java
index 889a2bf..87c134e 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/PHPParseResult.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/PHPParseResult.java
@@ -70,6 +70,7 @@
     /**
      * @deprecated Use {@link #getModel(org.netbeans.modules.php.editor.model.Model.Type)} instead.
      */
+    @Deprecated
     public synchronized Model getModel(boolean extended) {
         return extended ? getModel(Type.EXTENDED) : getModel(Type.COMMON);
     }
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/api/Utils.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/api/Utils.java
index fbc3002..ee2e2e7 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/api/Utils.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/api/Utils.java
@@ -337,7 +337,7 @@
     public static List<PHPDocVarTypeTag> getPropertyTags(Program root, ClassDeclaration node) {
         List<PHPDocVarTypeTag> tags = new ArrayList<>();
         Comment comment = Utils.getCommentForNode(root, node);
-        if (comment != null && (comment instanceof PHPDocBlock)) {
+        if (comment instanceof PHPDocBlock) {
             PHPDocBlock phpDoc = (PHPDocBlock) comment;
             for (PHPDocTag tag : phpDoc.getTags()) {
                 if (tag.getKind().equals(PHPDocTag.Type.PROPERTY)
diff --git a/php/php.latte/nbproject/project.properties b/php/php.latte/nbproject/project.properties
index 2aaf46b..0f4ec98 100644
--- a/php/php.latte/nbproject/project.properties
+++ b/php/php.latte/nbproject/project.properties
@@ -16,5 +16,3 @@
 # under the License.
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
-nashorn.prepend=${basedir}/../libs.nashorn/external/nashorn-02f810c26ff9-patched.jar
-bootclasspath.prepend=${nashorn.prepend}${path.separator}${basedir}/../libs.nashorn/external/asm-all-4.0.jar
diff --git a/php/php.project/nbproject/org-netbeans-modules-php-project.sig b/php/php.project/nbproject/org-netbeans-modules-php-project.sig
index bd57278..f5125c6 100644
--- a/php/php.project/nbproject/org-netbeans-modules-php-project.sig
+++ b/php/php.project/nbproject/org-netbeans-modules-php-project.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.158
+#Version 2.159
 
 CLSS public abstract interface java.beans.PropertyChangeListener
 intf java.util.EventListener
diff --git a/php/php.project/src/org/netbeans/modules/php/project/PhpProject.java b/php/php.project/src/org/netbeans/modules/php/project/PhpProject.java
index 9043788..908325e 100644
--- a/php/php.project/src/org/netbeans/modules/php/project/PhpProject.java
+++ b/php/php.project/src/org/netbeans/modules/php/project/PhpProject.java
@@ -1034,7 +1034,7 @@
         public List<Object> getTestSourceRoots(Collection<SourceGroup> createdSourceRoots, FileObject refFileObject) {
             ArrayList<Object> folders = new ArrayList<>();
             Project p = FileOwnerQuery.getOwner(refFileObject);
-            if (p != null && (p instanceof PhpProject)) {
+            if (p instanceof PhpProject) {
                 List<FileObject> seleniumDirectories = ProjectPropertiesSupport.getSeleniumDirectories((PhpProject) p, true);
                 SourceGroup[] sourceGroups = PhpProjectUtils.getSourceGroups((PhpProject) p);
                 for (SourceGroup sg : sourceGroups) {
diff --git a/php/php.refactoring/src/org/netbeans/modules/refactoring/php/RefactoringTask.java b/php/php.refactoring/src/org/netbeans/modules/refactoring/php/RefactoringTask.java
index 45a5288..5ada2ed 100644
--- a/php/php.refactoring/src/org/netbeans/modules/refactoring/php/RefactoringTask.java
+++ b/php/php.refactoring/src/org/netbeans/modules/refactoring/php/RefactoringTask.java
@@ -114,7 +114,7 @@
         @Override
         public void run(ResultIterator resultIterator) throws Exception {
             Result parserResult = resultIterator.getParserResult();
-            if (parserResult != null && parserResult instanceof PHPParseResult) {
+            if (parserResult instanceof PHPParseResult) {
                 Program root = RefactoringUtils.getRoot((PHPParseResult) parserResult);
                 if (root != null) {
                     uiHolder = createRefactoringUIHolder((PHPParseResult) parserResult);
diff --git a/php/php.refactoring/src/org/netbeans/modules/refactoring/php/findusages/WhereUsedSupport.java b/php/php.refactoring/src/org/netbeans/modules/refactoring/php/findusages/WhereUsedSupport.java
index 48c8961..08ebb26 100644
--- a/php/php.refactoring/src/org/netbeans/modules/refactoring/php/findusages/WhereUsedSupport.java
+++ b/php/php.refactoring/src/org/netbeans/modules/refactoring/php/findusages/WhereUsedSupport.java
@@ -205,7 +205,7 @@
                             @Override
                             public void run(ResultIterator resultIterator) throws Exception {
                                 Result parserResult = resultIterator.getParserResult();
-                                if (parserResult != null && parserResult instanceof PHPParseResult) {
+                                if (parserResult instanceof PHPParseResult) {
                                     Model modelForDeclaration = ModelFactory.getModel((PHPParseResult) parserResult);
                                     declarations.add(modelForDeclaration.findDeclaration(declarationElement));
                                 }
diff --git a/php/selenium2.php/nbproject/project.properties b/php/selenium2.php/nbproject/project.properties
index 7f641b7..3b054ca 100644
--- a/php/selenium2.php/nbproject/project.properties
+++ b/php/selenium2.php/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/php/websvc.saas.codegen.php/nbproject/project.properties b/php/websvc.saas.codegen.php/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/php/websvc.saas.codegen.php/nbproject/project.properties
+++ b/php/websvc.saas.codegen.php/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/platform/api.annotations.common/arch.xml b/platform/api.annotations.common/arch.xml
index 4eb847d..8bca98a 100644
--- a/platform/api.annotations.common/arch.xml
+++ b/platform/api.annotations.common/arch.xml
@@ -480,7 +480,7 @@
  <answer id="deploy-packages">
   <p>
    Only API packages are exported. JDK bug workarounded in build harness
-   (<a href="http://www.netbeans.org/issues/show_bug.cgi?id=152562">#152562</a>).
+   (<a href="https://bz.apache.org/netbeans/show_bug.cgi?id=152562">#152562</a>).
   </p>
  </answer>
 
diff --git a/platform/api.annotations.common/nbproject/org-netbeans-api-annotations-common.sig b/platform/api.annotations.common/nbproject/org-netbeans-api-annotations-common.sig
index abbd137..6b7b12d 100644
--- a/platform/api.annotations.common/nbproject/org-netbeans-api-annotations-common.sig
+++ b/platform/api.annotations.common/nbproject/org-netbeans-api-annotations-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.45
+#Version 1.46
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/api.annotations.common/nbproject/project.properties b/platform/api.annotations.common/nbproject/project.properties
index 2893b39..d88d013 100644
--- a/platform/api.annotations.common/nbproject/project.properties
+++ b/platform/api.annotations.common/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.source=1.8
-javac.compilerargs=-Xlint -Xlint:-serial -Werror
+javac.compilerargs=-Xlint -Xlint:-serial -Xlint:-options -Werror
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 module.javadoc.packages=org.netbeans.api.annotations.common
diff --git a/platform/api.annotations.common/src/org/netbeans/api/annotations/common/StaticResource.java b/platform/api.annotations.common/src/org/netbeans/api/annotations/common/StaticResource.java
index 9233217..0339c64 100644
--- a/platform/api.annotations.common/src/org/netbeans/api/annotations/common/StaticResource.java
+++ b/platform/api.annotations.common/src/org/netbeans/api/annotations/common/StaticResource.java
@@ -42,6 +42,7 @@
     /**
      * If true, permit the resource to be in the classpath.
      * By default, it may only be in the sourcepath.
+     * @return true to search in classpath
      */
     boolean searchClasspath() default false;
 
@@ -49,6 +50,7 @@
      * If true, consider the resource path to be relative to the current package.
      * ({@code ../} sequences are permitted.)
      * By default, it must be an absolute path (not starting with {@code /}).
+     * @return true to consider resource path to be relative to current package
      */
     boolean relative() default false;
 
diff --git a/platform/api.annotations.common/src/org/netbeans/api/annotations/common/SuppressWarnings.java b/platform/api.annotations.common/src/org/netbeans/api/annotations/common/SuppressWarnings.java
index f987f37..bcfef95 100644
--- a/platform/api.annotations.common/src/org/netbeans/api/annotations/common/SuppressWarnings.java
+++ b/platform/api.annotations.common/src/org/netbeans/api/annotations/common/SuppressWarnings.java
@@ -36,6 +36,7 @@
 
     /**
      * The names of the warnings to suppress.
+     * @return list of warning to supress
      */
     String[] value() default {};
 
diff --git a/platform/api.htmlui/nbproject/org-netbeans-api-htmlui.sig b/platform/api.htmlui/nbproject/org-netbeans-api-htmlui.sig
index 7e26987..c1c7b6e 100644
--- a/platform/api.htmlui/nbproject/org-netbeans-api-htmlui.sig
+++ b/platform/api.htmlui/nbproject/org-netbeans-api-htmlui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.25
+#Version 1.26
 
 CLSS public abstract interface !annotation java.lang.FunctionalInterface
  anno 0 java.lang.annotation.Documented()
@@ -63,11 +63,13 @@
 innr public final static Builder
 intf java.lang.annotation.Annotation
 meth public abstract !hasdefault java.lang.String className()
+meth public abstract !hasdefault java.lang.String[] resources()
 meth public abstract !hasdefault java.lang.String[] techIds()
 meth public abstract java.lang.String url()
 
 CLSS public final static org.netbeans.api.htmlui.HTMLDialog$Builder
  outer org.netbeans.api.htmlui.HTMLDialog
+meth public !varargs org.netbeans.api.htmlui.HTMLDialog$Builder addResources(java.lang.String[])
 meth public !varargs org.netbeans.api.htmlui.HTMLDialog$Builder addTechIds(java.lang.String[])
 meth public <%0 extends java.lang.Object> {%%0} component(java.lang.Class<{%%0}>)
 meth public java.lang.String showAndWait()
@@ -75,7 +77,7 @@
 meth public static org.netbeans.api.htmlui.HTMLDialog$Builder newDialog(java.lang.String)
 meth public void show(org.netbeans.api.htmlui.HTMLDialog$OnSubmit)
 supr java.lang.Object
-hfds onPageLoad,techIds,url
+hfds onPageLoad,resources,techIds,url
 
 CLSS public abstract interface static org.netbeans.api.htmlui.HTMLDialog$OnSubmit
  outer org.netbeans.api.htmlui.HTMLDialog
@@ -108,9 +110,10 @@
 meth public boolean isWindow()
 meth public boolean onSubmit(java.lang.String)
 meth public java.lang.ClassLoader getClassLoader()
+meth public java.lang.String[] getResources()
 meth public java.lang.String[] getTechIds()
 meth public java.net.URL getPage()
 meth public org.openide.util.Lookup onPageLoad()
 supr java.lang.Object
-hfds component,lifeCycleCallback,loader,onPageLoad,onSubmit,techIds,url
+hfds component,lifeCycleCallback,loader,onPageLoad,onSubmit,resources,techIds,url
 
diff --git a/platform/api.intent/nbproject/org-netbeans-api-intent.sig b/platform/api.intent/nbproject/org-netbeans-api-intent.sig
index ad9ace8..305718d 100644
--- a/platform/api.intent/nbproject/org-netbeans-api-intent.sig
+++ b/platform/api.intent/nbproject/org-netbeans-api-intent.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.19
+#Version 1.20
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/api.intent/nbproject/project.properties b/platform/api.intent/nbproject/project.properties
index 47af285..14a99f1 100644
--- a/platform/api.intent/nbproject/project.properties
+++ b/platform/api.intent/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 is.autoload=true
 javac.source=1.8
-javac.compilerargs=-Xlint -Xlint:-serial -Werror
+javac.compilerargs=-Xlint -Xlint:-serial -Xlint:-options -Werror
 javadoc.arch=${basedir}/arch.xml
diff --git a/platform/api.io/nbproject/org-netbeans-api-io.sig b/platform/api.io/nbproject/org-netbeans-api-io.sig
index cecf0f3..700fdae 100644
--- a/platform/api.io/nbproject/org-netbeans-api-io.sig
+++ b/platform/api.io/nbproject/org-netbeans-api-io.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.20
+#Version 1.21
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/api.io/nbproject/project.properties b/platform/api.io/nbproject/project.properties
index f7dcee5..6a8c641 100644
--- a/platform/api.io/nbproject/project.properties
+++ b/platform/api.io/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/api.progress.compat8/nbproject/org-netbeans-api-progress-compat8.sig b/platform/api.progress.compat8/nbproject/org-netbeans-api-progress-compat8.sig
index 2476521..c203817 100644
--- a/platform/api.progress.compat8/nbproject/org-netbeans-api-progress-compat8.sig
+++ b/platform/api.progress.compat8/nbproject/org-netbeans-api-progress-compat8.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64
+#Version 1.65
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/api.progress.compat8/nbproject/project.properties b/platform/api.progress.compat8/nbproject/project.properties
index 7f098b0..eb9bf48 100644
--- a/platform/api.progress.compat8/nbproject/project.properties
+++ b/platform/api.progress.compat8/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/platform/api.progress.nb/nbproject/org-netbeans-api-progress-nb.sig b/platform/api.progress.nb/nbproject/org-netbeans-api-progress-nb.sig
index 3ec5ca3..9842673 100644
--- a/platform/api.progress.nb/nbproject/org-netbeans-api-progress-nb.sig
+++ b/platform/api.progress.nb/nbproject/org-netbeans-api-progress-nb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.65
+#Version 1.66
 
 CLSS public abstract interface java.lang.AutoCloseable
 meth public abstract void close() throws java.lang.Exception
diff --git a/platform/api.progress/nbproject/org-netbeans-api-progress.sig b/platform/api.progress/nbproject/org-netbeans-api-progress.sig
index 0159d92..fd88556 100644
--- a/platform/api.progress/nbproject/org-netbeans-api-progress.sig
+++ b/platform/api.progress/nbproject/org-netbeans-api-progress.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.65
+#Version 1.66
 
 CLSS public abstract interface java.lang.AutoCloseable
 meth public abstract void close() throws java.lang.Exception
diff --git a/platform/api.progress/src/org/netbeans/api/progress/aggregate/AggregateProgressHandle.java b/platform/api.progress/src/org/netbeans/api/progress/aggregate/AggregateProgressHandle.java
index b04bb4a..4ae4dfa 100644
--- a/platform/api.progress/src/org/netbeans/api/progress/aggregate/AggregateProgressHandle.java
+++ b/platform/api.progress/src/org/netbeans/api/progress/aggregate/AggregateProgressHandle.java
@@ -174,6 +174,7 @@
     /**
      * @deprecated do, not use, for tests only
      */
+    @Deprecated
     int getCurrentProgress() {
         return current;
     }
diff --git a/platform/api.progress/src/org/netbeans/modules/progress/spi/RunOffEDTProvider.java b/platform/api.progress/src/org/netbeans/modules/progress/spi/RunOffEDTProvider.java
index c66d8d5..fdcbf6b 100644
--- a/platform/api.progress/src/org/netbeans/modules/progress/spi/RunOffEDTProvider.java
+++ b/platform/api.progress/src/org/netbeans/modules/progress/spi/RunOffEDTProvider.java
@@ -148,6 +148,7 @@
          * @since 1.30
          * @deprecated interface SwingProgress should be used instead.
          */
+        @Deprecated
         public void runOffEventThreadWithCustomDialogContent(
             final Runnable operation,
             final String dialogTitle,
diff --git a/platform/api.scripting/apichanges.xml b/platform/api.scripting/apichanges.xml
index 3ce0e45..10d3c23 100644
--- a/platform/api.scripting/apichanges.xml
+++ b/platform/api.scripting/apichanges.xml
@@ -62,7 +62,7 @@
               <a href="@TOP@/org/netbeans/api/scripting/Scripting.html">Scripting.createManager()</a>
               to obtain enhanced version of
               <a href="@JDK@/javax/script/ScriptEngineManager.html">ScriptEngineManager</a>
-              that can work well with <a href="http://graalvm.org">GraalVM</a>
+              that can work well with <a href="https://graalvm.org">GraalVM</a>
               languages registered via
               <a href="@TOP@/org/netbeans/spi/scripting/EngineProvider.html">EngineProvider</a>
           </description>
diff --git a/platform/api.scripting/arch.xml b/platform/api.scripting/arch.xml
index d9c571e..38bb0a6 100644
--- a/platform/api.scripting/arch.xml
+++ b/platform/api.scripting/arch.xml
@@ -61,7 +61,7 @@
 
 <!--
         <question id="arch-quality" when="init">
-            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
+            How will the <a href="https://netbeans.apache.org/participate/qualityevangelism.html">quality</a>
             of your code be tested and
             how are future regressions going to be prevented?
             <hint>
@@ -153,13 +153,13 @@
             <a href="@TOP@/org/netbeans/api/scripting/Scripting.html">Scripting</a>
             factory methods. Alternatively you can implement and register
             <a href="@TOP@/org/netbeans/spi/scripting/EngineProvider.html">EngineProvider</a>
-            as in the <a href="#java-org.netbeans.spi.scripting">dynamic registration use-case</a>.
+            as in the <a href="@TOP@architecture-summary.html#java-org.netbeans.spi.scripting">dynamic registration use-case</a>.
           </p>
           <p>
             In any case don't forget to advertise your engine to the
               <a href="@org-openide-modules@/overview-summary.html">runtime container</a>
             via <code>OpenIDE-Module-Providers: javax.script.ScriptEngine."engineName"</code>
-            tag as specified by <a href="#property-manifest.ScriptEngine">manifest registration</a>
+            tag as specified by <a href="@TOP@architecture-summary.html#property-manifest.ScriptEngine">manifest registration</a>
             API.
           </p>
       </usecase>
diff --git a/platform/api.scripting/nbproject/org-netbeans-api-scripting.sig b/platform/api.scripting/nbproject/org-netbeans-api-scripting.sig
index 6a30c7c..fd2509b 100644
--- a/platform/api.scripting/nbproject/org-netbeans-api-scripting.sig
+++ b/platform/api.scripting/nbproject/org-netbeans-api-scripting.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.14
+#Version 1.15
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/api.search/nbproject/org-netbeans-api-search.sig b/platform/api.search/nbproject/org-netbeans-api-search.sig
index bae5f91..3708585 100644
--- a/platform/api.search/nbproject/org-netbeans-api-search.sig
+++ b/platform/api.search/nbproject/org-netbeans-api-search.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.38
+#Version 1.39
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/api.search/nbproject/project.properties b/platform/api.search/nbproject/project.properties
index 40a3251..b56cd50 100644
--- a/platform/api.search/nbproject/project.properties
+++ b/platform/api.search/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 is.autoload=true
 javac.source=1.8
-javac.compilerargs=-Xlint:all -Xlint:-serial -Xlint:-processing -Werror
+javac.compilerargs=-Xlint:all -Xlint:-serial -Xlint:-processing -Xlint:-options -Werror
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/api.search/test/qa-functional/data/projects/UtilitiesTestProject/nbproject/project.properties b/platform/api.search/test/qa-functional/data/projects/UtilitiesTestProject/nbproject/project.properties
index efea7c7..c83a143 100644
--- a/platform/api.search/test/qa-functional/data/projects/UtilitiesTestProject/nbproject/project.properties
+++ b/platform/api.search/test/qa-functional/data/projects/UtilitiesTestProject/nbproject/project.properties
@@ -39,7 +39,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.6
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/platform/api.templates/nbproject/org-netbeans-api-templates.sig b/platform/api.templates/nbproject/org-netbeans-api-templates.sig
index 8a1003e..6fe3e9e 100644
--- a/platform/api.templates/nbproject/org-netbeans-api-templates.sig
+++ b/platform/api.templates/nbproject/org-netbeans-api-templates.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.25
+#Version 1.26
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/api.visual/nbproject/org-netbeans-api-visual.sig b/platform/api.visual/nbproject/org-netbeans-api-visual.sig
index 9fd7dff..75c2654 100644
--- a/platform/api.visual/nbproject/org-netbeans-api-visual.sig
+++ b/platform/api.visual/nbproject/org-netbeans-api-visual.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.65
+#Version 2.66
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/api.visual/src/org/netbeans/api/visual/widget/Widget.java b/platform/api.visual/src/org/netbeans/api/visual/widget/Widget.java
index 72ea9e2..16663f1 100644
--- a/platform/api.visual/src/org/netbeans/api/visual/widget/Widget.java
+++ b/platform/api.visual/src/org/netbeans/api/visual/widget/Widget.java
@@ -254,7 +254,7 @@
         child.updateResources(this, true);
         child.revalidate ();
         revalidate ();
-        if (accessibleContext != null  &&  accessibleContext instanceof WidgetAccessibleContext)
+        if (accessibleContext instanceof WidgetAccessibleContext)
             ((WidgetAccessibleContext) accessibleContext).notifyChildAdded (this, child);
         scene.dispatchNotifyAdded (child);
     }
@@ -272,7 +272,7 @@
         child.updateResources(this, false);
         child.revalidate ();
         revalidate ();
-        if (accessibleContext != null  &&  accessibleContext instanceof WidgetAccessibleContext)
+        if (accessibleContext instanceof WidgetAccessibleContext)
             ((WidgetAccessibleContext) accessibleContext).notifyChildRemoved (this, child);
         scene.dispatchNotifyRemoved (child);
     }
diff --git a/platform/autoupdate.services/nbproject/org-netbeans-modules-autoupdate-services.sig b/platform/autoupdate.services/nbproject/org-netbeans-modules-autoupdate-services.sig
index c34cd27..f1b8638 100644
--- a/platform/autoupdate.services/nbproject/org-netbeans-modules-autoupdate-services.sig
+++ b/platform/autoupdate.services/nbproject/org-netbeans-modules-autoupdate-services.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.72
+#Version 1.73
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/ModuleUpdateUnitImpl.java b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/ModuleUpdateUnitImpl.java
index b36c4be..fa13c28 100644
--- a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/ModuleUpdateUnitImpl.java
+++ b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/ModuleUpdateUnitImpl.java
@@ -83,7 +83,7 @@
                 UpdateElementImpl visibleImpl = Trampoline.API.impl(visibleAncestor.getInstalled());
                 String visTargetCluster = null;
                 String visCat = null;
-                if (visibleImpl != null && visibleImpl instanceof ModuleUpdateElementImpl) {
+                if (visibleImpl instanceof ModuleUpdateElementImpl) {
                     visTargetCluster = ((ModuleUpdateElementImpl) visibleImpl).getInstallationCluster();
                     visCat = visibleImpl.getCategory();
                 }
diff --git a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/OperationValidator.java b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/OperationValidator.java
index 4908c41..edce93e 100644
--- a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/OperationValidator.java
+++ b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/services/OperationValidator.java
@@ -516,7 +516,7 @@
             boolean res = false;
             UpdateElementImpl impl = Trampoline.API.impl (uElement);
             assert impl != null;
-            if (impl != null && impl instanceof NativeComponentUpdateElementImpl) {
+            if (impl instanceof NativeComponentUpdateElementImpl) {
                 NativeComponentUpdateElementImpl ni = (NativeComponentUpdateElementImpl) impl;
                 if (ni.getInstallInfo ().getCustomInstaller () != null) {
                     res = containsElement (uElement, unit);
@@ -538,7 +538,7 @@
             boolean res = false;
             UpdateElementImpl impl = Trampoline.API.impl (uElement);
             assert impl != null;
-            if (impl != null && impl instanceof NativeComponentUpdateElementImpl) {
+            if (impl instanceof NativeComponentUpdateElementImpl) {
                 NativeComponentUpdateElementImpl ni = (NativeComponentUpdateElementImpl) impl;
                 res = ni.getNativeItem ().getUpdateItemDeploymentImpl ().getCustomUninstaller () != null;
             }
diff --git a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/NetworkAccess.java b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/NetworkAccess.java
index 1560eda..0c7cbac 100644
--- a/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/NetworkAccess.java
+++ b/platform/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/NetworkAccess.java
@@ -100,7 +100,7 @@
                         listener.notifyException (ix);
                     } catch (ExecutionException ex) {
                         Throwable t = ex.getCause();
-                        if(t!=null && t instanceof Exception) {
+                        if(t instanceof Exception) {
                             listener.notifyException ((Exception) t);
                         } else {
                             listener.notifyException (ex);
diff --git a/platform/autoupdate.ui/nbproject/org-netbeans-modules-autoupdate-ui.sig b/platform/autoupdate.ui/nbproject/org-netbeans-modules-autoupdate-ui.sig
index 592941f..b0958fe 100644
--- a/platform/autoupdate.ui/nbproject/org-netbeans-modules-autoupdate-ui.sig
+++ b/platform/autoupdate.ui/nbproject/org-netbeans-modules-autoupdate-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.63
+#Version 1.64
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/autoupdate.ui/src/org/netbeans/modules/autoupdate/ui/UnitTab.java b/platform/autoupdate.ui/src/org/netbeans/modules/autoupdate/ui/UnitTab.java
index d35c2b2..115faeb 100644
--- a/platform/autoupdate.ui/src/org/netbeans/modules/autoupdate/ui/UnitTab.java
+++ b/platform/autoupdate.ui/src/org/netbeans/modules/autoupdate/ui/UnitTab.java
@@ -1299,7 +1299,7 @@
         @Override
         protected boolean isEnabled(Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Update)) {
+            if (u instanceof Unit.Update) {
                 retval = u.canBeMarked();
             }
             return retval;
@@ -1386,7 +1386,7 @@
         @Override
         protected boolean isEnabled(Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Available)) {
+            if (u instanceof Unit.Available) {
                 retval = u.canBeMarked();
             }
             return retval;
@@ -1675,7 +1675,7 @@
 
         protected boolean isEnabled (Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 Unit.Installed i = (Unit.Installed)u;
                 if (!i.getRelevantElement ().isEnabled ()) {
                      retval = Unit.Installed.isOperationAllowed (u.updateUnit, u.getRelevantElement (), Containers.forEnable ());
@@ -1700,7 +1700,7 @@
             String category = uu.getCategoryName();
             List<Unit> units = model.getUnits();
             for (Unit u : units) {
-                if ((u != null) && (u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
+                if ((u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
                     Unit.Installed installed = (Unit.Installed) u;
                     if (!installed.getRelevantElement().isEnabled()) {
                         retval = Unit.Installed.isOperationAllowed(installed.updateUnit, installed.getRelevantElement(), Containers.forEnable());
@@ -1712,7 +1712,7 @@
         }
         @Override
         protected String getContextName (Unit u) {
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 return getActionName ()+ " \"" + u.getCategoryName () + "\"";
             }
             return getActionName ();
@@ -1726,7 +1726,7 @@
             int count = model.getRowCount ();
             for (int i = 0; i < count; i++) {
                 Unit u = model.getUnitAtRow (i);
-                if ((u != null) && (u instanceof Unit.Installed) && category.equals (u.getCategoryName ())) {
+                if ((u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
                     Unit.Installed installed = (Unit.Installed)u;
                     if (!installed.getRelevantElement().isEnabled() && !installed.updateUnit.isPending()) {
                         OperationInfo info = Containers.forEnable ().add (installed.updateUnit, installed.getRelevantElement ());
@@ -1807,7 +1807,7 @@
 
         protected boolean isEnabled (Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 Unit.Installed i = (Unit.Installed)u;
                 if (i.getRelevantElement ().isEnabled ()) {
                     retval = Unit.Installed.isOperationAllowed (u.updateUnit, u.getRelevantElement (), Containers.forDisable ());
@@ -1828,7 +1828,7 @@
         @Override
         protected boolean isEnabled(Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 Unit.Installed i = (Unit.Installed) u;
                 if (! i.getRelevantElement().isEnabled()) {
                     retval = Unit.Installed.isOperationAllowed(u.updateUnit, u.getRelevantElement(), Containers.forEnable());
@@ -1865,7 +1865,7 @@
 
         @Override
         protected String getContextName(Unit u) {
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 return getActionName() + " \"" + u.getDisplayName() + "\""; //NOI18N
             }
             return getActionName();
@@ -1881,7 +1881,7 @@
         @Override
         protected boolean isEnabled(Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 Unit.Installed i = (Unit.Installed) u;
                 if (i.getRelevantElement().isEnabled()) {
                     retval = Unit.Installed.isOperationAllowed(u.updateUnit, u.getRelevantElement(), Containers.forDisable());
@@ -1918,7 +1918,7 @@
 
         @Override
         protected String getContextName(Unit u) {
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 return getActionName() + " \"" + u.getDisplayName() + "\""; //NOI18N
             }
             return getActionName();
@@ -1934,7 +1934,7 @@
         @Override
         protected boolean isEnabled(Unit u) {
             boolean retval = false;
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 retval = ((Unit.Installed)u).isUninstallAllowed();
             }
             return retval;
@@ -1968,7 +1968,7 @@
 
         @Override
         protected String getContextName(Unit u) {
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 return getActionName() + " \"" + u.getDisplayName() + "\""; //NOI18N
             }
             return getActionName();
@@ -1988,7 +1988,7 @@
             String category = uu.getCategoryName();
             List<Unit> units = model.getUnits();
             for (Unit u : units) {
-                if ((u != null) && (u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
+                if ((u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
                     Unit.Installed installed = (Unit.Installed) u;
                     if (installed.getRelevantElement().isEnabled()) {
                         retval = Unit.Installed.isOperationAllowed(installed.updateUnit, installed.getRelevantElement(), Containers.forDisable());
@@ -2000,7 +2000,7 @@
         
         @Override
         protected String getContextName (Unit u) {
-            if ((u != null) && (u instanceof Unit.Installed)) {
+            if (u instanceof Unit.Installed) {
                 return getActionName ()+ " \"" + u.getCategoryName () + "\"";//NOI18N
             }
             return getActionName ();
@@ -2014,7 +2014,7 @@
             int count = model.getRowCount ();
             for (int i = 0; i < count; i++) {
                 Unit u = model.getUnitAtRow (i);
-                if ((u != null) && (u instanceof Unit.Installed) && category.equals (u.getCategoryName ())) {
+                if ((u instanceof Unit.Installed) && category.equals(u.getCategoryName())) {
                     Unit.Installed installed = (Unit.Installed)u;
                     if (installed.getRelevantElement().isEnabled() && !installed.updateUnit.isPending()) {
                         OperationInfo info = Containers.forDisable ().add (installed.updateUnit, installed.getRelevantElement ());
diff --git a/platform/core.io.ui/nbproject/project.properties b/platform/core.io.ui/nbproject/project.properties
index a0eb5a0..1e5e0ee 100644
--- a/platform/core.io.ui/nbproject/project.properties
+++ b/platform/core.io.ui/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
diff --git a/platform/core.multitabs/nbproject/org-netbeans-core-multitabs.sig b/platform/core.multitabs/nbproject/org-netbeans-core-multitabs.sig
index 067d538..12437e5 100644
--- a/platform/core.multitabs/nbproject/org-netbeans-core-multitabs.sig
+++ b/platform/core.multitabs/nbproject/org-netbeans-core-multitabs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.29.0
+#Version 1.30.0
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/ButtonPopupSwitcher.java b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/ButtonPopupSwitcher.java
index 5cc8eb9..c24c95e 100644
--- a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/ButtonPopupSwitcher.java
+++ b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/ButtonPopupSwitcher.java
@@ -205,8 +205,7 @@
     
     @Override
     public void mousePressed(MouseEvent e) {
-        int tabCount = controller.getTabModel().size();
-        if( pTable.onMouseEvent(e) && tabCount == 1 ) {
+        if( pTable.onMouseEvent(e) ) {
             hideCurrentPopup();
         }
         e.consume();
@@ -230,8 +229,8 @@
         p = SwingUtilities.convertPoint((Component) e.getSource(), p, pTable);
         if (pTable.contains(p)) {
             if( !pTable.onMouseEvent(e) ) {
-                final SwitcherTableItem item = pTable.getSelectedItem();
-                if (item != null) {
+                final DocumentSwitcherTable.Item item = pTable.getSelectedItem();
+                if (item != null && !item.isSeparator()) {
                     hideCurrentPopup();
                     item.activate();
                 }
@@ -343,7 +342,7 @@
                 break;
             case KeyEvent.VK_DELETE: {
                 final Item item = ( Item ) pTable.getSelectedItem();
-                if (item != null && TabDataRenderer.isClosable( item.getTabData() )) {
+                if (item != null) {
                     TabData tab = item.getTabData();
                     int tabIndex = controller.getTabModel().indexOf( tab );
                     if( tabIndex >= 0 ) {
@@ -355,6 +354,10 @@
                         selRow = Math.min( pTable.getModel().getRowCount()-1, selRow );
                         selCol = Math.min( pTable.getModel().getColumnCount()-1, selCol );
                         switched = true;
+                    } else if ( item.isSeparator() ){
+                        if( pTable.closeSelectedDocumentList() ) {
+                            SwingUtilities.invokeLater(this::hideCurrentPopup);
+                        }
                     }
                 }
                 break;
diff --git a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java
index d853f14..4ff3786 100644
--- a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java
+++ b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java
@@ -27,6 +27,8 @@
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
 import javax.swing.BorderFactory;
 import javax.swing.DefaultButtonModel;
 import javax.swing.Icon;
@@ -47,6 +49,7 @@
 import org.netbeans.swing.tabcontrol.TabbedContainer;
 import org.netbeans.swing.tabcontrol.event.TabActionEvent;
 import org.openide.awt.CloseButtonFactory;
+import org.openide.windows.TopComponent;
 
 /**
  * Slightly enhanced switcher table which adds close button to selected item
@@ -77,10 +80,8 @@
     }
 
     @Override
-    public SwitcherTableItem getSelectedItem() {
+    public Item getSelectedItem() {
         Item res = ( Item ) getValueAt(getSelectedRow(), getSelectedColumn());
-        if( null != res && res.isSeparator )
-            return null; //don't hide the popup when a project separator is selected
         return res;
     }
 
@@ -90,7 +91,7 @@
 
         boolean selected = row == getSelectedRow() &&
                 column == getSelectedColumn() && item != null;
-        boolean separator = null != item && item.isSeparator;
+        boolean separator = null != item && item.isSeparator();
 
         ITEM_BORDER.color = null;
         Component renComponent = super.prepareRenderer( renderer, row, column );
@@ -105,10 +106,10 @@
                 lbl.setBorder( ITEM_BORDER );
             }
         }
-        if( selected && !separator ) {
+        if( selected ) {
             JPanel res = new JPanel( new BorderLayout(5, 0) );
             res.add( renComponent, BorderLayout.CENTER );
-            if( TabDataRenderer.isClosable( item.getTabData() ) ) {
+            if( separator || TabDataRenderer.isClosable( item.getTabData() )) {
                 res.add( btnClose, BorderLayout.EAST );
             }
             res.setBackground( renComponent.getBackground() );
@@ -127,15 +128,20 @@
     private int lastCol = -1;
     private boolean inCloseButtonRect = false;
 
+    /**
+     * 
+     * @return True if popup window should be closed. (e.g. when no more 
+     * tabs are left opened)
+     */
     boolean onMouseEvent( MouseEvent e ) {
         Point p = e.getPoint();
         p = SwingUtilities.convertPoint((Component) e.getSource(), p, this);
         int selRow = getSelectedRow();
         int selCol = getSelectedColumn();
-        if( selRow < 0 || selCol < 0 )
+        if ( selRow < 0 || selCol < 0 )
             return false;
         Rectangle rect = getCellRect( selRow, selCol, false );
-        if( rect.contains( p ) ) {
+        if ( rect.contains( p ) ) {
             Dimension size = btnClose.getPreferredSize();
             int x = rect.x+rect.width-size.width;
             int y = rect.y + (rect.height-size.height)/2;
@@ -143,15 +149,18 @@
             boolean inButton = btnRect.contains( p );
             boolean mustRepaint = inCloseButtonRect != inButton;
             inCloseButtonRect = inButton;
-            if( inButton ) {
-                if( e.getID() == MouseEvent.MOUSE_PRESSED ) {
+            if ( inButton ) {
+                if ( e.getID() == MouseEvent.MOUSE_PRESSED ) {
                     Item item = ( Item ) getModel().getValueAt( selRow, selCol );
                     TabData tab = item.getTabData();
+                    int tabSize = controller.getTabModel().size();
                     int tabIndex = controller.getTabModel().indexOf( tab );
                     if( tabIndex >= 0 ) {
                         TabActionEvent tae = new TabActionEvent( this, TabbedContainer.COMMAND_CLOSE, tabIndex );
                         controller.postActionEvent( tae );
-                        return true;
+                        return tabSize == 1;
+                    } else if ( item.isSeparator() ) {
+                        return closeSelectedDocumentList();
                     }
                 }
             }
@@ -174,7 +183,50 @@
         }
         return null;
     }
+    /**
+     * Method closes tabs in selected document list
+     * 
+     * @return True if there are no more tabs left opened in other projects
+     */
+    boolean closeSelectedDocumentList() {
+        List<TabData> tabs = new ArrayList<>(controller.getTabModel().getTabs());
+        Item item = ( Item ) getModel().getValueAt( getSelectedRow(), getSelectedColumn());
+        ProjectProxy project = item.getProject();
+        ProjectSupport projectSupport = ProjectSupport.getDefault();
+        int numOfOtherTabs = 0;
+        for ( TabData tab : tabs ) {  
+            ProjectProxy projectForTab = projectSupport.getProjectForTab( tab );
+            if (( project == null && projectForTab == null ) || ( projectForTab != null && projectForTab.equals( project ))) {
+                Component tabComponent = tab.getComponent();
+                if (tabComponent instanceof TopComponent) {
+                    TopComponent curTC = (TopComponent) tabComponent;
+                    /* As in o.n.core.windows.actions.ActionUtils.closeAll(Iterable<TopComponent>).
+                    We have to be a little more general here since, theoretically, there could be
+                    tab components that do not extend from TopComponent. */
+                    if(!isClosingEnabled(curTC)) {
+                        continue;
+                    }
+                    curTC.putClientProperty("inCloseAll", Boolean.TRUE);
+                    if (!curTC.close()) {
+                        break;
+                    }
+                } else {
+                    int tabIndex = controller.getTabModel().indexOf( tab );
+                    TabActionEvent tae = new TabActionEvent( this, TabbedContainer.COMMAND_CLOSE, tabIndex );
+                    controller.postActionEvent( tae );
+                }
+            } else {
+                numOfOtherTabs++;
+            }
+        }
+        return numOfOtherTabs == 0;
+    }
 
+    // Copied from o.n.core.windows.Switches.isClosingEnabled (in private package).
+    private static boolean isClosingEnabled( TopComponent tc ) {
+        return !Boolean.TRUE.equals(tc.getClientProperty(TopComponent.PROP_CLOSING_DISABLED));
+    }
+    
     private JButton createCloseButton() {
         JButton res = CloseButtonFactory.createBigCloseButton();
         res.setModel( new DefaultButtonModel() {
@@ -223,6 +275,10 @@
         public TabData getTabData() {
             return tabData;
         }
+        
+        public boolean isSeparator() {
+            return isSeparator;
+        }
 
         @Override
         public int compareTo( Object o ) {
diff --git a/platform/core.multiview/nbproject/org-netbeans-core-multiview.sig b/platform/core.multiview/nbproject/org-netbeans-core-multiview.sig
index dd6680e..0effc4c 100644
--- a/platform/core.multiview/nbproject/org-netbeans-core-multiview.sig
+++ b/platform/core.multiview/nbproject/org-netbeans-core-multiview.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.61
+#Version 1.62
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/core.multiview/src/org/netbeans/core/multiview/MultiViewPeer.java b/platform/core.multiview/src/org/netbeans/core/multiview/MultiViewPeer.java
index 7e4f9e69ad..4b0e299 100644
--- a/platform/core.multiview/src/org/netbeans/core/multiview/MultiViewPeer.java
+++ b/platform/core.multiview/src/org/netbeans/core/multiview/MultiViewPeer.java
@@ -622,7 +622,7 @@
             if (descs[i].getPersistenceType() != TopComponent.PERSISTENCE_NEVER) {
                 // only those requeTopsted and previously created elements are serialized.
                 MultiViewElement elem = model.getElementForDescription(descs[i], false);
-                if (elem != null && elem instanceof Serializable) {
+                if (elem instanceof Serializable) {
                     out.writeObject(elem);
                 }
             }
diff --git a/platform/core.nativeaccess/nbproject/project.properties b/platform/core.nativeaccess/nbproject/project.properties
index 4e7fafc..cde56f2 100644
--- a/platform/core.nativeaccess/nbproject/project.properties
+++ b/platform/core.nativeaccess/nbproject/project.properties
@@ -16,4 +16,4 @@
 # under the License.
 is.eager=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/platform/core.netigso/nbproject/org-netbeans-core-netigso.sig b/platform/core.netigso/nbproject/org-netbeans-core-netigso.sig
index 962d0a2..8d931c1 100644
--- a/platform/core.netigso/nbproject/org-netbeans-core-netigso.sig
+++ b/platform/core.netigso/nbproject/org-netbeans-core-netigso.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/core.network/nbproject/org-netbeans-core-network.sig b/platform/core.network/nbproject/org-netbeans-core-network.sig
index bc8d91e..4cf16a4 100644
--- a/platform/core.network/nbproject/org-netbeans-core-network.sig
+++ b/platform/core.network/nbproject/org-netbeans-core-network.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.29
+#Version 1.30
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/core.network/src/org/netbeans/core/network/proxy/NetworkProxySettings.java b/platform/core.network/src/org/netbeans/core/network/proxy/NetworkProxySettings.java
index 420978f..ca3f470 100644
--- a/platform/core.network/src/org/netbeans/core/network/proxy/NetworkProxySettings.java
+++ b/platform/core.network/src/org/netbeans/core/network/proxy/NetworkProxySettings.java
@@ -157,6 +157,10 @@
         if (string == null) {
             return EMPTY_STRING;
         } else {
+            // the proxy string may possibly contain protocol part - strip it.
+            if (string.contains("://")) { // NOI18N
+                string = string.substring(string.indexOf("://") + 3); // NOI18N
+            }
             if (string.contains(COLON)) {
                 return string.substring(0, string.lastIndexOf(COLON));
             } else {
diff --git a/platform/core.network/src/org/netbeans/core/network/proxy/windows/WindowsNetworkProxy.java b/platform/core.network/src/org/netbeans/core/network/proxy/windows/WindowsNetworkProxy.java
index 24eb437..c613817 100644
--- a/platform/core.network/src/org/netbeans/core/network/proxy/windows/WindowsNetworkProxy.java
+++ b/platform/core.network/src/org/netbeans/core/network/proxy/windows/WindowsNetworkProxy.java
@@ -56,12 +56,12 @@
             }
 
             Pointer pacFilePointer = prxCnf.pacFile;
-            if (pacFilePointer != null) {
-                String pacFileUrl = pacFilePointer.getWideString(0);
+            if (pacFilePointer != null || prxCnf.autoDetect) {
+                String pacFileUrl = pacFilePointer != null ? pacFilePointer.getWideString(0) : "http://wpad/wpad.dat"; // NOI18N
                 
                 LOGGER.log(Level.INFO, "Windows system proxy resolver: auto - PAC ({0})", pacFileUrl); //NOI18N                
                 return new NetworkProxySettings(pacFileUrl);
-            }
+            } 
 
             Pointer proxyPointer = prxCnf.proxy;
             Pointer proxyBypassPointer = prxCnf.proxyBypass;
diff --git a/platform/core.network/src/org/netbeans/core/network/utils/LocalAddressUtils.java b/platform/core.network/src/org/netbeans/core/network/utils/LocalAddressUtils.java
index e6d4df6..96ac007 100644
--- a/platform/core.network/src/org/netbeans/core/network/utils/LocalAddressUtils.java
+++ b/platform/core.network/src/org/netbeans/core/network/utils/LocalAddressUtils.java
@@ -146,7 +146,7 @@
         try (final DatagramSocket socket = new DatagramSocket()) {
             socket.connect(SOMEADDR_IPV4, 10002);   // doesn¨t need to be reachable .. and port it irrelevant
             InetAddress addr = socket.getLocalAddress();
-            if (addr != null && (addr instanceof Inet4Address) && (!addr.isAnyLocalAddress() && (!addr.isLoopbackAddress()))) {
+            if ((addr instanceof Inet4Address) && (!addr.isAnyLocalAddress() && (!addr.isLoopbackAddress()))) {
                 list.add(addr);
             }
         } catch (SecurityException | SocketException ex) {
@@ -155,7 +155,7 @@
         try (final DatagramSocket socket = new DatagramSocket()) {
             socket.connect(SOMEADDR_IPV6, 10002);   // doesn¨t need to be reachable .. and port it irrelevant
             InetAddress addr = socket.getLocalAddress();
-            if (addr != null && (addr instanceof Inet6Address) && (!addr.isAnyLocalAddress() && (!addr.isLoopbackAddress()))) {
+            if ((addr instanceof Inet6Address) && (!addr.isAnyLocalAddress() && (!addr.isLoopbackAddress()))) {
                 list.add(addr);
             }
         } catch (SecurityException | SocketException ex) {
diff --git a/platform/core.output2/src/org/netbeans/core/output2/Controller.java b/platform/core.output2/src/org/netbeans/core/output2/Controller.java
index 56982b9..ee69271 100644
--- a/platform/core.output2/src/org/netbeans/core/output2/Controller.java
+++ b/platform/core.output2/src/org/netbeans/core/output2/Controller.java
@@ -413,7 +413,7 @@
             case IOEvent.CMD_DEF_COLORS:
                 if (tab != null) {
                     Document doc = tab.getOutputPane().getDocument();
-                    if (doc != null && doc instanceof OutputDocument) {
+                    if (doc instanceof OutputDocument) {
                         Lines lines = ((OutputDocument) doc).getLines();
                         if (lines != null) {
                             IOColors.OutputType type = (IOColors.OutputType) data;
diff --git a/platform/core.output2/src/org/netbeans/core/output2/OutWriter.java b/platform/core.output2/src/org/netbeans/core/output2/OutWriter.java
index 0bd8545..ced3007 100644
--- a/platform/core.output2/src/org/netbeans/core/output2/OutWriter.java
+++ b/platform/core.output2/src/org/netbeans/core/output2/OutWriter.java
@@ -458,7 +458,7 @@
                 } else if (c == '\b') {
                     int skip = handleBackspace(charBuff);
                     if (skip == -2) {
-                        lineCLVT -= lines.removeLastTab();;
+                        lineCLVT -= lines.removeLastTab();
                     } else if (skip == 2) {
                         lineCLVT--;
                     } else if (skip == 1) {
diff --git a/platform/core.output2/src/org/netbeans/core/output2/OutputTab.java b/platform/core.output2/src/org/netbeans/core/output2/OutputTab.java
index ddcf9de..0c61bc0 100644
--- a/platform/core.output2/src/org/netbeans/core/output2/OutputTab.java
+++ b/platform/core.output2/src/org/netbeans/core/output2/OutputTab.java
@@ -164,7 +164,7 @@
         Document old = getDocument();
         hasOutputListeners = false;
         super.setDocument(doc);
-        if (old != null && old instanceof OutputDocument) {
+        if (old instanceof OutputDocument) {
             ((OutputDocument) old).dispose();
         }
         applyOptions();
@@ -872,7 +872,7 @@
             EXPAND_TREE
     };
 
-    private final Map<ACTION, TabAction> actions = new EnumMap<ACTION, TabAction>(ACTION.class);;
+    private final Map<ACTION, TabAction> actions = new EnumMap<ACTION, TabAction>(ACTION.class);
 
     private void createActions() {
         KeyStrokeUtils.refreshActionCache();
diff --git a/platform/core.startup.base/nbproject/org-netbeans-core-startup-base.sig b/platform/core.startup.base/nbproject/org-netbeans-core-startup-base.sig
index a36d363..9046e42 100644
--- a/platform/core.startup.base/nbproject/org-netbeans-core-startup-base.sig
+++ b/platform/core.startup.base/nbproject/org-netbeans-core-startup-base.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.79.0
+#Version 1.80.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/core.startup.base/nbproject/project.properties b/platform/core.startup.base/nbproject/project.properties
index ad64055..5fe71c4 100644
--- a/platform/core.startup.base/nbproject/project.properties
+++ b/platform/core.startup.base/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.81.0
 module.jar.dir=core
diff --git a/platform/core.startup/nbproject/org-netbeans-core-startup.sig b/platform/core.startup/nbproject/org-netbeans-core-startup.sig
index 7b8e25d..1f96fbd 100644
--- a/platform/core.startup/nbproject/org-netbeans-core-startup.sig
+++ b/platform/core.startup/nbproject/org-netbeans-core-startup.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.79.0
+#Version 1.80.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/core.windows/nbproject/org-netbeans-core-windows.sig b/platform/core.windows/nbproject/org-netbeans-core-windows.sig
index 5df2064..4a8caa8 100644
--- a/platform/core.windows/nbproject/org-netbeans-core-windows.sig
+++ b/platform/core.windows/nbproject/org-netbeans-core-windows.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.102
+#Version 2.103
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/core.windows/src/org/netbeans/core/windows/ModeImpl.java b/platform/core.windows/src/org/netbeans/core/windows/ModeImpl.java
index 2b2dc6a..d0ae16d 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/ModeImpl.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/ModeImpl.java
@@ -102,26 +102,28 @@
         
         getCentral().addModeOtherName(this, modeOtherName);
     }
-    
+
     /** Gets display name of this mode.
      ** Implements <code>Mode</code> interface method.
      * @return Human presentable name of this mode implementation
      * @deprecated It is not used anymore. This impl delegated to {@link #getName} method.  */
+    @Deprecated
     @Override
     public String getDisplayName () {
         WindowManagerImpl.warnIfNotInEDT();
-        
+
         return getName();
     }
 
     /** Gets icon for this mode.
-     * Implements <code>Mode</code> interface method. 
+     * Implements <code>Mode</code> interface method.
      * @return null
      * @deprecated It is not used anymore. */
+    @Deprecated
     @Override
     public Image getIcon () {
         WindowManagerImpl.warnIfNotInEDT();
-        
+
         return null;
     }
 
@@ -178,6 +180,7 @@
      * @return The workspace instance to which is this mode asociated.
      * @deprecated XXX Don't use anymore.
      */
+    @Deprecated
     @Override
     public Workspace getWorkspace () {
         WindowManagerImpl.warnIfNotInEDT();
diff --git a/platform/core.windows/src/org/netbeans/core/windows/PersistenceHandler.java b/platform/core.windows/src/org/netbeans/core/windows/PersistenceHandler.java
index cbce993..50e58c4 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/PersistenceHandler.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/PersistenceHandler.java
@@ -192,7 +192,7 @@
             //some TopComponents want to be always active when the window system starts (e.g. welcome screen)
             for( TopComponent tc : mode.getOpenedTopComponents() ) {
                 Object val = tc.getClientProperty( Constants.ACTIVATE_AT_STARTUP );
-                if( null != val && val instanceof Boolean && ((Boolean)val).booleanValue() ) {
+                if(val instanceof Boolean && ((Boolean) val).booleanValue()) {
                     activeTopComponentOverride = tc;
                     break;
                 }
diff --git a/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java b/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
index 5fb1eff..aba55ee 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
@@ -182,6 +182,7 @@
      * @param c the component
      * @return the manager that handles opening, closing and selecting a component
      * @deprecated Don't use this. */
+    @Deprecated
     @Override
     protected synchronized WindowManager.Component createTopComponentManager(TopComponent c) {
         warnIfNotInEDT();
@@ -193,6 +194,7 @@
      * Implements <code>WindowManager</code> abstract method.
      * @return fake implementation of only workspace
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public Workspace createWorkspace(String name, String displayName) {
         warnIfNotInEDT();
@@ -204,6 +206,7 @@
     /** Finds workspace given its name.
      * @return fake implementation of only workspace
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public Workspace findWorkspace(String name) {
         warnIfNotInEDT();
@@ -216,6 +219,7 @@
      * Implements <code>WindowManager</code> abstract method. 
      * @return array with only one (fake) workspace impl
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public Workspace[] getWorkspaces() {
         warnIfNotInEDT();
@@ -227,6 +231,7 @@
      * Implements <code>WindowManager</code> abstract method.
      * @param workspaces array of new workspaces
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public void setWorkspaces(Workspace[] workspaces) {
         warnIfNotInEDT();
@@ -236,6 +241,7 @@
      * Implements <code>WindowManager</code> abstract method.
      * @return fake implementation of only workspace
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public Workspace getCurrentWorkspace() {
         warnIfNotInEDT();
@@ -328,6 +334,7 @@
      * Implements <code>Workspace</code> interface method.
      * @return the programmatic name of only workspace impl
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public String getName () {
         return "FakeWorkspace"; // NOI18N
@@ -337,6 +344,7 @@
      * Implements <code>Workspace</code> interface method.
      * @return the diplay name of the workspace
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public String getDisplayName () {
         return NbBundle.getMessage(WindowManagerImpl.class, "LBL_FakeWorkspace");
@@ -362,6 +370,7 @@
 
     /** Activates this workspace to be current one.
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public void activate () {
     }
@@ -624,6 +633,7 @@
     /** Clears this workspace and removes this workspace from window manager.
      * Implements <code>Workspace</code> interface method.
      * @deprecated Doesn't have a sense now. Workspaces aren't supported anymore. */
+    @Deprecated
     @Override
     public void remove () {
     }
diff --git a/platform/core.windows/src/org/netbeans/core/windows/actions/ActionUtils.java b/platform/core.windows/src/org/netbeans/core/windows/actions/ActionUtils.java
index e13aed3..043b889 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/actions/ActionUtils.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/actions/ActionUtils.java
@@ -29,7 +29,6 @@
 import org.netbeans.core.windows.view.ui.slides.SlideController;
 import org.openide.DialogDisplayer;
 import org.openide.NotifyDescriptor;
-import org.openide.awt.Actions;
 import org.openide.awt.Mnemonics;
 import org.openide.cookies.SaveCookie;
 import org.openide.util.*;
@@ -467,30 +466,15 @@
      * otherwise closes all documents in the system
      */
     public static void closeAllDocuments (boolean isContext) {
-        if (isContext) {
-            TopComponent activeTC = TopComponent.getRegistry().getActivated();
-            List<TopComponent> tcs = getOpened(activeTC);
-
-            closeAll( tcs.toArray(new TopComponent[tcs.size()]) );
-        } else {
-            TopComponent[] tcs = WindowManagerImpl.getInstance().getEditorTopComponents();
-            closeAll( tcs );
-        }
-    }
-
-    private static void closeAll( TopComponent[] tcs ) {
-        for( TopComponent tc: tcs ) {
-            if( !Switches.isClosingEnabled(tc) )
-                continue;
-            final TopComponent toBeClosed = tc;
-            SwingUtilities.invokeLater( new Runnable() {
-                @Override
-                public void run() {
-                    toBeClosed.putClientProperty("inCloseAll", Boolean.TRUE);
-                    toBeClosed.close();
-                }
-            });
-        }
+        /* Historically, the closeAll method wrapped calls to TopComponent.close() in an
+        invokeLater, so keep doing that. This is probably a good idea e.g. for cases where the
+        caller is a button press handler and where TopComponent.close() ends up showing a modal
+        dialog (which could perhaps delay the update of the button's visual state). */
+        SwingUtilities.invokeLater(() -> {
+            closeAll(isContext
+                ? getOpened(TopComponent.getRegistry().getActivated())
+                : Arrays.asList(WindowManagerImpl.getInstance().getEditorTopComponents()));
+        });
     }
 
     /** Closes all documents except given param, according to isContext flag
@@ -500,27 +484,24 @@
      * given
      */
     public static void closeAllExcept (TopComponent tc, boolean isContext) {
-        if (isContext) {
-            List<TopComponent> tcs = getOpened(tc);
+        // See closeAllDocuments.
+        SwingUtilities.invokeLater(() -> {
+            List<TopComponent> tcs = new ArrayList<>(isContext
+                ? getOpened(tc)
+                : Arrays.asList(WindowManagerImpl.getInstance().getEditorTopComponents()));
+            tcs.remove(tc);
+            closeAll(tcs);
+        });
+    }
 
-            for(TopComponent curTC: tcs) {
-                if( !Switches.isClosingEnabled(curTC) )
-                    continue;
-                if (curTC != tc) {
-                    curTC.putClientProperty("inCloseAll", Boolean.TRUE);
-                    curTC.close();
-                }
+    private static void closeAll( Iterable<TopComponent> tcs ) {
+        for (TopComponent curTC : tcs) {
+            if( !Switches.isClosingEnabled(curTC) ) {
+                continue;
             }
-        } else {
-            TopComponent[] tcs = WindowManagerImpl.getInstance().getEditorTopComponents();
-
-            for(TopComponent curTC: tcs) {
-                if( !Switches.isClosingEnabled(curTC) )
-                    continue;
-                if (curTC != tc) {
-                    curTC.putClientProperty("inCloseAll", Boolean.TRUE);
-                    curTC.close();
-                }
+            curTC.putClientProperty("inCloseAll", Boolean.TRUE);
+            if (!curTC.close()) {
+                break;
             }
         }
     }
diff --git a/platform/core.windows/src/org/netbeans/core/windows/actions/CloneDocumentAction.java b/platform/core.windows/src/org/netbeans/core/windows/actions/CloneDocumentAction.java
index e58e1e6..2cecade 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/actions/CloneDocumentAction.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/actions/CloneDocumentAction.java
@@ -55,7 +55,7 @@
     @Override
     public void actionPerformed(java.awt.event.ActionEvent ev) {
         TopComponent tc = TopComponent.getRegistry().getActivated();
-        if(tc == null || !(tc instanceof TopComponent.Cloneable)) {
+        if(!(tc instanceof TopComponent.Cloneable)) {
             return;
         }
         
diff --git a/platform/core.windows/src/org/netbeans/core/windows/services/DialogDisplayerImpl.java b/platform/core.windows/src/org/netbeans/core/windows/services/DialogDisplayerImpl.java
index 63f5fdc..b1a0e06 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/services/DialogDisplayerImpl.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/services/DialogDisplayerImpl.java
@@ -116,7 +116,7 @@
                             // all docked windows implements ModeUIBase interface
                             if (! (w instanceof DefaultSeparateContainer.ModeUIBase)) {
                                 Container cont = SwingUtilities.getAncestorOfClass(Window.class, w);
-                                if (cont != null && (cont instanceof DefaultSeparateContainer.ModeUIBase)) {
+                                if (cont instanceof DefaultSeparateContainer.ModeUIBase) {
                                     w = (Window) cont;
                                 } else {
                                     // don't set non-ide window as parent
diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/CloseButtonTabbedPane.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/CloseButtonTabbedPane.java
index 31a7ac2..44cda9c 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/CloseButtonTabbedPane.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/CloseButtonTabbedPane.java
@@ -281,9 +281,9 @@
     }
 
     private boolean hideCloseButton(Component c) {
-        if (c!=null && c instanceof JComponent) {
+        if (c instanceof JComponent) {
             Object prop = ((JComponent) c).getClientProperty(TabbedPaneFactory.NO_CLOSE_BUTTON);
-            if (prop!=null && prop instanceof Boolean && (Boolean) prop) {
+            if (prop instanceof Boolean && (Boolean) prop) {
                 return true;
             }
         }
diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/slides/CommandManager.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/slides/CommandManager.java
index 4189c73..daab2f3 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/slides/CommandManager.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/slides/CommandManager.java
@@ -204,7 +204,7 @@
     public void actionPerformed(ActionEvent e) {
         if (TabbedContainer.COMMAND_POPUP_REQUEST.equals(e.getActionCommand())) {
             TabActionEvent tae = (TabActionEvent) e;
-            if (curSlidedComp != null && curSlidedComp instanceof TopComponent) {
+            if (curSlidedComp instanceof TopComponent) {
                 TopComponent tc = (TopComponent)curSlidedComp;
                 Action[] actions = slideBar.getTabbed().getPopupActions(tc.getActions(), curSlidedIndex);
                 if (actions == null) {
diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/tabbedpane/NBTabbedPaneController.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/tabbedpane/NBTabbedPaneController.java
index 7838781..8150599 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/tabbedpane/NBTabbedPaneController.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/tabbedpane/NBTabbedPaneController.java
@@ -308,7 +308,7 @@
 
                     sel.setSelectedIndex( tabIndex );
                     Component tc = container.getDataModel().getTab( tabIndex ).getComponent();
-                    if( null != tc && tc instanceof TopComponent && !(( TopComponent ) tc).isAncestorOf( KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner() ) ) {
+                    if(tc instanceof TopComponent && !((TopComponent) tc).isAncestorOf(KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner())) {
                         (( TopComponent ) tc).requestActive();
                     }
                 }
diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/toolbars/DnDSupport.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/toolbars/DnDSupport.java
index 3c45e85..81e0d48 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/toolbars/DnDSupport.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/toolbars/DnDSupport.java
@@ -579,7 +579,7 @@
             if( t.isDataFlavorSupported(buttonDataFlavor) ) {
                 o = t.getTransferData(buttonDataFlavor);
             }
-            if( null != o && o instanceof DataObject ) {
+            if(o instanceof DataObject) {
                 ((DataObject) o).delete();
                 sourceToolbar.repaint();
             }
diff --git a/platform/editor.mimelookup/nbproject/org-netbeans-modules-editor-mimelookup.sig b/platform/editor.mimelookup/nbproject/org-netbeans-modules-editor-mimelookup.sig
index 27dcfec..aafc0c5 100644
--- a/platform/editor.mimelookup/nbproject/org-netbeans-modules-editor-mimelookup.sig
+++ b/platform/editor.mimelookup/nbproject/org-netbeans-modules-editor-mimelookup.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.57
+#Version 1.58
 
 CLSS public abstract interface !annotation java.lang.Deprecated
  anno 0 java.lang.annotation.Documented()
diff --git a/platform/editor.mimelookup/src/org/netbeans/api/editor/mimelookup/MimeLookup.java b/platform/editor.mimelookup/src/org/netbeans/api/editor/mimelookup/MimeLookup.java
index 4ed1863..717158b 100644
--- a/platform/editor.mimelookup/src/org/netbeans/api/editor/mimelookup/MimeLookup.java
+++ b/platform/editor.mimelookup/src/org/netbeans/api/editor/mimelookup/MimeLookup.java
@@ -118,6 +118,7 @@
      * @return non-null mime-type specific lookup
      * @deprecated Use {@link #getLookup(MimePath) getLookup(MimePath.get(mimeType))} instead.
      */
+    @Deprecated
     public static MimeLookup getMimeLookup(String mimeType) {
         if (mimeType == null) {
             throw new NullPointerException("The mimeType parameter must not be null."); //NOI18N
@@ -150,6 +151,7 @@
      * @deprecated Use {@link #getLookup(MimePath)} with the <code>MimePath</code>
      * of the embedded mime type instead.
      */
+    @Deprecated
     public MimeLookup childLookup(String mimeType) {
         if (mimeType == null) {
             throw new NullPointerException("The mimeType parameter must not be null."); //NOI18N
@@ -169,6 +171,7 @@
      * @deprecated Use {@link #getLookup(MimePath)} and the methods provided by
      * the ordinary <code>Lookup</code> instance returned.
      */
+    @Deprecated
     public <T> T lookup(Class<T> clazz) {
         return mimePathLookup.lookup(clazz);
     }
@@ -182,6 +185,7 @@
      * @deprecated Use {@link #getLookup(MimePath)} and the methods provided by
      * the ordinary <code>Lookup</code> instance returned.
      */
+    @Deprecated
     public <T> Result<T> lookup(Template<T> template) {
         return mimePathLookup.lookup(template);
     }
diff --git a/platform/favorites/nbproject/org-netbeans-modules-favorites.sig b/platform/favorites/nbproject/org-netbeans-modules-favorites.sig
index 2270fa4..c8a1e63 100644
--- a/platform/favorites/nbproject/org-netbeans-modules-favorites.sig
+++ b/platform/favorites/nbproject/org-netbeans-modules-favorites.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.63
+#Version 1.64
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/favorites/nbproject/project.properties b/platform/favorites/nbproject/project.properties
index 46944b7..5f147a0 100644
--- a/platform/favorites/nbproject/project.properties
+++ b/platform/favorites/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.compilerargs=-Xlint:all -Xlint:-serial -Werror
+javac.compilerargs=-Xlint:all -Xlint:-serial -Xlint:-options -Werror
 javac.source=1.8
 test.config.stable.includes=\
     gui/core/favorites/BasicsTest.class 
diff --git a/platform/htmlui/src/org/netbeans/modules/htmlui/impl/SwingFXViewer.java b/platform/htmlui/src/org/netbeans/modules/htmlui/impl/SwingFXViewer.java
index 919f110..0688d41 100644
--- a/platform/htmlui/src/org/netbeans/modules/htmlui/impl/SwingFXViewer.java
+++ b/platform/htmlui/src/org/netbeans/modules/htmlui/impl/SwingFXViewer.java
@@ -43,7 +43,7 @@
 
     @Override
     public JButton createButton(SFXView view, String id) {
-        JButton b = new JButton();;
+        JButton b = new JButton();
         b.setName(id);
         if (view == null || view.buttons == null) {
             throw new NullPointerException("Am I: " + this + " view: " + view);
diff --git a/platform/janitor/nbproject/project.properties b/platform/janitor/nbproject/project.properties
index 038ab41..dfd12fc 100644
--- a/platform/janitor/nbproject/project.properties
+++ b/platform/janitor/nbproject/project.properties
@@ -16,4 +16,4 @@
 # under the License.
 is.autoload=true
 javac.source=1.8
-javac.compilerargs=-Xlint:all -Xlint:-serial -Xlint:-processing -Werror
+javac.compilerargs=-Xlint:all -Xlint:-serial -Xlint:-processing -Xlint:-options -Werror
diff --git a/platform/janitor/src/org/netbeans/modules/janitor/Bundle.properties b/platform/janitor/src/org/netbeans/modules/janitor/Bundle.properties
index efa8506..86bec83 100644
--- a/platform/janitor/src/org/netbeans/modules/janitor/Bundle.properties
+++ b/platform/janitor/src/org/netbeans/modules/janitor/Bundle.properties
@@ -17,7 +17,8 @@
 OpenIDE-Module-Name=Janitor
 
 OpenIDE-Module-Short-Description=Removes unused cache/data
-JanitorOptionsPanel.jLabel1.text=Removal threshold (number of days):
 JanitorOptionsPanel.btRunNow.text=Run Janitor Now
 JanitorOptionsPanel.cbEnabled.text=Run Janitor on Startup
 JanitorPanel.cbEnabled.text=Enable Janitor Scan on Startup
+JanitorOptionsPanel.lbUnusedDays.text=Removal threshold (number of days):
+JanitorOptionsPanel.cbAutoRemove.text=Auto Remove Abandoned Cache Directories
diff --git a/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java b/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java
index 66882b4..0fa2e56 100644
--- a/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java
+++ b/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java
@@ -92,6 +92,7 @@
 
     public static final String PROP_JANITOR_ENABLED = "janitorEnabled"; //NOI18N
     public static final String PROP_UNUSED_DAYS = "UnusedDays"; //NOI18N
+    public static final String PROP_AUTO_REMOVE_ABANDONED_CACHE = "autoRemoveAbandonedCache";
 
     private static final String LOGFILE_NAME = "var/log/messages.log"; //NOI18N
     private static final String ALL_CHECKSUM_NAME = "lastModified/all-checksum.txt"; //NOI18N
@@ -100,7 +101,8 @@
 
     static final RequestProcessor JANITOR_RP = new RequestProcessor("janitor", 1); //NOI18N
     static final Map<ActionListener, Notification> CLEANUP_TASKS = new WeakHashMap<>();
-    static final Runnable SCAN_FOR_JUNK = () -> {
+
+    static void scanForJunk() {
         // Remove previously opened notifications
         CLEANUP_TASKS.values().forEach((nf) -> nf.clear());
         CLEANUP_TASKS.clear();
@@ -113,28 +115,31 @@
             Integer age = ver.second();
             long toFree = size(getUserDir(name)) + size(getCacheDir(name));
             toFree = toFree / (1_000_000) + 1;
-            ActionListener cleanupListener;
-            Notification nf;
             if (getUserDir(name) != null) {
-                cleanupListener = cleanupAction(name, Bundle.TXT_CONFIRM_CLEANUP(name));
-                nf = NotificationDisplayer.getDefault().notify(
+                ActionListener cleanupListener = cleanupAction(name, Bundle.TXT_CONFIRM_CLEANUP(name));
+                Notification nf = NotificationDisplayer.getDefault().notify(
                         Bundle.TIT_ABANDONED_USERDIR(name, age, toFree),
                         clean,
                         Bundle.DESC_ABANDONED_USERDIR(name, age, toFree),
                         cleanupListener);
 
+                CLEANUP_TASKS.put(cleanupListener, nf);
             } else {
-                cleanupListener = cleanupAction(name, Bundle.TXT_CONFIRM_CACHE_CLEANUP(name));
-                nf = NotificationDisplayer.getDefault().notify(
-                        Bundle.TIT_ABANDONED_CACHEDIR(name, toFree),
-                        clean,
-                        Bundle.DESC_ABANDONED_CACHEDIR(name, toFree),
-                        cleanupListener);
+                if (isAutoRemoveAbanconedCache()) {
+                    JANITOR_RP.post(() -> cleanup(name));
+                } else {
+                    ActionListener cleanupListener = cleanupAction(name, Bundle.TXT_CONFIRM_CACHE_CLEANUP(name));
+                    Notification nf = NotificationDisplayer.getDefault().notify(
+                            Bundle.TIT_ABANDONED_CACHEDIR(name, toFree),
+                            clean,
+                            Bundle.DESC_ABANDONED_CACHEDIR(name, toFree),
+                            cleanupListener);
+                    CLEANUP_TASKS.put(cleanupListener, nf);
+                }
             }
-            CLEANUP_TASKS.put(cleanupListener, nf);
-        }
-    };
-
+        }        
+    }
+    
     static ActionListener cleanupAction(String name, String label) {
         return new ActionListener() {
             @Override
@@ -149,13 +154,7 @@
                         null
                 );
                 if (DialogDescriptor.YES_OPTION == DialogDisplayer.getDefault().notify(descriptor)) {
-                    JANITOR_RP.post(() -> {
-                        try (ProgressHandle handle = ProgressHandle.createHandle(Bundle.LBL_CLEANUP(name))){
-                            handle.start();
-                            deleteDir(getUserDir(name));
-                            deleteDir(getCacheDir(name));
-                        }
-                    });
+                    JANITOR_RP.post(() -> cleanup(name));
                 }
                 Janitor.setEnabled(panel.isEnabledOnStartup());
                 Notification nf = CLEANUP_TASKS.get(this);
@@ -166,6 +165,14 @@
         };
     }
 
+    static void cleanup(String name) {
+        try (ProgressHandle handle = ProgressHandle.createHandle(Bundle.LBL_CLEANUP(name))){
+            handle.start();
+            deleteDir(getUserDir(name));
+            deleteDir(getCacheDir(name));
+        }        
+    }
+    
     public static final Preferences getPreferences() {
         return NbPreferences.forModule(Janitor.class);
     }
@@ -177,14 +184,14 @@
         public void run() {
             if (isEnabled()) {
                 // Starting delayed, not to interfere with other startup IO operations
-                JANITOR_RP.post(SCAN_FOR_JUNK, 60_000);
+                JANITOR_RP.post(Janitor::scanForJunk, 60_000);
             }
         }
 
     }
 
     static void runNow() {
-        JANITOR_RP.post(SCAN_FOR_JUNK);
+        JANITOR_RP.post(Janitor::scanForJunk);
     }
 
     static File getUserDir(String version) {
@@ -323,4 +330,12 @@
         return getPreferences().getInt(PROP_UNUSED_DAYS, UNUSED_DAYS);
     }
 
+    static boolean isAutoRemoveAbanconedCache() {
+        return getPreferences().getBoolean(PROP_AUTO_REMOVE_ABANDONED_CACHE, true);
+    }
+
+    static void setAutoRemoveAbanconedCache(boolean b) {
+        getPreferences().putBoolean(PROP_AUTO_REMOVE_ABANDONED_CACHE, b);
+    }
+
 }
diff --git a/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.form b/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.form
index 028ef7d..8ced274 100644
--- a/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.form
+++ b/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.form
@@ -38,27 +38,27 @@
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="btRunNow" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lbRunNowInfo" max="32767" attributes="0"/>
+                  </Group>
+                  <Component id="cbEnabled" alignment="0" max="32767" attributes="0"/>
+                  <Group type="102" attributes="0">
                       <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="cbEnabled" alignment="0" max="32767" attributes="0"/>
                           <Group type="102" attributes="0">
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Group type="102" attributes="0">
-                                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                                      <EmptySpace max="-2" attributes="0"/>
-                                      <Component id="spUnusedDays" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                                  <Component id="btRunNow" alignment="0" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <EmptySpace min="0" pref="65" max="32767" attributes="0"/>
+                              <EmptySpace min="21" pref="21" max="-2" attributes="0"/>
+                              <Component id="cbAutoRemove" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="lbUnusedDays" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="spUnusedDays" min="-2" max="-2" attributes="0"/>
                           </Group>
                       </Group>
-                  </Group>
-                  <Group type="102" attributes="0">
-                      <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
-                      <Component id="lbRunNowInfo" max="32767" attributes="0"/>
+                      <EmptySpace min="0" pref="45" max="32767" attributes="0"/>
                   </Group>
               </Group>
               <EmptySpace max="-2" attributes="0"/>
@@ -70,16 +70,24 @@
           <Group type="102" alignment="0" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
               <Component id="cbEnabled" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="cbAutoRemove" min="-2" max="-2" attributes="0"/>
               <EmptySpace type="separate" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lbUnusedDays" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="spUnusedDays" alignment="3" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace type="separate" max="-2" attributes="0"/>
-              <Component id="btRunNow" min="-2" max="-2" attributes="0"/>
-              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-              <Component id="lbRunNowInfo" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="176" max="32767" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="-2" pref="32" max="-2" attributes="0"/>
+                      <Component id="lbRunNowInfo" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="btRunNow" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace pref="166" max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
@@ -92,13 +100,20 @@
         </Property>
       </Properties>
     </Component>
-    <Component class="javax.swing.JLabel" name="jLabel1">
+    <Component class="javax.swing.JLabel" name="lbUnusedDays">
       <Properties>
         <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
           <ComponentRef name="spUnusedDays"/>
         </Property>
         <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="org/netbeans/modules/janitor/Bundle.properties" key="JanitorOptionsPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+          <ResourceString bundle="org/netbeans/modules/janitor/Bundle.properties" key="JanitorOptionsPanel.lbUnusedDays.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="cbAutoRemove">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="org/netbeans/modules/janitor/Bundle.properties" key="JanitorOptionsPanel.cbAutoRemove.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
         </Property>
       </Properties>
     </Component>
diff --git a/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.java b/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.java
index dcbe152..6d8f70d 100644
--- a/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.java
+++ b/platform/janitor/src/org/netbeans/modules/janitor/JanitorOptionsPanel.java
@@ -39,12 +39,14 @@
 
     void loadValues() {
         cbEnabled.setSelected(Janitor.isEnabled());
+        cbAutoRemove.setSelected(Janitor.isAutoRemoveAbanconedCache());
         spinnerModel.setValue(Janitor.getUnusedDays());
         resetRunNow();
     }
 
     void saveValues() {
         Janitor.setEnabled(cbEnabled.isSelected());
+        Janitor.setAutoRemoveAbanconedCache(cbAutoRemove.isSelected());
         Janitor.setUnusedDays(spinnerModel.getNumber().intValue());
         resetRunNow();
     }
@@ -52,6 +54,7 @@
     boolean isChanged() {
         boolean changed = false;
         changed |= cbEnabled.isSelected() != Janitor.isEnabled();
+        changed |= cbAutoRemove.isSelected() != Janitor.isAutoRemoveAbanconedCache();
         changed |= spinnerModel.getNumber().intValue() != Janitor.getUnusedDays();
         changed |= !btRunNow.isEnabled();
         return changed;
@@ -67,15 +70,18 @@
     private void initComponents() {
 
         cbEnabled = new javax.swing.JCheckBox();
-        jLabel1 = new javax.swing.JLabel();
+        lbUnusedDays = new javax.swing.JLabel();
+        cbAutoRemove = new javax.swing.JCheckBox();
         spUnusedDays = new javax.swing.JSpinner();
         btRunNow = new javax.swing.JButton();
         lbRunNowInfo = new javax.swing.JLabel();
 
         org.openide.awt.Mnemonics.setLocalizedText(cbEnabled, org.openide.util.NbBundle.getMessage(JanitorOptionsPanel.class, "JanitorOptionsPanel.cbEnabled.text")); // NOI18N
 
-        jLabel1.setLabelFor(spUnusedDays);
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(JanitorOptionsPanel.class, "JanitorOptionsPanel.jLabel1.text")); // NOI18N
+        lbUnusedDays.setLabelFor(spUnusedDays);
+        org.openide.awt.Mnemonics.setLocalizedText(lbUnusedDays, org.openide.util.NbBundle.getMessage(JanitorOptionsPanel.class, "JanitorOptionsPanel.lbUnusedDays.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(cbAutoRemove, org.openide.util.NbBundle.getMessage(JanitorOptionsPanel.class, "JanitorOptionsPanel.cbAutoRemove.text")); // NOI18N
 
         org.openide.awt.Mnemonics.setLocalizedText(btRunNow, org.openide.util.NbBundle.getMessage(JanitorOptionsPanel.class, "JanitorOptionsPanel.btRunNow.text")); // NOI18N
         btRunNow.addActionListener(new java.awt.event.ActionListener() {
@@ -89,22 +95,23 @@
         layout.setHorizontalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(cbEnabled, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                            .addGroup(layout.createSequentialGroup()
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addGroup(layout.createSequentialGroup()
-                                        .addComponent(jLabel1)
-                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(spUnusedDays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                    .addComponent(btRunNow))
-                                .addGap(0, 65, Short.MAX_VALUE))))
+                        .addComponent(btRunNow)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lbRunNowInfo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addComponent(cbEnabled, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                     .addGroup(layout.createSequentialGroup()
-                        .addGap(12, 12, 12)
-                        .addComponent(lbRunNowInfo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(21, 21, 21)
+                                .addComponent(cbAutoRemove))
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(lbUnusedDays)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(spUnusedDays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addGap(0, 45, Short.MAX_VALUE)))
                 .addContainerGap())
         );
         layout.setVerticalGroup(
@@ -112,15 +119,20 @@
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addComponent(cbEnabled)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cbAutoRemove)
                 .addGap(18, 18, 18)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jLabel1)
+                    .addComponent(lbUnusedDays)
                     .addComponent(spUnusedDays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addGap(18, 18, 18)
-                .addComponent(btRunNow)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addComponent(lbRunNowInfo)
-                .addContainerGap(176, Short.MAX_VALUE))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(32, 32, 32)
+                        .addComponent(lbRunNowInfo))
+                    .addGroup(layout.createSequentialGroup()
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(btRunNow)))
+                .addContainerGap(166, Short.MAX_VALUE))
         );
     }// </editor-fold>//GEN-END:initComponents
 
@@ -138,9 +150,10 @@
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btRunNow;
+    private javax.swing.JCheckBox cbAutoRemove;
     private javax.swing.JCheckBox cbEnabled;
-    private javax.swing.JLabel jLabel1;
     private javax.swing.JLabel lbRunNowInfo;
+    private javax.swing.JLabel lbUnusedDays;
     private javax.swing.JSpinner spUnusedDays;
     // End of variables declaration//GEN-END:variables
 }
diff --git a/platform/javahelp/nbproject/org-netbeans-modules-javahelp.sig b/platform/javahelp/nbproject/org-netbeans-modules-javahelp.sig
index b18ff6a..e92208c 100644
--- a/platform/javahelp/nbproject/org-netbeans-modules-javahelp.sig
+++ b/platform/javahelp/nbproject/org-netbeans-modules-javahelp.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.58
+#Version 2.59
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/javahelp/nbproject/project.properties b/platform/javahelp/nbproject/project.properties
index fd29d34..1966ee2 100644
--- a/platform/javahelp/nbproject/project.properties
+++ b/platform/javahelp/nbproject/project.properties
@@ -18,7 +18,7 @@
 is.autoload=true
 
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 module.javadoc.packages=org.netbeans.api.javahelp
diff --git a/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuery.java b/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuery.java
index d31a823..ea22b26 100644
--- a/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuery.java
+++ b/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuery.java
@@ -126,7 +126,7 @@
     private SearchEngine createSearchEngine() {
         SearchEngine se = null;
         Help h = (Help)Lookup.getDefault().lookup(Help.class);
-        if (h != null && h instanceof JavaHelp ) {
+        if (h instanceof JavaHelp) {
             JavaHelp jh = (JavaHelp)h;
             se = jh.createSearchEngine();
             if( null == se ) {
diff --git a/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuickSearchProviderImpl.java b/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuickSearchProviderImpl.java
index fec66d9..d257534 100644
--- a/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuickSearchProviderImpl.java
+++ b/platform/javahelp/src/org/netbeans/modules/javahelp/JavaHelpQuickSearchProviderImpl.java
@@ -55,7 +55,7 @@
         return new Runnable() {
             public void run() {
                 Help h = (Help)Lookup.getDefault().lookup(Help.class);
-                if (h != null && h instanceof JavaHelp ) {
+                if (h instanceof JavaHelp) {
                     JavaHelp jh = (JavaHelp)h;
                     jh.showHelp(url);
                 } else {
diff --git a/platform/javahelp/src/org/netbeans/modules/javahelp/NbDocsStreamHandler.java b/platform/javahelp/src/org/netbeans/modules/javahelp/NbDocsStreamHandler.java
index a736803..3b50a09 100644
--- a/platform/javahelp/src/org/netbeans/modules/javahelp/NbDocsStreamHandler.java
+++ b/platform/javahelp/src/org/netbeans/modules/javahelp/NbDocsStreamHandler.java
@@ -164,6 +164,7 @@
          * @deprecated will be replaced by similar method in Modules Open APIs in
          * future releases
          */
+        @Deprecated
         private static ModuleInfo findModule (String codeNameBase) {
             Lookup.Result<ModuleInfo> modulesResult =
                 Lookup.getDefault().lookup(new Lookup.Template<ModuleInfo>(ModuleInfo.class));
diff --git a/platform/keyring.fallback/nbproject/org-netbeans-modules-keyring-fallback.sig b/platform/keyring.fallback/nbproject/org-netbeans-modules-keyring-fallback.sig
index 051d3b6..aa6259f 100644
--- a/platform/keyring.fallback/nbproject/org-netbeans-modules-keyring-fallback.sig
+++ b/platform/keyring.fallback/nbproject/org-netbeans-modules-keyring-fallback.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.25
+#Version 1.26
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/keyring.fallback/nbproject/project.properties b/platform/keyring.fallback/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/platform/keyring.fallback/nbproject/project.properties
+++ b/platform/keyring.fallback/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/platform/keyring.impl/nbproject/project.properties b/platform/keyring.impl/nbproject/project.properties
index 9674ec8..702a8c7 100644
--- a/platform/keyring.impl/nbproject/project.properties
+++ b/platform/keyring.impl/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stableBTD.includes=**/*Test.class
diff --git a/platform/keyring/nbproject/org-netbeans-modules-keyring.sig b/platform/keyring/nbproject/org-netbeans-modules-keyring.sig
index cabb5b2..50f8d58 100644
--- a/platform/keyring/nbproject/org-netbeans-modules-keyring.sig
+++ b/platform/keyring/nbproject/org-netbeans-modules-keyring.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41
+#Version 1.42
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/keyring/nbproject/project.properties b/platform/keyring/nbproject/project.properties
index 7a81ea7..b9a8721 100644
--- a/platform/keyring/nbproject/project.properties
+++ b/platform/keyring/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.apichanges=${basedir}/apichanges.xml
 javadoc.arch=${basedir}/arch.xml
diff --git a/platform/lib.uihandler/nbproject/org-netbeans-lib-uihandler.sig b/platform/lib.uihandler/nbproject/org-netbeans-lib-uihandler.sig
index 5c4ee95..4ea5e18 100644
--- a/platform/lib.uihandler/nbproject/org-netbeans-lib-uihandler.sig
+++ b/platform/lib.uihandler/nbproject/org-netbeans-lib-uihandler.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.62
+#Version 1.63
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/libs.asm/external/asm-9.3-license.txt b/platform/libs.asm/external/asm-9.4-license.txt
similarity index 96%
rename from platform/libs.asm/external/asm-9.3-license.txt
rename to platform/libs.asm/external/asm-9.4-license.txt
index b6dc389..5fa2af6 100644
--- a/platform/libs.asm/external/asm-9.3-license.txt
+++ b/platform/libs.asm/external/asm-9.4-license.txt
@@ -1,6 +1,6 @@
 Name: OW2 ASM
-Version: 9.3
-Files: asm-tree-9.3.jar asm-commons-9.3.jar asm-9.3.jar
+Version: 9.4
+Files: asm-tree-9.4.jar asm-commons-9.4.jar asm-9.4.jar
 License: BSD-INRIA
 Origin: OW2 Consortium
 URL: https://repository.ow2.org/nexus/content/repositories/releases/org/ow2/asm/
diff --git a/platform/libs.asm/external/binaries-list b/platform/libs.asm/external/binaries-list
index ad6ac67..dcb39e7 100755
--- a/platform/libs.asm/external/binaries-list
+++ b/platform/libs.asm/external/binaries-list
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-8E6300EF51C1D801A7ED62D07CD221ACA3A90640 org.ow2.asm:asm:9.3
-78D2ECD61318B5A58CD04FB237636C0E86B77D97 org.ow2.asm:asm-tree:9.3
-1F2A432D1212F5C352AE607D7B61DCAE20C20AF5 org.ow2.asm:asm-commons:9.3
+B4E0E2D2E023AA317B7CFCFC916377EA348E07D1 org.ow2.asm:asm:9.4
+A99175A17D7FDC18CBCBD0E8EA6A5D276844190A org.ow2.asm:asm-tree:9.4
+8FC2810DDBCBBEC0A8BBCCB3F8EDA58321839912 org.ow2.asm:asm-commons:9.4
diff --git a/platform/libs.asm/nbproject/org-netbeans-libs-asm.sig b/platform/libs.asm/nbproject/org-netbeans-libs-asm.sig
index 2150fa0..72b225a 100644
--- a/platform/libs.asm/nbproject/org-netbeans-libs-asm.sig
+++ b/platform/libs.asm/nbproject/org-netbeans-libs-asm.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 5.20
+#Version 5.21
 
diff --git a/platform/libs.asm/nbproject/project.properties b/platform/libs.asm/nbproject/project.properties
index f000723..0511265 100644
--- a/platform/libs.asm/nbproject/project.properties
+++ b/platform/libs.asm/nbproject/project.properties
@@ -19,7 +19,7 @@
 javac.source=1.8
 module.jar.dir=core
 
-release.external/asm-9.3.jar=core/asm-9.3.jar
-release.external/asm-tree-9.3.jar=core/asm-tree-9.3.jar
-release.external/asm-commons-9.3.jar=core/asm-commons-9.3.jar
-license.file=../external/asm-9.3-license.txt
+release.external/asm-9.4.jar=core/asm-9.4.jar
+release.external/asm-tree-9.4.jar=core/asm-tree-9.4.jar
+release.external/asm-commons-9.4.jar=core/asm-commons-9.4.jar
+license.file=../external/asm-9.4-license.txt
diff --git a/platform/libs.asm/nbproject/project.xml b/platform/libs.asm/nbproject/project.xml
index 00c48b7..fcf6778 100644
--- a/platform/libs.asm/nbproject/project.xml
+++ b/platform/libs.asm/nbproject/project.xml
@@ -29,16 +29,16 @@
                 <subpackages>org</subpackages>
             </public-packages>
             <class-path-extension>
-                <runtime-relative-path>asm-9.3.jar</runtime-relative-path>
-                <binary-origin>external/asm-9.3.jar</binary-origin>
+                <runtime-relative-path>asm-9.4.jar</runtime-relative-path>
+                <binary-origin>external/asm-9.4.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>asm-tree-9.3.jar</runtime-relative-path>
-                <binary-origin>external/asm-tree-9.3.jar</binary-origin>
+                <runtime-relative-path>asm-tree-9.4.jar</runtime-relative-path>
+                <binary-origin>external/asm-tree-9.4.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>asm-commons-9.3.jar</runtime-relative-path>
-                <binary-origin>external/asm-commons-9.3.jar</binary-origin>
+                <runtime-relative-path>asm-commons-9.4.jar</runtime-relative-path>
+                <binary-origin>external/asm-commons-9.4.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/platform/libs.batik.read/nbproject/org-netbeans-libs-batik-read.sig b/platform/libs.batik.read/nbproject/org-netbeans-libs-batik-read.sig
index fb64808..579cff0 100644
--- a/platform/libs.batik.read/nbproject/org-netbeans-libs-batik-read.sig
+++ b/platform/libs.batik.read/nbproject/org-netbeans-libs-batik-read.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.10.0
+#Version 1.11.0
 
 CLSS public java.awt.Color
 cons public init(float,float,float)
diff --git a/platform/libs.batik.read/nbproject/project.properties b/platform/libs.batik.read/nbproject/project.properties
index f194a43..8865681 100644
--- a/platform/libs.batik.read/nbproject/project.properties
+++ b/platform/libs.batik.read/nbproject/project.properties
@@ -51,7 +51,7 @@
 release.external/xmlgraphics-commons-2.6.jar=modules/ext/xmlgraphics-commons-2.6.jar
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 
 nbm.homepage=https://xmlgraphics.apache.org/batik/
 sigtest.gen.fail.on.error=false
diff --git a/platform/libs.flatlaf/nbproject/org-netbeans-libs-flatlaf.sig b/platform/libs.flatlaf/nbproject/org-netbeans-libs-flatlaf.sig
index aa8da47..623a2ac 100644
--- a/platform/libs.flatlaf/nbproject/org-netbeans-libs-flatlaf.sig
+++ b/platform/libs.flatlaf/nbproject/org-netbeans-libs-flatlaf.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.11
+#Version 1.12
 
 CLSS public abstract interface com.formdev.flatlaf.FlatClientProperties
 fld public final static java.lang.String BUTTON_TYPE = "JButton.buttonType"
@@ -11,6 +11,7 @@
 fld public final static java.lang.String BUTTON_TYPE_TOOLBAR_BUTTON = "toolBarButton"
 fld public final static java.lang.String COMPONENT_FOCUS_OWNER = "JComponent.focusOwner"
 fld public final static java.lang.String COMPONENT_ROUND_RECT = "JComponent.roundRect"
+fld public final static java.lang.String COMPONENT_TITLE_BAR_CAPTION = "JComponent.titleBarCaption"
 fld public final static java.lang.String MENU_BAR_EMBEDDED = "JRootPane.menuBarEmbedded"
 fld public final static java.lang.String MINIMUM_HEIGHT = "JComponent.minimumHeight"
 fld public final static java.lang.String MINIMUM_WIDTH = "JComponent.minimumWidth"
@@ -185,6 +186,7 @@
 meth public java.util.Map<java.lang.String,java.lang.String> getExtraDefaults()
 meth public javax.swing.Icon getDisabledIcon(javax.swing.JComponent,javax.swing.Icon)
 meth public javax.swing.UIDefaults getDefaults()
+meth public static <%0 extends java.lang.Object> {%%0} getStyleableValue(javax.swing.JComponent,java.lang.String)
 meth public static boolean install(javax.swing.LookAndFeel)
  anno 0 java.lang.Deprecated()
 meth public static boolean isLafDark()
@@ -193,6 +195,7 @@
 meth public static boolean setup(javax.swing.LookAndFeel)
 meth public static boolean supportsNativeWindowDecorations()
 meth public static java.lang.Object parseDefaultsValue(java.lang.String,java.lang.String,java.lang.Class<?>)
+meth public static java.util.Map<java.lang.String,java.lang.Class<?>> getStyleableInfos(javax.swing.JComponent)
 meth public static java.util.Map<java.lang.String,java.lang.String> getGlobalExtraDefaults()
 meth public static javax.swing.UIDefaults$ActiveValue createActiveFontValue(float)
 meth public static void hideMnemonics()
@@ -220,7 +223,7 @@
 meth public void uninitialize()
 meth public void unregisterUIDefaultsGetter(java.util.function.Function<java.lang.Object,java.lang.Object>)
 supr javax.swing.plaf.basic.BasicLookAndFeel
-hfds DESKTOPFONTHINTS,aquaLoaded,customDefaultsSources,desktopPropertyListener,desktopPropertyName,desktopPropertyName2,extraDefaults,globalExtraDefaults,mnemonicHandler,oldPopupFactory,postInitialization,subMenuUsabilityHelperInstalled,uiDefaultsGetters,updateUIPending
+hfds DESKTOPFONTHINTS,aquaLoaded,customDefaultsSources,desktopPropertyListener,desktopPropertyName,desktopPropertyName2,extraDefaults,getUIMethod,getUIMethodInitialized,globalExtraDefaults,mnemonicHandler,oldPopupFactory,postInitialization,subMenuUsabilityHelperInstalled,uiDefaultsGetters,updateUIPending
 hcls ActiveFont,FlatUIDefaults,ImageIconUIResource
 
 CLSS public abstract interface static com.formdev.flatlaf.FlatLaf$DisabledIconProvider
@@ -259,6 +262,7 @@
 fld public final static java.lang.String UI_SCALE = "flatlaf.uiScale"
 fld public final static java.lang.String UI_SCALE_ALLOW_SCALE_DOWN = "flatlaf.uiScale.allowScaleDown"
 fld public final static java.lang.String UI_SCALE_ENABLED = "flatlaf.uiScale.enabled"
+fld public final static java.lang.String UPDATE_UI_ON_SYSTEM_FONT_CHANGE = "flatlaf.updateUIOnSystemFontChange"
 fld public final static java.lang.String USE_JETBRAINS_CUSTOM_DECORATIONS = "flatlaf.useJetBrainsCustomDecorations"
 fld public final static java.lang.String USE_TEXT_Y_CORRECTION = "flatlaf.useTextYCorrection"
 fld public final static java.lang.String USE_UBUNTU_FONT = "flatlaf.useUbuntuFont"
@@ -600,6 +604,7 @@
 
 CLSS public com.formdev.flatlaf.util.NativeLibrary
 cons public init(java.io.File,boolean)
+cons public init(java.lang.String,boolean)
 cons public init(java.lang.String,java.lang.ClassLoader,boolean)
 meth public boolean isLoaded()
 supr java.lang.Object
diff --git a/platform/libs.javafx/nbproject/org-netbeans-libs-javafx.sig b/platform/libs.javafx/nbproject/org-netbeans-libs-javafx.sig
index b30b415..2deee95 100644
--- a/platform/libs.javafx/nbproject/org-netbeans-libs-javafx.sig
+++ b/platform/libs.javafx/nbproject/org-netbeans-libs-javafx.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.24
+#Version 2.25
 
 CLSS public abstract interface !annotation com.sun.javafx.beans.IDProperty
  anno 0 java.lang.annotation.Documented()
diff --git a/platform/libs.javafx/nbproject/project.properties b/platform/libs.javafx/nbproject/project.properties
index c9c97fe..da31a68 100644
--- a/platform/libs.javafx/nbproject/project.properties
+++ b/platform/libs.javafx/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.target=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 is.autoload=true
diff --git a/platform/libs.jna.platform/nbproject/project.properties b/platform/libs.jna.platform/nbproject/project.properties
index 98355e2..8cac991 100644
--- a/platform/libs.jna.platform/nbproject/project.properties
+++ b/platform/libs.jna.platform/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 release.external/jna-platform-5.12.1.jar=modules/ext/jna-platform-5.12.1.jar
 sigtest.gen.fail.on.error=false
diff --git a/platform/libs.jna/nbproject/project.properties b/platform/libs.jna/nbproject/project.properties
index 84644e4..ad90b6c 100644
--- a/platform/libs.jna/nbproject/project.properties
+++ b/platform/libs.jna/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 release.external/jna-5.12.1.jar=modules/ext/jna-5.12.1.jar
 # Do not forget to rename native libs being extracted from the JAR when upgrading the JNA library, and patch org.netbeans.libs.jna.Installer as well.
 release.external/jna-5.12.1.jar!/com/sun/jna/darwin-x86-64/libjnidispatch.jnilib=modules/lib/x86_64/libjnidispatch-nb.jnilib
diff --git a/platform/libs.jsr223/nbproject/org-netbeans-libs-jsr223.sig b/platform/libs.jsr223/nbproject/org-netbeans-libs-jsr223.sig
index be90437..0f6eb18 100644
--- a/platform/libs.jsr223/nbproject/org-netbeans-libs-jsr223.sig
+++ b/platform/libs.jsr223/nbproject/org-netbeans-libs-jsr223.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 1.52
+#Version 1.53
 
diff --git a/platform/libs.junit4/nbproject/org-netbeans-libs-junit4.sig b/platform/libs.junit4/nbproject/org-netbeans-libs-junit4.sig
index 721ea3b..1074d7b 100644
--- a/platform/libs.junit4/nbproject/org-netbeans-libs-junit4.sig
+++ b/platform/libs.junit4/nbproject/org-netbeans-libs-junit4.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.35
+#Version 1.36
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/libs.junit5/nbproject/org-netbeans-libs-junit5.sig b/platform/libs.junit5/nbproject/org-netbeans-libs-junit5.sig
index c2b8aeb..09cb3e5 100644
--- a/platform/libs.junit5/nbproject/org-netbeans-libs-junit5.sig
+++ b/platform/libs.junit5/nbproject/org-netbeans-libs-junit5.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.14
+#Version 1.15
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/libs.osgi/nbproject/org-netbeans-libs-osgi.sig b/platform/libs.osgi/nbproject/org-netbeans-libs-osgi.sig
index 90d5a91..eb9369e 100644
--- a/platform/libs.osgi/nbproject/org-netbeans-libs-osgi.sig
+++ b/platform/libs.osgi/nbproject/org-netbeans-libs-osgi.sig
@@ -1,3 +1,3 @@
 #Signature file v4.1
-#Version 1.39
+#Version 1.40
 
diff --git a/platform/libs.osgi/nbproject/project.properties b/platform/libs.osgi/nbproject/project.properties
index a79f892..a9acf05 100644
--- a/platform/libs.osgi/nbproject/project.properties
+++ b/platform/libs.osgi/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 release.external/osgi.core-8.0.0.jar=modules/ext/osgi.core-8.0.0.jar
diff --git a/platform/libs.testng/nbproject/org-netbeans-libs-testng.sig b/platform/libs.testng/nbproject/org-netbeans-libs-testng.sig
index f48c078..c8301fe 100644
--- a/platform/libs.testng/nbproject/org-netbeans-libs-testng.sig
+++ b/platform/libs.testng/nbproject/org-netbeans-libs-testng.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.31
+#Version 1.32
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/masterfs.linux/nbproject/project.properties b/platform/masterfs.linux/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/platform/masterfs.linux/nbproject/project.properties
+++ b/platform/masterfs.linux/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/platform/masterfs.macosx/nbproject/project.properties b/platform/masterfs.macosx/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/platform/masterfs.macosx/nbproject/project.properties
+++ b/platform/masterfs.macosx/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/platform/masterfs.ui/nbproject/org-netbeans-modules-masterfs-ui.sig b/platform/masterfs.ui/nbproject/org-netbeans-modules-masterfs-ui.sig
index 925f670..664f181 100644
--- a/platform/masterfs.ui/nbproject/org-netbeans-modules-masterfs-ui.sig
+++ b/platform/masterfs.ui/nbproject/org-netbeans-modules-masterfs-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.20.0
+#Version 2.21.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/masterfs.ui/nbproject/project.properties b/platform/masterfs.ui/nbproject/project.properties
index 76cd308..699993e 100644
--- a/platform/masterfs.ui/nbproject/project.properties
+++ b/platform/masterfs.ui/nbproject/project.properties
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=2.22.0
diff --git a/platform/masterfs.windows/nbproject/project.properties b/platform/masterfs.windows/nbproject/project.properties
index 6de45e1..0f73a11 100644
--- a/platform/masterfs.windows/nbproject/project.properties
+++ b/platform/masterfs.windows/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/platform/masterfs/nbproject/org-netbeans-modules-masterfs.sig b/platform/masterfs/nbproject/org-netbeans-modules-masterfs.sig
index 9029c22..f1f4af4 100644
--- a/platform/masterfs/nbproject/org-netbeans-modules-masterfs.sig
+++ b/platform/masterfs/nbproject/org-netbeans-modules-masterfs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.72.0
+#Version 2.73.0
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/netbinox/nbproject/org-netbeans-modules-netbinox.sig b/platform/netbinox/nbproject/org-netbeans-modules-netbinox.sig
index c3058ed..423da2f 100644
--- a/platform/netbinox/nbproject/org-netbeans-modules-netbinox.sig
+++ b/platform/netbinox/nbproject/org-netbeans-modules-netbinox.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.58
+#Version 1.59
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/o.n.bootstrap/launcher/unix/nbexec b/platform/o.n.bootstrap/launcher/unix/nbexec
index ef01e28..0b52178 100755
--- a/platform/o.n.bootstrap/launcher/unix/nbexec
+++ b/platform/o.n.bootstrap/launcher/unix/nbexec
@@ -216,7 +216,7 @@
         if [ "`echo "${dir}"/*.$ex`" != "${dir}/*.$ex" ] ; then
             for x in "${dir}"/*.$ex ; do
                 subx=`basename "$x"`
-                if [ -z "`echo "$paths" | egrep "$subpath$subx"`" ] ; then
+                if [ -z "`echo "$paths" | grep -E "$subpath$subx"`" ] ; then
                     if [ ! -z "$cp" ] ; then cp="$cp:" ; fi
                     cp="$cp$x"
                     if [ ! -z "$paths" ] ; then paths="$paths:" ; fi
diff --git a/platform/o.n.bootstrap/nbproject/org-netbeans-bootstrap.sig b/platform/o.n.bootstrap/nbproject/org-netbeans-bootstrap.sig
index d3a4902..d77fb7c 100644
--- a/platform/o.n.bootstrap/nbproject/org-netbeans-bootstrap.sig
+++ b/platform/o.n.bootstrap/nbproject/org-netbeans-bootstrap.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.95
+#Version 2.96
 
 CLSS public java.awt.datatransfer.Clipboard
 cons public init(java.lang.String)
@@ -287,7 +287,7 @@
 meth public static void saveArchive()
 meth public void destroy()
 supr org.netbeans.ProxyClassLoader
-hfds LOGGER,archive,cache,module,patchingBytecode,sources
+hfds BASE_VERSION,LOGGER,META_INF,MULTI_RELEASE,RUNTIME_VERSION,archive,cache,module,patchingBytecode,sources
 hcls DirSource,JarSource,JarURLStreamHandler,NbJarURLConnection,Source
 
 CLSS public final org.netbeans.JaveleonModule
@@ -456,8 +456,8 @@
 meth public void reload(org.netbeans.Module) throws java.io.IOException
 meth public void replaceJaveleonModule(org.netbeans.Module,org.netbeans.Module)
 supr org.openide.modules.Modules
-hfds EMPTY_COLLECTION,MODULE_PROBLEMS_LOCK,MUTEX,MUTEX_PRIVILEGED,PRINT_TOPOLOGICAL_EXCEPTION_STACK_TRACES,PROBING_IN_PROCESS,bootstrapModules,changeSupport,classLoader,classLoaderLock,classLoaderPatches,completeLookup,ev,firer,fragmentModules,installer,lookup,mdc,moduleFactory,moduleProblemsWithNeeds,moduleProblemsWithoutNeeds,modules,modulesByName,netigso,providersOf,readOnly
-hcls CodeNameBaseComparator,ModuleDataCache,ProvidersOf,SystemClassLoader
+hfds EMPTY_COLLECTION,MODULE_PROBLEMS_LOCK,MUTEX,MUTEX_PRIVILEGED,PRINT_TOPOLOGICAL_EXCEPTION_STACK_TRACES,PROBING_IN_PROCESS,bootstrapModules,changeSupport,classLoader,classLoaderLock,classLoaderPatches,completeLookup,enableContext,ev,firer,fragmentModules,installer,lookup,mdc,moduleFactory,moduleProblemsWithNeeds,moduleProblemsWithoutNeeds,modules,modulesByName,netigso,providersOf,readOnly
+hcls CodeNameBaseComparator,EnableContext,ModuleDataCache,ProvidersOf,SystemClassLoader
 
 CLSS public final org.netbeans.NbClipboard
 cons public init()
diff --git a/platform/o.n.core/nbproject/org-netbeans-core.sig b/platform/o.n.core/nbproject/org-netbeans-core.sig
index 25271d1..d0c46c8 100644
--- a/platform/o.n.core/nbproject/org-netbeans-core.sig
+++ b/platform/o.n.core/nbproject/org-netbeans-core.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.68
+#Version 3.69
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/o.n.core/src/org/netbeans/beaninfo/editors/ColorEditor.java b/platform/o.n.core/src/org/netbeans/beaninfo/editors/ColorEditor.java
index 1c9f4aa..ad4524a 100644
--- a/platform/o.n.core/src/org/netbeans/beaninfo/editors/ColorEditor.java
+++ b/platform/o.n.core/src/org/netbeans/beaninfo/editors/ColorEditor.java
@@ -940,6 +940,7 @@
     /**
      * @deprecated Use {@link GraphicsUtils#configureDefaultRenderingHints(java.awt.Graphics)} instead
      */
+    @Deprecated
     public static final boolean gtkShouldAntialias() {
         if (gtkAA == null) {
             Object o = Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Xft/Antialias"); //NOI18N
diff --git a/platform/o.n.core/src/org/netbeans/beaninfo/editors/StringCustomEditor.java b/platform/o.n.core/src/org/netbeans/beaninfo/editors/StringCustomEditor.java
index 16afedb..4fe9a40 100644
--- a/platform/o.n.core/src/org/netbeans/beaninfo/editors/StringCustomEditor.java
+++ b/platform/o.n.core/src/org/netbeans/beaninfo/editors/StringCustomEditor.java
@@ -68,6 +68,7 @@
     
     /** Initializes the Form 
      * @deprecated Nothing should be using this constructor */
+    @Deprecated
     public StringCustomEditor(String s, boolean editable) {
         init (s, editable);
     }
diff --git a/platform/o.n.core/src/org/netbeans/core/UIExceptions.java b/platform/o.n.core/src/org/netbeans/core/UIExceptions.java
index 7f28e20..ead5d0f 100644
--- a/platform/o.n.core/src/org/netbeans/core/UIExceptions.java
+++ b/platform/o.n.core/src/org/netbeans/core/UIExceptions.java
@@ -137,7 +137,7 @@
 
                 for (LogRecord log : r) {
                     if (log.getMessage() != null) {
-                        a.append(log.getMessage()).append("\n");;
+                        a.append(log.getMessage()).append("\n");
                     }
                     if (log.getThrown() != null) {
                         StringWriter w = new StringWriter();
diff --git a/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.form b/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.form
index 0bef3f7..94d89c5 100644
--- a/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.form
+++ b/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.form
@@ -141,8 +141,6 @@
         <Property name="verticalScrollBarPolicy" type="int" value="21"/>
       </Properties>
       <AuxValues>
-        <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
-        <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
         <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
       </AuxValues>
 
diff --git a/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.java b/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.java
index 78097f7..a6d3b7f 100644
--- a/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.java
+++ b/platform/o.n.core/src/org/netbeans/core/ui/ProductInformationPanel.java
@@ -36,6 +36,7 @@
 import javax.swing.Icon;
 import javax.swing.JEditorPane;
 import javax.swing.JPanel;
+import javax.swing.ScrollPaneConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.event.HyperlinkEvent;
@@ -102,6 +103,7 @@
             final String updates = getUpdates();
             SwingUtilities.invokeLater(() -> {
                 description.setText(LBL_description(getProductVersionValue(), getJavaValue(), getVMValue(), getOperatingSystemValue(), getEncodingValue(), getSystemLocaleValue(), getUserDirValue(), Places.getCacheDirectory().getAbsolutePath(), updates, FONT_SIZE, getJavaRuntime()));
+                descriptionScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // will need a scrollbar now
                 description.setCursor(null);
                 description.revalidate();
                 description.setCaretPosition(0);
@@ -156,7 +158,7 @@
         javax.swing.JButton closeButton = new javax.swing.JButton();
         javax.swing.JScrollPane copyrightScrollPane = new javax.swing.JScrollPane();
         copyright = new javax.swing.JTextPane();
-        javax.swing.JScrollPane descriptionScrollPane = new javax.swing.JScrollPane();
+        descriptionScrollPane = new javax.swing.JScrollPane();
         description = new javax.swing.JTextPane();
         javax.swing.JPanel imagePanel = new javax.swing.JPanel();
         imageLabel = new javax.swing.JLabel();
@@ -242,6 +244,7 @@
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JTextPane copyright;
     private javax.swing.JTextPane description;
+    private javax.swing.JScrollPane descriptionScrollPane;
     private javax.swing.JLabel imageLabel;
     // End of variables declaration//GEN-END:variables
     
diff --git a/platform/o.n.core/test/qa-functional/src/gui/propertyeditors/PropertyType_Icon.java b/platform/o.n.core/test/qa-functional/src/gui/propertyeditors/PropertyType_Icon.java
index ea11572..817b6d3 100644
--- a/platform/o.n.core/test/qa-functional/src/gui/propertyeditors/PropertyType_Icon.java
+++ b/platform/o.n.core/test/qa-functional/src/gui/propertyeditors/PropertyType_Icon.java
@@ -118,7 +118,7 @@
     }
  */
     public void testByInPlace(){
-        propertyValue_L = CLASSPATH +"/trash/PropertyEditorsTest.java";;
+        propertyValue_L = CLASSPATH +"/trash/PropertyEditorsTest.java";
         propertyValueExpectation_L = "Invalid value " + propertyValue_L;
         waitDialog = false;
         setByInPlace(propertyName_L, propertyValue_L, true);
diff --git a/platform/o.n.swing.outline/nbproject/org-netbeans-swing-outline.sig b/platform/o.n.swing.outline/nbproject/org-netbeans-swing-outline.sig
index 9794bc6..d51318b 100644
--- a/platform/o.n.swing.outline/nbproject/org-netbeans-swing-outline.sig
+++ b/platform/o.n.swing.outline/nbproject/org-netbeans-swing-outline.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.51
+#Version 1.52
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/o.n.swing.outline/src/org/netbeans/swing/etable/ETable.java b/platform/o.n.swing.outline/src/org/netbeans/swing/etable/ETable.java
index 238d8e8..1e6ac10 100644
--- a/platform/o.n.swing.outline/src/org/netbeans/swing/etable/ETable.java
+++ b/platform/o.n.swing.outline/src/org/netbeans/swing/etable/ETable.java
@@ -2701,7 +2701,7 @@
         if (c == editorComp) {
             return true;
         }
-        if (editorComp != null && (editorComp instanceof Container) &&
+        if (editorComp instanceof Container &&
             ((Container) editorComp).isAncestorOf(c)) {
                 return true;
         }
diff --git a/platform/o.n.swing.plaf/nbproject/org-netbeans-swing-plaf.sig b/platform/o.n.swing.plaf/nbproject/org-netbeans-swing-plaf.sig
index 21bbf04..3b8d058 100644
--- a/platform/o.n.swing.plaf/nbproject/org-netbeans-swing-plaf.sig
+++ b/platform/o.n.swing.plaf/nbproject/org-netbeans-swing-plaf.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.59
+#Version 1.60
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/AllLFCustoms.java b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/AllLFCustoms.java
index c09d9f6..e35adc4 100644
--- a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/AllLFCustoms.java
+++ b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/AllLFCustoms.java
@@ -112,7 +112,7 @@
         
         Map<Font, Font> fontTranslation = new HashMap<Font, Font>(5);
         
-        if( "Nimbus".equals( UIManager.getLookAndFeel().getID() ) ) { //NOI18N
+        if( UIManager.getFont("defaultFont") != null ) { //NOI18N
             switchFont("defaultFont", fontTranslation, uiFontSize, nbDialogPlain); // NOI18N
         }
         switchFont("controlFont", fontTranslation, uiFontSize, nbDialogPlain); // NOI18N
diff --git a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/Startup.java b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/Startup.java
index 3b49194..2d7c828 100644
--- a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/Startup.java
+++ b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/Startup.java
@@ -537,7 +537,7 @@
           // Modify default font size to the font size passed as a command-line parameter
             if(uiFontSize>0) {
                 Integer customFontSize = new Integer (uiFontSize);
-                UIManager.put ("customFontSize", customFontSize);
+                UIManager.put (LFCustoms.CUSTOM_FONT_SIZE, customFontSize);
             }
             Startup.uiClass = uiClass;
             Startup.themeURL = themeURL;
diff --git a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/AdaptiveMatteBorder.java b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/AdaptiveMatteBorder.java
index eb74e99..f7f6dc9 100644
--- a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/AdaptiveMatteBorder.java
+++ b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/AdaptiveMatteBorder.java
@@ -138,7 +138,7 @@
         if (c.getParent() instanceof JComponent) {
             JComponent jc = (JComponent) c.getParent();
             Object o = jc.getClientProperty("viewType");
-            if (o != null && o instanceof Integer) {
+            if (o instanceof Integer) {
                 return ((Integer) o).intValue() == 0;
             }
         }
diff --git a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/GtkToolBarButtonUI.java b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/GtkToolBarButtonUI.java
index 59767fa..f1adc46 100644
--- a/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/GtkToolBarButtonUI.java
+++ b/platform/o.n.swing.plaf/src/org/netbeans/swing/plaf/gtk/GtkToolBarButtonUI.java
@@ -75,7 +75,7 @@
         } else if (b.getModel().isPressed()) {
             compositeColor (g, r, Color.BLUE, 0.3f);
         } else if (b.getModel().isSelected()) {
-            compositeColor (g, r, new Color (0, 120, 255), 0.2f);;
+            compositeColor (g, r, new Color (0, 120, 255), 0.2f);
         } 
     }
     
diff --git a/platform/o.n.swing.tabcontrol/beanstubs/org/openide/util/Utilities.java b/platform/o.n.swing.tabcontrol/beanstubs/org/openide/util/Utilities.java
index 312cc10..aef86a6 100644
--- a/platform/o.n.swing.tabcontrol/beanstubs/org/openide/util/Utilities.java
+++ b/platform/o.n.swing.tabcontrol/beanstubs/org/openide/util/Utilities.java
@@ -75,6 +75,7 @@
     /** Operating system is Compaq TRU64 Unix */
     public static final int OS_TRU64 = OS_SUNOS << 1;
     /** @deprecated please use OS_TRU64 instead */
+    @Deprecated
     public static final int OS_DEC = OS_TRU64 << 1;
     /** Operating system is OS/2. */
     public static final int OS_OS2 = OS_DEC << 1;
diff --git a/platform/o.n.swing.tabcontrol/nbproject/org-netbeans-swing-tabcontrol.sig b/platform/o.n.swing.tabcontrol/nbproject/org-netbeans-swing-tabcontrol.sig
index 2771c94..c7afc65 100644
--- a/platform/o.n.swing.tabcontrol/nbproject/org-netbeans-swing-tabcontrol.sig
+++ b/platform/o.n.swing.tabcontrol/nbproject/org-netbeans-swing-tabcontrol.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.74
+#Version 1.75
 
 CLSS public abstract java.awt.AWTEvent
 cons public init(java.awt.Event)
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainer.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainer.java
index 63c3a55..b798be6 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainer.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainer.java
@@ -931,7 +931,7 @@
             Component c = getModel().getTab(0).getComponent();
             if( c instanceof JComponent ) {
                 Object val = ((JComponent)c).getClientProperty("isSliding"); //NOI18N
-                res = null != val && val instanceof Boolean && ((Boolean)val).booleanValue();
+                res = val instanceof Boolean && ((Boolean) val).booleanValue();
             }
         }
         return res;
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractViewTabDisplayerUI.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractViewTabDisplayerUI.java
index 6fe907c..41f045ed 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractViewTabDisplayerUI.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractViewTabDisplayerUI.java
@@ -742,8 +742,8 @@
                     getSelectionModel().setSelectedIndex(i);
                     tabState.setSelected(i);
                     Component tc = i >= 0 ? getDataModel().getTab(i).getComponent() : null;
-                    if( null != tc && tc instanceof TopComponent
-                        && !((TopComponent)tc).isAncestorOf( KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner() ) ) {
+                    if(tc instanceof TopComponent
+                       && !((TopComponent) tc).isAncestorOf(KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner())) {
                         ((TopComponent)tc).requestActive();
                     }
                 }
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/BasicTabDisplayerUI.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/BasicTabDisplayerUI.java
index dae00b8..c45c3d5 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/BasicTabDisplayerUI.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/BasicTabDisplayerUI.java
@@ -351,6 +351,7 @@
     /**
      * @deprecated Use {@link GraphicsUtils#configureDefaultRenderingHints(java.awt.Graphics)} instead.
      */
+    @Deprecated
     protected boolean isAntialiased() {
         return ColorUtil.shouldAntialias();
     }
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ChicletWrapper.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ChicletWrapper.java
index 7a7d5f4..c1ecaa6 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ChicletWrapper.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ChicletWrapper.java
@@ -38,6 +38,7 @@
  * @deprecated The new brushed metal look and feel doesn't need this class anymore.
  * @author Tim Boudreau
  */
+@Deprecated
 public class ChicletWrapper implements Runnable {
     private boolean allowVertical = true;
     private boolean leftNotch = false;
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ColorUtil.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ColorUtil.java
index 170e478..63ab1cf 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ColorUtil.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/ColorUtil.java
@@ -182,6 +182,7 @@
     /**
      * @deprecated Use {@link GraphicsUtils#configureDefaultRenderingHints(java.awt.Graphics)} instead.
      */
+    @Deprecated
     public static final boolean shouldAntialias() {
         return antialias;
     }
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusEditorTabCellRenderer.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusEditorTabCellRenderer.java
index 0aa2d1e..73109fb 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusEditorTabCellRenderer.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusEditorTabCellRenderer.java
@@ -115,7 +115,7 @@
         } else {
             o = UIManager.get("TabbedPane:TabbedPaneTab[Enabled].backgroundPainter");
         }
-        if ((o != null) && (o instanceof javax.swing.Painter)) {
+        if (o instanceof javax.swing.Painter) {
             javax.swing.Painter painter = (javax.swing.Painter) o;
             BufferedImage bufIm = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
             Graphics2D g2d = bufIm.createGraphics();
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusViewTabDisplayerUI.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusViewTabDisplayerUI.java
index 7a60b6f..43bc3b9 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusViewTabDisplayerUI.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/NimbusViewTabDisplayerUI.java
@@ -235,7 +235,7 @@
             }
         }
 
-        if ((o != null) && (o instanceof javax.swing.Painter)) {
+        if (o instanceof javax.swing.Painter) {
             javax.swing.Painter painter = (javax.swing.Painter) o;
             BufferedImage bufIm = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
             Graphics2D g2d = bufIm.createGraphics();
@@ -261,7 +261,7 @@
         Object o = null;
         o = UIManager.get("TabbedPane:TabbedPaneTab[Enabled].backgroundPainter");
 
-        if ((o != null) && (o instanceof javax.swing.Painter)) {
+        if (o instanceof javax.swing.Painter) {
             javax.swing.Painter painter = (javax.swing.Painter) o;
             BufferedImage bufIm = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
             Graphics2D g2d = bufIm.createGraphics();
diff --git a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/SlidingTabDisplayerButtonUI.java b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/SlidingTabDisplayerButtonUI.java
index 989a59e..3ad575d 100644
--- a/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/SlidingTabDisplayerButtonUI.java
+++ b/platform/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/SlidingTabDisplayerButtonUI.java
@@ -191,6 +191,7 @@
      * 
      * @deprecated No brushed metal look and feel doesn't need this class anymore.
      */
+    @Deprecated
     public static final class Aqua extends SlidingTabDisplayerButtonUI {
         public static ComponentUI createUI(JComponent c) {
             if (AQUA_INSTANCE == null) {
diff --git a/platform/openide.actions/nbproject/org-openide-actions.sig b/platform/openide.actions/nbproject/org-openide-actions.sig
index eeb7210..dd3f898 100644
--- a/platform/openide.actions/nbproject/org-openide-actions.sig
+++ b/platform/openide.actions/nbproject/org-openide-actions.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.56
+#Version 6.57
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/CloneViewActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/CloneViewActionTest.java
index da15047..2560b6b 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/CloneViewActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/CloneViewActionTest.java
@@ -89,7 +89,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(CloneViewAction.class);; 
+        HelpCtx expected = new HelpCtx(CloneViewAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/CloseViewActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/CloseViewActionTest.java
index 6ecff05..bee2421 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/CloseViewActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/CloseViewActionTest.java
@@ -76,7 +76,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(CloseViewAction.class);; 
+        HelpCtx expected = new HelpCtx(CloseViewAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/EditActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/EditActionTest.java
index 2d2970f..71aa63a 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/EditActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/EditActionTest.java
@@ -100,7 +100,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(EditAction.class);; 
+        HelpCtx expected = new HelpCtx(EditAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/FindActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/FindActionTest.java
index b66e0e1..db8bb39 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/FindActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/FindActionTest.java
@@ -79,7 +79,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(FindAction.class);; 
+        HelpCtx expected = new HelpCtx(FindAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/GotoActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/GotoActionTest.java
index 49c814d..e6eb689 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/GotoActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/GotoActionTest.java
@@ -79,7 +79,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(GotoAction.class);; 
+        HelpCtx expected = new HelpCtx(GotoAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/NextTabActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/NextTabActionTest.java
index 4386141..ac5d38d 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/NextTabActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/NextTabActionTest.java
@@ -79,7 +79,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(NextTabAction.class);; 
+        HelpCtx expected = new HelpCtx(NextTabAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/OpenActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/OpenActionTest.java
index 22f2f90..33e74a2 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/OpenActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/OpenActionTest.java
@@ -119,7 +119,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(OpenAction.class);; 
+        HelpCtx expected = new HelpCtx(OpenAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.actions/test/unit/src/org/openide/actions/PageSetupActionTest.java b/platform/openide.actions/test/unit/src/org/openide/actions/PageSetupActionTest.java
index 54b092f..9a477ce 100644
--- a/platform/openide.actions/test/unit/src/org/openide/actions/PageSetupActionTest.java
+++ b/platform/openide.actions/test/unit/src/org/openide/actions/PageSetupActionTest.java
@@ -125,7 +125,7 @@
      * Test getHelpCtx method. 
      */ 
     public void testGetHelpCtx() { 
-        HelpCtx expected = new HelpCtx(PageSetupAction.class);; 
+        HelpCtx expected = new HelpCtx(PageSetupAction.class);
         HelpCtx result   = instance.getHelpCtx(); 
          
         assertEquals(expected, result); 
diff --git a/platform/openide.awt/nbproject/org-openide-awt.sig b/platform/openide.awt/nbproject/org-openide-awt.sig
index 21b4bf5..b0df9ecf 100644
--- a/platform/openide.awt/nbproject/org-openide-awt.sig
+++ b/platform/openide.awt/nbproject/org-openide-awt.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.85
+#Version 7.86
 
 CLSS public java.awt.Canvas
 cons public init()
diff --git a/platform/openide.awt/src/org/openide/awt/SplittedPanel.java b/platform/openide.awt/src/org/openide/awt/SplittedPanel.java
index 58608a32..a2364d7 100644
--- a/platform/openide.awt/src/org/openide/awt/SplittedPanel.java
+++ b/platform/openide.awt/src/org/openide/awt/SplittedPanel.java
@@ -778,14 +778,12 @@
 
         getAccessibleContext().setAccessibleName(
             nameFormat.format(
-                new Object[] {
-                    ((firstComponent == null) || !(firstComponent instanceof Accessible)) ? null
-                                                                                          : firstComponent.getAccessibleContext()
-                                                                                                          .getAccessibleName(),
-                    ((secondComponent == null) || !(secondComponent instanceof Accessible)) ? null
-                                                                                            : secondComponent.getAccessibleContext()
-                                                                                                             .getAccessibleName()
-                }
+                    new Object[]{
+                            (!(firstComponent instanceof Accessible)) ? null
+                                    : firstComponent.getAccessibleContext().getAccessibleName(),
+                            (!(secondComponent instanceof Accessible)) ? null
+                                    : secondComponent.getAccessibleContext().getAccessibleName()
+                    }
             )
         );
 
@@ -796,14 +794,12 @@
 
         getAccessibleContext().setAccessibleDescription(
             descriptionFormat.format(
-                new Object[] {
-                    ((firstComponent == null) || !(firstComponent instanceof Accessible)) ? null
-                                                                                          : firstComponent.getAccessibleContext()
-                                                                                                          .getAccessibleDescription(),
-                    ((secondComponent == null) || !(secondComponent instanceof Accessible)) ? null
-                                                                                            : secondComponent.getAccessibleContext()
-                                                                                                             .getAccessibleDescription()
-                }
+                    new Object[]{
+                            (!(firstComponent instanceof Accessible)) ? null
+                                    : firstComponent.getAccessibleContext().getAccessibleDescription(),
+                            (!(secondComponent instanceof Accessible)) ? null
+                                    : secondComponent.getAccessibleContext().getAccessibleDescription()
+                    }
             )
         );
     }
diff --git a/platform/openide.compat/nbproject/org-openide-compat.sig b/platform/openide.compat/nbproject/org-openide-compat.sig
index 6bc943f..ff79fea 100644
--- a/platform/openide.compat/nbproject/org-openide-compat.sig
+++ b/platform/openide.compat/nbproject/org-openide-compat.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.57
+#Version 6.58
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -1660,6 +1660,7 @@
 meth public static int getOperatingSystem()
 meth public static int showJFileChooser(javax.swing.JFileChooser,java.awt.Component,java.lang.String)
  anno 0 java.lang.Deprecated()
+meth public static java.awt.Component findDialogParent()
 meth public static java.awt.Component getFocusTraversableComponent(java.awt.Component)
 meth public static java.awt.Cursor createCustomCursor(java.awt.Component,java.awt.Image,java.lang.String)
 meth public static java.awt.Cursor createProgressCursor(java.awt.Component)
diff --git a/platform/openide.dialogs/nbproject/org-openide-dialogs.sig b/platform/openide.dialogs/nbproject/org-openide-dialogs.sig
index 8442e28..0962dd4 100644
--- a/platform/openide.dialogs/nbproject/org-openide-dialogs.sig
+++ b/platform/openide.dialogs/nbproject/org-openide-dialogs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.63
+#Version 7.64
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/openide.execution.compat8/nbproject/org-openide-execution-compat8.sig b/platform/openide.execution.compat8/nbproject/org-openide-execution-compat8.sig
index 179a376..c35280a 100644
--- a/platform/openide.execution.compat8/nbproject/org-openide-execution-compat8.sig
+++ b/platform/openide.execution.compat8/nbproject/org-openide-execution-compat8.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.19
+#Version 9.20
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/openide.execution/nbproject/org-openide-execution.sig b/platform/openide.execution/nbproject/org-openide-execution.sig
index c07da61..14608e7 100644
--- a/platform/openide.execution/nbproject/org-openide-execution.sig
+++ b/platform/openide.execution/nbproject/org-openide-execution.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.20
+#Version 9.21
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/openide.execution/src/org/openide/execution/ExecutionEngine.java b/platform/openide.execution/src/org/openide/execution/ExecutionEngine.java
index 9ed92b5..30e4cc5 100644
--- a/platform/openide.execution/src/org/openide/execution/ExecutionEngine.java
+++ b/platform/openide.execution/src/org/openide/execution/ExecutionEngine.java
@@ -74,6 +74,7 @@
      * @deprecated There are generally no excuses to be using this method as part of a normal module;
      * its exact meaning is vague, and probably not what you want.
     */
+    @Deprecated
     protected abstract NbClassPath createLibraryPath ();
     
     /**
diff --git a/platform/openide.execution/src/org/openide/execution/NbClassLoader.java b/platform/openide.execution/src/org/openide/execution/NbClassLoader.java
index 72f62c5..f074110 100644
--- a/platform/openide.execution/src/org/openide/execution/NbClassLoader.java
+++ b/platform/openide.execution/src/org/openide/execution/NbClassLoader.java
@@ -66,6 +66,7 @@
      * @see FileSystemCapability#fileSystems
      * @deprecated Misuses classpath.
     */
+    @Deprecated
     public NbClassLoader () {
         super(new URL[0], systemClassLoader());
         fast = false;
@@ -77,6 +78,7 @@
      * @see org.openide.filesystems.Repository#getFileSystems
      * @deprecated Misuses classpath.
      */
+    @Deprecated
     public NbClassLoader(InputOutput io) {
         super(new URL[0], systemClassLoader());
         fast = false;
@@ -101,6 +103,7 @@
      * @param fileSystems file systems to load classes from
      * @deprecated Misuses classpath.
     */
+    @Deprecated
     public NbClassLoader (FileSystem[] fileSystems) {
         super(new URL[0], systemClassLoader(), null);
         fast = false;
@@ -112,6 +115,7 @@
      * @param parent fallback class loader
      * @deprecated Misuses classpath.
     */
+    @Deprecated
     public NbClassLoader (FileSystem[] fileSystems, ClassLoader parent) {
         super(new URL[0], parent);
         fast = false;
diff --git a/platform/openide.execution/src/org/openide/execution/NbClassPath.java b/platform/openide.execution/src/org/openide/execution/NbClassPath.java
index 8e2097b..a3437e2 100644
--- a/platform/openide.execution/src/org/openide/execution/NbClassPath.java
+++ b/platform/openide.execution/src/org/openide/execution/NbClassPath.java
@@ -90,6 +90,7 @@
      * @deprecated There are generally no excuses to be using this method as part of a normal module;
      * its exact meaning is vague, and probably not what you want.
     */
+    @Deprecated
     public static NbClassPath createLibraryPath () {
         Thread.dumpStack();
         // modules & libs
@@ -107,6 +108,7 @@
      * @deprecated There are generally no excuses to be using this method as part of a normal module;
      * its exact meaning is vague, and probably not what you want.
     */
+    @Deprecated
     public static NbClassPath createClassPath () {
         Thread.dumpStack();
         // ${java.class.path} minus openide-compat.jar
@@ -135,6 +137,7 @@
     * @return class path of system class including extensions
      * @deprecated Use the Java Platform API instead.
     */
+    @Deprecated
     public static NbClassPath createBootClassPath () {
         Thread.dumpStack();
         // boot
@@ -169,6 +172,7 @@
     * @return disk file for that file object, or <code>null</code> if there is no corresponding disk file
     * @deprecated You should use {@link org.openide.filesystems.FileUtil#toFile} instead.
     */
+    @Deprecated
     public static File toFile (FileObject fo) {
         Thread.dumpStack();
         return FileUtil.toFile(fo);
diff --git a/platform/openide.execution/src/org/openide/execution/ScriptType.java b/platform/openide.execution/src/org/openide/execution/ScriptType.java
index 1fa522e..2cbcf40 100644
--- a/platform/openide.execution/src/org/openide/execution/ScriptType.java
+++ b/platform/openide.execution/src/org/openide/execution/ScriptType.java
@@ -30,6 +30,7 @@
  * @author dstrupl
  * @deprecated Was used only in obsolete modules.
  */
+@Deprecated
 public abstract class ScriptType extends org.openide.ServiceType {
 
     /** generated Serialized Version UID */
diff --git a/platform/openide.explorer/nbproject/org-openide-explorer.sig b/platform/openide.explorer/nbproject/org-openide-explorer.sig
index 8d80995..b027700 100644
--- a/platform/openide.explorer/nbproject/org-openide-explorer.sig
+++ b/platform/openide.explorer/nbproject/org-openide-explorer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.79
+#Version 6.80
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropUtils.java b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropUtils.java
index d3173ee..0ae8880 100644
--- a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropUtils.java
+++ b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropUtils.java
@@ -1514,7 +1514,7 @@
      * Just a helper method which delegates to shallBeRDVEnabled(Node.Property).
      */
     static boolean shallBeRDVEnabled(FeatureDescriptor fd) {
-        if ((fd != null) && fd instanceof Node.Property) {
+        if (fd instanceof Property) {
             return shallBeRDVEnabled((Node.Property) fd);
         }
 
diff --git a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyDialogManager.java b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyDialogManager.java
index 3647236..f051d60 100644
--- a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyDialogManager.java
+++ b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyDialogManager.java
@@ -120,7 +120,7 @@
         if (env != null) {
             Object helpID = env.getFeatureDescriptor().getValue(ExPropertyEditor.PROPERTY_HELP_ID);
 
-            if ((helpID != null) && helpID instanceof String && (component != null) && component instanceof JComponent) {
+            if (helpID instanceof String && component instanceof JComponent) {
                 HelpCtx.setHelpIDString((JComponent) component, (String) helpID);
                 helpCtx = new HelpCtx((String) helpID);
             }
diff --git a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyPanel.java b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyPanel.java
index 31fa958..78ef709 100644
--- a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyPanel.java
+++ b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertyPanel.java
@@ -612,7 +612,7 @@
     protected void firePropertyChange(String nm, Object old, Object nue) {
         if (
             ("flat".equals(nm) || "radioButtonMax".equals(nm) || "suppressCustomEditor".equals(nm) ||
-                "useLabels".equals(nm)) && (displayer != null) && displayer instanceof PropertyDisplayer_Inline
+                "useLabels".equals(nm)) && displayer instanceof PropertyDisplayer_Inline
         ) { //NOI18N
             updateDisplayerFromClientProp(nm, nue);
         }
@@ -945,7 +945,7 @@
      * @since 2.20
      */
     public final Object getState() {
-        if ((displayer != null) && displayer instanceof PropertyDisplayer_Editable) {
+        if (displayer instanceof PropertyDisplayer_Editable) {
             return ((PropertyDisplayer_Editable) displayer).getPropertyEnv().getState();
         } else {
             PropertyEditor ed = propertyEditor();
@@ -974,7 +974,7 @@
      * is used.
      */
     public void updateValue() {
-        if ((displayer != null) && displayer instanceof PropertyDisplayer_Editable) {
+        if (displayer instanceof PropertyDisplayer_Editable) {
             PropertyEnv env = ((PropertyDisplayer_Editable) displayer).getPropertyEnv();
 
             if (PropertyEnv.STATE_NEEDS_VALIDATION.equals(env.getState())) {
@@ -1277,7 +1277,7 @@
         public void actionPerformed(ActionEvent e) {
             if( inner == e.getSource() && "enterPressed".equals(e.getActionCommand()) ) { //NOI18N
                 Object beanBridge = getClientProperty("beanBridgeIdentifier"); //NOI18N
-                if( null != beanBridge && beanBridge instanceof CellEditor ) {
+                if( beanBridge instanceof CellEditor ) {
                     boolean wasCommitted = false;
                     if (e instanceof CellEditorActionEvent) {
                         // Prevent from a second commit on stop of cell editing:
diff --git a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertySheet.java b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertySheet.java
index 4513046..698f689 100644
--- a/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertySheet.java
+++ b/platform/openide.explorer/src/org/openide/explorer/propertysheet/PropertySheet.java
@@ -1130,7 +1130,7 @@
             String id = null;
 
             //First look on the individual property
-            if ((fd != null) && fd instanceof Node.Property) {
+            if (fd instanceof Node.Property) {
                 id = (String) fd.getValue("helpID"); //NOI18N
             }
 
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/NodeTableModel.java b/platform/openide.explorer/src/org/openide/explorer/view/NodeTableModel.java
index 9cd35c1..ddbb06b 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/NodeTableModel.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/NodeTableModel.java
@@ -134,7 +134,7 @@
             Object o = props[i].getValue(ATTR_TREE_COLUMN);
             boolean x;
 
-            if ((o != null) && o instanceof Boolean) {
+            if (o instanceof Boolean) {
                 if (((Boolean) o).booleanValue()) {
                     treeColumnProperty = props[i];
                     size--;
@@ -162,7 +162,7 @@
 
                     Object o = props[i].getValue(ATTR_ORDER_NUMBER);
 
-                    if ((o != null) && o instanceof Integer) {
+                    if (o instanceof Integer) {
                         sort.put(new Double(((Integer) o).doubleValue()), Integer.valueOf(ia));
                     } else {
                         sort.put(new Double(ia + 0.1), new Integer(ia));
@@ -172,7 +172,7 @@
 
                     Object o = props[i].getValue(ATTR_SORTING_COLUMN);
 
-                    if ((o != null) && o instanceof Boolean) {
+                    if (o instanceof Boolean) {
                         props[i].setValue(ATTR_SORTING_COLUMN, Boolean.FALSE);
                     }
                 }
@@ -180,7 +180,7 @@
                 if (!existsComparableColumn) {
                     Object o = props[i].getValue(ATTR_COMPARABLE_COLUMN);
 
-                    if ((o != null) && o instanceof Boolean) {
+                    if (o instanceof Boolean) {
                         existsComparableColumn = ((Boolean) o).booleanValue();
                     }
                 }
@@ -240,7 +240,7 @@
 
                 Object o = p.getValue(ATTR_SORTING_COLUMN);
 
-                if ((o != null) && o instanceof Boolean) {
+                if (o instanceof Boolean) {
                     if (((Boolean) o).booleanValue()) {
                         p.setValue(ATTR_SORTING_COLUMN, Boolean.FALSE);
                         p.setValue(ATTR_DESCENDING_ORDER, Boolean.FALSE);
@@ -322,7 +322,7 @@
         Property p = allPropertyColumns[column].getProperty();
         Object o = p.getValue(ATTR_COMPARABLE_COLUMN);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
@@ -357,7 +357,7 @@
         Property p = allPropertyColumns[column].getProperty();
         Object o = p.getValue(ATTR_SORTING_COLUMN);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
@@ -443,7 +443,7 @@
         Property p = allPropertyColumns[sortColumn].getProperty();
         Object o = p.getValue(ATTR_DESCENDING_ORDER);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return ((Boolean) o).booleanValue();
         }
 
@@ -544,7 +544,7 @@
     private boolean isVisible(Property p) {
         Object o = p.getValue(ATTR_INVISIBLE);
 
-        if ((o != null) && o instanceof Boolean) {
+        if (o instanceof Boolean) {
             return !((Boolean) o).booleanValue();
         }
 
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/OutlineView.java b/platform/openide.explorer/src/org/openide/explorer/view/OutlineView.java
index 2ea9c14..d4f55eb 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/OutlineView.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/OutlineView.java
@@ -2475,8 +2475,8 @@
 
         @Override
         public boolean equals(Object o) {
-            return o != null && o instanceof Property &&
-                    getName().equals(((Property)o).getName());
+            return o instanceof Property &&
+                   getName().equals(((Property) o).getName());
         }
 
         @Override
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/TreeTable.java b/platform/openide.explorer/src/org/openide/explorer/view/TreeTable.java
index 0b5bb5e..86ebe7d 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/TreeTable.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/TreeTable.java
@@ -836,7 +836,7 @@
             return true;
         }
 
-        if ((editorComp != null) && (editorComp instanceof Container) && ((Container) editorComp).isAncestorOf(c)) {
+        if ((editorComp instanceof Container) && ((Container) editorComp).isAncestorOf(c)) {
             return true;
         }
 
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/TreeTableView.java b/platform/openide.explorer/src/org/openide/explorer/view/TreeTableView.java
index d9991f7..2c469df 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/TreeTableView.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/TreeTableView.java
@@ -1812,7 +1812,7 @@
 
             Object o = p.getValue(NodeTableModel.ATTR_COMPARABLE_COLUMN);
 
-            if ((o != null) && o instanceof Boolean) {
+            if (o instanceof Boolean) {
                 return ((Boolean) o).booleanValue();
             }
 
@@ -1826,7 +1826,7 @@
 
             Object o = p.getValue(NodeTableModel.ATTR_SORTING_COLUMN);
 
-            if ((o != null) && o instanceof Boolean) {
+            if (o instanceof Boolean) {
                 return ((Boolean) o).booleanValue();
             }
 
@@ -1848,7 +1848,7 @@
 
             Object o = p.getValue(NodeTableModel.ATTR_DESCENDING_ORDER);
 
-            if ((o != null) && o instanceof Boolean) {
+            if (o instanceof Boolean) {
                 return ((Boolean) o).booleanValue();
             }
 
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/TreeView.java b/platform/openide.explorer/src/org/openide/explorer/view/TreeView.java
index ce67bc2..9e24ee2 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/TreeView.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/TreeView.java
@@ -1782,7 +1782,7 @@
         public void updateUI() {
             super.updateUI();
             setBorder(BorderFactory.createEmptyBorder());
-            if( getTransferHandler() != null && getTransferHandler() instanceof UIResource ) {
+            if( getTransferHandler() instanceof UIResource ) {
                 //we handle drag and drop in our own way, so let's just fool the UI with a dummy
                 //TransferHandler to ensure that multiple selection is not lost when drag starts
                 setTransferHandler( new DummyTransferHandler() );
diff --git a/platform/openide.explorer/src/org/openide/explorer/view/TreeViewCellEditor.java b/platform/openide.explorer/src/org/openide/explorer/view/TreeViewCellEditor.java
index f803d6b..a11fb6a 100644
--- a/platform/openide.explorer/src/org/openide/explorer/view/TreeViewCellEditor.java
+++ b/platform/openide.explorer/src/org/openide/explorer/view/TreeViewCellEditor.java
@@ -191,7 +191,7 @@
     */
     @Override
     public boolean isCellEditable(EventObject event) {
-        if ((event != null) && (event instanceof MouseEvent)) {
+        if (event instanceof MouseEvent) {
             if (!SwingUtilities.isLeftMouseButton((MouseEvent) event) || ((MouseEvent) event).isPopupTrigger()) {
                 abortTimer();
                 return false;
diff --git a/platform/openide.explorer/test/unit/src/org/openide/explorer/propertysheet/PropertySheetTest.java b/platform/openide.explorer/test/unit/src/org/openide/explorer/propertysheet/PropertySheetTest.java
index 05cdf58..456c6b8 100644
--- a/platform/openide.explorer/test/unit/src/org/openide/explorer/propertysheet/PropertySheetTest.java
+++ b/platform/openide.explorer/test/unit/src/org/openide/explorer/propertysheet/PropertySheetTest.java
@@ -133,7 +133,7 @@
             // Wait for the reinitialization
             for (int i = 0; i < 100; i++) {
                 if (te.getAsText().equals(initEditorValue)) {
-                    //LOG.info(i + " value not updated ");;
+                    //LOG.info(i + " value not updated ");
                     Thread.sleep(50);
                 } else {
                     LOG.info("value was updated");
diff --git a/platform/openide.filesystems.compat8/nbproject/org-openide-filesystems-compat8.sig b/platform/openide.filesystems.compat8/nbproject/org-openide-filesystems-compat8.sig
index 0ff598c..ac73f56 100644
--- a/platform/openide.filesystems.compat8/nbproject/org-openide-filesystems-compat8.sig
+++ b/platform/openide.filesystems.compat8/nbproject/org-openide-filesystems-compat8.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.26
+#Version 9.27
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/platform/openide.filesystems.compat8/nbproject/project.properties b/platform/openide.filesystems.compat8/nbproject/project.properties
index d38bc6b..021f994 100644
--- a/platform/openide.filesystems.compat8/nbproject/project.properties
+++ b/platform/openide.filesystems.compat8/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 module.jar.dir=core
 javadoc.arch=${basedir}/arch.xml
diff --git a/platform/openide.filesystems.compat8/src/org/openide/filesystems/FileSystemCompat.java b/platform/openide.filesystems.compat8/src/org/openide/filesystems/FileSystemCompat.java
index 460ea8c..fdc9c7f 100644
--- a/platform/openide.filesystems.compat8/src/org/openide/filesystems/FileSystemCompat.java
+++ b/platform/openide.filesystems.compat8/src/org/openide/filesystems/FileSystemCompat.java
@@ -47,7 +47,8 @@
     private static final SystemAction[] NO_SYSTEM_ACTIONS = new SystemAction[0];
 
     /** Property name giving capabilities state. @deprecated No more capabilities. */
-    static final String PROP_CAPABILITIES = "capabilities"; // NOI18N    
+    @Deprecated
+    static final String PROP_CAPABILITIES = "capabilities"; // NOI18N
 
     /** hidden flag */
     private boolean hidden = false;
diff --git a/platform/openide.filesystems.nb/nbproject/org-openide-filesystems-nb.sig b/platform/openide.filesystems.nb/nbproject/org-openide-filesystems-nb.sig
index 906ca95..3206f9a 100644
--- a/platform/openide.filesystems.nb/nbproject/org-openide-filesystems-nb.sig
+++ b/platform/openide.filesystems.nb/nbproject/org-openide-filesystems-nb.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.27
+#Version 9.28
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/platform/openide.filesystems/apichanges.xml b/platform/openide.filesystems/apichanges.xml
index c21da31..eb98834 100644
--- a/platform/openide.filesystems/apichanges.xml
+++ b/platform/openide.filesystems/apichanges.xml
@@ -25,6 +25,30 @@
         <apidef name="filesystems">Filesystems API</apidef>
     </apidefs>
     <changes>
+        <change id="fileutil.copyposixperms">
+            <api name="filesystems"/>
+            <summary>FileObject copy preserves source posix permissions.</summary>
+            <version major="9" minor="32"/>
+            <date day="12" month="1" year="2023"/>
+            <author login="lkishalmi"/>
+            <compatibility addition="yes" semantic="compatible"/>
+            <description>
+                <a href="@TOP@/org/openide/filesystems/FileUtil.html#copyFile-org.openide.filesystems.FileObject-org.openide.filesystems.FileObject-java.lang.String-java.lang.String-">FileUtil.copyFile(...)</a> now preserve ATTRIBUTES and POSIX permissions.
+            </description>
+            <class name="FileUtil" package="org.openide.filesystems"/>
+        </change>
+        <change id="fileutil.niofilepath">
+            <api name="filesystems"/>
+            <summary>FileUtil can convert FileObject to/from java.nio.file.Path.</summary>
+            <version major="9" minor="32"/>
+            <date day="12" month="1" year="2023"/>
+            <author login="lkishalmi"/>
+            <compatibility addition="yes" semantic="compatible"/>
+            <description>
+                <a href="@TOP@/org/openide/filesystems/FileUtil.html#">FileUtil</a> has a <code>toPath(FileObject fo)</code> and <code>toFileObject(Path path)</code> utility methods.
+            </description>
+            <class name="FileUtil" package="org.openide.filesystems"/>
+        </change>
         <change id="fileutil.copyattr.trasnform">
             <api name="filesystems"/>
             <summary>Allow to filter or transform attribute values during copying.</summary>
diff --git a/platform/openide.filesystems/manifest.mf b/platform/openide.filesystems/manifest.mf
index 14c80d0..2016034 100644
--- a/platform/openide.filesystems/manifest.mf
+++ b/platform/openide.filesystems/manifest.mf
@@ -2,6 +2,6 @@
 OpenIDE-Module: org.openide.filesystems
 OpenIDE-Module-Localizing-Bundle: org/openide/filesystems/Bundle.properties
 OpenIDE-Module-Layer: org/openide/filesystems/resources/layer.xml
-OpenIDE-Module-Specification-Version: 9.31
+OpenIDE-Module-Specification-Version: 9.32
 
 
diff --git a/platform/openide.filesystems/nbproject/org-openide-filesystems.sig b/platform/openide.filesystems/nbproject/org-openide-filesystems.sig
index d3ee210..3728af2 100644
--- a/platform/openide.filesystems/nbproject/org-openide-filesystems.sig
+++ b/platform/openide.filesystems/nbproject/org-openide-filesystems.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.29
+#Version 9.30
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/FileObject.java b/platform/openide.filesystems/src/org/openide/filesystems/FileObject.java
index 66bc740..7587619 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/FileObject.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/FileObject.java
@@ -114,7 +114,8 @@
 
     /** Copies this file. This allows the filesystem to perform any additional
     * operation associated with the copy. But the default implementation is simple
-    * copy of the file and its attributes
+    * copy of the file and its attributes  Since version 9.32, the file POSIX
+    * permissions are copied as well.
     *
     * @param target target folder to move this file to
     * @param name new basename of file
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java b/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
index 8aa969d..59c8524 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
@@ -35,9 +35,11 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLStreamHandler;
+import java.nio.file.Files;
 import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFilePermission;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -538,7 +540,8 @@
     }
 
     /** Copies file to the selected folder.
-     * This implementation simply copies the file by stream content.
+    * This implementation simply copies the file by stream content. Since version
+    * 9.32, the file POSIX permissions are copied as well.
     * @param source source file object
     * @param destFolder destination folder
     * @param newName file name (without extension) of destination file
@@ -567,6 +570,7 @@
             }
 
             copy(bufIn, bufOut);
+            copyPosixPerms(source, dest);
             copyAttributes(source, dest);
         } finally {
             if (bufIn != null) {
@@ -584,6 +588,17 @@
 
         return dest;
     }
+    
+    static void copyPosixPerms(FileObject source, FileObject dest) throws IOException {
+        Path src = toPath(source);
+        Path dst = toPath(dest);
+        if ((src != null) && (dst != null)) {
+            try {
+                Set<PosixFilePermission> perms = Files.getPosixFilePermissions(src);
+                Files.setPosixFilePermissions(dst, perms);
+            } catch (UnsupportedOperationException ex) {}
+        }
+    }
 
     //
     // public methods
@@ -605,7 +620,9 @@
     }
 
     /** Copies file to the selected folder.
-    * This implementation simply copies the file by stream content.
+    * This implementation simply copies the file by stream content. Since version
+    * 9.32, the file POSIX permissions are copied as well.
+    *
     * @param source source file object
     * @param destFolder destination folder
     * @param newName file name (without extension) of destination file
@@ -620,7 +637,8 @@
     }
 
     /** Copies file to the selected folder.
-    * This implementation simply copies the file by stream content.
+    * This implementation simply copies the file by stream content. Since version
+    * 9.32, the file POSIX permissions are copied as well.
     * Uses the extension of the source file.
     * @param source source file object
     * @param destFolder destination folder
@@ -832,10 +850,22 @@
         assert assertNormalized(retVal, BaseUtilities.isMac()); // #240180
         return retVal;
     }
+    
+    /** Finds appropriate java.nio.file.Path to FileObject if possible.
+     * If not possible then null is returned.
+     * This is the inverse operation of {@link #toFileObject}.
+     * @param fo FileObject whose corresponding Path will be looked for
+     * @return java.nio.file.Path or null if no corresponding File exists.
+     * @since 9.32
+     */
+    public static Path toPath(FileObject fo) {
+        File f = toFile(fo);
+        return f != null ? f.toPath() : null;
+    }
 
     /**
      * Converts a disk file to a matching file object.
-     * This is the inverse operation of {@link #toFile}.
+     * This is the inverse operation of {@link #toFile(org.openide.filesystems.FileObject) }.
      * <p class="nonnormative">
      * If you are running with {@code org.netbeans.modules.masterfs} enabled,
      * this method should never return null for a file which exists on disk.
@@ -896,7 +926,24 @@
         }
         return retVal;
     }
-        
+    
+    /**
+     * Converts a Path to a FileObject if that is possible. It uses the
+     * {@link #toFileObject(java.io.File)} method with {@code path.toFile()}.
+     * if the conversion is not possible for some reason {@code null} is returned.
+     * 
+     * @param path the {@link Path} to be converted
+     * @return the {@link FileObject} representing the {@code path} or {@code null}
+     * @since 9.32
+     */
+    public static FileObject toFileObject(Path path) {
+        try {
+            return toFileObject(path.toFile());
+        } catch (UnsupportedOperationException ex) {
+            return null;
+        }
+    }
+    
     /** Finds appropriate FileObjects to java.io.File if possible.
      * If not possible then empty array is returned. More FileObjects may
      * correspond to one java.io.File that`s why array is returned.
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/StreamPool.java b/platform/openide.filesystems/src/org/openide/filesystems/StreamPool.java
index 350bc87..c6e7efe 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/StreamPool.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/StreamPool.java
@@ -69,7 +69,7 @@
             }
         }
 
-        if ((retVal != null) && (retVal instanceof NotifyInputStream)) {
+        if (retVal instanceof NotifyInputStream) {
             AbstractFileSystem abstractFileSystem = ((AbstractFileSystem) fo.getFileSystem());
             ((NotifyInputStream) retVal).setOriginal(abstractFileSystem.info.inputStream(fo.getPath()));
         } else {
@@ -112,7 +112,7 @@
             }
         }
 
-        if ((retVal != null) && (retVal instanceof NotifyOutputStream)) {
+        if (retVal instanceof NotifyOutputStream) {
             AbstractFileSystem abstractFileSystem = ((AbstractFileSystem) fo.getFileSystem());
             ((NotifyOutputStream) retVal).setOriginal(abstractFileSystem.info.outputStream(fo.getPath()));
         } else {
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/URLMapper.java b/platform/openide.filesystems/src/org/openide/filesystems/URLMapper.java
index b4e9176..2dbf30f 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/URLMapper.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/URLMapper.java
@@ -315,7 +315,7 @@
                 if (root == null) {
                     Object rootPath = fsRoot.getAttribute("FileSystem.rootPath"); //NOI18N
 
-                    if ((rootPath != null) && (rootPath instanceof String)) {
+                    if (rootPath instanceof String) {
                         rootName = (String) rootPath;
                     } else {
                         continue;
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java b/platform/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java
index 7cf6966..bf1d9e6 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java
@@ -358,7 +358,7 @@
     private boolean isFolder(String name) {
         Reference<? extends FileObject> ref = findReference(name);
 
-        if ((ref != null) && (ref instanceof FileObjRef)) {
+        if (ref instanceof FileObjRef) {
             return ((FileObjRef) ref).isFolder();
         }
 
@@ -375,7 +375,7 @@
     private InputStream getInputStream(String name) throws java.io.FileNotFoundException {
         Reference<? extends FileObject> ref = findReference(name);
 
-        if ((ref != null) && (ref instanceof FileObjRef)) {
+        if (ref instanceof FileObjRef) {
             return (((FileObjRef) ref).getInputStream(name));
         }
 
@@ -392,7 +392,7 @@
     URL getURL(String name) throws java.io.FileNotFoundException {
         Reference<? extends FileObject> ref = findReference(name);
 
-        if ((ref != null) && (ref instanceof FileObjRef)) {
+        if (ref instanceof FileObjRef) {
             return ((FileObjRef) ref).createAbsoluteUrl(name);
         }
 
@@ -403,7 +403,7 @@
     private long getSize(String name) {
         Reference<? extends FileObject> ref = findReference(name);
 
-        if ((ref != null) && (ref instanceof FileObjRef)) {
+        if (ref instanceof FileObjRef) {
             return ((FileObjRef) ref).getSize(name);
         }
 
@@ -414,7 +414,7 @@
     private java.util.Date lastModified(String name) {
         Reference<? extends FileObject> ref = findReference(name);
 
-        if ((ref != null) && (ref instanceof FileObjRef)) {
+        if (ref instanceof FileObjRef) {
             return ((FileObjRef) ref).lastModified(name);
         }
 
@@ -1056,7 +1056,7 @@
             URL url = null;
             Date retval = null;
             
-            if ((content == null) || !(content instanceof String)) {
+            if (!(content instanceof String)) {
                 URL[] all = getLayers();
                 url = (all != null && all.length > 0) ? all[0] : null;
             } else {
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/XMLMapAttr.java b/platform/openide.filesystems/src/org/openide/filesystems/XMLMapAttr.java
index bff7986..3fd5639 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/XMLMapAttr.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/XMLMapAttr.java
@@ -255,7 +255,7 @@
     }
 
     synchronized Object put(final Object p1, final Object p2, boolean decode) {
-        if ((p1 == null) || !(p1 instanceof String)) {
+        if (!(p1 instanceof String)) {
             return null;
         }
 
@@ -712,7 +712,7 @@
         }
 
         final String getKeyForPrint() {
-            if ((obj != null) && obj instanceof ModifiedAttribute) {
+            if (obj instanceof ModifiedAttribute) {
                 Attr modifAttr = (Attr) ((ModifiedAttribute) obj).getValue();
                 int keyIdx = Attr.isValid("SERIALVALUE"); //NOI18N
 
@@ -729,7 +729,7 @@
         }
 
         final String getAttrNameForPrint(String attrName) {
-            if ((obj != null) && obj instanceof ModifiedAttribute) {
+            if (obj instanceof ModifiedAttribute) {
                 Object[] retVal = ModifiedAttribute.revert(attrName, obj);
 
                 return encode((String) retVal[0]);
@@ -1156,7 +1156,7 @@
          * This method is opposite to method translateInto
          */
         static Object[] revert(String attrName, Object value) {
-            if (!(value instanceof ModifiedAttribute) || (value == null)) {
+            if (!(value instanceof ModifiedAttribute)) {
                 return new Object[] { attrName, value };
             }
 
diff --git a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java
index 210b27f..ff894af 100644
--- a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java
+++ b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java
@@ -24,18 +24,23 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.attribute.PosixFilePermission;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 import junit.framework.Test;
+import static org.junit.Assume.assumeFalse;
 import org.netbeans.junit.Log;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.junit.NbTestSuite;
@@ -44,6 +49,7 @@
 import org.openide.util.Lookup;
 import org.openide.util.RequestProcessor;
 import org.openide.util.BaseUtilities;
+import org.openide.util.Utilities;
 import org.openide.util.test.MockLookup;
 
 /**
@@ -704,6 +710,25 @@
         assertTrue(result.toExternalForm().endsWith("/"));  //NOI18N
     }
 
+    public void testCopyPosixPerms() throws Exception {
+        assumeFalse(Utilities.isWindows());
+
+        LocalFileSystem lfs = new LocalFileSystem();
+        lfs.setRootDirectory(new File("/"));
+        FileObject workDir = lfs.findResource(getWorkDir().getAbsolutePath());
+        clearWorkDir();
+        
+        FileObject source = workDir.createData("original.file");
+        Set<PosixFilePermission> perms = new HashSet<>(Files.getPosixFilePermissions(FileUtil.toPath(source)));
+        assertFalse(perms.contains(PosixFilePermission.OWNER_EXECUTE));
+        perms.add(PosixFilePermission.OWNER_EXECUTE);
+        Files.setPosixFilePermissions(FileUtil.toPath(source), perms);
+                
+        FileObject dest = FileUtil.copyFile(source, workDir, "copied.file");
+        perms = Files.getPosixFilePermissions(FileUtil.toPath(dest));
+        assertTrue(perms.contains(PosixFilePermission.OWNER_EXECUTE));
+    }
+    
     public void testCopyAttributes() throws Exception {
         FileObject testRoot = FileUtil.createMemoryFileSystem().getRoot();
         FileObject aFile = testRoot.createData("a", "file");
diff --git a/platform/openide.io/nbproject/org-openide-io.sig b/platform/openide.io/nbproject/org-openide-io.sig
index 989eb53..f9d25b3 100644
--- a/platform/openide.io/nbproject/org-openide-io.sig
+++ b/platform/openide.io/nbproject/org-openide-io.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.66
+#Version 1.67
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/openide.io/nbproject/project.properties b/platform/openide.io/nbproject/project.properties
index 31d4907..f29a695 100644
--- a/platform/openide.io/nbproject/project.properties
+++ b/platform/openide.io/nbproject/project.properties
@@ -17,6 +17,6 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/openide.loaders/nbproject/org-openide-loaders.sig b/platform/openide.loaders/nbproject/org-openide-loaders.sig
index a3b3854..387b280 100644
--- a/platform/openide.loaders/nbproject/org-openide-loaders.sig
+++ b/platform/openide.loaders/nbproject/org-openide-loaders.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.87
+#Version 7.88
 
 CLSS public java.awt.Canvas
 cons public init()
@@ -3281,6 +3281,7 @@
 fld public final static java.lang.String PROP_DOCUMENT = "document"
 fld public final static java.lang.String PROP_MODIFIED = "modified"
 fld public final static java.lang.String PROP_OPENED_PANES = "openedPanes"
+fld public final static java.lang.String PROP_RELOADING = "reloading"
 intf org.openide.cookies.EditorCookie
 meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
diff --git a/platform/openide.loaders/src/org/openide/loaders/CreateFromTemplateHandler.java b/platform/openide.loaders/src/org/openide/loaders/CreateFromTemplateHandler.java
index 84b4e8d..03e4794 100644
--- a/platform/openide.loaders/src/org/openide/loaders/CreateFromTemplateHandler.java
+++ b/platform/openide.loaders/src/org/openide/loaders/CreateFromTemplateHandler.java
@@ -40,6 +40,7 @@
  * @since 6.1
  * @deprecated in 7.59. Use {@link org.netbeans.api.templates.CreateFromTemplateHandler} instead.
  */
+@Deprecated
 public abstract class CreateFromTemplateHandler extends org.netbeans.api.templates.CreateFromTemplateHandler {
     
     @Override
diff --git a/platform/openide.loaders/src/org/openide/loaders/OpenSupport.java b/platform/openide.loaders/src/org/openide/loaders/OpenSupport.java
index cdec9e3..2af2ae4 100644
--- a/platform/openide.loaders/src/org/openide/loaders/OpenSupport.java
+++ b/platform/openide.loaders/src/org/openide/loaders/OpenSupport.java
@@ -258,15 +258,15 @@
         */
         public CloneableOpenSupport findCloneableOpenSupport() {
             OpenCookie oc = getDataObject().getCookie(OpenCookie.class);
-            if (oc != null && oc instanceof CloneableOpenSupport) {
+            if (oc instanceof CloneableOpenSupport) {
                 return (CloneableOpenSupport) oc;
             }
             EditCookie edc = getDataObject().getCookie(EditCookie.class);
-            if (edc != null && edc instanceof CloneableOpenSupport) {
+            if (edc instanceof CloneableOpenSupport) {
                 return (CloneableOpenSupport) edc;
             }
             EditorCookie ec = getDataObject().getCookie(EditorCookie.class);
-            if (ec != null && ec instanceof CloneableOpenSupport) {
+            if (ec instanceof CloneableOpenSupport) {
                 return (CloneableOpenSupport) ec;
             }
             return null;
@@ -404,15 +404,15 @@
             DataObject obj = entry.getDataObject ();
             OpenSupport os = null;
             OpenCookie oc = obj.getCookie(OpenCookie.class);
-            if (oc != null && oc instanceof OpenSupport) {
+            if (oc instanceof OpenSupport) {
                 os = (OpenSupport) oc;
             } else {
                 EditCookie edc = obj.getCookie(EditCookie.class);
-                if (edc != null && edc instanceof OpenSupport) {
+                if (edc instanceof OpenSupport) {
                     os = (OpenSupport) edc;
                 } else {
                     EditorCookie ec = obj.getCookie(EditorCookie.class);
-                    if (ec != null && ec instanceof OpenSupport) {
+                    if (ec instanceof OpenSupport) {
                         os = (OpenSupport) ec;
                     }
                 }
diff --git a/platform/openide.loaders/src/org/openide/text/DataEditorSupport.java b/platform/openide.loaders/src/org/openide/text/DataEditorSupport.java
index adbd1b6..a05c8c7 100644
--- a/platform/openide.loaders/src/org/openide/text/DataEditorSupport.java
+++ b/platform/openide.loaders/src/org/openide/text/DataEditorSupport.java
@@ -837,9 +837,9 @@
         }
         
         /**
-         * default threshold for big file to warn user (default is 1MB)
+         * default threshold for big file to warn user (default is 5MB)
          */
-        private final transient long BIG_FILE_THRESHOLD_MB = Integer.getInteger("org.openide.text.big.file.size", 1) * 1024 * 1024;
+        private final transient long BIG_FILE_THRESHOLD_MB = Integer.getInteger("org.openide.text.big.file.size", 5) * 1024 * 1024;
         
         /** Obtains the input stream.
         * @exception IOException if an I/O error occurs
diff --git a/platform/openide.loaders/test/unit/src/org/openide/text/FileSizeThreshholdExceptionTest.java b/platform/openide.loaders/test/unit/src/org/openide/text/FileSizeThreshholdExceptionTest.java
index 8c2f2b4..7b38ac8 100644
--- a/platform/openide.loaders/test/unit/src/org/openide/text/FileSizeThreshholdExceptionTest.java
+++ b/platform/openide.loaders/test/unit/src/org/openide/text/FileSizeThreshholdExceptionTest.java
@@ -126,7 +126,7 @@
     
     public void testThreshholdDefaultValue() throws Exception {
         System.getProperties().remove(BIG_FILE_PROP);
-        doTestThreshholdValue(1);
+        doTestThreshholdValue(5);
     }
     
     public void testThreshholdNotDefaultValue() throws Exception {
diff --git a/platform/openide.modules/nbproject/org-openide-modules.sig b/platform/openide.modules/nbproject/org-openide-modules.sig
index f5e9749..0bbec22 100644
--- a/platform/openide.modules/nbproject/org-openide-modules.sig
+++ b/platform/openide.modules/nbproject/org-openide-modules.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.65
+#Version 7.66
 
 CLSS public abstract interface java.io.Externalizable
 intf java.io.Serializable
diff --git a/platform/openide.nodes/nbproject/org-openide-nodes.sig b/platform/openide.nodes/nbproject/org-openide-nodes.sig
index d8b5d52..d744337 100644
--- a/platform/openide.nodes/nbproject/org-openide-nodes.sig
+++ b/platform/openide.nodes/nbproject/org-openide-nodes.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.62
+#Version 7.63
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/openide.nodes/src/org/openide/nodes/BeanNode.java b/platform/openide.nodes/src/org/openide/nodes/BeanNode.java
index 6a96639..0baed54 100644
--- a/platform/openide.nodes/src/org/openide/nodes/BeanNode.java
+++ b/platform/openide.nodes/src/org/openide/nodes/BeanNode.java
@@ -512,7 +512,7 @@
             // Propagate helpID's.
             Object help = propertyDescriptor[i].getValue("helpID"); // NOI18N
 
-            if ((help != null) && (help instanceof String)) {
+            if (help instanceof String) {
                 prop.setValue("helpID", help); // NOI18N
             }
 
diff --git a/platform/openide.options/nbproject/org-openide-options.sig b/platform/openide.options/nbproject/org-openide-options.sig
index b4b3897..9ae3648 100644
--- a/platform/openide.options/nbproject/org-openide-options.sig
+++ b/platform/openide.options/nbproject/org-openide-options.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.54
+#Version 6.55
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/openide.options/src/org/openide/text/NbDocument$Colors.java b/platform/openide.options/src/org/openide/text/NbDocument$Colors.java
index c7af45a..b30681e 100644
--- a/platform/openide.options/src/org/openide/text/NbDocument$Colors.java
+++ b/platform/openide.options/src/org/openide/text/NbDocument$Colors.java
@@ -28,6 +28,7 @@
 
 
 /** @deprecated Not useful for anything. */
+@Deprecated
 public final class NbDocument$Colors extends org.openide.options.SystemOption {
     public static final String PROP_BREAKPOINT = "NbBreakpointStyle"; // NOI18N
     public static final String PROP_ERROR = "NbErrorStyle"; // NOI18N
diff --git a/platform/openide.text/nbproject/org-openide-text.sig b/platform/openide.text/nbproject/org-openide-text.sig
index 0f8882b..3bf4c4b 100644
--- a/platform/openide.text/nbproject/org-openide-text.sig
+++ b/platform/openide.text/nbproject/org-openide-text.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.85
+#Version 6.86
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -816,6 +816,7 @@
 fld public final static java.lang.String PROP_DOCUMENT = "document"
 fld public final static java.lang.String PROP_MODIFIED = "modified"
 fld public final static java.lang.String PROP_OPENED_PANES = "openedPanes"
+fld public final static java.lang.String PROP_RELOADING = "reloading"
 intf org.openide.cookies.EditorCookie
 meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
diff --git a/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java b/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
index 9d1ff93..8d22643 100644
--- a/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
+++ b/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
@@ -833,8 +833,8 @@
                 }
                 
                 if ((last == ed) ||
-                    ((last != null) && (last instanceof Component) && (ed instanceof Container)
-                    && ((Container) ed).isAncestorOf((Component) last))) {
+                    ((last instanceof Component) && (ed instanceof Container)
+                     && ((Container) ed).isAncestorOf((Component) last))) {
                     ll.addFirst(p);
                 } else {
                     ll.add(p);
@@ -878,8 +878,8 @@
             if (ed != null) {
                 JEditorPane p = null;
                 if ((last == ed) ||
-                    ((last != null) && (last instanceof Component) && (ed instanceof Container)
-                    && ((Container) ed).isAncestorOf((Component) last))) {
+                    ((last instanceof Component) && (ed instanceof Container)
+                     && ((Container) ed).isAncestorOf((Component) last))) {
                     if (ed instanceof CloneableEditor) {
                         if (((CloneableEditor) ed).isEditorPaneReady()) {
                             p = ed.getEditorPane();
diff --git a/platform/openide.util.lookup/apichanges.xml b/platform/openide.util.lookup/apichanges.xml
index f3d71c3..7b35bf2 100644
--- a/platform/openide.util.lookup/apichanges.xml
+++ b/platform/openide.util.lookup/apichanges.xml
@@ -73,7 +73,7 @@
                 <a href="@JDK@/javax/lang/model/SourceVersion.html#latest--"><code>@SourceVersion.latest()</code></a>.
             </p>
         </description>
-        <class name="LayerGeneratingProcessor" package="org.openide.filesystems.annotations"/>
+        <class name="LayerGeneratingProcessor" package="org.openide.filesystems.annotations" link="no" /> <!-- external -->
         <issue number="NETBEANS-3250"/>
     </change>
     <change id="lookups.execute">
@@ -440,7 +440,7 @@
         <description>
           The content of <code>Lookup.getDefault()</code> can be specified
           by a standard JDK registration mechanism, using JARs'
-          <a href="http://java.sun.com/j2se/1.4/docs/guide/jar/jar.html#Service%20Provider" shape="rect">
+          <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider" shape="rect">
             META-INF/services
           </a>
           directory. This is suitable for services that do not change,
diff --git a/platform/openide.util.lookup/arch.xml b/platform/openide.util.lookup/arch.xml
index 6e50e72..ed2363d 100644
--- a/platform/openide.util.lookup/arch.xml
+++ b/platform/openide.util.lookup/arch.xml
@@ -49,7 +49,7 @@
  <answer id="arch-quality">
   <p>
    There is a lot of unit tests in 
-   <a href="http://hg.netbeans.org/main-golden/openide.util.lookup/test/unit/src/">version control</a>
+   <a href="https://github.com/apache/netbeans/tree/master/platform/openide.util.lookup/test/unit/src">version control</a>
    system.
   </p>
  </answer>
@@ -64,7 +64,7 @@
 
 
  <answer id="arch-usecases">
-     <a onclick="target='_blank'" href="https://leanpub.com/nbp4beginners">
+     <a href="https://leanpub.com/nbp4beginners">
      <img src="http://wiki.apidesign.org/images/0/03/NetBeansPlatformForBeginners.jpg"
         style="float: right"
           width="60" height="70" alt="Cover of NetBeans Platform for Beginners book"/>
@@ -74,7 +74,7 @@
     <a href="@TOP@/org/openide/util/Lookup.html">javadoc</a>. 
     For details on this topic, 
     together with code samples, see chapter 4, 
-    of <a onclick="target='_blank'" href="https://leanpub.com/nbp4beginners">NetBeans Platform for Beginners</a> 
+    of <a href="https://leanpub.com/nbp4beginners">NetBeans Platform for Beginners</a> 
     by Jason Wexbridge and Walter Nyland.
     In addition to that here is
     a list of frequently asked or interesting questions slowly expanding as
@@ -214,9 +214,10 @@
     <api name="ProviderRegistrationMechanism"
       type="import"
       category="standard"
-      url="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Provider%20Configuration%20File"
+      url="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Provider%20Configuration%20File"
       group="java" 
     />
+    <!-- ref to 1.5.0 as 1.3 is not reacheable -->
     but enhances it to also support the 
     <api 
       name="ProviderRegistrationRemoval" 
diff --git a/platform/openide.util.lookup/nbproject/org-openide-util-lookup.sig b/platform/openide.util.lookup/nbproject/org-openide-util-lookup.sig
index dd29794..c821f2d 100644
--- a/platform/openide.util.lookup/nbproject/org-openide-util-lookup.sig
+++ b/platform/openide.util.lookup/nbproject/org-openide-util-lookup.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 8.51
+#Version 8.52
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/Lookup.java b/platform/openide.util.lookup/src/org/openide/util/Lookup.java
index a22e456..5c053c7 100644
--- a/platform/openide.util.lookup/src/org/openide/util/Lookup.java
+++ b/platform/openide.util.lookup/src/org/openide/util/Lookup.java
@@ -36,12 +36,12 @@
  * A general registry permitting clients to find instances of services
  * (implementation of a given interface).
  * This class is inspired by the
- * <a href="http://www.jini.org/">Jini</a>
+ * <a href="https://river.apache.org">Jini</a>
  * registration and lookup mechanism. The difference is that the methods do
  * not throw checked exceptions (as they usually work only locally and not over the network)
  * and that the Lookup API concentrates on the lookup, not on the registration
- * (although {@link Lookup#getDefault} is strongly encouraged to support
- * {@link Lookups#metaInfServices} for registration in addition to whatever
+ * (although {@link Lookup#getDefault()} is strongly encouraged to support
+ * {@link Lookups#metaInfServices(java.lang.ClassLoader) } for registration in addition to whatever
  * else it decides to support).
  * <p>
  * For a general talk about the idea behind the lookup pattern please see
@@ -222,7 +222,8 @@
      * If more than one object matches, the first will be returned.
      * The template class may be a class or interface; the instance is
      * guaranteed to be assignable to it.
-     *
+     * 
+     * @param <T> type of interface we are searching for
      * @param clazz class of the object we are searching for
      * @return an object implementing the given class or <code>null</code> if no such
      *         implementation is found
@@ -236,7 +237,8 @@
      * specify whether subsequent calls with the same template produce new
      * instance of the {@link Lookup.Result} or return shared instance. The
      * prefered behaviour however is to return shared one.
-     *
+     * 
+     * @param <T> type of interface we are searching for
      * @param template a template describing the services to look for
      * @return an object containing the results
      */
@@ -244,6 +246,8 @@
 
     /** Look up the first item matching a given template.
      * Includes not only the instance but other associated information.
+     * 
+     * @param <T> type of interface we are searching for
      * @param template the template to check
      * @return a matching item or <code>null</code>
      *
@@ -259,6 +263,8 @@
      * Find a result corresponding to a given class.
      * Equivalent to calling {@link #lookup(Lookup.Template)} but slightly more convenient.
      * Subclasses may override this method to produce the same semantics more efficiently.
+     * 
+     * @param <T> type of interface we are searching for
      * @param clazz the supertype of the result
      * @return a live object representing instances of that type
      * @since org.openide.util 6.10
@@ -447,10 +453,10 @@
     public abstract static class Result<T> extends Object {
         /** Registers a listener that is invoked when there is a possible
          * change in this result. 
-         * <p>
+         *
          * <div class="nonnormative">
          * Sometimes people report that their listener is not receiving 
-         * events (for example <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=191471">IZ 191471</a>)
+         * events (for example <a href="https://bz.apache.org/netbeans/show_bug.cgi?id=191471">IZ 191471</a>)
          * or that the listener receives few events, but then it <em>stops</em>
          * listening.
          * Such behavior is often caused by not keeping strong reference to 
@@ -473,7 +479,7 @@
          * should be {@link List} as the order matters, but the {@link Collection}
          * is kept for compatibility reasons) of all instances present in
          * the {@link Result} right now that will never change its content.
-         * <p></p>
+         *
          * <div class="nonnormative">
          * While the returned collection never changes its content, some
          * implementation like {@link ProxyLookup} may
@@ -505,7 +511,7 @@
          * should be {@link List} as the order matters, but the {@link Collection}
          * is kept for compatibility reasons) of all {@link Item items} present in
          * the {@link Result} right now that will never change its content.
-         * <p></p>
+         *
          * <div class="nonnormative">
          * While the returned collection never changes its content, some
          * implementation like {@link ProxyLookup} may
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/AbstractLookup.java b/platform/openide.util.lookup/src/org/openide/util/lookup/AbstractLookup.java
index 10a7847..ae8db94 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/AbstractLookup.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/AbstractLookup.java
@@ -841,6 +841,9 @@
         * <p>Typically this will produce the same result as
         * {@code c.isAssignableFrom(}{@link #getType() getType}{@code ())}
         * but may avoid loading the concrete type's class in doing so.
+        * 
+        * @param c class to check against
+        * @return true if this item can produce object of class c
         */
         protected abstract boolean instanceOf(Class<?> c);
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/InstanceContent.java b/platform/openide.util.lookup/src/org/openide/util/lookup/InstanceContent.java
index 28fbfd5..2c2a581 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/InstanceContent.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/InstanceContent.java
@@ -31,7 +31,7 @@
  * and provides methods for registration of instances and lazy instances.
  * <PRE>
  * {@link InstanceContent} ic = new {@link InstanceContent#InstanceContent() InstanceContent()};
- * {@link Lookup} lookup = new {@link AbstractLookup#AbstractLookup(org.openide.util.lookup.AbstractLookup.Content) AbstractLookup(ic)};
+ * {@link org.openide.util.Lookup} lookup = new {@link AbstractLookup#AbstractLookup(org.openide.util.lookup.AbstractLookup.Content) AbstractLookup(ic)};
  *
  * ic.{@link #add(java.lang.Object) add(new Object ())};
  * ic.{@link #add(java.lang.Object) add(new Dimension (...))};
@@ -81,7 +81,9 @@
      * <p>
      * To remove registered object from lookup use {@link #remove(java.lang.Object, org.openide.util.lookup.InstanceContent.Convertor)}
      * with the same arguments.
-     *
+     * 
+     * @param <T> type of instance
+     * @param <R> type to convert instance to
      * @param inst instance
      * @param conv convertor which postponing an instantiation,
      * if <code>conv==null</code> then the instance is registered directly.
@@ -98,6 +100,8 @@
     }
 
     /** Remove instance added with a convertor.
+     * @param <T> type of instance
+     * @param <R> type to convert instance to
      * @param inst instance
      * @param conv convertor, if <code>conv==null</code> it is same like
      * remove(Object)
@@ -108,6 +112,8 @@
 
     /** Changes all pairs in the lookup to new values. Converts collection of
      * instances to collection of pairs.
+     * @param <T> type of instance
+     * @param <R> type to convert instance to
      * @param col the collection of (Item) objects
      * @param conv the convertor to use or null
      */
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/Lookups.java b/platform/openide.util.lookup/src/org/openide/util/lookup/Lookups.java
index f4f8133..dfaa2be 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/Lookups.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/Lookups.java
@@ -41,6 +41,7 @@
      * either return the object or null if the supplied template does
      * not match the class. If the specified argument is null the method
      * will end with NullPointerException.
+     * @param objectToLookup object to lookup
      * @return Fully initialized lookup object ready to use
      * @throws NullPointerException if the supplied argument is null
      * @since 2.21
@@ -91,6 +92,10 @@
      * Its contents never changes so registering listeners on such lookup
      * does not have any observable effect (the listeners are never called).
      *
+     * @param <T> type for key
+     * @param <R> type for result
+     * @param keys set of object
+     * @param convertor convertor for object
      * @return Fully initialized lookup object ready to use
      * @throws NullPointerException if the any of the arguments is null
      * @since 2.21
@@ -122,7 +127,7 @@
      * to notify listeners on the lookup about that it should trigger the event
      * firing, for example by calling <code>lookup.lookup (Object.class)</code>
      * directly on the lookup returned by this method
-     * that forces a check of the return value of {@link org.openide.util.Lookup.Provider#getLookup}</code>.
+     * that forces a check of the return value of {@link org.openide.util.Lookup.Provider#getLookup}.
      *
      * @param provider the provider that returns a lookup to delegate to
      * @return lookup delegating to the lookup returned by the provider
@@ -146,6 +151,8 @@
      * Existing instances will be kept if the implementation classes are unchanged,
      * so there is "stability" in doing this provided some parent loaders are the same
      * as the previous ones.
+     * @param classLoader class loader to use for loading
+     * @return lookup associatied with classloader
      * @since 3.35
      * @see ServiceProvider
      */
@@ -158,6 +165,7 @@
      * from the specified prefix.
      * @param classLoader class loader to use for loading
      * @param prefix prefix to prepend to the class name when searching
+     * @return lookup associatied with classloader
      * @since 7.9
      * @see ServiceProvider#path
      */
@@ -165,10 +173,10 @@
         return new MetaInfServicesLookup(classLoader, prefix);
     }
     
-    /** Creates a <q>named</q> lookup.
+    /** Creates a <code>named</code> lookup.
      * It is a lookup identified by a given path.
      * Two lookups with the same path should have the same content.
-     * <p>It is expected that each <q>named</q> lookup
+     * <p>It is expected that each <code>named</code> lookup
      * will contain a superset of what would be created by:
      * <code>{@linkplain #metaInfServices(ClassLoader,String) metaInfServices}(theRightLoader, "META-INF/namedservices/" + path + "/")</code>
      *
@@ -177,7 +185,7 @@
      * {@link Lookups#forPath(java.lang.String)} can combine lookups
      * from several sources. In current NetBeans Runtime Container, two lookups are used:
      * </p>
-     * <ul class="nonnormative">
+     * <ul>
      * <li><code>Lookups.metaInfServices("META-INF/namedservices/" + path)</code></li>
      * <li><code>org.openide.loaders.FolderLookup(path)</code></li>
      * </ul>
@@ -232,12 +240,13 @@
      * assertEquals("Returns C as A.class is not between B and C", c, l2.lookup(B.class));
      * </pre>
      * For more info check the
-     * <a href="http://hg.netbeans.org/main-golden/annotate/4883eaeda744/openide.util/test/unit/src/org/openide/util/lookup/ExcludingLookupTest.java">
+     * <a href="https://github.com/apache/netbeans/tree/master/platform/openide.util.lookup/test/unit/src/org/openide/util/lookup/ExcludingLookupTest.java">
      * excluding lookup tests</a> and the discussion in issue
-     * <a href="http://openide.netbeans.org/issues/show_bug.cgi?id=53058">53058</a>.
+     * <a href="https://bz.apache.org/netbeans/show_bug.cgi?id=53058">53058</a>.
      *
      * @param lookup the original lookup that should be filtered
      * @param classes array of classes those instances should be excluded
+     * @return filtred lookup
      * @since 5.4
      */
     public static Lookup exclude(Lookup lookup, Class... classes) {
@@ -245,7 +254,7 @@
     }
 
     /** Creates <code>Lookup.Item</code> representing the instance passed in.
-     *
+     * @param <T> type of the object
      * @param instance the object for which Lookup.Item should be creted
      * @param id unique identification of the object, for details see {@link org.openide.util.Lookup.Item#getId},
      * can be <code>null</code>
@@ -260,7 +269,7 @@
      * of {@link Lookup#getDefault()} to here-in provided lookup. Useful in a
      * multi user environment where different users and their requests should
      * be associated with different content of default lookup.
-     * <p/>
+     * <p>
      * As a special case, {@code executeWith} will execute the Runnable with
      * the system global lookup (the one effective during system bootstrap), when
      * the passed {@code defaultLookup} parameter is {@code null}. This feature may
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/NamedServiceDefinition.java b/platform/openide.util.lookup/src/org/openide/util/lookup/NamedServiceDefinition.java
index 0e94c3d..ac2bc3b 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/NamedServiceDefinition.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/NamedServiceDefinition.java
@@ -34,12 +34,12 @@
  * to verify the annotated type is subclass of <code>URLStreamHandler</code> and
  * if so, register it into <code>URLStreamHandler/@protocol</code> where the
  * value of <code>@protocol()</code> is replaced by the value of annotation's
- * <a href="@org-openide-util@/org/openide/util/URLStreamHandlerRegistration.html#protocol()">
+ * <a href="@org-openide-util@/org/openide/util/URLStreamHandlerRegistration.html#protocol--">
  * protocol attribute</a>. The registration can later be found by using
  * {@link Lookups#forPath(java.lang.String) Lookups.forPath("URLStreamHandler/ftp")}
  * (in case the protocol was ftp).
  *
- * @author Jaroslav Tulach <jtulach@netbeans.org>
+ * @author Jaroslav Tulach &lt;jtulach@netbeans.org&gt;
  * @since 8.14
  * @see ServiceProvider#path() 
  */
@@ -49,6 +49,7 @@
     /** Type, or array of types that the registered type
      * has to implement. The annotated type needs to register at least
      * one of the enumerated classes.
+     * @return set of type
      */
     public Class<?>[] serviceType();
     /** Path to register the annotation to, so it can later be found by
@@ -59,6 +60,7 @@
      * These attributes must be of type <code>String</code>
      * or array of <code>String</code>s (then one registration is performed
      * per each string in the array).
+     * @return path to register annotation
      */
     public String path();
     /** Name of attribute that specifies position. By default the system tries
@@ -68,8 +70,9 @@
      * name by specifying non-default here. Should the position be ignored,
      * specify empty string.
      * 
-     * @param name of attribute in the annotated annotation to use for defining
-     *   position of the registration. The attribute should return int value.
+     * name of attribute in the annotated annotation to use for defining
+     * position of the registration. The attribute should return int value.
+     * @return position
      */
     public String position() default "-";
 }
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java b/platform/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java
index 2779fdb..1c69514 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java
@@ -151,7 +151,6 @@
          * If called before a {@link ProxyLookup} has been attached to this
          * controller, an IllegalStateException will be thrown.
          *
-         * @param exe An executor to notify in
          * @param lookups An array of Lookups to be proxied
          * @throws IllegalStateException if called before this instance
          * has been passed to the constructor of (exactly one) {@link ProxyLookup}
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProvider.java b/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProvider.java
index d6c8f72..13da72e 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProvider.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProvider.java
@@ -54,6 +54,7 @@
      * <p>Requests to look up the specified interface should result in this implementation.
      * Requests for any other types may or may not result in this implementation even if the
      * implementation is assignable to those types.
+     * @return type to register this implementation
      */
     Class<?> service();
 
@@ -61,6 +62,7 @@
      * An optional position in which to register this service relative to others.
      * Lower-numbered services are returned in the lookup result first.
      * Services with no specified position are returned last.
+     * @return position to register the service
      */
     int position() default Integer.MAX_VALUE;
 
@@ -71,6 +73,7 @@
      *
      * <p><i>Note:</i> Dollar sign ($) is used in inner class names. For example
      * <code>org.netbeans.modules.openfile.FileChooser$JavaFilesFilter</code>.</p>
+     * @return set of implementations this implementation supersedes
      */
     String[] supersedes() default {};
 
@@ -86,6 +89,7 @@
      * The {@link NamedServiceDefinition} offers various benefits over 
      * plain {@link #path()} usage including type checking and lower 
      * possibility of typos.
+     * @return path to register implementation
      */
     String path() default "";
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProviders.java b/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProviders.java
index 98015f9..2cb2b9e 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProviders.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/ServiceProviders.java
@@ -34,6 +34,7 @@
 
     /**
      * List of service provider registrations.
+     * @return list of service provider
      */
     ServiceProvider[] value();
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/index.html b/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/index.html
index 2d1fe92..8240b57 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/index.html
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/index.html
@@ -35,7 +35,7 @@
 <P>
 There already are libraries trying to solve this problem, usually by querying for
 an interface and finding its appropriate implementaion. The most famous is
-<A href="http://www.jini.org/">Jini</A>, the platform for development of
+<A href="https://river.apache.org">Jini</A>, the platform for development of
 distributed network services. Our library does something similar, but tries
 to stay small and easy
 to use. The NetBeans <em>Lookup
@@ -87,7 +87,7 @@
 into the application classpath.
 <P>
 Actually this has been realized also by the JDK development team and addressed in
-JDK 1.3 as part of the <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Provider%20Configuration%20File">provider extension mechanism</A>. 
+JDK 1.3 as part of the <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Provider%20Configuration%20File">provider extension mechanism</A>. 
 The <code>MyToolkit</code> could be registered by adding a file 
 <code>/META-INF/services/java.awt.Toolkit</code> with one line
 <code>org.myorg.MyToolkit</code> into the JAR file that contains the
@@ -176,13 +176,13 @@
   <LI><A HREF="lookup-spi.html">Lookup Library SPIs</A> for those writing the
 implementaion code and registering it with lookup. Includes also writing own
 lookup implementation.</LI>
-  <LI>Download <A HREF="http://www.netbeans.org/">NetBeans platform</A> which
+  <LI>Download <A HREF="https://netbeans.apache.org/download/index.html">NetBeans platform</A> which
 contains <code>org-openide-util.jar</code></LI>
-    <A HREF="http://hg.netbeans.org/main-golden/file/tip/openide.util/src/org/openide/util/lookup/">
+    <A HREF="https://github.com/apache/netbeans/tree/master/platform/openide.util.lookup/src/org/openide/util/lookup">
     implementation package (org.openide.util.lookup) </A>
     + classes Lookup, LookupEvent, LookupListener in
-    <A href="http://hg.netbeans.org/main-golden/file/tip/openide.util/src/org/openide/util/">util package</A></LI>
-  <li><a href="http://www.martinfowler.com/articles/injection.html">Inversion of Control Containers and the Dependency Injection pattern</a> (Martin Fowler)</li>
+    <A href="https://github.com/apache/netbeans/tree/master/platform/openide.util.lookup/src/org/openide/util">util package</A></LI>
+  <li><a href="https://www.martinfowler.com/articles/injection.html">Inversion of Control Containers and the Dependency Injection pattern</a> (Martin Fowler)</li>
 </UL>
 </BODY>
 </HTML>
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/lookup-api.html b/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/lookup-api.html
index 5106dbe..33b6ed6 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/lookup-api.html
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/doc-files/lookup-api.html
@@ -49,7 +49,7 @@
 The object returned from this method is
 a global lookup that can serve as a central place for registering services.
 The default implementation is a lookup that implements
-<a href="http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
+<a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
 the JDK JAR services</A>
 mechanism and delegates to <samp>META-INF/services/name.of.Class</samp> files.
 <P>
diff --git a/platform/openide.util.ui/apichanges.xml b/platform/openide.util.ui/apichanges.xml
index c6c18b2..df05fa0 100644
--- a/platform/openide.util.ui/apichanges.xml
+++ b/platform/openide.util.ui/apichanges.xml
@@ -27,6 +27,22 @@
     <apidef name="actions">Actions API</apidef>
 </apidefs>
 <changes>
+    <change id="actionsForPathLookup">
+         <api name="util"/>
+         <summary>Added variant Utilities.actionsForPath with Lookup that produces context-aware actions</summary>
+         <version major="9" minor="28"/>
+         <date day="5" month="1" year="2023"/>
+         <author login="sdedic"/>
+         <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
+         <description>
+             <p>
+                 Added a variant <a href="@TOP@/org/openide/util/Utilities.html#actionsForPath-java.lang.String-org.openide.util.Lookup-">actionsToPath</a> that instantiates context-bound actions if the registered action(s) implements 
+                 <a href="@TOP@/org/openide/util/ContextAwareAction.html">ContextAwareAction</a>.
+                 Improves consistency with <a href="@TOP@/org/openide/util/Utilities.html#actionsToPopup-javax.swing.Action:A-org.openide.util.Lookup-">actionsToPopup</a> that supports contextual actions. 
+             </p>
+         </description>
+         <class package="org.openide.util" name="Utilities"/>
+    </change>
     <change id="findDialogParent">
          <api name="util"/>
          <summary>static method Utilities.findDialogParent added</summary>
diff --git a/platform/openide.util.ui/manifest.mf b/platform/openide.util.ui/manifest.mf
index 55ba833..b43b2fa 100644
--- a/platform/openide.util.ui/manifest.mf
+++ b/platform/openide.util.ui/manifest.mf
@@ -1,5 +1,5 @@
 Manifest-Version: 1.0
 OpenIDE-Module: org.openide.util.ui
 OpenIDE-Module-Localizing-Bundle: org/openide/util/Bundle.properties
-OpenIDE-Module-Specification-Version: 9.27
+OpenIDE-Module-Specification-Version: 9.28
 
diff --git a/platform/openide.util.ui/nbproject/org-openide-util-ui.sig b/platform/openide.util.ui/nbproject/org-openide-util-ui.sig
index 03a7ace..233e224 100644
--- a/platform/openide.util.ui/nbproject/org-openide-util-ui.sig
+++ b/platform/openide.util.ui/nbproject/org-openide-util-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.25
+#Version 9.26
 
 CLSS public java.awt.datatransfer.Clipboard
 cons public init(java.lang.String)
@@ -1286,6 +1286,7 @@
 meth public static int getOperatingSystem()
 meth public static int showJFileChooser(javax.swing.JFileChooser,java.awt.Component,java.lang.String)
  anno 0 java.lang.Deprecated()
+meth public static java.awt.Component findDialogParent()
 meth public static java.awt.Component getFocusTraversableComponent(java.awt.Component)
 meth public static java.awt.Cursor createCustomCursor(java.awt.Component,java.awt.Image,java.lang.String)
 meth public static java.awt.Cursor createProgressCursor(java.awt.Component)
diff --git a/platform/openide.util.ui/src/org/openide/ErrorManager.java b/platform/openide.util.ui/src/org/openide/ErrorManager.java
index e047660..13bb38b 100644
--- a/platform/openide.util.ui/src/org/openide/ErrorManager.java
+++ b/platform/openide.util.ui/src/org/openide/ErrorManager.java
@@ -903,7 +903,7 @@
 
                 for (LogRecord log : r) {
                     if (log.getMessage() != null) {
-                        a.append(log.getMessage()).append("\n");;
+                        a.append(log.getMessage()).append("\n");
                     }
                     if (log.getThrown() != null) {
                         StringWriter w = new StringWriter();
diff --git a/platform/openide.util.ui/src/org/openide/util/Utilities.java b/platform/openide.util.ui/src/org/openide/util/Utilities.java
index 3310e33..ba5d85e 100644
--- a/platform/openide.util.ui/src/org/openide/util/Utilities.java
+++ b/platform/openide.util.ui/src/org/openide/util/Utilities.java
@@ -1843,6 +1843,42 @@
     }
 
     /**
+     * Loads a menu sequence from a path, given a specific context as Lookup. This variant will allow to use action's contextual presence, enablement or selection,
+     * based on Lookup contents. If the registered action implements a {@link ContextAwareAction}, an instance bound to the passed `context' will be created - if
+     * the context factory returns {@code null}, indicating the action is not appropriate for the context, the registration will be skipped.
+     * Use {@link #actionsGlobalContext()} to supply global context.
+     * 
+     * Any {@link Action} instances are returned as is;
+     * any {@link JSeparator} instances are translated to nulls.
+     * Warnings are logged for any other instances.
+     * @param path a path as given to {@link Lookups#forPath}, generally a layer folder name
+     * @param context the context passed to the action(s)
+     * @return a list of actions interspersed with null separators
+     * @since 7.14
+     */
+    public static List<? extends Action> actionsForPath(String path, Lookup context) {
+        List<Action> actions = new ArrayList<Action>();
+        for (Lookup.Item<Object> item : Lookups.forPath(path).lookupResult(Object.class).allItems()) {
+            if (Action.class.isAssignableFrom(item.getType())) {
+                Object instance = item.getInstance();
+                if (instance instanceof ContextAwareAction) {
+                    Object contextAwareInstance = ((ContextAwareAction)instance).createContextAwareInstance(context);
+                    if (contextAwareInstance == null) {
+                        Logger.getLogger(Utilities.class.getName()).log(Level.WARNING,"ContextAwareAction.createContextAwareInstance(context) returns null. That is illegal!" + " action={0}, context={1}", new Object[] {instance, context});
+                    } else {
+                        instance = contextAwareInstance;
+                    }
+                }
+                actions.add((Action) instance);
+            } else if (JSeparator.class.isAssignableFrom(item.getType())) {
+                actions.add(null);
+            } else {
+                Logger.getLogger(Utilities.class.getName()).log(Level.WARNING, "Unrecognized object of {0} found in actions path {1}", new Object[] {item.getType(), path});
+            }
+        }
+        return actions;
+    }
+    /**
      * Global context for actions. Toolbar, menu or any other "global"
      * action presenters shall operate in this context.
      * Presenters for context menu items should <em>not</em> use
diff --git a/platform/openide.util.ui/src/org/openide/util/VectorIcon.java b/platform/openide.util.ui/src/org/openide/util/VectorIcon.java
index b9145e0..07b1de7 100644
--- a/platform/openide.util.ui/src/org/openide/util/VectorIcon.java
+++ b/platform/openide.util.ui/src/org/openide/util/VectorIcon.java
@@ -83,7 +83,7 @@
         Object desktopHints =
                 Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
         Map<Object, Object> hints = new LinkedHashMap<Object, Object>();
-        if (desktopHints != null && desktopHints instanceof Map<?, ?>)
+        if (desktopHints instanceof Map<?, ?>)
             hints.putAll((Map<?, ?>) desktopHints);
         /* Enable antialiasing by default. Adding this is required in order to get non-text
         antialiasing on Windows. */
diff --git a/platform/openide.util.ui/test/unit/src/org/openide/util/UtilitiesTest.java b/platform/openide.util.ui/test/unit/src/org/openide/util/UtilitiesTest.java
index 9bada3d..84bb0a9 100644
--- a/platform/openide.util.ui/test/unit/src/org/openide/util/UtilitiesTest.java
+++ b/platform/openide.util.ui/test/unit/src/org/openide/util/UtilitiesTest.java
@@ -86,6 +86,7 @@
 import java.awt.peer.TextAreaPeer;
 import java.awt.peer.TextFieldPeer;
 import java.awt.peer.WindowPeer;
+import java.beans.PropertyChangeListener;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -273,6 +274,39 @@
             done.release();
         }
     }
+    
+    public static class ContextData {
+        final String suffix;
+
+        public ContextData(String suffix) {
+            this.suffix = suffix;
+        }
+    }
+
+    public void testActionsForPathWithLookup() throws Exception {
+        MockLookup.setInstances(new NamedServicesProviderImpl());
+        // #156829: ensure that no tree lock is acquired.
+        final Semaphore ready = new Semaphore(0);
+        final Semaphore done = new Semaphore(0);
+        EventQueue.invokeLater(new Runnable() {
+            public void run() {
+                synchronized (new JSeparator().getTreeLock()) {
+                    ready.release();
+                    try {
+                        done.acquire();
+                    } catch (InterruptedException ex) {
+                        Exceptions.printStackTrace(ex);
+                    }
+                }
+            }
+        });
+        ready.acquire();
+        try {
+            assertEquals("[hello-ehlo, null, there-ehlo]", Utilities.actionsForPath("stuff", Lookups.fixed(new ContextData("ehlo"))).toString());
+        } finally {
+            done.release();
+        }
+    }
 
     private static class CustomToolkitComponent extends Component {
         private Toolkit customToolkit;
@@ -511,21 +545,34 @@
                 return Lookup.EMPTY;
             }
             InstanceContent content = new InstanceContent();
-            InstanceContent.Convertor<String, Action> actionConvertor = new InstanceContent.Convertor<String, Action>() {
 
-                public Action convert(final String obj) {
-                    return new AbstractAction() {
+            class ContextAction extends AbstractAction implements ContextAwareAction {
+                final String obj;
 
-                        public void actionPerformed(ActionEvent e) {
-                        }
-
-                        @Override
-                        public String toString() {
-                            return obj;
-                        }
-                    };
+                public ContextAction(String obj) {
+                    this.obj = obj;
+                }
+                
+                public void actionPerformed(ActionEvent e) {
                 }
 
+                @Override
+                public String toString() {
+                    return obj;
+                }
+
+                @Override
+                public Action createContextAwareInstance(Lookup actionContext) {
+                    ContextData cd = actionContext.lookup(ContextData.class);
+                    return new ContextAction(obj + (cd == null ? "-ctx" : "-" + cd.suffix));
+                }
+            }
+            
+            InstanceContent.Convertor<String, Action> actionConvertor = new InstanceContent.Convertor<String, Action>() {
+                public Action convert(final String obj) {
+                    return new ContextAction(obj);
+                }
+                
                 public Class<? extends Action> type(String obj) {
                     return AbstractAction.class;
                 }
diff --git a/platform/openide.util.ui/test/unit/src/org/openide/util/test/TestFileUtils.java b/platform/openide.util.ui/test/unit/src/org/openide/util/test/TestFileUtils.java
index f19877a..e007006 100644
--- a/platform/openide.util.ui/test/unit/src/org/openide/util/test/TestFileUtils.java
+++ b/platform/openide.util.ui/test/unit/src/org/openide/util/test/TestFileUtils.java
@@ -128,7 +128,7 @@
     /**
      * Create a new ZIP file.
      * @param os a stream to which the ZIP will be written
-     * @param entries entries as maps from filename to binary contents;; parent dirs created automatically
+     * @param entries entries as maps from filename to binary contents; parent dirs created automatically
      * @throws IOException for the usual reasons
      */
     public static void writeZipFile(OutputStream os, Map<String,byte[]> entries) throws IOException {
diff --git a/platform/openide.util/arch.xml b/platform/openide.util/arch.xml
index a8fcaae..433df59 100644
--- a/platform/openide.util/arch.xml
+++ b/platform/openide.util/arch.xml
@@ -57,7 +57,7 @@
  <answer id="arch-quality">
   <p>
    There is a lot of unit tests in 
-   <a href="http://hg.netbeans.org/main-golden/openide.util/test/unit/src/">version control</a>
+   <a href="https://github.com/apache/netbeans/tree/master/platform/openide.util/test/unit/src/">version control</a>
    system.
   </p>
  </answer>
@@ -240,7 +240,7 @@
  </answer>
  <answer id="format-types">
   <p>
-    The <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Provider%20Configuration%20File">META-INF/services/...</a> files.
+    The <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Provider%20Configuration%20File">META-INF/services/...</a> files.
     <api name="TranslateNames" category="official" type="export" group="java.io.File" 
     url="@TOP@/org/openide/util/BaseUtilities.html#translate-java.lang.String-">
     <a href="@TOP@/org/openide/util/BaseUtilities.html#translate-java.lang.String-">Utilities.translate</a> 
diff --git a/platform/openide.util/nbproject/org-openide-util.sig b/platform/openide.util/nbproject/org-openide-util.sig
index e1f61f3..1808030 100644
--- a/platform/openide.util/nbproject/org-openide-util.sig
+++ b/platform/openide.util/nbproject/org-openide-util.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 9.25
+#Version 9.26
 
 CLSS public abstract interface java.io.Closeable
 intf java.lang.AutoCloseable
diff --git a/platform/openide.util/src/org/openide/util/BaseUtilities.java b/platform/openide.util/src/org/openide/util/BaseUtilities.java
index 9f1f5ee..045cdf8 100644
--- a/platform/openide.util/src/org/openide/util/BaseUtilities.java
+++ b/platform/openide.util/src/org/openide/util/BaseUtilities.java
@@ -174,10 +174,10 @@
      * In order to provide useful support for this problem, this queue has been
      * provided.
      * <P>
-     * If you have a reference that needs cleanup, make it implement <link>Runnable</link>
+     * If you have a reference that needs cleanup, make it implement {@link Runnable}
      * and register it with the queue:
      * <PRE>
-     * class MyReference extends WeakReference<Thing> implements Runnable {
+     * class MyReference extends WeakReference&lt;Thing&gt; implements Runnable {
      *     private final OtherInfo dataToCleanUp;
      *     public MyReference(Thing ref, OtherInfo data) {
      *         super(ref, Utilities.queue());
@@ -200,6 +200,7 @@
      * <p>
      * Be sure to call this method anew for each reference.
      * Do not attempt to cache the return value.
+     * @return reference queue
      * @since 3.11
      */
     public static ReferenceQueue<Object> activeReferenceQueue() {
@@ -1014,9 +1015,9 @@
     * <li>Include command names with embedded spaces, such as <code>c:\Program Files\jdk\bin\javac</code>.
     * <li>Include extra command arguments, such as <code>-Dname=value</code>.
     * <li>Do anything else which might require unusual characters or processing. For example:
-    * <p><code><pre>
+    * <p><code>
     * "c:\program files\jdk\bin\java" -Dmessage="Hello /\\/\\ there!" -Xmx128m
-    * </pre></code>
+    * </code>
     * <p>This example would create the following executable name and arguments:
     * <ol>
     * <li> <code>c:\program files\jdk\bin\java</code>
@@ -1118,6 +1119,8 @@
     }
 
     /** Complementary method to parseParameters
+     * @param params set of parameters
+     * @return escaped parameters
      * @see #parseParameters
      */
     public static String escapeParameters(String[] params) {
@@ -1199,6 +1202,7 @@
      * order as the incoming elements. However if some elements need to be rearranged,
      * it is <em>not</em> guaranteed that others will not also be rearranged, even
      * if they did not strictly speaking need to be.
+     * @param <T> tyupe of element
      * @param c a collection of objects to be topologically sorted
      * @param edges constraints among those objects, of type <code>Map&lt;Object,Collection&gt;</code>;
      *              if an object is a key in this map, the resulting order will
@@ -1207,7 +1211,7 @@
      * @exception TopologicalSortException if the sort cannot succeed due to cycles in the graph, the
      *   exception contains additional information to describe and possibly recover from the error
      * @since 3.30
-     * @see <a href="http://www.netbeans.org/issues/show_bug.cgi?id=27286">Issue #27286</a>
+     * @see <a href="https://bz.apache.org/netbeans/show_bug.cgi?id=27286">Issue #27286</a>
      */
     public static <T> List<T> topologicalSort(Collection<? extends T> c, Map<? super T, ? extends Collection<? extends T>> edges)
     throws TopologicalSortException {
@@ -1344,24 +1348,24 @@
      * Btw. one can use spaces instead of <code>=</code> sign.
      * For a real world example
      * check the
-     * <a href="http://www.netbeans.org/source/browse/xml/text-edit/compat/src/META-INF/netbeans/">
+     * <a href="https://github.com/apache/netbeans/tree/master/ide/xml">
      * xml module</a>.
      *
      * <P>
-     * For purposes of <link>org.openide.util.io.NbObjectInputStream</link> there is
+     * For purposes of {@link org.openide.util.io.NbObjectInputStream} there is
      * a following special convention:
      * If the
      * className is not listed as one that is to be renamed, the returned
      * string == className, if the className is registered to be renamed
      * than the className != returned value, even in a case when className.equals (retValue)
-     * <p/>
+     * <p>
      * Similar behaviour applies to <b>filenames</b> provided by layers (system filesystem). Filenames
      * can be also translated to adapt to location changes e.g. in action registrations. Note that 
      * <b>no spaces or special characters</b> are allowed in both translated filenames or translation 
      * results. Filenames must conform to regexp {@code ^[/a-zA-Z0-9$_.+-]+$}. Keys and values are treated
      * as paths from fs root.
      * 
-     * <p/>
+     * <p>
      * Example of file path translation (action registration file has moved):
      * <pre>
      * # registration ID has changed
@@ -1560,7 +1564,7 @@
      * and {@link URI#resolve(URI)}.
      * @param f a file
      * @return a {@code file}-protocol URI which may use the host field
-     * @see java.nio.file.Path.toUri
+     * @see java.nio.file.Path#toUri()
      * @since 8.25
      */
     public static URI toURI(File f) {
diff --git a/platform/openide.util/src/org/openide/util/EditableProperties.java b/platform/openide.util/src/org/openide/util/EditableProperties.java
index 1e5b177..1fef573 100644
--- a/platform/openide.util/src/org/openide/util/EditableProperties.java
+++ b/platform/openide.util/src/org/openide/util/EditableProperties.java
@@ -47,7 +47,7 @@
 /**
  * Similar to {@link java.util.Properties} but designed to retain additional
  * information needed for safe hand-editing.
- * Useful for various <samp>*.properties</samp> in a project:
+ * Useful for various <code>*.properties</code> in a project:
  * <ol>
  * <li>Can associate comments with particular entries.
  * <li>Order of entries preserved during modifications whenever possible.
@@ -260,7 +260,7 @@
      * Same behavior as {@link #setProperty(String,String)} with the difference that each item
      * will be stored on its own line of text. {@link #getProperty} will simply concatenate
      * all the items into one string, so generally separators
-     * (such as <samp>:</samp> for path-like properties) must be included in
+     * (such as <code>:</code> for path-like properties) must be included in
      * the items (for example, at the end of all but the last item).
      * @param key a property name; cannot be null nor empty
      * @param value the desired value; cannot be null; can be empty array
diff --git a/platform/openide.util/src/org/openide/util/Enumerations.java b/platform/openide.util/src/org/openide/util/Enumerations.java
index 87c8fd3..9f33fde 100644
--- a/platform/openide.util/src/org/openide/util/Enumerations.java
+++ b/platform/openide.util/src/org/openide/util/Enumerations.java
@@ -49,6 +49,7 @@
      * Always returns <code>false</code> from
      * <code>empty().hasMoreElements()</code> and throws <code>NoSuchElementException</code>
      * from <code>empty().nextElement()</code>.
+     * @param <T> type of initial content
      * @return the enumeration
      */
     public static final <T> Enumeration<T> empty() {
@@ -58,6 +59,7 @@
 
     /**
      * Creates an enumeration with one element.
+     * @param <T> type of initial content
      * @param obj the element to be present in the enumeration.
      * @return enumeration
      */
@@ -71,7 +73,7 @@
      * end of <code>en1</code> is reached its elements are being served.
      * As soon as the <code>en1</code> has no more elements, the content
      * of <code>en2</code> is being returned.
-     *
+     * @param <T> type of initial content
      * @param en1 first enumeration
      * @param en2 second enumeration
      * @return enumeration
@@ -90,7 +92,7 @@
      * all their content. Each of the provided enumeration is fully read
      * and their content returned before the next enumeration is asked for
      * their elements.
-     *
+     * @param <T> type of initial content
      * @param enumOfEnums Enumeration of Enumeration elements
      * @return enumeration
      */
@@ -103,7 +105,7 @@
      * each of the provided elements just once.
      * The elements are compared
      * using their default <code>equals</code> and <code>hashCode</code> methods.
-     *
+     * @param <T> type of initial content
      * @param en enumeration to filter
      * @return enumeration without duplicated items
      */
@@ -121,6 +123,7 @@
 
     /**
      * Returns an enumeration that iterates over provided array.
+     * @param <T> type of initial content
      * @param arr the array of object
      * @return enumeration of those objects
      */
@@ -130,6 +133,7 @@
 
     /**
      * Removes all <code>null</code>s from the input enumeration.
+     * @param <T> type of initial content
      * @param en enumeration that can contain nulls
      * @return new enumeration without null values
      */
@@ -151,7 +155,8 @@
      * };
      * Enumeration strings = Enumerations.convert(elems, convertToString);
      * </pre>
-     *
+     * @param <T> type of initial content
+     * @param <R> type of result content
      * @param en enumeration of any objects
      * @param processor a callback processor for the elements (its toAdd arguments is always null)
      * @return new enumeration where all elements has been processed
@@ -179,7 +184,8 @@
      * };
      * Enumeration strings = Enumerations.filter(elems, onlyString);
      * </pre>
-     *
+     * @param <T> type of initial content
+     * @param <R> type of result content
      * @param en enumeration of any objects
      * @param filter a callback processor for the elements (its toAdd arguments is always null)
      * @return new enumeration which does not include non-processed (returned null from processor) elements
@@ -196,7 +202,7 @@
      * Before any element is returned
      * for the resulting enumeration it is processed in the {@link Processor} and
      * the processor is allowed to modify it and also add additional elements
-     * at the (current) end of the <q>queue</q> by calling <code>toAdd.add</code>
+     * at the (current) end of the <code>queue</code> by calling <code>toAdd.add</code>
      * or <code>toAdd.addAll</code>. No other methods can be called on the
      * provided <code>toAdd</code> collection.
      * <p>
@@ -211,7 +217,8 @@
      * };
      * Enumeration strings = Enumerations.queue(elems, queueSubnodes);
      * </pre>
-     *
+     * @param <T> type of initial content
+     * @param <R> type of result content
      * @param en initial content of the resulting enumeration
      * @param filter the processor that is called for each element and can
      *        add and addAll elements to its toAdd Collection argument and
diff --git a/platform/openide.util/src/org/openide/util/Exceptions.java b/platform/openide.util/src/org/openide/util/Exceptions.java
index aacff60..4bd34b1 100644
--- a/platform/openide.util/src/org/openide/util/Exceptions.java
+++ b/platform/openide.util/src/org/openide/util/Exceptions.java
@@ -51,7 +51,7 @@
 
     /** Attaches additional message to given exception. This message will
      * be visible when one does <code>e.printStackTrace()</code>.
-     *
+     * @param <E> type of excetion
      * @param e exception to annotate
      * @param msg the message to add to the exception
      * @return the exception <code>e</code>
@@ -65,7 +65,7 @@
 
     /** Attaches additional localized message to given exception. This message 
      * can be extracted later by using {@link #findLocalizedMessage}.
-     *
+     * @param <E> type of excetion
      * @param e exception to annotate
      * @param localizedMessage the localized message to add to the exception
      * @return the exception <code>e</code>
@@ -97,9 +97,10 @@
      * then used as a level for reported {@link LogRecord}. This allows
      * those who report exceptions to annotate them as unimportant,
      * expected.
-     * 
+     * @param <E> type of excetion
      * @param e exception to assign severity to
      * @param severity the severity
+     * @return the exception <code>e</code>
      * @since 8.8
      */
     public static <E extends Throwable> E attachSeverity(E e, Level severity) {
@@ -306,7 +307,7 @@
 
                 for (LogRecord log : r) {
                     if (log.getMessage() != null) {
-                        a.append(log.getMessage()).append("\n");;
+                        a.append(log.getMessage()).append("\n");
                     }
                     if (log.getThrown() != null) {
                         StringWriter w = new StringWriter();
diff --git a/platform/openide.util/src/org/openide/util/MapFormat.java b/platform/openide.util/src/org/openide/util/MapFormat.java
index da978ff..056bd67 100644
--- a/platform/openide.util/src/org/openide/util/MapFormat.java
+++ b/platform/openide.util/src/org/openide/util/MapFormat.java
@@ -66,7 +66,7 @@
     private String rdel = "}"; // NOI18N
 
     /** Used formatting map */
-    private Map<String, Object> argmap;
+    private Map<String, ?> argmap;
 
     /** Offsets to {} expressions */
     private int[] offsets;
@@ -88,7 +88,7 @@
     * For common work use  <code>format(pattern, arguments) </code>.
     * @param arguments keys and values to use in the format
     */
-    public MapFormat(Map arguments) {
+    public MapFormat(Map<String, ?> arguments) {
         super();
         setMap(arguments);
     }
@@ -135,7 +135,7 @@
     }
     */
     /** Returns the value for given key. Subclass may define its own beahvior of
-    * this method. For example, if key is not defined, subclass can return <not defined>
+    * this method. For example, if key is not defined, subclass can return &lt;not defined&gt;
     * string.
     *
     * @param key Key.
@@ -151,6 +151,7 @@
     * @exception IllegalArgumentException if number of arguments exceeds BUFSIZE or
     * parser found unmatched brackets (this exception should be switched off
     * using setExactMatch(false)).
+    * @return parsed string
     */
     public String processPattern(String newPattern) throws IllegalArgumentException {
         int idx = 0;
@@ -306,6 +307,7 @@
     /**
     * Parses the string. Does not yet handle recursion (where
     * the substituted strings contain {n} references.)
+    * @param source string to parse
     * @return New format.
     */
     public String parse(String source) {
@@ -339,6 +341,7 @@
     /** Test whether formatter will throw exception if object for key was not found.
     * If given map does not contain object for key specified, it could
     * throw an exception. Returns true if throws. If not, key is left unchanged.
+    * @return true if throws.
     */
     public boolean willThrowExceptionIfKeyWasNotFound() {
         return throwex;
@@ -356,6 +359,7 @@
     /** Test whether both brackets are required in the expression.
     * If not, use setExactMatch(false) and formatter will ignore missing right
     * bracket. Advanced feature.
+    * @return true if both brackets are required
     */
     public boolean isExactMatch() {
         return exactmatch;
@@ -370,7 +374,9 @@
         exactmatch = flag;
     }
 
-    /** Returns string used as left brace */
+    /** Returns string used as left brace.
+     * @return string used as left brace
+     */
     public String getLeftBrace() {
         return ldel;
     }
@@ -382,7 +388,9 @@
         ldel = delimiter;
     }
 
-    /** Returns string used as right brace */
+    /** Returns string used as right brace.
+     *  @return string used as right brace
+     */
     public String getRightBrace() {
         return rdel;
     }
@@ -394,7 +402,9 @@
         rdel = delimiter;
     }
 
-    /** Returns argument map */
+    /** Returns argument map.
+     * @return argument map
+     */
     public Map getMap() {
         return argmap;
     }
@@ -407,7 +417,7 @@
     *
     * @param map the argument map
     */
-    public void setMap(Map map) {
+    public void setMap(Map<String, ?> map) {
         argmap = map;
     }
 
diff --git a/platform/openide.util/src/org/openide/util/Mutex.java b/platform/openide.util/src/org/openide/util/Mutex.java
index 1581c5a..69045fd 100644
--- a/platform/openide.util/src/org/openide/util/Mutex.java
+++ b/platform/openide.util/src/org/openide/util/Mutex.java
@@ -52,7 +52,7 @@
 * Mutex m = new Mutex();
 *
 * // Grant write access, compute an integer and return it:
-* return m.writeAccess(new Mutex.Action&lt;Integer>(){
+* return m.writeAccess(new Mutex.Action&lt;Integer&gt;(){
 *     public Integer run() {
 *         return 1;
 *     }
@@ -61,7 +61,7 @@
 * // Obtain read access, do some computation,
 * // possibly throw an IOException:
 * try {
-*     m.readAccess(new Mutex.ExceptionAction&lt;Void>() {
+*     m.readAccess(new Mutex.ExceptionAction&lt;Void&gt;() {
 *         public Void run() throws IOException {
 *             if (...) throw new IOException();
 *             return null;
@@ -183,7 +183,6 @@
      * @param privileged can enter privileged states of this Mutex
      *  @param executor allows to wrap the work of the mutex with a custom code
      * @since 7.12
-     * @see SimpleMutex#SimpleMutex(org.openide.util.ReadWriteAccess.Privileged, java.util.concurrent.Executor)
      */
     public Mutex(Privileged privileged, Executor executor) {
         this.impl = DefaultMutexImplementation.controlledBy(privileged.delegate, executor);
@@ -191,6 +190,7 @@
 
     /** Run an action only with read access.
     * See class description re. entering for write access within the dynamic scope.
+    * @param <T> type of action
     * @param action the action to perform
     * @return the object returned from {@link Mutex.Action#run}
     */
@@ -208,7 +208,7 @@
     * in a <code>MutexException</code> and thrown from this method. One is encouraged
     * to catch <code>MutexException</code>, obtain the inner exception, and rethrow it.
     * Here is an example:
-    * <p><code><PRE>
+    * <PRE><code>
     * try {
     *   mutex.readAccess (new ExceptionAction () {
     *     public void run () throws IOException {
@@ -218,9 +218,10 @@
     *  } catch (MutexException ex) {
     *    throw (IOException) ex.getException ();
     *  }
-    * </PRE></code>
+    * </code></PRE>
     * Note that <em>runtime exceptions</em> are always passed through, and neither
     * require this invocation style, nor are encapsulated.
+    * @param <T> type of action
     * @param action the action to execute
     * @return the object returned from {@link Mutex.ExceptionAction#run}
     * @exception MutexException encapsulates a user exception
@@ -243,7 +244,7 @@
 
     /** Run an action with write access.
     * The same thread may meanwhile reenter the mutex; see the class description for details.
-    *
+    * @param <T> type of action
     * @param action the action to perform
     * @return the result of {@link Mutex.Action#run}
     */
@@ -257,7 +258,7 @@
 
     /** Run an action with write access and possibly throw an exception.
     * Here is an example:
-    * <p><code><PRE>
+    * <PRE><code>
     * try {
     *   mutex.writeAccess (new ExceptionAction () {
     *     public void run () throws IOException {
@@ -267,8 +268,8 @@
     *  } catch (MutexException ex) {
     *    throw (IOException) ex.getException ();
     *  }
-    * </PRE></code>
-    *
+    * </code></PRE>
+    * @param <T> type of action
     * @param action the action to execute
     * @return the result of {@link Mutex.ExceptionAction#run}
     * @exception MutexException an encapsulated checked exception, if any
@@ -370,7 +371,7 @@
     }
     /** Action to be executed in a mutex without throwing any checked exceptions.
     * Unchecked exceptions will be propagated to calling code.
-     * @param T the type of object to return
+    * @param <T> the type of object to return
     */
     @SuppressWarnings("PublicInnerClass")
     public interface Action<T> extends ExceptionAction<T> {
@@ -386,7 +387,7 @@
     * code should catch the encapsulating exception and rethrow the
     * real one.
     * Unchecked exceptions will be propagated to calling code without encapsulation.
-     * @param T the type of object to return
+    * @param <T> the type of object to return
     */
     @SuppressWarnings("PublicInnerClass")
     public interface ExceptionAction<T> {
diff --git a/platform/openide.util/src/org/openide/util/MutexException.java b/platform/openide.util/src/org/openide/util/MutexException.java
index 6f93508..f8219ff 100644
--- a/platform/openide.util/src/org/openide/util/MutexException.java
+++ b/platform/openide.util/src/org/openide/util/MutexException.java
@@ -21,9 +21,9 @@
 
 /** Encapsulates other exceptions thrown from a mutex method.
 *
-* @see ReadWriteAccess.ExceptionAction
-* @see ReadWriteAccess#readAccess(ReadWriteAccess.ExceptionAction)
-* @see ReadWriteAccess#writeAccess(ReadWriteAccess.ExceptionAction)
+* @see Mutex.ExceptionAction
+* @see Mutex#readAccess(Mutex.ExceptionAction)
+* @see Mutex#writeAccess(Mutex.ExceptionAction)
 *
 * @author Jaroslav Tulach
 */
diff --git a/platform/openide.util/src/org/openide/util/NbBundle.java b/platform/openide.util/src/org/openide/util/NbBundle.java
index 982c4fe..cc659e4 100644
--- a/platform/openide.util/src/org/openide/util/NbBundle.java
+++ b/platform/openide.util/src/org/openide/util/NbBundle.java
@@ -138,8 +138,8 @@
     * @return URL of matching localized file
     * @throws MissingResourceException if not found
      * @deprecated Use the <code>nbresloc</code> URL protocol instead. This method does a poor
-     *             job of handling resources such as <samp>/some.dir/res.txt</samp> or
-     *             <samp>/some/res.txt.sample</samp>.
+     *             job of handling resources such as <code>/some.dir/res.txt</code> or
+     *             <code>/some/res.txt.sample</code>.
     */
     @Deprecated
     public static synchronized URL getLocalizedFile(String baseName, String ext)
@@ -155,8 +155,8 @@
     * @return URL of matching localized file
     * @throws MissingResourceException if not found
      * @deprecated Use the <code>nbresloc</code> URL protocol instead. This method does a poor
-     *             job of handling resources such as <samp>/some.dir/res.txt</samp> or
-     *             <samp>/some/res.txt.sample</samp>.
+     *             job of handling resources such as <code>/some.dir/res.txt</code> or
+     *             <code>/some/res.txt.sample</code>.
     */
     @Deprecated
     public static synchronized URL getLocalizedFile(String baseName, String ext, Locale locale)
@@ -173,8 +173,8 @@
     * @return URL of matching localized file
     * @throws MissingResourceException if not found
      * @deprecated Use the <code>nbresloc</code> URL protocol instead. This method does a poor
-     *             job of handling resources such as <samp>/some.dir/res.txt</samp> or
-     *             <samp>/some/res.txt.sample</samp>.
+     *             job of handling resources such as <code>/some.dir/res.txt</code> or
+     *             <code>/some/res.txt.sample</code>.
     */
     @Deprecated
     public static synchronized URL getLocalizedFile(String baseName, String ext, Locale locale, ClassLoader loader)
@@ -270,16 +270,16 @@
      * Find a localized and/or branded value for a given key and locale.
     * Scans through a map to find
     * the most localized match possible. For example:
-    * <p><code><PRE>
+    * <p><code>
     *   findLocalizedValue (hashTable, "keyName", new Locale ("cs_CZ"))
-    * </PRE></code>
+    * </code>
     * <p>This would return the first non-<code>null</code> value obtained from the following tests:
     * <UL>
     * <LI> <CODE>hashTable.get ("keyName_cs_CZ")</CODE>
     * <LI> <CODE>hashTable.get ("keyName_cs")</CODE>
     * <LI> <CODE>hashTable.get ("keyName")</CODE>
     * </UL>
-    *
+    * @param <T> type of returned object
     * @param table mapping from localized strings to objects
     * @param key the key to look for
     * @param locale the locale to use
@@ -308,7 +308,7 @@
 
     /**
      * Find a localized and/or branded value for a given key in the default system locale.
-    *
+    * @param <T> type of returned object
     * @param table mapping from localized strings to objects
     * @param key the key to look for
     * @return the localized object or <code>null</code> if no key matches
@@ -452,8 +452,8 @@
      * Get a resource bundle by name.
      * Like {@link ResourceBundle#getBundle(String,Locale,ClassLoader)} but faster,
      * and also understands branding.
-     * First looks for <samp>.properties</samp>-based bundles, then <samp>.class</samp>-based.
-     * @param name the base name of the bundle, e.g. <samp>org.netbeans.modules.foo.Bundle</samp>
+     * First looks for <code>.properties</code>-based bundles, then <code>.class</code>-based.
+     * @param name the base name of the bundle, e.g. <code>org.netbeans.modules.foo.Bundle</code>
      * @param locale the locale to use
      * @param loader a class loader to search in
      * @return a resource bundle (locale- and branding-merged), or null if not found
@@ -520,7 +520,7 @@
 
     /**
      * Load a resource bundle (without caching).
-     * @param name the base name of the bundle, e.g. <samp>org.netbeans.modules.foo.Bundle</samp>
+     * @param name the base name of the bundle, e.g. <code>org.netbeans.modules.foo.Bundle</code>
      * @param locale the locale to use
      * @param loader a class loader to search in
      * @return a resource bundle (locale- and branding-merged), or null if not found
@@ -581,8 +581,8 @@
 
     /**
      * Load a class-based resource bundle.
-     * @param name the base name of the bundle, e.g. <samp>org.netbeans.modules.foo.Bundle</samp>
-     * @param sname the name with slashes, e.g. <samp>org/netbeans/modules/foo/Bundle</samp>
+     * @param name the base name of the bundle, e.g. <code>org.netbeans.modules.foo.Bundle</code>
+     * @param sname the name with slashes, e.g. <code>org/netbeans/modules/foo/Bundle</code>
      * @param locale the locale to use
      * @param suffixes a list of suffixes to apply to the bundle name, in <em>increasing</em> order of specificity
      * @param loader a class loader to search in
@@ -748,10 +748,10 @@
      * For example, when {@link #getBranding} returns <code>branding</code>
      * and the default locale is German, you might get a sequence such as:
      * <ol>
-     * <li><samp>"_branding_de"</samp>
-     * <li><samp>"_branding"</samp>
-     * <li><samp>"_de"</samp>
-     * <li><samp>""</samp>
+     * <li><code>"_branding_de"</code></li>
+     * <li><code>"_branding"</code></li>
+     * <li><code>"_de"</code></li>
+     * <li><code>""</code></li>
      * </ol>
      * @return a read-only iterator of type <code>String</code>
      * @since 1.1.5
@@ -828,6 +828,7 @@
          * Values containing <code>{0}</code> etc. are assumed to be message formats and so may need escapes for metacharacters such as {@code '}.
          * A line may also be a comment if it starts with {@code #}, which may be useful for translators;
          * it is recommended to use the format {@code # {0} - summary of param}.
+         * @return list of key/value
          */
         String[] value();
     }
@@ -876,7 +877,7 @@
     }
 
     /**
-     * A resource bundle based on <samp>.properties</samp> files (or any map).
+     * A resource bundle based on <code>.properties</code> files (or any map).
      */
     private static final class PBundle extends ResourceBundle {
         private final Map<String,String> m;
diff --git a/platform/openide.util/src/org/openide/util/NbCollections.java b/platform/openide.util/src/org/openide/util/NbCollections.java
index 35ad347..7296258 100644
--- a/platform/openide.util/src/org/openide/util/NbCollections.java
+++ b/platform/openide.util/src/org/openide/util/NbCollections.java
@@ -55,6 +55,7 @@
 
     /**
      * Create a typesafe copy of a raw set.
+     * @param <E> desired type of the entry
      * @param rawSet an unchecked set
      * @param type the desired supertype of the entries
      * @param strict true to throw a <code>ClassCastException</code> if the raw set has an invalid entry,
@@ -83,6 +84,7 @@
 
     /**
      * Create a typesafe copy of a raw list.
+     * @param <E> desired type of the entry
      * @param rawList an unchecked list
      * @param type the desired supertype of the entries
      * @param strict true to throw a <code>ClassCastException</code> if the raw list has an invalid entry,
@@ -111,6 +113,8 @@
 
     /**
      * Create a typesafe copy of a raw map.
+     * @param <K> type of key
+     * @param <V> type of value
      * @param rawMap an unchecked map
      * @param keyType the desired supertype of the keys
      * @param valueType the desired supertype of the values
@@ -185,6 +189,7 @@
     /**
      * Create a typesafe filter of an unchecked iterator.
      * {@link Iterator#remove} will work if it does in the unchecked iterator.
+     * @param <E> type of element
      * @param rawIterator an unchecked iterator
      * @param type the desired enumeration type
      * @param strict if false, elements which are not null but not assignable to the requested type are omitted;
@@ -215,6 +220,7 @@
      * {@link Set#contains} also performs a type check and will throw {@link ClassCastException}
      * for an illegal argument.
      * The view is serializable if the underlying set is.
+     * @param <E> type of element
      * @param rawSet an unchecked set
      * @param type the desired element type
      * @param strict if false, elements in the underlying set which are not null and which are not assignable
@@ -294,6 +300,8 @@
      * {@link Map#get}, {@link Map#containsKey}, and {@link Map#containsValue} also perform a type check
      * and will throw {@link ClassCastException} for an illegal argument.
      * The view is serializable if the underlying map is.
+     * @param <K> type of key
+     * @param <V> type of value
      * @param rawMap an unchecked map
      * @param keyType the desired entry key type
      * @param valueType the desired entry value type
@@ -445,6 +453,7 @@
 
     /**
      * Create a typesafe filter of an unchecked enumeration.
+     * @param <E> type of element
      * @param rawEnum an unchecked enumeration
      * @param type the desired enumeration type
      * @param strict if false, elements which are not null but not assignable to the requested type are omitted;
@@ -486,6 +495,7 @@
      * }
      * </pre>
      * </div>
+     * @param <E> type of element
      * @param iterator an iterator
      * @return an iterable wrapper which will traverse the iterator once
      * @throws NullPointerException if the iterator is null
@@ -519,6 +529,7 @@
      * }
      * </pre>
      * </div>
+     * @param <E> type of element
      * @param enumeration an enumeration
      * @return an iterable wrapper which will traverse the enumeration once
      *         ({@link Iterator#remove} is not supported)
diff --git a/platform/openide.util/src/org/openide/util/RequestProcessor.java b/platform/openide.util/src/org/openide/util/RequestProcessor.java
index 7e79619..f98d367 100644
--- a/platform/openide.util/src/org/openide/util/RequestProcessor.java
+++ b/platform/openide.util/src/org/openide/util/RequestProcessor.java
@@ -61,9 +61,9 @@
  * <A name="use_cases">There are several use cases for RequestProcessor</A>,
  * most of them start with creating own <code>RequestProcessor</code>
  * instance (which by itself is quite lightweight).
- *
- * <h5>Do something later</h5>
- *
+ * <p>
+ * <strong>Do something later</strong>
+ * <p>
  * In case you want something to be done later in some background thread,
  * create an instance of <code>RequestProcessor</code> and post tasks to it.
  * <pre>
@@ -94,9 +94,9 @@
  * // later wait
  * last.{@link RequestProcessor.Task#waitFinished waitFinished()}
  * </pre>
- *
- * <h5>Periodic task</h5>
- *
+ * <p>
+ * <strong>Periodic task</strong>
+ * <p>
  * It is also possible to do something periodically. Use the {@link RequestProcessor.Task#schedule schedule} method:
  * <pre>
  * class Periodic implements Runnable {
@@ -112,9 +112,9 @@
  *  background activity. It is generally considered evil if some code runs
  *  without any user action. Your code shall respect  the application's state,
  *  and for example when the application is minimized, do nothing.
- *
- * <h5>Sliding task</h5>
- *
+ * <p>
+ * <strong>Sliding task</strong>
+ * <p>
  * Often you want to perform an update of your object internals
  * based on changes in some model. However your update may be costly
  * and you want to do it just once, regardless of how many changes are
@@ -136,9 +136,9 @@
  * The above code coalesces all events that arrive in 1s and for all of them
  * does <code>doTheWork</code> just once.
  *
- *
- * <h5>Interruption of tasks</h5>
- *
+ * <p>
+ * <strong>Interruption of tasks</strong>
+ * <p>
  * Since version 6.3 there is a conditional support for interruption of long running tasks.
  * There always was a way to cancel not yet running task using {@link RequestProcessor.Task#cancel }
  * but if the task's run() method was already running, one was out of luck.
@@ -157,7 +157,7 @@
  *     }
  * }
  * </pre>
- * <p/>
+ * <p>
  * Since <code>org.openide.util</code>, implements
  * {@link java.util.concurrent.ScheduledExecutorService}
  * @author Petr Nejedly, Jaroslav Tulach, Tim Boudreau
@@ -506,7 +506,7 @@
      *
      * @deprecated Sharing of one singlethreaded <CODE>RequestProcessor</CODE>
      * among different users and posting even blocking requests is inherently
-     * deadlock-prone. See <A href="#use_cases">use cases</A>. */
+     * deadlock-prone. See {@link RequestProcessor use cases}. */
     @Deprecated
     public static Task postRequest(Runnable run) {
         return DEFAULT.post(run);
@@ -522,7 +522,7 @@
      *
      * @deprecated Sharing of one singlethreaded <CODE>RequestProcessor</CODE>
      * among different users and posting even blocking requests is inherently
-     * deadlock-prone. See <A href="#use_cases">use cases</A>. */
+     * deadlock-prone. See {@link RequestProcessor use cases}. */
     @Deprecated
     public static Task postRequest(final Runnable run, int timeToWait) {
         return DEFAULT.post(run, timeToWait);
@@ -538,7 +538,7 @@
      *
      * @deprecated Sharing of one singlethreaded <CODE>RequestProcessor</CODE>
      * among different users and posting even blocking requests is inherently
-     * deadlock-prone. See <A href="#use_cases">use cases</A>. */
+     * deadlock-prone. See {@link RequestProcessor use cases}. */
     @Deprecated
     public static Task postRequest(final Runnable run, int timeToWait, int priority) {
         return DEFAULT.post(run, timeToWait, priority);
@@ -552,7 +552,7 @@
      *
      * @deprecated Sharing of one singlethreaded <CODE>RequestProcessor</CODE>
      * among different users and posting even blocking requests is inherently
-     * deadlock-prone. See <A href="#use_cases">use cases</A>. */
+     * deadlock-prone. See {@link RequestProcessor use cases}. */
     @Deprecated
     public static Task createRequest(Runnable run) {
         return DEFAULT.create(run);
@@ -642,7 +642,7 @@
 
     /**
      * {@inheritDoc}
-     * @throws an IllegalStateException if called on the
+     * @throws IllegalStateException if called on the
      * {@linkplain #getDefault default request processor}
      * @since org.openide.util 8.2
      */
@@ -658,7 +658,7 @@
 
     /**
      * {@inheritDoc}
-     * @throws an IllegalStateException if called on the
+     * @throws IllegalStateException if called on the
      * {@linkplain #getDefault default request processor}
      * @since org.openide.util 8.2
      */
@@ -759,7 +759,7 @@
 
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * <b>Note:</b> If the passed {@link java.util.concurrent.Callable} implements
      * {@link org.openide.util.Cancellable}, then that object's {@link org.openide.util.Cancellable#cancel()}
      * method will be called if {@link java.util.concurrent.Future#cancel(boolean)} is invoked.
@@ -805,7 +805,7 @@
 
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * <b>Note:</b> If the passed {@link java.lang.Runnable} implements
      * {@link org.openide.util.Cancellable}, then that object's {@link org.openide.util.Cancellable#cancel()}
      * method will be called if {@link java.util.concurrent.Future#cancel(boolean)} is invoked.
@@ -841,7 +841,7 @@
 
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * Executes the given tasks, returning a list of Futures holding their
      * status and results when all complete or the timeout expires, whichever
      * happens first.
@@ -870,7 +870,7 @@
     }
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * Executes the given tasks, returning the result of one which has
      * completed and cancelling any incomplete tasks.
      * @since org.openide.util 8.2
@@ -901,7 +901,7 @@
     }
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * Executes the given tasks, returning a list of Futures holding their
      * status and results when all complete or the timeout expires, whichever
      * happens first.
@@ -985,7 +985,7 @@
 
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * Schedules a runnable which will run with a given frequency, regardless
      * of how long execution takes, with the exception that if execution takes
      * longer than the specified delay, execution will be delayed but will
@@ -999,7 +999,7 @@
 
     /**
      * {@inheritDoc}
-     * <p/>
+     * <p>
      * Schedules a runnable which will run repeatedly after the specified initial
      * delay, with the specified delay between the completion of one run and
      * the start of the next.
diff --git a/platform/openide.util/src/org/openide/util/Task.java b/platform/openide.util/src/org/openide/util/Task.java
index 8172991..e5adea2 100644
--- a/platform/openide.util/src/org/openide/util/Task.java
+++ b/platform/openide.util/src/org/openide/util/Task.java
@@ -30,7 +30,7 @@
 * to finish.
 * <P>
 * For example:
-* <p><code><PRE>
+* <PRE><code>
 * Runnable r = new Runnable () {
 *   public void run () {
 *     // do something
@@ -38,7 +38,7 @@
 * };
 * Task task = new Task (r);
 * RequestProcessor.postRequest (task);
-* </PRE></code>
+* </code></PRE>
 * <p>In a different thread one can then test <CODE>task.isFinished ()</CODE>
 * or wait for it with <CODE>task.waitFinished ()</CODE>.
 *
@@ -193,7 +193,7 @@
     }
 
     /** Notify all waiters that this task has finished.
-    * @see #run
+    * @see #run()
     */
     protected final void notifyFinished() {
         Iterator<TaskListener> it;
diff --git a/platform/openide.util/src/org/openide/util/TopologicalSortException.java b/platform/openide.util/src/org/openide/util/TopologicalSortException.java
index 7f64f30..146d5a2 100644
--- a/platform/openide.util/src/org/openide/util/TopologicalSortException.java
+++ b/platform/openide.util/src/org/openide/util/TopologicalSortException.java
@@ -29,7 +29,7 @@
 *
 * @author Jaroslav Tulach
 * @since 3.30
-* @see BaseMutexUtilities#topologicalSort
+* @see Utilities#topologicalSort
 */
 public final class TopologicalSortException extends Exception {
     /** all vertexes */
diff --git a/platform/openide.util/src/org/openide/util/URLStreamHandlerRegistration.java b/platform/openide.util/src/org/openide/util/URLStreamHandlerRegistration.java
index 425b9d5..bb3778c 100644
--- a/platform/openide.util/src/org/openide/util/URLStreamHandlerRegistration.java
+++ b/platform/openide.util/src/org/openide/util/URLStreamHandlerRegistration.java
@@ -48,12 +48,14 @@
     /**
      * URL protocol(s) which are handled.
      * {@link URLStreamHandler#openConnection} will be called with a matching {@link URL#getProtocol}.
+     * @return list of protocol which are handled
      */
     String[] protocol();
 
     /**
      * An optional position in which to register this handler relative to others.
      * The lowest-numbered handler is used in favor of any others, including unnumbered handlers.
+     * @return position to register this handler
      */
     int position() default Integer.MAX_VALUE;
 
diff --git a/platform/openide.util/src/org/openide/util/Union2.java b/platform/openide.util/src/org/openide/util/Union2.java
index e6a2785..059e86c 100644
--- a/platform/openide.util/src/org/openide/util/Union2.java
+++ b/platform/openide.util/src/org/openide/util/Union2.java
@@ -67,6 +67,8 @@
 
     /**
      * Construct a union based on the first type.
+     * @param <First> type of first type
+     * @param <Second> type of second type
      * @param first an object of the first type
      * @return a union containing that object
      */
@@ -76,6 +78,8 @@
 
     /**
      * Construct a union based on the second type.
+     * @param <First> type of first type
+     * @param <Second> type of second type
      * @param second an object of the second type
      * @return a union containing that object
      */
diff --git a/platform/openide.util/src/org/openide/util/WeakListeners.java b/platform/openide.util/src/org/openide/util/WeakListeners.java
index b39e858..22baf46 100644
--- a/platform/openide.util/src/org/openide/util/WeakListeners.java
+++ b/platform/openide.util/src/org/openide/util/WeakListeners.java
@@ -40,8 +40,9 @@
  * The examples are written for ChangeListener. The <code>Utilities</code>
  * have factory methods for the most common listeners used in NetBeans
  * and also one universal factory method you can use for other listeners.
- *
- * <H2>How to use it:</H2>
+ * <p>
+ * <strong>How to use it:</strong>
+ * <p>
  * Here is an example how to write a listener/observer and make it listen
  * on some source:
  * <pre>
@@ -95,8 +96,9 @@
  *      }
  *  }
  * </pre>
- *
- * <H2>How to <font color=red>not</font> use it:</H2>
+ * <p>
+ * <strong>How to <span style="color:red">not</span> use it:</strong>
+ * <p>
  * Here are examples of a common mistakes done when using <em>weak listener</em>:
  * <pre>
  *  public class Observer {
@@ -127,8 +129,8 @@
  * </pre>
  * Mistake: The weak listener is unable to unregister itself from the source
  * once the listener is freed. For explanation, read below.
- *
- <H2>How does it work:</H2>
+ * <p>
+ * <strong>How does it work:</strong>
  * <P>The <em>weak listener</em> is used as a reference-weakening wrapper
  *  around the listener. It is itself strongly referenced from the implementation
  *  of the source (e.g. from its <code>EventListenerList</code>) but it references
@@ -177,7 +179,7 @@
 
     /** Generic factory method to create weak listener for any listener
      * interface.
-     *
+     * @param <T> type of listener
      * @param lType the type of listener to create. It can be any interface,
      *     but only interfaces are allowed.
      * @param l the listener to delegate to, <CODE>l</CODE> must be an instance
@@ -217,7 +219,7 @@
      * This will correctly create <code>ObjectChangeListener</code>
      * and unregister it by
      * calling <code>removeNamingListener</code>.
-     *
+     * @param <T> type of listener
      * @param lType the type the listener shall implement. It can be any interface,
      *     but only interfaces are allowed.
      * @param apiType the interface the returned object will be used as. It
diff --git a/platform/openide.util/src/org/openide/util/doc-files/api.html b/platform/openide.util/src/org/openide/util/doc-files/api.html
index a4ad172..0c41517 100644
--- a/platform/openide.util/src/org/openide/util/doc-files/api.html
+++ b/platform/openide.util/src/org/openide/util/doc-files/api.html
@@ -122,7 +122,7 @@
 very frequently in new code but helps to understand what lookup is
 doing behind the scenes. Then lookup itself is discussed, and how the
 standard instance lookup works and how it relates to JDK's 
-<a href="http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
+<a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
 standard for service provider registration</a>. 
 Lookup templates, which separate the
 provision of instances from the provision of categories, will be
@@ -418,7 +418,7 @@
 
 Such implementation has to be registered by some module to the system. 
 Either via layer as described above or as a JDK's
-<a href="http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
+<a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider">
 service provider</a>. If some module wants to register for example 
 <span class="type">org.me.MyService</span> it shall provide file name
 <span class="function-name">META-INF/services/org.me.MyService</span> in its own JAR
@@ -432,7 +432,7 @@
 
 <div class="nonnormative">
     The Lookup supports two small extensions to the 
-    <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider">JDK's
+    <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider">JDK's
     standard</a>. It allows a module to remove class registered by
     another one. That is why it is possible to write a module that
     disables the <span class="type">org.you.MyServiceImpl</span> implementation
diff --git a/platform/openide.util/src/org/openide/util/doc-files/preferences.html b/platform/openide.util/src/org/openide/util/doc-files/preferences.html
index 1b0b4c7..b573303 100644
--- a/platform/openide.util/src/org/openide/util/doc-files/preferences.html
+++ b/platform/openide.util/src/org/openide/util/doc-files/preferences.html
@@ -26,7 +26,7 @@
   </head>
   <body>
     <h1 align="left">Preferences API in NetBeans</h1>
-    NetBeans adopts <a href="http://java.sun.com/j2se/1.5.0/docs/guide/preferences/">Java Preferences API</a>
+    NetBeans adopts <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/preferences/">Java Preferences API</a>
     standard to be used in NetBeans to
     store preference and configuration data to be able to adapt to the needs
     of different users. NetBeans keeps this standard and enhances it slightly
@@ -52,7 +52,7 @@
       <li><code>NbPreferences.root()</code> returns root preference node. </li>
       <li><code>NbPreferences.forModule(class cls)</code> returns
       preference node which <a
-        href="@JDK@/java/util/prefs/Preferences.html#absolutePath%28%29">absolute path</a> 
+        href="@JDK@/java/util/prefs/Preferences.html#absolutePath--">absolute path</a> 
       depends whether class provided as a parameter was loaded as a
       part of any module or not. If so, then absolute path corresponds to
       slashified code name base of module. If not, then absolute path
@@ -169,7 +169,7 @@
     registering the option into your layer.
     <H4 ALIGN=LEFT>How to document usage of Preferences API?</H4>
     Answer properly arch questions like any other <A
-      HREF="http://openide.netbeans.org/tutorial/api-design.html">APIs</A>. There was added new arch question related to
+      HREF="https://netbeans.apache.org/wiki/API_Design">APIs</A>. There was added new arch question related to
     preferences (resources-preferences). See example:
     <PRE>
 &lt;answer id="resources-preferences"&gt;
@@ -244,9 +244,9 @@
 If the tests  didn't pass then probably there is more complicated object graph
 serialized then you must subclass <CODE>PropertyProcessor</CODE> and put your
 own code in.
-(See as an example: <A HREF="http://www.netbeans.org/source/browse/ide/launcher/upgrade/src/org/netbeans/upgrade/systemoptions/TaskTagsProcessor.java?view=markup">TaskTagsProcessor</A>
+(See as an example: <A HREF="https://github.com/apache/netbeans/tree/master/nb/o.n.upgrader/src/org/netbeans/upgrade/systemoptions/TaskTagsProcessor.java">TaskTagsProcessor</A>
  and here is a <A
-   HREF="http://www.netbeans.org/source/browse/ide/launcher/upgrade/test/unit/src/org/netbeans/upgrade/systemoptions/ExampleSettingsTest.java?view=markup">test</A>).
+   HREF="https://github.com/apache/netbeans/tree/master/nb/o.n.upgrader/test/unit/src/org/netbeans/upgrade/systemoptions">test</A>).
  <H4 ALIGN=LEFT>How to write tests that needs Preferences API?</H4>
  Not persistent implementation of <code>java.util.prefs.Preferences</code> 
  is installed in place of the platform-specific default implementation for
diff --git a/platform/openide.util/src/org/openide/util/io/NbMarshalledObject.java b/platform/openide.util/src/org/openide/util/io/NbMarshalledObject.java
index 758afea..80f1a28 100644
--- a/platform/openide.util/src/org/openide/util/io/NbMarshalledObject.java
+++ b/platform/openide.util/src/org/openide/util/io/NbMarshalledObject.java
@@ -145,7 +145,7 @@
             return true;
         }
 
-        if ((obj != null) && obj instanceof NbMarshalledObject) {
+        if (obj instanceof NbMarshalledObject) {
             NbMarshalledObject other = (NbMarshalledObject) obj;
 
             return Arrays.equals(objBytes, other.objBytes);
diff --git a/platform/openide.util/src/org/openide/util/io/NbObjectInputStream.java b/platform/openide.util/src/org/openide/util/io/NbObjectInputStream.java
index 8ba9061..5f8bbf1 100644
--- a/platform/openide.util/src/org/openide/util/io/NbObjectInputStream.java
+++ b/platform/openide.util/src/org/openide/util/io/NbObjectInputStream.java
@@ -88,7 +88,7 @@
      * This method deals with some of this incompatibilites and provides the
      * module owners a way how to fix some of them.
      * <P>
-     * When a class is read, the <link>Utilities.translate</link> is consulted
+     * When a class is read, the {@link org.openide.util.BaseUtilities#translate(String)} is consulted
      * to find out what whether the name of the class is listed there and
      * what new value is assigned to it. This allows complete rename of the
      * serialized class. For example:
@@ -101,13 +101,13 @@
      * <code>serialVersionUID</code>. This was causing us a lot of problems,
      * because people were forgetting to specify the <code>serialVersionUID</code>
      * field in their sources and then it was hard to recover from it. Right
-     * now we have a solution: Just use <link>Utilities.translate</link> framework
+     * now we have a solution: Just use {@link org.openide.util.BaseUtilities#translate(String)} framework
      * to assing your class <code>org.yourpackage.YourClass</code> the same
      * name as it had e.g. <code>org.yourpackage.YourClass</code>. This will
      * be interpreted by this method as a hit to suppress <code>serialVersionUID</code>
      * and the <code>NbObjectInputStream</code> will ignore its value.
      * <P>
-     * Please see <link>Utilities.translate</link> to learn how your module
+     * Please see {@link org.openide.util.BaseUtilities#translate(String)} to learn how your module
      * can provide list of classes that changed name or want to suppress <code>serialVersionUID</code>.
      *
      */
diff --git a/platform/openide.util/src/org/openide/util/io/OperationException.java b/platform/openide.util/src/org/openide/util/io/OperationException.java
index 1f41f8c..e6bba4e 100644
--- a/platform/openide.util/src/org/openide/util/io/OperationException.java
+++ b/platform/openide.util/src/org/openide/util/io/OperationException.java
@@ -35,6 +35,7 @@
     private Exception ex;
 
     /** Default constructor.
+     * @param ex encapsuled exception
     */
     public OperationException(Exception ex) {
         this.ex = ex;
diff --git a/platform/openide.util/src/org/openide/util/io/ReaderInputStream.java b/platform/openide.util/src/org/openide/util/io/ReaderInputStream.java
index 121d35e..0c6973a 100644
--- a/platform/openide.util/src/org/openide/util/io/ReaderInputStream.java
+++ b/platform/openide.util/src/org/openide/util/io/ReaderInputStream.java
@@ -37,6 +37,7 @@
     /** Creates new input stream from the given reader.
      * Uses the platform default encoding.
     * @param reader Input reader
+    * @throws IOException on IO failure
     */
     public ReaderInputStream(Reader reader) throws IOException {
         this.reader = reader;
@@ -47,7 +48,8 @@
 
     /** Creates new input stream from the given reader and encoding.
      * @param reader Input reader
-     * @param encoding
+     * @param encoding encoding
+     * @throws IOException on IO failure
      */
     public ReaderInputStream(Reader reader, String encoding)
     throws IOException {
diff --git a/platform/openide.util/src/org/openide/util/io/SafeException.java b/platform/openide.util/src/org/openide/util/io/SafeException.java
index 335e5f8..406dce3 100644
--- a/platform/openide.util/src/org/openide/util/io/SafeException.java
+++ b/platform/openide.util/src/org/openide/util/io/SafeException.java
@@ -33,6 +33,7 @@
     private Exception ex;
 
     /** Default constructor.
+     * @param ex encapsuled exception
     */
     public SafeException(Exception ex) {
         super(ex, null);
diff --git a/platform/openide.util/src/org/openide/xml/EntityCatalog.java b/platform/openide.util/src/org/openide/xml/EntityCatalog.java
index 4dbaadd..2b59779 100644
--- a/platform/openide.util/src/org/openide/xml/EntityCatalog.java
+++ b/platform/openide.util/src/org/openide/xml/EntityCatalog.java
@@ -37,7 +37,7 @@
  * <p>You can register your own instances via lookup to add to the resolver pool,
  * but for reasons of performance and predictability during startup it is best to provide
  * the entity (e.g. some DTD you define) as the contents of a file in
- * the system filesystem, in the <samp>/xml/entities/</samp> folder, where the file path
+ * the system filesystem, in the <code>/xml/entities/</code> folder, where the file path
  * beneath this folder is based on the public ID as follows:
  * <ol>
  * <li>US-ASCII alphanumeric characters and '_' are left as is.
@@ -46,10 +46,10 @@
  * <li>Final '//EN' is dropped.
  * <li>Exactly two forward slashes in a row are converted to one.
  * </ol>
- * Thus for example the public ID <samp>-//NetBeans//Entity&nbsp;Mapping&nbsp;Registration&nbsp;1.0//EN</samp>
- * would be looked for in the file <samp>/xml/entities/NetBeans/Entity_Mapping_Registration_1_0</samp>.
+ * Thus for example the public ID <code>-//NetBeans//Entity&nbsp;Mapping&nbsp;Registration&nbsp;1.0//EN</code>
+ * would be looked for in the file <code>/xml/entities/NetBeans/Entity_Mapping_Registration_1_0</code>.
  * Naturally this only works if you are defining a fixed number of entities.
- * <p>It is recommended that the entity file in <samp>/xml/entities/</samp> also be given a file
+ * <p>It is recommended that the entity file in <code>/xml/entities/</code> also be given a file
  * attribute named <code>hint.originalPublicID</code> with a string value giving the public ID.
  * This permits {@code org.netbeans.modules.xml.catalog} to display the entry properly.
  * @author  Petr Kuzel
@@ -71,6 +71,7 @@
 
     /** Get a master entity catalog which can delegate to any others that have
      * been registered via lookup.
+     * @return master entity catalog
      */
     public static EntityCatalog getDefault() {
         return instance;
diff --git a/platform/openide.util/src/org/openide/xml/XMLUtil.java b/platform/openide.util/src/org/openide/xml/XMLUtil.java
index 6b847db..c7d6432 100644
--- a/platform/openide.util/src/org/openide/xml/XMLUtil.java
+++ b/platform/openide.util/src/org/openide/xml/XMLUtil.java
@@ -91,6 +91,7 @@
     // ~~~~~~~~~~~~~~~~~~~~~ SAX related ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
     /** Create a simple parser.
+      * @throws SAXException if a parser can not be created
       * @return <code>createXMLReader(false, false)</code>
       */
     public static XMLReader createXMLReader() throws SAXException {
@@ -99,7 +100,8 @@
 
     /** Create a simple parser, possibly validating.
      * @param validate if true, a validating parser is returned
-     * @return <code>createXMLReader(validate, false)</code>
+     * @throws SAXException if a parser can not be created
+     * @return <code>createXMLReader(validate, false)</code> 
      */
     public static XMLReader createXMLReader(boolean validate)
     throws SAXException {
@@ -149,7 +151,7 @@
 
     /**
      * Creates an empty DOM document. E.g.:
-     * <p><pre>
+     * <pre>
      * Document doc = createDocument("book", null, null, null);
      * </pre><p>
      * creates new DOM of a well-formed document with root element named book.
@@ -372,7 +374,7 @@
      * some CDATA sections my not be written as CDATA section or may be merged with
      * other CDATA section at the same level. Also if plain text nodes are mixed with
      * CDATA sections at the same level all text is likely to end up in one big CDATA section.
-     * <br/>
+     * <br>
      * For nodes that only have one CDATA section this method should work fine.
      * </p>
      * 
@@ -588,7 +590,7 @@
 
     /**
      * Escape passed string as XML element content (<code>&lt;</code>,
-     * <code>&amp;</code> and <code>><code> in <code>]]></code> sequences).
+     * <code>&amp;</code> and <code>&gt;</code> in <code>]]></code> sequences).
      *
      * @param val a string to be escaped
      *
@@ -638,7 +640,7 @@
      * @param val data to be converted
      * @param start offset
      * @param len count
-     *
+     * @return converted data
      * @since 1.29
      */
     public static String toHex(byte[] val, int start, int len) {
@@ -659,7 +661,7 @@
      * @param hex data to be converted
      * @param start offset
      * @param len count
-     *
+     * @return converted data
      * @throws IOException if input does not represent hex encoded value
      *
      * @since 1.29
@@ -925,8 +927,9 @@
      * This compares localName (nodeName if localName is null) to name,
      * and checks the tags namespace with the provided namespace.
      * A <code>null</code> namespace will match any namespace.
-     *
-     * <ul>This is differs from the DOM version by:
+     * <p>
+     * This is differs from the DOM version by:
+     * <ul>
      * <li>not searching recursively</li>
      * <li>returns a single result</li>
      * </ul>
@@ -986,7 +989,7 @@
      * 
      * @param from element to translate
      * @param namespace namespace to be translated to
-     * @return
+     * @return translated element
      * 
      * @since 8.4
      */
diff --git a/platform/openide.util/test/unit/src/org/openide/util/TaskTest.java b/platform/openide.util/test/unit/src/org/openide/util/TaskTest.java
index c45953e..8eb0151 100644
--- a/platform/openide.util/test/unit/src/org/openide/util/TaskTest.java
+++ b/platform/openide.util/test/unit/src/org/openide/util/TaskTest.java
@@ -21,25 +21,243 @@
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 import org.netbeans.junit.Log;
-import org.netbeans.junit.NbTestCase;
-import org.openide.util.Exceptions;
-import org.openide.util.Task;
+import static java.lang.System.nanoTime;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import org.junit.Ignore;
 
-public class TaskTest extends NbTestCase {
-    private Logger LOG;
 
-    public TaskTest(String testName) {
-        super(testName);
-    }
+public class TaskTest {
+    private final static long tenMiliseconds = 10000000; // in nanoseconds
+    private final static long fiveHundredMiliseconds = 500000000; // in nanoseconds
     
-    @Override
-    protected void setUp() throws Exception {
-        LOG = Logger.getLogger("org.openide.util.Task." + getName());
+    private static final Logger LOG = Logger.getLogger("org.openide.util.TaskTest");
+
+    private volatile boolean runHasBeenExecuted = false;
+    private volatile Task executedListenerTask = null;
+
+    //--------------------------------------------------------------------------
+    private static void assertFinished(final Task task) {
+
+        assertTrue(task.isFinished());
     }
 
+    //--------------------------------------------------------------------------
+    private static void assertWaitFinishedReturnsImmediately(final Task task) {
+
+        final long begin = nanoTime();
+        task.waitFinished();
+        final long duration = nanoTime() - begin;
+
+        assertTrue("The Task.waitFinished() took longer than 10 miliseconds. "
+                + "This is not neseserily a bug.", duration < tenMiliseconds);
+    }
     
+    //--------------------------------------------------------------------------
+    private static void assertWaitFinishedWithTimeoutReturnsImmediately(final Task task)
+            throws Exception {
+
+        final long begin = nanoTime();
+        task.waitFinished(0);
+        final long duration = nanoTime()- begin;
+
+        assertTrue("The Task.waitFinished(long) took longer than milisecond. "
+                + "This is not neseserily a bug.", duration < tenMiliseconds);
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void emptyTask_isImmediatelyFinished_andNeverWaits()
+            throws Exception {
+
+        assertFinished(Task.EMPTY);
+        assertWaitFinishedReturnsImmediately(Task.EMPTY);
+        assertWaitFinishedWithTimeoutReturnsImmediately(Task.EMPTY);
+        assertEquals("task null", Task.EMPTY.toString());
+        assertEquals("null", Task.EMPTY.debug());
+
+        Task empty = new Task(null);
+        assertFinished(empty);
+        assertWaitFinishedReturnsImmediately(empty);
+        assertWaitFinishedWithTimeoutReturnsImmediately(empty);
+        assertEquals("task null", empty.toString());
+        assertEquals("null", empty.debug());
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void runningEmptyTask_doesNothing() {
+
+        try {
+            Task.EMPTY.run();
+        } catch (final NullPointerException e) {
+            fail("NullPointerException shall never happen.");
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void runningTask_executesRunnableAndListeners() {
+
+        this.runHasBeenExecuted = false;
+        this.executedListenerTask = null;
+
+        Task task = new Task(() -> {
+            this.runHasBeenExecuted = true;
+        });
+        task.addTaskListener((t) -> {
+            this.executedListenerTask = t;
+        });
+
+        assertFalse("Task should not have been finished.", task.isFinished());
+        assertNotEquals("null", task.debug());
+
+        task.run();
+
+        assertTrue("Runnable should have been executed.", this.runHasBeenExecuted);
+        assertSame(task, this.executedListenerTask);
+        assertTrue("Task should have finished.", task.isFinished());
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void runningTask_doesNotRunRemovedListeners() {
+
+        this.executedListenerTask = null;
+        TaskListener listener = (t) -> {
+            this.executedListenerTask = t;
+        };
+
+        Task task = new Task(() -> {
+        });
+        task.addTaskListener(listener);
+        task.removeTaskListener(listener);
+
+        task.run();
+
+        assertTrue("Task should have finished.", task.isFinished());
+        assertNull(this.executedListenerTask);
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void finishedTask_executesAddedListenerImmediately() {
+
+        this.executedListenerTask = null;
+
+        Task task = new Task(() -> {
+        });
+        task.run();
+
+        assertNull(this.executedListenerTask);
+        assertTrue("Task should have finished.", task.isFinished());
+
+        task.addTaskListener((t) -> {
+            this.executedListenerTask = t;
+        });
+
+        assertSame(task, this.executedListenerTask);
+        assertTrue("Task should have finished.", task.isFinished()); // still finished
+    }
     
+    //--------------------------------------------------------------------------
+    @Ignore("Current implementation allows null listener but then Task.run throws NPE :(")
+    @Test
+    public void addTaskListener_throwsNullPointer_whenGivenNull() {
+
+        Task task = new Task(() -> {
+        });
+        try {
+            task.addTaskListener(null);
+            fail();
+        } catch (NullPointerException e) {
+            //good
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    @Test
+    public void removeTaskListener_doesNothing_whenGivenNull() {
+
+        this.executedListenerTask = null;
+        
+        TaskListener listener = (t) -> {
+            this.executedListenerTask = t;
+        };
+
+        Task task = new Task(() -> {
+        });
+        task.addTaskListener(listener);
+        task.removeTaskListener(null);
+        task.run();
+
+        assertSame(task, this.executedListenerTask);
+    }
+    
+    //--------------------------------------------------------------------------
+    @Test
+    public void taksIsNotFinished_untilRunMethodCompletes()
+          throws Exception {
+
+        Object lock = new Object();
+        Task task = new Task(() -> {
+            synchronized (lock) {
+                lock.notify(); // let the test thread continue
+                try {
+                    lock.wait();
+                } catch (InterruptedException e) {
+                    fail("This shall never happen as the test does not call 'interrupt()'.");
+                }
+            }
+        });
+
+        assertFalse("Task should not have been finished.", task.isFinished());
+
+        synchronized (lock) {
+            new Thread(task).start();
+            lock.wait(); // wait for task to start
+        }
+
+        assertFalse("Task should not have been finished.", task.isFinished());
+
+        synchronized (lock) {
+            lock.notify(); //let the task finish
+        }
+        task.waitFinished();
+
+        assertTrue("Task should have finished.", task.isFinished());
+    }
+    //--------------------------------------------------------------------------
+    @Test
+    public void waitFinished_returnsAfterTimeout_whenTaksIsNotExecutedAtAll()
+            throws Exception {
+ 
+        Task task = new Task(()->{});
+        
+        assertFalse("Task should not have been finished.", task.isFinished());
+        
+        final long begin = nanoTime();
+        
+        assertFalse("Task should not have been finished.", task.waitFinished(500));
+        
+        final long duration = nanoTime()- begin;
+        
+        assertTrue("Task.waitFinished(long) waited shorter than expected (" + 
+                duration + " ns < " + fiveHundredMiliseconds + " ns).", 
+              duration >= fiveHundredMiliseconds);
+        assertFalse("Task should not have been finished.", task.isFinished());
+    }
+    
+    // this test is being repaced by taksIsNotFinished_untilRunMethodCompletes 
+    // and will be removed by next PR
+    @Test
     public void testPlainTaskWaitsForBeingExecuted () throws Exception {
         R run = new R ();
         Task t = new Task (run);
@@ -59,18 +277,9 @@
         assertTrue ("Finished", t.isFinished ());
     }
     
-    public void testTaskEMPTYIsFinished () throws Exception {
-        assertTrue (Task.EMPTY.isFinished ());
-    }
-    
-    public void testWaitFinishedOnEMPTYTaskReturnsImmediatelly () throws Exception {
-        Task.EMPTY.waitFinished ();
-    }
-
-    public void testWaitWithTimeOutReturnsImmediatellyOnFinishedTasks () throws Exception {
-        assertTrue ("Was successfully finished", Task.EMPTY.waitFinished (0));
-    }
-
+    // this test is being replaced by waitFinishedWithTimeout_returnsAfterTimeout_whenTaksIsNotExecutedAtAll
+    // and will be removed by next PR
+    @Test
     public void testWaitWithTimeOutReturnsAfterTimeOutWhenTheTaskIsNotComputedAtAll () throws Exception {
         if (!canWait1s()) {
             LOG.warning("Skipping testWaitWithTimeOutReturnsAfterTimeOutWhenTheTaskIsNotComputedAtAll, as the computer is not able to wait 1s!");
@@ -96,27 +305,33 @@
         fail ("Something wrong happened the task should wait for 1000ms but it took: " + time + "\n" + log);
     }
     
-    public void testWaitOnStrangeTaskThatStartsItsExecutionInOverridenWaitFinishedMethodLikeFolderInstancesDo () throws Exception {
+    //--------------------------------------------------------------------------
+    @Test
+    public void waitOnTask_withOverridenWaitFinishedMethod() 
+            throws Exception { // like FolderInstances do
+        
         class MyTask extends Task {
-            private int values;
-            
-            public MyTask () {
-                notifyFinished ();
+
+            private int values = 0;
+
+            public MyTask() {
+                notifyFinished();
             }
-            
-            public void waitFinished () {
-                notifyRunning ();
+
+            @Override
+            public void waitFinished() {
+                notifyRunning();
                 values++;
-                notifyFinished ();
+                notifyFinished();
             }
         }
-        
-        MyTask my = new MyTask ();
-        assertTrue ("The task thinks that he is finished", my.isFinished ());
-        assertTrue ("Ok, even with timeout we got the result", my.waitFinished (1000));
-        assertEquals ("But the old waitFinished is called", 1, my.values);
+
+        MyTask my = new MyTask(); 
+        assertTrue("Task should have finished.", my.isFinished()); //The task thinks that it is finished.
+        assertTrue("Task should have finished.", my.waitFinished(1000)); //Even with timeout we got the result,
+        assertEquals(1, my.values); //but the old waitFinished is called.
     }
-    
+    @Test
     public void testWaitOnStrangeTaskThatTakesReallyLongTime () throws Exception {
         class MyTask extends Task {
             public MyTask () {
@@ -151,6 +366,7 @@
     /*
      * see issue #130265
      */
+    @Test
     public void testWaitFinished0WaitsUntilFinished() throws Exception {
         Task task = new Task(new Runnable() {
             @Override
diff --git a/platform/openide.util/test/unit/src/org/openide/util/test/TestFileUtils.java b/platform/openide.util/test/unit/src/org/openide/util/test/TestFileUtils.java
index f19877a..e007006 100644
--- a/platform/openide.util/test/unit/src/org/openide/util/test/TestFileUtils.java
+++ b/platform/openide.util/test/unit/src/org/openide/util/test/TestFileUtils.java
@@ -128,7 +128,7 @@
     /**
      * Create a new ZIP file.
      * @param os a stream to which the ZIP will be written
-     * @param entries entries as maps from filename to binary contents;; parent dirs created automatically
+     * @param entries entries as maps from filename to binary contents; parent dirs created automatically
      * @throws IOException for the usual reasons
      */
     public static void writeZipFile(OutputStream os, Map<String,byte[]> entries) throws IOException {
diff --git a/platform/openide.windows/nbproject/org-openide-windows.sig b/platform/openide.windows/nbproject/org-openide-windows.sig
index ec22fde..8f2a6a1 100644
--- a/platform/openide.windows/nbproject/org-openide-windows.sig
+++ b/platform/openide.windows/nbproject/org-openide-windows.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 6.94
+#Version 6.95
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/platform/openide.windows/src/org/openide/windows/CloneableTopComponent.java b/platform/openide.windows/src/org/openide/windows/CloneableTopComponent.java
index 999190b..657b91f 100644
--- a/platform/openide.windows/src/org/openide/windows/CloneableTopComponent.java
+++ b/platform/openide.windows/src/org/openide/windows/CloneableTopComponent.java
@@ -337,6 +337,7 @@
          * @deprecated Use {@link #getArbitraryComponent} instead.
          *             It doesn't throw a runtime exception.
         */
+        @Deprecated
         public CloneableTopComponent getAnyComponent() {
             synchronized (LOCK) {
                 return componentSet.iterator().next();
diff --git a/platform/openide.windows/src/org/openide/windows/Mode.java b/platform/openide.windows/src/org/openide/windows/Mode.java
index 57adfd4..ed32f33 100644
--- a/platform/openide.windows/src/org/openide/windows/Mode.java
+++ b/platform/openide.windows/src/org/openide/windows/Mode.java
@@ -48,20 +48,24 @@
 
     /** Name of property for the unique programmatic name of this mode.
      * @deprecated Do not use. It is redundant, name can not be changed.*/
+    @Deprecated
     public static final String PROP_NAME = "name"; // NOI18N
 
     /** Name of property for the display name of this mode.
      * @deprecated Do not use. It is redundant. */
+    @Deprecated
     public static final String PROP_DISPLAY_NAME = "displayName"; // NOI18N
 
     /** @deprecated Only public by accident. */
 
+    @Deprecated
     /* public static final */ long serialVersionUID = -2650968323666215654L;
 
     /** Get the diplay name of the mode.
      * This name will be used by a container to create its title.
      * @return human-presentable name of the mode
      * @deprecated Do not use. It is redudant. */
+    @Deprecated
     public String getDisplayName();
 
     /** Get the programmatic name of the mode.
@@ -73,6 +77,7 @@
      * implementations as the icon (e.g. for display in tabs).
      * @return the icon of the mode (or <code>null</code> if no icon was specified)
      * @deprecated Do not use. It is redundant. */
+    @Deprecated
     public Image getIcon();
 
     /** Attaches a component to a mode for this workspace.
@@ -104,6 +109,7 @@
     /** Getter for asociated workspace.
      * @return The workspace instance to which is this mode asociated.
      * @deprecated Do not use. Worskpaces are not supporeted anymore. */
+    @Deprecated
     public Workspace getWorkspace();
 
     /** Get all top components currently docked into this mode.
diff --git a/platform/openide.windows/src/org/openide/windows/Workspace.java b/platform/openide.windows/src/org/openide/windows/Workspace.java
index 39dacf7..1946a03 100644
--- a/platform/openide.windows/src/org/openide/windows/Workspace.java
+++ b/platform/openide.windows/src/org/openide/windows/Workspace.java
@@ -42,6 +42,7 @@
  * @deprecated Do not use any more. Use {@link WindowManager} methods directly,
  * e.g. {@link WindowManager#getModes()} etc.
  */
+@Deprecated
 public interface Workspace extends Serializable {
     /** Name of property for modes in the workspace.
      * @deprecated Use {@link WindowManager#PROP_MODES} instead. */
diff --git a/platform/options.api/nbproject/org-netbeans-modules-options-api.sig b/platform/options.api/nbproject/org-netbeans-modules-options-api.sig
index bb2ceda..846ba78 100644
--- a/platform/options.api/nbproject/org-netbeans-modules-options-api.sig
+++ b/platform/options.api/nbproject/org-netbeans-modules-options-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.62
+#Version 1.63
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/options.api/src/org/netbeans/modules/options/OptionsCategoryImpl.java b/platform/options.api/src/org/netbeans/modules/options/OptionsCategoryImpl.java
index 3276829..eddcd49 100644
--- a/platform/options.api/src/org/netbeans/modules/options/OptionsCategoryImpl.java
+++ b/platform/options.api/src/org/netbeans/modules/options/OptionsCategoryImpl.java
@@ -109,4 +109,9 @@
 	    return Collections.emptySet();
 	}
     }
+
+    @Override
+    public String toString() {
+        return "OptionsCategoryImpl{" + "title=" + title + ", categoryName=" + categoryName + ", iconBase=" + iconBase + ", icon=" + icon + ", controller=" + controller + ", keywords=" + keywords + ", keywordsCategory=" + keywordsCategory + ", advancedOptionsFolder=" + advancedOptionsFolder + '}';
+    }
 }
diff --git a/platform/options.api/src/org/netbeans/modules/options/QuickSearchProvider.java b/platform/options.api/src/org/netbeans/modules/options/QuickSearchProvider.java
index 97141dd..45d06fa 100644
--- a/platform/options.api/src/org/netbeans/modules/options/QuickSearchProvider.java
+++ b/platform/options.api/src/org/netbeans/modules/options/QuickSearchProvider.java
@@ -74,7 +74,7 @@
 	String categoryID = it.getId();
 
 	Map<String, Set<String>> kws = new HashMap<String, Set<String>>();
-	if (category != null && (category instanceof OptionsCategoryImpl)) {
+	if (category instanceof OptionsCategoryImpl) {
 	    Set<String> categoryKeywords = ((OptionsCategoryImpl) category).getKeywordsByCategory();
 	    String categoryPath = categoryID.substring(categoryID.indexOf('/') + 1);
 	    Map<String, Set<String>> mergedMap = new HashMap<String, Set<String>>();
diff --git a/platform/options.api/src/org/netbeans/modules/options/classic/SettingChildren.java b/platform/options.api/src/org/netbeans/modules/options/classic/SettingChildren.java
index 2b19c75..786ca71 100644
--- a/platform/options.api/src/org/netbeans/modules/options/classic/SettingChildren.java
+++ b/platform/options.api/src/org/netbeans/modules/options/classic/SettingChildren.java
@@ -278,7 +278,7 @@
         public String getDisplayName() {
             String retVal = null;
             DataObject dobj= (DataObject) getCookie (DataObject.class);
-            if (dobj != null && dobj instanceof DataShadow) {
+            if (dobj instanceof DataShadow) {
                 DataShadow dsh = (DataShadow)dobj;
                 Node origNode = dsh.getOriginal().getNodeDelegate();
                 if (origNode != null) {
diff --git a/platform/options.api/src/org/netbeans/spi/options/OptionsCategory.java b/platform/options.api/src/org/netbeans/spi/options/OptionsCategory.java
index 6911eab..5829903 100644
--- a/platform/options.api/src/org/netbeans/spi/options/OptionsCategory.java
+++ b/platform/options.api/src/org/netbeans/spi/options/OptionsCategory.java
@@ -99,6 +99,7 @@
      *              {@link #getIcon} instead.
      * @return base name of 32x32 icon
      */
+    @Deprecated
     public String getIconBase () {
         return null;
     }
diff --git a/platform/options.keymap/nbproject/org-netbeans-modules-options-keymap.sig b/platform/options.keymap/nbproject/org-netbeans-modules-options-keymap.sig
index 8ff27cb..bbc7157 100644
--- a/platform/options.keymap/nbproject/org-netbeans-modules-options-keymap.sig
+++ b/platform/options.keymap/nbproject/org-netbeans-modules-options-keymap.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54
+#Version 1.55
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/print/nbproject/org-netbeans-modules-print.sig b/platform/print/nbproject/org-netbeans-modules-print.sig
index 7696226..7242b59 100644
--- a/platform/print/nbproject/org-netbeans-modules-print.sig
+++ b/platform/print/nbproject/org-netbeans-modules-print.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 7.43
+#Version 7.44
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/print/nbproject/project.properties b/platform/print/nbproject/project.properties
index 1b3661c..43a84f0 100644
--- a/platform/print/nbproject/project.properties
+++ b/platform/print/nbproject/project.properties
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 
 javadoc.arch=${basedir}/arch.xml
diff --git a/platform/queries/nbproject/org-netbeans-modules-queries.sig b/platform/queries/nbproject/org-netbeans-modules-queries.sig
index 8d5b884..da672a0 100644
--- a/platform/queries/nbproject/org-netbeans-modules-queries.sig
+++ b/platform/queries/nbproject/org-netbeans-modules-queries.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.60
+#Version 1.61
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/queries/nbproject/project.properties b/platform/queries/nbproject/project.properties
index 75c51c6..2b2adc7 100644
--- a/platform/queries/nbproject/project.properties
+++ b/platform/queries/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
diff --git a/platform/sampler/nbproject/org-netbeans-modules-sampler.sig b/platform/sampler/nbproject/org-netbeans-modules-sampler.sig
index dd40635..469d050 100644
--- a/platform/sampler/nbproject/org-netbeans-modules-sampler.sig
+++ b/platform/sampler/nbproject/org-netbeans-modules-sampler.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.31
+#Version 1.32
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/sampler/nbproject/project.properties b/platform/sampler/nbproject/project.properties
index 3bb68e5..6d8f978 100644
--- a/platform/sampler/nbproject/project.properties
+++ b/platform/sampler/nbproject/project.properties
@@ -16,6 +16,6 @@
 # under the License.
 is.autoload=true
 javac.source=1.8
-javac.compilerargs=-Xlint -Xlint:-serial -Xlint:-processing -Werror
+javac.compilerargs=-Xlint -Xlint:-serial -Xlint:-processing -Xlint:-options -Werror
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/sendopts/nbproject/org-netbeans-modules-sendopts.sig b/platform/sendopts/nbproject/org-netbeans-modules-sendopts.sig
index 3f7ea72..cfa61c2 100644
--- a/platform/sendopts/nbproject/org-netbeans-modules-sendopts.sig
+++ b/platform/sendopts/nbproject/org-netbeans-modules-sendopts.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.53
+#Version 2.54
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/platform/sendopts/nbproject/project.properties b/platform/sendopts/nbproject/project.properties
index 63bf1be..6b8b102 100644
--- a/platform/sendopts/nbproject/project.properties
+++ b/platform/sendopts/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint:unchecked
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/settings/nbproject/org-netbeans-modules-settings.sig b/platform/settings/nbproject/org-netbeans-modules-settings.sig
index 967a8d0..3277621 100644
--- a/platform/settings/nbproject/org-netbeans-modules-settings.sig
+++ b/platform/settings/nbproject/org-netbeans-modules-settings.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.66
+#Version 1.67
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/settings/src/org/netbeans/modules/settings/Env.java b/platform/settings/src/org/netbeans/modules/settings/Env.java
index bc2a478..61192c7 100644
--- a/platform/settings/src/org/netbeans/modules/settings/Env.java
+++ b/platform/settings/src/org/netbeans/modules/settings/Env.java
@@ -106,7 +106,7 @@
      * @return set of items
      */
     public static java.util.Set<String> parseAttribute(Object attr) {
-        if (attr != null && attr instanceof String) {
+        if (attr instanceof String) {
             java.util.StringTokenizer s = 
                 new java.util.StringTokenizer((String) attr, ","); //NOI18N
             java.util.Set<String> set = new java.util.HashSet<String>(10);
diff --git a/platform/settings/src/org/netbeans/modules/settings/InstanceProvider.java b/platform/settings/src/org/netbeans/modules/settings/InstanceProvider.java
index d3fc83a..b503cb5 100644
--- a/platform/settings/src/org/netbeans/modules/settings/InstanceProvider.java
+++ b/platform/settings/src/org/netbeans/modules/settings/InstanceProvider.java
@@ -205,7 +205,7 @@
     Convertor getConvertor() throws IOException {
         if (convertor == null) {
             Object attrb = providerFO.getAttribute(Env.EA_CONVERTOR);
-            if (attrb == null || !(attrb instanceof Convertor)) {
+            if (!(attrb instanceof Convertor)) {
                 throw new IOException("cannot create convertor: " + attrb + ", provider:" +providerFO); //NOI18N
             }
             convertor = (Convertor) attrb;
@@ -217,7 +217,7 @@
     private synchronized String getInstanceClassName() {
         if (instanceClassName == null) {
             Object name = providerFO.getAttribute(Env.EA_INSTANCE_CLASS_NAME);
-            if (name != null && name instanceof String) {
+            if (name instanceof String) {
                 instanceClassName = org.openide.util.Utilities.translate((String) name);
             } else {
                 instanceClassName = null;
diff --git a/platform/settings/src/org/netbeans/modules/settings/SaveSupport.java b/platform/settings/src/org/netbeans/modules/settings/SaveSupport.java
index d71cbd2..00dce80 100644
--- a/platform/settings/src/org/netbeans/modules/settings/SaveSupport.java
+++ b/platform/settings/src/org/netbeans/modules/settings/SaveSupport.java
@@ -97,7 +97,7 @@
                     return convertor;
                 }
                 Object attrb = newProviderFO.getAttribute(Env.EA_CONVERTOR);
-                if (attrb == null || !(attrb instanceof Convertor)) {
+                if (!(attrb instanceof Convertor)) {
                     throw new IOException("cannot create convertor: " + attrb + ", provider: " + newProviderFO); //NOI18N
                 } else {
                     convertor = (Convertor) attrb;
@@ -116,7 +116,7 @@
         FileObject foEntity = Env.findEntityRegistration(fo);
         if (foEntity == null) foEntity = fo;
         Object publicId = foEntity.getAttribute(Env.EA_PUBLICID);
-        if (publicId == null || !(publicId instanceof String)) {
+        if (!(publicId instanceof String)) {
             throw new IOException("missing or invalid attribute: " + //NOI18N
                 Env.EA_PUBLICID + ", provider: " + foEntity); //NOI18N
         }
diff --git a/platform/settings/src/org/netbeans/modules/settings/convertors/ModuleInfoManager.java b/platform/settings/src/org/netbeans/modules/settings/convertors/ModuleInfoManager.java
index e8d557e..272a5e5 100644
--- a/platform/settings/src/org/netbeans/modules/settings/convertors/ModuleInfoManager.java
+++ b/platform/settings/src/org/netbeans/modules/settings/convertors/ModuleInfoManager.java
@@ -32,7 +32,7 @@
  * @author  Jan Pokorsky
  */
 final class ModuleInfoManager {
-    private static final ModuleInfoManager mim = new ModuleInfoManager();;
+    private static final ModuleInfoManager mim = new ModuleInfoManager();
 
     /** all modules <code bas name, ModuleInfo> */
     private HashMap<String, ModuleInfo> modules = null;
diff --git a/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataConvertor.java b/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataConvertor.java
index 3614f38..e65da73 100644
--- a/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataConvertor.java
+++ b/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataConvertor.java
@@ -224,7 +224,7 @@
     
     private static boolean isSystemOption(final Object obj) {
         boolean b =  false;
-        if (obj != null && obj instanceof SharedClassObject){
+        if (obj instanceof SharedClassObject){
             for(Class c = obj.getClass(); !b && c != null; c = c.getSuperclass()) {
                 b =  "org.openide.options.SystemOption".equals(c.getName());//NOI18N
             }
@@ -543,7 +543,7 @@
         /** store setting or provide just SaveCookie? */
         private boolean acceptSave() {
             Object inst = instance.get();
-            if (inst == null || !(inst instanceof Serializable) ||
+            if (!(inst instanceof Serializable) ||
                 // XXX bad dep; should perhaps have some marker in the .settings file for this??
                 inst instanceof TopComponent) return false;
             
@@ -581,7 +581,7 @@
                     FileObject foEntity = Env.findEntityRegistration(newProviderFO);
                     if (foEntity == null) foEntity = newProviderFO;
                     Object attrb = foEntity.getAttribute(Env.EA_PUBLICID);
-                    if (attrb == null || !(attrb instanceof String)) {
+                    if (!(attrb instanceof String)) {
                         throw new IOException("missing or invalid attribute: " + //NOI18N
                             Env.EA_PUBLICID + ", provider: " + foEntity); //NOI18N
                     }
@@ -591,7 +591,7 @@
                     }
                     
                     attrb = newProviderFO.getAttribute(Env.EA_CONVERTOR);
-                    if (attrb == null || !(attrb instanceof Convertor)) {
+                    if (!(attrb instanceof Convertor)) {
                         throw new IOException("cannot create convertor: " + //NOI18N
                             attrb + ", provider: " + newProviderFO); //NOI18N
                     } else {
diff --git a/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataNode.java b/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataNode.java
index b62481d..e3b126c 100644
--- a/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataNode.java
+++ b/platform/settings/src/org/netbeans/modules/settings/convertors/SerialDataNode.java
@@ -481,7 +481,7 @@
         convertProps (p, descr.expert, this);
         if (bd != null) {
             Object helpID = bd.getValue("expertHelpID"); // NOI18N
-            if (helpID != null && helpID instanceof String) {
+            if (helpID instanceof String) {
                 p.setValue("helpID", helpID); // NOI18N
             }
         }
@@ -497,7 +497,7 @@
         if (bd != null) {
             // #29550: help from the beaninfo on property tabs
             Object helpID = bd.getValue("propertiesHelpID"); // NOI18N
-            if (helpID != null && helpID instanceof String) {
+            if (helpID instanceof String) {
                 props.setValue("helpID", helpID); // NOI18N
             }
         }
diff --git a/platform/settings/src/org/netbeans/modules/settings/convertors/XMLPropertiesConvertor.java b/platform/settings/src/org/netbeans/modules/settings/convertors/XMLPropertiesConvertor.java
index 2351453..9b2e754 100644
--- a/platform/settings/src/org/netbeans/modules/settings/convertors/XMLPropertiesConvertor.java
+++ b/platform/settings/src/org/netbeans/modules/settings/convertors/XMLPropertiesConvertor.java
@@ -82,7 +82,7 @@
         FileObject foEntity = Env.findEntityRegistration(providerFO);
         if (foEntity == null) foEntity = providerFO;
         Object publicId = foEntity.getAttribute(Env.EA_PUBLICID);
-        if (publicId == null || !(publicId instanceof String)) {
+        if (!(publicId instanceof String)) {
             throw new IOException("missing or invalid attribute: " + //NOI18N
                 Env.EA_PUBLICID + ", provider: " + foEntity); //NOI18N
         }
@@ -211,7 +211,7 @@
     private Class getInstanceClass() throws IOException, ClassNotFoundException {
         if (instanceClass == null) {
             Object name = providerFO.getAttribute(Env.EA_INSTANCE_CLASS_NAME);
-            if (name == null || !(name instanceof String)) {
+            if (!(name instanceof String)) {
                 throw new IllegalStateException(
                     "missing or invalid ea attribute: " +
                     Env.EA_INSTANCE_CLASS_NAME); //NOI18N
diff --git a/platform/settings/src/org/netbeans/spi/settings/ConvertorResolver.java b/platform/settings/src/org/netbeans/spi/settings/ConvertorResolver.java
index d526afb..4f18ee3 100644
--- a/platform/settings/src/org/netbeans/spi/settings/ConvertorResolver.java
+++ b/platform/settings/src/org/netbeans/spi/settings/ConvertorResolver.java
@@ -66,7 +66,7 @@
             
             fo = org.netbeans.modules.settings.Env.findEntityRegistration(fo);
             Object attrib = fo.getAttribute(org.netbeans.modules.settings.Env.EA_PUBLICID);
-            return (attrib == null || !(attrib instanceof String))? null: (String) attrib;
+            return (!(attrib instanceof String))? null: (String) attrib;
         } catch (IOException ex) {
             Logger.getLogger(ConvertorResolver.class.getName()).log(Level.WARNING, null, ex);
             return null;
@@ -90,7 +90,7 @@
     /** extract convertor from file attributes */
     private Convertor getConvertor(FileObject fo) {
         Object attrb = fo.getAttribute(org.netbeans.modules.settings.Env.EA_CONVERTOR);
-        return (attrb == null || !(attrb instanceof Convertor))? null: (Convertor) attrb;
+        return (!(attrb instanceof Convertor))? null: (Convertor) attrb;
     }
     
     /** Converts the publicID into filesystem friendly name.
diff --git a/platform/spi.actions/nbproject/org-netbeans-modules-spi-actions.sig b/platform/spi.actions/nbproject/org-netbeans-modules-spi-actions.sig
index 0495c19..145936a 100644
--- a/platform/spi.actions/nbproject/org-netbeans-modules-spi-actions.sig
+++ b/platform/spi.actions/nbproject/org-netbeans-modules-spi-actions.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.45
+#Version 1.46
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/platform/spi.quicksearch/nbproject/org-netbeans-spi-quicksearch.sig b/platform/spi.quicksearch/nbproject/org-netbeans-spi-quicksearch.sig
index c8df9aa..774c630 100644
--- a/platform/spi.quicksearch/nbproject/org-netbeans-spi-quicksearch.sig
+++ b/platform/spi.quicksearch/nbproject/org-netbeans-spi-quicksearch.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.44
+#Version 1.45
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/platform/spi.quicksearch/nbproject/project.properties b/platform/spi.quicksearch/nbproject/project.properties
index e86c855..0ffa016 100644
--- a/platform/spi.quicksearch/nbproject/project.properties
+++ b/platform/spi.quicksearch/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/platform/templates/src/org/netbeans/modules/templates/ui/TemplatesPanel.java b/platform/templates/src/org/netbeans/modules/templates/ui/TemplatesPanel.java
index 6c24f14..f6970c9 100644
--- a/platform/templates/src/org/netbeans/modules/templates/ui/TemplatesPanel.java
+++ b/platform/templates/src/org/netbeans/modules/templates/ui/TemplatesPanel.java
@@ -181,7 +181,7 @@
         private void invokeInplaceEditing () {
             if (startEditing == null) {
                 Object o = tree.getActionMap ().get ("startEditing"); // NOI18N
-                if (o != null && o instanceof Action) {
+                if (o instanceof Action) {
                     startEditing = (Action) o;
                 }
             }
diff --git a/platform/uihandler/nbproject/org-netbeans-modules-uihandler.sig b/platform/uihandler/nbproject/org-netbeans-modules-uihandler.sig
index 1edf965..efb59f4 100644
--- a/platform/uihandler/nbproject/org-netbeans-modules-uihandler.sig
+++ b/platform/uihandler/nbproject/org-netbeans-modules-uihandler.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.52
+#Version 2.53
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/profiler/debugger.jpda.heapwalk/src/org/netbeans/modules/debugger/jpda/heapwalk/models/HeapActionsFilter.java b/profiler/debugger.jpda.heapwalk/src/org/netbeans/modules/debugger/jpda/heapwalk/models/HeapActionsFilter.java
index cde37c3..451f327 100644
--- a/profiler/debugger.jpda.heapwalk/src/org/netbeans/modules/debugger/jpda/heapwalk/models/HeapActionsFilter.java
+++ b/profiler/debugger.jpda.heapwalk/src/org/netbeans/modules/debugger/jpda/heapwalk/models/HeapActionsFilter.java
@@ -111,7 +111,7 @@
         new Models.ActionPerformer () {
             @Override
             public boolean isEnabled (Object node) {
-                if ((node == null) || (!(node instanceof ObjectVariable))) {
+                if ((!(node instanceof ObjectVariable))) {
                     return false;
                 }
                 ObjectVariable var = (ObjectVariable) node;
diff --git a/profiler/lib.profiler.charts/nbproject/org-netbeans-lib-profiler-charts.sig b/profiler/lib.profiler.charts/nbproject/org-netbeans-lib-profiler-charts.sig
index 6e591ed..4474108 100644
--- a/profiler/lib.profiler.charts/nbproject/org-netbeans-lib-profiler-charts.sig
+++ b/profiler/lib.profiler.charts/nbproject/org-netbeans-lib-profiler-charts.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/profiler/lib.profiler.common/nbproject/org-netbeans-lib-profiler-common.sig b/profiler/lib.profiler.common/nbproject/org-netbeans-lib-profiler-common.sig
index 5c3d4b3..7e8332b 100644
--- a/profiler/lib.profiler.common/nbproject/org-netbeans-lib-profiler-common.sig
+++ b/profiler/lib.profiler.common/nbproject/org-netbeans-lib-profiler-common.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.64
+#Version 1.65
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/profiler/lib.profiler.ui/nbproject/org-netbeans-lib-profiler-ui.sig b/profiler/lib.profiler.ui/nbproject/org-netbeans-lib-profiler-ui.sig
index e346fcd..15862d9 100644
--- a/profiler/lib.profiler.ui/nbproject/org-netbeans-lib-profiler-ui.sig
+++ b/profiler/lib.profiler.ui/nbproject/org-netbeans-lib-profiler-ui.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.163
+#Version 1.164
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -3993,7 +3993,7 @@
 meth public int getTreeCellOffsetX()
 meth public java.awt.Point getCellTipLocation()
 meth public java.lang.String getFindString()
-meth public java.util.List getExpandedPaths()
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedPaths()
 meth public javax.swing.JToolTip getCellTip()
 meth public javax.swing.JTree getTree()
 meth public org.netbeans.lib.profiler.results.CCTNode[] getPathToRoot(org.netbeans.lib.profiler.results.CCTNode)
@@ -4021,7 +4021,7 @@
 meth public void setSortingOrder(boolean)
 meth public void setTreeCellOffsetX(int)
 meth public void setTreeCellRenderer(org.netbeans.lib.profiler.ui.components.tree.EnhancedTreeCellRenderer)
-meth public void setup(java.util.List,javax.swing.tree.TreePath)
+meth public void setup(java.util.List<javax.swing.tree.TreePath>,javax.swing.tree.TreePath)
 meth public void updateTreeTable()
 meth public void updateTreeTableHeader()
 meth public void updateUI()
@@ -4586,13 +4586,13 @@
 meth public java.lang.Class getColumnClass(int)
 meth public java.lang.Object getValueAt(int,int)
 meth public java.lang.String getColumnName(int)
-meth public java.util.List getExpandedPaths()
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedPaths()
 meth public javax.swing.tree.TreePath getRootPath()
 meth public void changeRoot(org.netbeans.lib.profiler.results.CCTNode)
 meth public void expandRoot()
-meth public void restoreExpandedPaths(java.util.List)
+meth public void restoreExpandedPaths(java.util.List<javax.swing.tree.TreePath>)
 meth public void setValueAt(java.lang.Object,int,int)
-meth public void setup(java.util.List,javax.swing.tree.TreePath)
+meth public void setup(java.util.List<javax.swing.tree.TreePath>,javax.swing.tree.TreePath)
 meth public void updateTreeTable()
 supr javax.swing.table.AbstractTableModel
 hfds firingChange
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JCheckTree.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JCheckTree.java
index 1d7e2bf..47881d8 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JCheckTree.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JCheckTree.java
@@ -225,7 +225,7 @@
     public void processMouseEvent(MouseEvent e) {
         if (e instanceof MouseWheelEvent) {
             Component target = JCheckTree.this.getParent();
-            if (target == null || !(target instanceof JViewport))
+            if (!(target instanceof JViewport))
                 target = JCheckTree.this;
             MouseEvent mwe = SwingUtilities.convertMouseEvent(
                     JCheckTree.this, (MouseWheelEvent)e, target);
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedComboBox.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedComboBox.java
index 2bb0bd4..3353bce 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedComboBox.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedComboBox.java
@@ -43,7 +43,7 @@
 
         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
                                                       boolean cellHasFocus) {
-            if ((value != null) && value instanceof JSeparator) {
+            if (value instanceof JSeparator) {
                 return (JSeparator) value;
             } else {
                 return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTable.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTable.java
index 9859496..dc6b00e 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTable.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTable.java
@@ -251,7 +251,7 @@
     public void processMouseEvent(final MouseEvent e) {
         if (e instanceof MouseWheelEvent) {
             Component target = JExtendedTable.this.getParent();
-            if (target == null || !(target instanceof JViewport))
+            if (!(target instanceof JViewport))
                 target = JExtendedTable.this;
             MouseEvent mwe = SwingUtilities.convertMouseEvent(
                     JExtendedTable.this, (MouseWheelEvent)e, target);
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTree.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTree.java
index 7bbe93f..72fedb4 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTree.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JExtendedTree.java
@@ -126,7 +126,7 @@
     public void processMouseEvent(MouseEvent e) {
         if (e instanceof MouseWheelEvent) {
             Component target = JExtendedTree.this.getParent();
-            if (target == null || !(target instanceof JViewport))
+            if (!(target instanceof JViewport))
                 target = JExtendedTree.this;
             MouseEvent mwe = SwingUtilities.convertMouseEvent(
                     JExtendedTree.this, (MouseWheelEvent)e, target);
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JTreeTable.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JTreeTable.java
index c6ed31c..169a5c3 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JTreeTable.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/JTreeTable.java
@@ -852,7 +852,7 @@
     public void processMouseEvent(MouseEvent e) {
         if (e instanceof MouseWheelEvent) {
             Component target = JTreeTable.this.getParent();
-            if (target == null || !(target instanceof JViewport))
+            if (!(target instanceof JViewport))
                 target = JTreeTable.this;
             MouseEvent mwe = SwingUtilities.convertMouseEvent(
                     JTreeTable.this, (MouseWheelEvent)e, target);
diff --git a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/tree/CheckTreeNode.java b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/tree/CheckTreeNode.java
index 6960a1a..26ad253 100644
--- a/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/tree/CheckTreeNode.java
+++ b/profiler/lib.profiler.ui/src/org/netbeans/lib/profiler/ui/components/tree/CheckTreeNode.java
@@ -125,7 +125,7 @@
         // Update checkState of parent
         TreeNode parent = getParent();
 
-        if ((parent != null) && parent instanceof CheckTreeNode) {
+        if (parent instanceof CheckTreeNode) {
             changedNodes.addAll(((CheckTreeNode) parent).setPartiallyChecked());
         }
 
@@ -162,7 +162,7 @@
         // Update checkState of parent
         TreeNode parent = getParent();
 
-        if ((parent != null) && parent instanceof CheckTreeNode) {
+        if (parent instanceof CheckTreeNode) {
             if (areSiblingsFullyChecked()) {
                 changedNodes.addAll(((CheckTreeNode) parent).setFullyChecked());
             } else {
@@ -200,7 +200,7 @@
         // Update checkState of parent
         TreeNode parent = getParent();
 
-        if ((parent != null) && parent instanceof CheckTreeNode) {
+        if (parent instanceof CheckTreeNode) {
             if (areSiblingsUnchecked()) {
                 changedNodes.addAll(((CheckTreeNode) parent).setUnchecked());
             } else {
diff --git a/profiler/lib.profiler/build.xml b/profiler/lib.profiler/build.xml
index 243c43a..86b9661 100644
--- a/profiler/lib.profiler/build.xml
+++ b/profiler/lib.profiler/build.xml
@@ -57,10 +57,7 @@
         <fail message="javac.source of lib.profiler classes should be as low as possible!">
             <condition>
                 <not>
-                    <or>
-                        <equals arg1="${javac.source}" arg2="1.5"/>
-                        <equals arg1="${javac.source}" arg2="1.7"/>
-                    </or>
+                    <equals arg1="${javac.source}" arg2="1.8"/>
                 </not>
             </condition>
         </fail>
diff --git a/profiler/lib.profiler/nbproject/org-netbeans-lib-profiler.sig b/profiler/lib.profiler/nbproject/org-netbeans-lib-profiler.sig
index 913bee8..dd149b9 100644
--- a/profiler/lib.profiler/nbproject/org-netbeans-lib-profiler.sig
+++ b/profiler/lib.profiler/nbproject/org-netbeans-lib-profiler.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.126
+#Version 1.127
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/profiler/lib.profiler/nbproject/project.properties b/profiler/lib.profiler/nbproject/project.properties
index 9362f94..8f9bd22 100644
--- a/profiler/lib.profiler/nbproject/project.properties
+++ b/profiler/lib.profiler/nbproject/project.properties
@@ -46,4 +46,4 @@
     lib/deployed/**/hpux*/lib*.sl,\
     remote-pack-defs/*.sh
 
-javac.source=1.7
+javac.source=1.8
diff --git a/profiler/lib.profiler/test/qa-functional/data/projects/j2se-simple/nbproject/project.properties b/profiler/lib.profiler/test/qa-functional/data/projects/j2se-simple/nbproject/project.properties
index 1c17999..2090134 100644
--- a/profiler/lib.profiler/test/qa-functional/data/projects/j2se-simple/nbproject/project.properties
+++ b/profiler/lib.profiler/test/qa-functional/data/projects/j2se-simple/nbproject/project.properties
@@ -43,7 +43,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/profiler/profiler.api/nbproject/org-netbeans-modules-profiler-api.sig b/profiler/profiler.api/nbproject/org-netbeans-modules-profiler-api.sig
index 2bda575..1d19b27 100644
--- a/profiler/profiler.api/nbproject/org-netbeans-modules-profiler-api.sig
+++ b/profiler/profiler.api/nbproject/org-netbeans-modules-profiler-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.67
+#Version 1.68
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/profiler/profiler.attach/nbproject/org-netbeans-modules-profiler-attach.sig b/profiler/profiler.attach/nbproject/org-netbeans-modules-profiler-attach.sig
index 6602eb4..3f23d7d 100644
--- a/profiler/profiler.attach/nbproject/org-netbeans-modules-profiler-attach.sig
+++ b/profiler/profiler.attach/nbproject/org-netbeans-modules-profiler-attach.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.38
+#Version 2.39
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/profiler/profiler.attach/src/org/netbeans/modules/profiler/attach/providers/TargetPlatformEnum.java b/profiler/profiler.attach/src/org/netbeans/modules/profiler/attach/providers/TargetPlatformEnum.java
index 366e81d..b744da1 100644
--- a/profiler/profiler.attach/src/org/netbeans/modules/profiler/attach/providers/TargetPlatformEnum.java
+++ b/profiler/profiler.attach/src/org/netbeans/modules/profiler/attach/providers/TargetPlatformEnum.java
@@ -59,7 +59,7 @@
     //~ Methods ------------------------------------------------------------------------------------------------------------------
 
     public boolean equals(Object obj) {
-        if ((obj == null) || !(obj instanceof TargetPlatformEnum)) {
+        if (!(obj instanceof TargetPlatformEnum)) {
             return false;
         }
 
diff --git a/profiler/profiler.heapwalker/nbproject/org-netbeans-modules-profiler-heapwalker.sig b/profiler/profiler.heapwalker/nbproject/org-netbeans-modules-profiler-heapwalker.sig
index dcb3d45..05aa71d 100644
--- a/profiler/profiler.heapwalker/nbproject/org-netbeans-modules-profiler-heapwalker.sig
+++ b/profiler/profiler.heapwalker/nbproject/org-netbeans-modules-profiler-heapwalker.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.129
+#Version 1.130
 
 CLSS public abstract java.awt.Component
 cons protected init()
@@ -850,8 +850,8 @@
 
 CLSS public static org.netbeans.modules.profiler.heapwalk.ClassesController$Configuration
  outer org.netbeans.modules.profiler.heapwalk.ClassesController
-cons public init(long,java.util.List,javax.swing.tree.TreePath)
-meth public java.util.List getExpandedStaticFields()
+cons public init(long,java.util.List<javax.swing.tree.TreePath>,javax.swing.tree.TreePath)
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedStaticFields()
 meth public javax.swing.tree.TreePath getSelectedStaticField()
 meth public long getJavaClassID()
 supr org.netbeans.modules.profiler.heapwalk.NavigationHistoryManager$Configuration
@@ -892,7 +892,7 @@
 meth protected javax.swing.AbstractButton createControllerPresenter()
 meth protected javax.swing.JPanel createControllerUI()
 meth public int getRootMode()
-meth public java.util.List getExpandedPaths()
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedPaths()
 meth public javax.swing.tree.TreePath getSelectedRow()
 meth public org.netbeans.modules.profiler.heapwalk.FieldsBrowserController$Handler getInstancesControllerHandler()
 meth public org.netbeans.modules.profiler.heapwalk.model.HeapWalkerNode getFilteredSortedFields(java.lang.String,int,boolean)
@@ -1039,9 +1039,9 @@
 
 CLSS public static org.netbeans.modules.profiler.heapwalk.InstancesController$Configuration
  outer org.netbeans.modules.profiler.heapwalk.InstancesController
-cons public init(long,java.util.List,javax.swing.tree.TreePath,java.util.List,javax.swing.tree.TreePath)
-meth public java.util.List getExpandedFields()
+cons public init(long,java.util.List<javax.swing.tree.TreePath>,javax.swing.tree.TreePath,java.util.List<javax.swing.tree.TreePath>,javax.swing.tree.TreePath)
 meth public java.util.List getExpandedReferences()
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedFields()
 meth public javax.swing.tree.TreePath getSelectedField()
 meth public javax.swing.tree.TreePath getSelectedReference()
 meth public long getInstanceID()
@@ -1340,7 +1340,7 @@
 innr public abstract interface static Handler
 meth protected javax.swing.AbstractButton createControllerPresenter()
 meth protected javax.swing.JPanel createControllerUI()
-meth public java.util.List getExpandedPaths()
+meth public java.util.List<javax.swing.tree.TreePath> getExpandedPaths()
 meth public javax.swing.tree.TreePath getSelectedRow()
 meth public org.netbeans.modules.profiler.heapwalk.ReferencesBrowserController$Handler getReferencesControllerHandler()
 meth public org.netbeans.modules.profiler.heapwalk.model.HeapWalkerNode getFilteredSortedReferences(java.lang.String,int,boolean)
diff --git a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/CompareSnapshotsHelper.java b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/CompareSnapshotsHelper.java
index d22ff65..cd57492 100644
--- a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/CompareSnapshotsHelper.java
+++ b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/CompareSnapshotsHelper.java
@@ -108,7 +108,7 @@
             if (fromProjectRadio.isSelected()) {
                 Object selectedItem = projectSnapshotsList.getSelectedValue();
 
-                if ((selectedItem == null) || !(selectedItem instanceof FileObject)) {
+                if (!(selectedItem instanceof FileObject)) {
                     return null;
                 }
 
diff --git a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/basic/ArrayValueView.java b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/basic/ArrayValueView.java
index 94bfe18..f1ae4f1 100644
--- a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/basic/ArrayValueView.java
+++ b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/basic/ArrayValueView.java
@@ -249,21 +249,21 @@
     public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
         // Scroll almost one screen
         Container parent = getParent();
-        if ((parent == null) || !(parent instanceof JViewport)) return 50;
+        if (!(parent instanceof JViewport)) return 50;
         return (int)(((JViewport)parent).getHeight() * 0.95f);
     }
 
     public boolean getScrollableTracksViewportHeight() {
         // Allow dynamic vertical enlarging of the panel but request the vertical scrollbar when needed
         Container parent = getParent();
-        if ((parent == null) || !(parent instanceof JViewport)) return false;
+        if (!(parent instanceof JViewport)) return false;
         return getMinimumSize().height < ((JViewport)parent).getHeight();
     }
 
     public boolean getScrollableTracksViewportWidth() {
         // Allow dynamic horizontal enlarging of the panel but request the vertical scrollbar when needed
         Container parent = getParent();
-        if ((parent == null) || !(parent instanceof JViewport)) return false;
+        if (!(parent instanceof JViewport)) return false;
         return getMinimumSize().width < ((JViewport)parent).getWidth();
     }
 
diff --git a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/jdk/ui/Utils.java b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/jdk/ui/Utils.java
index 245e6a0..b6b7acc 100644
--- a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/jdk/ui/Utils.java
+++ b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/details/jdk/ui/Utils.java
@@ -328,21 +328,21 @@
         public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
             // Scroll almost one screen
             Container parent = getParent();
-            if ((parent == null) || !(parent instanceof JViewport)) return 50;
+            if (!(parent instanceof JViewport)) return 50;
             return (int)(((JViewport)parent).getHeight() * 0.95f);
         }
 
         public boolean getScrollableTracksViewportHeight() {
             // Allow dynamic vertical enlarging of the panel but request the vertical scrollbar when needed
             Container parent = getParent();
-            if ((parent == null) || !(parent instanceof JViewport)) return false;
+            if (!(parent instanceof JViewport)) return false;
             return getPreferredSize().height < ((JViewport)parent).getHeight();
         }
 
         public boolean getScrollableTracksViewportWidth() {
             // Allow dynamic horizontal enlarging of the panel but request the vertical scrollbar when needed
             Container parent = getParent();
-            if ((parent == null) || !(parent instanceof JViewport)) return false;
+            if (!(parent instanceof JViewport)) return false;
             return getPreferredSize().width < ((JViewport)parent).getWidth();
         }
 
diff --git a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/InstanceNode.java b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/InstanceNode.java
index 1954876..0d974f1 100644
--- a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/InstanceNode.java
+++ b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/InstanceNode.java
@@ -132,7 +132,7 @@
         if (hasInstance()) {
             HeapWalkerNode parent = getParent();
 
-            while ((parent != null) && parent instanceof HeapWalkerInstanceNode) {
+            while (parent instanceof HeapWalkerInstanceNode) {
                 if (((HeapWalkerInstanceNode) parent).getInstance().equals(instance)) {
                     return parent;
                 }
diff --git a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/ObjectFieldNode.java b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/ObjectFieldNode.java
index 665f163..c37860f 100644
--- a/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/ObjectFieldNode.java
+++ b/profiler/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/model/ObjectFieldNode.java
@@ -77,7 +77,7 @@
         JavaClass declaringClass = fieldValue.getField().getDeclaringClass();
         HeapWalkerNode parent = getParent();
 
-        while ((parent != null) && parent instanceof HeapWalkerInstanceNode) {
+        while (parent instanceof HeapWalkerInstanceNode) {
             if (parent instanceof HeapWalkerFieldNode) {
                 HeapWalkerFieldNode parentF = (HeapWalkerFieldNode) parent;
 
diff --git a/profiler/profiler.j2se/test/unit/data/JavaApp/nbproject/project.properties b/profiler/profiler.j2se/test/unit/data/JavaApp/nbproject/project.properties
index 3c911fe..31db2e3 100644
--- a/profiler/profiler.j2se/test/unit/data/JavaApp/nbproject/project.properties
+++ b/profiler/profiler.j2se/test/unit/data/JavaApp/nbproject/project.properties
@@ -39,7 +39,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/profiler/profiler.nbimpl/nbproject/org-netbeans-modules-profiler-nbimpl.sig b/profiler/profiler.nbimpl/nbproject/org-netbeans-modules-profiler-nbimpl.sig
index 70b9bd5..7ffab74 100644
--- a/profiler/profiler.nbimpl/nbproject/org-netbeans-modules-profiler-nbimpl.sig
+++ b/profiler/profiler.nbimpl/nbproject/org-netbeans-modules-profiler-nbimpl.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.42
+#Version 1.43
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/actions/ProfilerLauncher.java b/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/actions/ProfilerLauncher.java
index 2efce78..cc1be6e 100644
--- a/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/actions/ProfilerLauncher.java
+++ b/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/actions/ProfilerLauncher.java
@@ -320,7 +320,7 @@
             NetBeansProfiler.getDefaultNB().setProfiledProject(project, fo);
 
 //            // ** display select task panel
-//            ProfilingSettings ps = ProfilingSupport.getDefault().selectTaskForProfiling(project, ss, fo, true);;
+//            ProfilingSettings ps = ProfilingSupport.getDefault().selectTaskForProfiling(project, ss, fo, true);
 //            if (ps != null) {
 //                this.ps = ps;
 //                this.ps.store(props); // TODO: check whether necessary or not!
diff --git a/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/providers/GoToJavaSourceProvider.java b/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/providers/GoToJavaSourceProvider.java
index e45b494..b3e704a 100644
--- a/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/providers/GoToJavaSourceProvider.java
+++ b/profiler/profiler.nbimpl/src/org/netbeans/modules/profiler/nbimpl/providers/GoToJavaSourceProvider.java
@@ -102,7 +102,7 @@
                         
                         if (ElementOpen.open(controller.getClasspathInfo(), parentClass)) {
                             Document doc = controller.getDocument();
-                            if (doc != null && doc instanceof StyledDocument) {
+                            if (doc instanceof StyledDocument) {
                                 if (openAtLine(controller, doc, methodName, line)) {
                                     result.set(true);
                                     return;
diff --git a/profiler/profiler.nbimpl/test/unit/data/JavaApp/nbproject/project.properties b/profiler/profiler.nbimpl/test/unit/data/JavaApp/nbproject/project.properties
index f2d4b4d..9607864 100644
--- a/profiler/profiler.nbimpl/test/unit/data/JavaApp/nbproject/project.properties
+++ b/profiler/profiler.nbimpl/test/unit/data/JavaApp/nbproject/project.properties
@@ -40,7 +40,7 @@
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
+javac.source=1.8
 javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
diff --git a/profiler/profiler.oql/nbproject/org-netbeans-modules-profiler-oql.sig b/profiler/profiler.oql/nbproject/org-netbeans-modules-profiler-oql.sig
index b8f9efe..f731176 100644
--- a/profiler/profiler.oql/nbproject/org-netbeans-modules-profiler-oql.sig
+++ b/profiler/profiler.oql/nbproject/org-netbeans-modules-profiler-oql.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.35
+#Version 2.36
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/profiler/profiler.ppoints/nbproject/org-netbeans-modules-profiler-ppoints.sig b/profiler/profiler.ppoints/nbproject/org-netbeans-modules-profiler-ppoints.sig
index a43791a..72df8b3 100644
--- a/profiler/profiler.ppoints/nbproject/org-netbeans-modules-profiler-ppoints.sig
+++ b/profiler/profiler.ppoints/nbproject/org-netbeans-modules-profiler-ppoints.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41
+#Version 1.42
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ProfilingPointWizard.java b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ProfilingPointWizard.java
index dc81769..b69cc20 100644
--- a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ProfilingPointWizard.java
+++ b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ProfilingPointWizard.java
@@ -63,7 +63,7 @@
         public HelpCtx getHelp() {
             Component customizer = getComponent();
 
-            if ((customizer == null) || !(customizer instanceof HelpCtx.Provider)) {
+            if (!(customizer instanceof HelpCtx.Provider)) {
                 return null;
             }
 
@@ -122,7 +122,7 @@
         //~ Methods --------------------------------------------------------------------------------------------------------------
 
         public HelpCtx getHelp() {
-            if ((customizer == null) || !(customizer instanceof HelpCtx.Provider)) {
+            if (!(customizer instanceof HelpCtx.Provider)) {
                 return null;
             }
 
diff --git a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/Utils.java b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/Utils.java
index 986d73e..b8a7ce8 100644
--- a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/Utils.java
+++ b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/Utils.java
@@ -197,7 +197,7 @@
             renderer.setEnabled(rendererOrig.isEnabled());
             renderer.setBorder(rendererOrig.getBorder());
 
-            if ((value != null) && value instanceof Lookup.Provider) {
+            if (value instanceof Lookup.Provider) {
                 renderer.setText(ProjectUtilities.getDisplayName((Lookup.Provider)value));
                 renderer.setIcon(ProjectUtilities.getIcon((Lookup.Provider)value));
 
diff --git a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ui/ValidityAwarePanel.java b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ui/ValidityAwarePanel.java
index 98e823b..0f022fe 100644
--- a/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ui/ValidityAwarePanel.java
+++ b/profiler/profiler.ppoints/src/org/netbeans/modules/profiler/ppoints/ui/ValidityAwarePanel.java
@@ -82,7 +82,7 @@
     public boolean getScrollableTracksViewportWidth() {
         Container parent = getParent();
 
-        if ((parent == null) || !(parent instanceof JViewport)) {
+        if (!(parent instanceof JViewport)) {
             return false;
         }
 
diff --git a/profiler/profiler.projectsupport/nbproject/org-netbeans-modules-profiler-projectsupport.sig b/profiler/profiler.projectsupport/nbproject/org-netbeans-modules-profiler-projectsupport.sig
index df0aeb6..399d1b5 100644
--- a/profiler/profiler.projectsupport/nbproject/org-netbeans-modules-profiler-projectsupport.sig
+++ b/profiler/profiler.projectsupport/nbproject/org-netbeans-modules-profiler-projectsupport.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.50
+#Version 1.51
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/profiler/profiler.snaptracer/nbproject/org-netbeans-modules-profiler-snaptracer.sig b/profiler/profiler.snaptracer/nbproject/org-netbeans-modules-profiler-snaptracer.sig
index 11d21b4..d3ef865 100644
--- a/profiler/profiler.snaptracer/nbproject/org-netbeans-modules-profiler-snaptracer.sig
+++ b/profiler/profiler.snaptracer/nbproject/org-netbeans-modules-profiler-snaptracer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.41
+#Version 1.42
 
 CLSS public abstract interface java.awt.event.ActionListener
 intf java.util.EventListener
diff --git a/profiler/profiler.snaptracer/src/org/netbeans/modules/profiler/snaptracer/impl/swing/ScrollableContainer.java b/profiler/profiler.snaptracer/src/org/netbeans/modules/profiler/snaptracer/impl/swing/ScrollableContainer.java
index e73b5a4..8d2359e 100644
--- a/profiler/profiler.snaptracer/src/org/netbeans/modules/profiler/snaptracer/impl/swing/ScrollableContainer.java
+++ b/profiler/profiler.snaptracer/src/org/netbeans/modules/profiler/snaptracer/impl/swing/ScrollableContainer.java
@@ -99,7 +99,7 @@
                 return true;
 
             Container parent = getParent();
-            if ((parent == null) || !(parent instanceof JViewport)) return false;
+            if (!(parent instanceof JViewport)) return false;
             return getMinimumSize().width < ((JViewport)parent).getWidth();
         }
 
@@ -108,7 +108,7 @@
                 return true;
 
             Container parent = getParent();
-            if ((parent == null) || !(parent instanceof JViewport)) return false;
+            if (!(parent instanceof JViewport)) return false;
             return getMinimumSize().height < ((JViewport)parent).getHeight();
         }
 
diff --git a/profiler/profiler.utilities/nbproject/org-netbeans-modules-profiler-utilities.sig b/profiler/profiler.utilities/nbproject/org-netbeans-modules-profiler-utilities.sig
index 074f012..c689dd9 100644
--- a/profiler/profiler.utilities/nbproject/org-netbeans-modules-profiler-utilities.sig
+++ b/profiler/profiler.utilities/nbproject/org-netbeans-modules-profiler-utilities.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.54
+#Version 1.55
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/profiler/profiler/nbproject/org-netbeans-modules-profiler.sig b/profiler/profiler/nbproject/org-netbeans-modules-profiler.sig
index 95c553a..ed0f6ff 100644
--- a/profiler/profiler/nbproject/org-netbeans-modules-profiler.sig
+++ b/profiler/profiler/nbproject/org-netbeans-modules-profiler.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.46
+#Version 3.47
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/webcommon/api.knockout/nbproject/org-netbeans-api-knockout.sig b/webcommon/api.knockout/nbproject/org-netbeans-api-knockout.sig
index fe0ba53..d55c9dd 100644
--- a/webcommon/api.knockout/nbproject/org-netbeans-api-knockout.sig
+++ b/webcommon/api.knockout/nbproject/org-netbeans-api-knockout.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.18
+#Version 1.19
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/api.knockout/nbproject/project.properties b/webcommon/api.knockout/nbproject/project.properties
index a93b3b9..6a8c641 100644
--- a/webcommon/api.knockout/nbproject/project.properties
+++ b/webcommon/api.knockout/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/webcommon/cordova.platforms.android/nbproject/project.properties b/webcommon/cordova.platforms.android/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/cordova.platforms.android/nbproject/project.properties
+++ b/webcommon/cordova.platforms.android/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/cordova.platforms/nbproject/org-netbeans-modules-cordova-platforms.sig b/webcommon/cordova.platforms/nbproject/org-netbeans-modules-cordova-platforms.sig
index 6a4ddef..887f540 100644
--- a/webcommon/cordova.platforms/nbproject/org-netbeans-modules-cordova-platforms.sig
+++ b/webcommon/cordova.platforms/nbproject/org-netbeans-modules-cordova-platforms.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.53
+#Version 1.54
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/cordova.platforms/nbproject/project.properties b/webcommon/cordova.platforms/nbproject/project.properties
index 75a1a5e..0f73a11 100644
--- a/webcommon/cordova.platforms/nbproject/project.properties
+++ b/webcommon/cordova.platforms/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/cordova/src/org/netbeans/modules/cordova/project/CordovaURLMapper.java b/webcommon/cordova/src/org/netbeans/modules/cordova/project/CordovaURLMapper.java
index 2bdc2e1..20645fc 100644
--- a/webcommon/cordova/src/org/netbeans/modules/cordova/project/CordovaURLMapper.java
+++ b/webcommon/cordova/src/org/netbeans/modules/cordova/project/CordovaURLMapper.java
@@ -30,7 +30,7 @@
  */
 public class CordovaURLMapper implements BrowserURLMapperImplementation {
 
-    private BrowserURLMapperImplementation.BrowserURLMapper browserURLMapper;;
+    private BrowserURLMapperImplementation.BrowserURLMapper browserURLMapper;
 
     public CordovaURLMapper() {
         browserURLMapper = new BrowserURLMapperImplementation.BrowserURLMapper(null, null);
diff --git a/webcommon/cordova/src/org/netbeans/modules/cordova/project/MobileConfigurationsProvider.java b/webcommon/cordova/src/org/netbeans/modules/cordova/project/MobileConfigurationsProvider.java
index e285d1e..be50a08 100644
--- a/webcommon/cordova/src/org/netbeans/modules/cordova/project/MobileConfigurationsProvider.java
+++ b/webcommon/cordova/src/org/netbeans/modules/cordova/project/MobileConfigurationsProvider.java
@@ -186,7 +186,7 @@
             calculateConfigs();
         }
         Preferences c = ProjectUtils.getPreferences(p, MobileConfigurationsProvider.class, false);
-        String config = c.get(PROP_CONFIG, null);;
+        String config = c.get(PROP_CONFIG, null);
         if (config != null && configs.containsKey(config)) {
             return configs.get(config);
         }
diff --git a/webcommon/extbrowser.chrome/nbproject/project.properties b/webcommon/extbrowser.chrome/nbproject/project.properties
index d330512..3c53185 100644
--- a/webcommon/extbrowser.chrome/nbproject/project.properties
+++ b/webcommon/extbrowser.chrome/nbproject/project.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 extra.module.files=modules/lib/netbeans-chrome-connector.crx
diff --git a/webcommon/html.angular/nbproject/project.properties b/webcommon/html.angular/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/html.angular/nbproject/project.properties
+++ b/webcommon/html.angular/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/html.angular/src/org/netbeans/modules/html/angular/model/AngularModuleInterceptor.java b/webcommon/html.angular/src/org/netbeans/modules/html/angular/model/AngularModuleInterceptor.java
index 02211b0..1d092ff 100644
--- a/webcommon/html.angular/src/org/netbeans/modules/html/angular/model/AngularModuleInterceptor.java
+++ b/webcommon/html.angular/src/org/netbeans/modules/html/angular/model/AngularModuleInterceptor.java
@@ -116,14 +116,14 @@
                     functionName = fArgumentValue.isEmpty() ? null : fArgumentValue.get(0);
                     if (functionName != null) {
                         JsObject funcObj = globalObject.getProperty(functionName);
-                        JsFunction func = funcObj != null && (funcObj instanceof JsFunction) ? (JsFunction) funcObj : null;
+                        JsFunction func = funcObj instanceof JsFunction ? (JsFunction) funcObj : null;
                         if (func == null) {
                             // try to find it enclosed in IIFE
                             JsObject argumentObject = ModelUtils.findJsObject(globalObject, fArgument.getOffset());
-                            if (argumentObject != null && argumentObject instanceof JsFunction) {
+                            if (argumentObject instanceof JsFunction) {
                                 JsFunction iife = (JsFunction) argumentObject;
                                 funcObj = iife.getProperty(functionName);
-                                func = funcObj != null && (funcObj instanceof JsFunction) ? (JsFunction) iife.getProperty(functionName) : null;
+                                func = funcObj instanceof JsFunction ? (JsFunction) iife.getProperty(functionName) : null;
                             }
                         }
                         if (func != null && !func.isAnonymous()) {
@@ -170,7 +170,7 @@
                     controllerDecl = functProp;
                 }
             }
-            if (controllerDecl != null && controllerDecl instanceof JsFunction && controllerDecl.isDeclared()) {
+            if (controllerDecl instanceof JsFunction && controllerDecl.isDeclared()) {
                 fqnOfController = controllerDecl.getFullyQualifiedName();
                 FileObject fo = globalObject.getFileObject();
                 if (fo != null) {
@@ -183,7 +183,7 @@
         } else if (controllerName == null && controllersMap != null) {
             // we need to find an anonymous object, which contains the controller map
             JsObject controllerDecl = ModelUtils.findJsObject(globalObject, functionOffset);
-            if (controllerDecl != null && controllerDecl instanceof JsObject && controllerDecl.isDeclared()) {
+            if (controllerDecl instanceof JsObject && controllerDecl.isDeclared()) {
                 FileObject fo = globalObject.getFileObject();
                 for (Map.Entry<String, Integer> controller : controllersMap.entrySet()) {
                     fqnOfController = controllerDecl.getFullyQualifiedName() + "." + controller.getKey(); //NOI18N
@@ -207,7 +207,7 @@
      */
     private void indexComponents(Snapshot snapshot, FileObject fo, JsObject controllerDecl) {
         JsObject routerConfig = controllerDecl.getProperty(ROUTECONFIG_PROP);
-        if (routerConfig != null && routerConfig instanceof JsArray) {
+        if (routerConfig instanceof JsArray) {
             Collection<? extends TypeUsage> assignments = routerConfig.getAssignments();
             if (assignments.size() == 1 && assignments.iterator().next().getType().equals(TypeUsage.ARRAY)) {
                 int routerConfigOffset = routerConfig.getOffset();
diff --git a/webcommon/html.angular/test/qa-functional/src/org/netbeans/modules/html/angular/GeneralAngular.java b/webcommon/html.angular/test/qa-functional/src/org/netbeans/modules/html/angular/GeneralAngular.java
index 6c5d76d..58a0dee 100644
--- a/webcommon/html.angular/test/qa-functional/src/org/netbeans/modules/html/angular/GeneralAngular.java
+++ b/webcommon/html.angular/test/qa-functional/src/org/netbeans/modules/html/angular/GeneralAngular.java
@@ -160,7 +160,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/webcommon/html.knockout/nbproject/org-netbeans-modules-html-knockout.sig b/webcommon/html.knockout/nbproject/org-netbeans-modules-html-knockout.sig
index ee9cfba..139a782 100644
--- a/webcommon/html.knockout/nbproject/org-netbeans-modules-html-knockout.sig
+++ b/webcommon/html.knockout/nbproject/org-netbeans-modules-html-knockout.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/html.knockout/nbproject/project.properties b/webcommon/html.knockout/nbproject/project.properties
index ef5aca7..12ff4ce 100644
--- a/webcommon/html.knockout/nbproject/project.properties
+++ b/webcommon/html.knockout/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/html.knockout/test/qa-functional/src/org/netbeans/modules/html/knockout/GeneralKnockout.java b/webcommon/html.knockout/test/qa-functional/src/org/netbeans/modules/html/knockout/GeneralKnockout.java
index 4b86351..4a5843e 100644
--- a/webcommon/html.knockout/test/qa-functional/src/org/netbeans/modules/html/knockout/GeneralKnockout.java
+++ b/webcommon/html.knockout/test/qa-functional/src/org/netbeans/modules/html/knockout/GeneralKnockout.java
@@ -169,7 +169,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/webcommon/javascript.nodejs/nbproject/org-netbeans-modules-javascript-nodejs.sig b/webcommon/javascript.nodejs/nbproject/org-netbeans-modules-javascript-nodejs.sig
index 05a4e50..9eea313 100644
--- a/webcommon/javascript.nodejs/nbproject/org-netbeans-modules-javascript-nodejs.sig
+++ b/webcommon/javascript.nodejs/nbproject/org-netbeans-modules-javascript-nodejs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.46
+#Version 0.47
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/javascript.v8debug/nbproject/org-netbeans-modules-javascript-v8debug.sig b/webcommon/javascript.v8debug/nbproject/org-netbeans-modules-javascript-v8debug.sig
index 58b3e75..105922e 100644
--- a/webcommon/javascript.v8debug/nbproject/org-netbeans-modules-javascript-v8debug.sig
+++ b/webcommon/javascript.v8debug/nbproject/org-netbeans-modules-javascript-v8debug.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27.0
+#Version 1.28.0
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/javascript2.doc/nbproject/org-netbeans-modules-javascript2-doc.sig b/webcommon/javascript2.doc/nbproject/org-netbeans-modules-javascript2-doc.sig
index 012ab7d..70bc024 100644
--- a/webcommon/javascript2.doc/nbproject/org-netbeans-modules-javascript2-doc.sig
+++ b/webcommon/javascript2.doc/nbproject/org-netbeans-modules-javascript2-doc.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/javascript2.doc/nbproject/project.properties b/webcommon/javascript2.doc/nbproject/project.properties
index 75a1a5e..0f73a11 100644
--- a/webcommon/javascript2.doc/nbproject/project.properties
+++ b/webcommon/javascript2.doc/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/javascript2.editor/nbproject/org-netbeans-modules-javascript2-editor.sig b/webcommon/javascript2.editor/nbproject/org-netbeans-modules-javascript2-editor.sig
index df74cad..b282486 100644
--- a/webcommon/javascript2.editor/nbproject/org-netbeans-modules-javascript2-editor.sig
+++ b/webcommon/javascript2.editor/nbproject/org-netbeans-modules-javascript2-editor.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.92
+#Version 0.93
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/javascript2.editor/nbproject/project.xml b/webcommon/javascript2.editor/nbproject/project.xml
index 6b9a336..49d549e 100644
--- a/webcommon/javascript2.editor/nbproject/project.xml
+++ b/webcommon/javascript2.editor/nbproject/project.xml
@@ -57,7 +57,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.1</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/JsCompletionItem.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/JsCompletionItem.java
index 414e99b..1022cab 100644
--- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/JsCompletionItem.java
+++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/JsCompletionItem.java
@@ -198,7 +198,7 @@
     @Override
     public int getSortPrioOverride() {
         int order = 100;
-        if (element != null && element instanceof JsElement) {
+        if (element instanceof JsElement) {
             if (((JsElement)element).isPlatform()) {
                 if (ModelUtils.PROTOTYPE.equals(element.getName())) { //NOI18N
                     order = 1;
diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/doc/JsDocumentationCompleter.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/doc/JsDocumentationCompleter.java
index e05782b..75be88e 100644
--- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/doc/JsDocumentationCompleter.java
+++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/doc/JsDocumentationCompleter.java
@@ -92,7 +92,7 @@
                     @Override
                     public void run(ResultIterator resultIterator) throws Exception {
                         ParserResult parserResult = (ParserResult) resultIterator.getParserResult(offset);
-                        if (parserResult != null && parserResult instanceof JsParserResult) {
+                        if (parserResult instanceof JsParserResult) {
                             final JsParserResult jsParserResult = (JsParserResult) parserResult;
                             if (jsParserResult.getRoot() == null) {
                                 // broken source
diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java
index 6726152..4eef888 100644
--- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java
+++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java
@@ -1482,7 +1482,7 @@
             }
         } else if (node instanceof VarNode) {
             VarNode var = (VarNode) node;
-            if (var.getInit() != null && (var.getInit() instanceof ClassNode)) {
+            if (var.getInit() instanceof ClassNode) {
                 return getFinish(var.getInit());
             }
             Token token = tokenUtils.getNextNonEmptyToken(getFinishFixed(node) - 1);
diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/index/JsIndexer.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/index/JsIndexer.java
index b428a6f..df095e6 100644
--- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/index/JsIndexer.java
+++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/index/JsIndexer.java
@@ -260,7 +260,7 @@
             if (parent != null && parent.getJSKind() == JsElement.Kind.FILE) {
                 return false;
             }
-            if (parent != null && parent instanceof JsFunction) {
+            if (parent instanceof JsFunction) {
                 Collection<? extends TypeUsage> returnTypes = ((JsFunction) parent).getReturnTypes();
                 String fqn = object.getFullyQualifiedName();
                 for (TypeUsage returnType : returnTypes) {
diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/parser/JsErrorManager.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/parser/JsErrorManager.java
index e596742..df3b0ea 100644
--- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/parser/JsErrorManager.java
+++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/parser/JsErrorManager.java
@@ -64,7 +64,7 @@
 
     private static final int MAX_MESSAGE_LENGTH = 100;
 
-    private static final boolean SHOW_BADGES_EMBEDDED = Boolean.getBoolean(JsErrorManager.class.getName() + ".showBadgesEmbedded");;
+    private static final boolean SHOW_BADGES_EMBEDDED = Boolean.getBoolean(JsErrorManager.class.getName() + ".showBadgesEmbedded");
 
     private static final Comparator<SimpleError> POSITION_COMPARATOR = (SimpleError o1, SimpleError o2) -> {
         if (o1.getStartPosition() < o2.getStartPosition()) {
diff --git a/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/parser/JsonParserTest.java b/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/parser/JsonParserTest.java
index f5f0c2a..bb10368 100644
--- a/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/parser/JsonParserTest.java
+++ b/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/parser/JsonParserTest.java
@@ -18,9 +18,11 @@
  */
 package org.netbeans.modules.javascript2.editor.parser;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.swing.text.Document;
 import org.netbeans.modules.javascript2.editor.JsonTestBase;
 import org.netbeans.modules.javascript2.lexer.api.JsTokenId;
@@ -86,7 +88,7 @@
                 //Todo: Consider to join antlr errors in String token
                 Arrays.asList(
                         "token recognition error at: '\"test\\x'",
-                        "no viable alternative at input '}'"));
+                        "mismatched input '}' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"));
     }
 
     public void testStringLiteral3() throws Exception {
@@ -96,7 +98,7 @@
                         "token recognition error at: '\"test\\\\n'",
                         "token recognition error at: 'w'",
                         "token recognition error at: '\" }'",
-                        "no viable alternative at input '<EOF>'"));
+                        "mismatched input '<EOF>' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"));
     }
 
     public void testStringLiteral4() throws Exception {
@@ -109,7 +111,7 @@
                 //Todo: Consider to join antlr errors in String token
                 Arrays.asList(
                         "token recognition error at: '\"test\\u000g'",
-                        "no viable alternative at input '}'"
+                        "mismatched input '}' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"
                 ));
     }
 
@@ -123,7 +125,7 @@
                 //Todo: Consider to join antlr errors in String token
                 Arrays.asList(
                     "token recognition error at: '\"t\\''",
-                    "no viable alternative at input '}'"
+                    "mismatched input '}' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"
                 ));
     }
 
@@ -140,11 +142,11 @@
     }
 
     public void testTrailingComma4() throws Exception {
-        parse("{ \"a\" : [1, 2,] }", false, Collections.singletonList("no viable alternative at input ']'"));
+        parse("{ \"a\" : [1, 2,] }", false, Collections.singletonList("mismatched input ']' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"));
     }
 
     public void testTrailingComma5() throws Exception {
-        parse("{ \"a\" : [{\"w\":1}, {\"e\":2},] }", false, Collections.singletonList("no viable alternative at input ']'"));
+        parse("{ \"a\" : [{\"w\":1}, {\"e\":2},] }", false, Collections.singletonList("mismatched input ']' expecting {'{', '[', 'true', 'false', 'null', NUMBER, STRING}"));
     }
 
     public void testEmpty() throws Exception {
diff --git a/webcommon/javascript2.extdoc/nbproject/project.properties b/webcommon/javascript2.extdoc/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/javascript2.extdoc/nbproject/project.properties
+++ b/webcommon/javascript2.extdoc/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/javascript2.extjs/src/org/netbeans/modules/javascript2/extjs/ExtJsCodeCompletion.java b/webcommon/javascript2.extjs/src/org/netbeans/modules/javascript2/extjs/ExtJsCodeCompletion.java
index 0a5ce00..08eb5d4 100644
--- a/webcommon/javascript2.extjs/src/org/netbeans/modules/javascript2/extjs/ExtJsCodeCompletion.java
+++ b/webcommon/javascript2.extjs/src/org/netbeans/modules/javascript2/extjs/ExtJsCodeCompletion.java
@@ -134,7 +134,7 @@
 
     @Override
     public String getHelpDocumentation(ParserResult info, ElementHandle element) {
-        if (element != null && element instanceof ExtJsElement) {
+        if (element instanceof ExtJsElement) {
             return ((ExtJsElement)element).getDocumentation();
         }
         return null;
diff --git a/webcommon/javascript2.jade/nbproject/project.properties b/webcommon/javascript2.jade/nbproject/project.properties
index 628b90b..e440801 100644
--- a/webcommon/javascript2.jade/nbproject/project.properties
+++ b/webcommon/javascript2.jade/nbproject/project.properties
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 #jnlp.verify.excludes=docs/jquery-api.xml,docs/jquery-propertyNames.xml
diff --git a/webcommon/javascript2.jquery/src/org/netbeans/modules/javascript2/jquery/editor/JQueryCodeCompletion.java b/webcommon/javascript2.jquery/src/org/netbeans/modules/javascript2/jquery/editor/JQueryCodeCompletion.java
index d8a56b0..ef232bd 100644
--- a/webcommon/javascript2.jquery/src/org/netbeans/modules/javascript2/jquery/editor/JQueryCodeCompletion.java
+++ b/webcommon/javascript2.jquery/src/org/netbeans/modules/javascript2/jquery/editor/JQueryCodeCompletion.java
@@ -165,7 +165,7 @@
 
     @Override
     public String getHelpDocumentation(ParserResult info, ElementHandle element) {
-        if (element != null && element instanceof DocSimpleElement) {
+        if (element instanceof DocSimpleElement) {
             return ((DocSimpleElement)element).getDocumentation();
         }
         if (element != null && element.getKind() == ElementKind.CALL) {
diff --git a/webcommon/javascript2.jsdoc/test/unit/src/org/netbeans/modules/javascript2/jsdoc/JsDocCodeCompletionTest.java b/webcommon/javascript2.jsdoc/test/unit/src/org/netbeans/modules/javascript2/jsdoc/JsDocCodeCompletionTest.java
index 747b02d..9f10c92 100644
--- a/webcommon/javascript2.jsdoc/test/unit/src/org/netbeans/modules/javascript2/jsdoc/JsDocCodeCompletionTest.java
+++ b/webcommon/javascript2.jsdoc/test/unit/src/org/netbeans/modules/javascript2/jsdoc/JsDocCodeCompletionTest.java
@@ -22,7 +22,6 @@
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
 import org.netbeans.modules.javascript2.editor.*;
-import org.openide.filesystems.FileUtil;
 
 /**
  *
@@ -49,7 +48,7 @@
         // this breaks our assumption, that we can prepare the JS on-the-fly in the
         // build directory. This redirects the resolution of the reference files
         // to the build directory (they are also copied on test begin)
-        return FileUtil.toFile(getTestFile(relFilePath));
+        return new File(getDataDir(), relFilePath);
     }
 
     public void testAllCompletion() throws Exception {
diff --git a/webcommon/javascript2.json/build.xml b/webcommon/javascript2.json/build.xml
index 9d96d5f..86ebe6c 100644
--- a/webcommon/javascript2.json/build.xml
+++ b/webcommon/javascript2.json/build.xml
@@ -22,4 +22,23 @@
 <project basedir="." default="build" name="webcommon/javascript2.json">
     <description>Builds, tests, and runs the project org.netbeans.modules.javascript2.json</description>
     <import file="../../nbbuild/templates/projectized.xml"/>
+
+    <target name="generate-antlr-parser" description="Regenerate the JSON parser" depends="init">
+        <property name="antlr.outdir" location="${src.dir}/org/netbeans/modules/javascript2/json/parser"/>
+        <path id="antlr4.tool">
+            <fileset dir="../../ide/libs.antlr4.runtime/external" includes="*.jar"/>
+            <fileset dir="../../ide/libs.antlr3.runtime/external" includes="antlr-runtime-*.jar"/>
+        </path>
+
+        <java classname="org.antlr.v4.Tool" classpathref="antlr4.tool" fork="true" dir="tools">
+            <arg value="-o"/>
+            <arg value="${antlr.outdir}"/>
+            <arg value="-visitor"/>
+            <arg value="JsonLexer.g4"/>
+            <arg value="JsonParser.g4"/>
+        </java>
+
+        <delete dir="${antlr.outdir}" includes="*.tokens"/>
+        <delete dir="${antlr.outdir}" includes="*.interp"/>
+    </target>
 </project>
diff --git a/webcommon/javascript2.json/nbproject/org-netbeans-modules-javascript2-json.sig b/webcommon/javascript2.json/nbproject/org-netbeans-modules-javascript2-json.sig
index f150cb9..e0bd23f 100644
--- a/webcommon/javascript2.json/nbproject/org-netbeans-modules-javascript2-json.sig
+++ b/webcommon/javascript2.json/nbproject/org-netbeans-modules-javascript2-json.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.20
+#Version 1.22
 
 CLSS public java.lang.Object
 cons public init()
@@ -133,6 +133,7 @@
 meth public org.antlr.v4.runtime.tree.pattern.ParseTreePattern compileParseTreePattern(java.lang.String,int,org.antlr.v4.runtime.Lexer)
 meth public void addParseListener(org.antlr.v4.runtime.tree.ParseTreeListener)
 meth public void dumpDFA()
+meth public void dumpDFA(java.io.PrintStream)
 meth public void enterOuterAlt(org.antlr.v4.runtime.ParserRuleContext,int)
 meth public void enterRecursionRule(org.antlr.v4.runtime.ParserRuleContext,int)
  anno 0 java.lang.Deprecated()
@@ -159,6 +160,7 @@
 CLSS public org.antlr.v4.runtime.ParserRuleContext
 cons public init()
 cons public init(org.antlr.v4.runtime.ParserRuleContext,int)
+fld public final static org.antlr.v4.runtime.ParserRuleContext EMPTY
 fld public java.util.List<org.antlr.v4.runtime.tree.ParseTree> children
 fld public org.antlr.v4.runtime.RecognitionException exception
 fld public org.antlr.v4.runtime.Token start
@@ -229,7 +231,6 @@
 CLSS public org.antlr.v4.runtime.RuleContext
 cons public init()
 cons public init(org.antlr.v4.runtime.RuleContext,int)
-fld public final static org.antlr.v4.runtime.ParserRuleContext EMPTY
 fld public int invokingState
 fld public org.antlr.v4.runtime.RuleContext parent
 intf org.antlr.v4.runtime.tree.RuleNode
@@ -334,35 +335,11 @@
 
 CLSS public org.netbeans.modules.javascript2.json.parser.JsonBaseListener
 cons public init()
-intf org.netbeans.modules.javascript2.json.parser.JsonListener
-meth public void enterArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public void enterEveryRule(org.antlr.v4.runtime.ParserRuleContext)
-meth public void enterJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public void enterKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public void enterObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public void enterPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public void enterValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
-meth public void exitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public void exitEveryRule(org.antlr.v4.runtime.ParserRuleContext)
-meth public void exitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public void exitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public void exitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public void exitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public void exitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
-meth public void visitErrorNode(org.antlr.v4.runtime.tree.ErrorNode)
-meth public void visitTerminal(org.antlr.v4.runtime.tree.TerminalNode)
-supr java.lang.Object
+supr org.netbeans.modules.javascript2.json.parser.JsonParserBaseListener
 
 CLSS public org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor<%0 extends java.lang.Object>
 cons public init()
-intf org.netbeans.modules.javascript2.json.parser.JsonVisitor<{org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0}>
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public {org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0} visitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
-supr org.antlr.v4.runtime.tree.AbstractParseTreeVisitor<{org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0}>
+supr org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor<{org.netbeans.modules.javascript2.json.parser.JsonBaseVisitor%0}>
 
 CLSS public org.netbeans.modules.javascript2.json.parser.JsonLexer
 cons public init(org.antlr.v4.runtime.CharStream)
@@ -373,10 +350,10 @@
 fld public final static int COLON = 1
 fld public final static int COMMA = 2
 fld public final static int COMMENT = 16
-fld public final static int COMMENTS = 2
+fld public final static int COMMENTS = 3
 fld public final static int DOT = 3
 fld public final static int ERROR = 19
-fld public final static int ERRORS = 3
+fld public final static int ERRORS = 4
 fld public final static int ERROR_COMMENT = 18
 fld public final static int FALSE = 11
 fld public final static int LBRACE = 6
@@ -390,19 +367,21 @@
 fld public final static int RBRACKET = 9
 fld public final static int STRING = 14
 fld public final static int TRUE = 10
-fld public final static int WHITESPACES = 1
+fld public final static int WHITESPACES = 2
 fld public final static int WS = 17
-fld public final static java.lang.String _serializedATN = "\u0003\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\u0002\u0015\u00e9\u0008\u0001\u0004\u0002\u0009\u0002\u0004\u0003\u0009\u0003\u0004\u0004\u0009\u0004\u0004\u0005\u0009\u0005\u0004\u0006\u0009\u0006\u0004\u0007\u0009\u0007\u0004\u0008\u0009\u0008\u0004\u0009\u0009\u0009\u0004\n\u0009\n\u0004\u000b\u0009\u000b\u0004\u000c\u0009\u000c\u0004\r\u0009\r\u0004\u000e\u0009\u000e\u0004\u000f\u0009\u000f\u0004\u0010\u0009\u0010\u0004\u0011\u0009\u0011\u0004\u0012\u0009\u0012\u0004\u0013\u0009\u0013\u0004\u0014\u0009\u0014\u0004\u0015\u0009\u0015\u0004\u0016\u0009\u0016\u0004\u0017\u0009\u0017\u0004\u0018\u0009\u0018\u0004\u0019\u0009\u0019\u0004\u001a\u0009\u001a\u0004\u001b\u0009\u001b\u0004\u001c\u0009\u001c\u0004\u001d\u0009\u001d\u0004\u001e\u0009\u001e\u0004\u001f\u0009\u001f\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003\u0008\u0003\u0008\u0003\u0009\u0003\u0009\u0003\n\u0003\n\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000c\u0003\u000c\u0003\u000c\u0003\u000c\u0003\u000c\u0003\u000c\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0005\u000ed\n\u000e\u0003\u000e\u0005\u000eg\n\u000e\u0003\u000f\u0005\u000fj\n\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0007\u000fo\n\u000f\u000c\u000f\u000e\u000fr\u000b\u000f\u0005\u000ft\n\u000f\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012\u0005\u0012|\n\u0012\u0003\u0013\u0003\u0013\u0006\u0013\u0080\n\u0013\r\u0013\u000e\u0013\u0081\u0003\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u0087\n\u0014\u0003\u0014\u0006\u0014\u008a\n\u0014\r\u0014\u000e\u0014\u008b\u0003\u0015\u0003\u0015\u0007\u0015\u0090\n\u0015\u000c\u0015\u000e\u0015\u0093\u000b\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0005\u0017\u009b\n\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0005\u0018\u00a0\n\u0018\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0007\u001b\u00ae\n\u001b\u000c\u001b\u000e\u001b\u00b1\u000b\u001b\u0003\u001b\u0005\u001b\u00b4\n\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0007\u001c\u00bf\n\u001c\u000c\u001c\u000e\u001c\u00c2\u000b\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001d\u0006\u001d\u00cc\n\u001d\r\u001d\u000e\u001d\u00cd\u0003\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0006\u001e\u00d7\n\u001e\r\u001e\u000e\u001e\u00d8\u0003\u001e\u0007\u001e\u00dc\n\u001e\u000c\u001e\u000e\u001e\u00df\u000b\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0004\u00af\u00c0\u0002 \u0003\u0003\u0005\u0004\u0007\u0005\u0009\u0006\u000b\u0007\r\u0008\u000f\u0009\u0011\n\u0013\u000b\u0015\u000c\u0017\r\u0019\u000e\u001b\u000f\u001d\u0002\u001f\u0002!\u0002#\u0002%\u0002'\u0002)\u0010+\u0002-\u0002/\u00021\u00023\u00025\u00117\u00129\u0013;\u0014=\u0015\u0003\u0002\n\u0003\u00023;\u0004\u0002GGgg\u0005\u0002\u0002!$$^^\n\u0002$$11^^ddhhppttvv\u0005\u00022;CHch\u0005\u0002\u000b\u000c\u000f\u000f\u0022\u0022\u0003\u0002,,\u0003\u000211\u00f1\u0002\u0003\u0003\u0002\u0002\u0002\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003\u0002\u0002\u0002\u0002\u0009\u0003\u0002\u0002\u0002\u0002\u000b\u0003\u0002\u0002\u0002\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003\u0002\u0002\u0002\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003\u0002\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003\u0002\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003\u0002\u0002\u0002\u0002)\u0003\u0002\u0002\u0002\u00025\u0003\u0002\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002\u0002\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002\u0002\u0003?\u0003\u0002\u0002\u0002\u0005A\u0003\u0002\u0002\u0002\u0007C\u0003\u0002\u0002\u0002\u0009E\u0003\u0002\u0002\u0002\u000bG\u0003\u0002\u0002\u0002\rI\u0003\u0002\u0002\u0002\u000fK\u0003\u0002\u0002\u0002\u0011M\u0003\u0002\u0002\u0002\u0013O\u0003\u0002\u0002\u0002\u0015Q\u0003\u0002\u0002\u0002\u0017V\u0003\u0002\u0002\u0002\u0019\u005c\u0003\u0002\u0002\u0002\u001ba\u0003\u0002\u0002\u0002\u001di\u0003\u0002\u0002\u0002\u001fu\u0003\u0002\u0002\u0002!w\u0003\u0002\u0002\u0002#{\u0003\u0002\u0002\u0002%}\u0003\u0002\u0002\u0002'\u0083\u0003\u0002\u0002\u0002)\u008d\u0003\u0002\u0002\u0002+\u0096\u0003\u0002\u0002\u0002-\u009a\u0003\u0002\u0002\u0002/\u009c\u0003\u0002\u0002\u00021\u00a1\u0003\u0002\u0002\u00023\u00a7\u0003\u0002\u0002\u00025\u00a9\u0003\u0002\u0002\u00027\u00ba\u0003\u0002\u0002\u00029\u00cb\u0003\u0002\u0002\u0002;\u00d1\u0003\u0002\u0002\u0002=\u00e4\u0003\u0002\u0002\u0002?@\u0007<\u0002\u0002@\u0004\u0003\u0002\u0002\u0002AB\u0007.\u0002\u0002B\u0006\u0003\u0002\u0002\u0002CD\u00070\u0002\u0002D\u0008\u0003\u0002\u0002\u0002EF\u0007-\u0002\u0002F\n\u0003\u0002\u0002\u0002GH\u0007/\u0002\u0002H\u000c\u0003\u0002\u0002\u0002IJ\u0007}\u0002\u0002J\u000e\u0003\u0002\u0002\u0002KL\u0007\u007f\u0002\u0002L\u0010\u0003\u0002\u0002\u0002MN\u0007]\u0002\u0002N\u0012\u0003\u0002\u0002\u0002OP\u0007_\u0002\u0002P\u0014\u0003\u0002\u0002\u0002QR\u0007v\u0002\u0002RS\u0007t\u0002\u0002ST\u0007w\u0002\u0002TU\u0007g\u0002\u0002U\u0016\u0003\u0002\u0002\u0002VW\u0007h\u0002\u0002WX\u0007c\u0002\u0002XY\u0007n\u0002\u0002YZ\u0007u\u0002\u0002Z[\u0007g\u0002\u0002[\u0018\u0003\u0002\u0002\u0002\u005c]\u0007p\u0002\u0002]^\u0007w\u0002\u0002^_\u0007n\u0002\u0002_`\u0007n\u0002\u0002`\u001a\u0003\u0002\u0002\u0002ac\u0005\u001d\u000f\u0002bd\u0005%\u0013\u0002cb\u0003\u0002\u0002\u0002cd\u0003\u0002\u0002\u0002df\u0003\u0002\u0002\u0002eg\u0005'\u0014\u0002fe\u0003\u0002\u0002\u0002fg\u0003\u0002\u0002\u0002g\u001c\u0003\u0002\u0002\u0002hj\u0005\u000b\u0006\u0002ih\u0003\u0002\u0002\u0002ij\u0003\u0002\u0002\u0002js\u0003\u0002\u0002\u0002kt\u0005\u001f\u0010\u0002lp\u0005!\u0011\u0002mo\u0005#\u0012\u0002nm\u0003\u0002\u0002\u0002or\u0003\u0002\u0002\u0002pn\u0003\u0002\u0002\u0002pq\u0003\u0002\u0002\u0002qt\u0003\u0002\u0002\u0002rp\u0003\u0002\u0002\u0002sk\u0003\u0002\u0002\u0002sl\u0003\u0002\u0002\u0002t\u001e\u0003\u0002\u0002\u0002uv\u00072\u0002\u0002v \u0003\u0002\u0002\u0002wx\u0009\u0002\u0002\u0002x\u0022\u0003\u0002\u0002\u0002y|\u0005\u001f\u0010\u0002z|\u0005!\u0011\u0002{y\u0003\u0002\u0002\u0002{z\u0003\u0002\u0002\u0002|$\u0003\u0002\u0002\u0002}\u007f\u0005\u0007\u0004\u0002~\u0080\u0005#\u0012\u0002\u007f~\u0003\u0002\u0002\u0002\u0080\u0081\u0003\u0002\u0002\u0002\u0081\u007f\u0003\u0002\u0002\u0002\u0081\u0082\u0003\u0002\u0002\u0002\u0082&\u0003\u0002\u0002\u0002\u0083\u0086\u0009\u0003\u0002\u0002\u0084\u0087\u0005\u0009\u0005\u0002\u0085\u0087\u0005\u000b\u0006\u0002\u0086\u0084\u0003\u0002\u0002\u0002\u0086\u0085\u0003\u0002\u0002\u0002\u0086\u0087\u0003\u0002\u0002\u0002\u0087\u0089\u0003\u0002\u0002\u0002\u0088\u008a\u0005#\u0012\u0002\u0089\u0088\u0003\u0002\u0002\u0002\u008a\u008b\u0003\u0002\u0002\u0002\u008b\u0089\u0003\u0002\u0002\u0002\u008b\u008c\u0003\u0002\u0002\u0002\u008c(\u0003\u0002\u0002\u0002\u008d\u0091\u0005+\u0016\u0002\u008e\u0090\u0005-\u0017\u0002\u008f\u008e\u0003\u0002\u0002\u0002\u0090\u0093\u0003\u0002\u0002\u0002\u0091\u008f\u0003\u0002\u0002\u0002\u0091\u0092\u0003\u0002\u0002\u0002\u0092\u0094\u0003\u0002\u0002\u0002\u0093\u0091\u0003\u0002\u0002\u0002\u0094\u0095\u0005+\u0016\u0002\u0095*\u0003\u0002\u0002\u0002\u0096\u0097\u0007$\u0002\u0002\u0097,\u0003\u0002\u0002\u0002\u0098\u009b\n\u0004\u0002\u0002\u0099\u009b\u0005/\u0018\u0002\u009a\u0098\u0003\u0002\u0002\u0002\u009a\u0099\u0003\u0002\u0002\u0002\u009b.\u0003\u0002\u0002\u0002\u009c\u009f\u0007^\u0002\u0002\u009d\u00a0\u0009\u0005\u0002\u0002\u009e\u00a0\u00051\u0019\u0002\u009f\u009d\u0003\u0002\u0002\u0002\u009f\u009e\u0003\u0002\u0002\u0002\u00a00\u0003\u0002\u0002\u0002\u00a1\u00a2\u0007w\u0002\u0002\u00a2\u00a3\u00053\u001a\u0002\u00a3\u00a4\u00053\u001a\u0002\u00a4\u00a5\u00053\u001a\u0002\u00a5\u00a6\u00053\u001a\u0002\u00a62\u0003\u0002\u0002\u0002\u00a7\u00a8\u0009\u0006\u0002\u0002\u00a84\u0003\u0002\u0002\u0002\u00a9\u00aa\u00071\u0002\u0002\u00aa\u00ab\u00071\u0002\u0002\u00ab\u00af\u0003\u0002\u0002\u0002\u00ac\u00ae\u000b\u0002\u0002\u0002\u00ad\u00ac\u0003\u0002\u0002\u0002\u00ae\u00b1\u0003\u0002\u0002\u0002\u00af\u00b0\u0003\u0002\u0002\u0002\u00af\u00ad\u0003\u0002\u0002\u0002\u00b0\u00b3\u0003\u0002\u0002\u0002\u00b1\u00af\u0003\u0002\u0002\u0002\u00b2\u00b4\u0007\u000f\u0002\u0002\u00b3\u00b2\u0003\u0002\u0002\u0002\u00b3\u00b4\u0003\u0002\u0002\u0002\u00b4\u00b5\u0003\u0002\u0002\u0002\u00b5\u00b6\u0007\u000c\u0002\u0002\u00b6\u00b7\u0006\u001b\u0002\u0002\u00b7\u00b8\u0003\u0002\u0002\u0002\u00b8\u00b9\u0008\u001b\u0002\u0002\u00b96\u0003\u0002\u0002\u0002\u00ba\u00bb\u00071\u0002\u0002\u00bb\u00bc\u0007,\u0002\u0002\u00bc\u00c0\u0003\u0002\u0002\u0002\u00bd\u00bf\u000b\u0002\u0002\u0002\u00be\u00bd\u0003\u0002\u0002\u0002\u00bf\u00c2\u0003\u0002\u0002\u0002\u00c0\u00c1\u0003\u0002\u0002\u0002\u00c0\u00be\u0003\u0002\u0002\u0002\u00c1\u00c3\u0003\u0002\u0002\u0002\u00c2\u00c0\u0003\u0002\u0002\u0002\u00c3\u00c4\u0007,\u0002\u0002\u00c4\u00c5\u00071\u0002\u0002\u00c5\u00c6\u0003\u0002\u0002\u0002\u00c6\u00c7\u0006\u001c\u0003\u0002\u00c7\u00c8\u0003\u0002\u0002\u0002\u00c8\u00c9\u0008\u001c\u0003\u0002\u00c98\u0003\u0002\u0002\u0002\u00ca\u00cc\u0009\u0007\u0002\u0002\u00cb\u00ca\u0003\u0002\u0002\u0002\u00cc\u00cd\u0003\u0002\u0002\u0002\u00cd\u00cb\u0003\u0002\u0002\u0002\u00cd\u00ce\u0003\u0002\u0002\u0002\u00ce\u00cf\u0003\u0002\u0002\u0002\u00cf\u00d0\u0008\u001d\u0004\u0002\u00d0:\u0003\u0002\u0002\u0002\u00d1\u00d2\u00071\u0002\u0002\u00d2\u00d3\u0007,\u0002\u0002\u00d3\u00dd\u0003\u0002\u0002\u0002\u00d4\u00dc\n\u0008\u0002\u0002\u00d5\u00d7\u0007,\u0002\u0002\u00d6\u00d5\u0003\u0002\u0002\u0002\u00d7\u00d8\u0003\u0002\u0002\u0002\u00d8\u00d6\u0003\u0002\u0002\u0002\u00d8\u00d9\u0003\u0002\u0002\u0002\u00d9\u00da\u0003\u0002\u0002\u0002\u00da\u00dc\n\u0009\u0002\u0002\u00db\u00d4\u0003\u0002\u0002\u0002\u00db\u00d6\u0003\u0002\u0002\u0002\u00dc\u00df\u0003\u0002\u0002\u0002\u00dd\u00db\u0003\u0002\u0002\u0002\u00dd\u00de\u0003\u0002\u0002\u0002\u00de\u00e0\u0003\u0002\u0002\u0002\u00df\u00dd\u0003\u0002\u0002\u0002\u00e0\u00e1\u0006\u001e\u0004\u0002\u00e1\u00e2\u0003\u0002\u0002\u0002\u00e2\u00e3\u0008\u001e\u0005\u0002\u00e3<\u0003\u0002\u0002\u0002\u00e4\u00e5\u000b\u0002\u0002\u0002\u00e5\u00e6\u0006\u001f\u0005\u0002\u00e6\u00e7\u0003\u0002\u0002\u0002\u00e7\u00e8\u0008\u001f\u0006\u0002\u00e8>\u0003\u0002\u0002\u0002\u0016\u0002cfips{\u0081\u0086\u008b\u0091\u009a\u009f\u00af\u00b3\u00c0\u00cd\u00d8\u00db\u00dd\u0007\u0003\u001b\u0002\u0003\u001c\u0003\u0003\u001d\u0004\u0003\u001e\u0005\u0003\u001f\u0006"
+fld public final static java.lang.String _serializedATN = "\u0004\u0000\u0013\u00e7\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\u0008\u0007\u0008\u0002\u0009\u0007\u0009\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\u000c\u0007\u000c\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0008\u0001\u0008\u0001\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000c\u0001\u000c\u0003\u000cb\u0008\u000c\u0001\u000c\u0003\u000ce\u0008\u000c\u0001\r\u0003\rh\u0008\r\u0001\r\u0001\r\u0001\r\u0005\rm\u0008\r\n\r\u000c\rp\u0009\r\u0003\rr\u0008\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0003\u0010z\u0008\u0010\u0001\u0011\u0001\u0011\u0004\u0011~\u0008\u0011\u000b\u0011\u000c\u0011\u007f\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u0085\u0008\u0012\u0001\u0012\u0004\u0012\u0088\u0008\u0012\u000b\u0012\u000c\u0012\u0089\u0001\u0013\u0001\u0013\u0005\u0013\u008e\u0008\u0013\n\u0013\u000c\u0013\u0091\u0009\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0003\u0015\u0099\u0008\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016\u009e\u0008\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u00ac\u0008\u0019\n\u0019\u000c\u0019\u00af\u0009\u0019\u0001\u0019\u0003\u0019\u00b2\u0008\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u00bd\u0008\u001a\n\u001a\u000c\u001a\u00c0\u0009\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0004\u001b\u00ca\u0008\u001b\u000b\u001b\u000c\u001b\u00cb\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0004\u001c\u00d5\u0008\u001c\u000b\u001c\u000c\u001c\u00d6\u0001\u001c\u0005\u001c\u00da\u0008\u001c\n\u001c\u000c\u001c\u00dd\u0009\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0002\u00ad\u00be\u0000\u001e\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\u0009\u0005\u000b\u0006\r\u0007\u000f\u0008\u0011\u0009\u0013\n\u0015\u000b\u0017\u000c\u0019\r\u001b\u0000\u001d\u0000\u001f\u0000!\u0000#\u0000%\u0000'\u000e)\u0000+\u0000-\u0000/\u00001\u00003\u000f5\u00107\u00119\u0012;\u0013\u0001\u0000\u0008\u0001\u000019\u0002\u0000EEee\u0003\u0000\u0000\u001f\u0022\u0022\u005c\u005c\u0008\u0000\u0022\u0022//\u005c\u005cbbffnnrrtt\u0003\u000009AFaf\u0003\u0000\u0009\n\r\r  \u0001\u0000**\u0001\u0000//\u00ef\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\u0009\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000'\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0001=\u0001\u0000\u0000\u0000\u0003?\u0001\u0000\u0000\u0000\u0005A\u0001\u0000\u0000\u0000\u0007C\u0001\u0000\u0000\u0000\u0009E\u0001\u0000\u0000\u0000\u000bG\u0001\u0000\u0000\u0000\rI\u0001\u0000\u0000\u0000\u000fK\u0001\u0000\u0000\u0000\u0011M\u0001\u0000\u0000\u0000\u0013O\u0001\u0000\u0000\u0000\u0015T\u0001\u0000\u0000\u0000\u0017Z\u0001\u0000\u0000\u0000\u0019_\u0001\u0000\u0000\u0000\u001bg\u0001\u0000\u0000\u0000\u001ds\u0001\u0000\u0000\u0000\u001fu\u0001\u0000\u0000\u0000!y\u0001\u0000\u0000\u0000#{\u0001\u0000\u0000\u0000%\u0081\u0001\u0000\u0000\u0000'\u008b\u0001\u0000\u0000\u0000)\u0094\u0001\u0000\u0000\u0000+\u0098\u0001\u0000\u0000\u0000-\u009a\u0001\u0000\u0000\u0000/\u009f\u0001\u0000\u0000\u00001\u00a5\u0001\u0000\u0000\u00003\u00a7\u0001\u0000\u0000\u00005\u00b8\u0001\u0000\u0000\u00007\u00c9\u0001\u0000\u0000\u00009\u00cf\u0001\u0000\u0000\u0000;\u00e2\u0001\u0000\u0000\u0000=>\u0005:\u0000\u0000>\u0002\u0001\u0000\u0000\u0000?@\u0005,\u0000\u0000@\u0004\u0001\u0000\u0000\u0000AB\u0005.\u0000\u0000B\u0006\u0001\u0000\u0000\u0000CD\u0005+\u0000\u0000D\u0008\u0001\u0000\u0000\u0000EF\u0005-\u0000\u0000F\n\u0001\u0000\u0000\u0000GH\u0005{\u0000\u0000H\u000c\u0001\u0000\u0000\u0000IJ\u0005}\u0000\u0000J\u000e\u0001\u0000\u0000\u0000KL\u0005[\u0000\u0000L\u0010\u0001\u0000\u0000\u0000MN\u0005]\u0000\u0000N\u0012\u0001\u0000\u0000\u0000OP\u0005t\u0000\u0000PQ\u0005r\u0000\u0000QR\u0005u\u0000\u0000RS\u0005e\u0000\u0000S\u0014\u0001\u0000\u0000\u0000TU\u0005f\u0000\u0000UV\u0005a\u0000\u0000VW\u0005l\u0000\u0000WX\u0005s\u0000\u0000XY\u0005e\u0000\u0000Y\u0016\u0001\u0000\u0000\u0000Z[\u0005n\u0000\u0000[\u005c\u0005u\u0000\u0000\u005c]\u0005l\u0000\u0000]^\u0005l\u0000\u0000^\u0018\u0001\u0000\u0000\u0000_a\u0003\u001b\r\u0000`b\u0003#\u0011\u0000a`\u0001\u0000\u0000\u0000ab\u0001\u0000\u0000\u0000bd\u0001\u0000\u0000\u0000ce\u0003%\u0012\u0000dc\u0001\u0000\u0000\u0000de\u0001\u0000\u0000\u0000e\u001a\u0001\u0000\u0000\u0000fh\u0003\u0009\u0004\u0000gf\u0001\u0000\u0000\u0000gh\u0001\u0000\u0000\u0000hq\u0001\u0000\u0000\u0000ir\u0003\u001d\u000e\u0000jn\u0003\u001f\u000f\u0000km\u0003!\u0010\u0000lk\u0001\u0000\u0000\u0000mp\u0001\u0000\u0000\u0000nl\u0001\u0000\u0000\u0000no\u0001\u0000\u0000\u0000or\u0001\u0000\u0000\u0000pn\u0001\u0000\u0000\u0000qi\u0001\u0000\u0000\u0000qj\u0001\u0000\u0000\u0000r\u001c\u0001\u0000\u0000\u0000st\u00050\u0000\u0000t\u001e\u0001\u0000\u0000\u0000uv\u0007\u0000\u0000\u0000v \u0001\u0000\u0000\u0000wz\u0003\u001d\u000e\u0000xz\u0003\u001f\u000f\u0000yw\u0001\u0000\u0000\u0000yx\u0001\u0000\u0000\u0000z\u0022\u0001\u0000\u0000\u0000{}\u0003\u0005\u0002\u0000|~\u0003!\u0010\u0000}|\u0001\u0000\u0000\u0000~\u007f\u0001\u0000\u0000\u0000\u007f}\u0001\u0000\u0000\u0000\u007f\u0080\u0001\u0000\u0000\u0000\u0080$\u0001\u0000\u0000\u0000\u0081\u0084\u0007\u0001\u0000\u0000\u0082\u0085\u0003\u0007\u0003\u0000\u0083\u0085\u0003\u0009\u0004\u0000\u0084\u0082\u0001\u0000\u0000\u0000\u0084\u0083\u0001\u0000\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000\u0000\u0000\u0086\u0088\u0003!\u0010\u0000\u0087\u0086\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000\u0089\u0087\u0001\u0000\u0000\u0000\u0089\u008a\u0001\u0000\u0000\u0000\u008a&\u0001\u0000\u0000\u0000\u008b\u008f\u0003)\u0014\u0000\u008c\u008e\u0003+\u0015\u0000\u008d\u008c\u0001\u0000\u0000\u0000\u008e\u0091\u0001\u0000\u0000\u0000\u008f\u008d\u0001\u0000\u0000\u0000\u008f\u0090\u0001\u0000\u0000\u0000\u0090\u0092\u0001\u0000\u0000\u0000\u0091\u008f\u0001\u0000\u0000\u0000\u0092\u0093\u0003)\u0014\u0000\u0093(\u0001\u0000\u0000\u0000\u0094\u0095\u0005\u0022\u0000\u0000\u0095*\u0001\u0000\u0000\u0000\u0096\u0099\u0008\u0002\u0000\u0000\u0097\u0099\u0003-\u0016\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0098\u0097\u0001\u0000\u0000\u0000\u0099,\u0001\u0000\u0000\u0000\u009a\u009d\u0005\u005c\u0000\u0000\u009b\u009e\u0007\u0003\u0000\u0000\u009c\u009e\u0003/\u0017\u0000\u009d\u009b\u0001\u0000\u0000\u0000\u009d\u009c\u0001\u0000\u0000\u0000\u009e.\u0001\u0000\u0000\u0000\u009f\u00a0\u0005u\u0000\u0000\u00a0\u00a1\u00031\u0018\u0000\u00a1\u00a2\u00031\u0018\u0000\u00a2\u00a3\u00031\u0018\u0000\u00a3\u00a4\u00031\u0018\u0000\u00a40\u0001\u0000\u0000\u0000\u00a5\u00a6\u0007\u0004\u0000\u0000\u00a62\u0001\u0000\u0000\u0000\u00a7\u00a8\u0005/\u0000\u0000\u00a8\u00a9\u0005/\u0000\u0000\u00a9\u00ad\u0001\u0000\u0000\u0000\u00aa\u00ac\u0009\u0000\u0000\u0000\u00ab\u00aa\u0001\u0000\u0000\u0000\u00ac\u00af\u0001\u0000\u0000\u0000\u00ad\u00ae\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001\u0000\u0000\u0000\u00ae\u00b1\u0001\u0000\u0000\u0000\u00af\u00ad\u0001\u0000\u0000\u0000\u00b0\u00b2\u0005\r\u0000\u0000\u00b1\u00b0\u0001\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001\u0000\u0000\u0000\u00b3\u00b4\u0005\n\u0000\u0000\u00b4\u00b5\u0004\u0019\u0000\u0000\u00b5\u00b6\u0001\u0000\u0000\u0000\u00b6\u00b7\u0006\u0019\u0000\u0000\u00b74\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005/\u0000\u0000\u00b9\u00ba\u0005*\u0000\u0000\u00ba\u00be\u0001\u0000\u0000\u0000\u00bb\u00bd\u0009\u0000\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bd\u00c0\u0001\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00be\u00bc\u0001\u0000\u0000\u0000\u00bf\u00c1\u0001\u0000\u0000\u0000\u00c0\u00be\u0001\u0000\u0000\u0000\u00c1\u00c2\u0005*\u0000\u0000\u00c2\u00c3\u0005/\u0000\u0000\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5\u0004\u001a\u0001\u0000\u00c5\u00c6\u0001\u0000\u0000\u0000\u00c6\u00c7\u0006\u001a\u0000\u0000\u00c76\u0001\u0000\u0000\u0000\u00c8\u00ca\u0007\u0005\u0000\u0000\u00c9\u00c8\u0001\u0000\u0000\u0000\u00ca\u00cb\u0001\u0000\u0000\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb\u00cc\u0001\u0000\u0000\u0000\u00cc\u00cd\u0001\u0000\u0000\u0000\u00cd\u00ce\u0006\u001b\u0001\u0000\u00ce8\u0001\u0000\u0000\u0000\u00cf\u00d0\u0005/\u0000\u0000\u00d0\u00d1\u0005*\u0000\u0000\u00d1\u00db\u0001\u0000\u0000\u0000\u00d2\u00da\u0008\u0006\u0000\u0000\u00d3\u00d5\u0005*\u0000\u0000\u00d4\u00d3\u0001\u0000\u0000\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d4\u0001\u0000\u0000\u0000\u00d6\u00d7\u0001\u0000\u0000\u0000\u00d7\u00d8\u0001\u0000\u0000\u0000\u00d8\u00da\u0008\u0007\u0000\u0000\u00d9\u00d2\u0001\u0000\u0000\u0000\u00d9\u00d4\u0001\u0000\u0000\u0000\u00da\u00dd\u0001\u0000\u0000\u0000\u00db\u00d9\u0001\u0000\u0000\u0000\u00db\u00dc\u0001\u0000\u0000\u0000\u00dc\u00de\u0001\u0000\u0000\u0000\u00dd\u00db\u0001\u0000\u0000\u0000\u00de\u00df\u0004\u001c\u0002\u0000\u00df\u00e0\u0001\u0000\u0000\u0000\u00e0\u00e1\u0006\u001c\u0002\u0000\u00e1:\u0001\u0000\u0000\u0000\u00e2\u00e3\u0009\u0000\u0000\u0000\u00e3\u00e4\u0004\u001d\u0003\u0000\u00e4\u00e5\u0001\u0000\u0000\u0000\u00e5\u00e6\u0006\u001d\u0002\u0000\u00e6<\u0001\u0000\u0000\u0000\u0014\u0000adgnqy\u007f\u0084\u0089\u008f\u0098\u009d\u00ad\u00b1\u00be\u00cb\u00d6\u00d9\u00db\u0003\u0000\u0003\u0000\u0000\u0002\u0000\u0000\u0004\u0000"
 fld public final static java.lang.String[] ruleNames
 fld public final static java.lang.String[] tokenNames
  anno 0 java.lang.Deprecated()
 fld public final static org.antlr.v4.runtime.Vocabulary VOCABULARY
 fld public final static org.antlr.v4.runtime.atn.ATN _ATN
+fld public static java.lang.String[] channelNames
 fld public static java.lang.String[] modeNames
 innr public final static LexerState
 meth public boolean sempred(org.antlr.v4.runtime.RuleContext,int,int)
 meth public java.lang.String getGrammarFileName()
 meth public java.lang.String getSerializedATN()
+meth public java.lang.String[] getChannelNames()
 meth public java.lang.String[] getModeNames()
 meth public java.lang.String[] getRuleNames()
 meth public java.lang.String[] getTokenNames()
@@ -410,7 +389,6 @@
 meth public org.antlr.v4.runtime.Vocabulary getVocabulary()
 meth public org.antlr.v4.runtime.atn.ATN getATN()
 meth public org.netbeans.modules.javascript2.json.parser.JsonLexer$LexerState getLexerState()
-meth public void action(org.antlr.v4.runtime.RuleContext,int,int)
 meth public void recover(org.antlr.v4.runtime.LexerNoViableAltException)
 meth public void setLexerState(org.netbeans.modules.javascript2.json.parser.JsonLexer$LexerState)
 supr org.antlr.v4.runtime.Lexer
@@ -425,19 +403,7 @@
 hfds atnState
 
 CLSS public abstract interface org.netbeans.modules.javascript2.json.parser.JsonListener
-intf org.antlr.v4.runtime.tree.ParseTreeListener
-meth public abstract void enterArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public abstract void enterJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public abstract void enterKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public abstract void enterObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public abstract void enterPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public abstract void enterValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
-meth public abstract void exitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public abstract void exitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public abstract void exitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public abstract void exitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public abstract void exitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public abstract void exitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+intf org.netbeans.modules.javascript2.json.parser.JsonParserListener
 
 CLSS public org.netbeans.modules.javascript2.json.parser.JsonParser
 cons public init(org.antlr.v4.runtime.TokenStream)
@@ -468,7 +434,7 @@
 fld public final static int STRING = 14
 fld public final static int TRUE = 10
 fld public final static int WS = 17
-fld public final static java.lang.String _serializedATN = "\u0003\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\u0003\u0015=\u0004\u0002\u0009\u0002\u0004\u0003\u0009\u0003\u0004\u0004\u0009\u0004\u0004\u0005\u0009\u0005\u0004\u0006\u0009\u0006\u0004\u0007\u0009\u0007\u0003\u0002\u0005\u0002\u0010\n\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0005\u0003\u001b\n\u0003\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0007\u0004!\n\u0004\u000c\u0004\u000e\u0004$\u000b\u0004\u0005\u0004&\n\u0004\u0003\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0007\u00074\n\u0007\u000c\u0007\u000e\u00077\u000b\u0007\u0005\u00079\n\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0002\u0002\u0008\u0002\u0004\u0006\u0008\n\u000c\u0002\u0002A\u0002\u000f\u0003\u0002\u0002\u0002\u0004\u001a\u0003\u0002\u0002\u0002\u0006\u001c\u0003\u0002\u0002\u0002\u0008)\u0003\u0002\u0002\u0002\n-\u0003\u0002\u0002\u0002\u000c/\u0003\u0002\u0002\u0002\u000e\u0010\u0005\u0004\u0003\u0002\u000f\u000e\u0003\u0002\u0002\u0002\u000f\u0010\u0003\u0002\u0002\u0002\u0010\u0011\u0003\u0002\u0002\u0002\u0011\u0012\u0007\u0002\u0002\u0003\u0012\u0003\u0003\u0002\u0002\u0002\u0013\u001b\u0007\u0010\u0002\u0002\u0014\u001b\u0007\u000f\u0002\u0002\u0015\u001b\u0007\u000c\u0002\u0002\u0016\u001b\u0007\r\u0002\u0002\u0017\u001b\u0007\u000e\u0002\u0002\u0018\u001b\u0005\u000c\u0007\u0002\u0019\u001b\u0005\u0006\u0004\u0002\u001a\u0013\u0003\u0002\u0002\u0002\u001a\u0014\u0003\u0002\u0002\u0002\u001a\u0015\u0003\u0002\u0002\u0002\u001a\u0016\u0003\u0002\u0002\u0002\u001a\u0017\u0003\u0002\u0002\u0002\u001a\u0018\u0003\u0002\u0002\u0002\u001a\u0019\u0003\u0002\u0002\u0002\u001b\u0005\u0003\u0002\u0002\u0002\u001c%\u0007\u0008\u0002\u0002\u001d\u0022\u0005\u0008\u0005\u0002\u001e\u001f\u0007\u0004\u0002\u0002\u001f!\u0005\u0008\u0005\u0002 \u001e\u0003\u0002\u0002\u0002!$\u0003\u0002\u0002\u0002\u0022 \u0003\u0002\u0002\u0002\u0022#\u0003\u0002\u0002\u0002#&\u0003\u0002\u0002\u0002$\u0022\u0003\u0002\u0002\u0002%\u001d\u0003\u0002\u0002\u0002%&\u0003\u0002\u0002\u0002&'\u0003\u0002\u0002\u0002'(\u0007\u0009\u0002\u0002(\u0007\u0003\u0002\u0002\u0002)*\u0005\n\u0006\u0002*+\u0007\u0003\u0002\u0002+,\u0005\u0004\u0003\u0002,\u0009\u0003\u0002\u0002\u0002-.\u0007\u0010\u0002\u0002.\u000b\u0003\u0002\u0002\u0002/8\u0007\n\u0002\u000205\u0005\u0004\u0003\u000212\u0007\u0004\u0002\u000224\u0005\u0004\u0003\u000231\u0003\u0002\u0002\u000247\u0003\u0002\u0002\u000253\u0003\u0002\u0002\u000256\u0003\u0002\u0002\u000269\u0003\u0002\u0002\u000275\u0003\u0002\u0002\u000280\u0003\u0002\u0002\u000289\u0003\u0002\u0002\u00029:\u0003\u0002\u0002\u0002:;\u0007\u000b\u0002\u0002;\r\u0003\u0002\u0002\u0002\u0008\u000f\u001a\u0022%58"
+fld public final static java.lang.String _serializedATN = "\u0004\u0001\u0013;\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0001\u0000\u0003\u0000\u000e\u0008\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0019\u0008\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u001f\u0008\u0002\n\u0002\u000c\u0002\u0022\u0009\u0002\u0003\u0002$\u0008\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0005\u00052\u0008\u0005\n\u0005\u000c\u00055\u0009\u0005\u0003\u00057\u0008\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0000\u0000\u0006\u0000\u0002\u0004\u0006\u0008\n\u0000\u0000?\u0000\r\u0001\u0000\u0000\u0000\u0002\u0018\u0001\u0000\u0000\u0000\u0004\u001a\u0001\u0000\u0000\u0000\u0006'\u0001\u0000\u0000\u0000\u0008+\u0001\u0000\u0000\u0000\n-\u0001\u0000\u0000\u0000\u000c\u000e\u0003\u0002\u0001\u0000\r\u000c\u0001\u0000\u0000\u0000\r\u000e\u0001\u0000\u0000\u0000\u000e\u000f\u0001\u0000\u0000\u0000\u000f\u0010\u0005\u0000\u0000\u0001\u0010\u0001\u0001\u0000\u0000\u0000\u0011\u0019\u0005\u000e\u0000\u0000\u0012\u0019\u0005\r\u0000\u0000\u0013\u0019\u0005\n\u0000\u0000\u0014\u0019\u0005\u000b\u0000\u0000\u0015\u0019\u0005\u000c\u0000\u0000\u0016\u0019\u0003\n\u0005\u0000\u0017\u0019\u0003\u0004\u0002\u0000\u0018\u0011\u0001\u0000\u0000\u0000\u0018\u0012\u0001\u0000\u0000\u0000\u0018\u0013\u0001\u0000\u0000\u0000\u0018\u0014\u0001\u0000\u0000\u0000\u0018\u0015\u0001\u0000\u0000\u0000\u0018\u0016\u0001\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u0003\u0001\u0000\u0000\u0000\u001a#\u0005\u0006\u0000\u0000\u001b \u0003\u0006\u0003\u0000\u001c\u001d\u0005\u0002\u0000\u0000\u001d\u001f\u0003\u0006\u0003\u0000\u001e\u001c\u0001\u0000\u0000\u0000\u001f\u0022\u0001\u0000\u0000\u0000 \u001e\u0001\u0000\u0000\u0000 !\u0001\u0000\u0000\u0000!$\u0001\u0000\u0000\u0000\u0022 \u0001\u0000\u0000\u0000#\u001b\u0001\u0000\u0000\u0000#$\u0001\u0000\u0000\u0000$%\u0001\u0000\u0000\u0000%&\u0005\u0007\u0000\u0000&\u0005\u0001\u0000\u0000\u0000'(\u0003\u0008\u0004\u0000()\u0005\u0001\u0000\u0000)*\u0003\u0002\u0001\u0000*\u0007\u0001\u0000\u0000\u0000+,\u0005\u000e\u0000\u0000,\u0009\u0001\u0000\u0000\u0000-6\u0005\u0008\u0000\u0000.3\u0003\u0002\u0001\u0000/0\u0005\u0002\u0000\u000002\u0003\u0002\u0001\u00001/\u0001\u0000\u0000\u000025\u0001\u0000\u0000\u000031\u0001\u0000\u0000\u000034\u0001\u0000\u0000\u000047\u0001\u0000\u0000\u000053\u0001\u0000\u0000\u00006.\u0001\u0000\u0000\u000067\u0001\u0000\u0000\u000078\u0001\u0000\u0000\u000089\u0005\u0009\u0000\u00009\u000b\u0001\u0000\u0000\u0000\u0006\r\u0018 #36"
 fld public final static java.lang.String[] ruleNames
 fld public final static java.lang.String[] tokenNames
  anno 0 java.lang.Deprecated()
@@ -575,14 +541,64 @@
 meth public void exitRule(org.antlr.v4.runtime.tree.ParseTreeListener)
 supr org.antlr.v4.runtime.ParserRuleContext
 
+CLSS public org.netbeans.modules.javascript2.json.parser.JsonParserBaseListener
+cons public init()
+intf org.netbeans.modules.javascript2.json.parser.JsonParserListener
+meth public void enterArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public void enterEveryRule(org.antlr.v4.runtime.ParserRuleContext)
+meth public void enterJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public void enterKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public void enterObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public void enterPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public void enterValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+meth public void exitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public void exitEveryRule(org.antlr.v4.runtime.ParserRuleContext)
+meth public void exitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public void exitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public void exitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public void exitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public void exitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+meth public void visitErrorNode(org.antlr.v4.runtime.tree.ErrorNode)
+meth public void visitTerminal(org.antlr.v4.runtime.tree.TerminalNode)
+supr java.lang.Object
+
+CLSS public org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor<%0 extends java.lang.Object>
+cons public init()
+intf org.netbeans.modules.javascript2.json.parser.JsonParserVisitor<{org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0}>
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public {org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0} visitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+supr org.antlr.v4.runtime.tree.AbstractParseTreeVisitor<{org.netbeans.modules.javascript2.json.parser.JsonParserBaseVisitor%0}>
+
+CLSS public abstract interface org.netbeans.modules.javascript2.json.parser.JsonParserListener
+intf org.antlr.v4.runtime.tree.ParseTreeListener
+meth public abstract void enterArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public abstract void enterJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public abstract void enterKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public abstract void enterObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public abstract void enterPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public abstract void enterValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+meth public abstract void exitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public abstract void exitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public abstract void exitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public abstract void exitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public abstract void exitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public abstract void exitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+
+CLSS public abstract interface org.netbeans.modules.javascript2.json.parser.JsonParserVisitor<%0 extends java.lang.Object>
+intf org.antlr.v4.runtime.tree.ParseTreeVisitor<{org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0}>
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
+meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonParserVisitor%0} visitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+
 CLSS public abstract interface org.netbeans.modules.javascript2.json.parser.JsonVisitor<%0 extends java.lang.Object>
-intf org.antlr.v4.runtime.tree.ParseTreeVisitor<{org.netbeans.modules.javascript2.json.parser.JsonVisitor%0}>
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitArray(org.netbeans.modules.javascript2.json.parser.JsonParser$ArrayContext)
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitJson(org.netbeans.modules.javascript2.json.parser.JsonParser$JsonContext)
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitKey(org.netbeans.modules.javascript2.json.parser.JsonParser$KeyContext)
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitObject(org.netbeans.modules.javascript2.json.parser.JsonParser$ObjectContext)
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitPair(org.netbeans.modules.javascript2.json.parser.JsonParser$PairContext)
-meth public abstract {org.netbeans.modules.javascript2.json.parser.JsonVisitor%0} visitValue(org.netbeans.modules.javascript2.json.parser.JsonParser$ValueContext)
+intf org.netbeans.modules.javascript2.json.parser.JsonParserVisitor<{org.netbeans.modules.javascript2.json.parser.JsonVisitor%0}>
 
 CLSS public org.netbeans.modules.javascript2.json.parser.ParseTreeToXml
 cons public init(org.netbeans.modules.javascript2.json.parser.JsonLexer,org.netbeans.modules.javascript2.json.parser.JsonParser)
diff --git a/webcommon/javascript2.json/nbproject/project.xml b/webcommon/javascript2.json/nbproject/project.xml
index e415ef7..3bc560b 100644
--- a/webcommon/javascript2.json/nbproject/project.xml
+++ b/webcommon/javascript2.json/nbproject/project.xml
@@ -39,7 +39,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.1</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseListener.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseListener.java
index a10477d..83cd356 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseListener.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,112 +20,11 @@
  */
 package org.netbeans.modules.javascript2.json.parser;
 
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ErrorNode;
-import org.antlr.v4.runtime.tree.TerminalNode;
-
 /**
  * This class provides an empty implementation of {@link JsonListener},
  * which can be extended to create a listener which only needs to handle a subset
  * of the available methods.
  */
-public class JsonBaseListener implements JsonListener {
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterJson(JsonParser.JsonContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitJson(JsonParser.JsonContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterValue(JsonParser.ValueContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitValue(JsonParser.ValueContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterObject(JsonParser.ObjectContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitObject(JsonParser.ObjectContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterPair(JsonParser.PairContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitPair(JsonParser.PairContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterKey(JsonParser.KeyContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitKey(JsonParser.KeyContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterArray(JsonParser.ArrayContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitArray(JsonParser.ArrayContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterEveryRule(ParserRuleContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitEveryRule(ParserRuleContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void visitTerminal(TerminalNode node) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void visitErrorNode(ErrorNode node) { }
+@SuppressWarnings("CheckReturnValue")
+public class JsonBaseListener extends JsonParserBaseListener {
 }
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseVisitor.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseVisitor.java
index 37f11ae..749fc7f 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseVisitor.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonBaseVisitor.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,8 +20,6 @@
  */
 package org.netbeans.modules.javascript2.json.parser;
 
-import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
-
 /**
  * This class provides an empty implementation of {@link JsonVisitor},
  * which can be extended to create a visitor which only needs to handle a subset
@@ -30,47 +28,6 @@
  * @param <T> The return type of the visit operation. Use {@link Void} for
  * operations with no return type.
  */
-public class JsonBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements JsonVisitor<T> {
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitJson(JsonParser.JsonContext ctx) { return visitChildren(ctx); }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitValue(JsonParser.ValueContext ctx) { return visitChildren(ctx); }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitObject(JsonParser.ObjectContext ctx) { return visitChildren(ctx); }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitPair(JsonParser.PairContext ctx) { return visitChildren(ctx); }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitKey(JsonParser.KeyContext ctx) { return visitChildren(ctx); }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public T visitArray(JsonParser.ArrayContext ctx) { return visitChildren(ctx); }
+@SuppressWarnings("CheckReturnValue")
+public class JsonBaseVisitor<T> extends JsonParserBaseVisitor<T> {
 }
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonLexer.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonLexer.java
index 9a7733e..b16df8e 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonLexer.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonLexer.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -29,9 +29,9 @@
 import org.antlr.v4.runtime.dfa.DFA;
 import org.antlr.v4.runtime.misc.*;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class JsonLexer extends Lexer {
-	static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -40,27 +40,42 @@
 		COLON=1, COMMA=2, DOT=3, PLUS=4, MINUS=5, LBRACE=6, RBRACE=7, LBRACKET=8, 
 		RBRACKET=9, TRUE=10, FALSE=11, NULL=12, NUMBER=13, STRING=14, LINE_COMMENT=15, 
 		COMMENT=16, WS=17, ERROR_COMMENT=18, ERROR=19;
+	public static final int
+		WHITESPACES=2, COMMENTS=3, ERRORS=4;
+	public static String[] channelNames = {
+		"DEFAULT_TOKEN_CHANNEL", "HIDDEN", "WHITESPACES", "COMMENTS", "ERRORS"
+	};
+
 	public static String[] modeNames = {
 		"DEFAULT_MODE"
 	};
 
-	public static final String[] ruleNames = {
-		"COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
-		"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "INTEGER", "DIGIT_0", "DIGIT_19", 
-		"DIGIT", "FRACTION", "EXPONENT", "STRING", "QUOTE", "CHAR", "CONTROL", 
-		"UNICODE", "HEXDIGIT", "LINE_COMMENT", "COMMENT", "WS", "ERROR_COMMENT", 
-		"ERROR"
-	};
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
+			"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "INTEGER", "DIGIT_0", 
+			"DIGIT_19", "DIGIT", "FRACTION", "EXPONENT", "STRING", "QUOTE", "CHAR", 
+			"CONTROL", "UNICODE", "HEXDIGIT", "LINE_COMMENT", "COMMENT", "WS", "ERROR_COMMENT", 
+			"ERROR"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
 
-	private static final String[] _LITERAL_NAMES = {
-		null, "':'", "','", "'.'", "'+'", "'-'", "'{'", "'}'", "'['", "']'", "'true'", 
-		"'false'", "'null'"
-	};
-	private static final String[] _SYMBOLIC_NAMES = {
-		null, "COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
-		"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "STRING", "LINE_COMMENT", 
-		"COMMENT", "WS", "ERROR_COMMENT", "ERROR"
-	};
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "':'", "','", "'.'", "'+'", "'-'", "'{'", "'}'", "'['", "']'", 
+			"'true'", "'false'", "'null'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, "COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
+			"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "STRING", "LINE_COMMENT", 
+			"COMMENT", "WS", "ERROR_COMMENT", "ERROR"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
 	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
 
 	/**
@@ -95,10 +110,6 @@
 	}
 
 
-	public static final int WHITESPACES = 1;
-	public static final int COMMENTS = 2;
-	public static final int ERRORS = 3;
-
 	private static final Recovery[] RECOVERIES = {
 	    Recovery.createLineCommentRecovery(),
 	    Recovery.createCommentRecovery(),
@@ -191,7 +202,7 @@
 	}
 
 	@Override
-	public String getGrammarFileName() { return "Json.g4"; }
+	public String getGrammarFileName() { return "JsonLexer.g4"; }
 
 	@Override
 	public String[] getRuleNames() { return ruleNames; }
@@ -200,67 +211,15 @@
 	public String getSerializedATN() { return _serializedATN; }
 
 	@Override
+	public String[] getChannelNames() { return channelNames; }
+
+	@Override
 	public String[] getModeNames() { return modeNames; }
 
 	@Override
 	public ATN getATN() { return _ATN; }
 
 	@Override
-	public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
-		switch (ruleIndex) {
-		case 25:
-			LINE_COMMENT_action((RuleContext)_localctx, actionIndex);
-			break;
-		case 26:
-			COMMENT_action((RuleContext)_localctx, actionIndex);
-			break;
-		case 27:
-			WS_action((RuleContext)_localctx, actionIndex);
-			break;
-		case 28:
-			ERROR_COMMENT_action((RuleContext)_localctx, actionIndex);
-			break;
-		case 29:
-			ERROR_action((RuleContext)_localctx, actionIndex);
-			break;
-		}
-	}
-	private void LINE_COMMENT_action(RuleContext _localctx, int actionIndex) {
-		switch (actionIndex) {
-		case 0:
-			_channel = COMMENTS;
-			break;
-		}
-	}
-	private void COMMENT_action(RuleContext _localctx, int actionIndex) {
-		switch (actionIndex) {
-		case 1:
-			_channel = COMMENTS;
-			break;
-		}
-	}
-	private void WS_action(RuleContext _localctx, int actionIndex) {
-		switch (actionIndex) {
-		case 2:
-			_channel = WHITESPACES;
-			break;
-		}
-	}
-	private void ERROR_COMMENT_action(RuleContext _localctx, int actionIndex) {
-		switch (actionIndex) {
-		case 3:
-			_channel = ERRORS;
-			break;
-		}
-	}
-	private void ERROR_action(RuleContext _localctx, int actionIndex) {
-		switch (actionIndex) {
-		case 4:
-			_channel = ERRORS;
-			break;
-		}
-	}
-	@Override
 	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
 		switch (ruleIndex) {
 		case 25:
@@ -304,83 +263,154 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\25\u00e9\b\1\4\2"+
-		"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
-		"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
-		"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
-		"\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\3\2"+
-		"\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3"+
-		"\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3"+
-		"\16\3\16\5\16d\n\16\3\16\5\16g\n\16\3\17\5\17j\n\17\3\17\3\17\3\17\7\17"+
-		"o\n\17\f\17\16\17r\13\17\5\17t\n\17\3\20\3\20\3\21\3\21\3\22\3\22\5\22"+
-		"|\n\22\3\23\3\23\6\23\u0080\n\23\r\23\16\23\u0081\3\24\3\24\3\24\5\24"+
-		"\u0087\n\24\3\24\6\24\u008a\n\24\r\24\16\24\u008b\3\25\3\25\7\25\u0090"+
-		"\n\25\f\25\16\25\u0093\13\25\3\25\3\25\3\26\3\26\3\27\3\27\5\27\u009b"+
-		"\n\27\3\30\3\30\3\30\5\30\u00a0\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32"+
-		"\3\32\3\33\3\33\3\33\3\33\7\33\u00ae\n\33\f\33\16\33\u00b1\13\33\3\33"+
-		"\5\33\u00b4\n\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\7\34\u00bf"+
-		"\n\34\f\34\16\34\u00c2\13\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\6"+
-		"\35\u00cc\n\35\r\35\16\35\u00cd\3\35\3\35\3\36\3\36\3\36\3\36\3\36\6\36"+
-		"\u00d7\n\36\r\36\16\36\u00d8\3\36\7\36\u00dc\n\36\f\36\16\36\u00df\13"+
-		"\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\4\u00af\u00c0\2 \3\3"+
-		"\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\2\37\2"+
-		"!\2#\2%\2\'\2)\20+\2-\2/\2\61\2\63\2\65\21\67\229\23;\24=\25\3\2\n\3\2"+
-		"\63;\4\2GGgg\5\2\2!$$^^\n\2$$\61\61^^ddhhppttvv\5\2\62;CHch\5\2\13\f\17"+
-		"\17\"\"\3\2,,\3\2\61\61\u00f1\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+
-		"\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2"+
-		"\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2)\3\2\2\2\2\65"+
-		"\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\3?\3\2\2\2\5A\3"+
-		"\2\2\2\7C\3\2\2\2\tE\3\2\2\2\13G\3\2\2\2\rI\3\2\2\2\17K\3\2\2\2\21M\3"+
-		"\2\2\2\23O\3\2\2\2\25Q\3\2\2\2\27V\3\2\2\2\31\\\3\2\2\2\33a\3\2\2\2\35"+
-		"i\3\2\2\2\37u\3\2\2\2!w\3\2\2\2#{\3\2\2\2%}\3\2\2\2\'\u0083\3\2\2\2)\u008d"+
-		"\3\2\2\2+\u0096\3\2\2\2-\u009a\3\2\2\2/\u009c\3\2\2\2\61\u00a1\3\2\2\2"+
-		"\63\u00a7\3\2\2\2\65\u00a9\3\2\2\2\67\u00ba\3\2\2\29\u00cb\3\2\2\2;\u00d1"+
-		"\3\2\2\2=\u00e4\3\2\2\2?@\7<\2\2@\4\3\2\2\2AB\7.\2\2B\6\3\2\2\2CD\7\60"+
-		"\2\2D\b\3\2\2\2EF\7-\2\2F\n\3\2\2\2GH\7/\2\2H\f\3\2\2\2IJ\7}\2\2J\16\3"+
-		"\2\2\2KL\7\177\2\2L\20\3\2\2\2MN\7]\2\2N\22\3\2\2\2OP\7_\2\2P\24\3\2\2"+
-		"\2QR\7v\2\2RS\7t\2\2ST\7w\2\2TU\7g\2\2U\26\3\2\2\2VW\7h\2\2WX\7c\2\2X"+
-		"Y\7n\2\2YZ\7u\2\2Z[\7g\2\2[\30\3\2\2\2\\]\7p\2\2]^\7w\2\2^_\7n\2\2_`\7"+
-		"n\2\2`\32\3\2\2\2ac\5\35\17\2bd\5%\23\2cb\3\2\2\2cd\3\2\2\2df\3\2\2\2"+
-		"eg\5\'\24\2fe\3\2\2\2fg\3\2\2\2g\34\3\2\2\2hj\5\13\6\2ih\3\2\2\2ij\3\2"+
-		"\2\2js\3\2\2\2kt\5\37\20\2lp\5!\21\2mo\5#\22\2nm\3\2\2\2or\3\2\2\2pn\3"+
-		"\2\2\2pq\3\2\2\2qt\3\2\2\2rp\3\2\2\2sk\3\2\2\2sl\3\2\2\2t\36\3\2\2\2u"+
-		"v\7\62\2\2v \3\2\2\2wx\t\2\2\2x\"\3\2\2\2y|\5\37\20\2z|\5!\21\2{y\3\2"+
-		"\2\2{z\3\2\2\2|$\3\2\2\2}\177\5\7\4\2~\u0080\5#\22\2\177~\3\2\2\2\u0080"+
-		"\u0081\3\2\2\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082&\3\2\2\2\u0083"+
-		"\u0086\t\3\2\2\u0084\u0087\5\t\5\2\u0085\u0087\5\13\6\2\u0086\u0084\3"+
-		"\2\2\2\u0086\u0085\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0089\3\2\2\2\u0088"+
-		"\u008a\5#\22\2\u0089\u0088\3\2\2\2\u008a\u008b\3\2\2\2\u008b\u0089\3\2"+
-		"\2\2\u008b\u008c\3\2\2\2\u008c(\3\2\2\2\u008d\u0091\5+\26\2\u008e\u0090"+
-		"\5-\27\2\u008f\u008e\3\2\2\2\u0090\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0091"+
-		"\u0092\3\2\2\2\u0092\u0094\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0095\5+"+
-		"\26\2\u0095*\3\2\2\2\u0096\u0097\7$\2\2\u0097,\3\2\2\2\u0098\u009b\n\4"+
-		"\2\2\u0099\u009b\5/\30\2\u009a\u0098\3\2\2\2\u009a\u0099\3\2\2\2\u009b"+
-		".\3\2\2\2\u009c\u009f\7^\2\2\u009d\u00a0\t\5\2\2\u009e\u00a0\5\61\31\2"+
-		"\u009f\u009d\3\2\2\2\u009f\u009e\3\2\2\2\u00a0\60\3\2\2\2\u00a1\u00a2"+
-		"\7w\2\2\u00a2\u00a3\5\63\32\2\u00a3\u00a4\5\63\32\2\u00a4\u00a5\5\63\32"+
-		"\2\u00a5\u00a6\5\63\32\2\u00a6\62\3\2\2\2\u00a7\u00a8\t\6\2\2\u00a8\64"+
-		"\3\2\2\2\u00a9\u00aa\7\61\2\2\u00aa\u00ab\7\61\2\2\u00ab\u00af\3\2\2\2"+
-		"\u00ac\u00ae\13\2\2\2\u00ad\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2\u00af\u00b0"+
-		"\3\2\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b3\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2"+
-		"\u00b4\7\17\2\2\u00b3\u00b2\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4\u00b5\3"+
-		"\2\2\2\u00b5\u00b6\7\f\2\2\u00b6\u00b7\6\33\2\2\u00b7\u00b8\3\2\2\2\u00b8"+
-		"\u00b9\b\33\2\2\u00b9\66\3\2\2\2\u00ba\u00bb\7\61\2\2\u00bb\u00bc\7,\2"+
-		"\2\u00bc\u00c0\3\2\2\2\u00bd\u00bf\13\2\2\2\u00be\u00bd\3\2\2\2\u00bf"+
-		"\u00c2\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c0\u00be\3\2\2\2\u00c1\u00c3\3\2"+
-		"\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00c4\7,\2\2\u00c4\u00c5\7\61\2\2\u00c5"+
-		"\u00c6\3\2\2\2\u00c6\u00c7\6\34\3\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\b"+
-		"\34\3\2\u00c98\3\2\2\2\u00ca\u00cc\t\7\2\2\u00cb\u00ca\3\2\2\2\u00cc\u00cd"+
-		"\3\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf"+
-		"\u00d0\b\35\4\2\u00d0:\3\2\2\2\u00d1\u00d2\7\61\2\2\u00d2\u00d3\7,\2\2"+
-		"\u00d3\u00dd\3\2\2\2\u00d4\u00dc\n\b\2\2\u00d5\u00d7\7,\2\2\u00d6\u00d5"+
-		"\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9"+
-		"\u00da\3\2\2\2\u00da\u00dc\n\t\2\2\u00db\u00d4\3\2\2\2\u00db\u00d6\3\2"+
-		"\2\2\u00dc\u00df\3\2\2\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de"+
-		"\u00e0\3\2\2\2\u00df\u00dd\3\2\2\2\u00e0\u00e1\6\36\4\2\u00e1\u00e2\3"+
-		"\2\2\2\u00e2\u00e3\b\36\5\2\u00e3<\3\2\2\2\u00e4\u00e5\13\2\2\2\u00e5"+
-		"\u00e6\6\37\5\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\b\37\6\2\u00e8>\3\2\2"+
-		"\2\26\2cfips{\u0081\u0086\u008b\u0091\u009a\u009f\u00af\u00b3\u00c0\u00cd"+
-		"\u00d8\u00db\u00dd\7\3\33\2\3\34\3\3\35\4\3\36\5\3\37\6";
+		"\u0004\u0000\u0013\u00e7\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+
+		"\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+
+		"\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+
+		"\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+
+		"\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e"+
+		"\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011"+
+		"\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014"+
+		"\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017"+
+		"\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a"+
+		"\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d"+
+		"\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
+		"\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
+		"\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001"+
+		"\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
+		"\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
+		"\u0001\f\u0001\f\u0003\fb\b\f\u0001\f\u0003\fe\b\f\u0001\r\u0003\rh\b"+
+		"\r\u0001\r\u0001\r\u0001\r\u0005\rm\b\r\n\r\f\rp\t\r\u0003\rr\b\r\u0001"+
+		"\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0003"+
+		"\u0010z\b\u0010\u0001\u0011\u0001\u0011\u0004\u0011~\b\u0011\u000b\u0011"+
+		"\f\u0011\u007f\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u0085\b"+
+		"\u0012\u0001\u0012\u0004\u0012\u0088\b\u0012\u000b\u0012\f\u0012\u0089"+
+		"\u0001\u0013\u0001\u0013\u0005\u0013\u008e\b\u0013\n\u0013\f\u0013\u0091"+
+		"\t\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+
+		"\u0015\u0003\u0015\u0099\b\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0003"+
+		"\u0016\u009e\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
+		"\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+
+		"\u0019\u0001\u0019\u0005\u0019\u00ac\b\u0019\n\u0019\f\u0019\u00af\t\u0019"+
+		"\u0001\u0019\u0003\u0019\u00b2\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+
+		"\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+
+		"\u0005\u001a\u00bd\b\u001a\n\u001a\f\u001a\u00c0\t\u001a\u0001\u001a\u0001"+
+		"\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
+		"\u001b\u0004\u001b\u00ca\b\u001b\u000b\u001b\f\u001b\u00cb\u0001\u001b"+
+		"\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+
+		"\u0004\u001c\u00d5\b\u001c\u000b\u001c\f\u001c\u00d6\u0001\u001c\u0005"+
+		"\u001c\u00da\b\u001c\n\u001c\f\u001c\u00dd\t\u001c\u0001\u001c\u0001\u001c"+
+		"\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+
+		"\u0001\u001d\u0002\u00ad\u00be\u0000\u001e\u0001\u0001\u0003\u0002\u0005"+
+		"\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n"+
+		"\u0015\u000b\u0017\f\u0019\r\u001b\u0000\u001d\u0000\u001f\u0000!\u0000"+
+		"#\u0000%\u0000\'\u000e)\u0000+\u0000-\u0000/\u00001\u00003\u000f5\u0010"+
+		"7\u00119\u0012;\u0013\u0001\u0000\b\u0001\u000019\u0002\u0000EEee\u0003"+
+		"\u0000\u0000\u001f\"\"\\\\\b\u0000\"\"//\\\\bbffnnrrtt\u0003\u000009A"+
+		"Faf\u0003\u0000\t\n\r\r  \u0001\u0000**\u0001\u0000//\u00ef\u0000\u0001"+
+		"\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+
+		"\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+
+		"\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+
+		"\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+
+		"\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+
+		"\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+
+		"\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000"+
+		"\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u0000"+
+		"9\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0001=\u0001"+
+		"\u0000\u0000\u0000\u0003?\u0001\u0000\u0000\u0000\u0005A\u0001\u0000\u0000"+
+		"\u0000\u0007C\u0001\u0000\u0000\u0000\tE\u0001\u0000\u0000\u0000\u000b"+
+		"G\u0001\u0000\u0000\u0000\rI\u0001\u0000\u0000\u0000\u000fK\u0001\u0000"+
+		"\u0000\u0000\u0011M\u0001\u0000\u0000\u0000\u0013O\u0001\u0000\u0000\u0000"+
+		"\u0015T\u0001\u0000\u0000\u0000\u0017Z\u0001\u0000\u0000\u0000\u0019_"+
+		"\u0001\u0000\u0000\u0000\u001bg\u0001\u0000\u0000\u0000\u001ds\u0001\u0000"+
+		"\u0000\u0000\u001fu\u0001\u0000\u0000\u0000!y\u0001\u0000\u0000\u0000"+
+		"#{\u0001\u0000\u0000\u0000%\u0081\u0001\u0000\u0000\u0000\'\u008b\u0001"+
+		"\u0000\u0000\u0000)\u0094\u0001\u0000\u0000\u0000+\u0098\u0001\u0000\u0000"+
+		"\u0000-\u009a\u0001\u0000\u0000\u0000/\u009f\u0001\u0000\u0000\u00001"+
+		"\u00a5\u0001\u0000\u0000\u00003\u00a7\u0001\u0000\u0000\u00005\u00b8\u0001"+
+		"\u0000\u0000\u00007\u00c9\u0001\u0000\u0000\u00009\u00cf\u0001\u0000\u0000"+
+		"\u0000;\u00e2\u0001\u0000\u0000\u0000=>\u0005:\u0000\u0000>\u0002\u0001"+
+		"\u0000\u0000\u0000?@\u0005,\u0000\u0000@\u0004\u0001\u0000\u0000\u0000"+
+		"AB\u0005.\u0000\u0000B\u0006\u0001\u0000\u0000\u0000CD\u0005+\u0000\u0000"+
+		"D\b\u0001\u0000\u0000\u0000EF\u0005-\u0000\u0000F\n\u0001\u0000\u0000"+
+		"\u0000GH\u0005{\u0000\u0000H\f\u0001\u0000\u0000\u0000IJ\u0005}\u0000"+
+		"\u0000J\u000e\u0001\u0000\u0000\u0000KL\u0005[\u0000\u0000L\u0010\u0001"+
+		"\u0000\u0000\u0000MN\u0005]\u0000\u0000N\u0012\u0001\u0000\u0000\u0000"+
+		"OP\u0005t\u0000\u0000PQ\u0005r\u0000\u0000QR\u0005u\u0000\u0000RS\u0005"+
+		"e\u0000\u0000S\u0014\u0001\u0000\u0000\u0000TU\u0005f\u0000\u0000UV\u0005"+
+		"a\u0000\u0000VW\u0005l\u0000\u0000WX\u0005s\u0000\u0000XY\u0005e\u0000"+
+		"\u0000Y\u0016\u0001\u0000\u0000\u0000Z[\u0005n\u0000\u0000[\\\u0005u\u0000"+
+		"\u0000\\]\u0005l\u0000\u0000]^\u0005l\u0000\u0000^\u0018\u0001\u0000\u0000"+
+		"\u0000_a\u0003\u001b\r\u0000`b\u0003#\u0011\u0000a`\u0001\u0000\u0000"+
+		"\u0000ab\u0001\u0000\u0000\u0000bd\u0001\u0000\u0000\u0000ce\u0003%\u0012"+
+		"\u0000dc\u0001\u0000\u0000\u0000de\u0001\u0000\u0000\u0000e\u001a\u0001"+
+		"\u0000\u0000\u0000fh\u0003\t\u0004\u0000gf\u0001\u0000\u0000\u0000gh\u0001"+
+		"\u0000\u0000\u0000hq\u0001\u0000\u0000\u0000ir\u0003\u001d\u000e\u0000"+
+		"jn\u0003\u001f\u000f\u0000km\u0003!\u0010\u0000lk\u0001\u0000\u0000\u0000"+
+		"mp\u0001\u0000\u0000\u0000nl\u0001\u0000\u0000\u0000no\u0001\u0000\u0000"+
+		"\u0000or\u0001\u0000\u0000\u0000pn\u0001\u0000\u0000\u0000qi\u0001\u0000"+
+		"\u0000\u0000qj\u0001\u0000\u0000\u0000r\u001c\u0001\u0000\u0000\u0000"+
+		"st\u00050\u0000\u0000t\u001e\u0001\u0000\u0000\u0000uv\u0007\u0000\u0000"+
+		"\u0000v \u0001\u0000\u0000\u0000wz\u0003\u001d\u000e\u0000xz\u0003\u001f"+
+		"\u000f\u0000yw\u0001\u0000\u0000\u0000yx\u0001\u0000\u0000\u0000z\"\u0001"+
+		"\u0000\u0000\u0000{}\u0003\u0005\u0002\u0000|~\u0003!\u0010\u0000}|\u0001"+
+		"\u0000\u0000\u0000~\u007f\u0001\u0000\u0000\u0000\u007f}\u0001\u0000\u0000"+
+		"\u0000\u007f\u0080\u0001\u0000\u0000\u0000\u0080$\u0001\u0000\u0000\u0000"+
+		"\u0081\u0084\u0007\u0001\u0000\u0000\u0082\u0085\u0003\u0007\u0003\u0000"+
+		"\u0083\u0085\u0003\t\u0004\u0000\u0084\u0082\u0001\u0000\u0000\u0000\u0084"+
+		"\u0083\u0001\u0000\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085"+
+		"\u0087\u0001\u0000\u0000\u0000\u0086\u0088\u0003!\u0010\u0000\u0087\u0086"+
+		"\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000\u0089\u0087"+
+		"\u0001\u0000\u0000\u0000\u0089\u008a\u0001\u0000\u0000\u0000\u008a&\u0001"+
+		"\u0000\u0000\u0000\u008b\u008f\u0003)\u0014\u0000\u008c\u008e\u0003+\u0015"+
+		"\u0000\u008d\u008c\u0001\u0000\u0000\u0000\u008e\u0091\u0001\u0000\u0000"+
+		"\u0000\u008f\u008d\u0001\u0000\u0000\u0000\u008f\u0090\u0001\u0000\u0000"+
+		"\u0000\u0090\u0092\u0001\u0000\u0000\u0000\u0091\u008f\u0001\u0000\u0000"+
+		"\u0000\u0092\u0093\u0003)\u0014\u0000\u0093(\u0001\u0000\u0000\u0000\u0094"+
+		"\u0095\u0005\"\u0000\u0000\u0095*\u0001\u0000\u0000\u0000\u0096\u0099"+
+		"\b\u0002\u0000\u0000\u0097\u0099\u0003-\u0016\u0000\u0098\u0096\u0001"+
+		"\u0000\u0000\u0000\u0098\u0097\u0001\u0000\u0000\u0000\u0099,\u0001\u0000"+
+		"\u0000\u0000\u009a\u009d\u0005\\\u0000\u0000\u009b\u009e\u0007\u0003\u0000"+
+		"\u0000\u009c\u009e\u0003/\u0017\u0000\u009d\u009b\u0001\u0000\u0000\u0000"+
+		"\u009d\u009c\u0001\u0000\u0000\u0000\u009e.\u0001\u0000\u0000\u0000\u009f"+
+		"\u00a0\u0005u\u0000\u0000\u00a0\u00a1\u00031\u0018\u0000\u00a1\u00a2\u0003"+
+		"1\u0018\u0000\u00a2\u00a3\u00031\u0018\u0000\u00a3\u00a4\u00031\u0018"+
+		"\u0000\u00a40\u0001\u0000\u0000\u0000\u00a5\u00a6\u0007\u0004\u0000\u0000"+
+		"\u00a62\u0001\u0000\u0000\u0000\u00a7\u00a8\u0005/\u0000\u0000\u00a8\u00a9"+
+		"\u0005/\u0000\u0000\u00a9\u00ad\u0001\u0000\u0000\u0000\u00aa\u00ac\t"+
+		"\u0000\u0000\u0000\u00ab\u00aa\u0001\u0000\u0000\u0000\u00ac\u00af\u0001"+
+		"\u0000\u0000\u0000\u00ad\u00ae\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001"+
+		"\u0000\u0000\u0000\u00ae\u00b1\u0001\u0000\u0000\u0000\u00af\u00ad\u0001"+
+		"\u0000\u0000\u0000\u00b0\u00b2\u0005\r\u0000\u0000\u00b1\u00b0\u0001\u0000"+
+		"\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001\u0000"+
+		"\u0000\u0000\u00b3\u00b4\u0005\n\u0000\u0000\u00b4\u00b5\u0004\u0019\u0000"+
+		"\u0000\u00b5\u00b6\u0001\u0000\u0000\u0000\u00b6\u00b7\u0006\u0019\u0000"+
+		"\u0000\u00b74\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005/\u0000\u0000\u00b9"+
+		"\u00ba\u0005*\u0000\u0000\u00ba\u00be\u0001\u0000\u0000\u0000\u00bb\u00bd"+
+		"\t\u0000\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bd\u00c0\u0001"+
+		"\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00be\u00bc\u0001"+
+		"\u0000\u0000\u0000\u00bf\u00c1\u0001\u0000\u0000\u0000\u00c0\u00be\u0001"+
+		"\u0000\u0000\u0000\u00c1\u00c2\u0005*\u0000\u0000\u00c2\u00c3\u0005/\u0000"+
+		"\u0000\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5\u0004\u001a\u0001"+
+		"\u0000\u00c5\u00c6\u0001\u0000\u0000\u0000\u00c6\u00c7\u0006\u001a\u0000"+
+		"\u0000\u00c76\u0001\u0000\u0000\u0000\u00c8\u00ca\u0007\u0005\u0000\u0000"+
+		"\u00c9\u00c8\u0001\u0000\u0000\u0000\u00ca\u00cb\u0001\u0000\u0000\u0000"+
+		"\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb\u00cc\u0001\u0000\u0000\u0000"+
+		"\u00cc\u00cd\u0001\u0000\u0000\u0000\u00cd\u00ce\u0006\u001b\u0001\u0000"+
+		"\u00ce8\u0001\u0000\u0000\u0000\u00cf\u00d0\u0005/\u0000\u0000\u00d0\u00d1"+
+		"\u0005*\u0000\u0000\u00d1\u00db\u0001\u0000\u0000\u0000\u00d2\u00da\b"+
+		"\u0006\u0000\u0000\u00d3\u00d5\u0005*\u0000\u0000\u00d4\u00d3\u0001\u0000"+
+		"\u0000\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d4\u0001\u0000"+
+		"\u0000\u0000\u00d6\u00d7\u0001\u0000\u0000\u0000\u00d7\u00d8\u0001\u0000"+
+		"\u0000\u0000\u00d8\u00da\b\u0007\u0000\u0000\u00d9\u00d2\u0001\u0000\u0000"+
+		"\u0000\u00d9\u00d4\u0001\u0000\u0000\u0000\u00da\u00dd\u0001\u0000\u0000"+
+		"\u0000\u00db\u00d9\u0001\u0000\u0000\u0000\u00db\u00dc\u0001\u0000\u0000"+
+		"\u0000\u00dc\u00de\u0001\u0000\u0000\u0000\u00dd\u00db\u0001\u0000\u0000"+
+		"\u0000\u00de\u00df\u0004\u001c\u0002\u0000\u00df\u00e0\u0001\u0000\u0000"+
+		"\u0000\u00e0\u00e1\u0006\u001c\u0002\u0000\u00e1:\u0001\u0000\u0000\u0000"+
+		"\u00e2\u00e3\t\u0000\u0000\u0000\u00e3\u00e4\u0004\u001d\u0003\u0000\u00e4"+
+		"\u00e5\u0001\u0000\u0000\u0000\u00e5\u00e6\u0006\u001d\u0002\u0000\u00e6"+
+		"<\u0001\u0000\u0000\u0000\u0014\u0000adgnqy\u007f\u0084\u0089\u008f\u0098"+
+		"\u009d\u00ad\u00b1\u00be\u00cb\u00d6\u00d9\u00db\u0003\u0000\u0003\u0000"+
+		"\u0000\u0002\u0000\u0000\u0004\u0000";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonListener.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonListener.java
index 8e0512f..0bcbc8f 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonListener.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonListener.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,71 +20,9 @@
  */
 package org.netbeans.modules.javascript2.json.parser;
 
-import org.antlr.v4.runtime.tree.ParseTreeListener;
-
 /**
  * This interface defines a complete listener for a parse tree produced by
- * {@link JsonParser}.
+ * {@link Json}.
  */
-public interface JsonListener extends ParseTreeListener {
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#json}.
-	 * @param ctx the parse tree
-	 */
-	void enterJson(JsonParser.JsonContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#json}.
-	 * @param ctx the parse tree
-	 */
-	void exitJson(JsonParser.JsonContext ctx);
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#value}.
-	 * @param ctx the parse tree
-	 */
-	void enterValue(JsonParser.ValueContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#value}.
-	 * @param ctx the parse tree
-	 */
-	void exitValue(JsonParser.ValueContext ctx);
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#object}.
-	 * @param ctx the parse tree
-	 */
-	void enterObject(JsonParser.ObjectContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#object}.
-	 * @param ctx the parse tree
-	 */
-	void exitObject(JsonParser.ObjectContext ctx);
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#pair}.
-	 * @param ctx the parse tree
-	 */
-	void enterPair(JsonParser.PairContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#pair}.
-	 * @param ctx the parse tree
-	 */
-	void exitPair(JsonParser.PairContext ctx);
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#key}.
-	 * @param ctx the parse tree
-	 */
-	void enterKey(JsonParser.KeyContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#key}.
-	 * @param ctx the parse tree
-	 */
-	void exitKey(JsonParser.KeyContext ctx);
-	/**
-	 * Enter a parse tree produced by {@link JsonParser#array}.
-	 * @param ctx the parse tree
-	 */
-	void enterArray(JsonParser.ArrayContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link JsonParser#array}.
-	 * @param ctx the parse tree
-	 */
-	void exitArray(JsonParser.ArrayContext ctx);
+public interface JsonListener extends JsonParserListener {
 }
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParser.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParser.java
index ccf1090..2397416 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParser.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParser.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -29,9 +29,9 @@
 import java.util.Iterator;
 import java.util.ArrayList;
 
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
 public class JsonParser extends Parser {
-	static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
+	static { RuntimeMetaData.checkVersion("4.11.1", RuntimeMetaData.VERSION); }
 
 	protected static final DFA[] _decisionToDFA;
 	protected static final PredictionContextCache _sharedContextCache =
@@ -43,19 +43,28 @@
 	public static final int
 		RULE_json = 0, RULE_value = 1, RULE_object = 2, RULE_pair = 3, RULE_key = 4, 
 		RULE_array = 5;
-	public static final String[] ruleNames = {
-		"json", "value", "object", "pair", "key", "array"
-	};
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"json", "value", "object", "pair", "key", "array"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
 
-	private static final String[] _LITERAL_NAMES = {
-		null, "':'", "','", "'.'", "'+'", "'-'", "'{'", "'}'", "'['", "']'", "'true'", 
-		"'false'", "'null'"
-	};
-	private static final String[] _SYMBOLIC_NAMES = {
-		null, "COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
-		"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "STRING", "LINE_COMMENT", 
-		"COMMENT", "WS", "ERROR_COMMENT", "ERROR"
-	};
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "':'", "','", "'.'", "'+'", "'-'", "'{'", "'}'", "'['", "']'", 
+			"'true'", "'false'", "'null'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, "COLON", "COMMA", "DOT", "PLUS", "MINUS", "LBRACE", "RBRACE", "LBRACKET", 
+			"RBRACKET", "TRUE", "FALSE", "NULL", "NUMBER", "STRING", "LINE_COMMENT", 
+			"COMMENT", "WS", "ERROR_COMMENT", "ERROR"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
 	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
 
 	/**
@@ -90,7 +99,7 @@
 	}
 
 	@Override
-	public String getGrammarFileName() { return "Json.g4"; }
+	public String getGrammarFileName() { return "java-escape"; }
 
 	@Override
 	public String[] getRuleNames() { return ruleNames; }
@@ -105,6 +114,8 @@
 		super(input);
 		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
 	}
+
+	@SuppressWarnings("CheckReturnValue")
 	public static class JsonContext extends ParserRuleContext {
 		public TerminalNode EOF() { return getToken(JsonParser.EOF, 0); }
 		public ValueContext value() {
@@ -116,15 +127,15 @@
 		@Override public int getRuleIndex() { return RULE_json; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterJson(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterJson(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitJson(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitJson(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitJson(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitJson(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -137,8 +148,9 @@
 			enterOuterAlt(_localctx, 1);
 			{
 			setState(13);
+			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LBRACKET) | (1L << TRUE) | (1L << FALSE) | (1L << NULL) | (1L << NUMBER) | (1L << STRING))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 32064L) != 0) {
 				{
 				setState(12);
 				value();
@@ -160,6 +172,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ValueContext extends ParserRuleContext {
 		public TerminalNode STRING() { return getToken(JsonParser.STRING, 0); }
 		public TerminalNode NUMBER() { return getToken(JsonParser.NUMBER, 0); }
@@ -178,15 +191,15 @@
 		@Override public int getRuleIndex() { return RULE_value; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterValue(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterValue(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitValue(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitValue(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitValue(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitValue(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -198,6 +211,7 @@
 			enterOuterAlt(_localctx, 1);
 			{
 			setState(24);
+			_errHandler.sync(this);
 			switch (_input.LA(1)) {
 			case STRING:
 				{
@@ -257,6 +271,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ObjectContext extends ParserRuleContext {
 		public TerminalNode LBRACE() { return getToken(JsonParser.LBRACE, 0); }
 		public TerminalNode RBRACE() { return getToken(JsonParser.RBRACE, 0); }
@@ -276,15 +291,15 @@
 		@Override public int getRuleIndex() { return RULE_object; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterObject(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterObject(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitObject(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitObject(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitObject(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitObject(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -299,6 +314,7 @@
 			setState(26);
 			match(LBRACE);
 			setState(35);
+			_errHandler.sync(this);
 			_la = _input.LA(1);
 			if (_la==STRING) {
 				{
@@ -338,6 +354,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class PairContext extends ParserRuleContext {
 		public KeyContext key() {
 			return getRuleContext(KeyContext.class,0);
@@ -352,15 +369,15 @@
 		@Override public int getRuleIndex() { return RULE_pair; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterPair(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterPair(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitPair(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitPair(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitPair(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitPair(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -390,6 +407,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class KeyContext extends ParserRuleContext {
 		public TerminalNode STRING() { return getToken(JsonParser.STRING, 0); }
 		public KeyContext(ParserRuleContext parent, int invokingState) {
@@ -398,15 +416,15 @@
 		@Override public int getRuleIndex() { return RULE_key; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterKey(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterKey(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitKey(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitKey(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitKey(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitKey(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -432,6 +450,7 @@
 		return _localctx;
 	}
 
+	@SuppressWarnings("CheckReturnValue")
 	public static class ArrayContext extends ParserRuleContext {
 		public TerminalNode LBRACKET() { return getToken(JsonParser.LBRACKET, 0); }
 		public TerminalNode RBRACKET() { return getToken(JsonParser.RBRACKET, 0); }
@@ -451,15 +470,15 @@
 		@Override public int getRuleIndex() { return RULE_array; }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).enterArray(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).enterArray(this);
 		}
 		@Override
 		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof JsonListener ) ((JsonListener)listener).exitArray(this);
+			if ( listener instanceof JsonParserListener ) ((JsonParserListener)listener).exitArray(this);
 		}
 		@Override
 		public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-			if ( visitor instanceof JsonVisitor ) return ((JsonVisitor<? extends T>)visitor).visitArray(this);
+			if ( visitor instanceof JsonParserVisitor ) return ((JsonParserVisitor<? extends T>)visitor).visitArray(this);
 			else return visitor.visitChildren(this);
 		}
 	}
@@ -474,8 +493,9 @@
 			setState(45);
 			match(LBRACKET);
 			setState(54);
+			_errHandler.sync(this);
 			_la = _input.LA(1);
-			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LBRACKET) | (1L << TRUE) | (1L << FALSE) | (1L << NULL) | (1L << NUMBER) | (1L << STRING))) != 0)) {
+			if (((_la) & ~0x3f) == 0 && ((1L << _la) & 32064L) != 0) {
 				{
 				setState(46);
 				value();
@@ -514,23 +534,44 @@
 	}
 
 	public static final String _serializedATN =
-		"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\25=\4\2\t\2\4\3\t"+
-		"\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\5\2\20\n\2\3\2\3\2\3\3\3\3\3\3"+
-		"\3\3\3\3\3\3\3\3\5\3\33\n\3\3\4\3\4\3\4\3\4\7\4!\n\4\f\4\16\4$\13\4\5"+
-		"\4&\n\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\7\7\7\64\n\7\f\7"+
-		"\16\7\67\13\7\5\79\n\7\3\7\3\7\3\7\2\2\b\2\4\6\b\n\f\2\2A\2\17\3\2\2\2"+
-		"\4\32\3\2\2\2\6\34\3\2\2\2\b)\3\2\2\2\n-\3\2\2\2\f/\3\2\2\2\16\20\5\4"+
-		"\3\2\17\16\3\2\2\2\17\20\3\2\2\2\20\21\3\2\2\2\21\22\7\2\2\3\22\3\3\2"+
-		"\2\2\23\33\7\20\2\2\24\33\7\17\2\2\25\33\7\f\2\2\26\33\7\r\2\2\27\33\7"+
-		"\16\2\2\30\33\5\f\7\2\31\33\5\6\4\2\32\23\3\2\2\2\32\24\3\2\2\2\32\25"+
-		"\3\2\2\2\32\26\3\2\2\2\32\27\3\2\2\2\32\30\3\2\2\2\32\31\3\2\2\2\33\5"+
-		"\3\2\2\2\34%\7\b\2\2\35\"\5\b\5\2\36\37\7\4\2\2\37!\5\b\5\2 \36\3\2\2"+
-		"\2!$\3\2\2\2\" \3\2\2\2\"#\3\2\2\2#&\3\2\2\2$\"\3\2\2\2%\35\3\2\2\2%&"+
-		"\3\2\2\2&\'\3\2\2\2\'(\7\t\2\2(\7\3\2\2\2)*\5\n\6\2*+\7\3\2\2+,\5\4\3"+
-		"\2,\t\3\2\2\2-.\7\20\2\2.\13\3\2\2\2/8\7\n\2\2\60\65\5\4\3\2\61\62\7\4"+
-		"\2\2\62\64\5\4\3\2\63\61\3\2\2\2\64\67\3\2\2\2\65\63\3\2\2\2\65\66\3\2"+
-		"\2\2\669\3\2\2\2\67\65\3\2\2\28\60\3\2\2\289\3\2\2\29:\3\2\2\2:;\7\13"+
-		"\2\2;\r\3\2\2\2\b\17\32\"%\658";
+		"\u0004\u0001\u0013;\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
+		"\u0005\u0007\u0005\u0001\u0000\u0003\u0000\u000e\b\u0000\u0001\u0000\u0001"+
+		"\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
+		"\u0001\u0001\u0001\u0003\u0001\u0019\b\u0001\u0001\u0002\u0001\u0002\u0001"+
+		"\u0002\u0001\u0002\u0005\u0002\u001f\b\u0002\n\u0002\f\u0002\"\t\u0002"+
+		"\u0003\u0002$\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+
+		"\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
+		"\u0001\u0005\u0001\u0005\u0005\u00052\b\u0005\n\u0005\f\u00055\t\u0005"+
+		"\u0003\u00057\b\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0000\u0000"+
+		"\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0000?\u0000\r\u0001\u0000\u0000"+
+		"\u0000\u0002\u0018\u0001\u0000\u0000\u0000\u0004\u001a\u0001\u0000\u0000"+
+		"\u0000\u0006\'\u0001\u0000\u0000\u0000\b+\u0001\u0000\u0000\u0000\n-\u0001"+
+		"\u0000\u0000\u0000\f\u000e\u0003\u0002\u0001\u0000\r\f\u0001\u0000\u0000"+
+		"\u0000\r\u000e\u0001\u0000\u0000\u0000\u000e\u000f\u0001\u0000\u0000\u0000"+
+		"\u000f\u0010\u0005\u0000\u0000\u0001\u0010\u0001\u0001\u0000\u0000\u0000"+
+		"\u0011\u0019\u0005\u000e\u0000\u0000\u0012\u0019\u0005\r\u0000\u0000\u0013"+
+		"\u0019\u0005\n\u0000\u0000\u0014\u0019\u0005\u000b\u0000\u0000\u0015\u0019"+
+		"\u0005\f\u0000\u0000\u0016\u0019\u0003\n\u0005\u0000\u0017\u0019\u0003"+
+		"\u0004\u0002\u0000\u0018\u0011\u0001\u0000\u0000\u0000\u0018\u0012\u0001"+
+		"\u0000\u0000\u0000\u0018\u0013\u0001\u0000\u0000\u0000\u0018\u0014\u0001"+
+		"\u0000\u0000\u0000\u0018\u0015\u0001\u0000\u0000\u0000\u0018\u0016\u0001"+
+		"\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u0003\u0001"+
+		"\u0000\u0000\u0000\u001a#\u0005\u0006\u0000\u0000\u001b \u0003\u0006\u0003"+
+		"\u0000\u001c\u001d\u0005\u0002\u0000\u0000\u001d\u001f\u0003\u0006\u0003"+
+		"\u0000\u001e\u001c\u0001\u0000\u0000\u0000\u001f\"\u0001\u0000\u0000\u0000"+
+		" \u001e\u0001\u0000\u0000\u0000 !\u0001\u0000\u0000\u0000!$\u0001\u0000"+
+		"\u0000\u0000\" \u0001\u0000\u0000\u0000#\u001b\u0001\u0000\u0000\u0000"+
+		"#$\u0001\u0000\u0000\u0000$%\u0001\u0000\u0000\u0000%&\u0005\u0007\u0000"+
+		"\u0000&\u0005\u0001\u0000\u0000\u0000\'(\u0003\b\u0004\u0000()\u0005\u0001"+
+		"\u0000\u0000)*\u0003\u0002\u0001\u0000*\u0007\u0001\u0000\u0000\u0000"+
+		"+,\u0005\u000e\u0000\u0000,\t\u0001\u0000\u0000\u0000-6\u0005\b\u0000"+
+		"\u0000.3\u0003\u0002\u0001\u0000/0\u0005\u0002\u0000\u000002\u0003\u0002"+
+		"\u0001\u00001/\u0001\u0000\u0000\u000025\u0001\u0000\u0000\u000031\u0001"+
+		"\u0000\u0000\u000034\u0001\u0000\u0000\u000047\u0001\u0000\u0000\u0000"+
+		"53\u0001\u0000\u0000\u00006.\u0001\u0000\u0000\u000067\u0001\u0000\u0000"+
+		"\u000078\u0001\u0000\u0000\u000089\u0005\t\u0000\u00009\u000b\u0001\u0000"+
+		"\u0000\u0000\u0006\r\u0018 #36";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseListener.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseListener.java
new file mode 100644
index 0000000..a69bed0
--- /dev/null
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseListener.java
@@ -0,0 +1,132 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.javascript2.json.parser;
+
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * This class provides an empty implementation of {@link JsonParserListener},
+ * which can be extended to create a listener which only needs to handle a subset
+ * of the available methods.
+ */
+@SuppressWarnings("CheckReturnValue")
+public class JsonParserBaseListener implements JsonParserListener {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJson(JsonParser.JsonContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJson(JsonParser.JsonContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterValue(JsonParser.ValueContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitValue(JsonParser.ValueContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterObject(JsonParser.ObjectContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitObject(JsonParser.ObjectContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPair(JsonParser.PairContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPair(JsonParser.PairContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterKey(JsonParser.KeyContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitKey(JsonParser.KeyContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterArray(JsonParser.ArrayContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitArray(JsonParser.ArrayContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitTerminal(TerminalNode node) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitErrorNode(ErrorNode node) { }
+}
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseVisitor.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseVisitor.java
new file mode 100644
index 0000000..8210bd8
--- /dev/null
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserBaseVisitor.java
@@ -0,0 +1,77 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.javascript2.json.parser;
+
+import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
+
+/**
+ * This class provides an empty implementation of {@link JsonParserVisitor},
+ * which can be extended to create a visitor which only needs to handle a subset
+ * of the available methods.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+@SuppressWarnings("CheckReturnValue")
+public class JsonParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements JsonParserVisitor<T> {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitJson(JsonParser.JsonContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitValue(JsonParser.ValueContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitObject(JsonParser.ObjectContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitPair(JsonParser.PairContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitKey(JsonParser.KeyContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArray(JsonParser.ArrayContext ctx) { return visitChildren(ctx); }
+}
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserListener.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserListener.java
new file mode 100644
index 0000000..c60d40c
--- /dev/null
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserListener.java
@@ -0,0 +1,90 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.javascript2.json.parser;
+
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link JsonParser}.
+ */
+public interface JsonParserListener extends ParseTreeListener {
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#json}.
+	 * @param ctx the parse tree
+	 */
+	void enterJson(JsonParser.JsonContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#json}.
+	 * @param ctx the parse tree
+	 */
+	void exitJson(JsonParser.JsonContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#value}.
+	 * @param ctx the parse tree
+	 */
+	void enterValue(JsonParser.ValueContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#value}.
+	 * @param ctx the parse tree
+	 */
+	void exitValue(JsonParser.ValueContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#object}.
+	 * @param ctx the parse tree
+	 */
+	void enterObject(JsonParser.ObjectContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#object}.
+	 * @param ctx the parse tree
+	 */
+	void exitObject(JsonParser.ObjectContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#pair}.
+	 * @param ctx the parse tree
+	 */
+	void enterPair(JsonParser.PairContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#pair}.
+	 * @param ctx the parse tree
+	 */
+	void exitPair(JsonParser.PairContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#key}.
+	 * @param ctx the parse tree
+	 */
+	void enterKey(JsonParser.KeyContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#key}.
+	 * @param ctx the parse tree
+	 */
+	void exitKey(JsonParser.KeyContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link JsonParser#array}.
+	 * @param ctx the parse tree
+	 */
+	void enterArray(JsonParser.ArrayContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link JsonParser#array}.
+	 * @param ctx the parse tree
+	 */
+	void exitArray(JsonParser.ArrayContext ctx);
+}
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserVisitor.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserVisitor.java
new file mode 100644
index 0000000..b923266
--- /dev/null
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonParserVisitor.java
@@ -0,0 +1,69 @@
+// Generated from java-escape by ANTLR 4.11.1
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.javascript2.json.parser;
+
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+
+/**
+ * This interface defines a complete generic visitor for a parse tree produced
+ * by {@link JsonParser}.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public interface JsonParserVisitor<T> extends ParseTreeVisitor<T> {
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#json}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitJson(JsonParser.JsonContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#value}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitValue(JsonParser.ValueContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#object}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitObject(JsonParser.ObjectContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#pair}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitPair(JsonParser.PairContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#key}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitKey(JsonParser.KeyContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link JsonParser#array}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArray(JsonParser.ArrayContext ctx);
+}
\ No newline at end of file
diff --git a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonVisitor.java b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonVisitor.java
index 160242b..aa8202b 100644
--- a/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonVisitor.java
+++ b/webcommon/javascript2.json/src/org/netbeans/modules/javascript2/json/parser/JsonVisitor.java
@@ -1,4 +1,4 @@
-// Generated from Json.g4 by ANTLR 4.5.3
+// Generated from java-escape by ANTLR 4.11.1
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,8 +20,6 @@
  */
 package org.netbeans.modules.javascript2.json.parser;
 
-import org.antlr.v4.runtime.tree.ParseTreeVisitor;
-
 /**
  * This interface defines a complete generic visitor for a parse tree produced
  * by {@link JsonParser}.
@@ -29,41 +27,5 @@
  * @param <T> The return type of the visit operation. Use {@link Void} for
  * operations with no return type.
  */
-public interface JsonVisitor<T> extends ParseTreeVisitor<T> {
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#json}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitJson(JsonParser.JsonContext ctx);
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#value}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitValue(JsonParser.ValueContext ctx);
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#object}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitObject(JsonParser.ObjectContext ctx);
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#pair}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitPair(JsonParser.PairContext ctx);
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#key}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitKey(JsonParser.KeyContext ctx);
-	/**
-	 * Visit a parse tree produced by {@link JsonParser#array}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	T visitArray(JsonParser.ArrayContext ctx);
+public interface JsonVisitor<T> extends JsonParserVisitor<T> {
 }
\ No newline at end of file
diff --git a/webcommon/javascript2.json/tools/Json.g4 b/webcommon/javascript2.json/tools/JsonLexer.g4
similarity index 78%
rename from webcommon/javascript2.json/tools/Json.g4
rename to webcommon/javascript2.json/tools/JsonLexer.g4
index afdcea8..ebe935f 100644
--- a/webcommon/javascript2.json/tools/Json.g4
+++ b/webcommon/javascript2.json/tools/JsonLexer.g4
@@ -20,11 +20,7 @@
  *
  * @author Tomas Zezula
  */
-grammar Json;
-
-options {
-language=Java;
-}
+lexer grammar JsonLexer;
 
 @lexer::header {
 /*
@@ -48,33 +44,7 @@
 package org.netbeans.modules.javascript2.json.parser;
 }
 
-@parser::header {
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.netbeans.modules.javascript2.json.parser;
-}
-
 @lexer::members {
-public static final int WHITESPACES = 1;
-public static final int COMMENTS = 2;
-public static final int ERRORS = 3;
-
 private static final Recovery[] RECOVERIES = {
     Recovery.createLineCommentRecovery(),
     Recovery.createCommentRecovery(),
@@ -161,14 +131,7 @@
 }
 }
 
-
-json                : value?EOF;
-value               : (STRING | NUMBER | TRUE | FALSE | NULL | array | object);
-object              : LBRACE (pair (COMMA pair)*)? RBRACE;
-pair               : key COLON value;
-key                 : STRING;
-array               : LBRACKET (value (COMMA value)*)? RBRACKET;
-
+channels { WHITESPACES, COMMENTS, ERRORS }
 
 COLON               : ':';
 COMMA               : ',';
@@ -189,12 +152,14 @@
 fragment DIGIT      : DIGIT_0 | DIGIT_19;
 fragment FRACTION   : DOT DIGIT+;
 fragment EXPONENT   : ('e'|'E')(PLUS | MINUS)? DIGIT+;
+
 STRING              : QUOTE (CHAR)* QUOTE;
 fragment QUOTE      : '"';
 fragment CHAR       : ~[\u0000-\u001F"\\] | CONTROL;
 fragment CONTROL    : '\\' (["\\/bfnrt] | UNICODE);
 fragment UNICODE    : 'u' HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT;
 fragment HEXDIGIT   : [0-9a-fA-F];
+
 LINE_COMMENT        : '//' .*? '\r'? '\n' {isCommentSupported}? -> channel(COMMENTS);
 COMMENT             : '/*' .*? '*/' {isCommentSupported}? -> channel(COMMENTS);
 WS                  : [ \t\r\n]+ -> channel(WHITESPACES);
diff --git a/webcommon/javascript2.json/tools/JsonParser.g4 b/webcommon/javascript2.json/tools/JsonParser.g4
new file mode 100644
index 0000000..da4d89e
--- /dev/null
+++ b/webcommon/javascript2.json/tools/JsonParser.g4
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+/**
+ *
+ * @author Tomas Zezula
+ */
+parser grammar JsonParser;
+
+options { tokenVocab = JsonLexer; }
+@parser::header {
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.netbeans.modules.javascript2.json.parser;
+}
+
+json                : value?EOF;
+value               : (STRING | NUMBER | TRUE | FALSE | NULL | array | object);
+object              : LBRACE (pair (COMMA pair)*)? RBRACE;
+pair               : key COLON value;
+key                 : STRING;
+array               : LBRACKET (value (COMMA value)*)? RBRACKET;
diff --git a/webcommon/javascript2.knockout/nbproject/org-netbeans-modules-javascript2-knockout.sig b/webcommon/javascript2.knockout/nbproject/org-netbeans-modules-javascript2-knockout.sig
index 2325825..cc6e841 100644
--- a/webcommon/javascript2.knockout/nbproject/org-netbeans-modules-javascript2-knockout.sig
+++ b/webcommon/javascript2.knockout/nbproject/org-netbeans-modules-javascript2-knockout.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/javascript2.knockout/nbproject/project.properties b/webcommon/javascript2.knockout/nbproject/project.properties
index ef5aca7..12ff4ce 100644
--- a/webcommon/javascript2.knockout/nbproject/project.properties
+++ b/webcommon/javascript2.knockout/nbproject/project.properties
@@ -16,5 +16,5 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/javascript2.lexer/nbproject/org-netbeans-modules-javascript2-lexer.sig b/webcommon/javascript2.lexer/nbproject/org-netbeans-modules-javascript2-lexer.sig
index 359c6fe..c9aba30 100644
--- a/webcommon/javascript2.lexer/nbproject/org-netbeans-modules-javascript2-lexer.sig
+++ b/webcommon/javascript2.lexer/nbproject/org-netbeans-modules-javascript2-lexer.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.23
+#Version 1.24
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/javascript2.lexer/nbproject/project.xml b/webcommon/javascript2.lexer/nbproject/project.xml
index 2b4a1dd..23d0356 100644
--- a/webcommon/javascript2.lexer/nbproject/project.xml
+++ b/webcommon/javascript2.lexer/nbproject/project.xml
@@ -39,7 +39,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.1</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/webcommon/javascript2.lexer/src/org/netbeans/modules/javascript2/lexer/JsonLexer.java b/webcommon/javascript2.lexer/src/org/netbeans/modules/javascript2/lexer/JsonLexer.java
index 2092270..28ae1d3 100644
--- a/webcommon/javascript2.lexer/src/org/netbeans/modules/javascript2/lexer/JsonLexer.java
+++ b/webcommon/javascript2.lexer/src/org/netbeans/modules/javascript2/lexer/JsonLexer.java
@@ -49,7 +49,7 @@
         FileObject fo = (FileObject) info.getAttributeValue(FileObject.class);
         boolean allowComments = fo != null ? JsonOptionsQuery.getOptions(fo).isCommentSupported() : false;
         scanner = new org.netbeans.modules.javascript2.json.parser.JsonLexer(charStream, allowComments, true);
-        if (info.state() != null && info.state() instanceof LexerState) {
+        if (info.state() instanceof LexerState) {
             scanner.setLexerState((LexerState) info.state());
         }
     }
diff --git a/webcommon/javascript2.model/nbproject/org-netbeans-modules-javascript2-model.sig b/webcommon/javascript2.model/nbproject/org-netbeans-modules-javascript2-model.sig
index 79d3ae1..ba87005 100644
--- a/webcommon/javascript2.model/nbproject/org-netbeans-modules-javascript2-model.sig
+++ b/webcommon/javascript2.model/nbproject/org-netbeans-modules-javascript2-model.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.22
+#Version 1.23
 
 CLSS public abstract com.oracle.js.parser.ir.visitor.NodeVisitor<%0 extends com.oracle.js.parser.ir.LexicalContext>
 cons public init({com.oracle.js.parser.ir.visitor.NodeVisitor%0})
diff --git a/webcommon/javascript2.model/nbproject/project.xml b/webcommon/javascript2.model/nbproject/project.xml
index 43adaab..9d8245e 100644
--- a/webcommon/javascript2.model/nbproject/project.xml
+++ b/webcommon/javascript2.model/nbproject/project.xml
@@ -39,7 +39,8 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>1.1</specification-version>
+                        <release-version>2</release-version>
+                        <specification-version>1.20</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/ModelVisitor.java b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/ModelVisitor.java
index a97c314..de4d716 100644
--- a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/ModelVisitor.java
+++ b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/ModelVisitor.java
@@ -919,7 +919,7 @@
             if(!(property instanceof JsFunction)) {
                 property = fncParent.getProperty(modelBuilder.getGlobal().getName() + modelBuilder.getFunctionName(functionNode));
             }
-            if (property != null && property instanceof JsFunction) {
+            if (property instanceof JsFunction) {
                 if (property instanceof JsFunctionReference) {
                     fncScope = (JsFunctionImpl)((JsFunctionReference)property).getOriginal();
                 } else {
@@ -2491,7 +2491,7 @@
                     for (int i = isPriviliged ? 1 : 0; parent != null && i < name.size(); i++) {
                         parent = parent.getProperty(name.get(i).getName());
                     }
-                    if (parent!= null && parent instanceof JsFunction) {
+                    if (parent instanceof JsFunction) {
                         Identifier propertyName = create(parserResult, varNode.getName());
                         Set<Modifier> modifiers;
                         if (isPriviliged) {
diff --git a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/OccurrenceBuilder.java b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/OccurrenceBuilder.java
index 34f6a4b..0e60f4d 100644
--- a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/OccurrenceBuilder.java
+++ b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/OccurrenceBuilder.java
@@ -101,7 +101,7 @@
         JsObject parameter = null;
         DeclarationScope scope = item.scope;
         JsObject parent = item.currentParent;
-        if (!(parent instanceof JsWith || (parent.getParent() != null && parent.getParent() instanceof JsWith))) {
+        if (!(parent instanceof JsWith || parent.getParent() instanceof JsWith)) {
             while (scope != null && property == null && parameter == null) {
                 if (scope instanceof JsFunction) {
                     parameter = ((JsFunction) scope).getParameter(name);
@@ -119,7 +119,7 @@
                 }
             }
         } else {
-            if (!(parent instanceof JsWith) && (parent.getParent() != null && parent.getParent() instanceof JsWith)) {
+            if (!(parent instanceof JsWith) && parent.getParent() instanceof JsWith) {
                 parent = parent.getParent();
             }
             property = parent.getProperty(name);
diff --git a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/api/ModelUtils.java b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/api/ModelUtils.java
index 2f02c9c..3d99f8a 100644
--- a/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/api/ModelUtils.java
+++ b/webcommon/javascript2.model/src/org/netbeans/modules/javascript2/model/api/ModelUtils.java
@@ -273,7 +273,7 @@
         while (result.getParent() != null && !(result.getParent() instanceof DeclarationScope)) {
             result = result.getParent();
         }
-        if (result.getParent() != null && result.getParent() instanceof DeclarationScope) {
+        if (result.getParent() instanceof DeclarationScope) {
             result = result.getParent();
         }
         if (!(result instanceof DeclarationScope)) {
diff --git a/webcommon/javascript2.nodejs/nbproject/org-netbeans-modules-javascript2-nodejs.sig b/webcommon/javascript2.nodejs/nbproject/org-netbeans-modules-javascript2-nodejs.sig
index c9b7e44..bbf03d3 100644
--- a/webcommon/javascript2.nodejs/nbproject/org-netbeans-modules-javascript2-nodejs.sig
+++ b/webcommon/javascript2.nodejs/nbproject/org-netbeans-modules-javascript2-nodejs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 0.29
+#Version 0.30
 
 CLSS public abstract interface org.netbeans.modules.javascript2.nodejs.spi.NodeJsSupport
 meth public abstract boolean isSupportEnabled()
diff --git a/webcommon/javascript2.nodejs/nbproject/project.properties b/webcommon/javascript2.nodejs/nbproject/project.properties
index d0a9fa5..ec4cf73 100644
--- a/webcommon/javascript2.nodejs/nbproject/project.properties
+++ b/webcommon/javascript2.nodejs/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
diff --git a/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsDataProvider.java b/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsDataProvider.java
index fd250b3..b721779 100644
--- a/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsDataProvider.java
+++ b/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsDataProvider.java
@@ -345,12 +345,12 @@
         if (modules != null) {
             for (int i = 0; i < modules.size(); i++) {
                 jsonValue = modules.get(i);
-                if (jsonValue != null && jsonValue instanceof JSONObject) {
+                if (jsonValue instanceof JSONObject) {
                     JSONObject jsonModule = (JSONObject) jsonValue;
                     jsonValue = jsonModule.get(NAME);
-                    if (jsonValue != null && jsonValue instanceof String && moduleName.equals(((String) jsonValue).toLowerCase())) {
+                    if (jsonValue instanceof String && moduleName.equals(((String) jsonValue).toLowerCase())) {
                         jsonValue = jsonModule.get(DESCRIPTION);
-                        if (jsonValue != null && jsonValue instanceof String) {
+                        if (jsonValue instanceof String) {
                             return (String) jsonValue;
                         }
                     }
@@ -498,7 +498,7 @@
 
     private String getJSONStringProperty(final JSONObject object, final String property) {
         Object value = object.get(property);
-        if (value != null && value instanceof String) {
+        if (value instanceof String) {
             return (String) value;
         }
         return null;
@@ -506,7 +506,7 @@
 
     private JSONArray getJSONArrayProperty(final JSONObject object, final String property) {
         Object value = object.get(property);
-        if (value != null && value instanceof JSONArray) {
+        if (value instanceof JSONArray) {
             return (JSONArray) value;
         }
         return null;
@@ -553,7 +553,7 @@
             JSONObject root = (JSONObject) JSONValue.parse(content);
             if (root != null) {
                 Object jsonValue = root.get(MODULES);
-                if (jsonValue != null && jsonValue instanceof JSONArray) {
+                if (jsonValue instanceof JSONArray) {
                     return (JSONArray) jsonValue;
                 }
             }
diff --git a/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsUtils.java b/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsUtils.java
index 54d197c..80cb8a6 100644
--- a/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsUtils.java
+++ b/webcommon/javascript2.nodejs/src/org/netbeans/modules/javascript2/nodejs/editor/NodeJsUtils.java
@@ -202,7 +202,7 @@
             JSONObject root = (JSONObject) JSONValue.parse(content);
             if (root != null) {
                 Object main = root.get(MAIN_FIELD);
-                if (main != null && main instanceof String) {
+                if (main instanceof String) {
                     value = (String)main;
                 }
             }
diff --git a/webcommon/javascript2.nodejs/test/qa-functional/src/org/netbeans/modules/javascript2/nodejs/GeneralNodeJs.java b/webcommon/javascript2.nodejs/test/qa-functional/src/org/netbeans/modules/javascript2/nodejs/GeneralNodeJs.java
index 95aa7c4..2306327 100644
--- a/webcommon/javascript2.nodejs/test/qa-functional/src/org/netbeans/modules/javascript2/nodejs/GeneralNodeJs.java
+++ b/webcommon/javascript2.nodejs/test/qa-functional/src/org/netbeans/modules/javascript2/nodejs/GeneralNodeJs.java
@@ -235,7 +235,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/webcommon/javascript2.prototypejs/nbproject/project.properties b/webcommon/javascript2.prototypejs/nbproject/project.properties
index d0a9fa5..ec4cf73 100644
--- a/webcommon/javascript2.prototypejs/nbproject/project.properties
+++ b/webcommon/javascript2.prototypejs/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
diff --git a/webcommon/javascript2.prototypejs/src/org/netbeans/modules/javascript2/prototypejs/model/CreateInterceptor.java b/webcommon/javascript2.prototypejs/src/org/netbeans/modules/javascript2/prototypejs/model/CreateInterceptor.java
index 708a6b1..6b70fd5 100644
--- a/webcommon/javascript2.prototypejs/src/org/netbeans/modules/javascript2/prototypejs/model/CreateInterceptor.java
+++ b/webcommon/javascript2.prototypejs/src/org/netbeans/modules/javascript2/prototypejs/model/CreateInterceptor.java
@@ -74,7 +74,7 @@
                 JsObject newObject = ((JsObject) scope).getProperty(objectName);
                 if (newObject != null) {
                     JsObject constructor = configObject.getProperty(INITIALIZE_METHOD_NAME);
-                    if (constructor != null && constructor instanceof JsFunction) {
+                    if (constructor instanceof JsFunction) {
                         // we need to replace the original object with this constructor
                         List<Identifier> paramNames = new ArrayList<>();
                         for (JsObject param : ((JsFunction) constructor).getParameters()) {
diff --git a/webcommon/javascript2.requirejs/nbproject/project.properties b/webcommon/javascript2.requirejs/nbproject/project.properties
index d0a9fa5..ec4cf73 100644
--- a/webcommon/javascript2.requirejs/nbproject/project.properties
+++ b/webcommon/javascript2.requirejs/nbproject/project.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
diff --git a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/RequireJSCodeCompletion.java b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/RequireJSCodeCompletion.java
index 50f3e09..f12f60d 100644
--- a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/RequireJSCodeCompletion.java
+++ b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/RequireJSCodeCompletion.java
@@ -330,7 +330,7 @@
     
     @Override
     public String getHelpDocumentation(ParserResult info, ElementHandle element) {
-        if (element != null && element instanceof FSCompletionItem.FSElementHandle) {
+        if (element instanceof FSCompletionItem.FSElementHandle) {
             Set<FileObject> representedFiles = ((FSCompletionItem.FSElementHandle)element).getRepresentedFiles();
             StringBuilder sb = new StringBuilder();
             for (Iterator<FileObject> iterator = representedFiles.iterator(); iterator.hasNext();) {
@@ -340,7 +340,7 @@
             }
             return sb.toString();
         }
-        if (element != null && element instanceof SimpleHandle.DocumentationHandle) {
+        if (element instanceof SimpleHandle.DocumentationHandle) {
             return ((SimpleHandle.DocumentationHandle)element).getDocumentation();
         }
         return null;
diff --git a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/ConfigInterceptor.java b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/ConfigInterceptor.java
index c53cf24..b589295 100644
--- a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/ConfigInterceptor.java
+++ b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/ConfigInterceptor.java
@@ -145,7 +145,7 @@
                     }
                 }
 
-                if (packages != null && packages instanceof JsArray) {
+                if (packages instanceof JsArray) {
                     Map<String, String> packagesMap = loadPackages(th, packages.getOffset());
                     if (packagesMap != null) {
                         // save packages to the index
diff --git a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/DefineInterceptor.java b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/DefineInterceptor.java
index ace4741..f2c322e 100644
--- a/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/DefineInterceptor.java
+++ b/webcommon/javascript2.requirejs/src/org/netbeans/modules/javascript2/requirejs/editor/model/DefineInterceptor.java
@@ -109,7 +109,7 @@
                 List<String> fqn = (List<String>) fArg.getValue();
                 JsObject posibleFunc = findJsObjectByName(globalObject, fqn);
 
-                if (posibleFunc != null && posibleFunc instanceof JsFunction) {
+                if (posibleFunc instanceof JsFunction) {
                     JsFunction defFunc = (JsFunction) posibleFunc;
                     List<String> paths = new ArrayList<>();
                     if (modules != null && snapshot != null) {
diff --git a/webcommon/javascript2.requirejs/test/qa-functional/src/org/netbeans/modules/javascript2/requirejs/GeneralRequire.java b/webcommon/javascript2.requirejs/test/qa-functional/src/org/netbeans/modules/javascript2/requirejs/GeneralRequire.java
index 09364b8..28e5221 100644
--- a/webcommon/javascript2.requirejs/test/qa-functional/src/org/netbeans/modules/javascript2/requirejs/GeneralRequire.java
+++ b/webcommon/javascript2.requirejs/test/qa-functional/src/org/netbeans/modules/javascript2/requirejs/GeneralRequire.java
@@ -247,7 +247,7 @@
             int count = 0;
             while (!text.isEmpty() && count < 20) {
                 eo.pushKey(KeyEvent.VK_Z, KeyEvent.CTRL_MASK);
-                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");;
+                text = eo.getText(eo.getLineNumber() + iOffset).replace("\r\n", "").replace("\n", "");
                 log(">>" + text + "<<");
                 count++;
             }
diff --git a/webcommon/javascript2.sdoc/nbproject/project.properties b/webcommon/javascript2.sdoc/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/javascript2.sdoc/nbproject/project.properties
+++ b/webcommon/javascript2.sdoc/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/javascript2.types/nbproject/org-netbeans-modules-javascript2-types.sig b/webcommon/javascript2.types/nbproject/org-netbeans-modules-javascript2-types.sig
index 8bbc0c0..ac32cf2 100644
--- a/webcommon/javascript2.types/nbproject/org-netbeans-modules-javascript2-types.sig
+++ b/webcommon/javascript2.types/nbproject/org-netbeans-modules-javascript2-types.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/javascript2.types/nbproject/project.properties b/webcommon/javascript2.types/nbproject/project.properties
index 75a1a5e..0f73a11 100644
--- a/webcommon/javascript2.types/nbproject/project.properties
+++ b/webcommon/javascript2.types/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.autoload=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/languages.apacheconf/nbproject/project.properties b/webcommon/languages.apacheconf/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/languages.apacheconf/nbproject/project.properties
+++ b/webcommon/languages.apacheconf/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/languages.ini/nbproject/project.properties b/webcommon/languages.ini/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/languages.ini/nbproject/project.properties
+++ b/webcommon/languages.ini/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/lib.v8debug/nbproject/org-netbeans-lib-v8debug.sig b/webcommon/lib.v8debug/nbproject/org-netbeans-lib-v8debug.sig
index 72cf354..ecb28a5 100644
--- a/webcommon/lib.v8debug/nbproject/org-netbeans-lib-v8debug.sig
+++ b/webcommon/lib.v8debug/nbproject/org-netbeans-lib-v8debug.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.33
+#Version 1.34
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/lib.v8debug/nbproject/project.properties b/webcommon/lib.v8debug/nbproject/project.properties
index 3b21558..e40d34c 100644
--- a/webcommon/lib.v8debug/nbproject/project.properties
+++ b/webcommon/lib.v8debug/nbproject/project.properties
@@ -17,7 +17,7 @@
 
 is.autoload=true
 javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
 javadoc.apichanges=${basedir}/apichanges.xml
 
 javadoc.arch=${basedir}/arch.xml
diff --git a/webcommon/lib.v8debug/src/org/netbeans/lib/v8debug/connection/LinkedJSONObject.java b/webcommon/lib.v8debug/src/org/netbeans/lib/v8debug/connection/LinkedJSONObject.java
index 667b1d6..2bd66b7 100644
--- a/webcommon/lib.v8debug/src/org/netbeans/lib/v8debug/connection/LinkedJSONObject.java
+++ b/webcommon/lib.v8debug/src/org/netbeans/lib/v8debug/connection/LinkedJSONObject.java
@@ -31,7 +31,7 @@
  */
 public class LinkedJSONObject extends JSONObject {
 
-    LinkedHashMap linkedMap = new LinkedHashMap();
+    Map<Object, Object> linkedMap = new LinkedHashMap<>();
 
     public LinkedJSONObject() {
     }
@@ -44,7 +44,7 @@
     @Override
     public Object clone() {
         LinkedJSONObject ljo = new LinkedJSONObject();
-        ljo.linkedMap = (LinkedHashMap) linkedMap.clone();
+        ljo.linkedMap = new LinkedHashMap<>(linkedMap);
         return ljo;
     }
 
diff --git a/webcommon/libs.graaljs/nbproject/org-netbeans-libs-graaljs.sig b/webcommon/libs.graaljs/nbproject/org-netbeans-libs-graaljs.sig
index da4d186..cdee308 100644
--- a/webcommon/libs.graaljs/nbproject/org-netbeans-libs-graaljs.sig
+++ b/webcommon/libs.graaljs/nbproject/org-netbeans-libs-graaljs.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.17
+#Version 1.18
 
 CLSS public abstract com.oracle.js.parser.AbstractParser
 cons protected init(com.oracle.js.parser.Source,com.oracle.js.parser.ErrorManager,boolean,int)
diff --git a/webcommon/libs.jstestdriver/nbproject/org-netbeans-libs-jstestdriver.sig b/webcommon/libs.jstestdriver/nbproject/org-netbeans-libs-jstestdriver.sig
index cc5cfbe..942153d 100644
--- a/webcommon/libs.jstestdriver/nbproject/org-netbeans-libs-jstestdriver.sig
+++ b/webcommon/libs.jstestdriver/nbproject/org-netbeans-libs-jstestdriver.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.27
+#Version 1.28
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/libs.nashorn/nbproject/org-netbeans-libs-nashorn.sig b/webcommon/libs.nashorn/nbproject/org-netbeans-libs-nashorn.sig
index b0cfada..33b60d1 100644
--- a/webcommon/libs.nashorn/nbproject/org-netbeans-libs-nashorn.sig
+++ b/webcommon/libs.nashorn/nbproject/org-netbeans-libs-nashorn.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 2.2
+#Version 2.3
 
 CLSS public abstract com.oracle.js.parser.AbstractParser
 cons protected init(com.oracle.js.parser.Source,com.oracle.js.parser.ErrorManager,boolean,int)
diff --git a/webcommon/libs.plist/nbproject/org-netbeans-libs-plist.sig b/webcommon/libs.plist/nbproject/org-netbeans-libs-plist.sig
index 27278d5..6fddc80 100644
--- a/webcommon/libs.plist/nbproject/org-netbeans-libs-plist.sig
+++ b/webcommon/libs.plist/nbproject/org-netbeans-libs-plist.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.24
+#Version 1.25
 
 CLSS public final com.dd.plist.ASCIIPropertyListParser
 fld public final static char ARRAY_BEGIN_TOKEN = '('
diff --git a/webcommon/netserver/nbproject/org-netbeans-modules-netserver.sig b/webcommon/netserver/nbproject/org-netbeans-modules-netserver.sig
index 24f856c..784c2e4 100644
--- a/webcommon/netserver/nbproject/org-netbeans-modules-netserver.sig
+++ b/webcommon/netserver/nbproject/org-netbeans-modules-netserver.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.30
+#Version 1.31
 
 CLSS public abstract interface java.io.Serializable
 
diff --git a/webcommon/selenium2.webclient.mocha/nbproject/project.properties b/webcommon/selenium2.webclient.mocha/nbproject/project.properties
index 4091822..3b054ca 100644
--- a/webcommon/selenium2.webclient.mocha/nbproject/project.properties
+++ b/webcommon/selenium2.webclient.mocha/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/selenium2.webclient.protractor/nbproject/project.properties b/webcommon/selenium2.webclient.protractor/nbproject/project.properties
index 4091822..3b054ca 100644
--- a/webcommon/selenium2.webclient.protractor/nbproject/project.properties
+++ b/webcommon/selenium2.webclient.protractor/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/selenium2.webclient/nbproject/org-netbeans-modules-selenium2-webclient.sig b/webcommon/selenium2.webclient/nbproject/org-netbeans-modules-selenium2-webclient.sig
index f2a54c3..2b36121 100644
--- a/webcommon/selenium2.webclient/nbproject/org-netbeans-modules-selenium2-webclient.sig
+++ b/webcommon/selenium2.webclient/nbproject/org-netbeans-modules-selenium2-webclient.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.24
+#Version 1.25
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/selenium2.webclient/nbproject/project.properties b/webcommon/selenium2.webclient/nbproject/project.properties
index 4091822..3b054ca 100644
--- a/webcommon/selenium2.webclient/nbproject/project.properties
+++ b/webcommon/selenium2.webclient/nbproject/project.properties
@@ -15,5 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 is.eager=true
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/webcommon/web.clientproject.api/nbproject/org-netbeans-modules-web-clientproject-api.sig b/webcommon/web.clientproject.api/nbproject/org-netbeans-modules-web-clientproject-api.sig
index 94e0434..2c085d8 100644
--- a/webcommon/web.clientproject.api/nbproject/org-netbeans-modules-web-clientproject-api.sig
+++ b/webcommon/web.clientproject.api/nbproject/org-netbeans-modules-web-clientproject-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.121
+#Version 1.122
 
 CLSS public java.io.IOException
 cons public init()
diff --git a/webcommon/web.clientproject/nbproject/org-netbeans-modules-web-clientproject.sig b/webcommon/web.clientproject/nbproject/org-netbeans-modules-web-clientproject.sig
index fa1450f..1166c71 100644
--- a/webcommon/web.clientproject/nbproject/org-netbeans-modules-web-clientproject.sig
+++ b/webcommon/web.clientproject/nbproject/org-netbeans-modules-web-clientproject.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.104
+#Version 1.105
 
 CLSS public java.lang.Object
 cons public init()
diff --git a/webcommon/web.clientproject/src/org/netbeans/modules/web/clientproject/ClientSideProject.java b/webcommon/web.clientproject/src/org/netbeans/modules/web/clientproject/ClientSideProject.java
index 5f38fb4..40a83b6 100644
--- a/webcommon/web.clientproject/src/org/netbeans/modules/web/clientproject/ClientSideProject.java
+++ b/webcommon/web.clientproject/src/org/netbeans/modules/web/clientproject/ClientSideProject.java
@@ -808,7 +808,7 @@
     private static class SiteRootFolderListener implements FileChangeListener {
 
         private final ClientSideProject p;
-        private final FileObject siteRootFolder;;
+        private final FileObject siteRootFolder;
 
         SiteRootFolderListener(ClientSideProject p) {
             this.p = p;
diff --git a/webcommon/web.webkit.tooling/nbproject/project.properties b/webcommon/web.webkit.tooling/nbproject/project.properties
index ab06b41..0f4ec98 100644
--- a/webcommon/web.webkit.tooling/nbproject/project.properties
+++ b/webcommon/web.webkit.tooling/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.7
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/websvccommon/websvc.jaxwsmodelapi/nbproject/org-netbeans-modules-websvc-jaxwsmodelapi.sig b/websvccommon/websvc.jaxwsmodelapi/nbproject/org-netbeans-modules-websvc-jaxwsmodelapi.sig
index e34d693..9e4de5c 100644
--- a/websvccommon/websvc.jaxwsmodelapi/nbproject/org-netbeans-modules-websvc-jaxwsmodelapi.sig
+++ b/websvccommon/websvc.jaxwsmodelapi/nbproject/org-netbeans-modules-websvc-jaxwsmodelapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.44
+#Version 1.45
 
 CLSS public abstract interface java.awt.datatransfer.Transferable
 meth public abstract boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor)
diff --git a/websvccommon/websvc.jaxwsmodelapi/nbproject/project.properties b/websvccommon/websvc.jaxwsmodelapi/nbproject/project.properties
index c0af75f..0f4ec98 100644
--- a/websvccommon/websvc.jaxwsmodelapi/nbproject/project.properties
+++ b/websvccommon/websvc.jaxwsmodelapi/nbproject/project.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-javac.source=1.6
+javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/websvccommon/websvc.saas.api/nbproject/org-netbeans-modules-websvc-saas-api.sig b/websvccommon/websvc.saas.api/nbproject/org-netbeans-modules-websvc-saas-api.sig
index d1fce30..8528ddb 100644
--- a/websvccommon/websvc.saas.api/nbproject/org-netbeans-modules-websvc-saas-api.sig
+++ b/websvccommon/websvc.saas.api/nbproject/org-netbeans-modules-websvc-saas-api.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.48
+#Version 1.49
 
 CLSS public abstract interface java.awt.datatransfer.Transferable
 meth public abstract boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor)
diff --git a/websvccommon/websvc.saas.codegen/nbproject/org-netbeans-modules-websvc-saas-codegen.sig b/websvccommon/websvc.saas.codegen/nbproject/org-netbeans-modules-websvc-saas-codegen.sig
index b2bc376..8587e08 100644
--- a/websvccommon/websvc.saas.codegen/nbproject/org-netbeans-modules-websvc-saas-codegen.sig
+++ b/websvccommon/websvc.saas.codegen/nbproject/org-netbeans-modules-websvc-saas-codegen.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 1.47
+#Version 1.48
 
 CLSS public abstract java.awt.Component
 cons protected init()
diff --git a/websvccommon/websvc.saas.kit/nbproject/project.properties b/websvccommon/websvc.saas.kit/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/websvccommon/websvc.saas.kit/nbproject/project.properties
+++ b/websvccommon/websvc.saas.kit/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8
diff --git a/websvccommon/websvc.saas.ui/nbproject/project.properties b/websvccommon/websvc.saas.ui/nbproject/project.properties
index b200bb4..8c6d610 100644
--- a/websvccommon/websvc.saas.ui/nbproject/project.properties
+++ b/websvccommon/websvc.saas.ui/nbproject/project.properties
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 javac.compilerargs=-Xlint -Xlint:-serial
-javac.source=1.6
+javac.source=1.8