diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 082931e9ac..58cceae0c7 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -2,7 +2,7 @@
name: Bug report
about: Create a report to help us improve
title: ''
-labels: ''
+labels: 'ctg-bug'
assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/bug_report_easy.md b/.github/ISSUE_TEMPLATE/bug_report_easy.md
new file mode 100644
index 0000000000..ee17afeec0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report_easy.md
@@ -0,0 +1,44 @@
+---
+name: Bug report without tips
+about: Template without examples (for experienced QA engineers)
+title: ''
+labels: 'ctg-bug'
+assignees: ''
+
+---
+
+**Description**
+
+
+
+**To Reproduce**
+
+1. Install UnitTestBot plugin built from main in IntelliJ IDEA
+2. Open
+3. Generate tests for
+
+**Expected behavior**
+
+
+
+**Actual behavior**
+
+
+
+**Screenshots, logs**
+
+
+
+~~~java
+
+~~~
+
+**Environment**
+
+IntelliJ IDEA version -
+Project -
+JDK -
+
+**Additional context**
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index c5998337e0..0cb037bdd0 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -2,7 +2,7 @@
name: Feature request
about: Suggest an idea for the UTBot project
title: ''
-labels: ''
+labels: 'ctg-enhancement'
assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/test_request.md b/.github/ISSUE_TEMPLATE/test_request.md
index b93ca59e79..60f1ed48d8 100644
--- a/.github/ISSUE_TEMPLATE/test_request.md
+++ b/.github/ISSUE_TEMPLATE/test_request.md
@@ -1,20 +1,21 @@
---
name: Manual testing checklist
about: Checklist of testing process
-title: ''
-labels: ''
+title: 'Manual testing of build#'
+labels: 'ctg-qa'
assignees: ''
-
---
**Initial set-up**
*Check that the IntelliJ Idea UTBot plugin can be successfully installed*
-- [ ] Choose appropriate workflow from the next list (by default, use the latest one) https://github.com/UnitTestBot/UTBotJava/actions/workflows/publish-plugin-and-cli.yml
-- [ ] Open IntelliJ IDE
+- [ ] Choose appropriate [workflow from the list](https://github.com/UnitTestBot/UTBotJava/actions/workflows/build-and-run-tests.yml?query=branch%3Amain)
+- [ ] Download plugin
+- [ ] Check downloaded zip-file size < 100 MB
+- [ ] Open IntelliJ IDEA
- [ ] Remove previously installed UTBot plugin
-- [ ] Clone or reuse UTBot project (https://github.com/UnitTestBot/UTBotJava.git)
+- [ ] Clone or reuse [UTBot project](https://github.com/UnitTestBot/UTBotJava.git)
- [ ] Open the project in the IDE
- [ ] Install the downloaded plugin
@@ -26,31 +27,36 @@ assignees: ''
- [ ] Open the utbot-sample/src/main/java/org/utbot/examples/algorithms/ArraysQuickSort.java file
- [ ] Generate tests for the class
- [ ] Remove results
-- [ ] Generate tests for the methods
+- [ ] Generate and Run test for a method
+- [ ] Check only expected tests are red (failing on exceptions)
+- [ ] Check there are no yellow tests (failing on asserts)
-
**Manual scenario #2**
- [ ] Use default plugin settings
- [ ] Open the utbot-sample/src/main/java/org/utbot/examples/mock/CommonMocksExample.java file
-- [ ] Generate tests with all available (mocking) options
+- [ ] Generate and Run tests with different Mocking options
+- [ ] Check only expected tests are red (failing on exceptions)
+- [ ] Check there are no yellow tests (failing on asserts)
+- [ ] Check generated tests consistency, layout, naming, correct mocking
-
**Manual scenario #3**
-- [ ] Create a new Gradle project
-- [ ] Add a simple java file to test
-- [ ] Generate a test with a new test root
+- [ ] Create a new Gradle project with JDK 17
+- [ ] Add a sample java file to test
+- [ ] Generate a test in the existing test root
+- [ ] Check generated tests consistency, layout, naming
-
**Manual scenario #4**
-- [ ] Create a new Maven project
-- [ ] Add a simple java file to test
+- [ ] Create a new Maven project with JDK 8
+- [ ] Add a sample java file to test
- [ ] Generate a test with a new test root
+- [ ] Check generated tests consistency, layout, naming
**Manual scenario #5**
-- [ ] Create a new Idea project
-- [ ] Add a simple java file to test
+- [ ] Create a new IntelliJ project with JDK 11
+- [ ] Add a sample java file to test
- [ ] Generate tests for several classes
+- [ ] Check generated tests consistency, layout, naming
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..90ca761682
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,13 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+ - package-ecosystem: "gradle" # See documentation for possible values
+ directories:
+ - "/utbot-intellij"
+ - "/utbot-framework"
+ schedule:
+ interval: "weekly"
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index a9313c6e01..afc8194fb8 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,36 +1,61 @@
-# Description
+## Labels (hint)
-Substitute this text with a concise description of the proposed change. Emphasize, why particular solution was chosen.
+Choose the obligatory labels:
+- "ctg" (category): _bug-fix_, _enhancement_, _refactoring_, etc.
+- "comp" (component): _symbolic-engine_, _fuzzing_, _codegen_, etc.
+
+Feel free to apply more labels to your PR, e.g.: _lang-java_, _priority-minor_, _spec-performance_
+
+## Title (hint)
+
+Describe what you've changed or added in terms of functionality.
+
+For example:
+
+> Add summaries for the nested classes
+
+> Support test generation for paths with spaces in JavaScript
+
+> Remove packageName property not defined in Java 8
+
+Check that the title contains
+* no branch name
+* no GitHub nickname
+* no copy-pasted issue title
+
+## Description
Fixes # (issue)
-## Type of Change
+Add more info _if needed_:
+* context/purpose for implementing changes
+* detailed description of the changes made
+
+## How to test
-Please delete options that are not relevant.
+### Automated tests
-- Minor bug fix (non-breaking small changes)
-- Bug fix (non-breaking change which fixes an issue)
-- New feature (non-breaking change which adds functionality)
-- Breaking change (fix or feature that would cause existing functionality to not work as expected)
+Please specify the _automated tests_ for your code changes: you should either mention the existing tests or add the new ones.
-# How Has This Been Tested?
+For example:
-## Automated Testing
+> The proposed changes are verified with tests:
+> `utbot-fuzzing/src/test/kotlin/org/utbot/fuzzing/FuzzerSmokeTest.kt`
-Specify tests that help to verify the change automatically.
+### Manual tests
-_Example:_ org.utbot.examples.algorithms.BinarySearchTest
+If it is impossible to provide the automated tests, please reason why. Usually, it is relevant only for UI- or documentation-related PRs.
+If this is your case, share the detailed _manual scenarios_ that help to verify your changes.
-## Manual Scenario
+## Self-check list
-Please, provide several scenarios that you went through to verify that the change worked as expected.
+Check off the item if the statement is true. Hint: [x] is a marked item.
-# Checklist (remove irrelevant options):
+Please do not delete the list or its items.
-- [ ] The change followed the style guidelines of the UTBot project
-- [ ] Self-review of the code is passed
-- [ ] The change contains enough commentaries, particularly in hard-to-understand areas
-- [ ] New documentation is provided or existed one is altered
-- [ ] No new warnings
-- [ ] Tests that prove my change is effective
-- [ ] All tests pass locally with my changes
+- [ ] I've set the proper **labels** for my PR (at least, for category and component).
+- [ ] PR **title** and **description** are clear and intelligible.
+- [ ] I've added enough **comments** to my code, particularly in hard-to-understand areas.
+- [ ] The functionality I've repaired, changed or added is covered with **automated tests**.
+- [ ] **Manual tests** have been provided optionally.
+- [ ] The **documentation** for the functionality I've been working on is up-to-date.
\ No newline at end of file
diff --git a/.github/workflows/build-and-run-tests-from-branch.yml b/.github/workflows/build-and-run-tests-from-branch.yml
index e6e8798bac..f93be3be31 100644
--- a/.github/workflows/build-and-run-tests-from-branch.yml
+++ b/.github/workflows/build-and-run-tests-from-branch.yml
@@ -1,45 +1,369 @@
name: "[M] UTBot Java: build and run tests"
+permissions: read-all
+
on:
- workflow_dispatch
-
+ workflow_dispatch:
+ inputs:
+ commit_sha:
+ required: false
+ type: string
+ description: "Commit SHA (optional -- otherwise the last commit from the branch will be taken)"
+
+ workflow_call:
+ inputs:
+ commit_sha:
+ required: false
+ type: string
+
+env:
+ REGISTRY: ghcr.io
+ IMAGE_NAME: utbot_java_cli
+ DOCKERFILE_PATH: docker/Dockerfile_java_cli
+ # Environment variable setting gradle options.
+ #
+ # When configuring Gradle behavior you can use these methods,
+ # listed in order of highest to lowest precedence (first one wins):
+ # - Command-line flags such as --build-cache.
+ # These have precedence over properties and environment variables.
+ # - System properties such as systemProp.http.proxyHost=somehost.org
+ # stored in a gradle.properties file in a root project directory.
+ # - Gradle properties such as org.gradle.caching=true that are
+ # typically stored in a gradle.properties file in a project
+ # directory or in the GRADLE_USER_HOME.
+ # - Environment variables such as GRADLE_OPTS sourced by the
+ # environment that executes Gradle.
+ #
+ # read more at: https://docs.gradle.org/current/userguide/build_environment.html
+ #
+ # example of GRADLE_OPTS:
+# GRADLE_OPTS: "-XX:MaxHeapSize=2048m -Dorg.gradle.daemon=false -Dorg.gradle.parallel=false -Dkotlin.compiler.execution.strategy=in-process"
+ PUSHGATEWAY_HOSTNAME: monitoring.utbot.org
+ ELK_HOSTNAME: logs.utbot.org
+ FILEBEAT_DIR: /tmp/filebeat
+
jobs:
- build-and-run-tests:
+ prepare-matrices:
+ permissions: read-all
+ runs-on: ubuntu-latest
+ # Outputs are used for passing data to dependent jobs.
+ outputs:
+ framework-tests-matrix: ${{ steps.set-matrices.outputs.framework-tests-matrix }}
+ combined-projects-matrix: ${{ steps.set-matrices.outputs.combined-projects-matrix }}
+ steps:
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+ - id: set-matrices
+ name: Read and print config from framework-tests-matrix.json and combined-projects-matrix.json
+ run: |
+ FRAMEWORK_TESTS=$(echo $(cat .github/workflows/framework-tests-matrix.json))
+ COMBINED_PROJECTS=$(echo $(cat .github/workflows/combined-projects-matrix.json))
+ echo "framework-tests-matrix=$FRAMEWORK_TESTS" >> $GITHUB_OUTPUT
+ echo "combined-projects-matrix=$COMBINED_PROJECTS" >> $GITHUB_OUTPUT
+ echo $FRAMEWORK_TESTS
+ echo $COMBINED_PROJECTS
+
+
+ framework-tests:
+ permissions: read-all
+ needs: prepare-matrices
+ # Using matrices let create multiple jobs runs based on the combinations of the variables from matrices.
+ # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
+ strategy:
+ # The option forces to execute all jobs even though some of them have failed.
+ fail-fast: false
+ matrix: ${{ fromJson(needs.prepare-matrices.outputs.framework-tests-matrix) }}
+ runs-on: ubuntu-20.04
+ container:
+ image: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ volumes:
+ - "/home/runner/runners:/home/runner/runners"
+ - "/tmp/filebeat:/tmp/filebeat"
+ steps:
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ - name: Run monitoring
+ # secret uploaded using base64 encoding to have one-line output:
+ # cat file | base64 -w 0
+ continue-on-error: true
+ run: |
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh "${PUSHGATEWAY_HOSTNAME}" "${{ secrets.PUSHGATEWAY_USER }}" "${{ secrets.PUSHGATEWAY_PASSWORD }}"
+ echo "Please visit Grafana to check metrics: https://${PUSHGATEWAY_HOSTNAME}/d/rYdddlPWk/node-exporter-full?orgId=1&from=now-1h&to=now&var-service=github&var-instance=${GITHUB_RUN_ID}-${HOSTNAME}&refresh=1m"
+ echo ---
+ printf ${{ secrets.CA_CERT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/ca.crt
+ printf ${{ secrets.CLIENT_CRT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.crt
+ printf ${{ secrets.CLIENT_KEY }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.key
+ chmod +x ./scripts/project/logging.sh
+ ./scripts/project/logging.sh "${FILEBEAT_DIR}" "${{ secrets.ELK_HOST }}:5044"
+ echo "Please visit ELK to check logs https://logs.utbot.org/app/discover#/ using the following search pattern: github.env.HOSTNAME:\"${HOSTNAME}\" and github.env.GITHUB_RUN_ID:\"${GITHUB_RUN_ID}\" and not github.log_level:\"INFO\""
+
+ # cache will use the key you provided and contains the files you specify in path.
+ #
+ # When key matches an existing cache, it's called a cache hit, and the action
+ # restores the cached files to the path directory.
+ # When key doesn't match an existing cache, it's called a cache miss, and a new
+ # cache is automatically created if the job completes successfully.
+ #
+ # The cache action first searches for cache hits for key and restore-keys in the
+ # branch containing the workflow run. If there are no hits in the current branch,
+ # the cache action searches for key and restore-keys in the parent branch and
+ # upstream branches.
+ - uses: actions/cache@v3
+ with:
+ path: /root/.gradle/caches
+ # key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle', '*.gradle.kts', './*.gradle', './*.gradle.kts') }}
+ # hashFiles returns a single hash for the set of files that matches the path pattern
+ key: ${{ runner.os }}-gradle-framework-${{ hashFiles('./*.gradle*', './utbot-framework*/*.gradle*') }}
+ restore-keys: ${{ runner.os }}-gradle-framework
+
+ - name: Run tests
+ run: |
+ gradle --no-daemon --build-cache --no-parallel -PprojectType=Ultimate -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx4g :utbot-framework-test:test ${{ matrix.project.TESTS_TO_RUN }}
+
+ - name: Upload logs
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: logs ${{ matrix.project.PART_NAME }}
+ path: utbot-framework-test/logs/*
+
+ - name: Upload UTBot temp directory content
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: utbot_temp ${{ matrix.project.PART_NAME }}
+ path: |
+ /tmp/UTBot/generated*/*
+ /tmp/UTBot/utbot-instrumentedprocess-errors/*
+ - name: Upload test report if tests have failed
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: test_report ${{ matrix.project.PART_NAME }}
+ path: utbot-framework-test/build/reports/tests/test/*
+
+
+ spring-tests:
+ permissions: read-all
+ runs-on: ubuntu-20.04
+ container:
+ image: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ volumes:
+ - "/home/runner/runners:/home/runner/runners"
+ - "/tmp/filebeat:/tmp/filebeat"
+ steps:
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ - name: Run monitoring
+ continue-on-error: true
+ run: |
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh "${PUSHGATEWAY_HOSTNAME}" "${{ secrets.PUSHGATEWAY_USER }}" "${{ secrets.PUSHGATEWAY_PASSWORD }}"
+ echo "Please visit Grafana to check metrics: https://${PUSHGATEWAY_HOSTNAME}/d/rYdddlPWk/node-exporter-full?orgId=1&from=now-1h&to=now&var-service=github&var-instance=${GITHUB_RUN_ID}-${HOSTNAME}&refresh=1m"
+ echo ---
+ printf ${{ secrets.CA_CERT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/ca.crt
+ printf ${{ secrets.CLIENT_CRT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.crt
+ printf ${{ secrets.CLIENT_KEY }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.key
+ chmod +x ./scripts/project/logging.sh
+ ./scripts/project/logging.sh "${FILEBEAT_DIR}" "${{ secrets.ELK_HOST }}:5044"
+ echo "Please visit ELK to check logs https://logs.utbot.org/app/discover#/ using the following search pattern: github.env.HOSTNAME:\"${HOSTNAME}\" and github.env.GITHUB_RUN_ID:\"${GITHUB_RUN_ID}\" and not github.log_level:\"INFO\""
+
+ - uses: actions/cache@v3
+ with:
+ path: /root/.gradle/caches
+ key: ${{ runner.os }}-gradle-spring-${{ hashFiles('./*.gradle*', './utbot-spring*/*.gradle*') }}
+ restore-keys: ${{ runner.os }}-gradle-spring
+
+ - name: Run tests
+ run: |
+ cd utbot-spring-test
+ gradle --no-daemon --build-cache --no-parallel -PprojectType=Community -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx4g :utbot-spring-test:test
+
+ - name: Upload logs
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: logs utbot-spring-test
+ path: utbot-spring-test/logs/*
+ - name: Upload UTBot temp directory content
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: utbot_temp utbot-spring-test
+ path: |
+ /tmp/UTBot/generated*/*
+ /tmp/UTBot/utbot-instrumentedprocess-errors/*
+ - name: Upload test report if tests have failed
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: test_report utbot-spring-test
+ path: utbot-spring-test/build/reports/tests/test/*
+
+
+ combined-projects:
+ # This job does not need to wait for 'prepare-tests-matrix' result.
+ # GitHub allocates runners portionally. Framework tests are time consuming. That's why we want to force them
+ # to start execution early.
+ needs: prepare-matrices
+ # Using matrices let create multiple jobs runs based on the combinations of the variables from matrices.
+ # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
+ strategy:
+ # The option forces to execute all jobs even though some of them have failed.
+ fail-fast: false
+ matrix: ${{ fromJson(needs.prepare-matrices.outputs.combined-projects-matrix) }}
runs-on: ubuntu-20.04
+ container:
+ image: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ volumes:
+ - "/home/runner/runners:/home/runner/runners"
+ - "/tmp/filebeat:/tmp/filebeat"
steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- cache: gradle
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
-
- - name: Build and run tests in UTBot Java
- run: |
- export KOTLIN_HOME="/usr"
- gradle clean build --no-daemon
-
- - name: Upload utbot-framework logs
- if: ${{ always() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_logs
- path: utbot-framework/logs/*
-
- - name: Upload utbot-framework tests report artifacts if tests have failed
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_tests_report
- path: utbot-framework/build/reports/tests/test/*
-
- - name: Upload utbot-intellij tests report artifacts if tests have failed
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_intellij_tests_report
- path: utbot-intellij/build/reports/tests/test/*
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ - name: Run monitoring
+ run: |
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh "${PUSHGATEWAY_HOSTNAME}" "${{ secrets.PUSHGATEWAY_USER }}" "${{ secrets.PUSHGATEWAY_PASSWORD }}"
+ echo "Please visit Grafana to check metrics: https://${PUSHGATEWAY_HOSTNAME}/d/rYdddlPWk/node-exporter-full?orgId=1&from=now-1h&to=now&var-service=github&var-instance=${GITHUB_RUN_ID}-${HOSTNAME}&refresh=1m"
+ echo ---
+ printf ${{ secrets.CA_CERT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/ca.crt
+ printf ${{ secrets.CLIENT_CRT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.crt
+ printf ${{ secrets.CLIENT_KEY }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.key
+ chmod +x ./scripts/project/logging.sh
+ ./scripts/project/logging.sh "${FILEBEAT_DIR}" "${{ secrets.ELK_HOST }}:5044"
+ echo "Please visit ELK to check logs https://logs.utbot.org/app/discover#/ using the following search pattern: github.env.HOSTNAME:\"${HOSTNAME}\" and github.env.GITHUB_RUN_ID:\"${GITHUB_RUN_ID}\" and not github.log_level:\"INFO\""
+
+ - uses: actions/cache@v3
+ with:
+ path: /root/.gradle/caches
+ key: ${{ runner.os }}-gradle-combined-${{ hashFiles('./*.gradle*', './*/.gradle*') }}
+ restore-keys: ${{ runner.os }}-gradle-combined-
+ - name: Build project ${{ matrix.projects.first }}
+ id: first-project
+ run: |
+ cd ${{ matrix.projects.first }}
+ gradle build --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx4g
+
+ - name: Build project ${{ matrix.projects.second }}
+ if: ${{ steps.first-project.outcome != 'cancelled' && steps.first-project.outcome != 'skipped' }}
+ run: |
+ cd ${{ matrix.projects.second }}
+ gradle build --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx4g
+
+ - name: Upload test report if tests have failed
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: test_report ${{ matrix.projects.first }}
+ path: ${{ matrix.projects.first }}/build/reports/tests/test/*
+
+ - name: Upload test report if tests have failed
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: test_report ${{ matrix.projects.second }}
+ path: ${{ matrix.projects.second }}/build/reports/tests/test/*
+
+
+ single-project:
+ # This job does not need to wait for 'prepare-tests-matrix' result.
+ # GitHub allocates runners portionally. Framework tests are time consuming. That's why we want to force them
+ # to start execution early.
+ needs: prepare-matrices
+ # Using matrices let create multiple jobs runs based on the combinations of the variables from matrices.
+ # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
+ strategy:
+ # The option forces to execute all jobs even though some of them have failed.
+ fail-fast: false
+ matrix:
+ project: [utbot-core, utbot-java-fuzzing, utbot-gradle, utbot-junit-contest, utbot-sample]
+ runs-on: ubuntu-20.04
+ container:
+ image: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ volumes:
+ - "/home/runner/runners:/home/runner/runners"
+ - "/tmp/filebeat:/tmp/filebeat"
+ steps:
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ - name: Run monitoring
+ run: |
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh "${PUSHGATEWAY_HOSTNAME}" "${{ secrets.PUSHGATEWAY_USER }}" "${{ secrets.PUSHGATEWAY_PASSWORD }}"
+ echo "Please visit Grafana to check metrics: https://${PUSHGATEWAY_HOSTNAME}/d/rYdddlPWk/node-exporter-full?orgId=1&from=now-1h&to=now&var-service=github&var-instance=${GITHUB_RUN_ID}-${HOSTNAME}&refresh=1m"
+ echo ---
+ printf ${{ secrets.CA_CERT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/ca.crt
+ printf ${{ secrets.CLIENT_CRT }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.crt
+ printf ${{ secrets.CLIENT_KEY }} | base64 -d > ${{ env.FILEBEAT_DIR }}/client.key
+ chmod +x ./scripts/project/logging.sh
+ ./scripts/project/logging.sh "${FILEBEAT_DIR}" "${{ secrets.ELK_HOST }}:5044"
+ echo "Please visit ELK to check logs https://logs.utbot.org/app/discover#/ using the following search pattern: github.env.HOSTNAME:\"${HOSTNAME}\" and github.env.GITHUB_RUN_ID:\"${GITHUB_RUN_ID}\" and not github.log_level:\"INFO\""
+
+ - uses: actions/cache@v3
+ with:
+ path: /root/.gradle/caches
+ key: ${{ runner.os }}-gradle-${{ matrix.project }}-${{ hashFiles('./*.gradle*', format('{0}{1}{2}', './', matrix.project, '/*.gradle*')) }}
+ restore-keys: ${{ runner.os }}-gradle-${{ matrix.project }}-
+ - name: Run tests
+ run: |
+ cd ${{ matrix.project }}
+ gradle build --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx4g
+
+ - name: Upload test report if tests have failed
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: test_report ${{ matrix.project }}
+ path: ${{ matrix.project }}/build/reports/tests/test/*
diff --git a/.github/workflows/build-and-run-tests.yml b/.github/workflows/build-and-run-tests.yml
index 30af5f45ad..51d5a8b330 100644
--- a/.github/workflows/build-and-run-tests.yml
+++ b/.github/workflows/build-and-run-tests.yml
@@ -1,47 +1,40 @@
name: "UTBot Java: build and run tests"
-on:
+permissions: read-all
+
+on:
push:
- branches: [main]
+ branches:
+ - 'main'
+ - 'unit-test-bot/r**'
pull_request:
- branches: [main]
+ branches:
+ - 'main'
+ - 'unit-test-bot/r**'
jobs:
- build_and_run_tests:
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
-
- - name: Build and run tests in UTBot Java
- run: |
- export KOTLIN_HOME="/usr"
- gradle clean build --no-daemon
-
- - name: Upload utbot-framework logs
- if: ${{ always() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_logs
- path: utbot-framework/logs/*
-
- - name: Upload utbot-framework tests report artifacts if tests have failed
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_tests_report
- path: utbot-framework/build/reports/tests/test/*
-
- - name: Upload utbot-intellij tests report artifacts if tests have failed
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_intellij_tests_report
- path: utbot-intellij/build/reports/tests/test/*
+ build-and-run-tests:
+ uses: ./.github/workflows/build-and-run-tests-from-branch.yml
+ secrets: inherit
+
+ publish_plugin:
+ needs: build-and-run-tests
+ uses: ./.github/workflows/publish-plugin-from-branch.yml
+ with:
+ # upload artifacts on push action to main only
+ upload-artifact: ${{ github.event_name == 'push' }}
+ secrets: inherit
+
+ publish_cli:
+ needs: build-and-run-tests
+ uses: ./.github/workflows/publish-cli-from-branch.yml
+ with:
+ # upload artifacts on push action to main only
+ upload-artifact: ${{ github.event_name == 'push' }}
+ secrets: inherit
+
+ publish-cli-image:
+ needs: build-and-run-tests
+ if: ${{ github.event_name == 'push' }}
+ uses: ./.github/workflows/publish-cli-image-from-branch.yml
+ secrets: inherit
diff --git a/.github/workflows/collect-statistics.yml b/.github/workflows/collect-statistics.yml
new file mode 100644
index 0000000000..e330927f95
--- /dev/null
+++ b/.github/workflows/collect-statistics.yml
@@ -0,0 +1,295 @@
+name: "[M] UTBot Java: collect statistics"
+
+permissions: read-all
+
+on:
+ workflow_call:
+ inputs:
+ runners:
+ description: 'Runners number'
+ required: false
+ default: '1'
+ type: string
+ run_number:
+ description: 'Number of run tries per runner (values greater than 1 are not supported with grafana)'
+ required: false
+ default: '1'
+ type: string
+ message_prefix:
+ description: 'Commit message prefix'
+ required: false
+ default: manual-run
+ type: string
+ push_results:
+ description: 'Push metrics into github'
+ required: false
+ default: false
+ type: boolean
+ send_to_grafana:
+ description: 'Send metrics to grafana'
+ required: false
+ default: false
+ type: boolean
+
+ workflow_dispatch:
+ inputs:
+ runners:
+ description: 'Runners number'
+ required: false
+ default: '1'
+ type: string
+ run_number:
+ description: 'Number of run tries per runner (values greater than 1 are not supported with grafana)'
+ required: false
+ default: '1'
+ type: string
+ message_prefix:
+ description: 'Commit message prefix'
+ required: false
+ default: manual-run
+ type: string
+ push_results:
+ description: 'Push metrics into github'
+ required: false
+ default: false
+ type: boolean
+ send_to_grafana:
+ description: 'Send metrics to grafana'
+ required: false
+ default: false
+ type: boolean
+
+env:
+ data_branch: monitoring-data
+ data_path: monitoring/data
+ monitoring_projects: monitoring/projects/
+ push_script: monitoring/push_with_rebase.sh
+ PUSHGATEWAY_HOSTNAME: monitoring.utbot.org
+ PUSHGATEWAY_ADDITIONAL_PATH: /pushgateway-custom
+ PROM_ADDITIONAL_LABELS: /service/github
+
+jobs:
+ setup_matrix:
+ runs-on: ubuntu-latest
+ outputs:
+ projects: ${{ steps.set-matrix.outputs.projects }}
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Create matrix
+ id: set-matrix
+ shell: bash
+ run: |
+ read -r -a projects <<< $(ls --format=horizontal --indicator-style=none $monitoring_projects)
+ projects=(${projects[@]/#/\"})
+ projects=(${projects[@]/%/\"})
+ printf -v projects '%s,' "${projects[@]}"
+ projects=$(echo [${projects%,}])
+ echo "projects=$projects" >> $GITHUB_OUTPUT
+ echo $projects
+
+ arr=$(echo [$(seq -s , ${{ inputs.runners }})])
+ echo "matrix=$arr" >> $GITHUB_OUTPUT
+ echo $arr
+
+ build_and_collect_statistics:
+ needs: setup_matrix
+ continue-on-error: true
+ strategy:
+ # temporary commented, remove completely after 10.23 if all pipelines worked well
+ #max-parallel: 3
+ matrix:
+ project: ${{ fromJson(needs.setup_matrix.outputs.projects) }}
+ value: ${{ fromJson(needs.setup_matrix.outputs.matrix) }}
+ runs-on: ubuntu-20.04
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ steps:
+ - name: Install git
+ run: |
+ apt-get update -y
+ apt-get install git -y
+ git config --global --add safe.directory $(pwd)
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Checkout monitoring data
+ uses: actions/checkout@v3
+ with:
+ ref: ${{ env.data_branch }}
+ path: ${{ env.data_path }}
+
+ - name: Expand system swap
+ shell: bash
+ # trying to configure swap on host from running container
+ run: |
+ docker run -d --rm --name busybox --privileged --net=host --pid=host --ipc=host --volume /:/host busybox sleep infinity
+ docker exec busybox /bin/sh -c 'chroot /host /bin/bash -c "swapoff /mnt/swapfile"'
+ docker exec busybox /bin/sh -c 'chroot /host /bin/bash -c "dd if=/dev/zero of=/mnt/swapfile bs=1M count=8192 oflag=append conv=notrunc"'
+ docker exec busybox /bin/sh -c 'chroot /host /bin/bash -c "mkswap /mnt/swapfile"'
+ docker exec busybox /bin/sh -c 'chroot /host /bin/bash -c "swapon /mnt/swapfile"'
+
+ - name: Run system monitoring
+ # secret uploaded using base64 encoding to have one-line output:
+ # cat file | base64 -w 0
+ continue-on-error: true
+ run: |
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh "${PUSHGATEWAY_HOSTNAME}" "${{ secrets.PUSHGATEWAY_USER }}" "${{ secrets.PUSHGATEWAY_PASSWORD }}"
+ echo "Please visit Grafana to check metrics: https://${PUSHGATEWAY_HOSTNAME}/d/rYdddlPWk/node-exporter-full?orgId=1&from=now-1h&to=now&var-service=github&var-instance=${GITHUB_RUN_ID}-${HOSTNAME}&refresh=1m"
+
+ - uses: actions/setup-python@v4
+ with:
+ python-version: '3.9'
+
+ - name: Build and run monitoring UTBot Java
+ run: |
+ gradle :utbot-junit-contest:monitoringJar
+ for i in $(seq ${{ inputs.run_number }})
+ do
+ java -jar \
+ --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED \
+ --add-opens java.base/java.lang.invoke=ALL-UNNAMED \
+ --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
+ --add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED \
+ --add-opens java.base/java.text=ALL-UNNAMED \
+ --add-opens java.base/java.time=ALL-UNNAMED \
+ --add-opens java.base/java.io=ALL-UNNAMED \
+ --add-opens java.base/java.nio=ALL-UNNAMED \
+ --add-opens java.base/java.nio.file=ALL-UNNAMED \
+ --add-opens java.base/java.net=ALL-UNNAMED \
+ --add-opens java.base/sun.security.util=ALL-UNNAMED \
+ --add-opens java.base/sun.reflect.generics.repository=ALL-UNNAMED \
+ --add-opens java.base/sun.net.util=ALL-UNNAMED \
+ --add-opens java.base/sun.net.fs=ALL-UNNAMED \
+ --add-opens java.base/java.security=ALL-UNNAMED \
+ --add-opens java.base/java.lang.ref=ALL-UNNAMED \
+ --add-opens java.base/java.math=ALL-UNNAMED \
+ --add-opens java.base/java.util.stream=ALL-UNNAMED \
+ --add-opens java.base/java.util=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \
+ --add-opens java.base/java.lang=ALL-UNNAMED \
+ --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
+ --add-opens java.base/sun.security.provider=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.event=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.jimage=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.jimage.decompressor=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.jmod=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.jtrfs=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.loader=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.logger=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.math=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.module=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.objectweb.asm.signature=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.objectweb.asm.tree.analysis=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.xml.sax=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.org.xml.sax.helpers=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.perf=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.platform=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.ref=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.util=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.util.xml=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.util.xml.impl=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.vm=ALL-UNNAMED \
+ --add-opens java.base/jdk.internal.vm.annotation=ALL-UNNAMED \
+ -Dutbot.monitoring.settings.path=$monitoring_projects/${{ matrix.project }}/monitoring.properties \
+ utbot-junit-contest/build/libs/monitoring.jar \
+ stats-$i.json
+ mv logs/utbot.log logs/utbot-$i.log
+ done
+
+ - name: Get current date
+ id: date
+ run: |
+ echo "date=$(date +'%Y-%m-%d-%H-%M-%S')" >> $GITHUB_OUTPUT
+ echo "timestamp=$(date +%s)" >> $GITHUB_OUTPUT
+ echo "last_month=$(date --date='last month' +%s)" >> $GITHUB_OUTPUT
+
+ - name: Get metadata
+ id: metadata
+ run: |
+ echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
+ echo "short_commit=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
+ echo "branch=$(git name-rev --name-only HEAD)" >> $GITHUB_OUTPUT
+ echo "build=$(date +'%Y.%-m')" >> $GITHUB_OUTPUT
+
+ - name: Insert metadata
+ id: insert
+ shell: bash
+ run: |
+ OUT_FILE="$data_path/$date-$short_commit-${{ matrix.project }}-${{ matrix.value }}.json"
+ echo "output=$OUT_FILE" >> $GITHUB_OUTPUT
+
+ INPUTS=($(seq ${{ inputs.run_number }}))
+ INPUTS=(${INPUTS[@]/#/stats-})
+ INPUTS=(${INPUTS[@]/%/.json})
+ INPUTS=${INPUTS[@]}
+ echo $INPUTS
+
+ python monitoring/insert_metadata.py \
+ --stats_file $INPUTS \
+ --output_file "$OUT_FILE" \
+ --commit $commit \
+ --branch $branch \
+ --build "$build" \
+ --timestamp $timestamp \
+ --source_type "github-action" \
+ --source_id $run_id
+ env:
+ date: ${{ steps.date.outputs.date }}
+ timestamp: ${{ steps.date.outputs.timestamp }}
+ commit: ${{ steps.metadata.outputs.commit }}
+ short_commit: ${{ steps.metadata.outputs.short_commit }}
+ branch: ${{ steps.metadata.outputs.branch }}
+ build: ${{ steps.metadata.outputs.build }}
+ run_id: ${{ github.run_id }}-${{ matrix.value }}
+
+ - name: Upload statistics
+ uses: actions/upload-artifact@v3
+ with:
+ name: statistics-${{ matrix.value }}-${{ matrix.project }}
+ path: ${{ steps.insert.outputs.output }}
+
+ - name: Commit and push statistics
+ if: ${{ inputs.push_results }}
+ run: |
+ chmod +x $push_script
+ ./$push_script
+ env:
+ target_branch: ${{ env.data_branch }}
+ target_directory: ${{ env.data_path }}
+ message: ${{ inputs.message_prefix }}-${{ steps.date.outputs.date }}
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Send metrics to grafana
+ if: ${{ inputs.send_to_grafana }}
+ run: |
+ python monitoring/prepare_metrics.py --stats_file $stats_file --output_file grafana_metrics.json
+ chmod +x scripts/project/json_to_prometheus.py
+ python3 scripts/project/json_to_prometheus.py grafana_metrics.json | curl -u "${{ secrets.PUSHGATEWAY_USER }}:${{ secrets.PUSHGATEWAY_PASSWORD }}" --data-binary @- "https://${PUSHGATEWAY_HOSTNAME}${PUSHGATEWAY_ADDITIONAL_PATH}/metrics/job/pushgateway-custom/instance/run-${{ matrix.value }}-${{ matrix.project }}${PROM_ADDITIONAL_LABELS}"
+ echo "Please visit Grafana to check metrics: https://monitoring.utbot.org/d/m6bagaD4z/utbot-nightly-statistic"
+ env:
+ stats_file: ${{ steps.insert.outputs.output }}
+
+ - name: Upload logs
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: logs-${{ matrix.value }}-${{ matrix.project }}
+ path: logs/
+
+ - name: Upload artifacts
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: generated-${{ matrix.value }}-${{ matrix.project }}
+ path: |
+ /tmp/UTBot/generated*/*
diff --git a/.github/workflows/combined-projects-matrix.json b/.github/workflows/combined-projects-matrix.json
new file mode 100644
index 0000000000..83130dd191
--- /dev/null
+++ b/.github/workflows/combined-projects-matrix.json
@@ -0,0 +1,20 @@
+{
+ "projects": [
+ {
+ "FIRST": "utbot-intellij",
+ "SECOND": "utbot-cli"
+ },
+ {
+ "FIRST": "utbot-instrumentation",
+ "SECOND": "utbot-instrumentation-tests"
+ },
+ {
+ "FIRST": "utbot-summary",
+ "SECOND": "utbot-summary-tests"
+ },
+ {
+ "FIRST": "utbot-api",
+ "SECOND": "utbot-framework-api"
+ }
+ ]
+}
diff --git a/.github/workflows/framework-tests-matrix.json b/.github/workflows/framework-tests-matrix.json
new file mode 100644
index 0000000000..121eed2a0d
--- /dev/null
+++ b/.github/workflows/framework-tests-matrix.json
@@ -0,0 +1,76 @@
+{
+ "project": [
+ {
+ "PART_NAME": "composite-part1",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.manual.*\""
+ },
+ {
+ "PART_NAME": "composite-part2",
+ "TESTS_TO_RUN": "--tests \"org.utbot.engine.*\" --tests \"org.utbot.framework.*\" --tests \"org.utbot.sarif.*\" --tests \"org.utbot.examples.taint.*\""
+ },
+ {
+ "PART_NAME": "composite-part3",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.stream.*\""
+ },
+ {
+ "PART_NAME": "collections-part1",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.collections.MapValuesTest\" --tests \"org.utbot.examples.collections.OptionalsTest\" --tests \"org.utbot.examples.collections.SetIteratorsTest\" --tests \"org.utbot.examples.collections.CustomerExamplesTest\" --tests \"org.utbot.examples.collections.GenericListsExampleTest\" --tests \"org.utbot.examples.collections.LinkedListsTest\" --tests \"org.utbot.examples.collections.ListAlgorithmsTest\""
+ },
+ {
+ "PART_NAME": "collections-part2",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.collections.SetsTest\" --tests \"org.utbot.examples.collections.ListIteratorsTest\" --tests \"org.utbot.examples.collections.ListWrapperReturnsVoidTest\" --tests \"org.utbot.examples.collections.MapEntrySetTest\" --tests \"org.utbot.examples.collections.MapKeySetTest\""
+ },
+ {
+ "PART_NAME": "examples-part1",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.annotations.*\" --tests \"org.utbot.examples.arrays.*\" --tests \"org.utbot.examples.casts.*\" --tests \"org.utbot.examples.controlflow.*\" --tests \"org.utbot.examples.enums.*\""
+ },
+ {
+ "PART_NAME": "examples-part2",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.invokes.*\" --tests \"org.utbot.examples.lambda.*\" --tests \"org.utbot.examples.make.symbolic.*\" --tests \"org.utbot.examples.math.*\" --tests \"org.utbot.examples.mixed.*\""
+ },
+ {
+ "PART_NAME": "examples-part3",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.primitives.*\""
+ },
+ {
+ "PART_NAME": "examples-part4",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.thirdparty.numbers.*\" --tests \"org.utbot.examples.types.*\" --tests \"org.utbot.examples.unsafe.*\" --tests \"org.utbot.examples.wrappers.*\" --tests \"org.utbot.examples.recursion.*\" --tests \"org.utbot.examples.statics.substitution.*\" --tests \"org.utbot.examples.stdlib.*\" --tests \"org.utbot.examples.structures.*\""
+ },
+ {
+ "PART_NAME": "examples-part5",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.strings.*\""
+ },
+ {
+ "PART_NAME": "examples-part6",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.strings11.*\""
+ },
+ {
+ "PART_NAME": "examples-part7",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.algorithms.*\""
+ },
+ {
+ "PART_NAME": "examples-part8",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.codegen.*\""
+ },
+ {
+ "PART_NAME": "examples-part9",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.mock.*\" --tests \"org.utbot.examples.models.*\" --tests \"org.utbot.examples.natives.*\" --tests \"org.utbot.examples.objects.*\" --tests \"org.utbot.examples.reflection.*\" --tests \"org.utbot.examples.threads.*\""
+ },
+ {
+ "PART_NAME": "examples-part10",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.exceptions.*\""
+ },
+ {
+ "PART_NAME": "examples-lists",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.collections.ListsPart1Test\" --tests \"org.utbot.examples.collections.ListsPart2Test\" --tests \"org.utbot.examples.collections.ListsPart3Test\""
+ },
+ {
+ "PART_NAME": "examples-maps-part1",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.collections.MapsPart1Test\""
+ },
+ {
+ "PART_NAME": "examples-maps-part2",
+ "TESTS_TO_RUN": "--tests \"org.utbot.examples.collections.MapsPart2Test\""
+ }
+ ]
+}
diff --git a/.github/workflows/issue-to-project.yml b/.github/workflows/issue-to-project.yml
index 07f44137e2..fc53eb2da5 100644
--- a/.github/workflows/issue-to-project.yml
+++ b/.github/workflows/issue-to-project.yml
@@ -1,5 +1,7 @@
name: Add issues to UTBot Java project
+permissions: read-all
+
on:
issues:
types:
@@ -14,9 +16,3 @@ jobs:
with:
project-url: https://github.com/orgs/UnitTestBot/projects/2
github-token: ${{ secrets.COPY_ISSUE_TO_PROJECT }}
-
- - uses: actions/add-to-project@main
- with:
- project-url: https://github.com/orgs/UnitTestBot/projects/5
- github-token: ${{ secrets.COPY_ISSUE_TO_PROJECT }}
-
diff --git a/.github/workflows/night-statistics-monitoring.yml b/.github/workflows/night-statistics-monitoring.yml
new file mode 100644
index 0000000000..b0b134521f
--- /dev/null
+++ b/.github/workflows/night-statistics-monitoring.yml
@@ -0,0 +1,18 @@
+name: "UTBot Java: night statistics monitoring"
+
+permissions: read-all
+
+on:
+ schedule:
+ - cron: '0 0 * * *'
+
+jobs:
+ run_monitoring:
+ uses: ./.github/workflows/collect-statistics.yml
+ secrets: inherit
+ with:
+ runners: 3
+ run_number: 1
+ message_prefix: night-monitoring
+ push_results: true
+ send_to_grafana: true
diff --git a/.github/workflows/public-rider-plugin.yml b/.github/workflows/public-rider-plugin.yml
new file mode 100644
index 0000000000..587a7cf7bb
--- /dev/null
+++ b/.github/workflows/public-rider-plugin.yml
@@ -0,0 +1,86 @@
+# This is a basic workflow that is manually triggered
+
+name: Publish Rider plugin
+
+permissions: read-all
+
+# Controls when the action will run. Workflow runs when manually triggered using the UI
+# or API.
+on:
+ workflow_dispatch:
+ # Inputs the workflow accepts.
+ inputs:
+ minor-release:
+ type: choice
+ description: "It adds minor release indicator to version."
+ required: true
+ default: 'none'
+ options:
+ - 'none'
+ - '1'
+ - '2'
+ - '3'
+ - '4'
+
+ version-postfix:
+ type: choice
+ description: "It adds alpha or beta postfix to version."
+ required: true
+ default: no-postfix-prod
+ options:
+ - no-postfix-prod
+ - no-postfix
+ - alpha
+ - beta
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "greet"
+ public_rider_plugin:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-20.04
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Runs a single command using the runners shell
+ - name: Print environment variables
+ run: printenv
+
+ - uses: actions/checkout@v3
+
+ - name: Set environment variables
+ run: |
+ # "You can make an environment variable available to any subsequent steps in a workflow job by
+ # defining or updating the environment variable and writing this to the GITHUB_ENV environment file."
+ echo "VERSION="$(date +%Y).$(date +%-m).${GITHUB_RUN_NUMBER}"" >> $GITHUB_ENV
+ echo "POSTFIX=${{ github.event.inputs.version-postfix }}" >> $GITHUB_ENV
+
+ - name: Set production version
+ if: ${{ github.event.inputs.version-postfix == 'no-postfix-prod' || github.event.inputs.version-postfix == 'alpha' || github.event.inputs.version-postfix == 'beta' }}
+ run: |
+ echo "VERSION="$(date +%Y).$(date +%-m)"" >> $GITHUB_ENV
+
+ - name: Set version for minor release
+ if: ${{ github.event.inputs.minor-release != 'none' }}
+ run: |
+ echo "VERSION=${{ env.VERSION }}.${{ github.event.inputs.minor-release }}" >> $GITHUB_ENV
+
+ - name: Create version with postfix
+ if: ${{ (env.POSTFIX == 'alpha') || (env.POSTFIX == 'beta') }}
+ run:
+ echo "VERSION=${{ env.VERSION }}-${{ env.POSTFIX }}" >> $GITHUB_ENV
+
+ - name: Build UTBot Rider plugin
+ run: |
+ gradle clean :utbot-rider:buildPlugin --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g -PsemVer=${{ env.VERSION }} -PincludeRiderInBuild=true
+ cd utbot-rider/build/distributions
+ unzip utbot-rider-${{ env.VERSION }}.zip
+ rm utbot-rider-${{ env.VERSION }}.zip
+
+ - name: Archive UTBot Rider plugin
+ uses: actions/upload-artifact@v3
+ with:
+ name: utbot-rider-${{ env.VERSION }}
+ path: utbot-rider/build/distributions/*
+
diff --git a/.github/workflows/publish-cli-from-branch.yml b/.github/workflows/publish-cli-from-branch.yml
new file mode 100644
index 0000000000..217407d92e
--- /dev/null
+++ b/.github/workflows/publish-cli-from-branch.yml
@@ -0,0 +1,101 @@
+name: "[M] CLI: publish as archive"
+
+permissions: read-all
+
+on:
+ workflow_call:
+ inputs:
+ upload-artifact:
+ type: string
+ description: "Upload artifacts or not"
+ required: false
+ default: false
+ commit_sha:
+ required: false
+ type: string
+ description: "(optional) Commit SHA"
+ custom_version:
+ type: string
+ description: "Custom version"
+ required: false
+ default: ""
+
+ workflow_dispatch:
+ inputs:
+ upload-artifact:
+ type: choice
+ description: "Upload artifacts or not"
+ required: false
+ default: true
+ options:
+ - true
+ - false
+ commit_sha:
+ required: false
+ type: string
+ description: "(optional) Commit SHA"
+ custom_version:
+ type: string
+ description: "Custom version"
+ required: false
+ default: ""
+
+jobs:
+ publish_cli:
+ strategy:
+ fail-fast: false # force to execute all jobs even though some of them have failed
+ matrix:
+ configuration:
+ - plugin_type: IC
+ extra_options: "-PideType=IC"
+ lang: java
+ dir: utbot-cli
+ - plugin_type: IC
+ extra_options: "-PideType=IC"
+ lang: python
+ dir: utbot-cli-python
+ - plugin_type: IU
+ extra_options: "-PideType=IU"
+ lang: go
+ dir: utbot-cli-go
+ - plugin_type: IU
+ extra_options: "-PideType=IU"
+ lang: js
+ dir: utbot-cli-js
+ runs-on: ubuntu-20.04
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ steps:
+ - uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ # "You can make an environment variable available to any subsequent steps in a workflow job by
+ # defining or updating the environment variable and writing this to the GITHUB_ENV environment file."
+ - name: Setup custom version
+ if: ${{ github.event.inputs.custom_version != '' }}
+ run: |
+ echo "VERSION=${{ github.event.inputs.custom_version }}" >> $GITHUB_ENV
+ - name: Setup version
+ if: ${{ github.event.inputs.custom_version == '' }}
+ shell: bash
+ run: |
+ echo "VERSION=${GITHUB_REF_NAME:0:4}-$(date +%Y).$(date +%-m).${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV
+
+ - name: Print environment variables
+ run: printenv
+
+ - name: Build UTBot CLI
+ run: |
+ cd "${{ matrix.configuration.dir }}"
+ gradle clean build --no-daemon --build-cache --no-parallel ${{ matrix.configuration.extra_options }} -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g -PsemVer=${{ env.VERSION }}
+
+ - name: Archive UTBot CLI
+ if: ${{ inputs.upload-artifact == 'true' }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: utbot-cli-${{ matrix.configuration.lang }}-${{ env.VERSION }}
+ path: ${{ matrix.configuration.dir }}/build/libs/${{ matrix.configuration.dir }}-${{ env.VERSION }}.jar
diff --git a/.github/workflows/publish-cli-image-from-branch.yml b/.github/workflows/publish-cli-image-from-branch.yml
new file mode 100644
index 0000000000..d53b47dd87
--- /dev/null
+++ b/.github/workflows/publish-cli-image-from-branch.yml
@@ -0,0 +1,99 @@
+name: "[M] CLI: publish docker image"
+
+permissions: read-all
+
+on:
+ workflow_call:
+ workflow_dispatch:
+
+env:
+ REGISTRY: ghcr.io
+
+jobs:
+ publish-cli-image:
+ strategy:
+ fail-fast: false # force to execute all jobs even though some of them have failed
+ matrix:
+ configuration:
+ - image_name: utbot_java_cli
+ directory: utbot-cli
+ extra_options: ""
+ - image_name: utbot_js_cli
+ directory: utbot-cli-js
+ extra_options: "-PbuildType=ALL"
+ # we can't use utbot_python_cli image name because of the bug while pushing image
+ # ERROR: unexpected status: 403 Forbidden
+ - image_name: utbot_py_cli
+ directory: utbot-cli-python
+ extra_options: ""
+ runs-on: ubuntu-20.04
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ steps:
+ - uses: actions/checkout@v3
+
+ # "You can make an environment variable available to any subsequent steps in a workflow job by
+ # defining or updating the environment variable and writing this to the GITHUB_ENV environment file."
+ - name: Set environment variables
+ run: |
+ echo VERSION="$(date +%Y).$(date +%-m)" >> $GITHUB_ENV
+ echo DOCKER_TAG="$(date +%Y).$(date +%-m).$(date +%-d)-$(echo -n ${GITHUB_SHA} | cut -c 1-7)" >> $GITHUB_ENV
+
+ - name: Print environment variables
+ run: printenv
+
+ - name: Build UTBot CLI
+ run: |
+ cd ${{ matrix.configuration.directory }}
+ gradle build --no-daemon --build-cache --no-parallel ${{ matrix.configuration.extra_options }} -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g -x test -PsemVer=${{ env.VERSION }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2
+ with:
+ # fix of containerd issue, see https://github.com/containerd/containerd/issues/7972
+ # could be removed as soon as new containerd version will be released and included in buildkit
+ driver-opts: |
+ image=moby/buildkit:v0.10.6
+
+ - name: Log in to the Container registry
+ uses: docker/login-action@v2
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Cache Docker layers
+ uses: actions/cache@v3
+ with:
+ path: /tmp/.buildx-cache
+ key: ${{ runner.os }}-buildx-${{ matrix.configuration.image_name }}-${{ github.sha }}
+ restore-keys: |
+ ${{ runner.os }}-buildx-${{ matrix.configuration.image_name }}-
+
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v4
+ with:
+ images: ${{ env.REGISTRY }}/${{ github.repository }}/${{ matrix.configuration.image_name }}
+ tags: |
+ type=raw,value=${{ env.DOCKER_TAG }}
+
+ - name: Build and push
+ uses: docker/build-push-action@v4
+ with:
+ context: .
+ push: true
+ tags: |
+ ${{ steps.meta.outputs.tags }}
+ cache-from: type=local,src=/tmp/.buildx-cache
+ cache-to: type=local,dest=/tmp/.buildx-cache-new
+ file: ${{ matrix.configuration.directory }}/Dockerfile
+ build-args: |
+ ARTIFACT_PATH=${{ matrix.configuration.directory }}/build/libs/${{ matrix.configuration.directory }}-${{ env.VERSION }}.jar
+
+ # Temp fix
+ # https://github.com/docker/build-push-action/issues/252
+ # https://github.com/moby/buildkit/issues/1896
+ - name: Move cache
+ run: |
+ rm -rf /tmp/.buildx-cache
+ mv /tmp/.buildx-cache-new /tmp/.buildx-cache
diff --git a/.github/workflows/publish-cli-image.yml b/.github/workflows/publish-cli-image.yml
deleted file mode 100644
index fbc98c35a9..0000000000
--- a/.github/workflows/publish-cli-image.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-name: "CLI: publish image"
-on:
- push:
- branches: [main]
-
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: utbot_java_cli
- DOCKERFILE_PATH: docker/Dockerfile_java_cli
-
-jobs:
- build-and-publish-docker:
- runs-on: ubuntu-20.04
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Set timezone
- uses: szenius/set-timezone@v1.0
- with:
- timezoneLinux: "Europe/Moscow"
-
- - name: Set environment variables
- run:
- echo "COMMIT_SHORT_SHA="$(git rev-parse --short HEAD)"" >> $GITHUB_ENV
-
- - name: Set docker tag
- run:
- echo "DOCKER_TAG="$(date +%Y).$(date +%-m).$(date +%-d)-${{ env.COMMIT_SHORT_SHA }}"" >> $GITHUB_ENV
-
- - name: Log in to the Container registry
- uses: docker/login-action@v1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v1
-
- - name: Cache Docker layers
- uses: actions/cache@v2
- with:
- path: /tmp/.buildx-cache
- key: ${{ runner.os }}-buildx-${{ github.sha }}
- restore-keys: |
- ${{ runner.os }}-buildx-
-
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v3
- with:
- images: ${{ env.REGISTRY }}/${{ github.repository }}/${{ env.IMAGE_NAME }}
- tags: |
- type=raw,value=${{ env.DOCKER_TAG }}
-
- - name: Docker Buildx (build and push)
- run: |
- docker buildx build \
- -f ${{ env.DOCKERFILE_PATH }} \
- --cache-from "type=local,src=/tmp/.buildx-cache" \
- --cache-to "type=local,dest=/tmp/.buildx-cache-new" \
- --tag ${{ steps.meta.outputs.tags }} \
- --build-arg ACCESS_TOKEN=${{ secrets.GITHUB_TOKEN }} \
- --push .
-
- # Temp fix
- # https://github.com/docker/build-push-action/issues/252
- # https://github.com/moby/buildkit/issues/1896
- - name: Move cache
- run: |
- rm -rf /tmp/.buildx-cache
- mv /tmp/.buildx-cache-new /tmp/.buildx-cache
diff --git a/.github/workflows/publish-on-github-packages.yml b/.github/workflows/publish-on-github-packages.yml
index 9fb1e3e2cf..31bbbfd47f 100644
--- a/.github/workflows/publish-on-github-packages.yml
+++ b/.github/workflows/publish-on-github-packages.yml
@@ -1,60 +1,43 @@
name: "[M] Publish on GitHub Packages"
+permissions: read-all
+
on:
workflow_dispatch:
inputs:
- commit-sha:
+ commit_sha:
type: string
required: true
description: "commit SHA: e.g. cab4799c"
jobs:
+ build-and-run-tests:
+ if: ${{ github.actor == 'korifey' || github.actor == 'denis-fokin' || github.actor == 'victoriafomina' || github.actor == 'bissquit' }}
+ uses: ./.github/workflows/build-and-run-tests-from-branch.yml
+ with:
+ commit_sha: ${{ github.event.inputs.commit_sha }}
+ secrets: inherit
+
publish_on_github_packages:
- if: ${{ github.actor == 'korifey' || github.actor == 'denis-fokin' || github.actor == 'victoriafomina' ||
- github.actor == 'bissquit' }}
+ needs: build-and-run-tests
runs-on: ubuntu-20.04
- permissions:
- packages: write
- contents: read
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- cache: gradle
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
-
- - name: Check out ${{ github.event.inputs.commit-sha }} commit
+ - name: Print environment variables
+ run: printenv
+
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
git fetch
- git checkout ${{ github.event.inputs.commit-sha }}
-
- - name: "UTBot Java: build and run tests"
- run: |
- export KOTLIN_HOME="/usr"
- gradle clean build --no-daemon
-
- - name: Upload utbot-framework logs
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_logs
- path: utbot-framework/logs/*
-
- - name: Upload utbot-framework tests report artifacts if tests have failed
- if: ${{ failure() }}
- uses: actions/upload-artifact@v2
- with:
- name: utbot_framework_tests_report
- path: utbot-framework/build/reports/tests/test/*
-
- - uses: gradle/gradle-build-action@v2
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ - uses: gradle/gradle-build-action@v2.9.0
with:
- gradle-version: 6.8
+ gradle-version: 7.4.2
arguments: publish
env:
GITHUB_ACTOR: ${{ github.actor }}
diff --git a/.github/workflows/publish-plugin-and-cli-from-branch.yml b/.github/workflows/publish-plugin-and-cli-from-branch.yml
deleted file mode 100644
index af6006cb32..0000000000
--- a/.github/workflows/publish-plugin-and-cli-from-branch.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-name: "[M] Plugin and CLI: publish as archives"
-
-on:
- workflow_dispatch:
- inputs:
- version-postfix:
- type: choice
- description: "It adds alpha or beta postfix to version."
- required: true
- default: no-postfix
- options:
- - no-postfix
- - alpha
- - beta
-
-jobs:
- publish_plugin_and_cli:
- runs-on: ubuntu-20.04
-
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- cache: gradle
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
-
- - name: Set environment variables
- run: |
- echo "VERSION="$(date +%Y).$(date +%-m)"" >> $GITHUB_ENV
- echo "POSTFIX=${{ github.event.inputs.version-postfix }}" >> $GITHUB_ENV
-
- - name: Create version with postfix
- if: ${{ (env.POSTFIX == 'alpha') || (env.POSTFIX == 'beta') }}
- run:
- echo "VERSION=${{ env.VERSION }}-${{ env.POSTFIX }}" >> $GITHUB_ENV
-
- - name: Build UTBot IntelliJ IDEA plugin
- run: |
- export KOTLIN_HOME="/usr"
- gradle buildPlugin --no-daemon -PsemVer=${{ env.VERSION }}
- cd utbot-intellij/build/distributions
- unzip utbot-intellij-${{ env.VERSION }}.zip
- rm utbot-intellij-${{ env.VERSION }}.zip
-
- - name: Archive UTBot IntelliJ IDEA plugin
- uses: actions/upload-artifact@v2
- with:
- name: utbot-intellij-${{ env.VERSION }}
- path: utbot-intellij/build/distributions/*
-
- - name: Build UTBot CLI
- run: |
- export KOTLIN_HOME="/usr"
- cd utbot-cli
- gradle clean build --no-daemon -PsemVer=${{ env.VERSION }}
- cd build/libs
-
- - name: Archive UTBot CLI
- uses: actions/upload-artifact@v2
- with:
- name: utbot-cli-${{ env.VERSION }}
- path: utbot-cli/build/libs/utbot-cli-${{ env.VERSION }}.jar
diff --git a/.github/workflows/publish-plugin-and-cli.yml b/.github/workflows/publish-plugin-and-cli.yml
deleted file mode 100644
index 5629063d3f..0000000000
--- a/.github/workflows/publish-plugin-and-cli.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: "Plugin and CLI: publish as archives"
-on:
- push:
- branches: [main]
-
-jobs:
- publish_plugin_and_cli:
- runs-on: ubuntu-20.04
-
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
-
- - name: Set environment variables
- run:
- echo "VERSION="$(date +%Y).$(date +%-m)"" >> $GITHUB_ENV
-
- - name: Build UTBot IntelliJ IDEA plugin
- run: |
- export KOTLIN_HOME="/usr"
- gradle buildPlugin --no-daemon -PsemVer=${{ env.VERSION }}
- cd utbot-intellij/build/distributions
- unzip utbot-intellij-${{ env.VERSION }}.zip
- rm utbot-intellij-${{ env.VERSION }}.zip
-
- - name: Archive UTBot IntelliJ IDEA plugin
- uses: actions/upload-artifact@v2
- with:
- name: utbot-intellij-${{ env.VERSION }}
- path: utbot-intellij/build/distributions/*
-
- - name: Build UTBot CLI
- run: |
- export KOTLIN_HOME="/usr"
- cd utbot-cli
- gradle clean build --no-daemon -PsemVer=${{ env.VERSION }}
- cd build/libs
-
- - name: Archive UTBot CLI
- uses: actions/upload-artifact@v2
- with:
- name: utbot-cli-${{ env.VERSION }}
- path: utbot-cli/build/libs/utbot-cli-${{ env.VERSION }}.jar
diff --git a/.github/workflows/publish-plugin-from-branch.yml b/.github/workflows/publish-plugin-from-branch.yml
new file mode 100644
index 0000000000..7fcb8c56c6
--- /dev/null
+++ b/.github/workflows/publish-plugin-from-branch.yml
@@ -0,0 +1,98 @@
+name: "[M] Plugin: publish as archive"
+
+permissions: read-all
+
+on:
+ workflow_call:
+ inputs:
+ upload-artifact:
+ type: string
+ description: "Upload artifacts or not"
+ required: false
+ default: false
+ commit_sha:
+ required: false
+ type: string
+ description: "(optional) Commit SHA"
+ custom_version:
+ type: string
+ description: "Custom version"
+ required: false
+ default: ""
+
+ workflow_dispatch:
+ inputs:
+ upload-artifact:
+ type: choice
+ description: "Upload artifacts or not"
+ required: false
+ default: true
+ options:
+ - true
+ - false
+ commit_sha:
+ required: false
+ type: string
+ description: "(optional) Commit SHA"
+ custom_version:
+ type: string
+ description: "Custom version"
+ required: false
+ default: ""
+
+jobs:
+ publish_plugin:
+ strategy:
+ fail-fast: false # force to execute all jobs even though some of them have failed
+ matrix:
+ configuration:
+ - plugin_type: IC
+ extra_options: "-PideType=IC -PprojectType=Community"
+ directory: utbot-intellij-main
+ - plugin_type: IU
+ extra_options: "-PideType=IU -PprojectType=Ultimate"
+ directory: utbot-intellij-main
+ - plugin_type: PY
+ extra_options: "-PideType=PY -PprojectType=Ultimate"
+ directory: utbot-python-pycharm
+ runs-on: ubuntu-20.04
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+ steps:
+ - uses: actions/checkout@v3
+ - name: Check out ${{ github.event.inputs.commit_sha }} commit
+ if: github.event.inputs.commit_sha != ''
+ run: |
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+ git fetch
+ git checkout ${{ github.event.inputs.commit_sha }}
+
+ # "You can make an environment variable available to any subsequent steps in a workflow job by
+ # defining or updating the environment variable and writing this to the GITHUB_ENV environment file."
+ - name: Setup custom version
+ if: ${{ github.event.inputs.custom_version != '' }}
+ run: |
+ echo "VERSION=${{ github.event.inputs.custom_version }}" >> $GITHUB_ENV
+ echo "VERSION_ARCHIVE=${{ github.event.inputs.custom_version }}" >> $GITHUB_ENV
+ - name: Setup version
+ if: ${{ github.event.inputs.custom_version == '' }}
+ shell: bash
+ run: |
+ echo "VERSION=$(date +%Y).$(date +%-m).${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV
+ echo "VERSION_ARCHIVE=${GITHUB_REF_NAME:0:4}-$(date +%Y).$(date +%-m).${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV
+
+ - name: Print environment variables
+ run: printenv
+
+ - name: Build UTBot IntelliJ IDEA plugin
+ run: |
+ gradle clean buildPlugin --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} ${{ matrix.configuration.extra_options }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g -PsemVer=${{ env.VERSION }}
+ cd ${{ matrix.configuration.directory }}/build/distributions
+ unzip ${{ matrix.configuration.directory }}-${{ env.VERSION }}.zip
+ rm ${{ matrix.configuration.directory }}-${{ env.VERSION }}.zip
+
+ - name: Archive UTBot IntelliJ IDEA plugin
+ if: ${{ inputs.upload-artifact == 'true' }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: utbot-intellij-${{ matrix.configuration.plugin_type }}-${{ env.VERSION_ARCHIVE }}
+ path: ${{ matrix.configuration.directory }}/build/distributions/*
diff --git a/.github/workflows/run-chosen-tests-from-branch.yml b/.github/workflows/run-chosen-tests-from-branch.yml
index 968a2982fe..2e24f6fbd1 100644
--- a/.github/workflows/run-chosen-tests-from-branch.yml
+++ b/.github/workflows/run-chosen-tests-from-branch.yml
@@ -1,6 +1,7 @@
-
name: "[M] Run chosen tests"
+permissions: read-all
+
on:
workflow_dispatch:
inputs:
@@ -12,49 +13,64 @@ on:
options:
- utbot-analytics
- utbot-cli
+ - utbot-core
- utbot-framework-api
- utbot-framework
- - utbot-fuzzers
+ - utbot-java-fuzzing
- utbot-gradle
- utbot-instrumentation-tests
- utbot-instrumentation
- utbot-intellij
+ - utbot-sample
+ - utbot-summary
+ - utbot-summary-tests
tests-bunch-name:
type: string
required: true
- description: "{package-name}.{class-name}.{test-name-optional}"
-
+ description: "{package-name}.{class-name-optional}.{test-name-optional}"
+
+env:
+ PUSHGATEWAY_HOSTNAME: monitoring.utbot.org
+
jobs:
run-chosen-tests:
runs-on: ubuntu-20.04
-
+ container: unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+
steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- java-version: '8'
- distribution: 'zulu'
- java-package: jdk+fx
- cache: gradle
- - uses: gradle/gradle-build-action@v2
- with:
- gradle-version: 6.8
+ - name: Print environment variables
+ run: printenv
+
+ - uses: actions/checkout@v3
+
+ - name: Run monitoring
+ run: |
+ echo Find your Prometheus metrics using label {instance=\"${GITHUB_RUN_ID}-${HOSTNAME}\"}
+ chmod +x ./scripts/project/monitoring.sh
+ ./scripts/project/monitoring.sh ${PUSHGATEWAY_HOSTNAME} ${{ secrets.PUSHGATEWAY_USER }} ${{ secrets.PUSHGATEWAY_PASSWORD }}
- name: Run chosen tests
run: |
- export KOTLIN_HOME="/usr"
- gradle :${{ github.event.inputs.project-name }}:test --tests ${{ github.event.inputs.tests-bunch-name }}
+ gradle :${{ github.event.inputs.project-name }}:test -PprojectType=Ultimate --no-daemon --build-cache --no-parallel -PgithubActor=${{ github.actor }} -PgithubToken=${{ secrets.PACKAGES_RO_TOKEN }} -Dorg.gradle.jvmargs=-Xmx2g -Dkotlin.daemon.jvm.options=-Xmx4g --tests ${{ github.event.inputs.tests-bunch-name }}
- name: Upload ${{ github.event.inputs.project-name }} tests report if tests have failed
if: ${{ failure() }}
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: ${{ github.event.inputs.project-name }}-tests-report
path: ${{ github.event.inputs.project-name }}/build/reports/tests/test/*
- - name: Upload utbot-framework logs if utbot-framework tests have failed
- if: ${{ failure() || (github.event.inputs.project-name == 'utbot-framework') }}
- uses: actions/upload-artifact@v2
+ - name: Upload generated tests
+ if: ${{ always() && github.event.inputs.project-name == 'utbot-framework' }}
+ uses: actions/upload-artifact@v3
+ with:
+ name: generated-tests
+ path: |
+ /tmp/UTBot/generated*/*
+ /tmp/UTBot/utbot-instrumentedprocess-errors/*
+ - name: Upload utbot-framework logs
+ if: ${{ always() && github.event.inputs.project-name == 'utbot-framework' }}
+ uses: actions/upload-artifact@v3
with:
- name: utbot_framework_logs
+ name: utbot-framework-logs
path: utbot-framework/logs/*
diff --git a/.gitignore b/.gitignore
index 7db9331a69..5b11d761cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,7 @@ target/
.idea/
.gradle/
*.log
+*.rdgen
+utbot-intellij/src/main/resources/settings.properties
+__pycache__
+.dmypy.json
diff --git a/.run/Debug All.run.xml b/.run/Debug All.run.xml
new file mode 100644
index 0000000000..a0cf8bd64d
--- /dev/null
+++ b/.run/Debug All.run.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Debug Engine Process.run.xml b/.run/Debug Engine Process.run.xml
new file mode 100644
index 0000000000..6a2c301a76
--- /dev/null
+++ b/.run/Debug Engine Process.run.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Debug Instrumented Process.run.xml b/.run/Debug Instrumented Process.run.xml
new file mode 100644
index 0000000000..b1c4187629
--- /dev/null
+++ b/.run/Debug Instrumented Process.run.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Debug Spring Analyzer Process.run.xml b/.run/Debug Spring Analyzer Process.run.xml
new file mode 100644
index 0000000000..91c80ebf73
--- /dev/null
+++ b/.run/Debug Spring Analyzer Process.run.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Listen for Engine Process.run.xml b/.run/Listen for Engine Process.run.xml
new file mode 100644
index 0000000000..292a84b296
--- /dev/null
+++ b/.run/Listen for Engine Process.run.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Listen for Instrumented Process.run.xml b/.run/Listen for Instrumented Process.run.xml
new file mode 100644
index 0000000000..d3ef5650cf
--- /dev/null
+++ b/.run/Listen for Instrumented Process.run.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Listen for Spring Analyzer Process.run.xml b/.run/Listen for Spring Analyzer Process.run.xml
new file mode 100644
index 0000000000..7b9505048f
--- /dev/null
+++ b/.run/Listen for Spring Analyzer Process.run.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Run IDEA.run.xml b/.run/Run IDEA.run.xml
new file mode 100644
index 0000000000..4c6116ceb2
--- /dev/null
+++ b/.run/Run IDEA.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/.run/Run Rider.run.xml b/.run/Run Rider.run.xml
new file mode 100644
index 0000000000..2ab584d596
--- /dev/null
+++ b/.run/Run Rider.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a95592c8f..9ef2a4bb5f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,36 +1,117 @@
-# How to contribute to UTBot Java
+# UnitTestBot contributing guide
-To begin with, we are very thankful for your time and willingness to read this and contribute!
+---
-The following guideline should help you with suggesting changes to our project, so feel free to use it for your contribution. 😃
+## Welcome!
+Hello and thanks for reading this!
-## I\`ve found a bug! How to report?
+As the UnitTestBot core team we develop tools for automated unit test generation to help programmers test their code
+in a more effective way with less effort. We believe that software development is great fun when you spend your time
+finding creative solutions and automate the things you already know. If you are curious about making test generation
+fast, smart and reliable, we are happy to invite you for contributing!
-First of all, please check our [Issues](https://github.com/UnitTestBot/UTBotJava/issues) — this bug may have already been reported, and you just don\`t need to spend your time on a new one.
+We welcome absolutely everyone. With one big and kind request: please follow these guidelines to make our communication smooth and to keep UnitTestBot improving.
-If you haven\`t found the relevant issue, don\`t hesitate to [create a new one](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=bug_report.md&title=), including as much detail as possible — the pre-made template will assist you in it.
+## Contributions we are looking for
-In case you already have a PR with a solution, please remain so amazing and link it with the created issue.
+There are so many ways to contribute. Choose yours and find the relevant short guide below.
+| (1) Choose what you like and check the guideline: | (2) Contribute: |
+|-------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
+| [Reporting a bug](#Reporting-a-bug) | Create a [bug reporting issue](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=bug_report.md&title=) |
+| [Requesting a feature](#Requesting-a-feature) | Create a [feature suggestion issue](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=feature_request.md&title=) |
+| [Contributing the code (bug fix or feature implementation)](#Contributing-the-code-(bug-fix-or-feature-implementation)) | Create a pull request |
+| [Reproducing a reported bug](#Reproducing-a-reported-bug) | Comment on the issue |
+| [Testing a pull request](#Testing-a-pull-request) | Comment on the pull request |
+| [Improving documentation](#Improving-documentation) | Create an issue Create a pull request Comment on issues and PRs |
+| [Sharing ideas](#Sharing-ideas) | Start the [Discussion](https://github.com/UnitTestBot/UTBotJava/discussions) or join the existing one |
-## I have an improvement suggestion!
-Want a new feature or to change the existing one? We are very welcome your fresh ideas. 😃
+# How to submit a contribution
-Please [create an issue](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=feature_request.md&title=) with your proposal and describe your idea with full information about it. By adding some examples you also bring much happiness to our souls!
+## Reporting a bug
-Give us some time to review your proposal and provide you with our feedback. It will be decided who is preparing the pull request: we may need your help or we will take care of it all. 🙂
+1. Check if the bug (a true bug!) has already been reported: search through [UnitTestBot issues](https://github.com/UnitTestBot/UTBotJava/issues). Please, don't duplicate.
+2. Check with the [Naming and labeling conventions](docs/contributing/Conventions.md).
+3. Make sure you have all the necessary information as per [template](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=bug_report.md&title=) and create the bug reporting issue.
+## Requesting a feature
-## Coding conventions
-Our team adheres to the defined requirements to coding style to optimize for readability. You can take a look on this [Coding style guide](https://github.com/saveourtool/diktat/blob/master/info/guide/diktat-coding-convention.md) to better understand what we expect to see in your code.
+1. Check if the feature has already been requested: search through [UnitTestBot issues](https://github.com/UnitTestBot/UTBotJava/issues).
+2. Check with our [Naming and labeling conventions](docs/contributing/Conventions.md).
+3. Make sure you are able to provide all the necessary information as per [template](https://github.com/UnitTestBot/UTBotJava/issues/new?assignees=&labels=&template=feature_request.md&title=) and create the feature request issue.
+## Contributing the code (bug fix or feature implementation)
-## How to setup development environment?
+### "Good first issue"
-Please refer [Developer guide](https://github.com/UnitTestBot/UTBotJava/blob/main/DEVNOTE.md) to setup developer environment, build and run UTBot.
+If you have little experience in contributing, try to resolve the issues labeled as the ["good first"](https://github.com/UnitTestBot/UTBotJava/contribute) ones.
+### Small or "obvious" fixes
-## How to test you PR?
+Do you need to create an issue if you want to fix a bug?
-Currently, not all checks are automized. It's required to do manual testing after PR.
+* Quick fix → no issue → pull request.
+* Takes time to fix → detailed issue → pull request.
+
+### General flow for contributing code
+
+1. Make sure you've carefully read the [Legal notes](#Legal-notes)!
+2. Create your own fork of the code.
+3. Clone the forked repository to your local machine.
+4. Implement changes. Please refer to the [Developer guide](DEVNOTE.md) for **system requirements**, **code
+ style** and
+ **steps for building the project**.
+5. Test your code:
+ * Please, provide regression or integration tests for your code changes. If you don't do that, the reviewer can and highly likely **_will reject_** the PR. It is the contributor's responsibility to provide such tests or to reason why they are missing.
+ * When implementing something new, it's great to find real users and ask them to try out your feature — to prove
+ the necessity and quality of your suggestion.
+6. Check with the [Naming and labeling conventions](docs/contributing/Conventions.md).
+7. Create the pull request, and you'll see if the automated tests pass on GitHub. Your reviewer will possibly recommend
+ you more tests.
+
+## Reproducing a reported bug
+
+If you reproduce an existing issue and it helps to get some additional context on the problem, feel free to comment on the issue.
+
+## Testing a pull request
+
+You can merge a pull request into your local copy of the project and test the changes. If you find something you'd like to share, add the outcome of your testing in a comment on the pull request.
+
+## Improving documentation
+
+Here at UnitTestBot we regard documentation as code. It means that the general flow for writing and reviewing docs
+is the same as for the code. If you'd like to improve the existing docs or to add something new, please follow the flow:
+
+1. Make sure you've carefully read the [Legal notes](#Legal-notes)!
+2. Create your own fork of the code.
+3. Clone the forked repository to your local machine.
+4. Implement changes to docs (change the existing doc or create a new one). Usually, we create a new doc for a new feature, not for the small fixes. You are not obliged to write a detailed text about the feature you implement. You have to only describe it properly in both the related issue and the pull request, but it will be great if you still provide some docs.
+6. Check with the [Naming and labeling conventions](docs/contributing/Conventions.md).
+7. Create the pull request, and we'll review it.
+
+* You can request a new doc — create an issue, using the [guide for a feature request](#Requesting-a-feature).
+* You can comment on the docs-related issues or PRs.
+
+## Sharing ideas
+
+We have a lot of new ideas, but we always need more!
+
+These are our main areas of interest:
+
+* technologies for code analysis, generating unit tests, e. g. symbolic execution, fuzzing, machine learning, etc.;
+* real-life examples of using UnitTestBot, as well as possible use cases, scenarios and user stories;
+* practices and problems or UX research related to unit testing with or without automated test generation tools.
+
+If you are keen on these things too, please share your ideas with us. Even if they are sketchy and not ready for being implemented or even requested right now, go ahead and join the existing [Discussions](https://github.com/UnitTestBot/UTBotJava/discussions) or [start](https://github.com/UnitTestBot/UTBotJava/discussions/new) the new one.
+
+# Code review process
+Please choose [denis-fokin](https://github.com/denis-fokin) as a reviewer. He will reassign your PR to someone else from the core team, if necessary.
+
+We do our best in reviewing, but we can hardly specify the exact timeout for it. Be sure that we'll certainly answer your pull request!
+
+# Legal notes
+
+By contributing, you agree that your contributions will be licensed under the [Apache License 2.0](https://github.com/UnitTestBot/UTBotJava/blob/main/LICENSE).
+
+Feel free to [contact us directly](https://www.utbot.org/about) if that's a concern.
\ No newline at end of file
diff --git a/COPYRIGHT_HEADER.txt b/COPYRIGHT_HEADER.txt
new file mode 100644
index 0000000000..d405aac34e
--- /dev/null
+++ b/COPYRIGHT_HEADER.txt
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2022 UnitTestBot contributors (utbot.org)
+ *
+ * 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.
+ */
\ No newline at end of file
diff --git a/DEVNOTE.md b/DEVNOTE.md
index 3fe8ffb9da..a47be23490 100644
--- a/DEVNOTE.md
+++ b/DEVNOTE.md
@@ -1,49 +1,24 @@
-# UTBot Java Developer Guide
-
- Here are the steps for you to jump into UTBot Java.
-
-## Install UTBot Java from source
-1. Clone UTBot Java repository via [Git](https://github.com/UnitTestBot/UTBotJava.git)
-2. Open project in IDE
+# UnitTestBot developer guide
-
+---
-⚠️ Important don\`t forgets at this step:
+When you have the forked repository on your local machine, you are almost ready to build your own version of UnitTestBot.
-✔️ check your Project SDK and Gradle SDK are of 1.8 Java version.
+💡 Before you start coding, please check the [system requirements](https://github.com/UnitTestBot/UTBotJava/wiki/Check-system-requirements) and find instructions on
+configuring development environment.
-
-
+💡 Get to know the [code style](https://github.com/saveourtool/diktat/blob/master/info/guide/diktat-coding-convention.md) we are used to.
-✔️ check your System environment variables: the KOTLIN_HOME variable path should be set up
+## How to build UnitTestBot with your improvements
-
+The project structure is mostly straightforward and the modules are self-explanatory, e.g.:
+* ```utbot-framework``` — everything related to UnitTestBot engine (including tests);
+* ```utbot-intellij``` — IDE plugin implementation;
+* ```utbot-sample``` — a framework with examples to demonstrate engine capacity.
-3. Open Gradle tool window
-4. Launch Task utbot > Tasks > build > assemble
-
-
-
-5. Wait for the build to be completed
-
-Done! You\`re awesome and ready for digging the code. 😃
-
-
-## Development of UTBot Java with IntelliJ IDEA
-
-The majority of the code is written in Kotlin.
-
-The project is divided into Gradle subprojects. The most significant of them are:
-1. utbot-framework — all about the engine and tests for it
-
-2. utbot-intellij — IDE plugin
-
-3. utbot-sample — a framework with examples to demonstrate engine capacity
-
-## Testing
-
-The project contains many tests. They are usually placed in test root of the particular Gradle subproject.
-
-While developing, it\`s useful to run tests from utbot-framework subproject. The majority of tests from this subproject generate tests for samples from the utbot-sample subproject.
+Learn UnitTestBot from inside and implement changes. To verify your improvements open Gradle tool window in IntelliJ IDEA:
+* to _run/debug plugin_ in IntelliJ IDEA choose and run the task: **utbot → utbot-intellij → intellij → runIde**;
+* to _compile plugin_ choose and run the task: **utbot → utbot-intellij → intellij → buildPlugin**. The resulting ZIP
+ file is located at ```utbot-intellij/build/distributions```.
\ No newline at end of file
diff --git a/HowToUseLoggers.md b/HowToUseLoggers.md
index 0988afdf02..fdb3da4bed 100644
--- a/HowToUseLoggers.md
+++ b/HowToUseLoggers.md
@@ -18,7 +18,7 @@ The file is usually in the resource folder.
The easiest way is:
-- Go in the code that you are going to debug. Let’s assume it is a method in org.utbot.framework.plugin.api.UtBotTestCaseGenerator.
+- Go in the code that you are going to debug. Let’s assume it is a method in org.utbot.framework.plugin.api.TestCaseGenerator.
- Find out if there is a KotlinLogging object that is used to create a **logger**
- If such a logger exists, use the fully qualified class name as the logger name in the next steps
@@ -28,7 +28,7 @@ The easiest way is:
Open log4j2.xml and add the logger in the loggers section like this
```
-
+
```
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000000..15230c55f1
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,2 @@
+UnitTestBot
+Copyright 2022 UnitTestBot contributors (utbot.org)
\ No newline at end of file
diff --git a/README.md b/README.md
index 53ff4ab039..405c00028b 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,109 @@
-[](https://github.com/UnitTestBot/UTBotJava/actions/workflows/build-and-run-tests.yml)
+[](https://github.com/UnitTestBot/UTBotJava/actions/workflows/build-and-run-tests.yml)
[](https://github.com/UnitTestBot/UTBotJava/actions/workflows/publish-plugin-and-cli.yml)
-# What is UTBotJava?
+👉 Find UnitTestBot on [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/19445-unittestbot).
-UTBotJava generates test cases by code, trying to cover maximum statements and execution paths. We treat source code as source of truth assuming that behavior is correct and corresponds to initial user demand. Generated tests are placed in so-called regression suite. Thus, we fixate current behavior by generated test cases. Using UTBotJava developers obtain full control of their code. No future change can break the code without being noticed once it's covered with tests generated by UTBot. This way, modifications made by developers to an existing code are much safer. Hence, with the help of generated unit tests, UTBot provides dramatic code quality improvement.
+👉 Visit the [official UnitTestBot website](https://www.utbot.org/).
-# UTBot Java IntelliJ IDEA plugin
+# What is UnitTestBot?
-UTBot Java provides users with **IntelliJ IDEA** plugin.
+UnitTestBot is the tool for **automated unit test generation** and **precise code analysis**. It produces ready-to-use
+test
+cases for
+Java — with
+valid inputs and comments. It can even predict whether the tests fail or pass. You can analyze them, run them, show coverage — as if you've created them personally.
-_The plugin was tested on **Win64**, **Linux64** and **MacOSx86_64**._
+The **symbolic execution engine** paired with a **smart fuzzing technique** constitutes the core of UnitTestBot. It helps to **find errors** and **prevent regressions** in the code in a much more efficient way — UnitTestBot **maximizes path coverage** while **minimizing the number of tests and false positives**.
-# How to download IntelliJ IDEA plugin
+UnitTestBot represents all the test summaries in a **human-readable format**. The intelligible test method names and comments help you to control the whole testing process. Test failed? The summary refers you to the related branch or the condition under test.
-You can download the plugin from [GitHub Releases](https://github.com/UnitTestBot/UTBotJava/releases).
+# Get started
-# How to install IntelliJ IDEA plugin
+Try the **[online demo](https://www.utbot.org/demo)** to generate unit tests with one click.
-See [step-by-step guide](https://github.com/UnitTestBot/UTBotJava/wiki/intellij-idea-plugin) explaining how to install the plugin.
+Get to know the **full version** of UnitTestBot plugin with this quick guide:
-# How to use IntelliJ IDEA plugin
+
+ Install UnitTestBot plugin for IntelliJ IDEA
-See [step-by-step guide](https://github.com/UnitTestBot/UTBotJava/wiki/generate-tests-with-plugin) explaining how to use the plugin.
+Try the most straightforward path to start using UnitTestBot plugin.
+1. Please check the [system requirements](https://github.com/UnitTestBot/UTBotJava/wiki/Check-system-requirements).
+2. Open your IntelliJ IDEA.
+3. Go to **File > Settings... > Plugins > Marketplace**.
+4. In the search field type *UnitTestBot* — you'll see the UnitTestBot plugin page.
+5. Press the **Install** button and wait until it changes to **Installed**, then click **OK**.
-# How to contribute to UTBot Java
+Now you can find the UnitTestBot plugin enabled in the **File > Settings > Plugins** window.
-See [**Contributing guidelines**](CONTRIBUTING.md).
+Do you want to manually choose the build or to update the plugin? Please refer to [Install or update plugin](https://github.com/UnitTestBot/UTBotJava/wiki/Install-or-update-plugin) in our user guide.
+
+____________
+
+
+
+ Generate tests with default configuration
+
+Proceed to generating unit tests for the existing Java project. If you don't have one, create it using the [JetBrains tutorial](https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html).
+
+1. Open your Java project in IntelliJ IDEA.
+2. Right-click the required package or a file in the Project tool window, scroll the menu down to the bottom and
+ choose **Generate Tests with UnitTestBot...**
+3. In the **Generate Tests with UnitTestBot** window tick the classes or methods you'd like to cover with unit tests and
+ press **Generate Tests** or **Generate and Run**.
+
+Now you can see the resulting test class or classes in the Editor tool window.
+
+Need to configure testing framework, mocking strategy or parameterization? Please check all [configuration options](https://github.com/UnitTestBot/UTBotJava/wiki/Fine-tune-test-generation).
+
+____________
+
+
+
+ Make use of generated tests
+
+What can you do with the output?
+
+1. To *find and fix the errors* in your code:
+
+* Run the generated tests: right-click the test class or a folder with tests and choose **Run**.
+
+* In the Run tool window you can see the tests failed with the brief failure explanation.
+
+* Fix your errors if needed.
+
+2. To *prevent regressions*:
+
+* Having your errors fixed, run the tests again. "Passed"? Commit them as the regression suite.
+
+* Introduce changes in the code and run your tests as often as needed!
+
+* Tests failed? Decide whether it is a bug or a feature and generate new tests if necessary.
+
+3. To *view coverage*:
+
+Right-click the test class, choose **More Run/Debug > Run ... with Coverage**.
+
+Want to know more about test descriptions or SARIF reports? Please learn how to [Get use of test results](https://github.com/UnitTestBot/UTBotJava/wiki/Get-use-of-test-results).
+
+____________
+
+
+# Contribute to UnitTestBot
+
+UnitTestBot is an open source project. We welcome everyone who wants to make UnitTestBot better — introduce a new feature or report a bug. We have only one kind request for our contributors: we expect you to prove the necessity and quality of the suggested changes.
+
+How can you do this? Refer to our [Contributing guide](https://github.com/UnitTestBot/UTBotJava/blob/main/CONTRIBUTING.md).
+
+Feel free to join the [Discussions](https://github.com/UnitTestBot/UTBotJava/discussions)!
+
+And thank you for your time and effort! ⭐
+
+# Find support
+
+Having troubles with using UnitTestBot? Contact us [directly](https://www.utbot.org/about).
+
+# Find more UnitTestBot products
+
+You can also try [UnitTestBot](https://github.com/UnitTestBot/UTBotCpp) developed especially for C/C++.
+
+You are welcome to [contribute](https://github.com/UnitTestBot/UTBotCpp/blob/main/CONTRIBUTING.md) to it too!
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 02ef9119b3..0000000000
--- a/build.gradle
+++ /dev/null
@@ -1,67 +0,0 @@
-group 'org.utbot'
-
-apply plugin: 'java'
-
-if (project.hasProperty('semVer')) {
- project.version = project.semVer
-} else {
- project.version = '1.0-SNAPSHOT'
-}
-
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath group: 'org.jetbrains.kotlin', name: 'kotlin-gradle-plugin', version: kotlin_version
- classpath group: 'org.jetbrains.kotlin', name: 'kotlin-allopen', version: kotlin_version
- }
-}
-
-subprojects {
- group = rootProject.group
- version = rootProject.version
-
- apply plugin: 'base'
- apply plugin: 'java'
- apply plugin: 'maven-publish'
-
- publishing {
- publications {
- jar(MavenPublication) {
- from components.java
- groupId 'org.utbot'
- artifactId project.name
- }
- }
- }
-
- repositories {
- mavenCentral()
- maven { url 'https://jitpack.io' }
- }
-}
-
-configure([
- project(':utbot-api'),
- project(':utbot-core'),
- project(':utbot-framework'),
- project(':utbot-framework-api'),
- project(':utbot-fuzzers'),
- project(':utbot-instrumentation'),
- project(':utbot-summary')
-]) {
- publishing {
- repositories {
- maven {
- name = "GitHubPackages"
- url = "https://maven.pkg.github.com/UnitTestBot/UTBotJava"
- credentials {
- username = System.getenv("GITHUB_ACTOR")
- password = System.getenv("GITHUB_TOKEN")
- }
- }
- }
- }
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000000..823b6c22ba
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,211 @@
+import java.text.SimpleDateFormat
+import org.gradle.api.JavaVersion.*
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+group = "org.utbot"
+
+val kotlinVersion: String by project
+val semVer: String? by project
+val coroutinesVersion: String by project
+val collectionsVersion: String by project
+val junit5Version: String by project
+val dateBasedVersion: String = SimpleDateFormat("YYYY.MM").format(System.currentTimeMillis()) // CI proceeds the same way
+
+version = semVer ?: "$dateBasedVersion-SNAPSHOT"
+
+plugins {
+ `java-library`
+ kotlin("jvm") version "1.8.0"
+ `maven-publish`
+}
+
+allprojects {
+
+ apply {
+ plugin("maven-publish")
+ plugin("kotlin")
+ }
+
+ tasks {
+ withType {
+ sourceCompatibility = "1.8"
+ targetCompatibility = "1.8"
+ options.encoding = "UTF-8"
+ options.compilerArgs = options.compilerArgs + "-Xlint:all"
+ }
+ withType {
+ kotlinOptions {
+ jvmTarget = "1.8"
+ freeCompilerArgs = freeCompilerArgs + listOf("-Xallow-result-return-type", "-Xsam-conversions=class", "-Xcontext-receivers")
+ allWarningsAsErrors = false
+ }
+ }
+ compileTestKotlin {
+ kotlinOptions {
+ jvmTarget = "1.8"
+ freeCompilerArgs = freeCompilerArgs + listOf("-Xallow-result-return-type", "-Xsam-conversions=class", "-Xcontext-receivers")
+ allWarningsAsErrors = false
+ }
+ }
+ withType {
+ // uncomment if you want to see loggers output in console
+ // this is useful if you debug in docker
+ // testLogging.showStandardStreams = true
+ // testLogging.showStackTraces = true
+
+ // set heap size for the test JVM(s)
+ minHeapSize = "128m"
+ maxHeapSize = "3072m"
+ jvmArgs = listOf(
+ "-XX:MaxHeapSize=3072m",
+ "--add-opens", "java.base/java.util.concurrent.atomic=ALL-UNNAMED",
+ "--add-opens", "java.base/java.lang.invoke=ALL-UNNAMED",
+ "--add-opens", "java.base/java.util.concurrent=ALL-UNNAMED",
+ "--add-opens", "java.base/java.util.concurrent.locks=ALL-UNNAMED",
+ "--add-opens", "java.base/java.text=ALL-UNNAMED",
+ "--add-opens", "java.base/java.time=ALL-UNNAMED",
+ "--add-opens", "java.base/java.io=ALL-UNNAMED",
+ "--add-opens", "java.base/java.nio=ALL-UNNAMED",
+ "--add-opens", "java.base/java.nio.file=ALL-UNNAMED",
+ "--add-opens", "java.base/java.net=ALL-UNNAMED",
+ "--add-opens", "java.base/sun.security.util=ALL-UNNAMED",
+ "--add-opens", "java.base/sun.reflect.generics.repository=ALL-UNNAMED",
+ "--add-opens", "java.base/sun.net.util=ALL-UNNAMED",
+ "--add-opens", "java.base/sun.net.fs=ALL-UNNAMED",
+ "--add-opens", "java.base/java.security=ALL-UNNAMED",
+ "--add-opens", "java.base/java.lang.ref=ALL-UNNAMED",
+ "--add-opens", "java.base/java.math=ALL-UNNAMED",
+ "--add-opens", "java.base/java.util.stream=ALL-UNNAMED",
+ "--add-opens", "java.base/java.util=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.misc=ALL-UNNAMED",
+ "--add-opens", "java.base/java.lang=ALL-UNNAMED",
+ "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED",
+ "--add-opens", "java.base/sun.security.provider=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.event=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.jimage=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.jimage.decompressor=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.jmod=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.jtrfs=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.loader=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.logger=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.math=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.misc=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.module=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.objectweb.asm.signature=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.objectweb.asm.tree.analysis=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.xml.sax=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.org.xml.sax.helpers=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.perf=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.platform=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.ref=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.reflect=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.util=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.util.jar=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.util.xml=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.util.xml.impl=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.vm=ALL-UNNAMED",
+ "--add-opens", "java.base/jdk.internal.vm.annotation=ALL-UNNAMED"
+ )
+
+ withType {
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+ }
+
+ useJUnitPlatform {
+ excludeTags = setOf("slow", "IntegrationTest")
+ }
+
+ addTestListener(object : TestListener {
+ override fun beforeSuite(suite: TestDescriptor) {}
+ override fun beforeTest(testDescriptor: TestDescriptor) {}
+ override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {
+ println("[$testDescriptor.classDisplayName] [$testDescriptor.displayName]: $result.resultType, length - ${(result.endTime - result.startTime) / 1000.0} sec")
+ if (result.resultType == TestResult.ResultType.FAILURE) {
+ println("Exception: " + result.exception?.stackTraceToString())
+ }
+ }
+
+ override fun afterSuite(testDescriptor: TestDescriptor, result: TestResult) {
+ if (testDescriptor.parent == null) { // will match the outermost suite
+ println("Test summary: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)")
+ }
+ }
+ })
+ }
+ }
+
+ repositories {
+ mavenCentral()
+ maven("https://jitpack.io")
+ maven("https://s01.oss.sonatype.org/content/repositories/orgunittestbotsoot-1004/")
+ maven("https://plugins.gradle.org/m2")
+ maven("https://www.jetbrains.com/intellij-repository/releases")
+ maven("https://cache-redirector.jetbrains.com/maven-central")
+ }
+
+ dependencies {
+ implementation(group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version = coroutinesVersion)
+ implementation(
+ group = "org.jetbrains.kotlinx",
+ name = "kotlinx-collections-immutable-jvm",
+ version = collectionsVersion
+ )
+ implementation(group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version = kotlinVersion)
+ implementation(group = "org.jetbrains.kotlin", name = "kotlin-reflect", version = kotlinVersion)
+
+ testImplementation("org.junit.jupiter:junit-jupiter") {
+ version {
+ strictly(junit5Version)
+ }
+ }
+ }
+}
+
+subprojects {
+ group = rootProject.group
+ version = rootProject.version
+
+ publishing {
+ publications {
+ create("jar") {
+ from(components["java"])
+ groupId = "org.utbot"
+ artifactId = project.name
+ }
+ }
+ }
+}
+
+dependencies {
+ implementation(group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version = kotlinVersion)
+ implementation(group = "org.jetbrains.kotlin", name = "kotlin-allopen", version = kotlinVersion)
+}
+
+configure(
+ listOf(
+ project(":utbot-api"),
+ project(":utbot-core"),
+ project(":utbot-framework"),
+ project(":utbot-framework-api"),
+ project(":utbot-java-fuzzing"),
+ project(":utbot-instrumentation"),
+ project(":utbot-rd"),
+ project(":utbot-summary")
+ )
+) {
+ publishing {
+ repositories {
+ maven {
+ name = "GitHubPackages"
+ url = uri("https://maven.pkg.github.com/UnitTestBot/UTBotJava")
+ credentials {
+ username = System.getenv("GITHUB_ACTOR")
+ password = System.getenv("GITHUB_TOKEN")
+ }
+ }
+ }
+ }
+}
diff --git a/buildSrc/src/main/java/SettingsTemplateHelper.java b/buildSrc/src/main/java/SettingsTemplateHelper.java
new file mode 100644
index 0000000000..d55390eaac
--- /dev/null
+++ b/buildSrc/src/main/java/SettingsTemplateHelper.java
@@ -0,0 +1,197 @@
+import org.gradle.api.*;
+
+import java.io.*;
+import java.text.*;
+import java.util.*;
+import java.util.function.*;
+
+/**
+ * The purpose of this helper is to convert UtSettings.kt source code
+ * to template resource file settings.properties (top-level entry in plugin JAR file).
+ * There are two stages: parsing of input to build models and then rendering models to output file
+ */
+
+public class SettingsTemplateHelper {
+ private static final String[] apacheLines =
+ ("Copyright (c) " + new SimpleDateFormat("yyyy").format(System.currentTimeMillis()) + " utbot.org\n" +
+ "\n" +
+ "Licensed under the Apache License, Version 2.0 (the \"License\");\n" +
+ "you may not use this file except in compliance with the License.\n" +
+ "You may obtain a copy of the License at\n" +
+ "\n" +
+ " http://www.apache.org/licenses/LICENSE-2.0\n" +
+ "\n" +
+ "Unless required by applicable law or agreed to in writing, software\n" +
+ "distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+ "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+ "See the License for the specific language governing permissions and\n" +
+ "limitations under the License.").split("\n");
+
+ public static void proceed(Project project) {
+ File settingsSourceDir = new File(project.getBuildDir().getParentFile().getParentFile(), "utbot-framework-api/src/main/kotlin/org/utbot/framework/");
+ String sourceFileName = "UtSettings.kt";
+ File settingsResourceDir = new File(project.getBuildDir().getParentFile().getParentFile(), "utbot-intellij-main/src/main/resources/");
+ String settingsFileName = "settings.properties";
+
+ Map dictionary = new HashMap<>();
+ dictionary.put("Int.MAX_VALUE", String.valueOf(Integer.MAX_VALUE));
+
+ List models = new ArrayList<>();
+ List enums = new ArrayList<>();
+ StringBuilder acc = new StringBuilder();
+ List docAcc = new ArrayList<>();
+ // Stage one: parsing sourcecode
+ try(BufferedReader reader = new BufferedReader(new FileReader(new File(settingsSourceDir, sourceFileName)))) {
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) {
+ s = s.trim();
+ if (s.startsWith("enum class ")) {//Enum class declaration
+ enums.add(new EnumInfo(s.substring(11, s.length() - 2)));
+ } else if (s.matches("[A-Z_]+,?") && !enums.isEmpty()) {//Enum value
+ String enumValue = s.substring(0, s.length());
+ if (enumValue.endsWith(",")) enumValue = enumValue.substring(0, enumValue.length() - 1);
+ enums.get(enums.size() - 1).docMap.put(enumValue, new ArrayList<>(docAcc));
+ } else if (s.startsWith("const val ")) {//Constand value to be substitute later if need
+ int pos = s.indexOf(" = ");
+ dictionary.put(s.substring(10, pos), s.substring(pos + 3));
+ } else if (s.equals("/**")) {//Start of docuemntation block
+ docAcc.clear();
+ } else if (s.startsWith("* ")) {
+ if (!s.contains("href")) {//Links are not supported, skip them
+ docAcc.add(s.substring(2));
+ }
+ } else if (s.startsWith("var") || s.startsWith("val")) {//Restart accumulation
+ acc.delete(0, acc.length());
+ acc.append(s);
+ } else if (s.isEmpty() && acc.length() > 0) {//Build model from accumulated lines
+ s = acc.toString();
+ acc.delete(0, acc.length());
+ if (s.startsWith("var") || s.startsWith("val")) {
+ int i = s.indexOf(" by ", 3);
+ if (i > 0) {
+ String key = s.substring(3, i).trim();
+ if (key.contains(":")) {
+ key = key.substring(0, key.lastIndexOf(':'));
+ }
+ PropertyModel model = new PropertyModel(key);
+ models.add(model);
+ s = s.substring(i + 7);
+ i = s.indexOf("Property");
+ if (i > 0) model.type = s.substring(0, i);
+ if (i == 0) {
+ i = s.indexOf('<', i);
+ if (i != -1) {
+ s = s.substring(i+1);
+ i = s.indexOf('>');
+ if (i != -1) {
+ model.type = s.substring(0, i);
+ }
+ }
+ }
+
+ i = s.indexOf('(', i);
+ if (i > 0) {
+ s = s.substring(i + 1);
+ String defaultValue = s.substring(0, s.indexOf(')')).trim();
+ if (defaultValue.contains(",")) defaultValue = defaultValue.substring(0, defaultValue.indexOf(','));
+ defaultValue = dictionary.getOrDefault(defaultValue, defaultValue);
+ if (defaultValue.matches("[\\d_]+L")) {
+ defaultValue = defaultValue.substring(0, defaultValue.length() - 1).replace("_", "");
+ }
+ if (defaultValue.matches("^\".+\"$")) {
+ defaultValue = defaultValue.substring(1, defaultValue.length() - 1);
+ }
+ model.defaultValue = defaultValue;
+ model.docLines.addAll(docAcc);
+ }
+ }
+ }
+ } else if (acc.length() > 0) {
+ acc.append(" " + s);
+ }
+ }
+ } catch (IOException ioe) {
+ System.err.println("Unexpected error when processing " + sourceFileName);
+ ioe.printStackTrace();
+ }
+
+ // Stage two: properties file rendering
+ try (PrintWriter writer = new PrintWriter(new File(settingsResourceDir, settingsFileName))) {
+ for (String apacheLine : apacheLines) {
+ writer.println("# " + apacheLine);
+ }
+ for (PropertyModel model : models) {
+ if (model.type.equals("Enum")) {
+ String[] split = model.defaultValue.split("\\.");
+ if (split.length > 1) {
+ model.defaultValue = split[1];
+ EnumInfo enumInfo = enums.stream().filter(new Predicate() {
+ @Override
+ public boolean test(EnumInfo enumInfo) {
+ return enumInfo.className.equals(split[0]);
+ }
+ }).findFirst().orElse(null);
+ if (enumInfo != null) {
+ model.docLines.add("");
+ for (Map.Entry> entry : enumInfo.docMap.entrySet()) {
+ String enumValue = entry.getKey();
+ if (entry.getValue().size() == 1) {
+ model.docLines.add(enumValue + ": " + entry.getValue().get(0));
+ } else {
+ model.docLines.add(enumValue);
+ for (String line : entry.getValue()) {
+ model.docLines.add(line);
+ }
+ }
+ }
+ }
+ }
+ }
+ writer.println();
+ writer.println("#");
+ for (String docLine : model.docLines) {
+ if (docLine.isEmpty()) {
+ writer.println("#");
+ } else {
+ writer.println("# " + docLine);
+ }
+ }
+ boolean defaultIsAlreadyMentioned = model.docLines.stream().anyMatch(new Predicate() {
+ @Override
+ public boolean test(String s) {
+ return s.toLowerCase(Locale.ROOT).contains("default");
+ }
+ });
+ if (!defaultIsAlreadyMentioned) {
+ writer.println("#");
+ writer.println("# Default value is [" + model.defaultValue + "]");
+ }
+ writer.println("#" + model.key + "=" + model.defaultValue);
+ }
+ writer.flush();
+ writer.close();
+ } catch (IOException ioe) {
+ System.err.println("Unexpected error when saving " + settingsFileName);
+ ioe.printStackTrace();
+ }
+ }
+
+ private static class PropertyModel {
+ final String key;
+ String type = "";
+ String defaultValue = "";
+ List docLines = new ArrayList<>();
+
+ PropertyModel(String key) {
+ this.key = key;
+ }
+ }
+
+ private static class EnumInfo {
+ final String className;
+ Map> docMap = new LinkedHashMap<>();
+
+ public EnumInfo(String className) {
+ this.className = className;
+ }
+ }
+}
\ No newline at end of file
diff --git a/docker/Dockerfile_java_cli b/docker/Dockerfile_java_cli
deleted file mode 100644
index 35c9536c62..0000000000
--- a/docker/Dockerfile_java_cli
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM openjdk:8
-
-ARG ACCESS_TOKEN
-
-WORKDIR /usr/src/
-
-RUN apt-get update \
- && apt-get install -y curl \
- unzip \
- python3 \
- python3-requests \
- && apt-get clean
-
-# Install UTBot Java CLI
-COPY docker/get_java_cli_download_url.py .
-
-ENV JAVA_CLI_ZIP_NAME "utbot_java_cli.zip"
-
-RUN curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
- -L "$(python3 get_java_cli_download_url.py)" \
- -o "${JAVA_CLI_ZIP_NAME}" \
- && unzip "${JAVA_CLI_ZIP_NAME}" \
- && rm "${JAVA_CLI_ZIP_NAME}"
-
-ENV JAVA_CLI_PATH="$(find /usr/src -type f -name utbot-cli*)"
-RUN ln -s "${JAVA_CLI_PATH}" $pwd/utbot-cli.jar
diff --git a/docker/get_java_cli_download_url.py b/docker/get_java_cli_download_url.py
deleted file mode 100644
index ad2f6b03a5..0000000000
--- a/docker/get_java_cli_download_url.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import json
-import requests
-
-JAVA_ARTIFACTS_URL="https://api.github.com/repos/UnitTestBot/UTBotJava/actions/artifacts"
-
-request = requests.get(url = JAVA_ARTIFACTS_URL)
-data = request.json()
-artifacts = data['artifacts']
-
-for artifact in artifacts:
- if "utbot-cli" in artifact['name']:
- print(artifact['archive_download_url'])
- break
-
diff --git a/docs/AndroidStudioSupport.md b/docs/AndroidStudioSupport.md
index 7049d52571..6feabebca2 100644
--- a/docs/AndroidStudioSupport.md
+++ b/docs/AndroidStudioSupport.md
@@ -1,28 +1,47 @@
# Android Studio support
-## Installing AS
+## Installing Android Studio
-> Install latest AS
+> Install the latest version of Android Studio
+> *
### Installing Lombok plugin
-> Use the first advice from the following link
+> Lombok plugin is not required to use UnitTest Bot.
+> However, if this plugin is required for your own goals, do the following:
>
->
+> * go to https://plugins.jetbrains.com/plugin/6317-lombok/versions
+>
+> * download .zip with the latest version
+>
+> * unpack it to ~/android-studio/plugins (use your path to Android Studio)
+>
+> * restart IDE
## Prerequisites
> Install and setup gradle version 7.2+ (version 7.4 tested)
>
-> Use JDK 8 for Gradle in\
+> Use JDK 11 for Gradle in\
> `File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JVM`
+>
+> \
+> If you want to use JDK 8, you can:
+> 1. Generate tests with JDK 8
+> 2. Switch to JDK 11 and compile tests
+> 3. Switch back to JDK 8 and run tests
+>
+> The reason for it is the Android Gradle Plugin, which requires Java 11 to build anything.
-## Running in AS
+## Running in Android Studio
> For now, running Utbot is supported only for Kotlin libraries. You can
> create one like this:
>
>
+>
+> To run generated tests, you must create separate JUnit configuration.\
+> ("Green arrows" will not work, since they launch Android Emulator.)
>
## Debug Intellij code
diff --git a/docs/ChoosingLanguageSpecificIDE.md b/docs/ChoosingLanguageSpecificIDE.md
new file mode 100644
index 0000000000..6512898ecc
--- /dev/null
+++ b/docs/ChoosingLanguageSpecificIDE.md
@@ -0,0 +1,23 @@
+# Choosing language specific IDE
+
+Some language-specific modules depends on specific IntelliJ IDE:
+* Python can work with IntelliJ Community, IntelliJ Ultimate, PyCharm Community, PyCharm Professional
+* JavaScript can work with IntelliJ Ultimate, PyCharm Professional and WebStorm
+* Java and Kotlin - IntelliJ Community and IntelliJ Ultimate
+
+You should select correct IDE in `gradle.properties` file:
+```
+ideType=
+ideVersion=<222.4167.29>
+```
+
+### IDE marking
+
+| Mark | Full name | Supported plugin |
+|------|----------------------|----------------------------------------|
+| IC | IntelliJ Community | JVM, Python, AndroidStudio |
+| IU | IntelliJ Ultimate | JVM, Python, JavaScript, AndroidStudio |
+| PC | PyCharm Community | Python |
+| PY | PyCharm Professional | Python, JavaScript |
+
+[IntelliJ Platform Plugin SDK documentation](https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#tasks-runpluginverifier)
\ No newline at end of file
diff --git a/docs/CodeGenerationAndRendering.md b/docs/CodeGenerationAndRendering.md
new file mode 100644
index 0000000000..eab4d56723
--- /dev/null
+++ b/docs/CodeGenerationAndRendering.md
@@ -0,0 +1,339 @@
+# Code generation and rendering
+
+Code generation and rendering are a part of the test generation process in UnitTestBot (find the overall picture in the
+[UnitTestBot architecture
+overview](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/OverallArchitecture.md)).
+UnitTestBot gets the synthetic representation of generated test cases from the fuzzer or the symbolic engine.
+This representation (or model) is implemented in the `UtExecution` class.
+
+The `codegen` module generates the real test code based on this `UtExecution` model and renders it in a
+human-readable form in accordance with the requested configuration (considering programming language, testing
+framework, mocking and parameterization options).
+
+The `codegen` module
+- converts `UtExecution` test information into an Abstract Syntax Tree (AST) representation using `CodeGenerator`,
+- renders this AST according to the requested programming language and other configurations using `renderer`.
+
+## Example
+
+Consider the following method under test:
+
+```java
+package pack;
+
+public class Example {
+
+ public int maxIfNotEquals(int a, int b) throws IllegalArgumentException {
+ if (a == b) throw new IllegalArgumentException("a == b");
+ if (a > b) return a; else return b;
+ }
+}
+```
+
+The standard UnitTestBot-generated tests for this method (without test summaries and clustering into regions)
+look like this:
+
+```java
+package pack;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.DisplayName;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public final class ExampleStandardTest {
+
+ @Test
+ @DisplayName("maxIfNotEquals: a == b : False -> a > b")
+ public void testMaxIfNotEquals_AGreaterThanB() {
+ Example example = new Example();
+
+ int actual = example.maxIfNotEquals(1, 0);
+
+ assertEquals(1, actual);
+ }
+
+ @Test
+ @DisplayName("maxIfNotEquals: a == b -> ThrowIllegalArgumentException")
+ public void testMaxIfNotEquals_AEqualsB() {
+ Example example = new Example();
+
+ assertThrows(IllegalArgumentException.class, () -> example.maxIfNotEquals(-255, -255));
+ }
+
+ @Test
+ @DisplayName("maxIfNotEquals: a < 0, b > 0 -> return 1")
+ public void testMaxIfNotEqualsReturnsOne() {
+ Example example = new Example();
+
+ int actual = example.maxIfNotEquals(-1, 1);
+
+ assertEquals(1, actual);
+ }
+}
+```
+
+Here is an example of the parameterized tests for this method. We also implement the data provider method — the
+argument source.
+
+```java
+package pack;
+
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.params.provider.Arguments.arguments;
+
+public final class ExampleParameterizedTest {
+
+ @ParameterizedTest
+ @MethodSource("pack.ExampleTest#provideDataForMaxIfNotEquals")
+ public void parameterizedTestsForMaxIfNotEquals(Example example, int a, int b, Integer expectedResult, Class expectedError) {
+ try {
+ int actual = example.maxIfNotEquals(a, b);
+
+ assertEquals(expectedResult, actual);
+ } catch (Throwable throwable) {
+ assertTrue(expectedError.isInstance(throwable));
+ }
+ }
+
+ public static ArrayList provideDataForMaxIfNotEquals() {
+ ArrayList argList = new ArrayList();
+
+ {
+ Example example = new Example();
+
+ Object[] testCaseObjects = new Object[5];
+ testCaseObjects[0] = example;
+ testCaseObjects[1] = 1;
+ testCaseObjects[2] = 0;
+ testCaseObjects[3] = 1;
+ testCaseObjects[4] = null;
+ argList.add(arguments(testCaseObjects));
+ }
+ {
+ Example example = new Example();
+
+ Object[] testCaseObjects = new Object[5];
+ testCaseObjects[0] = example;
+ testCaseObjects[1] = -255;
+ testCaseObjects[2] = -128;
+ testCaseObjects[3] = -128;
+ testCaseObjects[4] = null;
+ argList.add(arguments(testCaseObjects));
+ }
+ {
+ Example example = new Example();
+
+ Object[] testCaseObjects = new Object[5];
+ testCaseObjects[0] = example;
+ testCaseObjects[1] = -255;
+ testCaseObjects[2] = -255;
+ testCaseObjects[3] = null;
+ testCaseObjects[4] = IllegalArgumentException.class;
+ argList.add(arguments(testCaseObjects));
+ }
+
+ return argList;
+ }
+}
+```
+
+## Configurations
+
+UnitTestBot renders code in accordance with the chosen programming language, testing framework,
+mocking and parameterization options.
+
+Supported languages for code generation are:
+- Java
+- Kotlin (experimental) — we have significant problems with the support for nullability and generics
+- Python and JavaScript — in active development
+
+Supported testing frameworks are:
+- JUnit 4
+- JUnit 5
+- TestNG (only for the projects with JDK 11 or later)
+
+Supported mocking options are:
+- No mocking
+- Mocking with Mockito framework
+- Mocking static methods with Mockito
+
+Parameterized tests can be generated in Java only. Parameterization is not supported with the mocks enabled or
+with JUnit 4 chosen as the testing framework.
+
+## Entry points
+
+The `codegen` module gets calls from various UnitTestBot components. The most common scenario is to call `codegen`
+from integration tests as well as from the `utbot-intellij` project and its `CodeGenerationController` class. The
+`utbot-online` and `utbot-cli` projects call `codegen` as well.
+
+The `codegen` entry points are:
+- `CodeGenerator.generateAsString()`
+- `CodeGenerator.generateAsStringWithTestReport()`
+
+The latter gets `UtExecution` information received from the symbolic engine or the fuzzer and converts it into the
+`codegen`-related data units, each called `CgMethodTestSet`. As a result of further processing, the test code is
+generated as a string with a test generation report (see [Reports](#Reports) for details).
+
+Previously, `CgMethodTestSet` has been considerably different from `UtMethodTestSet` as it has been using
+`ExecutableId` instead of the legacy `UtMethod` (has been removed recently).
+For now, `CgMethodTestSet` contains utility functions required for code generation, mostly for parameterized tests.
+
+## Abstract Syntax Tree (AST)
+
+The `codegen` module converts `UtExecution` information to the AST representation.
+We create one AST per one source class (and one resulting test class). We use our own AST implementation.
+
+We generate a `UtUtils` class containing a set of utility functions, when they are necessary for a given test class.
+If the `UtUtils` class has not been created previously, its AST representation is generated as well. To learn more
+about the `UtUtils` class and how it is generated, refer to the
+[design doc](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/UtUtilsClass.md).
+
+All the AST elements are `CgElement` inheritors.
+`CgClassFile` is the top level element — it contains `CgClass` with the required imports.
+
+The class has the body (`CgClassBody`) as well as minor properties declared: documentation comments, annotations,
+superclasses, interfaces, etc.
+
+The class body is a set of `CgRegion` elements, having the `header` and the corresponding `content`, which is mostly
+the set of `CgMethod` elements.
+
+The further AST levels are created similarly. The AST leaves are `CgLiteral`, `CgVariable`,
+`CgLogicalOr`, `CgEmptyLine`, etc.
+
+## Test method
+
+The below-mentioned functionality is implemented in `CgMethodConstructor`.
+
+To create a test method:
+* store the initial values of the static fields and perform the seven steps for creating test method body mentioned later;
+* if the static field values undergo changes, perform these seven steps in the `try` block and recover these values in the `finally` block accordingly.
+
+To create test method body:
+1. substitute static fields with local variables
+2. set up instrumentation (get mocking information from `UtExecution`)
+3. create a variable for the current instance
+4. create variables for method-under-test arguments
+5. record an actual result by calling method under test
+6. generate result assertions
+7. for successful tests, generate field state assertions
+
+_Note:_ generating assertions has pitfalls. In primitive cases, like comparing two integers, we can use the standard
+assertions of a selected test framework. To compare two objects of an arbitrary type, we need a
+custom implementation of equality assertion, e.g. using `deepEquals()`. The `deepEquals()` method compares object
+structures field by field. The method is recursive: if the current field is not of the primitive type, we call
+`deepEquals()` for this field. The maximum recursion depth is limited.
+
+For the parameterized tests
+- we do not support mocking, so we do not set up the initial environment;
+- we do not generate field state assertions.
+
+`UtExecution` usually represents a single test scenario, and one `UtExecution` instance is used to create a single
+test method. Parameterized tests are supposed to cover several test scenarios, so several `UtExecution` instances
+are used for generating test methods.
+
+## Generic execution
+
+Parameterization often helps to reveal similarities between test scenarios. The combined outcome is sometimes more
+expressive. To represent these similarities, we construct generic executions.
+
+Generic execution is a synthetic execution, formed by a group of real executions, that have
+- the same type of result,
+- the same modified static fields.
+
+Otherwise, we create several generic executions and several parameterized tests. The logic of splitting executions
+into the test sets is implemented in the `CgMethodTestSet` class.
+
+From the group of `UtExecution` elements, we take the first successful execution with the non-nullable result. See
+`CgMethodConstructor.chooseGenericExecution()` for more details.
+
+## Renderer
+
+We have a general approach for rendering the code of test classes. `UtUtils` class is rendered differently: we
+hardcode the required method implementations for the specific code generation language.
+
+All the renderers implement `CgVisitor` interface. It has a separate `visit()` method for each supported
+`CgElement` item.
+
+There are three renderers:
+- `CgAbstractRenderer` for elements that are similar in Kotlin and Java
+- `CgJavaRenderer` for Java-specific elements
+- `CgKotlinRenderer` for Kotlin-specific elements
+
+Each renderer method visits the current `CgElement`. It means that all the required instructions are printed properly.
+If an element contains the other element, the first one delegates rendering to its _child_.
+
+`CgVisitor` refers us to the _Visitor_ design pattern. Delegating means asking the _child_ element to
+accept the renderer and manage it. Then we go through the list of `CgElement` types to find the first
+matching `visit()` method.
+
+_Note:_ the order of `CgElement` items listed in `CgElement.accept()` is important.
+
+Rendering may be terminated if the generated code is too long (e.g. due to test generation bugs).
+
+## Reports
+
+While constructing the test class, we create test generation reports. It contains basic statistical information: the
+number of generated tests, the number of successful tests, etc. It also may contain information on potential problems
+like trying to use mocks when mocking framework is not installed.
+
+The report is an HTML string with clickable links.
+
+_Note:_ no test generation reports are created for parameterized tests.
+
+## Services
+
+Services help the `codegen` module to produce human-readable test code.
+
+### Name generator
+
+With this service, we create names for variables and methods. It assures avoiding duplicates in names,
+resolving conflicts with keywords, etc. It also adds suffixes if we process a mock or a static item.
+
+Name generator is called directly from `CgStatementConstructor`.
+
+_Note:_ if you need a new variable, you should better use this service (e.g. the `newVar()` method) instead of calling
+the `CgVariable` constructor manually.
+
+### Framework and language services
+
+Framework services help the `codegen` module to generate constructions (e.g. assertions) according to a given
+testing or mocking framework.
+Language services provide the `codegen` module with language-specific information on test class extensions,
+prohibited keywords, etc.
+
+See the `Domain` file for more framework- and language-specific implementations.
+
+### CgFieldStateManager
+
+`CgFieldStateManager` stores the initial and the final environment states for the given method under test.
+These states are used for generating assertions. Usually, the environment state consists of three parts:
+* current instance state,
+* argument state,
+* static field state.
+
+All the state-related variables are marked as `INITIAL` or `FINAL`.
+
+### CgCallableAccessManager
+
+This service helps to validate access. For example, if the current argument
+list is valid for the method under test, `CgCallableAccessManager` checks if one can call this method with these
+arguments without using _Reflection_.
+
+`CgCallableAccessManager` analyzes callables as well as fields for accessibility.
+
+## CgContext
+
+`CgContext` contains context information for code generation. The `codegen` module uses one
+context per one test class. `CgContext` also stores information about the scope for the inner context elements: e.g. when
+they should be instantiated and cleared. For example, the context of the nested class is the part of the owner class context.
+
+`CgContext` is the so-called "God object" and should be split into independent storages and
+helpers. This task seems to be difficult and is postponed for now.
\ No newline at end of file
diff --git a/docs/Fuzzing Platform.md b/docs/Fuzzing Platform.md
new file mode 100644
index 0000000000..37b2314faa
--- /dev/null
+++ b/docs/Fuzzing Platform.md
@@ -0,0 +1,246 @@
+# Fuzzing Platform (FP) Design
+
+**Problem:** fuzzing is a versatile technique for generating values to be used as method arguments. Normally,
+to generate values, one needs information on a method signature, or rather on the parameter types (if a fuzzer is
+able to "understand" them).
+The _white-box_ approach also requires AST, and the _grey-box_ approach needs coverage
+information. To generate values that may serve as method arguments, the fuzzer uses generators, mutators, and
+predefined values.
+
+* _Generators_ yield concrete objects created by descriptions. The basic description for creating objects is _type_.
+ Constants, regular expressions, and other structured object specifications (e.g. in HTML) may also be used as
+ descriptions.
+
+* _Mutators_ modify the object in accordance with some logic that usually means random changes. To get better
+ results, mutators obtain feedback (information on coverage and the inner state of the
+ program) during method call.
+
+* _Predefined values_ work well for known problems, e.g. incorrect symbol sequences. To discover potential problems, one can analyze parameter names as well as the specific constructs or method calls inside the method body.
+
+The general API for using the fuzzer looks like this:
+
+```
+fuzz(
+ params = "number", "string", "object: number, string",
+ seedGenerator = (type: Type) -> seeds
+ details: (constants, providers, etc)
+).forEveryGeneratedValues { values: List ->
+ feedback = exec(values);
+ return feedback
+}
+```
+
+The fuzzer gets the list of types,
+which can be provided in different formats: as a string, an object, or a Class<*> in Java.
+The seed generator accepts these types and produces seeds.
+The seeds are base objects for value generation and mutations.
+
+It is the fuzzer, which is responsible for choosing, combining and mutating values from the seed set.
+The fuzzer API should not provide access to the inner fuzzing logic.
+Only general configuration is available.
+
+## Parameters
+
+The general fuzzing process gets the list of parameter descriptions as input and returns the corresponding list of values. The simplest description is the specific object type, for example:
+
+```kotlin
+[Int, Bool]
+```
+
+In this particular case, the fuzzing process can generate the set of all the pairs having integer as the first value
+and `true` or `false` as the second one.
+If values `-3, 0, 10` are generated to be the `Int` values, the set of all the possible combinations has six items:
+`(-3, false), (0, false), (10, false), (-3, true), (0, true), (10, true)`.
+Depending on the programming language,
+one may use interface descriptions or annotations (type hints) instead of defining the specific type.
+Fuzzing platform (FP) is not able to create the concrete objects as it does not deal with the specific languages.
+It can still convert the descriptions to the known constructs it can work with.
+
+Say, in most of the programming languages, any integer may be represented as a bit array, and the fuzzer can construct and
+modify bit arrays. So, in the general case, the boundary values for the integer are these bit arrays:
+
+* [0, 0, 0, ..., 0] — zero
+* [1, 0, 0, ..., 0] — minimum value
+* [0, 1, 1, ..., 1] — maximum value
+* [0, 0, ..., 0, 1] — plus 1
+* [1, 1, 1, ..., 1] — minus 1
+
+One can correctly use this representation for unsigned integers as well:
+
+* [0, 0, 0, ..., 0] — zero (minimum value)
+* [1, 0, 0, ..., 0] — maximum value / 2
+* [0, 1, 1, ..., 1] — maximum value / 2 + 1
+* [0, 0, ..., 0, 1] — plus 1
+* [1, 1, 1, ..., 1] — maximum value
+
+Thus, FP interprets the _Byte_ and _Unsigned Byte_ descriptions in different ways: in the former case,
+the maximum value is [0, 1, 1, 1, 1, 1, 1, 1], while in the latter case it is [1, 1, 1, 1, 1, 1, 1, 1].
+FP types are described in detail further.
+
+## Refined parameter description
+
+During the fuzzing process, some parameters get the refined description, for example:
+
+```
+public boolean isNaN(Number n) {
+ if (!(n instanceof Double)) {
+ return false;
+ }
+ return Double.isNaN((Double) n);
+}
+```
+
+In the above example, let the parameter be `Integer`. Considering the feedback, the fuzzer suggests that nothing but `Double` might increase coverage, so the type may be downcasted to `Double`. This allows for filtering out a priori unfitting values.
+
+## Statically and dynamically generated values
+Predefined, or _statically_ generated, values help to define the initial range of values, which could be used as method arguments.
+
+These values allow us to:
+* check if it is possible to call the given method with at least some set of values as arguments;
+* gather statistics on executing the program;
+* refine the parameter description.
+
+_Dynamic_ values are generated in two ways:
+* internally, via mutating the existing values, successfully performed as method arguments (i.e. seeds);
+* externally, via obtaining feedback that can return not only the statistics on the execution (the paths explored,
+ the time spent, etc.) but also the set of new values to be blended with the values already in use.
+
+Dynamic values should have a higher priority for a sample;
+that is why they should be chosen either first or at least more likely than the statically generated ones.
+In general, the algorithm that guides the fuzzing process looks like this:
+
+```
+# dynamic values are stored with respect to their return priority
+dynamic_values = empty_priority_queue()
+# static values are generated beforehand
+static_values = generate()
+# "good" values
+seeded_values = []
+#
+filters = []
+
+# the loop runs until coverage reaches 100%
+while app.should_fuzz(seeded_values.feedbacks):
+ # first we choose all dynamic values
+ # if there are no dynamic values, choose the static ones
+ value = dynamic_values.take() ?: static_values.take_random()
+ # if there is no value or it was filtered out (static values are generated in advance — they can be random and unfitting), try to generate new values via mutating the seeds
+ if value is null or filters.is_filtered(value):
+ value = mutate(seeded_values.random_value())
+ # if there is still no value at this point, it means that there are no appropriate values at all, and the process stops
+ if value is null: break
+
+ # run with the given values and obtain feedback
+ feedback = yield_run(value)
+ # feedback says if it is reasonable to add the current value to the set of seeds
+ if feedback is good:
+ seeded_values[feedback] += value
+ # feedback may also provide fuzzer with the new values
+ if feedback has suggested_value:
+ dynamic_values += feedback.suggested_values() with high_priority
+
+ # mutate the static value thus allowing fuzzer to alternate static and dynamic values
+ if value.is_static_generated:
+ dynamic_values += mutate(seeded_values.random_value()) with low_priority
+```
+
+## Helping fuzzer via code modification
+
+Sometimes it is reasonable to modify the source code so that it makes applying fuzzer to it easier. This is one of possible approaches: to split the complex _if_-statement into the sequence of simpler _if_-statements. See [Circumventing Fuzzing Roadblocks with Compiler Transformations](https://lafintel.wordpress.com/2016/08/15/circumventing-fuzzing-roadblocks-with-compiler-transformations/) for details.
+
+## Generators
+
+There are two types of generators:
+* yielding values of primitive data types: integers, strings, booleans
+* yielding values of recursive data types: objects, lists
+
+Sometimes it is necessary not only to create an object but to modify it as well. We can apply fuzzing to
+the fuzzer-generated values that should be modified. For example, you have the `HashMap.java` class, and you need to
+generate
+three
+modifications for it using `put(key, value)`. For this purpose, you may request for applying the fuzzer to six
+parameters `(key, value, key, value, key, value)` and get the necessary modified values.
+
+Primitive type generators allow for yielding:
+1. Signed integers of a given size (8, 16, 32, and 64 bits, usually)
+2. Unsigned integers of a given size
+3. Floating-point numbers with a given size of significand and exponent according to IEEE 754
+4. Booleans: _True_ and _False_
+5. Characters (in UTF-16 format)
+6. Strings (consisting of UTF-16 characters)
+
+The fuzzer should be able to provide out-of-the-box support for these types — be able to create, modify, and process
+them.
+To work with multiple languages, it is enough to specify the possible type size and to describe and create
+concrete objects based on the FP-generated values.
+
+The recursive types include two categories:
+* Collections (arrays and lists)
+* Objects
+
+Collections may be nested and have _n_ dimensions (one, two, three, or more).
+
+Collections may be:
+* of a fixed size (e.g., arrays)
+* of a variable size (e.g., lists and dictionaries)
+
+Objects may have:
+1. Constructors with parameters
+2. Modifiable inner fields
+3. Modifiable global values (the static ones)
+4. Calls for modifying methods
+
+FP should be able to create and describe such objects in the form of a tree. The semantics of actual modifications is under the responsibility of a programming language.
+
+
+## Typing
+
+FP does not use the concept of _type_ for creating objects. Instead, FP introduces the _task_ concept — it
+encapsulates the description of a type, which should be used to create an object. Generally, this task consists of two
+blocks: the task for initializing values and the list of tasks for modifying the initialized value.
+
+```
+Task = [
+ Initialization: [T1, T2, T3, ..., TN]
+ Modification(Initialization): [
+ М1: [T1, T2, ..., TK],
+ М2: [T1, T2, ..., TJ],
+ МH: [T1, T2, ..., TI],
+ ]
+]
+```
+
+Thus, we can group the tasks as follows:
+
+```
+1. Trivial task = [
+ Initialization: [INT|UNSIGNED.INT|FLOAT.POINT.NUMBER|BOOLEAN|CHAR|STRING]
+ Modification(Initialization): []
+]
+
+
+2. Task for creating an array = [
+ Initialization: [UNSIGNED.INT]
+ Modification(UNSIGNED.INT) = [T] * UNSIGNED.INT
+]
+
+or
+
+2. Task for creating an array = [
+ Initialization: [UNSIGNED.INT]
+ Modification(UNSIGNED.INT) = [[T * UNSIGNED.INT]]
+]
+
+where "*" means repeating the type the specified number of times
+
+3. Task for creating an object = [
+ Initialization: [Т1, Т2, ... ТN],
+ Modification(UNSIGNED.INT) = [
+ ...
+ ]
+]
+
+```
+
+Therefore, each programming language defines how to interpret a certain type and how to infer it. This allows fuzzer
+to store and mutate complex objects without any additional support from the language.
diff --git a/docs/GoSupport.md b/docs/GoSupport.md
new file mode 100644
index 0000000000..10518a49a0
--- /dev/null
+++ b/docs/GoSupport.md
@@ -0,0 +1,145 @@
+# UnitTestBot Go
+
+UnitTestBot Go automatically generates ready-to-use unit tests for Go programs.
+
+With UnitTestBot Go, you can find bugs in your code and fixate the desired program behavior with less effort.
+
+The project is under development,
+so feel free to [contribute](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-go/docs/DEVELOPER_GUIDE.md).
+
+## Features and details
+
+UnitTestBot Go now implements the _basic fuzzing technique_.
+It generates input values considering the parameter types,
+inserts these values into the user functions, and executes the resulting test cases.
+
+### Supported types for function parameters
+
+Now UnitTestBot Go can generate values for _primitive types_, _arrays_, _slices_, _maps_, _structs_, _channels_, _interfaces_, and _pointers_.
+
+For _floating point types_, UnitTestBot Go supports working with _infinity_ and _NaN_.
+
+### Supported types for the returned results
+
+For the returned function results,
+UnitTestBot Go supports the `error` type as well as all the types supported for the function parameters except _interfaces_ and _channels_.
+
+It also captures `panic` cases correctly.
+
+Check the examples of [supported functions](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-go/go-samples/simple/samples.go).
+
+### Keeping tests near the source code
+
+[Testing code typically
+lives in the same package as the code it tests](https://gobyexample.com/testing).
+By default, UnitTestBot Go generates tests into the `[name of source file]_go_ut_test.go` file located in the same
+directory and Go package as the corresponding source file.
+
+If you need to change the location for the generated tests,
+use the `generateGo` CLI command and set the generated test output mode to
+`StdOut` (`-p, --print-test` flag).
+Then, with bash primitives, redirect the output to an arbitrary file.
+
+### Requirements to source code
+
+To simplify handling dependencies and generating tests, UnitTestBot Go requires the code under test _to
+be a part of a Go project_ consisting of a module and packages.
+
+To create a simple project, refer to the [starter tutorial](https://go.dev/doc/tutorial/getting-started) if necessary.
+
+For larger projects, try the [Create a Go module](https://go.dev/doc/tutorial/create-module)
+and [Call your code from another module](https://go.dev/doc/tutorial/call-module-code) tutorials.
+
+To create a new module rooted in the current directory, use the `go mod init` command.
+
+To add missing module requirements necessary to build the current module’s packages and dependencies,
+use the `go mod tidy` command. For editing and formatting `go.mod` files, use the `go mod edit` command.
+
+In the future, we plan to make UnitTestBot Go working with arbitrary code as input and generate the simplest
+Go projects automatically.
+
+## IntelliJ IDEA plugin
+
+### Requirements
+
+* IntelliJ IDEA Ultimate — for compatibility, see [UnitTestBot on JetBrains Marketplace](https://plugins.jetbrains.com/plugin/19445-unittestbot/versions).
+* Go SDK 1.18 or later
+* Compatible [Go plugin](https://plugins.jetbrains.com/plugin/9568-go) for IntelliJ IDEA
+* Properly configured `go.mod` file for the code under test
+* `github.com/stretchr/testify/assert` Go module installed (IntelliJ IDEA automatically offers to install it as soon as the tests are generated)
+
+### Installation
+
+Please refer to [UnitTestBot user guide](https://github.com/UnitTestBot/UTBotJava/wiki/Install-or-update-plugin).
+
+### Usage
+
+1. In your IntelliJ IDEA, go to **File** > **Settings** > **Tools**, choose **UnitTestBot** and enable **Experimental languages support**.
+
+ **(!) NOTE:** be sure to enable this option for **_each_** project.
+
+2. Open a `.go` file and press **Alt+Shift+U**.
+3. In the **Generate Tests with UnitTestBot** window, you can configure the settings.
+
+## Command-line interface (CLI)
+
+### Requirements
+
+* Java SDK 17 or later
+* Go SDK 1.18 or later
+* Properly configured `go.mod` file for the code under test
+* GCC and `github.com/stretchr/testify/assert` installed
+
+### Installation
+
+To install the UnitTestBot Go CLI application, go to GitHub, scroll through the release notes and click **Assets**.
+Download the zip-archive named like **utbot-cli-VERSION**.
+Extract the JAR file from the archive.
+
+### Usage
+
+Run the extracted JAR file using a command line: `generateGo` and `runGo` actions are supported for now.
+To find info about the options for these actions,
+insert the necessary JAR file name instead of `utbot-cli-2022.8-beta.jar` in the example and run the following commands:
+
+```bash
+java -jar utbot-cli-2022.8-beta.jar generateGo --help
+```
+or
+```bash
+java -jar utbot-cli-2022.8-beta.jar runGo --help
+```
+
+`generateGo` options:
+
+* `-s, --source TEXT`, _required_: specifies a Go source file to generate tests for.
+* `-f, --function TEXT`: specifies a function name to generate tests for. Can be used multiple times to select multiple functions.
+* `-m, --method TEXT`: specifies a method name to generate tests for. Can be used multiple times to select multiple methods.
+* `-go TEXT`, _required_: specifies a path to a Go executable. For example, `/usr/local/go/bin/go`.
+* `-gopath TEXT`, _required_: specifies a path to your workspace location. It defaults to a directory named `go` in your home directory: `$HOME/go` for Unix, `$home/go` for Plan 9, and `%USERPROFILE%\go` (usually `C:\Users\YourName\go`) for Windows.
+* `-parallel INT`: specifies the number of fuzzing processes running at once (eight by default).
+* `-et, --each-execution-timeout INT`: specifies a timeout in milliseconds for each target function execution.
+ The default timeout is 1,000 ms.
+* `-at, --all-execution-timeout INT`: specifies a timeout in milliseconds for all target function executions.
+ The default timeout is 60,000 ms.
+* `-p, --print-test`: specifies whether a test should be printed out to `StdOut`. Disabled by default.
+* `-w, --overwrite`: specifies whether to overwrite the output test file if it already exists. Disabled by default.
+* `-fm, --fuzzing-mode`: stops test generation when a `panic` situation, an error, or timeout occurs (only one test will be generated for one of these cases).
+* `-h, --help`: shows a help message and exits.
+
+`runGo` options:
+
+* `-p, --package TEXT`, _required_: specifies a Go package to run tests for.
+* `-go, --go-path TEXT`, _required_: specifies a path to a Go executable. For example, `/usr/local/go/bin/go`.
+* `-v, --verbose`: specifies whether an output should be verbose. Disabled by default.
+* `-j, --json`: specifies whether an output should be in JSON format. Disabled by default.
+* `-o, --output TEXT`: specifies an output file for a test run report. Prints to `StdOut` by default.
+* `-cov-mode, --coverage-mode [html|func|json]`: specifies whether a test coverage report should be generated and defines the report format.
+ Coverage report generation is disabled by default.
+* `-cov-out, --coverage-output TEXT`: specifies the output file for a test coverage report. Required if `[--coverage-mode]` is
+ set.
+
+## Contributing to UnitTestBot Go
+
+To take part in project development or learn more about UnitTestBot Go, check
+out the [Developer guide](../utbot-go/docs/DEVELOPER_GUIDE.md) and our [plans](../utbot-go/docs/FUTURE_PLANS.md).
\ No newline at end of file
diff --git a/docs/JavaScriptSupport.md b/docs/JavaScriptSupport.md
new file mode 100644
index 0000000000..cfafa94e42
--- /dev/null
+++ b/docs/JavaScriptSupport.md
@@ -0,0 +1,117 @@
+# UnitTestBot JavaScript
+
+[UnitTestBot](https://www.utbot.org/) is the tool for automated unit test generation available as an IntelliJ IDEA plugin, or a command-line interface.
+
+Now UnitTestBot provides fuzzing-based support for JavaScript.
+
+## IntelliJ IDEA plugin
+
+### Requirements
+
+1. IntelliJ IDEA Ultimate — for compatibility, see [UnitTestBot on JetBrains Marketplace](https://plugins.jetbrains.com/plugin/19445-unittestbot/versions).
+2. UnitTestBot plugin: please refer to [UnitTestBot user guide](https://github.com/UnitTestBot/UTBotJava/wiki/Install-or-update-plugin).
+3. [Node.js 10.0.0 or later](https://nodejs.org/en/download/) (we recommend that you add Node.js to environment variables)
+
+_Note:_ when _npm_ cannot install requirements, try troubleshooting.
+1. If the system prohibits installation: run _cmd_ via `sudo` or with administrator access, run `npm install -g `.
+2. If Node.js is missing, or _npm_ is not installed: install Node.js with default configuration from the official website.
+
+### How to use
+
+1. In your IntelliJ IDEA, go to **File** > **Settings** > **Tools**, choose **UnitTestBot** and enable **Experimental languages support**.
+
+ **(!) NOTE:** be sure to enable this option for **_each_** project.
+
+2. Go to **File** > **Settings** > **Languages & Frameworks**, choose **Node.js** and check if the path to Node.js executable file is specified.
+3. In a JavaScript file, press **Alt+Shift+U** to open the generation dialog.
+
+## Command-line interface (CLI)
+
+### Build
+
+JAR file can be built in [GitHub Actions](https://github.com/UnitTestBot/UTBotJava/actions/workflows/publish-plugin-and-cli-from-branch.yml) with the `publish-plugin-and-cli-from-branch` script.
+
+### Requirements
+
+* [Node.js 10.0.0 or later](https://nodejs.org/en/download/)
+* [Java 11 or later](https://www.oracle.com/java/technologies/downloads/)
+* _nyc_ 15.1.0 or later: `> npm install -g nyc`
+* Mocha 10.0.0 or later: `> npm install -g mocha`
+
+_Note:_ for each new project, _npm_ needs internet connection to install the required packages.
+
+### Generate tests: `generate_js`
+
+ java -jar utbot-cli.jar generate_js --source="dir/file_with_sources.js" --output="dir/generated_tests.js"
+
+ This will generate tests for top-level functions from `file_with_sources.js`.
+
+#### Options
+
+- `-s, --source `
+
+ _(required)_ Source code file for test generation.
+- `-c, --class `
+
+ Specifies the class to generate tests for.
+ If not specified, tests for top-level functions or a single class are generated.
+
+- `-o, --output `
+
+ File for generated tests.
+- `-p, --print-test`
+
+ Specifies whether a test should be printed out to `StdOut` (default = false).
+- `-t, --timeout `
+
+ Timeout for a single test case to generate: in seconds (default = 15).
+- `--coverage-mode `
+
+ Specifies the coverage mode for test generation (used for coverage-based optimization). For now, the fast mode cannot deal with exceeding timeouts, but works faster (default = FAST). Do not use the fast mode if you guess there might be infinite loops in your code.
+- `--path-to-node `
+
+ Sets a path to Node.js executable (default = "node").
+- `--path-to-nyc `
+
+ Sets a path to _nyc_ executable (default = "nyc").
+- `--path-to-npm `
+
+ Sets a path to _npm_ executable (default = "npm").
+
+### Run generated tests: `run_js`
+
+ java -jar utbot-cli.jar run_js --fileOrDir="generated_tests.js"
+
+ This will run generated tests from a file or directory.
+
+#### Options
+
+- `-f, --fileOrDir`
+
+ _(required)_ File or directory with tests.
+- `-o, --output`
+
+ Specifies the output TXT file for a test framework result (if empty, prints the result to `StdOut`).
+
+- `-t, --test-framework `
+
+ Test framework to use for test running (default = "Mocha").
+
+### Generate a coverage report: `coverage_js`
+
+ java -jar utbot-cli.jar coverage_js --source=dir/generated_tests.js
+
+ This will generate a coverage report for generated tests and print it to `StdOut`.
+
+#### Options
+
+- `-s, --source `
+
+ _(required)_ File with tests to generate a report for.
+
+- `-o, --output`
+
+ Specifies the output JSON file for a coverage report (if empty, prints the report to `StdOut`).
+- `--path-to-nyc `
+
+ Sets a path to _nyc_ executable (default = "nyc").
diff --git a/docs/NightStatisticsMonitoring.md b/docs/NightStatisticsMonitoring.md
new file mode 100644
index 0000000000..226356b97f
--- /dev/null
+++ b/docs/NightStatisticsMonitoring.md
@@ -0,0 +1,241 @@
+# Night Statistics Monitoring
+
+## What is the problem?
+
+As UnitTestBot contributors, we'd like to constantly improve our product. There are many of us introducing code changes simultaneously — unfortunately, some changes or combinations of them may lead to reduced plugin efficiency. To avoid such an unlucky result we need to monitor statistics on test generation performance.
+
+## Why monitor nightly?
+
+It would be great to collect statistics as soon as the contributor changes the code. In case you have a huge project it takes too long to run the monitoring system after each push into master.
+Thus, we decided to do it every night when (hopefully!) no one makes changes.
+
+## How do we collect statistics?
+
+To find the algorithm you can refer to `StatisticsMonitoring.kt`. Shortly speaking, it is based on `ContestEstimator.kt`, which runs test generation on the sample projects and then compile the resulting tests. We repeat the whole process several times to reduce measurement error.
+
+## Statistics monitoring usage
+
+### Collecting statistics
+
+To run statistics monitoring you have to specify the name of the JSON output file.
+
+Input arguments: ``.
+
+Output format: you get the JSON file, which contains an array of objects with statistics and input parameters on each run.
+
+More about each statistic: `Statistics.kt`.
+
+More about monitoring settings: `MonitoringSettings.kt`.
+
+Input example:
+
+```
+stats.json
+```
+
+Output example (the result of three runs during one night):
+
+```json5
+[
+ {
+ "parameters": {
+ "fuzzing_ratio": 0.1, // how long does fuzzing takes
+ "class_timeout_sec": 20, // test generation timeout for one class
+ "run_timeout_min": 20 // total timeout for this run
+ },
+ "targets": [ // projects that have been processed
+ {
+ "target": "guava", // name of project
+ "summarised_metrics": { // summarised metrics for processed project
+ "total_classes": 20, // classes count
+ "testcases_generated": 1042, // generated unit-tests count
+ "classes_failed_to_compile": 0, // classes that's tests are not compilable
+ "classes_canceled_by_timeout": 4, // classes that's generation was canceled because of timeout
+ "total_methods": 526, // methods count
+ "methods_with_at_least_one_testcase_generated": 345, // methods with at least one successfully generated test
+ "methods_with_at_least_one_exception": 32, // methods that's generation contains exceptions
+ "methods_without_any_tests_and_exceptions": 59, // suspicious methods without any tests and exceptions
+ "covered_bytecode_instructions": 4240, // amount of bytecode instructions that were covered by generated tests
+ "covered_bytecode_instructions_by_fuzzing": 2946, // amount of bytecode instructions that were covered by fuzzing's generated tests
+ "covered_bytecode_instructions_by_concolic": 3464, // amount of bytecode instructions that were covered by concolic's generated tests
+ "total_bytecode_instructions": 9531, // total amount of bytecode instructions in methods with at least one testcase generated
+ "averaged_bytecode_instruction_coverage_by_classes": 0.5315060991492891 // mean bytecode coverage by class
+ },
+ "metrics_by_class": [ // metrics for all classes in this project
+ {
+ "class_name": "com.google.common.math.LongMath", // name of processed class
+ "metrics": { // metrics for specified class
+ "testcases_generated": 91, // amount of generated unit-tests
+ "failed_to_compile": false, // compilation generated tests are failure
+ "canceled_by_timeout": true, // generation is interrupted because of timeout
+ "total_methods_in_class": 31, // methods count in this class
+ "methods_with_at_least_one_testcase_generated": 26, // methods with at least one successfully generated test
+ "methods_with_at_least_one_exception": 0, // methods that's generation contains exceptions
+ "methods_without_any_tests_and_exceptions": 5, // suspicious methods without any tests and exceptions
+ "covered_bytecode_instructions_in_class": 585, // amount of bytecode instructions that were covered by generated tests
+ "covered_bytecode_instructions_in_class_by_fuzzing": 489, // amount of bytecode instructions that were covered by fuzzing's generated tests
+ "covered_bytecode_instructions_in_class_by_concolic": 376, // amount of bytecode instructions that were covered by concolic's generated tests
+ "total_bytecode_instructions_in_class": 1442 // total amount of bytecode instructions in methods with at least one testcase generated
+ }
+ },
+ // ...
+ ]
+ }
+ ]
+ }
+]
+```
+
+### Metadata
+
+Our main goal is to find code changes or run conditions related to the reduced UnitTestBot performance. Thus, we collect metadata about each run: the commit hash, the UnitTestBot build number, and also information about the environment (including JDK and build system versions, and other parameters).
+
+The `insert_metadata.py` script is responsible for doing this. To run it you have to specify the following arguments.
+
+To get more information about input arguments call script with option `--help`.
+
+Output format: you get the JSON file, containing metadata, statistics and parameters grouped by target project and classes.
+
+Input example:
+```
+--stats_file stats.json --output_file data/meta-stats.json
+--commit 66a1aeb6 --branch main
+--build 2022.8 --timestamp 1661330445
+--source_type github-action --source_id 2917672580
+```
+
+Output example (statistics followed by metadata):
+```json5
+{
+ "version": 2, // version of json format
+ "targets": [ // projects and methods that have been processed
+ {
+ "target": "guava", // name of project
+ "summarised": [ // list of summarised metrics with parameters on each run
+ {
+ "parameters": {
+ "fuzzing_ratio": 0.1, // how long does fuzzing takes
+ "class_timeout_sec": 20, // test generation timeout for one class
+ "run_timeout_min": 20 // total timeout for this run
+ },
+ "metrics": {
+ "total_classes": 20, // classes count
+ "testcases_generated": 1042, // generated unit-tests count
+ "classes_failed_to_compile": 0, // classes that's tests are not compilable
+ "classes_canceled_by_timeout": 4, // classes that's generation was canceled because of timeout
+ "total_methods": 526, // methods count
+ "methods_with_at_least_one_testcase_generated": 345, // methods with at least one successfully generated test
+ "methods_with_at_least_one_exception": 32, // methods that's generation contains exceptions
+ "methods_without_any_tests_and_exceptions": 59, // suspicious methods without any tests and exceptions
+ "total_bytecode_instruction_coverage": 0.44486412758, // total bytecode coverage of generated tests
+ "total_bytecode_instruction_coverage_by_fuzzing": 0.30909663204, // total bytecode coverage of fuzzing's generated tests
+ "total_bytecode_instruction_coverage_by_concolic": 0.36344559857, // total bytecode coverage of concolic's generated tests
+ "averaged_bytecode_instruction_coverage_by_classes": 0.5315060991492891 // mean bytecode coverage by class
+ }
+ },
+ // ...
+ ],
+ "by_class": [ // list of metrics and parameters for all classes in project and on each run
+ {
+ "class_name": "com.google.common.math.LongMath", // name of processed class
+ "data": [ // metrics and parameters on each run
+ {
+ "parameters": { // parameters on this run
+ "fuzzing_ratio": 0.1, // how long does fuzzing takes
+ "class_timeout_sec": 20, // test generation timeout for one class
+ "run_timeout_min": 20 // total timeout for this run
+ },
+ "metrics": { // metrics for specified class on this run
+ "testcases_generated": 91, // amount of generated unit-tests
+ "failed_to_compile": false, // compilation generated tests are failure
+ "canceled_by_timeout": true, // generation is interrupted because of timeout
+ "total_methods_in_class": 31, // methods count in this class
+ "methods_with_at_least_one_testcase_generated": 26, // methods with at least one successfully generated test
+ "methods_with_at_least_one_exception": 0, // methods that's generation contains exceptions
+ "methods_without_any_tests_and_exceptions": 5, // suspicious methods without any tests and exceptions
+ "total_bytecode_instruction_coverage_in_class": 0.40568654646, // bytecode coverage of generated tests
+ "total_bytecode_instruction_coverage_in_class_by_fuzzing": 0.33911234396, // bytecode coverage of fuzzing's generated tests
+ "total_bytecode_instruction_coverage_in_class_by_concolic": 0.26074895977 // bytecode coverage of concolic's generated tests
+ }
+ },
+ // ...
+ ]
+ },
+ // ...
+ ]
+ },
+ // ...
+ ],
+ "metadata": { // device's properties
+ "source": { // information about runner
+ "type": "github-action",
+ "id": "2917672580"
+ },
+ "commit_hash": "66a1aeb6", // commit hash of used utbot build
+ "branch": "main", // branch of used utbot build
+ "build_number": "2022.8", // build number of used utbot build
+ "timestamp": 1661330445, // run timestamp
+ "date": "2022-08-24T08:40:45", // human-readable run timestamp
+ "environment": { // device's environment
+ "host": "fv-az183-700",
+ "OS": "Linux version #20~20.04.1-Ubuntu SMP Fri Aug 5 12:16:53 UTC 2022",
+ "java_version": "openjdk version \"11.0.16\" 2022-07-19 LTS\nOpenJDK Runtime Environment Zulu11.58+15-CA (build 11.0.16+8-LTS)\nOpenJDK 64-Bit Server VM Zulu11.58+15-CA (build 11.0.16+8-LTS, mixed mode)\n",
+ "gradle_version": "Gradle 7.4.2",
+ "JAVA_HOME": "/opt/hostedtoolcache/Java_Zulu_jdk+fx/11.0.16-8/x64",
+ "KOTLIN_HOME": "/usr",
+ "PATH": "/opt/hostedtoolcache/Python/3.9.13/x64/bin:/opt/hostedtoolcache/Python/3.9.13/x64:/home/runner/gradle-installations/installs/gradle-7.4.2/bin:/opt/hostedtoolcache/Java_Zulu_jdk+fx/11.0.16-8/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
+ }
+ }
+}
+```
+
+### Datastorage structure
+
+We store the collected statistics in our repository. You can find two special branches: `monitoring-data` and `monitoring-aggregated-data`.
+
+The `monitoring-data` branch is a storage for raw statistics data as well as metadata.
+
+The filename format: `---------.json`
+
+### Grafana
+
+#### Usage
+
+We can use [Grafana](https://monitoring.utbot.org) for more dynamic and detailed statistics visualisation. Grafana pulls data from our repository automatically.
+
+#### Metrics format
+
+Our goal after collecting statistics is uploading results into grafana. For this we should prepare data and send it to our server.
+
+The `prepare_metrics.py` script is responsible for doing this. To run it you have to specify the following arguments.
+
+To get more information about input arguments call script with option `--help`.
+
+Output format: you get the JSON file, containing array of metrics with some labels.
+
+Output example:
+```json5
+[
+ // summarised
+ {
+ "metric": "testcases_generated",
+ "labels": {
+ "project": "guava",
+ "fuzzing_ratio": 0.1
+ },
+ "value": 1024
+ },
+ // ...
+ // by classes
+ {
+ "metric": "testcases_generated",
+ "labels": {
+ "project": "guava",
+ "class": "com.google.common.math.LongMath",
+ "fuzzing_ratio": 0.1
+ },
+ "value": 91
+ },
+ // ...
+]
+```
diff --git a/docs/OverallArchitecture.md b/docs/OverallArchitecture.md
new file mode 100644
index 0000000000..ba9a48562a
--- /dev/null
+++ b/docs/OverallArchitecture.md
@@ -0,0 +1,380 @@
+# UnitTestBot overall architecture
+
+Get the bird's-eye view of UnitTestBot overall architecture in the following chart. Check the purpose of each component in the descriptions below.
+
+```mermaid
+flowchart TB
+ subgraph Clients
+ direction LR
+ IntellijPlugin
+ MavenPlugin["Maven/Gradle plugins"]
+ GithubAction-->MavenPlugin
+ ExternalJavaClient[\External Java Client\]
+ CLI
+ ContestEstimator
+
+ end
+
+ subgraph Facades
+ direction LR
+ EngineMain[[EngineMain]]
+ UtBotJavaApi[[UtBotJavaApi]]
+ GenerateTestsAndSarifReport[[GenerateTestsAndSarifReport]]
+ end
+ IntellijPlugin--Rd-->EngineMain
+ MavenPlugin-->GenerateTestsAndSarifReport
+ ExternalJavaClient-->UtBotJavaApi
+
+ subgraph API["Generation API"]
+ direction LR
+ TestCaseGenerator[[TestCaseGenerator]]
+ CodeGenerator[[CodeGenerator]]
+ end
+ Facades-->API
+ CLI-->API
+ ContestEstimator-->API
+
+
+
+ subgraph Components
+ direction LR
+ SymbolicEngine-->jlearch
+ SymbolicEngine-->ConcreteExecutor
+ Fuzzer-->ConcreteExecutor
+ SarifReport
+ Minimizer
+ CodeRenderer
+ Summaries
+ jlearch
+ end
+ CodeGenerator-->CodeRenderer
+ TestCaseGenerator-->SymbolicEngine
+ TestCaseGenerator-->Fuzzer
+ TestCaseGenerator-->Minimizer
+ TestCaseGenerator-->Summaries
+ GenerateTestsAndSarifReport-->SarifReport
+
+ UTSettings((UTSettings))
+ UTSettings<--Rd/local-->Components
+ UTSettings<---->Clients
+ TestCaseGenerator--warmup-->ConcreteExecutor
+ ConcreteExecutor--Rd-->InstrumentedProcess
+
+```
+
+## Typical interaction between components
+
+An interaction diagram for UnitTesBot components is presented below. See how it starts from IntelliJ IDEA plugin UI and follow the flow.
+```mermaid
+sequenceDiagram
+ autonumber
+ actor user as User
+ participant ij as IDE process
+ participant engine as Engine process
+ participant concrete as Instrumented process
+
+ user ->> ij: Invoke "Generate Tests with UnitTestBot"
+ ij ->> ij: Calculate methods, framework to show
+ ij ->> user: Show UI
+
+ break User clicked "Cancel"
+ user -->> user: Exit
+ end
+ user ->> ij: Click "Generate Tests"
+ ij ->> ij: Calculate what JAR needs to be installed
+
+ opt Some JARs need to be installed
+ ij ->> ij: Install JARs
+ end
+
+ ij ->> engine: Start process
+ activate engine
+ ij ->> engine: Setup up context
+
+ loop For all files
+ ij ->> engine: Generate UtExecution models
+ loop For all UtExecution models: for the method found by engine
+ engine ->> concrete: Run concretely
+ end
+ engine --> engine: Minimize the number of tests for the method
+ engine --> engine: Generate summaries for the method
+ end
+ ij ->> engine: Render code
+ engine ->> ij: File with tests
+ deactivate engine
+
+```
+
+## Clients
+
+### IntelliJ IDEA plugin
+
+The plugin provides
+* a UI for the IntelliJ-based IDEs to use UnitTestBot directly from source code,
+* the linkage between IntelliJ Platform API and UnitTestBot API,
+* support for the most popular programming languages and frameworks for end users (the plugin and its optional dependencies are described in [plugin.xml](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/resources/META-INF/plugin.xml) and nearby, in the [`META-INF`](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-intellij/src/main/resources/META-INF) folder).
+
+The main plugin module is [utbot-intellij](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-intellij), providing support for Java and Kotlin.
+Also, there is an auxiliary [utbot-ui-commons](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-ui-commons) module to support providers for other languages.
+
+As for the UI, there are two entry points:
+* [GenerateTestAction](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt) for _preparing and calling_ test generation;
+* [SettingsWindow](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt) for _per-project_ UnitTestBot configuring.
+
+The main plugin-specific features are:
+* A common action for generating tests right from the editor or a project tree — with a generation scope from a single method up to the whole source root. See [GenerateTestAction](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt) — the same for all supported languages.
+* Auto-installation of the user-chosen testing framework as a project library dependency (JUnit 4, JUnit 5, and TestNG are supported). See [UtIdeaProjectModelModifier](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/UtIdeaProjectModelModifier.kt) and the Maven-specific version: [UtMavenProjectModelModifier](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/UtMavenProjectModelModifier.kt).
+* Suggesting the location for a test source root and auto-generating the `utbot_tests` folder there, providing users with a sandbox in their code space.
+* Optimizing generated code with IDE-provided intentions (experimental). See [IntentionHelper](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/IntentionHelper.kt) for details.
+* An option for distributing generation time between symbolic execution and fuzzing explicitly.
+* Running generated tests while showing coverage with the IDE-provided measurement tools. See [RunConfigurationHelper](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/RunConfigurationHelper.kt) for implementation.
+* Displaying the UnitTestBot-found code defects as IntelliJ-specific inspections and quickfixes in the "Problems" tool window. See the [inspection](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/inspection) package.
+* Two kinds of Javadoc comments in the generated code: rendered as plain text and structured via custom tags. See the [javadoc](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/javadoc) package.
+* A self-documenting [`settings.properties`](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/SettingsProperties.md) file with the settings for low-level UnitTestBot tuning.
+
+### Gradle/Maven plugins
+
+Plugins for Gradle/Maven build systems provide the UnitTestBot `GenerateTestsAndSarifReportFacade` component with the user-chosen settings (test generation timeout, testing framework, etc.). This component runs test generation and creates SARIF reports.
+
+For more information on the plugins, please refer to the detailed design documents:
+- [UnitTestBot Gradle plugin](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-gradle/docs/utbot-gradle.md)
+- [UnitTestBot Maven plugin](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-maven/docs/utbot-maven.md)
+
+You can find the modules here:
+* [utbot-gradle](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-gradle)
+* [utbot-maven](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-maven)
+
+### GitHub Action
+
+UnitTestBot GitHub Action displays the detected code defects in the GitHub "Security Code Scanning Alerts" section.
+
+You can find UnitTestBot GitHub Action in the separate [repository](https://github.com/UnitTestBot/UTBotJava-action).
+
+UnitTestBot GitHub Action uses the [UnitTestBot Gradle plugin](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-gradle)
+to run UnitTestBot on the user's repository and imports the SARIF output into the "Security Code Scanning Alerts" section.
+Please note that at the moment this action cannot work with Maven projects because
+the [UnitTestBot Maven plugin](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-maven) has not been published yet.
+
+For more information on UnitTestBot GitHub Action, please refer to the [related docs](https://github.com/UnitTestBot/UTBotJava-action#readme).
+You can also find a detailed [usage example](https://github.com/UnitTestBot/UTBotJava-action-example).
+
+### Command-line interface (CLI)
+
+With CLI, one can run UnitTestBot from the command line.
+
+CLI implementation is placed in the [utbot-cli](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-cli) module. UnitTestBot CLI has two main commands: `generate` and `run` — use `--help` to find more info on their options.
+
+An executable CLI is distributed as a JAR file.
+
+We provide Linux Docker images containing CLI. They are stored on [GitHub Packages](https://github.com/UnitTestBot/UTBotJava/pkgs/container/utbotjava%2Futbot_java_cli).
+
+### Contest estimator
+
+Contest estimator runs UnitTestBot on the provided projects and returns the generation statistics such as instruction coverage.
+
+Contest estimator is placed in the [utbot-junit-contest](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-junit-contest) module and has two entry points:
+- [ContestEstimator.kt](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-junit-contest/src/main/kotlin/org/utbot/contest/ContestEstimator.kt) is the main entry point. It runs UnitTestBot on the specified projects, calculates statistics for the target classes and projects, and outputs them to a console.
+- [StatisticsMonitoring.kt](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/StatisticsMonitoring.kt) is an additional entry point, which does the same as the previous one but can be configured from a file and dumps the resulting statistics to a file.
+ It is used to [monitor and chart](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/NightStatisticsMonitoring.md) statistics nightly.
+
+## Components
+
+### Symbolic engine
+
+Symbolic engine is a component maintaining the whole analysis process: from the moment it takes information about a method under test (MUT) till the moment it returns a set of execution results along with the information required to reproduce the MUT's execution paths. The engine uses symbolic execution to explore the paths in a MUT's control flow graph (CFG).
+
+The technique is rather complex, so the engine consists of several subcomponents, each responsible for a certain part of the analysis:
+
+* [UtBotSymbolicEngine.kt](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/UtBotSymbolicEngine.kt) contains a `UtBotSymbolicEngine` class — it manages interaction between different parts of the system and controls the analysis flow. This class is an entry point for symbolic execution in UnitTestBot. Using `UtBotSymbolicEngine` API, the users or UnitTestBot components can start, suspend or stop the analysis. `UtBotSymbolicEngine` provides a connection between the components by taking execution states from [PathSelector](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/selectors/PathSelector.kt) and pushing them either into [Traverser](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/Traverser.kt) or in [ConcreteExecutor](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/ConcreteExecutor.kt), depending on their status and settings.
+ In a few words, the pipeline looks like this: the engine takes a state from [PathSelector](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/selectors/PathSelector.kt), pushes it into [Traverser](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/Traverser.kt), and then gets an updated state from it. If this state is not terminal, `UtBotSymbolicEngine` pushes it to the queue in the path selector. If this state is terminal, it either calls `ConcreteExecutor` to get a concrete result state or yields a symbolic result into the resulting flow.
+* [PathSelector](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/selectors/PathSelector.kt) is a class making a decision on which instruction of the program should be processed next. It is located in `PathSelector.kt`, but the whole [selectors](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-framework/src/main/kotlin/org/utbot/engine/selectors) package is related to it. `PathSelector` has a pretty simple interface: it can put a state in the queue or return a state from that queue.
+* [Traverser](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/Traverser.kt) processes a given state. It contains information about CFG, a hierarchy of classes in the program, a symbolic type system, and mocking information. `Traverser` is the most important class in the symbolic engine module. It knows how to process instructions in CFG, how to update the dependent symbolic memory, and which constraints should be added to go through a certain path. Having processed an instruction from the given state, `Traverser` creates a new one, with updated memory and path constraints.
+
+There are other important classes in the symbolic engine subsystem. Here are some of them:
+* [Memory](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/Memory.kt) is responsible for the symbolic memory representation of a state in the program.
+* [TypeRegistry](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/engine/types/TypeRegistry.kt) contains information about a type system.
+* `Mocker` decides whether we should mock an object or not.
+
+You can find all the engine-related classes in the [engine](https://github.com/UnitTestBot/UTBotJava/tree/main/utbot-framework/src/main/kotlin/org/utbot/engine) module.
+
+### Concrete executor
+
+`ConcreteExecutor` is the input point for the _instrumented process_ used by UnitTestBot symbolic engine and fuzzer. This class provides a smooth and concise interaction between the _instrumented process_ and a user, whereas the _instrumented process_ executes a given function with the supplied arguments.
+
+`ConcreteExecutor` is parameterized with `Instrumentation` and its return type via the generic arguments. `Instrumentation` is an interface, so inheritors have to implement the logic of a specific method invocation in an isolated environment as well as the `transform` function used for instrumenting classes. For our purposes, we use `UtExecutionInstrumentation`.
+
+The main `ConcreteExecutor` function is
+```kotlin
+suspend fun executeAsync(
+ kCallable: KCallable<*>,
+ arguments: Array,
+ parameters: Any?
+): TResult
+```
+It serializes the arguments and some parameters (e.g., static fields), sends it to the _instrumented process_ and retrieves the result.
+
+Internally, `ConcreteExecutor` uses `Rd` for interprocess communication and `Kryo` for objects serialization. You don't need to provide a marshaller, as `Kryo` serializes the objects (sometimes it fails).
+
+`ConcreteExecutor` is placed in the [utbot-instrumentation](../utbot-instrumentation) module. You can find the corresponding tests in the [utbot-instrumentation-tests](../utbot-instrumentation-tests) module.
+
+### Instrumented process
+
+`Instrumented process` concretely runs the user functions with the specified arguments and returns the result of execution.
+
+Additionally, `Instrumented process` evaluates instruction coverage and mocks function invocations and creating instances via the user's Java bytecode instrumentation.
+
+The main concept is _instrumentation_. `Instrumentation` is a class that implements the [corresponding](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/instrumentation/Instrumentation.kt) interface. It transforms the user code and provides invoking user functions.
+
+`Instrumented process` supports the following commands described in [InstrumentedProcessModel.kt](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-rd/src/main/rdgen/org/utbot/rd/models/InstrumentedProcessModel.kt):
+- `AddPaths` tells where the `Instrumented process` should search for the user classes.
+- `Warmup` forces loading and instrumenting user classes.
+- `SetInstrumentation` tells which instrumentation the `Instrumented process` should use.
+- `InvokeMethodCommand` requests the `Instumented process` to invoke a given user function and awaits the results.
+- `StopProcess` just stops the `Instrumented process`.
+- `CollectCoverage` requests collecting code coverage for the specified class.
+- `ComputeStaticField` requests the specified static field value.
+
+These commands are delivered from the other processes by `Rd`.
+
+The main instrumentation of UnitTestBot is [UtExecutionInstrumentation](https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-framework/src/main/kotlin/org/utbot/framework/concrete/UtExecutionInstrumentation.kt).
+
+### Code generator
+
+Code generation and rendering are a part of the test generation process in UnitTestBot.
+UnitTestBot gets the synthetic representation of generated test cases from the fuzzer or the symbolic engine.
+This representation (or model) is implemented in the `UtExecution` class.
+The `codegen` module generates the real test code based on this `UtExecution` model
+and renders it in a human-readable form.
+
+The `codegen` module
+- converts `UtExecution` test information into an Abstract Syntax Tree (AST) representation using `CodeGenerator`,
+- renders this AST according to the requested configuration (considering programming language, testing
+ framework, mocking and parameterization options) using `renderer`.
+
+The `codegen` entry points are:
+- `CodeGenerator.generateAsString()`
+- `CodeGenerator.generateAsStringWithTestReport()`
+
+The detailed implementation is described in the [Code generation and rendering](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/CodeGenerationAndRendering.md) design doc.
+
+### Fuzzer
+
+Fuzzing is a versatile technique for "guessing" values to be used as method arguments. To generate these kinds of values, the fuzzer uses generators, mutators, and predefined values.
+
+Fuzzing has been previously implemented in UnitTestBot as the solution for Java. For now, we have developed the generic platform that supports generating fuzzing tests for different languages. The Java fuzzing solution in UnitTestBot is marked as deprecated — it will soon be replaced with the fuzzing platform.
+
+You can find the relevant code here:
+- `utbot-fuzzing` is the general fuzzing platform module. The related API is located in `org/utbot/fuzzing/Api.kt`.
+- `utbot-fuzzer` is the module with the fuzzing solution for Java. Find the corresponding API in `org/utbot/fuzzing/JavaLanguage.kt`.
+
+Entry point for generating values (Java): `org/utbot/fuzzing/JavaLanguage.kt#runJavaFuzzing(...)`
+
+You can find the detailed description in the [Fuzzing Platform](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/Fuzzing%20Platform.md) design doc.
+
+### Minimizer
+
+Minimization is used to decrease the amount of `UtExecution` instances without decreasing coverage.
+
+The entry point is the [minimizeTestCase](https://github.com/UnitTestBot/UTBotJava/blob/d2d2e350bc75943b78f2078002a5cabc5dd62072/utbot-framework/src/main/kotlin/org/utbot/framework/minimization/Minimization.kt#L38) function. It receives a set of `UtExecution` instances and a grouping function (grouping by `UtExecution::utExecutionResult`). Then the minimization procedure divides the set of `UtExecution` instances into several groups. Each group is minimized independently.
+
+We have different groups — here are some of them:
+- A _successful regression suite_ that consists of `UtSuccess` and `UtExplicitlyThrownException` executions.
+- An _error suite_ consisting of `UtImplicitlyThrownException` executions.
+- A _timeout suite_ that consists of `UtTimeoutException` executions.
+- A _crash suite_ consisting of executions where some parts of the engine failed.
+
+Each `UtExecution` instance provided should have coverage information, otherwise we add this execution to the test suite instantly. Coverage data are usually obtained from the _instrumented process_ and consist of covered lines.
+
+To minimize the number of executions in a group, we use a simple greedy algorithm:
+1. Pick an execution that covers the maximum number of the previously uncovered lines.
+2. Add this execution to the final suite and mark new lines as covered.
+3. Repeat the first step and continue till there are executions containing uncovered lines.
+
+The whole minimization procedure is located in the [org.utbot.framework.minimization](../utbot-framework/src/main/kotlin/org/utbot/framework/minimization) package inside the [utbot-framework](../utbot-framework) module.
+
+### Summarization module
+
+Summarization is the process of generating detailed test descriptions consisting of
+- test method names
+- testing framework annotations (including `@DisplayName`)
+- Javadoc comments for tests
+- cluster comments for groups of tests (_Regions_)
+
+Each of these description elements can be turned off via `{userHome}/.utbot/settings.properties` (which gets information from `UtSettings.kt`).
+If the summarization process fails due to an error or insufficient information, then the test method receives a unique name and no additional meta-information.
+
+This meta-information is generated for each type of `UtExecution` model and thus may vary significantly.
+Also, Javadoc comments can be rendered in two styles: as plain text or in a special format enriched with the [custom Javadoc tags](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/summaries/CustomJavadocTags.md).
+
+The whole summarization subsystem is located in the `utbot-summary` module.
+
+For detailed information, please refer to the Summarization architecture design document.
+
+### SARIF report generator
+
+SARIF (Static Analysis Results Interchange Format) is a JSON-based format for displaying static analysis results.
+
+All the necessary information about the format and its usage can be found
+in the [official documentation](https://github.com/microsoft/sarif-tutorials/blob/main/README.md)
+and in the related [GitHub Docs](https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/sarif-support-for-code-scanning).
+
+In UnitTestBot, the `SarifReport` class is responsible for generating SARIF reports.
+We use them to display UnitTestBot-detected errors such as unchecked exceptions, overflows, assertion errors, etc.
+
+For example, for the class below
+```Java
+public class Main {
+ int example(int x) {
+ return 1 / x;
+ }
+}
+```
+
+UnitTestBot creates a report containing the following information:
+- `java.lang.ArithmeticException: / by zero` may occur in line 3
+- The exception occurs if `x == 0`
+- To reproduce this error, the user can run the generated `MainTest.testExampleThrowsAEWithCornerCase` test
+- The exception stack trace:
+ - `Main.example(Main.java:3)`
+ - `MainTest.testExampleThrowsAEWithCornerCase(MainTest.java:39)`
+
+## Cross-cutting subsystems
+
+### Rd
+
+UnitTestBot consists of three processes (according to the execution order):
+* _IDE process_ — the process where the plugin part executes.
+* _Engine process_ — the process where the test generation engine executes.
+* _Instrumented process_ — the process where concrete execution takes place.
+
+These processes are built on top of the [Reactive distributed communication framework (Rd)](https://github.com/JetBrains/rd) developed by JetBrains.
+
+One of the main Rd concepts is a _Lifetime_ — it helps to release shared resources upon the object's termination.
+You can find the Rd basic ideas and UnitTestBot implementation details in the [Multiprocess architecture](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/RD%20for%20UnitTestBot.md) design doc.
+
+### Settings
+
+In UnitTestBot, _settings_ are the set of _properties_. Each _property_ is a _key=value_ pair and affects some important aspect of UnitTestBot behavior. UnitTestBot as an IntelliJ IDEA plugin, a CI-tool, or a CLI-tool has low-level _core settings_. The UnitTestBot plugin also has per-project _plugin-specific_ settings.
+
+Core settings are persisted in the _settings file_: `{userHome}/.utbot/settings.properties`. This file is designed for reading only. The defaults for the core settings are provided in source code (`UtSettings.kt`).
+
+The plugin-specific settings are stored per project in the _plugin configuration file_: `{projectDir}/.idea/utbot-settings.xml`. Nobody is expected to edit this file manually.
+
+The end user has three places to change UnitTestBot behavior:
+1. A `{userHome}/.utbot/settings.properties` file — for global settings.
+2. Plugin settings UI (**File** > **Settings** > **Tools** > **UnitTestBot**) — for per-project settings.
+3. Controls in the **Generate Tests with UnitTestBot window** dialog — for per-generation settings.
+
+### Logging
+
+The UnitTestBot Java logging system is implemented across the IDE process, the Engine process, and the Instrumented process.
+
+UnitTestBot Java logging relies on `log4j2` library.
+The custom Rd logging system is recommended as the default one for the Instrumented process.
+
+In the [Logging](../docs/contributing/InterProcessLogging.md) document,
+you can find how to configure the logging system when UnitTestBot Java is used
+* as an IntelliJ IDEA plugin,
+* as Contest estimator or the Gradle/Maven plugins, via CLI or during the CI test runs.
+
+Implementation details, log level and performance questions are also addressed [here](../docs/contributing/InterProcessLogging.md).
\ No newline at end of file
diff --git a/docs/PythonSupport.md b/docs/PythonSupport.md
new file mode 100644
index 0000000000..eea6d80909
--- /dev/null
+++ b/docs/PythonSupport.md
@@ -0,0 +1,31 @@
+# UnitTestBot Python
+
+[UnitTestBot](https://www.utbot.org/) is the tool for automated unit test generation available as an IntelliJ IDEA plugin, or a command-line interface.
+
+Now UnitTestBot provides fuzzing-based support for Python.
+
+## Requirements
+
+1. IntelliJ IDEA — for compatibility, see [UnitTestBot on JetBrains Marketplace](https://plugins.jetbrains.com/plugin/19445-unittestbot/versions).
+2. Python 3.8 or later
+3. [Python plugin](https://plugins.jetbrains.com/plugin/631-python) for IntelliJ IDEA
+
+If you already have a Python project, you usually have no need to install or configure anything else, but if you
+have trouble with launching UnitTestBot for Python code, please refer to [advanced requirements section](../utbot-python/docs/CLI.md#requirements).
+
+## How to install and use
+
+To try UnitTestBot Python in your IntelliJ IDEA:
+1. To install the plugin, please refer to [UnitTestBot user guide](https://github.com/UnitTestBot/UTBotJava/wiki/Install-or-update-plugin).
+2. Configure the Python interpreter for your project and make sure IntelliJ IDEA resolves all the imports.
+3. In your IntelliJ IDEA, go to **File** > **Settings** > **Tools**, choose **UnitTestBot** and enable **Experimental languages support**.
+
+ **(!) NOTE:** be sure to enable this option for **_each_** project.
+
+4. To generate tests, place the caret at the required function and press **Alt+Shift+U**. To find the appropriate shortcut for the OS you are using, check the context menu.
+
+To use UnitTestBot Python via command-line interface, please refer to the [CLI guide](../utbot-python/docs/CLI.md).
+
+## How to contribute and get support
+
+To get information on contributing and getting support, please see [UnitTestBot Java Readme](https://github.com/UnitTestBot/UTBotJava#readme).
diff --git a/docs/RD for UnitTestBot.md b/docs/RD for UnitTestBot.md
new file mode 100644
index 0000000000..49ffba4e4d
--- /dev/null
+++ b/docs/RD for UnitTestBot.md
@@ -0,0 +1,235 @@
+# Multiprocess architecture
+
+## Overview
+
+UnitTestBot consists of three processes:
+1. `IDE process` — the process where the plugin part executes. We also call it the _plugin process_ or the
+ _IntelliJ IDEA process_.
+2. `Engine process` — the process where the test generation engine executes.
+3. `Instrumented process` — the process where concrete execution takes place.
+
+These processes are built on top of the [Reactive distributed communication framework (Rd)](https://github.com/JetBrains/rd) developed by JetBrains. Rd plays a crucial role in UnitTestBot machinery, so we briefly
+describe this library here.
+
+To gain an insight into Rd, one should grasp these Rd concepts:
+1. Lifetime
+2. Rd entities
+3. `Rdgen`
+
+## Lifetime concept
+
+Imagine an object holding resources that should be released upon the object's death. In Java,
+`Closeable` and `AutoCloseable` interfaces are introduced to help release resources that the object is holding.
+Support for `try`-with-resources in Java and `Closeable.use` in Kotlin are also implemented to assure that the
+resources are closed after the execution of the given block.
+
+Though, releasing resources upon the object's death is still problematic:
+1. An object's lifetime can be more complicated than the scope of `Closeable.use`.
+2. If `Closeable` is a function parameter, should we close it?
+3. Multithreading and concurrency may lead to more complex situations.
+4. Considering all these issues, how should we correctly close the objects that depend on some other object's
+ lifetime? How can we perform this task in a fast and easy way?
+
+So, Rd introduces the concept of `Lifetime`.
+
+### `Lifetime`
+
+_Note:_ the described relationships and behavior refer to the JVM-related part of Rd.
+
+`Lifetime` is an abstract class, with `LifetimeDefinition` as its inheritor. `LifetimeDefinition`
+has only one difference from its parent: `LifetimeDefinition` can be terminated.
+Each `Lifetime` variable is an instance of `LifetimeDefinition` (we later call it "`Lifetime` instance"). You
+can register callbacks in this `Lifetime` instance — all of them will be executed upon the termination.
+
+Though all `Lifetime` objects are instances of `LifetimeDefinition`, there are conventions for using them:
+1. Do not cast `Lifetime` to `LifetimeDefinion` unless you are the one who created `LifetimeDefinition`.
+2. If you introduce `LifetimeDefinition` somewhere, you should attach it to another `Lifetime` or provide
+ the code that terminates it.
+
+A `Lifetime` instance has these useful methods:
+- `onTermination` executes _lambda_/_closeable_ when the `Lifetime` instance is terminated. If an instance has been
+ already terminated, it executes _lambda_/_closeable_ instantly. Termination proceeds on a thread that has invoked
+ `LifetimeDefinition.terminate`. Callbacks are executed in the **reversed order**, which is _LIFO_: the last added
+ callback is executed first.
+- `onTerminationIfAlive` is the same as `onTermination`, but the callback is executed only if the `Lifetime`
+ instance is `Alive`.
+- `executeIfAlive` executes _lambda_ if the `Lifetime` instance is `Alive`. This method guarantees that the `Lifetime`
+ instance is alive (i.e. will not be terminated) during the whole time of _lambda_ execution.
+- `createdNested` creates the _child_ `LifetimeDefinition` instance: it can be terminated if the _parent_
+ instance is terminated as well; or it can be terminated separately, while the parent instance stays alive.
+- `usingNested` is the same as the `createNested` method but behaves like the `Closeable.use` pattern.
+
+See also:
+- `Lifetime.Eternal` is a global `Lifetime` instance that is never terminated.
+- `Lifetime.Terminated` is a global `Lifetime` instance that has been already terminated.
+- `status` — find more details in the
+[LifetimeStatus.kt](https://github.com/JetBrains/rd/blob/9b806ccc770515f6288c778581c54607420c16a7/rd-kt/rd-core/src/main/kotlin/com/jetbrains/rd/util/lifetime/LifetimeStatus.kt) class from the Rd repository. There are three
+ convenient methods: `IsAlive`, `IsNotAlive`, `IsTerminated`.
+
+### `LifetimeDefinition`
+
+`LifetimeDefinition` instances have the `terminate` method that terminates a `Lifetime` instance and invokes all
+the registered callbacks. If multiple concurrent terminations occur, the method may sometimes return before
+executing all the callbacks because some other thread executes them.
+
+## Rd entities
+
+Rd is a lightweight reactive one-to-one RPC protocol, which is cross-language as well as cross-platform. It can
+work on the same or different machines via the Internet.
+
+These are some Rd entities:
+- `Protocol` encapsulates the logic of all Rd communications. All the entities should be bound to `Protocol` before
+ being used. `Protocol` contains `IScheduler`, which executes a _runnable_ instance on a different thread.
+- `RdSignal` is an entity allowing one to **fire and forget**. You can add a callback for every received message
+ via the `advise(lifetime, callback)` method. There are two interfaces: `ISink` that only allows advising for
+ messages and `ISignal` that can also `fire` events. There is also a `Signal` class with the same behavior
+ but without remote communication.
+
+**Important:** if you `advise` and `fire` from the same process, your callback receives _not only_
+messages from the other process, but also the ones you `fire`.
+
+- `RdProperty` is a stateful property. You can get the current value and advise the callback — an advised
+ callback is executed on a current value and every change.
+- `RdCall` is the remote procedure call.
+
+There are `RdSet`, `RdMap`, and other entities.
+
+An `async` property allows you to `fire` entities from any thread. Otherwise, you would need to do it from
+the `Protocol.scheduler` thread: all Rd entities should be bound to the `Protocol` from the `scheduler` thread, or you
+would get an exception.
+
+## `Rdgen`
+
+`Rdgen` generates custom classes and requests that can be bound to protocol and advised. There is a special model DSL
+for it.
+
+### Model DSL
+
+Examples:
+1. [Korifey](https://github.com/korifey/rd_example/blob/main/src/main/kotlin/org/korifey/rd_example/model/Root.kt) —
+ a simple one.
+2. [Rider Unity plugin](https://github.com/JetBrains/resharper-unity/tree/net223/rider/protocol/src/main/kotlin/model) — a complicated one.
+
+First, you need to define a `Root` object: only one instance of each `Root` can be assigned to `Protocol`.
+
+There is a `Root` extension — `Ext(YourRoot)` — where you can define custom types and model entities. You can assign
+multiple `Root` extensions to the `Protocol`. To generate the auxiliary structures, define them as direct fields.
+
+DSL:
+- `structdef` is a structure with fields that cannot be bound to `Protocol` but can be serialized. This structure
+ can be `openstruct`, i.e. open for inheritance, and `basestruct`, i.e. abstract. Only `field` can be a member.
+- `classdef` is a class that can be bound to a model. It can have `property`, `signal`, `call`, etc.
+ as members. It is possible to inherit: the class can be `openclass`, `baseclass`.
+- `interfacedef` is provided to define interfaces. Use `method` to create a signature.
+
+You can use `extends` and `implements` to implement inheritance.
+
+_Note:_ `Rdgen` can generate models for C# and C++. Their structs and classes have different behavior.
+
+Rd entities — only in bindable models (`Ext`, `classdef`):
+- `property`
+- `signal`
+- `source`
+- `sink`
+- `array` and `immutablelist`
+
+Useful properties in DSL entities:
+- `async` — the same as `async` in Rd entities
+- `docs` — provides KDoc/Javadoc documentation comments for the generated entity
+
+### Gradle
+
+[Example](https://github.com/korifey/rd_example/blob/main/build.gradle)
+
+`RdGenExtension` configures `Rdgen`. The properties are:
+- `sources` — the folders with DSL `.kt` files. If there are no `sources`, scan classpath for the inheritors of `Root`
+ and `Ext`.
+- `hashfile` — a folder to store the `.rdgen` hash file for incremental generation.
+- `packages` — Java package names to search in toplevels, delimited by `,`. Example: `com.jetbrains.rd.model.nova,com,
+ org`.
+
+Configure model generation with the `RdGenExtension.generator` method:
+- `root` — for which root this generator is declared.
+- `namespace` — which namespace should be used in the generated source. In Kotlin, it configures the generated package
+ name.
+- `directory` — where to put the generated files.
+- `transform` — can be `symmetric`, `asis`, and `reversed`. It allows configuring of different model interfaces for
+ various client-server scenarios. _Note:_ in 99% of cases you should use `symmetric`. If you need another option, consult with someone.
+- `language` — can be `kotlin`, `cpp` or `csharp`.
+
+## UnitTestBot project
+
+The `utbot-rd` Gradle project contains model sources in `rdgenModels`. You can find them at
+[`utbot-rd/src/main/rdgen/org/utbot/rd/models`](../utbot-rd/src/main/rdgen/org/utbot/rd/models).
+
+### IDE process
+
+An _IDE process_ uses bundled JetBrains JDK. Code in `utbot-intellij` _**must**_ be compatible will all JDKs and plugin
+SDKs, used by our officially supported Intellij IDEA versions.
+See `sinceBuild` and `untilBuild` in [`utbot-intellij/build.gradle.kts`](../utbot-intellij/build.gradle.kts).
+
+The _IDE process_ starts the _Engine process_. The _IDE process_ keeps the `UtSettings` instance in memory and gets updates for it from Intellij IDEA. The other processes "ask" the _IDE process_ about settings via Rd RPC.
+
+### Engine process
+
+`TestCaseGenerator` and `UtBotSymbolicEngine` run here, in the _Engine process_. The process classpath contains all
+the plugin JAR files (it uses the plugin classpath).
+
+The _Engine process_ _**must**_ run on the JDK that is used in the project under analysis. Otherwise, there will be
+numerous problems with code analysis, `soot`, _Reflection_, and the divergence of the generated code Java API will occur.
+
+Currently, it is prohibited to run more than **one** generation process simultaneously (the limitation is related to
+the characteristics of the native libraries). The process logging mechanism relies on
+that fact, so UnitTestBot processes can exclusively write to a log file.
+
+The starting point in the _IDE process_ is the
+[`EngineProcess`](../utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt) class.
+The _Engine process_ start file is
+[`EngineProcessMain`](../utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineProcessMain.kt).
+The _Engine process_ starts the _Instrumented process_.
+
+### Instrumented process
+
+The starting points in the _Engine process_ are the
+[`InstrumentedProcess`](../utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/rd/InstrumentedProcess.kt)
+and the [`ConcreteExecutor`](../utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/ConcreteExecutor.kt)
+classes. The first one encapsulates the state, while the second one implements the request logic for concrete execution.
+
+The _Instrumented process_ runs on the same JDK as the _Engine process_ to prevent deviation from the _Engine process_.
+Sometimes the _Instrumented process_ may unexpectedly die due to concrete execution.
+
+### Useful info
+
+1. If you need to use Rd, add the following dependencies:
+ ```
+ implementation group: 'com.jetbrains.rd', name: 'rd-framework', version: rdVersion
+
+ implementation group: 'com.jetbrains.rd', name: 'rd-core', version: rdVersion
+ ```
+2. There are useful classes in `utbot-rd` to work with Rd and processes:
+ - `LifetimedProcess` binds a `Lifetime` instance to a process. If the process dies, the `Lifetime` instance
+ terminates, and vice versa. You can terminate the `Lifetime` instance manually — this will destroy the process.
+ - `ProcessWithRdServer` starts the Rd server and waits for the connection.
+ - `ClientProtocolBuilder` — you can use it in a client process to correctly connect to `ProcessWithRdServer`.
+3. How `ProcessWithRdServer` communication works:
+ - Choose a free port.
+ - Create a client process and pass the port as an argument.
+ - Both processes create protocols, bind the model and setup callbacks.
+ - A server process cannot send messages until the _child_ creates a protocol (otherwise, messages are lost), so
+ the client process has to signal that it is ready.
+ - The client process creates a special file in the `temp` directory, which is observed by a _parent_ process.
+ - When the parent process spots the file, it deletes this file and sends a special message to the client process
+ confirming communication success.
+ - Only when the answer of the client process reaches the server, the processes are ready.
+4. How to write custom RPC commands:
+ - Add a new `call` in a model, for example, in `EngineProcessModel`.
+ - Re-generate models: there are special Gradle tasks for this in the `utbot-rd/build.gradle` file.
+ - Add a callback for the new `call` in the corresponding start files, for example, in `EngineProcessMain.kt`.
+ - **Important**: do not add [`Rdgen`](https://mvnrepository.com/artifact/com.jetbrains.rd/rd-gen) as
+ an implementation dependency — it breaks some JAR files as it contains `kotlin-compiler-embeddable`.
+5. Logging & debugging:
+ - [Interprocess logging](contributing/InterProcessLogging.md)
+ - [Interprocess debugging](./contributing/InterProcessDebugging.md)
+6. Custom protocol marshaling types: do not spend time on it until `UtModels` get simpler, e.g. compatible with
+ `kotlinx.serialization`.
+
diff --git a/docs/ResultAndErrorHandlingApiOfTheInstrumentedProcess.md b/docs/ResultAndErrorHandlingApiOfTheInstrumentedProcess.md
new file mode 100644
index 0000000000..e605f8c1e6
--- /dev/null
+++ b/docs/ResultAndErrorHandlingApiOfTheInstrumentedProcess.md
@@ -0,0 +1,92 @@
+# Instrumented process API: handling errors and results
+
+In UnitTestBot Java, there are three processes:
+* IDE process
+* Engine process
+* Instrumented process
+
+The IDE process launches the plugin so a user can request test generation.
+Upon the user request, the Engine process is initiated — it is responsible for the input values generation.
+
+Here, in the Engine process, there is a `ConcreteExecutor` class,
+conveying the generated input values to the `InstrumentedProcess` class.
+The `InstrumentedProcess` class creates the third physical process —
+the Instrumented process that runs the user functions concretely with the provided input values
+and returns the execution result.
+
+A _client_ is an object that uses the `ConcreteExecutor` directly — it works in the Engine process as well.
+
+`ConcreteExecutor` expects an `Instrumentation` object, which is responsible for, say, mocking static methods. In UnitTestBot Java, we use `UtExecutionInstrumentation` that implements the `Instrumentation` interface.
+
+Basically, if an exception occurs in the Instrumented process,
+it is rethrown to the client object in the Engine process via Rd.
+
+## Concrete execution outcomes
+
+`ConcreteExecutor` is parameterized with `UtExecutionInstrumentation`. When the `ConcreteExecutor::executeAsync` method is called, it leads to one of the three possible outcomes:
+
+* `InstrumentedProcessDeathException`
+
+Some errors lead to the instant termination of the Instrumented process.
+ Such errors are wrapped in `InstrumentedProcessDeathException`.
+ Prior to processing the next request, the Instrumented process is restarted automatically, though it can take time.
+`InstrumentedProcessDeathException` means that there is an Instrumented process internal issue.
+Nonetheless, this exception is handled in the Engine process.
+
+* `InstrumentedProcessError`
+
+Errors that do not cause the Instrumented process termination are wrapped in `InstrumentedProcessError`.
+ The process is not restarted, so client's requests will be handled by the same process.
+ We believe that the Instrumented process state is consistent but in some tricky situations it _may be not_.
+ These situations should be reported as bugs.
+`InstrumentedProcessError` also means
+that there is an Instrumented process internal issue that should be handled by the client object
+(in the Engine process).
+The issue may occur because the client provides the wrong configuration or parameters,
+but the Instrumented process cannot exactly determine what's wrong with the client's data:
+one can find a description of the phase the exception has been thrown from.
+
+* `UtConcreteExecutionResult`
+
+If the Instrumented process performs well,
+or something is broken but the Instrumented process knows exactly what is wrong with the input, `UtConcreteExecutionResult` is returned.
+The Instrumented process guarantees that the state is _consistent_.
+A `UtConcreteExecutionResult::result` field helps to find the exact reason for a failure:
+* `UtSandboxFailure` — permission violation;
+* `UtTimeoutException` — test execution time exceeds the provided time limit (`UtConcreteExecutionData::timeout`);
+* `UtExecutionSuccess` — successful test execution;
+* `UtExplicitlyThrownException` — explicitly thrown exception for a target method (via `throw` instruction);
+* `UtImplicitlyThrownException` — implicitly thrown exception for a target method (`NPE`, `OOB`, etc., or an exception thrown inside the system library).
+
+## Error handling implementation
+
+The pipeline of `UtExecutionInstrumentation::invoke` includes 6 phases:
+1. `ValueConstructionPhase` — constructs values from the models;
+2. `PreparationPhase` — prepares statics, etc.;
+3. `InvocationPhase` — invokes the target method;
+4. `StatisticsCollectionPhase` — collects coverage and execution-related data;
+5. `ModelConstructionPhase` — constructs the result models from the heap objects (`Any?`);
+6. `PostprocessingPhase` — restores statics, clears mocks, etc.
+
+Each phase can throw two kinds of exceptions:
+- `ExecutionPhaseStop` — indicates that the phase tries to stop the invocation pipeline completely because it already has a result. The returned result is the `ExecutionPhaseStop::result` field.
+- `ExecutionPhaseError` — indicates that an unexpected error has occurred during the phase execution, and this error is rethrown to the Engine process.
+
+`PhasesController::computeConcreteExecutionResult` then matches on the exception type:
+* it rethrows the exception if the type is `ExecutionPhaseError`,
+* it returns the result if type is `ExecutionPhaseStop`.
+
+## Timeout
+
+Concrete execution is limited in time: the `UtExecutionInstrumentation::invoke` method is subject to timeout as well.
+
+For `UtExecutionInstrumentation` in the Instrumented process, we wrap the phases that can take a long time with the `executePhaseInTimeout` block.
+This block tracks the elapsed time.
+If a phase wrapped with this block exceeds the timeout, it returns `TimeoutException`.
+
+One cannot be sure that the cancellation request immediately breaks the invocation pipeline inside the Instrumented process.
+Invocation is guaranteed to finish within timeout.
+It may or _may not_ finish earlier.
+The request that has been sent to the Instrumented process is _uncancellable_ by design.
+
+Even if the `TimeoutException` occurs, the Instrumented process is ready to process the new requests.
\ No newline at end of file
diff --git a/docs/Sandboxing.md b/docs/Sandboxing.md
new file mode 100644
index 0000000000..15d2961146
--- /dev/null
+++ b/docs/Sandboxing.md
@@ -0,0 +1,110 @@
+# Sandboxing tests with Java Security Manager
+
+## What is sandboxing?
+
+Sandboxing is a security technique to find unsafe code fragments and prevent them from being executed.
+
+What do we mean by "unsafe code" in Java? The most common forbidden actions are:
+
+* working with files (read, write, create, delete),
+* connecting to [sockets](https://github.com/UnitTestBot/UTBotJava/issues/792),
+* invoking `System.exit()`,
+* accessing system properties or JVM properties,
+* using reflection.
+
+## Why do we need sandboxing for test generation?
+
+During test generation, UnitTestBot executes the source code with the concrete values. All the fuzzer runs require
+concrete execution and some of the symbolic execution processes invoke it as well. If the source code contains
+potentially unsafe operations, executing them with the concrete values may lead to fatal errors. It is safer to catch
+these operations and break the concrete execution process with `AccessControlException` thrown.
+
+## What do the sandboxed tests look like?
+
+When the source code fragments are suspicious and the corresponding test generation processes are interrupted, the tests with the `@Disabled` annotation and a stack trace appear in the output:
+
+ public void testPropertyWithBlankString() {
+ SecurityCheck securityCheck = new SecurityCheck();
+
+ /* This test fails because method [com.company.security.SecurityCheck.property] produces [java.security.AccessControlException: access denied ("java.util.PropertyPermission" " " "read")]
+ java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
+ java.security.AccessController.checkPermission(AccessController.java:886)
+ java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
+ java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294)
+ java.lang.System.getProperty(System.java:719)
+ com.company.security.SecurityCheck.property(SecurityCheck.java:32) */
+ }
+
+## How does UnitTestBot sandbox code execution?
+
+UnitTestBot for Java/Kotlin uses [Java Security Manager](https://docs.oracle.com/javase/tutorial/essential/environment/security.html) for sandboxing. In general, the Security Manager allows applications to implement a security policy. It determines whether an operation is potentially safe or not and interrupts the execution if needed.
+
+In UnitTestBot the **secure mode is enabled by default**: only a small subset of runtime permissions necessary for
+test generation are given (e.g. fields reflection is permitted by default). To extend the list of permissions learn
+[How to handle sandboxing](#How-to-handle-sandboxing).
+
+Java Security Manager monitors [all the code](https://github.com/UnitTestBot/UTBotJava/issues/791) for the risk of performing forbidden operations, including code in _class constructors, private methods, static blocks, [threads](https://github.com/UnitTestBot/UTBotJava/issues/895)_, and combinations of all of the above.
+
+## How to handle sandboxing
+
+You can **add permissions** by creating and editing the `~\.utbot\sandbox.policy` file. Find more about [Policy File and Syntax](https://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#Examples) and refer to the [Full list of permissions](https://docs.oracle.com/javase/1.5.0/docs/guide/security/spec/security-spec.doc3.html) to choose the proper approach.
+
+If the permission was added but somehow [not recognized](https://github.com/UnitTestBot/UTBotJava/issues/796), the UnitTestBot plugin will fail to start and generate no tests.
+
+If you are sure you want the code to be executed as is (**including the unsafe operations!**) you can **turn sandboxing off**:
+
+* You can add `AllPermission` to `~\.utbot\sandbox.policy`. Be careful!
+* Alternatively, you can add `useSandbox=false` to `~\.utbot\settings.properties`. Create this file manually if you don't have one. Find [more information](https://github.com/UnitTestBot/UTBotJava/pull/857) on how to manage sandboxing to test the UnitTestBot plugin itself.
+
+It is reasonable to regard the `@Disabled` tests just as supplemental information about the source code, not as the tests for actual usage.
+
+## How to improve sandboxing
+
+For now there are several unsolved problems related to sandboxing in UnitTestBot:
+
+1. We need to replace Java Security Manager with our own tool.
+
+ [Java Security Manager is deprecated since JDK 17](https://openjdk.org/jeps/411) and is subject to removal in some
+ future version. It is still present in JDK 19 but with limited functionality. E.g., in Java 18, a Java application or library is prevented from dynamically installing a Security Manager unless the end user has explicitly opted to allow it. Obviously, we cannot rely upon the deprecated tool and need to create our own one.
+
+
+2. We need to provide a unified and readable description for disabled tests.
+
+ UnitTestBot supports three testing frameworks and their annotations are slightly different:
+
+JUnit 4: `@Ignore("")`
+
+JUnit 5: `@Disabled("")`
+
+TestNG: `@Ignore` as an alternative to `@Test(enabled=false)`
+
+* How should we unify these annotations?
+* How should we show info in Javadoc comments?
+* Do we need to print a stack trace?
+
+
+3. We need to add emulation for restricted operations (a kind of mocks)
+
+ Emulating unsafe operations will allow UnitTestBot to generate useful tests even for the sandboxed code and run them instead of disabling.
+
+4. We need to provide a user with the sandboxing settings.
+
+ The UnitTestBot plugin UI provides no information about configuring the behavior of Security Manager. Information on [How to
+ handle
+sandboxing](#How-to-handle-sandboxing) is available only on GitHub.
+
+* Should we add Sandboxing (or Security Manager) settings to plugin UI? E.g.: **File operations: Forbidden / Allowed / Emulated in sandbox**.
+
+* Should we add a hyperlink to a piece of related documentation or to the `~\.utbot\sandbox.policy` file?
+
+## How to test sandboxing
+
+See the [short manual testing scenario](https://github.com/UnitTestBot/UTBotJava/pull/625) and the [full manual testing checklist](https://github.com/UnitTestBot/UTBotJava/issues/790).
+
+## Related links
+
+Initial feature request: [Add SecurityManager support to block suspicious code #622](https://github.com/UnitTestBot/UTBotJava/issues/622)
+
+Pull request: [Add SecurityManager support to block suspicious code #622 #625](https://github.com/UnitTestBot/UTBotJava/pull/625)
+
+Improvement request: [Improve sandbox-relative description in generated tests #782](https://github.com/UnitTestBot/UTBotJava/issues/782)
\ No newline at end of file
diff --git a/docs/SettingsProperties.md b/docs/SettingsProperties.md
new file mode 100644
index 0000000000..3cc80ef60a
--- /dev/null
+++ b/docs/SettingsProperties.md
@@ -0,0 +1,86 @@
+# UnitTestBot settings
+
+First, let's define "**settings**" as the set of "**properties**".
+Each property is a _key=value_ pair, and it may be represented as source code or plain text stored in a file.
+This property set affects the key aspects of UnitTestBot behavior.
+
+UnitTestBot is available as
+- an IntelliJ IDEA plugin,
+- a continuous integration (CI) tool,
+- a command-line interface (CLI).
+
+These three application types have low-level _**core**_ settings. The plugin also has per-project _**plugin-specific**_ settings.
+
+## Core settings
+
+Core settings are persisted in the **_settings file_**: `{userHome}/.utbot/settings.properties`. This file is designed for reading only.
+
+The defaults for the core settings are provided in source code (namely in `UtSettings.kt`) so the file itself may be absent or exist with a few of the customized properties only. For example, a file with just one line like `utBotGenerationTimeoutInMillis=15000` is valid and useful.
+
+## Plugin-specific settings
+
+IDE persists the plugin-specific settings automatically (per project!) in the **plugin configuration file**: `{projectDir}/.idea/utbot-settings.xml`. Nobody is expected to edit this file manually.
+
+At the moment, the core and plugin-specific settings have very small intersection (i.e. the keys of different levels control the same behavior aspects).
+If they still intersect, the core settings should provide the defaults for the plugin-specific settings.
+As for now, this concept is partially implemented.
+
+## Property categories
+
+A developer usually represents the new feature settings as a subset of properties and has to choose the proper "level" for them. In practice, we have these property categories:
+
+- **Hardcoded directly as constants in source code**
+_One can build the plugin with their own hardcoded preset._
+- **Experimental or temporary**
+_These properties can disappear from the settings file or jump back to the hardcoded constants. We do not expect the end user to change these properties, but it is still possible to specify them in the settings file._
+- **Engine-level tuning with reasonable defaults**
+_Designed for low-level tuning during contests, etc._
+- **Rarely used, good to be changed once per PC**
+- **Project-level setup in IDE**
+_The end user can change them via **File** > **Settings** > **Tools** > **UnitTestBot**_.
+- **Small set of per-generation options**
+
+Thereby, some properties can be considered as public API while the rest are pretty "internal".
+
+The end user has three places to change UnitTestBot behavior:
+1. Settings file, which is PC-wide — read by all the UnitTestBot instances across PC.
+For example, CLI and two different projects in IDE will re-use it.
+2. Plugin settings UI (**File** > **Settings** > **Tools** > **UnitTestBot**).
+3. Controls in the **Generate Tests with UnitTestBot window** dialog.
+
+Properties from the plugin settings UI and the dialog are plugin-specific, and they are automatically persisted in `{projectDir}/.idea/utbot-settings.xml`. _Note:_ only non-default values are stored here.
+
+## Configuring UnitTestBot with auto-generated `settings.properties`
+
+Common users usually change UnitTestBot settings via UI:
+* in the **Generate Tests with UnitTestBot** dialog,
+* via **File** > **Settings** > **Tools** > **UnitTestBot**.
+
+Advanced users and contributors require advanced settings.
+
+### How to configure advanced settings: motivation to improve
+
+Advanced settings were not visible in UnitTestBot UI and were configurable only via `settings.properties`.
+UnitTestBot did not provide this file by default, so you had to create it manually in your `{home}/.utbot` directory.
+You could configure advanced settings here if you knew available options — they are listed in UnitTestBot source code,
+namely, `UtSettings.kt`. As UnitTestBot is a developing product, it often gets new features and new settings
+that UnitTestBot users sometimes are not aware of.
+
+### Implemented `settings.properties` improvements
+
+Currently, UnitTestBot generates a template `settings.properties` file with the up-to-date list of available setting
+options, corresponding default values, and explicit descriptions for each option.
+
+This template file is auto-generated on the basis of `UtSettings.kt` doc comments. The template file consists of
+the commented lines, so you can uncomment the line to enable the setting or easily get back to defaults.
+
+_Idea to be implemented: we can annotate properties in UtSettings.kt as @api to provide the template file with a narrow subset of properties._
+
+Generating `settings.properties` is a part of a Gradle task in IntelliJ IDEA. The `settings.properties` file is
+bundled with the published UnitTestBot plugin as a top-level entry inside the `utbot-intellij-{version}.jar` file.
+
+Upon IntelliJ IDEA start, the UnitTestBot plugin loads its settings and checks whether the template setting file exists
+in the local file system as `{home}/.utbot/settings.properties`:
+* If there is no such file, it is created (along with the hidden `{home}/.utbot` directory if needed).
+* An existing file is updated with new settings and corresponding info if necessary.
+* UnitTestBot does not re-write `settings.properties` if the file exists and has already been customized.
\ No newline at end of file
diff --git a/docs/SpeculativeFieldNonNullability.md b/docs/SpeculativeFieldNonNullability.md
index b0985acb7c..0cd70fd67f 100644
--- a/docs/SpeculativeFieldNonNullability.md
+++ b/docs/SpeculativeFieldNonNullability.md
@@ -16,18 +16,31 @@ is desirable, as it increases the coverage, but it has a downside. It is possibl
most of generated branches would be `NPE` branches, while useful paths could be lost due to timeout.
Beyond that, in many cases the `null` value of a field can't be generated using the public API
-of the class. This is particularly true for final fields, especially in system classes.
-Automatically generated tests assign `null` values to fields in questions using reflection,
+of the class.
+
+- First of all, this is particularly true for final fields, especially in system classes.
+it is also often true for non-public fields from standard library and third-party libraries (even setters often do not
+allow `null` values). Automatically generated tests assign `null` values to fields using reflection,
but these tests may be uninformative as the corresponding `NPE` branches would never occur
in the real code that limits itself to the public API.
+- After that, field may be declared with some annotation that shows that null value is actually impossible.
+For example, in Spring applications `@InjectMocks` and `@Mock` annotations on the fields of class under test
+mean that these fields always have value, so `NPE` branches for them would never occur in real code.
+
+
## The solution
To discard irrelevant `NPE` branches, we can speculatively mark fields we as non-nullable even they
-do not have an explicit `@NotNull` annotation. In particular, we can use this approach to final
-fields of system classes, as they are usually correctly initialized and are not equal `null`.
+do not have an explicit `@NotNull` annotation.
+
+- In particular, we can use this approach to final and non-public
+fields of system classes, as they are usually correctly initialized and are not equal `null`
+- For Spring application, we use this approach for the fields of class
+under test not obtained from Spring bean definitions
-At the same time, we can't always add the "not null" hard constraint for the field: it would break
+At the same time, for non-Spring classes,
+we can't always add the "not null" hard constraint for the field: it would break
some special cases like `Optional` class, which uses the `null` value of its final field
as a marker of an empty value.
@@ -38,18 +51,18 @@ no way to check whether the address corresponds to a final field, as the corresp
of the global graph would refer to a local variable. The only place where we have the complete
information about the field is this method.
-We use the following approach. If the field is final and belongs to a system class,
-we mark it as a speculatively non-nullable in the memory
+We use the following approach. If the field belongs to a library class (according to `soot.SootClass.isLibraryClass`)
+and is final or non-public, we mark it as a speculatively non-nullable in the memory
(see `org.utbot.engine.Memory.speculativelyNotNullAddresses`). During the NPE check
we will add the `!isSpeculativelyNotNull(addr(field))` constraint
to the `NPE` branch together with the usual `addr(field) == null` constraint.
-For final fields, these two conditions can't be satisfied at the same time, as we speculatively
-mark final fields as non-nullable. As a result, the NPE branch would be discarded. If a field
-is not final, the condition is satisfiable, so the NPE branch would stay alive.
+For final/non-public fields, these two conditions can't be satisfied at the same time, as we speculatively
+mark such fields as non-nullable. As a result, the NPE branch would be discarded. If a field
+is public or not final, the condition is satisfiable, so the NPE branch would stay alive.
-We limit this approach to the system classes only, because it is hard to speculatively assume
-something about non-nullability of final fields in the user code.
+We limit this approach to the library classes only, because it is hard to speculatively assume
+something about non-nullability of final/non-public fields in the user code.
The same approach can be extended for other cases where we want to speculatively consider some
fields as non-nullable to prevent `NPE` branch generation.
diff --git a/docs/StaticInitializersAnalysis.md b/docs/StaticInitializersAnalysis.md
new file mode 100644
index 0000000000..7c0507201f
--- /dev/null
+++ b/docs/StaticInitializersAnalysis.md
@@ -0,0 +1,73 @@
+# Symbolic analysis of static initializers
+
+## Problem
+
+Before the [Prohibit to set static fields from library classes](https://github.com/UnitTestBot/UTBotJava/pull/699)
+change was implemented, every static field outside the `` block (the so-called _meaningful_ static fields)
+was stored in `modelBefore` and `modelAfter`. These _meaningful_ static fields were set (and reset for test isolation) during code generation. This led to explicit static field initializations, which looked unexpected for a user. For example, an `EMPTY` static field from the `Optional` class might be set for the following method under test
+
+```java
+class OptionalEmptyExample {
+ public java.util.Optional optionalExample(boolean isEmpty) {
+ return isEmpty ? java.util.Optional.empty() : java.util.Optional.of(42);
+ }
+}
+```
+
+like:
+
+```java
+setStaticField(optionalClazz, "EMPTY", empty);
+```
+
+**Goal**: we should not set such kind of static fields with initializers.
+
+## Current solution
+
+Having merged [Prohibit to set static fields from library classes](https://github.com/UnitTestBot/UTBotJava/pull/699)
+, we now do not explicitly set the static fields of the classes from the so-called _trusted_ libraries (by default,
+they are JDK packages). This behavior is guided by the `org.utbot.framework.
+UtSettings#getIgnoreStaticsFromTrustedLibraries` setting. Current solution possibly **leads to coverage regression**
+and needs to be investigated: [Investigate coverage regression because of not setting static fields](https://github.com/UnitTestBot/UTBotJava/issues/716).
+So, take a look at other ways to fix the problem.
+
+## Alternative solutions
+
+### Use concrete values as soft constraints _(not yet implemented)_
+
+The essence of the problem is assigning values to the static fields that should be set at runtime. To prevent it,
+we can try to create models for the static fields according to their runtime values and filter out the static fields
+that are equal to runtime values, using the following algorithm:
+
+1. Extract a concrete value for a static field.
+2. Create `UtModel` for this value and store it.
+3. Transform the produced model to soft constraints.
+4. Add them to the current symbolic state.
+5. Having resolved `stateBefore`, compare the resulting `UtModel` for the static field with the stored model and then drop the resulting model from `stateBefore` if they are equal.
+
+### Propagate information on the read static fields _(not yet implemented)_
+
+We can define the _meaningful_ static fields in a different way: we can mark the static fields as _meaningful_ if only they affect the method-under-test result. To decide if they do:
+
+- find out whether a given statement reads a specific static value or not and store this info,
+- while traversing the method graph, propagate this stored info to each of the following statements in a tree,
+- upon reaching the `return` statement of the method under test, mark all these read static fields as _meaningful_.
+
+### Filter out static methods: check if they affect `UtExecution` _(not yet implemented)_*
+Having collected all executions, we can analyze them and check whether the given static field affects the result of a current execution. Changing the static field value may have the same effect on every execution or no effect at all. It may also be required as an entry point during the executions (e.g., an _if_-statement as the first statement in the method under test):
+
+```java
+class AlwaysThrowingException {
+ public void throwIfMagic() {
+ if (ClassWithStaticField.staticField == 42) {
+ throw new RuntimeException("Magic number");
+ }
+ }
+}
+
+class ClassWithStaticField {
+ public final static int staticField = 42;
+}
+```
+
+*This solution should only be used with the [propagation](#propagate-information-on-the-read-static-fields) solution.
\ No newline at end of file
diff --git a/docs/Summarization module.md b/docs/Summarization module.md
new file mode 100644
index 0000000000..b9b3d6cab6
--- /dev/null
+++ b/docs/Summarization module.md
@@ -0,0 +1,80 @@
+# Summarization module
+
+## Overview
+
+UnitTestBot minimizes the number of tests so that they are necessary and sufficient, but sometimes there are still a lot of them. Tests may look very similar to each other, and it may be hard for a user to distinguish between them. To ease test case comprehension, UnitTestBot generates summaries, or human-readable test descriptions. Summaries also facilitate navigation: they structure the whole collection of generated tests by clustering them into groups.
+
+Summarization module generates detailed meta-information:
+- test method names
+- testing framework annotations (including `@DisplayName`)
+- Javadoc comments for tests
+- cluster comments for groups of tests (_regions_)
+
+Javadoc comments can be rendered in two styles: as plain text or in a special format enriched with the [custom Javadoc tags](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/summaries/CustomJavadocTags.md).
+
+If the summarization process fails due to an error or insufficient information, then the test method receives a unique name and no meta-information.
+
+The whole summarization subsystem is located in the `utbot-summary` module.
+
+## Implementation
+
+At the last stage of test generation process, the `UtMethodTestSet.summarize` method is called.
+As input, this method receives the set of `UtExecution` models with empty `testMethodName`, `displayName`, and `summary` fields. It fills these fields with the corresponding meta-information, groups the received `UtExecution` models into clusters and generates cluster names.
+
+Currently, there are three main `UtExecution` implementations:
+* `UtSymbolicExecution`,
+* `UtFailedExecution`,
+* `UtFuzzedExecution`.
+
+To construct meta-information for the `UtFuzzedExecution` models, the summarization module uses method parameters with their values and types as well as the return value type. To generate summaries for each `UtSymbolicExecution`, it uses the symbolic code analysis results.
+
+Let's describe this process in detail for `UtSymbolicExecution` and `UtFuzzedExecution`.
+
+### Constructing meta-information for `UtSymbolicExecution`
+
+1. **Producing _Jimple statements_.**
+ For each method under test (or MUT), the symbolic execution engine generates `UtMethodTestSet` consisting of `UtExecution` models, i.e. a test suite consisting of unit tests. A unit test (or `UtExecution`) in this suite is a set of execution steps that traverses a particular path in the MUT. An execution `Step` contains info on a statement, the depth of execution step and an execution decision.
+* A statement (`stmt`) is a Jimple statement, provided with the [Soot](https://github.com/soot-oss/soot) framework. A Jimple statement is a simplified representation of the Java program that is based on the three-address code. The symbolic engine accepts Java bytecode and transforms it to the Jimple statements for the analytical traversal of execution paths.
+* The depth of execution step (`depth`) depicts an execution depth of the statement in a call graph where the MUT is a root.
+* An execution decision (`decision`) is a number indicating the execution direction inside the control flow graph. If there are two edges coming out of the execution statement in the control flow graph, a decision number shows what edge is chosen to be executed next.
+
+2. **_Tagging_.**
+ For each pair of `UtMethodTestSet` and its source code file, the summarization module identifies unique execution steps, recursions, iteration cycles, skipped iterations, etc. These code constructs are marked with tags or meta-tags, which represent the execution paths in a structural view. The summarization module uses these tags directly to create meta-information, or summaries.
+
+At this moment, the summarization module is able to assign the following tags:
+- Uniqueness of a statement:
+ - _Unique_: no other execution path in the cluster contains this step, so only one execution triggers this statement in its cluster.
+ - _Common_: all the paths execute these statements.
+ - _Partly Common_: only some executions in a cluster contain this step.
+- The decision in the CFG (branching): _Right_, _Left_, _Return_
+- The number of statement executions in a given test
+- Dealing with loops: _starting/ending an iteration_, _invoking the recursion_, etc.
+
+We use our own implementation of the [DBSCAN](https://en.wikipedia.org/wiki/DBSCAN) clustering algorithm with the non-euclidean distance measure based on the Minimum Edit Distance to identify _unique_, _common_ and _partly common_ execution steps. Firstly, we manually divided execution paths into groups:
+- successfully executed paths (only this group is clustered into different regions with DBSCAN)
+- paths with expected exceptions
+- paths with unexpected exceptions
+- other groups with errors and exceptions based on the given `UtResult`
+
+3. **Building _sentences_.**
+ _Sentences_ are the blocks for the resulting summaries.
+ To build the _sentence_, the summarization module
+- parses the source file (containing the MUT) using [JavaParser](https://javaparser.org/) to get AST representations;
+- maps the AST representations to Jimple statements (so each statement is mapped to AST node);
+- builds the _sentence_ blocks (to provide custom Javadoc tags or plain-text mode);
+- builds the _final sentence_ (valid for plain-text mode only);
+- generates the `@DisplayName` annotation and test method names using the following rule: find the last _unique_ statement in each path (preferably, the condition statement) that has been executed once (being satisfied or unsatisfied); then the AST node of this statement is used for naming the execution;
+- builds the cluster names based on the _common_ execution paths.
+
+### Constructing meta-information for `UtFuzzedExecution`
+
+For `UtFuzzedExecution`, meta-information is also available as test method names, `@DisplayName` annotations, Javadoc comments, and cluster comments.
+
+The difference is that clustering tests for `UtFuzzedExecution` is based on `UtResult`. No subgroups are generated for the successfully completed tests.
+
+The algorithm for generating meta-information is described in the `ModelBasedNameSuggester` class, which is the registration point for `SingleModelNameSuggester` interface. This interface is implemented in `PrimitiveModelNameSuggester` and `ArrayModelNameSuggester`.
+
+Depending on the received `UtExecutionResult` type, `ModelBasedNameSuggester` produces the basic part of the method name or the `@DisplayName` annotation. `UtFuzzedExecution` provides `FuzzedMethodDescription` and `FuzzedValue` that supplement the generated basic part for test name with information about the types, names and values of the MUT parameters.
+
+_Note:_ test method names and `@DisplayName` annotations are generated if only the number of MUT parameters is no more than three, otherwise they are not generated.
+
diff --git a/docs/TaintAnalysis.md b/docs/TaintAnalysis.md
new file mode 100644
index 0000000000..67c4db3747
--- /dev/null
+++ b/docs/TaintAnalysis.md
@@ -0,0 +1,527 @@
+# Taint analysis
+
+## Introduction to the technique
+
+Taint analysis allows you to track the propagation of unverified external data through the program.
+If this kind of data reaches critical code sections, it may lead to vulnerabilities, including SQL injections,
+cross-site scripting (XSS) and others.
+Attackers can use these vulnerabilities to disrupt correct system operation, get confidential data, or perform other unauthorized operations.
+Taint analysis helps to find these mistakes at the compilation stage.
+
+The key idea of the approach is that any variable an external user can change stores a potential security
+threat. If the variable is used in some expression, then the value of this expression also becomes suspicious.
+The algorithm tracks situations when the variables marked as suspicious are used in dangerous
+command execution, for example, in direct queries to a database or an operating system.
+
+Taint analysis requires a configuration, where you assign one of the following
+roles to each method in a program.
+
+- Taint source — a source of unverified data.
+ For example, it can be a method for reading user input, or a method for getting a parameter of an incoming HTTP
+ request.
+ The Taint source execution result is marked. The method semantics determines the mark to be applied
+ to the variable.
+ The name of the mark can be completely arbitrary, since it is chosen by the one who writes the
+ configuration.
+ For example, according to configuration, the `getPassword()` method marks its return value with a "sensitive-data"
+ mark.
+- Taint pass — a function that marks the return value taking into account the marks in its arguments.
+ Depending on the implementation, marks can be applied not only to method results but also to a `this` object, and to
+ input parameters. For example, you can configure the `concat(String a, String b)` concatenation method
+ to mark its result with all the marks from `a` and `b`.
+- Taint cleaner — a function that removes a given set of marks from the passed arguments.
+ Most often, this is a kind of validation method that verifies that the user has entered data in the expected
+ format.
+ For example, the `validateEmail(String email)` method removes the "XSS" mark upon successful check completion,
+ because no unverified data in the `email` object that can now lead to cross-site
+ scripting vulnerability.
+- Taint sink — a receiver, a critical section of an application.
+ It can be a method that accesses a database or a file system directly, or perform other potentially dangerous
+ operations.
+ For the Taint sink, you can set a list of marks. Variables with specified marks should not leak into this taint sink.
+ For example, if a value marked as "sensitive-data" is passed to a logging function, which prints its arguments
+ directly to the console, then this is a developer mistake, since data leaks.
+
+The taint analysis algorithm scans the data flow graph, trying to detect a route between a method from a set of Taint
+sources and a method from Taint sinks. The UnitTesBot taint analysis feature is implemented inside the symbolic engine
+to avoid a large number of false positives.
+
+**Example**
+
+Consider an example of a simple function with an SQL injection vulnerability inside:
+if an attacker enters the string `"name'); DROP TABLE Employees; --"` into the variable name, then it will be possible
+to delete the `Employees` table with the data in it.
+
+```java
+class Example {
+ void example(Connection connection) {
+ Scanner sc = new Scanner(System.in);
+ String name = sc.nextLine();
+ Statement stmt = connection.createStatement();
+ String query = "INSERT INTO Employees(name) VALUES('"
+ .concat(name)
+ .concat("')");
+ stmt.executeUpdate(query);
+ }
+}
+```
+
+For taint analysis, you have to set the configuration.
+
+- Taint source is a `java.util.Scanner.nextLine` method that adds a "user-input" mark to the returned value.
+- Taint pass is a `java.lang.String.concat` method that passes the "user-input" marks through itself received
+ either from the first argument or from the object on which this method is called (`this`).
+- Taint sink is a `java.sql.Statement.executeUpdate` method that checks variables marked as "user-input".
+
+Any correct implementation of the taint analysis algorithm should detect a mistake in this code: the variable with
+the "user-input" mark is passed to `executeUpdate` (the sink).
+
+Note that the algorithm is not responsible for detecting specific data that an attacker could
+enter to harm the program. It only discovers the route connecting the source and the sink.
+
+## UnitTestBot implementation
+
+No unified configuration format is provided for taint analysis in the world, and all static analyzers describe their
+own way of configuration. Thus, we provide a custom configuration scheme to describe the rules: sources, passes,
+cleaners, and sinks.
+
+### Configuration: general structure
+
+The general structure of the configuration format (based on YAML) is presented below.
+
+```yaml
+sources:
+ -
+ -
+ - <...>
+passes:
+ -
+ - <...>
+cleaners:
+ -
+ - <...>
+sinks:
+ -
+ - <...>
+```
+
+That is, these are just lists of rules related to a specific type.
+
+Each rule has a set of characteristics.
+
+- The unique identifier of the method that this rule describes.
+ It consists of the method's full name, including the package name and the class name,
+ as well as the signature of the method — a set of argument types (the `signature` key in the YAML file).
+- Some `conditions` that must be met during execution for the rule to work.
+- A set of `marks` that the rule uses.
+- A set of specific mark management actions that occur when the rule is triggered (`add-to`, `get-from`,
+ `remove-from`, or `check`, depending on the semantics of the rule).
+
+For example, the rule for the taint source can look like this.
+
+```yaml
+com.abc.ClassName.methodName:
+ signature: [ , _, ]
+ conditions:
+ arg1:
+ not: [ -1, 1 ]
+ add-to: [ this, arg2, return ]
+ marks: user-input
+```
+
+This rule is defined for a method named `methodName` from the `ClassName` class located in the `com.abc` package.
+The method takes exactly 3 arguments: the first one has the `int` type, the second can be anything,
+and the last one has the `java.lang.Object` type.
+The `signature` key may not be specified, then any `methodName` overload is appropriate.
+
+The rule is triggered when the first argument (`arg1`) is not equal to either -1 or 1 as specified by the `conditions`
+key (the list is interpreted as logical OR).
+This parameter is optional, if it is absent, no conditions are checked.
+
+The described source adds a "user-input" mark to the variables corresponding to `this`, `arg2` and `return`:
+to the `ClassName` class object on which `methodName` is called, to the second argument of the function
+and to the return value. Moreover, the `add-to` and `marks` keys can contain both a list, and a single value.
+
+The other rule types have the same syntax as the source, except for the `add-to` key.
+
+- Taint pass transfers marks from one set of objects to another, so two keys are defined for it:
+ `get-from` and `add-to`, respectively. The marks specified in `marks` are added on `add-to` if there is a mark in
+ `get-from`.
+- Taint cleaner removes marks from objects, so its key is called `remove-from`.
+- Taint sink checks for the marks in variables, which locates under the `check` key.
+
+### Configuration: details
+
+Fully qualified method names can be written in one line or using nested structure: the package name is specified first,
+then the class name appears, and finally, there is the method name itself.
+
+```yaml
+- com.abc.def.Example.example: ...
+```
+
+or
+
+```yaml
+- com:
+ - abc.def:
+ - Example.example: ...
+```
+
+Note that regular expressions in names are not supported yet.
+
+The `add-to`, `get-from`, `remove-from`, and `check` fields specify the objects (or entities) to be marked.
+You can specify only one value here or a whole list.
+
+Possible values are:
+
+- `this`
+- `arg1`
+- `arg2`
+- ...
+- `return`
+
+The user can define arbitrary mark names or specify an empty list (`[]`) for all possible marks.
+
+```yaml
+passes:
+ - java.lang.String.concat:
+ get-from: this
+ add-to: return
+ marks: [ user-input, sensitive-data, my-super-mark ]
+```
+
+or
+
+```yaml
+passes:
+ - java.lang.String.concat:
+ get-from: this
+ add-to: return
+ marks: [ ] # all possible marks
+```
+
+To check the conformity to `conditions`, you can set:
+
+- the specific values of method arguments
+- their runtime types
+
+Values can be set for the following types: `boolean`, `int`, `float` or `string` (and `null` value for all nullable
+types).
+
+The full type name must be specified in the angle brackets `<>`.
+
+The `conditions` field specifies runtime conditions for arguments (`arg1`, `arg2`, ...).
+Conditions can also be specified for `this` and `return` if it makes sense.
+For sinks, checking conditions for a return value makes no sense, so this functionality is not supported.
+
+```yaml
+conditions:
+ this: # this should be java.lang.String
+ arg1: "test" # the first argument should be equal to "test"
+ arg2: 227 # int
+ arg3: 227.001 # float
+ arg4: null # null
+ return: true # return value should be equal to `true`
+```
+
+Values and types can be negated using the `not` key, as well as combined using lists (`or` semantics).
+
+Nesting is allowed.
+
+```yaml
+conditions:
+ this: [ "in", "out" ] # this should be equal to either "in" or "out"
+ arg1: [ , ] # arg1 should be int or float
+ arg2: { not: 0 } # arg2 should not be equal to 0
+ arg3:
+ not: [ 1, 2, 3, 5, 8 ] # should not be equal to any of the listed numbers
+ arg4: [ "", { not: } ] # should be an empty string or not a string at all
+```
+
+If several rules are suitable for one method call, they are all applied.
+
+**Overall example**
+
+```yaml
+sources:
+ - com:
+ - abc:
+ - method1:
+ signature: [ _, _, ]
+ add-to: return
+ marks: xss
+ - method1:
+ signature: [ , _, ]
+ add-to: [ this, return ]
+ marks: sql-injection
+ - bca.method2:
+ conditions:
+ this:
+ not: "in"
+ add-to: return
+ marks: [ sensitive-data, xss ]
+
+passes:
+ - com.abc.method2:
+ get-from: [ this, arg1, arg3 ]
+ add-to: return
+ marks: sensitive-data
+ - org.example.method3:
+ conditions:
+ arg1: { not: "" }
+ get-from: arg1
+ add-to: [ this, return ]
+ marks: sql-injection
+
+cleaners:
+ - com.example.pack.method7:
+ conditions:
+ return: true
+ remove-from: this
+ marks: [ sensitive-data, sql-injection ]
+
+sinks:
+ - org.example:
+ - log:
+ check: arg1
+ marks: sensitive-data
+ - method17:
+ check: [ arg1, arg3 ]
+ marks: [ sql-injection, xss ]
+```
+
+**Usage examples**
+
+`java.lang.System.getenv` is a source of the “environment” mark. There are two overloads of this method: with one string
+parameter and no parameters at all. We want to describe only the first overload:
+
+ ```yaml
+ sources:
+ - java.lang.System.getenv:
+ signature: [ ]
+ add-to: return
+ marks: environment
+ ```
+
+`java.lang.String.concat` is a pass-through only if `this` is marked and not equal to `""`, or if `arg1` is marked and
+not equal to `""`:
+
+ ```yaml
+ passes:
+ - java.lang.String:
+ - concat:
+ conditions:
+ this: { not: "" }
+ get-from: this
+ add-to: return
+ marks: sensitive-data
+ - concat:
+ conditions:
+ arg1: { not: "" }
+ get-from: arg1
+ add-to: return
+ marks: sensitive-data
+ ```
+
+If you want to define a `+` operator for strings as taint pass, you should write the following rules:
+
+```yaml
+passes:
+ - java.lang.StringBuilder.append:
+ get-from: arg1
+ add-to: this
+ marks: [ ]
+ - java.lang.StringBuilder.toString:
+ get-from: this
+ add-to: return
+ marks: [ ]
+```
+
+`java.lang.String.isEmpty` is a cleaner only if it returns `true`:
+
+ ```yaml
+ cleaners:
+ - java.lang.String.isEmpty:
+ conditions:
+ return: true
+ remove-from: this
+ marks: [ sql-injection, xss ]
+ ```
+
+Suppose that the `org.example.util.unsafe` method is a sink for the “environment” mark if the second argument is
+an `Integer` and equal to zero:
+
+ ```yaml
+ sinks:
+ - org.example.util.unsafe:
+ signature: [ _, ]
+ conditions:
+ arg2: 0
+ check: arg2
+ marks: environment
+ ```
+
+The configuration above checks the type at compile time, but sometimes we want to check the type at runtime:
+
+ ```yaml
+ sinks:
+ - org.example.util.unsafe:
+ conditions:
+ arg2:
+ not: [ { not: 0 }, { not: } ]
+ check: arg2
+ marks: environment
+ ```
+
+Perhaps explicit `and` for `conditions` will be added in the future.
+
+### Algorithm implementation details
+
+The main idea of the implemented approach is that each symbolic variable is associated with a taint vector — a 64-bit
+value, where each `i` bit is responsible for the presence of a mark with the number `i` in this object.
+After that, during the symbolic execution, these mappings are maintained and updated in accordance with
+the classical taint analysis algorithm.
+
+The implementation mostly affects the `Traverser` and `Memory` classes, as well as the new `TaintMarkRegistry`
+and `TaintMarkManager` classes. The diagram below shows a high-level architecture of the taint module (in the actual
+code, the implementation is a bit different, but to understand the idea, the diagram is greatly simplified).
+
+
+
+The `TaintMarkRegistry` class stores a mapping between the mark name and its ordinal number from 0 to 63.
+The number of marks is limited to 64. However, firstly, this is enough for almost any reasonable example,
+and secondly, the decision was made due to performance issues — operations with the `Long` data type are
+performed much faster than if a bit array was used.
+
+The `TaintModel` component (data classes at `org.utbot.taint.model`) is responsible for providing access
+to the configuration. In particular, it defines a way to convert conditions (the value of the `conditions` key
+in a YAML document) into logical expressions over symbolic variables.
+
+`Memory` stores the values of the taint bit-vectors for symbolic variables. Only simple methods were implemented there
+(functions to update vectors and get them at the address of a symbolic object).
+All the complex logic of adding and removing marks, based on taint analysis theory,
+was written in a separate `TaintMarkManager` class. In other words, this class wraps low-level memory work into
+domain-friendly operations.
+
+The information about the marked variables is updated during the `Traverser` work. Before each `invoke()`
+instruction corresponding to the method call in the user code, a special `Traverser.
+processTaintSink` handler is called, and after the `invoke` instruction, the `Traverser.processTaintSource`,
+`Traverser.processTaintPass` and `Traverser.processTaintCleaner` handlers are called. This order is set because all the
+rules, except tose for the sinks, need the result of the function. At the same time, the fact of transferring
+the tainted data occurs when launching the sink function, therefore, you can report the vulnerability
+found even before it is executed.
+
+The listed rule handlers get the configuration and perform the taint analysis semantics. The `processTaintSink` method
+requests information from the `TaintMarkManager` about the marks already set and adds constraints to the SMT
+solver: the satisfiability corresponds to the defect detection. The other handlers modify the symbolic
+`Memory` through the `TaintMarkManager`, adding and removing marks from the selected symbolic variables.
+
+### Code generator modification
+
+UnitTestBot produces unit tests (and the SARIF reports). `CodeGenerator` is launched on each
+found test case, and generates the test (as Java code). Moreover, the test, which leads to throwing an unhandled exception,
+should not pass. Taint analysis errors are not real from the language perspective, since they
+are not real exceptions. However, we still have to highlight such tests as failed. The code generator was modified
+so that an artificial error was added at the end of each test to ensure a fail (the same strategy
+was used in the integer overflow detection).
+
+```java
+fail("'java.lang.String' marked 'user-input' was passed into 'Example.example' method");
+```
+
+The solution allows us to automatically integrate with the SARIF reports and to visualize the results
+in the IntelliJ IDEA _Problems_ tool window. The found test case is treated as a real exception,
+and all the necessary logic has already been written for them.
+
+**Example**
+
+Consider the code below.
+
+```java
+public class User {
+
+ String getLogin() { /* some logic */ }
+
+ String getPassword() { /* some logic */ }
+
+ String userInfo(String login, String password) {
+ return login + "#" + password;
+ }
+
+ void printUserInfo() {
+ var login = getLogin();
+ var password = getPassword();
+ var info = userInfo(login, password);
+ System.out.println(info);
+ }
+}
+```
+
+The `getPassword` method returns sensitive data that should never leak out of the application, but the programmer prints
+them to the `stdout`, which is a serious mistake. First, we write the corresponding configuration and save it to the
+`./.idea/utbot-taint-config.yaml` file for the analyzer to read from.
+
+```yaml
+sources:
+ - User.getPassword:
+ add-to: return
+ marks: sensitive-data
+
+passes:
+ - User.userInfo:
+ get-from: [ arg1, arg2 ]
+ add-to: return
+ marks: [ ] # all
+
+sinks:
+ - java.io.PrintStream.println:
+ check: arg1
+ marks: sensitive-data
+```
+
+Then we enable taint analysis in settings and run the UnitTestBot plugin in IntelliJ IDEA.
+
+
+
+Generated code:
+
+```java
+public final class UserTest {
+ // some omitted code
+
+ ///region SYMBOLIC EXECUTION: TAINT ANALYSIS for method printUserInfo()
+
+ @Test
+ @DisplayName("printUserInfo: System.out.println(info) : True -> DetectTaintAnalysisError")
+ public void testPrintUserInfo_PrintStreamPrintln_1() {
+ User user = new User();
+
+ user.printUserInfo();
+ fail("'java.lang.String' marked 'sensitive-data' was passed into 'PrintStream.println' method");
+ }
+
+ ///endregion
+}
+```
+
+We can see the detected problem in the _Problems_ tool window:
+
+
+
+**A brief explanation**
+
+Upon executing the `getPassword` method, the symbol corresponding to the password variable
+is marked as "sensitive-data" (a zero bit is set to 1 in its taint vector). Upon calling `userInfo`, the `info`
+variable is also marked, since `userInfo` is a taint pass that adds the marks from
+both of its arguments to the return value. Before printing `info` to the console, the `processTaintSink` handler function adds a constraint
+to the SMT solver, so that its satisfiability corresponds to throwing an artificial error. The logical
+formula for
+this path is satisfiable, so the analyzer reports an error detected, which we eventually observe.
+
+### Unit tests
+
+Taint analysis unit tests are located at the `./utbot-framework-test/src/test/kotlin/org/utbot/examples/taint/`
+directory.
+
+Test use examples are located at `utbot-sample/src/main/java/org/utbot/examples/taint`. Each example has its own
+configuration file stored at `utbot-sample/src/main/resources/taint`.
diff --git a/docs/UnitTestBotDecomposition.md b/docs/UnitTestBotDecomposition.md
new file mode 100644
index 0000000000..ac118e9036
--- /dev/null
+++ b/docs/UnitTestBotDecomposition.md
@@ -0,0 +1,71 @@
+# UnitTestBot decomposition
+
+This document is a part of UnitTestBot roadmap for the nearest future. We plan to decompose the whole UnitTestBot mechanism into the following standalone systems.
+
+## Fuzzing platform
+
+Entry points:
+* `org.utbot.fuzzing.Fuzzing`
+* `fuzz` extension function
+
+Exit point:
+overridden `Fuzzing#run` method
+
+Probable fields of use (without significant implementation changes):
+1. Test generation
+2. Taint analysis
+3. Finding security vulnerabilities
+4. Static analysis validation
+5. Automatic input minimization
+6. Specific input-output search
+
+## Symbolic engine platform
+
+Probable fields of use (without significant implementation changes):
+1. Test generation
+2. Taint analysis
+3. Type inference
+
+A more abstract interface can be extracted. For instance, we can use the interface to solve type constraints for Python or other languages.
+Currently, there are two levels of abstraction:
+1. Java-oriented abstraction that is intended to mimic heap and stack memory.
+2. More low-level and less Java-coupled API to store constraints for Z3 solver.
+
+There is a room for improvement, namely we can extract more high-level abstraction, which can be extended for different languages.
+
+Entry points:
+* `org.utbot.engine.Memory`
+* `org.utbot.engine.state.LocalVariableMemory`
+* `org.utbot.engine.SymbolicValue`
+
+Exit point:
+`org.utbot.engine.Resolver` → `UtModel`
+
+Another level of abstraction is `UtExpression`. Basically, it is a thin abstraction over Z3 solver.
+
+## Program synthesis system
+
+An implementation that allows `UtAssembleModel` to keep information about object creation in a human-readable format. Otherwise, the object state should be initiated with _Reflection_ or sufficient constructor call. The synthesizing process is built upon the UnitTestBot symbolic execution memory model and is supposed to preserve construction information during the analysis process.
+
+Entry and exit point:
+`org.utbot.framework.synthesis.Synthesizer`
+
+## Program analysis system
+
+We use an outdated approach with the [Soot](https://github.com/soot-oss/soot) framework. It is not worth being extracted as a separate service. A good substitution is the [JacoDB](https://github.com/UnitTestBot/jacodb) library. Currently, this library provides an API to work with Java code, send queries, provide custom indexes, and so on.
+
+## Code generation system
+
+The current domain of code generation is specific for generating tests, though it could be reused for other purposes. Currently, the engine can be used to generate tests for different test frameworks. One can use the code generator to generate test templates inside the IntelliJ-based IDEs.
+
+Entry and exit point:
+`org.utbot.framework.codegen.generator.CodeGenerator#generateAsStringWithTestReport`
+
+Note that for Spring projects `SpringCodeGenerator` is used. It supports both unit and integration tests generation.
+
+## SARIF report visualizer
+
+UnitTestBot represents the result of analysis using SARIF — the format that is widely used in the GitHub community. SARIF allows users to easily represent the results in the built-in GitHub viewer. Additionally, we provide our own SARIF report visualizer for IntelliJ IDEA.
+
+Entry and exit point:
+`org.utbot.gradle.plugin.GenerateTestsAndSarifReportTask`
\ No newline at end of file
diff --git a/docs/UtUtilsClass.md b/docs/UtUtilsClass.md
new file mode 100644
index 0000000000..af99a94bbe
--- /dev/null
+++ b/docs/UtUtilsClass.md
@@ -0,0 +1,57 @@
+# UtUtils class
+
+## What are the utility methods
+
+_Utility methods_ implement common, often re-used operations which are helpful for accomplishing tasks in many
+classes. In UnitTestBot, _utility methods_ include those related to creating instances, checking deep
+equality, mocking, using lambdas and so on — miscellaneous methods necessary for generated tests.
+
+## Why to create UtUtils class
+
+Previously, UnitTestBot generated _utility methods_ for each test class when they were needed — and only those which
+were necessary for the given class. They were declared right in the generated test class, occupying space. Generating multiple test classes often resulted in duplicating _utility methods_ and consuming even more space.
+
+For now UnitTestBot provides a special `UtUtils` class containing all _utility methods_ if at least one test class needs some of them. This class is generated once and the specific methods are imported from it if necessary. No need for _utility methods_ — no `UtUtils` class is generated.
+
+We create a separate `UtUtils` class for each supported language (if required).
+
+## What does it look like
+
+Here is an example of a documentation comment inherent to every `UtUtils` class:
+
+
+
+As one can see, the comment mentions two characteristics of the `UtUtils` class:
+
+1. _Version_
+
+If the generated tests require additional _utility methods_, the
+existing `UtUtils` class is upgraded and gets a new version number, which should be defined here:
+
+`org.utbot.framework.codegen.domain.builtin.UtilClassFileMethodProvider.UTIL_CLASS_VERSION`
+
+_2. Mockito support_
+
+UnitTestBot uses [Mockito framework](https://site.mockito.org/) to implement mocking. When generated tests imply mocking, the
+`deepEquals()`
+_utility method_ should be configured — it should have a check: whether the compared object is a mock or not. That is why the `UtUtils` class for the tests with mocking differs from the one without mocking support.
+
+If you have previously generated tests with mocking, the next generated `UtUtils` class supports mocking as well —
+even if
+its version is upgraded or current tests do not need mocking, so that the existing tests can still
+rely on the proper methods from `UtUtils` class.
+
+## Where to find it
+
+`UtUtils` class is usually located in the chosen **Test sources root** near the generated test classes. The corresponding package name mentions the language of the generated tests: e.g. `org.utbot.runtime.utils.java`.
+
+## How to test
+
+If you want to test `UtUtils` class generation using UnitTestBot project itself, refer to the [Manual testing of
+UtUtils class generation #1233](https://github.com/UnitTestBot/UTBotJava/issues/1233).
+
+## How to improve
+
+UnitTestBot does not currently support generating tests for classes from multiple modules simultaneously. If this option was possible, we would probably have to generate a separate `UtUtils` class for each module. Perhaps we could find a special location for a `UtUtils` class reachable from every module.
+
+For now, you can generate separate `UtUtils` classes for different modules only if you manually choose the different **Test sources roots** when generating tests.
\ No newline at end of file
diff --git a/docs/UtbotFamilyChanges.md b/docs/UtbotFamilyChanges.md
new file mode 100644
index 0000000000..e739aab937
--- /dev/null
+++ b/docs/UtbotFamilyChanges.md
@@ -0,0 +1,87 @@
+# Changes
+
+## Main settings
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `gradle.properties` | Add version parameters and IDE dependencies |
+| `settings.gradle` | Rewrite to kts |
+
+## utbot-framework-api
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt` | Make `UtModel` open |
+| `utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/CoverageApi.kt` | Add field `missedInstructions` to class `Coverage` (default empty) |
+
+## utbot-framework
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `utbot-framework/src/main/kotlin/org/utbot/engine/ValueConstructor.kt` | Add default else branch for Python and JS models in method `construct` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt` | Add default else branch for Python and JS models in method `assembleModel` |
+
+## utbot-framework > codegen
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt` | Make class `Import` abstract (for python imports), make class `TestFramework` open, field `assertEquals` and methdod `assertionId` open. Add nullable field `testSuperClass` to `TestFramework` (contains superclass for test class). |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Keywords.kt` | Move function `getLanguageKeywords` into `CgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/CodeGenerator.kt` | Make class `CodeGenerator`, field `context` and methods open. Swap fields in class `CodeGeneratorResult`. |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt` | Add new constructors for `CgMethodTestSet` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassContext.kt` | Remove internal from data class `TestClassContext` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/UtilMethodBuiltins.kt` | Remove internal from class `UtilMethodProvider` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/context/CgContext.kt` | Remove internal from classes `Context` and `CgContextOwner`. Add field `cgLanguageAssistant` into `CgContextOwner`. Move logic from `CgContext.__outerMostTestClassContext` and `CgContext.outerMostTestClass` to `CgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/name/CgNameGenerator.kt` | Remove internal from `CgNameGenerator` and `CgNameGeneratorImpl`, change `codegenLanguage` argument to `cgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgFieldStateManager.kt` | Remove internal from interface `CgFieldStateManager` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt` | Change private to protected and add empty else branches in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgTestClassConstructor.kt` | Change private to open or protected, add `cgLanguageAssistant` call instead standard implementations |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgVariableConstructor.kt` | Change private to open and add else branch in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/MockFrameworkManager.kt` | Remove internal and add else branch in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt` | Remove internal from `TestFrameworkManager` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/ConstructorUtils.kt` | Remove internal from `EnvironmentFieldStateCache`, `FieldStateCache`, `CgFieldState`, `CgContextOwner.importIfNeeded` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/CgElement.kt` | Add visit for `CgForEachLoop` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyPatterns.kt` | Add else-branch in `TestFramework`-whens |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/TreeUtil.kt` | Remove internal from `buildExceptionHandler` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgAbstractRenderer.kt` | Add `CgForEachLoop` visit function, change private to protected some methods, move `makeRender` logic to `CgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgJavaRenderer.kt` | Remove `language` field |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgKotlinRenderer.kt` | Remove `language` field, change `context.codegenLanugage` to `context.cgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgRendererContext.kt` | Remove internal and add `cgLanguageAssistant` field |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgVisitor.kt` | Add visit for `CgForEachLoop` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/concrete/MockValueConstructor.kt` | Add else-branch in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/concrete/UtModelConstructor.kt` | Remove internal |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/fields/ExecutionStateAnalyzer.kt` | Add else-branch in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/minimization/Minimization.kt` | Add else-branch in `UtModel`-when |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/CgLanguageAssistant.kt` | New file with `CgLanguageAssistant` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JavaCgLanguageAssistant.kt` | Implementation `CgLanguageAssistant` for Java |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/KotlinCgLanguageAssistant.kt` | Implementation `CgLanguageAssistant` for Kotlin |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/LanguageTestFrameworkManager.kt` | New file with `LanguageTestFrameworkManager` |
+| `utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JVMTestFrameworkManager.kt` | Implementation `LanguageTestFrameworkManager` for JVM (Java + Kotlin) |
+
+## utbot-fuzzers
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/FuzzedMethodDescription.kt` | Make class `FuzzedMethodDescription` open |
+
+
+## utbot-intellij and utbot-ui-commons
+
+| File | Changes |
+|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt` | Move `GenerateTestsModel.getAllTestSourceRoots()` to `BaseTestModel` method, add empty else branch to `insertImports` |
+| `utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/language/JavaLanguage.kt` | Implementation `LanguageAssistant` for Java |
+| `utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt` | Move common logic to `BaseTestModel` |
+| `utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt` | Add else-branches in `TestFramework`-whens |
+| `utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt` | Move all logic to `JvmLanguageAssistant` |
+| `utbot-intellij/src/main/resources/META-INF/` | Add config xml files for Java, Kotlin, Android, Python, JS |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/language/agnostic/LanguageAssistant.kt` | New class for Actions logic |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/models/BaseTestModel.kt` | New parent class for TestModels |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/Notifications.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/components/CodeGenerationSettingItemRenderer.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/components/TestFolderComboWithBrowseButton.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/components/TestSourceDirectoryChooser.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/ErrorUtils.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/ModuleUtils.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/RootUtils.kt` | New file, moved from `utbot-intellij` |
+| `utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/util/IntelliJApiHelper.kt` | New file, moved from `utbot-intellij` |
\ No newline at end of file
diff --git a/docs/ci/ci-in-utbot-java.md b/docs/ci/ci-in-utbot-java.md
new file mode 100644
index 0000000000..8fd539fcd7
--- /dev/null
+++ b/docs/ci/ci-in-utbot-java.md
@@ -0,0 +1,61 @@
+
+
+# CI features
+
+UTBot Java offers contributors bunch of workflows e.g., the workflow _building the project and running tests_, the workflow _archiving plugin and CLI_.
+
+The main CI features in UTBot Java:
+* reproducible environment
+* available monitoring processes
+
+## Reproducible environment
+
+Depending on the resources where you are intended to build and test software environment will be different. The key goal is to provide the same environment on different resources. To do that we use Docker images with appropriate software, environment variables and OS settings.
+
+Crucial CI workflows run in those docker containers thus you can reproduce the environment locally. The environment can be used for running tests or for debugging ([see detailed information](https://github.com/UnitTestBot/UTBotJava/wiki/docker-for-utbot-java)).
+
+If you have any questions of where images are placed, how many they are, what software versions are used, visit [repository](https://github.com/UnitTestBot/infra-images) please (now is private, will be changed in the future), leave an issue with your questions or ask in DM.
+
+## All stages Monitoring
+
+Since the workflow has started you can check access to the metrics on our monitoring service (ask teammates for url). The server offers developers the following dashboards:
+
+* **Node Exporter Full** - metrics of consuming the RAM, CPU, Network and other resources on the host
+* **JVM dashboard** (don't forget to set job to `pushgateway`) - Java metrics
+* **Test executor statistics*** - RAM consuming by Java processes
+* **cAdvisor: container details*** - system resources consuming by certain container
+* **cAdvisor: host summary*** - summarized system resources consuming by all containers
+
+**Note:** * developed by UTBot team
+
+When you open a dashboard you need to choose valid instance. GitHub runs **each job on separate runner** so instance ID (`HOSTNAME` env var) would be different. But all instances have **the same Run ID** (`GITHUB_RUN_ID` env var). Follow this steps:
+
+1. Go to Actions and open your Run;
+2. Expand job list and choose any job you need;
+3. At the right you'll see a list of steps. You need step `Run monitoring`;
+4. Find the string like:
+```
+Find your Prometheus metrics using label {instance="2911909439-7f83f93ff335"}
+```
+5. Copy value between double quotes and go to monitoring dashboard. Set `github` service and expand instance list, CTRL+F and paste copied value. Choose your instance
+
+
+
+**Note:** label consists of two part - `${GITHUB_RUN_ID}-${HOSTNAME}`. Use only one part to find all jobs of your Run.
+
+# Available workflows
+
+| Workflow name | What it's supposed to do | What it triggers on |
+| --- | --- | --- |
+| UTBot Java: build and run tests | Builds the project and runs tests for it | **push** or **pull request** to the **main** branch |
+| [M] UTBot Java: build and run tests | Builds the project and runs tests for it | **manual** call or call from **another workflow** |
+| [M] Run chosen tests | Runs a single test or tests in chosen package/class | **manual** call |
+| Plugin and CLI: publish as archives | Archives plugin and CLI and stores them attached to the workflow run report | **push** to the **main** branch |
+| [M] Plugin and CLI: publish as archives | Archives plugin and CLI and stores them attached to the workflow run report | **manual** call or call from **another workflow** |
+| [M] Publish on GitHub Packages | Publishes artifacts such as _utbot-api_, _utbot-core_, _utbot-framework_, etc., on GitHub Packages | **manual** call |
\ No newline at end of file
diff --git a/docs/ci/docker-for-utbot-java.md b/docs/ci/docker-for-utbot-java.md
new file mode 100644
index 0000000000..2a4d417826
--- /dev/null
+++ b/docs/ci/docker-for-utbot-java.md
@@ -0,0 +1,95 @@
+
+
+# Reproducible environment
+
+It's available to download docker image with the environment for UTBot. The environment is also used in the crucial CI scripts focused on building project and running tests.
+
+The docker image pre-installed environment includes:
+1. *Java 17* + *JDK* package
+3. *Gradle 7.6.1*
+3. *Kotlin compiler 1.8.0*
+
+It's based on Ubuntu [SOME VERSION].
+
+## How to install Docker
+
+Using reproducible environment requires Docker installed.
+
+The detailed information of how to install Docker can be found on the [official site](https://docs.docker.com/engine/install/).
+
+## How to run tests in docker container
+
+Do the following steps to run tests in docker container:
+
+1. Pull docker image
+```
+docker pull unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+```
+2. Run docker container
+```bash
+# -v :/usr/utbot-debug - mounts the host directory into the container directory
+# -it - make the container look like a terminal connection session
+# -w /usr/utbot-tests - sets up working directory inside the container
+docker run -it -v :/usr/utbot-tests --name utbot-tests -w /usr/utbot-tests unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+```
+3. Do whatever you want
+
+* Build UTBot and run tests:
+```
+gradle clean build --no-daemon
+```
+* Build UTBot without running tests:
+```
+gradle clean build --no-daemon -x test
+```
+* Run tests for *utbot-framework* project *CustomerExamplesTest* class:
+```
+gradle :utbot-framework:test --no-daemon --tests "org.utbot.examples.collections.CustomerExamplesTest"
+```
+4. Exit container
+```
+exit
+```
+
+## How to debug UTBot in docker container
+
+Do the following steps to debug UTBot in docker container:
+
+1. Set up configuration for remote debug in IntelliJ IDEA
+
+**Run/Debug Configurations** → **Add New Configuration** → Choose **Remote JVM Debug** → Set up **Configuration name** → **Ok**
+
+2. Pull docker image
+```
+docker pull unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+```
+3. Run docker container
+```bash
+# -v :/usr/utbot-debug - mounts the host directory into the container directory
+# -it - make the container look like a terminal connection session
+# -w /usr/utbot-tests - sets up working directory inside the container
+# -p 5005:5005 - mounts the host port into the container port (debugging port)
+docker run -it -p 5005:5005 -v :/usr/utbot-debug --name utbot-debug -w /usr/utbot-tests unittestbot/java-env:java17-zulu-jdk-gradle7.6.1-kotlinc1.8.0
+```
+4. Set up gradle options for remote debug:
+```
+export GRADLE_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
+```
+5. Start building and running tests
+```
+gradle clean build --no-daemon
+```
+6. Attach in IntelliJ IDEA to the gradle process in the container
+
+Set up **breakpoints** wherever you want → **Run** new **Configuration** in **Debug** mode
+
+7. Exit container
+```
+exit
+```
diff --git a/docs/ci/ssh-session-with-github-agent.md b/docs/ci/ssh-session-with-github-agent.md
new file mode 100644
index 0000000000..5f8b8b48d6
--- /dev/null
+++ b/docs/ci/ssh-session-with-github-agent.md
@@ -0,0 +1,21 @@
+
+
+# SSH session with GitHub agent
+
+It's available to use **action** letting set up SSH session with GitHub agent in your **workflows**. The detailed documentation with the examples of use can be found in the [official repository](https://github.com/mxschmitt/action-tmate).
+
+The action setting SSH session can be easily plugged in your workflow with the example below:
+```
+- name: Setup tmate session
+ uses: mxschmitt/action-tmate@v3
+```
+
+When the action is plugged in the workflow log (the part corresponding to tmate action log) can be found the URL. By the URL you can access the terminal of your host.
+
+There are also some ways to setup action behavior. E.g., the default behavior of the action is to remain SSH session open until the workflow times out. It's available to setup timeout parameter yourself.
\ No newline at end of file
diff --git a/docs/contributing/Conventions.md b/docs/contributing/Conventions.md
new file mode 100644
index 0000000000..306f3c1749
--- /dev/null
+++ b/docs/contributing/Conventions.md
@@ -0,0 +1,44 @@
+# Naming and labeling conventions
+
+---
+
+## Naming conventions
+
+### How to name a branch
+
+We use feature branches for development. Our best practice is to use the "my-github-username" prefix for each branch and to split words with the low line, e.g.:
+
+**_githubuser/my_feature_branch_**
+
+### How to name issues, commits and pull requests
+
+We have been using GitHub for a while, and now we have a couple of tips for naming issues, commits and pull requests (
+PRs). You are welcome to stick to them too 🙂
+
+Our favorite recipes are:
+
+**issue title = feature request or bug description + issue ID**
+
+**commit message = PR title = fix description + issue ID + (PR number)**
+
+How to insert the issue ID into the commit message and the PR title?
+— Manually.
+
+How to append the PR number to the PR title?
+— It appends automatically.
+
+How to insert the PR number into the commit message?
+— *Push* the feature branch + *Create pull request* on GitHub and then →
+
+1) The preferred and the easiest flow:
+ *Squash and merge* on GitHub → the PR number automatically appends to the resulting commit message
+2) The flow for advanced users:
+ (a) squash the commits locally → insert the PR number in parentheses (!) manually into the resulting commit
+ message + *Force Push* the resulting commit → *Rebase and merge* on GitHub
+ or
+ (b) change the commit message locally → insert the PR number in parentheses (!) manually + *Force Push* the
+ commit → *Rebase and merge* on GitHub
+
+## Labeling conventions
+
+To choose the proper labels for your issue or PR, refer to the [Label usage guidelines](https://github.com/UnitTestBot/UTBotJava/wiki/Labels-usage-guidelines).
\ No newline at end of file
diff --git a/docs/contributing/InterProcessDebugging.md b/docs/contributing/InterProcessDebugging.md
new file mode 100644
index 0000000000..d488d7f56f
--- /dev/null
+++ b/docs/contributing/InterProcessDebugging.md
@@ -0,0 +1,122 @@
+# Interprocess debugging of UnitTestBot Java
+
+### Background
+
+We have split the UnitTestBot machinery into three processes. See the [document on UnitTestBot multiprocess
+architecture](../RD%20for%20UnitTestBot.md).
+This approach has improved UnitTestBot capabilities, e.g., provided support for various JVMs and scenarios but also
+complicated the debugging flow.
+
+These are UnitTestBot processes (according to the execution order):
+
+* _IDE process_
+* _Engine process_
+* _Instrumented process_
+
+Usually, the main problems happen in the _Engine process_, but it is not the process we run first.
+See how to debug UnitTestBot processes effectively.
+
+### Enable debugging
+
+Debugging the _IDE process_ is pretty straightforward: start the debugger session (**Shift+F9**) for the `runIde`
+Gradle task in `utbot-intellij` project from your IntelliJ IDEA.
+
+To debug the _Engine process_ and the _Instrumented process_, you need to enable the debugging options:
+1. Open [`UtSettings.kt`](../../utbot-framework-api/src/main/kotlin/org/utbot/framework/UtSettings.kt).
+2. There are two similar options: `runEngineProcessWithDebug` and `runInstrumentedProcessWithDebug` — enable the
+ relevant one(s). There are two ways to do this:
+ * You can create the `~/.utbot/settings.properties` file and write the following:
+
+ ```
+ runEngineProcessWithDebug=true
+ runInstrumentedProcessWithDebug=true
+ ```
+ Then restart the IntelliJ IDEA instance you want to debug.
+
+ * **Discouraged**: you can change the options in the source file, but this will involve moderate project
+ recompilation.
+3. You can set additional options for the Java Debug Wire Protocol (JDWP) agent if debugging is enabled:
+ * `engineProcessDebugPort` and `instrumentedProcessDebugPort` are the ports for debugging.
+
+ Default values:
+ - 5005 for the _Engine process_
+ - 5006 for the _Instrumented process_
+
+ * `suspendEngineProcessExecutionInDebugMode` and `suspendInstrumentedProcessExecutionInDebugMode` define whether
+ the JDWP agent should suspend the process until the debugger is connected.
+
+ More formally, if debugging is enabled, the following switch is added to the _Engine process_ JVM at the start by
+ default:
+ ```
+ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=5005"
+ ```
+
+ These options set `suspend` and `address` values. For example, with the following options in `~/.utbot/settings.properties`:
+ ```
+ runEngineProcessWithDebug=true
+ engineProcessDebugPort=12345
+ suspendEngineProcessExecutionInDebugMode=false
+ ```
+ the resulting switch will be:
+ ```
+ "-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,quiet=y,address=12345"
+ ```
+ See `org.utbot.intellij.plugin.process.EngineProcess.Companion.debugArgument` for switch implementation.
+4. For information about logs, refer to the [Interprocess logging](InterProcessLogging.md) guide.
+
+### Run configurations for debugging the Engine process
+
+There are three basic run configurations:
+1. `Run IDE` configuration allows running the plugin in IntelliJ IDEA.
+2. `Utility Configurations/Listen for Instrumented Process` configuration allows listening to port 5006 to check if
+ the _Instrumented process_ is available for debugging.
+3. `Utility Configurations/Listen for Engine Process` configuration allows listening to port 5005 to check if the _Engine process_ is available for debugging.
+
+On top of them, there are three compound run configurations for debugging:
+1. `Debug Engine Process` and `Debug Instrumented Process` — a combination for debugging the _IDE process_ and
+ the selected process.
+3. `Debug All` — a combination for debugging all three processes.
+
+To make debug configurations work properly, you need to set the required properties in `~/.utbot/settings.properties`. If you change the _port number_ and/or the _suspend mode_, do change these default values in the corresponding Utility Configuration.
+
+### How to debug
+
+Let's walk through an example illustrating how to debug the "_IDE process_ → _Engine process_" communication.
+
+1. In your current IntelliJ IDEA with source code, use breakpoints to define where the program needs to be stopped. For example, set the breakpoints at `EngineProcess.generate` and somewhere in `watchdog.wrapActiveCall(generate)`.
+2. Select the `Debug Engine Process` configuration, add the required parameters to `~/.utbot/settings.properties` and
+ start the debugger session.
+3. Generate tests with UnitTestBot in the debug IDE instance. Make sure symbolic execution is turned on, otherwise some processes do not even start.
+4. The debug IDE instance will stop generation (if you have not changed the debug parameters). If you take no action, test generation will be canceled by timeout.
+5. When the _Engine process_ has started (build processes have finished, and the progress bar says: _"Generate
+ tests: read classes"_), there will be another debug window — "Listen for Engine Process", — which automatically
+ connects and starts debugging.
+6. Wait for the program to be suspended upon reaching the first breakpoint in the _Engine process_.
+
+### Interprocess call mapping
+
+Now you are standing on a breakpoint in the _IDE process_, for example, the process stopped on:
+
+ EngineProcess.generate()
+
+If you go along the execution, it reaches the next line (you are still in the _IDE process_):
+
+ engineModel.generate.startBlocking(params)
+
+It seems that test generation itself should occur in the _Engine process_ and there should be an entry point in the _Engine process_.
+How can we find it?
+
+Standing on the breakpoint at `engineModel.generate.startBlocking(params)`, right-click on
+`EngineProcessModel.generate` and **Go to** > **Declaration or Usages**. This navigates to the `RdCall` definition (which is
+responsible for cross-process communication) in the `EngineProcesModel.Generated.kt` file.
+
+Now **Find Usages** for `EngineProcessModel.generate` and see the point where `RdCall` is passed to the next method:
+
+ watchdog.wrapActiveCall(generate)
+
+This is the point where `RdCall` is called in the _Engine process_.
+
+You could have skipped the previous step and used **Find Usages** right away, but it is useful to know
+where `RdCall` is defined.
+
+If you are interested in the trailing lambda of `watchdog.wrapActiveCall(generate)`, set the breakpoint here.
\ No newline at end of file
diff --git a/docs/contributing/InterProcessLogging.md b/docs/contributing/InterProcessLogging.md
new file mode 100644
index 0000000000..a023dba59e
--- /dev/null
+++ b/docs/contributing/InterProcessLogging.md
@@ -0,0 +1,248 @@
+# Interprocess logging
+
+This document describes
+how logging is implemented across the UnitTestBot Java [processes](https://github.com/UnitTestBot/UTBotJava/blob/main/docs/RD%20for%20UnitTestBot.md):
+the IDE process, the Engine process, and the Instrumented process.
+
+## Architecture
+
+The UnitTestBot Java logging system relies on `log4j2` library.
+
+For UnitTestBot Java used as an IntelliJ IDEA plugin, the configuration file for logging is [`utbot-intellij/log4j2.xml`](../../utbot-intellij/src/main/resources/log4j2.xml).
+
+When used as Contest estimator or the Gradle/Maven plugins, via CLI or during the CI test runs,
+UnitTestBot Java engine searches classpath for the first `log4j2.xml` in the `resources` directory.
+
+### IDE process
+
+The IDE process writes logging information to standard `idea.log` files and puts them into the default log directory.
+
+To configure logs for the IDE process, use the log configuration file in a straightforward way.
+
+To change the log configuration for the prebuilt plugin,
+go to **Help** > **Diagnostic Tools** > **Debug Log Settings...** and configure `log4j2.xml`.
+
+To store log data for the Engine process started from the IDE process, the UnitTestBot Java plugin creates a directory:
+`org.utbot.intellij.plugin.process.EngineProcessKt.engineProcessLogDirectory`.
+
+### Engine process
+
+The Engine process can be started either from IntelliJ IDEA or separately — as a standalone engine.
+
+#### Engine process started from IntelliJ IDEA
+
+As the plugin does not support multiple generation processes,
+the logs from the Engine process are written to the same file.
+
+The default log file directory is `%user_temp%/UtBot/rdEngineProcessLogs`.
+
+The [`utbot-intellij/log4j2.xml`](../../utbot-intellij/src/main/resources/log4j2.xml) file is copied to the
+UnitTestBot Java temporary directory:
+`org.utbot.intellij.plugin.process.EngineProcessKt.engineProcessLogConfigurationsDirectory`.
+Then this file is provided to the Engine process via the following CLI switch:
+ ```
+ -Dlog4j2.configurationFile=%configuration_file%
+ ```
+
+Here, `%configuration_file%` can take one of two values:
+1. A modified copy of [`utbot-intellij/log4j2.xml`](../../utbot-intellij/src/main/resources/log4j2.xml) file, which is stored in UnitTestBot Java temporary directory.
+
+ More precisely, there are 2 appenders in the configuration file:
+ ```xml
+
+
+
+
+ ```
+ By default, `IdeaAppender` is used everywhere in a file for the IDE plugin.
+
+ For the Engine process, a temporary `log4j2.xml` is created,
+ where the `ref="IdeaAppender"` substring is replaced with `ref="EngineProcessAppender"`:
+ this replacement changes all the appenders and the log pattern
+ but keeps categories and log levels for the loggers the same.
+
+ As soon as the file reaches 20 MB size, `RollingFileAppender` writes the logs to the `utbot-engine-current.log` file.
+ The created log files are named `utbot-engine-%i.log`.
+ A log file with the largest index is the latest one: `utbot-engine-1.log` has been created earlier than `utbot-engine-10.log`.
+
+ Each time the Engine process starts, the following lines are printed into the IntelliJ IDEA log:
+ ```
+ | UtBot - EngineProcess | Engine process started with PID = 4172
+ | UtBot - EngineProcess | Engine process log directory - C:\Users\user_name\AppData\Local\Temp\UTBot\rdEngineProcessLogs
+ | UtBot - EngineProcess | Engine process log file - C:\Users\user_name\AppData\Local\Temp\UTBot\rdEngineProcessLogs\utbot-engine-current.log
+ ```
+
+2. A path from `UtSettings.engineProcessLogConfigFile`.
+
+ The option provides the external `log4j2` configuration file with the path instead of [`utbot-intellij/log4j2.xml`](../../utbot-intellij/src/main/resources/log4j2.xml).
+ In the `~/.utbot/settings.properties` file, one can set this path to a custom configuration file applicable to the Engine process, for example:
+ ```
+ engineProcessLogConfigFile=C:\wrk\UTBotJava\engineProcessLog4j2.xml
+ ```
+ This allows you to configure logs for the Engine process even for the prebuilt plugin (you need to restart an IDE).
+
+#### Engine process started separately
+
+When used as Contest estimator or the Gradle/Maven plugins, via CLI or during the CI test runs,
+UnitTestBot Java engine searches classpath for the first `log4j2.xml` in the `resources` directory
+to get configuration information.
+
+### Instrumented process
+
+The Instrumented process sends the logs to its parent — to the Engine process.
+Logs are sent via the corresponding Rd model: `org.utbot.rd.models.LoggerModel`.
+
+See also `org.utbot.instrumentation.rd.InstrumentedProcess.Companion.invoke` and
+`org.utbot.instrumentation.process.InstrumentedProcessMainKt.main`.
+
+## Rd logging system
+
+Rd has the custom logging system based on `com.jetbrains.rd.util.Logger` interface.
+It is convenient to set the Rd logging system as default for the Instrumented process:
+during concrete execution,
+the `log4j2` classes in UnitTestBot Java could be confused with the `log4j2` classes from the project under test.
+Duplicated `log4j2` libraries can break instrumentation and coverage statistics.
+
+You should always override the default Rd logging strategy, which writes log data to `stdout/stderr`.
+Use `com.jetbrains.rd.util.Logger.Companion.set` method to provide custom
+`com.jetbrains.rd.util.ILoggerFactory`.
+The created loggers will be automatically re-instantiated to obtain a new logger from the provided factory.
+You can obtain a logger via the `com.jetbrains.rd.util.getLogger` function.
+Check `EngineProcessMain` for Rd logging example.
+
+For available Rd factories, see the `org.utbot.rd.loggers` package: it contains the implemented factories.
+The format of the log messages is the same as described in `utbot-intellij/src/main/resources/log4j2.xml`.
+
+## Implementation details
+
+### Additivity
+
+An entry may appear in a log many times due to _additivity_. The resulting log may look like this:
+```
+13:55:41.204 | INFO | AnalyticsConfigureUtil | PathSelectorType: INHERITORS_SELECTOR
+13:55:41.204 | INFO | AnalyticsConfigureUtil | PathSelectorType: INHERITORS_SELECTOR
+```
+
+The logger's full name constitutes a tree structure so that the logged events from a child are visible to a parent.
+
+For example, the following `log4j2.xml` configuration in IntelliJ IDEA will produce such a problem:
+```xml
+...
+
+
+
+
+
+
+
+
+...
+```
+
+This happens because the `org.utbot` logger is a parent to `org.utbot.intellij`, and all the events from
+`org.utbot.intellij` are also transferred to `org.utbot`.
+
+To modify this behavior, add the `additivity="false"` tag to all loggers manually:
+```xml
+...
+
+
+
+
+
+
+
+
+...
+```
+
+Consider this problem when you manually configure log level and appender for a logger.
+
+For more information,
+refer to the [`log4j2` additivity](https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity) document.
+
+### Logging: auxiliary methods
+
+Find more logging-related methods at `UtRdLogUtil.kt` and `Logging.kt`.
+
+To trace the execution duration,
+use the `measureTime` method (see `Logging.kt`) with the corresponding log level scope.
+
+In the Engine process, the entries from the Instrumented process are logged by `org.utbot.instrumentation.rd.InstrumentedProcessKt.rdLogger`.
+
+## Log levels and performance
+
+For development, the `Debug` level is preferred in most cases.
+
+The `Info` log level is sufficient for release.
+
+In Rd, if you choose the `Trace` level for all loggers or set it as default for the root logger,
+this enables logging for all technical _send/receive_ events from protocol.
+It may cause ~50 MB of additional entries per generation to appear and _heavily_ pollutes the log. This might be useful
+for troubleshooting interprocess communication but in all other cases prefer the `Debug` level or
+specify the `Trace` level per logger explicitly.
+
+For the `Debug` level, if a log message requires heavy string interpolation, wrap it in lambda, for example:
+```kotlin
+val someVeryBigDataStructure = VeryBigDataStructure()
+
+logger.debug("data structure representation - $someVeryBigDataStructure") // <---- interpolation
+```
+Here, even for a message with the `Debug` level, interpolation will always occur because
+the message is passed as a parameter, which is evaluated at call site.
+If the `Info` level (or higher) is set for a logger,
+the message is built, but not logged,
+resulting in unnecessary work, possibly causing performance issues.
+
+Consider using lambdas:
+```kotlin
+// message will be created only if debug log level is available
+logger.debug { "data structure representation - $someVeryBigDataStructure"}
+```
+
+Here, although the logs are sent from one process to another, no performance penalties have been noticed.
+
+To reach higher performance, try to use `bufferedIO` and `immediateFlush` properties in `log4j2.xml`.
+For example, you can make the following changes to the `log4j2.xml` file in `utbot-intellij`:
+```xml
+
+```
+
+This will reduce a number of I/O operations and help to use `log4j2` buffer more efficiently.
+This may also have a flip side:
+when the process terminates, `log4j2` terminates the logging service before the buffer is flushed, and
+you will lose the last portion of logs.
+This behavior is undesirable for testing and debugging,
+but probably acceptable for release.
+
+## Docker and Gradle
+
+To see the logs in Gradle from console, Docker and CI, add the following `build.gradle.kts` file:
+```kotlin
+allprojects {
+ tasks {
+ withType {
+ testLogging.showStandardStreams = true
+ testLogging.showStackTraces = true
+ }
+ }
+}
+```
+
+## Useful links
+
+UnitTestBot Java documentation:
+1. [Multiprocess architecture](../RD%20for%20UnitTestBot.md)
+2. [Interprocess debugging](InterProcessDebugging.md)
+3. [How to use loggers](../../HowToUseLoggers.md)
+
+`log4j2` documentation:
+1. [Architecture](https://logging.apache.org/log4j/2.x/manual/architecture.html) — an overall `log4j2` description.
+2. [Layouts](https://logging.apache.org/log4j/2.x/manual/layouts.html) — how to format log messages.
+ (UnitTestBot Java uses `Pattern layout` everywhere.)
+3. [Appenders](https://logging.apache.org/log4j/2.x/manual/appenders.html) —
+ a description of various ways to store log entries (and how to configure the storages).
+ UnitTestBot Java uses the `Console`, `File` and `RollingFile` appenders.
+4. [Configuration](https://logging.apache.org/log4j/2.x/manual/configuration.html) —
+ how to use a configuration file, how to check the file, and other useful information.
+ It is **highly advised** to read the `Additivity` part.
\ No newline at end of file
diff --git a/docs/contributing/LabelUsageGuideline.md b/docs/contributing/LabelUsageGuideline.md
new file mode 100644
index 0000000000..05007f6be8
--- /dev/null
+++ b/docs/contributing/LabelUsageGuideline.md
@@ -0,0 +1,93 @@
+# Label usage guideline
+
+We recommend to use labels only in these cases
+
+
+
+
+Something isn't working.
+Indicates an unexpected problem or unintended behavior.
+
+#
+
+
+
+This label applies to the issues and pull requests related to `org.utbot.engine` package.
+Use it if your issue or fix deals with model construction (including Soot and Jimple),
+memory modeling, symbolic values, wrappers, mocking, value resolving, or interaction
+with the SMT solver.
+
+Path selector issues generally should also have the "engine" label, unless the problem
+is specific to a ML-based path selection algorithm.
+
+#
+
+
+
+This label applies to the issues and pull requests related to `org.utbot.intellij` module.
+Use it if your changes in code are related to plugin UI appearance (mostly `ui` package)
+or close functionality: frameworks installation, sarif reports generation, etc.
+
+#
+
+
+
+This label applies to the issues and pull requests related to `org.utbot.framework.codegen`package.
+Use it if your issue or fix deals with generating (rendering) code of unit tests based on obtained
+from symbolic engine executions. It may relate to generation on both supported languages (Java and Kotlin).
+Code generator related class names are often marked with `Cg` prefix or with `CodeGenerator` suffix.
+
+#
+
+
+
+Indicates a need for improvements or additions to documentation.
+
+
+#
+
+
+
+This issue or pull request already exists.
+Indicates similar issues, pull requests, or discussions.
+
+#
+
+
+
+New feature or request.
+
+#
+
+
+
+Good for newcomers.
+Indicates a good issue for first-time contributors.
+
+#
+
+
+
+Extra attention is needed.
+Indicates that a maintainer wants help on an issue or pull request.
+
+#
+
+
+
+This issue / PR doesn't seem right.
+Indicates that an issue, pull request, or discussion is no longer relevant.
+
+#
+
+
+
+Further information is requested.
+Indicates that an issue, pull request, or discussion needs more information.
+
+#
+
+
+
+This will not be worked on.
+Indicates that work won't continue on an issue, pull request, or discussion.
\ No newline at end of file
diff --git a/docs/images/utbot_custom_javadoc_tags.png b/docs/images/utbot_custom_javadoc_tags.png
new file mode 100644
index 0000000000..0025b4bb01
Binary files /dev/null and b/docs/images/utbot_custom_javadoc_tags.png differ
diff --git a/docs/images/utbot_settings.png b/docs/images/utbot_settings.png
new file mode 100644
index 0000000000..efd775711b
Binary files /dev/null and b/docs/images/utbot_settings.png differ
diff --git a/docs/images/utbot_ututils_2.0.png b/docs/images/utbot_ututils_2.0.png
new file mode 100644
index 0000000000..c1146646c3
Binary files /dev/null and b/docs/images/utbot_ututils_2.0.png differ
diff --git a/docs/jlearch/pipeline-training-usage.md b/docs/jlearch/pipeline-training-usage.md
index 32cbd0dddf..9c68d35f36 100644
--- a/docs/jlearch/pipeline-training-usage.md
+++ b/docs/jlearch/pipeline-training-usage.md
@@ -32,6 +32,6 @@ Briefly:
To do this, you should:
* Be sure that you use `Java 8` by `java` command and set `JAVA_HOME` to `Java 8`.
* Put projects, on which you want to learn in `contest_input/projects` folder, then list classes, on which you want to learn in `contest_input/classes//list` (if it is empty, than we will take all classes from project jar).
-* Run `pip install -r scripts/requirements.txt`. It is up to you to make it in virtual environment or not.
-* List selectors in `scripts/selector_list` and projects in `scripts/prog_list`
-* Run `./scripts/train_iteratively.sh `
+* Run `pip install -r scripts/ml/requirements.txt`. It is up to you to make it in virtual environment or not.
+* List selectors in `scripts/ml/selector_list` and projects in `scripts/ml/prog_list`
+* Run `./scripts/ml/train_iteratively.sh `
diff --git a/docs/jlearch/scripts.md b/docs/jlearch/scripts.md
index 64b4294f47..4e23e43f9e 100644
--- a/docs/jlearch/scripts.md
+++ b/docs/jlearch/scripts.md
@@ -5,7 +5,7 @@ For each scenario: go to root of `UTBotJava` repository - it is `WORKDIR`.
Before start of work run:
```bash
-./scripts/prepare.sh
+./scripts/ml/prepare.sh
```
It will copy contest resources in `contest_input` folder and build the project, because we use jars, so if you want to change something in code and re-run scripts, then you should run:
@@ -16,11 +16,11 @@ It will copy contest resources in `contest_input` folder and build the project,
## To Train a few iterations of your models:
By default features directory is `eval/features` - it should be created, to change it you should manually do it in source code of scripts.
-List projects and selectors on what you want to train in `scripts/prog_list` and `scripts/selector_list`. You will be trained on all methods of all classes from `contest_input/classes//list`.
+List projects and selectors on what you want to train in `scripts/ml/prog_list` and `scripts/selector_list`. You will be trained on all methods of all classes from `contest_input/classes//list`.
Then just run:
```bash
-./scripts/train_iteratively.sh
+./scripts/ml/train_iteratively.sh
```
Python command is your command for python3, in the end of execution you will get iterations models in `` folder and features for each selector and project in `//` for `selector` from `selectors_list` and in `/jlearch//` for models.
@@ -29,7 +29,7 @@ Check that `srcTestDir` with your project exist in `build.gradle` of `utbot-juni
Then just run:
```bash
-./scripts/run_with_coverage.sh
+./scripts/ml/run_with_coverage.sh
```
In the end of execution you will get jacoco report in `eval/jacoco///` folder.
@@ -37,7 +37,7 @@ In the end of execution you will get jacoco report in `eval/jacoco//
+./scripts/ml/quality_analysis.sh
```
It will take coverage reports from relative report folders (at `eval/jacoco/project/alias`) and generate charts in `$outputDir//.html`.
`outputDir` can be changed in `QualityAnalysisConfig`. Result file will contain information about 3 metrics:
diff --git a/docs/jlearch/setup.md b/docs/jlearch/setup.md
index d1bf89c364..d24be69503 100644
--- a/docs/jlearch/setup.md
+++ b/docs/jlearch/setup.md
@@ -1,7 +1,7 @@
# How to setup environment for experiments on Linux
* Clone repository, go to root
-* `chmod +x ./scripts/*` and `chmod +x gradlew`.
+* `chmod +x ./scripts/ml/*` and `chmod +x gradlew`.
* Set `Java 8` as default and set `JAVA_HOME` to this `Java`.
For example
* Go through [this](https://sdkman.io/install) until `Windows installation`
@@ -17,19 +17,19 @@
* `python3 -m venv /path/to/new/virtual/environment`
* `source /path/to/venv/bin/activate`
* Check `which python3`, it should be somewhere in `path/to/env` folder.
- * `pip install -r scripts/requirements.txt`
-* `./scripts/prepare.sh`
-* Change `scripts/prog_list` to run on smaller project or delete some classes from `contest_input/classes//list`.
+ * `pip install -r scripts/ml/requirements.txt`
+* `./scripts/ml/prepare.sh`
+* Change `scripts/ml/prog_list` to run on smaller project or delete some classes from `contest_input/classes//list`.
# Default settings and how to change it
-* You can reduce number of models in `models` variable in `scripts/train_iteratively.sh`
+* You can reduce number of models in `models` variable in `scripts/ml/train_iteratively.sh`
* You can change amount of required RAM in `run_contest_estimator.sh`: `16 gb` by default
* You can change `batch_size` or `device` n `train.py`: `4096` and `gpu` by default
* If you are completing setup on server, then you will need to uncomment tmp directory option in `run_contest_estimator.sh`
# Continue setup
-* `scripts/train_iteratively.sh 30 2 models `
+* `scripts/ml/train_iteratively.sh 30 2 models `
* In `models/` you should get models.
* `mkdir eval/jacoco`
-* `./scripts/run_with_coverage.sh 30 "NN_REWARD_GUIDED_SELECTOR path/to/model" some_alias`. `path/to/model` should be something like `models/nn32/0`, where `nn32` is a type of model and `0` is the iteration number
+* `./scripts/ml/run_with_coverage.sh 30 "NN_REWARD_GUIDED_SELECTOR path/to/model" some_alias`. `path/to/model` should be something like `models/nn32/0`, where `nn32` is a type of model and `0` is the iteration number
* You should get jacoco report in `eval/jacoco/guava-26.0/some_alias/`
\ No newline at end of file
diff --git a/docs/spring.md b/docs/spring.md
new file mode 100644
index 0000000000..85a87b4991
--- /dev/null
+++ b/docs/spring.md
@@ -0,0 +1,370 @@
+# Automated test generation for Spring-based code
+
+Java developers actively use the Spring framework to implement the inversion of control and dependency injection.
+Testing Spring-based applications differs significantly from testing standard Java programs. Thus, we customized
+UnitTestBot to analyze Spring projects.
+
+
+ * [General notes](#general-notes)
+ * [Limitations](#limitations)
+ * [Testability](#testability)
+ * [Standard unit tests](#standard-unit-tests)
+ * [Example](#example)
+ * [Use cases](#use-cases)
+ * [Spring-specific unit tests](#spring-specific-unit-tests)
+ * [Example](#example-1)
+ * [Use cases](#use-cases-1)
+ * [Side effects](#side-effects)
+ * [Mechanism](#mechanism)
+ * [Integration tests](#integration-tests)
+ * [Service layer](#service-layer)
+ * [Side effects](#side-effects-1)
+ * [Use cases](#use-cases-2)
+ * [Controller layer](#controller-layer)
+ * [Example](#example-2)
+ * [Microservice layer](#microservice-layer)
+
+
+## General notes
+
+UnitTestBot proposes three approaches to automated test generation:
+* [standard unit tests](#standard-unit-tests) that mock environmental interactions;
+* [Spring-specific unit tests](#spring-specific-unit-tests) that use information about the Spring application context to reduce the number of
+ mocks;
+* and [integration tests](#integration-tests) that validate interactions between application components.
+
+Hereinafter, by _components_ we mean Spring components.
+
+For classes under test, one should select an appropriate type of test generation based on their knowledge
+about the Spring specifics of the current class. Recommendations on how to choose the test type are provided below.
+For developers who are new to Spring, there is a "default" generation type.
+
+### Limitations
+
+UnitTestBot Java with Spring support uses symbolic execution to generate unit tests, so typical problems
+related to this technique may appear: it may be not so efficient for multithreaded programs, functions with calls to
+external libraries, processing large collections, etc.
+
+### Testability
+
+Note that UnitTestBot may generate unit tests more efficiently if your code is written to be unit-testable: the
+functions are not too complex, each function implements one logical unit, static and global data are used
+only if required, etc. Difficulties with automated test generation may have "diagnostic" value: it
+may mean that you should refactor your code.
+
+## Standard unit tests
+
+The easiest way to test Spring applications is to generate unit tests for components: to
+mock the external calls found in the method under test and to test just this method's
+functionality. UnitTestBot Java uses the Mockito framework that allows to mark
+the to-be-mocked objects with the `@Mock` annotation and to use the `@InjectMock`
+annotation for the tested instance injecting all the mocked fields. See [Mockito](https://site.mockito.org/)
+documentation for details.
+
+### Example
+
+Consider generating unit tests for the `OrderService` class that autowires `OrderRepository`:
+
+```java
+
+@Service
+public class OrderService {
+
+@Autowired
+private OrderRepository orderRepository ;
+
+public List getOrders () {
+return orderRepository.findAll ();
+}
+}
+
+public interface OrderRepository extends JpaRepository
+```
+Then we mock the repository and inject the resulting mock into a service:
+
+```java
+public final class OrderServiceTest {
+ @InjectMocks
+ private OrderService orderService
+
+ @Mock
+ private OrderRepository orderRepositoryMock
+
+ @Test
+ public void testGetOrders () {
+ when(orderRepositoryMock .findAll()).thenReturn((List)null)
+
+ List actual = orderService .getOrders()
+ assertNull(actual)
+ }
+```
+
+This test type does not process the Spring context of the original application. The components are tested in
+isolation.
+
+It is convenient when the component has its own meaningful logic and may be useless when its main responsibility is to call other components.
+
+Note that if you autowire several beans of one type or a collection into the class under test, the code of test
+class will be a bit different: for example, when a collection is autowired, it is marked with `@Spy` annotation due
+to Mockito specifics (not with `@Mock`).
+
+### Use cases
+
+When to generate standard unit tests:
+* _Service_ or _DAO_ layer of Spring application is tested.
+* Class having no Spring specific is tested.
+* You would like to test your code in isolation.
+* You would like to generate tests as fast as possible.
+* You would like to avoid starting application context and be sure the test generation process has no Spring-related side effects.
+* You would like to generate tests in one click and avoid creating specific profiles or configuration classes for
+ testing purposes.
+
+We suggest using this test generation type for the users that are not so experienced in Spring or would like to get
+test coverage for their projects without additional efforts.
+
+## Spring-specific unit tests
+
+This is a modification of standard unit tests generated for Spring projects that may allow us to get more
+meaningful tests.
+
+### Example
+
+Consider the following class under test
+
+```java
+@Service
+public class GenderService {
+
+@Autowired
+public Human human
+
+public String getGender () {
+return human.getGender();
+}
+}
+```
+where `Human` is an interface that has just one implementation actually used in current project configuration.
+
+```java
+public interface Human {
+String getGender();
+}
+
+public class Man implements Human {
+public String getGender() {
+return “man”
+}
+}
+```
+
+The standard unit test generation approach is to mock the _autowired_ objects. It means that the generated test will be
+correct but useless. However, there is just one implementation of the `Human` interface, so we may use it directly
+and generate a test like this:
+
+```java
+@Test
+public void testGetGender_HumanGetGender() {
+GenderService genderService = new GenderService();
+genderService.human = new Man();
+String actual = genderService.getGender();
+assertEquals(“man”, actual);
+}
+```
+
+Actually, dependencies in Spring applications are often injected via interfaces, and they often have just one actual
+implementation, so it can be used in the generated tests instead of an interface. If a class is injected itself, it
+will also be used in tests instead of a mock.
+
+You need to select a configuration to guide the process of creating unit tests. We support all commonly used
+approaches to configure the application:
+* using an XML file,
+* Java annotation,
+* or automated configuration in Spring Boot.
+
+Although it is possible to use the development configuration for testing purposes, we strictly recommend creating a separate one.
+
+### Use cases
+
+When to generate Spring-specific unit tests:
+* to reduce the amount of mocks in generated tests
+* and to use real object types instead of their interfaces, obtaining tests that simulate the method under test execution.
+
+### Side effects
+
+We do not recommend generating Spring-specific unit tests, when you would like to maximize line coverage.
+The goal of this approach is to cover the lines that are relevant for the current configuration and are to be used
+during the application run. The other lines are ignored.
+
+When a concrete object is created instead of mocks, it is analyzed with symbolic execution. It means that the
+generation process may take longer and may exceed the requested timeout.
+
+### Mechanism
+
+A Spring application is created to simulate a user one. It uses configuration importing users one with an additional
+bean of a special _bean factory post processor_.
+
+This _post processor_ is called when bean definitions have already been created, but actual bean initialization has
+not been started. It gets all accessible information about bean types from the definitions and destroys these
+definitions after that.
+
+Further Spring context initialization is gracefully crashed as bean definitions do not exist anymore. Thus, this
+test generation type is still safe and will not have any Spring-related side effects.
+
+Bean type information is used in symbolic execution to decide if we should mock the current object or instantiate it.
+
+## Integration tests
+
+The main difference of integration testing is that it tests the current component while taking interactions with
+other classes into account.
+
+### _Service_ layer
+
+Consider an `OrderService` class we have already seen. Actually, this class has just one
+responsibility: to return the result of a call to the repository. So, if we mock the repository, our unit test is
+actually useless. However, we can test this service in interaction with the repository: save some information to the
+database and verify if we have successfully read it in our method. Thus, the test method looks as follows.
+
+```java
+
+@Autowired
+private OrderService orderService
+
+@Autowired
+private OrderRepository orderRepository
+
+@Test
+public void testGetOrderById() throws Exception {
+Order order = new Order();
+Order order1 = orderRepository.save(order);
+long id = (Long) getFieldValue(order1, "com.rest.order.models.Order ", "id“);
+
+Order actual = orderService.getOrderById(id);
+assertEquals (order1, actual);
+}
+```
+The key idea of integration testing is to initialize the context of a Spring application and to autowire a bean of
+the class under test, and the beans it depends on. The main difficulty is to mutate the initial _autowired_ state of the
+object under test to another state to obtain meaningful tests (e.g. save some data to related repositories).
+Here we use fuzzing methods instead of symbolic execution.
+
+You should take into account that our integration tests do not use mocks at all. It also means that if the method
+under test contains calls to other microservices, you need to start the microservice unless you want to test your
+component under an assumption that the microservice is not responding.
+Writing tests manually, users can investigate the expected behavior of the external service for the current scenario,
+but automated test generation tools have no way to do it.
+
+Note that XML configuration files are currently not supported in integration testing. However, you may create a Java
+configuration class importing your XML file as a resource. The list of supported test
+frameworks is reduced to JUnit 4 and JUnit 5; TestNG is not supported for integration tests.
+
+To run integration tests properly, several annotations are generated for the class with tests (some of them may be
+missed: for example, we can avoid setting active profiles via the annotation if a default profile is used).
+
+* `@SpringBootTest` for Spring Boot applications
+* `@RunWith(SpringRunner.class)`/`@ExtendWith(SpringExtension.class)` depending on the test framework
+* `@BootstrapWith(SpringBootTestContextBootstrapper.class)` for Spring Boot applications
+* `@ActiveProfiles(profiles = {profile_names})` to activate requested profiles
+* `@ContextConfiguration(classes = {configuration_classes})` to initialize a proper configuration
+* `@AutoConfugureTestDatabase`
+
+Two additional annotations are:
+
+* `@Transactional`: using this annotation is not a good idea for some developers because it can
+hide problems in the tested code. For example, it leads to getting data from the transaction cache instead of real
+communication with database.
+However, we need to use this annotation during the test generation process due to the
+efficiency reasons and the current fuzzing approach. Generating tests in transaction but not running them in
+transaction may sometimes lead to failing tests.
+In future, we are going to modify the test generation process and to use `EntityManager` and manual flushing to the
+database, so running tests in transaction will not have a mentioned disadvantage any more.
+
+* `@DirtiesContext(classMode=BEFORE_EACH_TEST_METHOD)`: although running test method in transaction rollbacks most
+actions in the context, there are two reasons to use `DirtiesContext`. First, we are going to remove
+`@Transactional`. After that, the database `id` sequences are not rolled back with the transaction, while we would
+like to have a clean context state for each new test to avoid unobvious dependencies between them.
+
+Currently, we do not have proper support for Spring security issues in UnitTestBot. We are going to improve it in
+future releases, but to get at least some results on the classes requiring authorization, we use `@WithMockUser` for
+applications with security issues.
+
+#### Side effects
+
+Actually, yes! Integration test generation requires Spring context initialization that may contain unexpected
+actions: HTTP requests, calls to other microservices, changing the computer parameters. So you need to
+validate the configuration carefully before trying to generate integration tests. We strictly recommend avoiding
+using _production_ and _development_ configuration classes for testing purposes, and creating separate ones.
+
+#### Use cases
+
+When to generate integration tests:
+* You have a properly prepared configuration class for testing
+* You would like to test your component in interaction with others
+* You would like to generate tests without mocks
+* You would like to test a controller
+* You consent that generation may be much longer than for unit tests
+
+### _Controller_ layer
+
+When you write tests for controllers manually, it is recommended to do it a bit differently. Of course, you may just
+mock the other classes and generate unit tests looking similarly to the tests we created for services, but they may
+not be representative. To solve this problem, we suggest a specific integration test generation approach for controllers.
+
+#### Example
+
+Consider testing the following controller method:
+
+```java
+
+@RestController
+@RequestMapping(value = "/api")
+public class OrderController {
+
+ @Autowired
+ private OrderService orderService;
+
+ @GetMapping(path = "/orders")
+ public ResponseEntity> getAllOrders() {
+ return ResponseEntity.ok().body(orderService.getOrders());
+ }
+}
+```
+UnitTestBot generates the following integration test for it:
+
+```java
+@Test
+public void testGetAllOrders() throws Exception {
+Object[] objectArray = {};
+MockHttpServletRequestBuilder mockHttpServletRequestBuilder = get("/api/orders", objectArray);
+
+ResultActions actual = mockMvc.perform(mockHttpServletRequestBuilder);
+
+actual.andDo(print());
+actual.andExpect((status()).is(200));
+actual.andExpect((content()).string("[]"));
+}
+```
+
+Note that generating specific tests for controllers is now in active development, so some parameter annotations and
+types have not been supported yet. For example, we have not supported the `@RequestParam` annotation yet. For now,
+specific integration tests for controllers are just an experimental feature.
+
+### _Microservice_ layer
+
+Actually, during integration test generation we create one specific test that can be considered as a test for the
+whole microservice. It is the `contextLoads` test, and it checks if a Spring application context has started normally.
+If this test fails, it means that your application is not properly configured, so the failure of other tests is not caused by the regression in the tested code.
+
+Normally, this test is very simple:
+
+```java
+/**
+* This sanity check test fails if the application context cannot start.
+ */
+ @Test
+ public void contextLoads() {
+ }
+```
+
+If there are context loading problems, the test contains a commented exception type, a message, and a
+track trace, so it is easier to investigate why context initialization has failed.
+
diff --git a/docs/summaries/CustomJavadocTags.md b/docs/summaries/CustomJavadocTags.md
new file mode 100644
index 0000000000..5b1a7eb819
--- /dev/null
+++ b/docs/summaries/CustomJavadocTags.md
@@ -0,0 +1,85 @@
+## Custom Javadoc Tags
+
+Currently, summaries are hard to read because of formatting issues and a lot of details they contain.
+
+**Goal**: to make test summaries structured and clear.
+
+**Idea**: to structure summary by introducing custom JavaDoc tags.
+
+Tags should start with a prefix "utbot" to avoid possible issues with user (or some plugin) custom tags (if they have
+the same names).
+
+**Suggested custom tags (NOT ALL OF THEM ARE USED)**
+
+| Name | Description | Usage example |
+|----------------------------|------------------------------------|-----------------------------------------------------------------|
+| `@utbot.classUnderTest` | Inline link to the enclosing class | `@utbot.methodUnderTest {@link main.IntMath}` |
+| `@utbot.methodUnderTest` | Inline link to the method we test. | `@utbot.methodUnderTest {@link main.IntMath#pow(int, int)}` |
+| `@utbot.expectedResult` | Value we expect to get. | `@utbot.expectedResult 4` |
+| `@utbot.actualResult` | Value we got. | `@utbot.actualResult 64` |
+| `@utbot.executes` | Executed condition. | `@utbot.executes {@code (k < Integer.SIZE): True}` |
+| `@utbot.invokes` | Invoked method. | `@utbot.invokes {@link main.IntMath#mul(int, int)}` |
+| `@utbot.triggersRecursion` | Triggered recursion. | `@utbot.recursion triggers recursion of leftBinSearch` |
+| `@utbot.activatesSwitch` | Activated switch case. | `@utbot.activatesSwitch {code case 10}` |
+| `@utbot.returnsFrom` | Statement we return from. | `@utbot.returnsFrom {@code return (k == 0) ? 1 : 0;}` |
+| `@utbot.throwsException` | Thrown exception. | `@utbot.throwsException {@link java.lang.NullPointerException}` |
+| `@utbot.caughtException` | Caught exception. | `@utbot.caughtException {@code RuntimeException e}` |
+
+## Settings
+
+There is a setting `Javadoc comment style` in the main plugin's `Settings`. It has two options: `Plain` text
+and `Structured via custom Javadoc tags` (selected by default).
+
+
+
+## View
+
+There are two modes the comment could be shown in IntelliJ IDEA: plain text and rendered view.
+
+To activate rendered mode, click on the toggle near comment.
+
+
+
+## Implementation details
+
+Implemented `JavadocTagInfo` to introduce our custom JavaDoc tags.
+
+Implemented `CustomJavadocTagProvider` and registered it in `plugin.xml` to support plugin's custom tags.
+
+Overrided behavior of `JavaDocumentationProvider#generateRenderedDoc` and registered it in `plugin.xml` to render our
+custom JavaDoc tags correctly.
+
+Added a flag `USE_CUSTOM_TAGS` to settings.
+
+After plugin's removal, IDE doesn't recognize our custom tags. It doesn't lead to errors, but highlights tags with
+yellow color.
+
+## Test scenarios
+
+Currently, the feature works only for Symbolic execution engine, so make sure the slider is on the Symbolic execution
+side.
+
+### Default behaviour (the feature is enabled).
+
+1. Run plugin on any Java project and run tests generation.
+2. Check if the comments are generated and pretty formatted.
+3. Check that all links are clickable (parts that start with `@link` tag).
+
+### Manual settings (you can choose any comment style – old and new).
+
+1. Go to the `Settings` menu, check that the drop-down list `Javadoc comment style` exists and has two options (Plain
+ text
+ and Structured via custom Javadoc tags).
+2. Select any option, click OK, run tests generation and check that the option is applied and the comments are generated
+ according to the chosen style.
+
+### Content
+
+First, generate comment with one style, then generate with another one and compare its content. If it differs,
+please, provide code snippet and both generated comments. It could differ because currently the
+style with custom Javadoc tags is a bit simplified.
+
+### View
+
+Check that the comments are rendered well. To do it, click on the toggle near the comment (see post about Rendered
+view feature in IntelliJ IDEA).
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index cc0c15f08d..f54610ca84 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,47 +1,137 @@
kotlin.code.style=official
-org.gradle.caching=false
-junit5_version=5.8.0-RC1
-junit4_version=4.4
-junit4_platform_version=1.7.1
-mockito_version=3.5.13
-z3_version=4.8.9.1
-z3_java_api_version=4.8.9
-soot_commit_hash=13be158
-kotlin_version=1.4.20
-log4j2_version=2.13.3
-coroutines_version=1.4.1
-collections_version=0.3.4
-intellij_plugin_version=0.6.4
-jacoco_version=0.8.5
-commons_lang_version=3.11
-commons_io_version=2.8.0
-kotlin_logging_version=1.8.3
-ktor_version=1.4.1
-clikt_version=3.2.0
-guava_version=30.0-jre
-apache_commons_exec_version=1.2
-rgxgen_version=1.3
-apache_commons_text_version=1.9
-antlr_version=4.9.2
-kryo_version=5.1.1
-kryo_serializers_version=0.45
-asm_version=8.0.1
-testng_version=7.4.0
-mockito_inline_version=4.0.0
-jackson_version = 2.12.3
-javasmt_solver_z3_version=4.8.9-sosy1
-slf4j_version=1.7.36
-eclipse_aether_version=1.1.0
-maven_wagon_version=3.5.1
-maven_plugin_api_version=3.8.5
-maven_plugin_tools_version=3.6.4
-maven_plugin_testing_version=3.3.0
-maven_resolver_api_version=1.8.0
-sisu_plexus_version=0.3.5
-javacpp_version=1.5.3
-jsoup_version=1.7.2
-djl_api_version=0.17.0
-pytorch_native_version=1.9.1
-# soot also depends on asm, so there could be two different versions
-
-kotlin.stdlib.default.dependency=false
\ No newline at end of file
+
+# === IDE settings ===
+# Project Type
+# - Community: for Java + Spring + Python (IC supported features)
+# - Ultimate: for Java + Spring + Python (IU supported features) + JavaScript + Go
+projectType=Ultimate
+
+communityEdition = Community
+ultimateEdition=Ultimate
+
+# IU, IC, PC, PY
+# IC for AndroidStudio
+ideType=IC
+ideaVersion=232.8660.185
+pycharmVersion=2023.2
+golandVersion=2023.2
+# ALL, NOJS
+buildType=NOJS
+
+# IDE types that supports appropriate language
+javaIde=IC,IU
+pythonIde=IC,IU,PC,PY
+jsIde=IU,PY
+jsBuild=ALL
+goIde=IU,GO
+
+# IDE types that require Pycharm plugin
+pycharmIdeType=PC,PY
+
+# In order to run Android Studio instead of IntelliJ Community, specify the path to your Android Studio installation
+#androidStudioPath=your_path_to_android_studio
+
+# Version numbers: https://plugins.jetbrains.com/plugin/7322-python-community-edition/versions
+pythonCommunityPluginVersion=232.8660.185
+# Version numbers: https://plugins.jetbrains.com/plugin/631-python/versions
+pythonUltimatePluginVersion=232.8660.185
+# Version numbers: https://plugins.jetbrains.com/plugin/9568-go/versions
+goPluginVersion=232.8660.142
+# === IDE settings ===
+
+junit5Version=5.8.2
+junit4Version=4.13.2
+junit4PlatformVersion=1.9.0
+# NOTE: Mockito versions 5+ are not compatible with Java 8: https://www.davidvlijmincx.com/posts/upgrade-to-mockito-5
+mockitoVersion=4.11.0
+mockitoInlineVersion=4.11.0
+ksmtVersion=0.5.13
+sootVersion=4.4.0-FORK-2
+kotlinVersion=1.8.0
+log4j2Version=2.13.3
+coroutinesVersion=1.6.4
+collectionsVersion=0.3.5
+# after updating plugin version you should manually bump corresponding versions in plugin
+# as they cannot be set from properties
+# utbot-intellij/build.gradle.kts
+# utbot-rd/build.gradle
+# utbot-rider/build.gradle.kts
+intellijPluginVersion=1.13.1
+# TODO every time you bump rd version:
+# 1. regenerate all models
+# 2. check if rider plugin works
+# 3. search for previous RD version (as string) in entire project and update it manually in places where it has to be hardcoded
+rdVersion=2023.2.0
+# to enable - add -PincludeRiderInBuild=true in build CLI
+includeRiderInBuild=false
+jacocoVersion=0.8.8
+commonsLangVersion=3.11
+commonsIoVersion=2.8.0
+kotlinLoggingVersion=1.8.3
+ktorVersion=1.4.1
+cliktVersion=3.2.0
+guavaVersion=32.1.2-jre
+apacheCommonsExecVersion=1.2
+apacheCommonsTextVersion=1.9
+rgxgenVersion=1.3
+antlrVersion=4.9.2
+kryoVersion=5.4.0
+kryoSerializersVersion=0.45
+asmVersion=9.2
+testNgVersion=7.6.0
+kamlVersion=0.51.0
+jacksonVersion=2.12.3
+kotlinxSerializationVersion=1.5.0
+slf4jVersion=1.7.36
+eclipseAetherVersion=1.1.0
+mavenWagonVersion=3.5.1
+mavenPluginApiVersion=3.8.5
+mavenPluginToolsVersion=3.6.4
+mavenPluginTestingVersion=3.3.0
+mavenResolverApiVersion=1.8.0
+sisuPlexusVersion=0.3.5
+javaCppVersion=1.5.3
+jsoupVersion=1.7.2
+djlApiVersion=0.17.0
+pytorchNativeVersion=1.9.1
+shadowJarVersion=7.1.2
+openblasVersion=0.3.10-1.5.4
+arpackNgVersion=3.7.0-1.5.4
+commonsLoggingVersion=1.2
+commonsIOVersion=2.11.0
+javaxVersion=2.2
+jakartaVersion=3.1.0
+jacoDbVersion=1.4.3
+moshiVersion=1.15.1
+pythonTypesAPIHash=e5a5d9c
+
+# use latest Java 8 compaitable Spring and Spring Boot versions
+springVersion=5.3.28
+springBootVersion=2.7.13
+springSecurityVersion=5.8.5
+
+approximationsVersion=bfce4eedde
+usvmVersion=72924ad
+
+# configuration for build server
+#
+# the following options are passed to gradle command explicitly (see appropriate workflow):
+# --build-cache (the same as org.gradle.caching=true)
+# --no-daemon (the same as org.gradle.daemon=false)
+#
+# read about options precedence at: https://docs.gradle.org/current/userguide/build_environment.html
+org.gradle.jvmargs="-Xmx6g"
+
+# configuration for local compilation - much faster
+# overriden by some parameters in CI, read below about each option
+#
+# overrided by --no-daemon
+org.gradle.daemon=true
+# overrided by -Dkotlin.daemon.jvm.options=-Xmx4g
+kotlin.daemon.jvm.options=-Xmx4g
+# overrided by --no-parallel
+org.gradle.parallel=true
+# not overrided, we use cache in CI as well
+org.gradle.caching=true
+# there is no need to override the option below because parallel execution is disabled by --no-parallel
+org.gradle.workers.max=8
diff --git a/gradle/include/jvm-project.gradle b/gradle/include/jvm-project.gradle
deleted file mode 100644
index b0049e6304..0000000000
--- a/gradle/include/jvm-project.gradle
+++ /dev/null
@@ -1,66 +0,0 @@
-apply plugin: 'java'
-apply plugin: 'kotlin'
-
-dependencies {
- implementation group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: coroutines_version
- implementation group: 'org.jetbrains.kotlinx', name: 'kotlinx-collections-immutable-jvm', version: collections_version
- implementation group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jdk8', version: kotlin_version
- implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: kotlin_version
-
- testImplementation("org.junit.jupiter:junit-jupiter:$junit5_version"){
- force = true
- }
-}
-
-compileKotlin {
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_1_8
- freeCompilerArgs += ["-Xallow-result-return-type", "-Xinline-classes"]
- allWarningsAsErrors = false
- }
-}
-
-compileTestKotlin {
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_1_8
- freeCompilerArgs += ["-Xallow-result-return-type", "-Xinline-classes"]
- allWarningsAsErrors = false
- }
-}
-
-java {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
-}
-
-compileJava {
- options.compilerArgs << '-Werror' << '-Xlint:all'
- options.encoding = 'UTF-8'
-}
-
-compileTestJava {
-// options.compilerArgs << '-Werror' << '-Xlint:all'
-// options.encoding = 'UTF-8'
-}
-
-test {
- // set heap size for the test JVM(s)
- minHeapSize = "128m"
- maxHeapSize = "2048m"
-
- useJUnitPlatform() {
- excludeTags 'slow', 'IntegrationTest'
- }
-
- afterTest { descriptor, result ->
- println "[$descriptor.classDisplayName] [$descriptor.displayName]: $result.resultType"
- }
-
- testLogging {
- afterSuite { desc, result ->
- if (!desc.parent) { // will match the outermost suite
- println "Test summary: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index f3d88b1c2f..943f0cbfa7 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 9938269f3b..6f615571cc 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
+networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
\ No newline at end of file
diff --git a/gradlew b/gradlew
index af6708ff22..65dcd68d65 100644
--- a/gradlew
+++ b/gradlew
@@ -1,78 +1,129 @@
-#!/usr/bin/env sh
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://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.
+#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# Attempt to set APP_HOME
+
# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m"'
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
+ JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@@ -89,84 +140,105 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
fi
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=$((i+1))
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
fi
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 6d57edc706..93e3f59f13 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,4 +1,20 @@
-@if "%DEBUG%" == "" @echo off
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -9,19 +25,23 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m"
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +55,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,38 +65,26 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/models/0/nn.json b/models/0/nn.json
new file mode 100644
index 0000000000..99cee81f4e
--- /dev/null
+++ b/models/0/nn.json
@@ -0,0 +1,18970 @@
+{
+ "linearLayers": [
+ [
+ [
+ -0.2812620997428894,
+ -0.20690025389194489,
+ 0.025239119306206703,
+ 0.16666702926158905,
+ -0.3015841245651245,
+ -0.2231411188840866,
+ -0.2339421808719635,
+ 0.1372300386428833,
+ -0.09653409570455551,
+ -0.20102998614311218,
+ -0.1517055481672287,
+ 0.06770151108503342,
+ 0.1736624538898468
+ ],
+ [
+ 0.07755041122436523,
+ 0.2603122293949127,
+ 0.4763484597206116,
+ 0.23077495396137238,
+ 0.18743446469306946,
+ -0.002347304718568921,
+ -0.31861305236816406,
+ -0.5238833427429199,
+ -0.5596318244934082,
+ -0.13943715393543243,
+ -0.4900222718715668,
+ -0.13874824345111847,
+ -0.026209624484181404
+ ],
+ [
+ 0.005672903265804052,
+ 0.2812194228172302,
+ -0.029947057366371155,
+ 0.2998824715614319,
+ -0.18556763231754303,
+ -0.2329135686159134,
+ 0.03805786743760109,
+ 0.20632661879062653,
+ 0.32710668444633484,
+ 0.11301928013563156,
+ 0.21198059618473053,
+ 0.12055762112140656,
+ 0.12616081535816193
+ ],
+ [
+ 0.32202479243278503,
+ 0.1650446057319641,
+ -0.2244292050600052,
+ 0.2871652841567993,
+ -0.38242897391319275,
+ 0.20216849446296692,
+ 0.4162890613079071,
+ -0.24852490425109863,
+ -0.3516800105571747,
+ -0.5501313805580139,
+ -0.1989777386188507,
+ -0.1753005087375641,
+ -0.0997919887304306
+ ],
+ [
+ -0.2073894888162613,
+ -0.026421066373586655,
+ 0.20444630086421967,
+ 0.4853132665157318,
+ 0.13209407031536102,
+ 0.15783868730068207,
+ 0.08547142148017883,
+ -0.10429231822490692,
+ -0.04476998746395111,
+ 0.19800862669944763,
+ 0.3543761968612671,
+ -0.1627587378025055,
+ 0.0691845715045929
+ ],
+ [
+ -0.2442532181739807,
+ 0.18623562157154083,
+ -0.31594496965408325,
+ 0.040417544543743134,
+ -0.32911941409111023,
+ 0.18138383328914642,
+ 0.02217470109462738,
+ -0.18134571611881256,
+ -0.17334285378456116,
+ -0.04029788821935654,
+ 0.19143174588680267,
+ 0.22332844138145447,
+ -0.12598943710327148
+ ],
+ [
+ -0.1842803806066513,
+ -0.23971040546894073,
+ -0.5434504151344299,
+ 0.261478990316391,
+ 0.1484641134738922,
+ 0.16955262422561646,
+ 0.18890511989593506,
+ 0.016144687309861183,
+ -0.1485966444015503,
+ 0.11260021477937698,
+ -0.19952836632728577,
+ -0.1845572590827942,
+ 0.0750923678278923
+ ],
+ [
+ -0.3827153742313385,
+ 0.19904662668704987,
+ -0.3166623115539551,
+ -0.09563996642827988,
+ -0.029124295338988304,
+ -0.5873277187347412,
+ 0.28851452469825745,
+ 0.15390384197235107,
+ 0.13283896446228027,
+ -0.27946051955223083,
+ -0.03319583460688591,
+ 0.017873387783765793,
+ -0.2255309373140335
+ ],
+ [
+ 0.213275745511055,
+ -0.1601620465517044,
+ -0.23047587275505066,
+ -0.04881864786148071,
+ 0.10892008990049362,
+ 0.39467450976371765,
+ 0.4419712722301483,
+ 0.15421095490455627,
+ -0.27766215801239014,
+ -0.3739401698112488,
+ -0.12171220779418945,
+ -0.124486543238163,
+ 0.21379370987415314
+ ],
+ [
+ -0.3494093716144562,
+ -0.016638662666082382,
+ -0.19239097833633423,
+ -0.2745112180709839,
+ -0.22391216456890106,
+ 0.024962177500128746,
+ 0.41822320222854614,
+ -0.25197410583496094,
+ 0.06916783004999161,
+ -0.08406639099121094,
+ 0.025617875158786774,
+ -0.06838371604681015,
+ -0.11775310337543488
+ ],
+ [
+ -0.27412572503089905,
+ -0.04075736179947853,
+ -0.10035921633243561,
+ -0.1511864960193634,
+ -0.3486115038394928,
+ 0.284804105758667,
+ 0.2807717025279999,
+ -0.022341251373291016,
+ 0.40422338247299194,
+ 0.11742650717496872,
+ 0.18943603336811066,
+ -0.07526147365570068,
+ -0.29136690497398376
+ ],
+ [
+ 0.08565166592597961,
+ -0.17808888852596283,
+ 0.23337233066558838,
+ -0.01672634296119213,
+ -0.4955122768878937,
+ -0.029994111508131027,
+ 0.30877816677093506,
+ 0.04895417392253876,
+ 0.026867445558309555,
+ -0.003204688662663102,
+ 0.025512006133794785,
+ 0.28954002261161804,
+ -0.2107226848602295
+ ],
+ [
+ -0.3008478283882141,
+ -0.14909999072551727,
+ 0.09242149442434311,
+ 0.09902229905128479,
+ -0.31035372614860535,
+ 0.5288253426551819,
+ 0.12252070754766464,
+ -0.4221459925174713,
+ -0.2459046095609665,
+ -0.22813886404037476,
+ -0.1747918277978897,
+ -0.40906938910484314,
+ 0.14370641112327576
+ ],
+ [
+ 0.2579241991043091,
+ 0.022276267409324646,
+ 0.22654399275779724,
+ -0.19261173903942108,
+ -0.03431123495101929,
+ -0.7823503017425537,
+ -0.10113504528999329,
+ 0.09389126300811768,
+ 0.25544309616088867,
+ 0.04565619304776192,
+ -0.052542056888341904,
+ 0.2994041442871094,
+ -0.19028615951538086
+ ],
+ [
+ 0.2774119973182678,
+ 0.24429869651794434,
+ 0.1913207620382309,
+ -0.20841751992702484,
+ -0.1672147959470749,
+ 0.28855234384536743,
+ 0.25656870007514954,
+ -0.6109725832939148,
+ 0.19135800004005432,
+ -0.41654518246650696,
+ -0.10192546248435974,
+ 0.4338851273059845,
+ 0.3700643479824066
+ ],
+ [
+ 0.0926647037267685,
+ 0.053513601422309875,
+ 0.2527933716773987,
+ 0.13285507261753082,
+ 0.24765196442604065,
+ -0.09636160731315613,
+ -0.33351197838783264,
+ -0.17052969336509705,
+ -0.23085607588291168,
+ -0.3964312970638275,
+ 0.10264739394187927,
+ -0.014026672579348087,
+ 0.2935609817504883
+ ],
+ [
+ -0.3148519694805145,
+ -0.20939618349075317,
+ 0.07581528276205063,
+ -0.018568221479654312,
+ -0.29132771492004395,
+ -0.010084452107548714,
+ 0.28648287057876587,
+ -0.2784898281097412,
+ 0.21446862816810608,
+ -0.08985134959220886,
+ -0.02956037037074566,
+ 0.14641478657722473,
+ 0.03872504457831383
+ ],
+ [
+ 0.33660048246383667,
+ 0.15843205153942108,
+ -0.45638447999954224,
+ -0.07325007021427155,
+ 0.22450771927833557,
+ 0.11804356426000595,
+ 0.39345601201057434,
+ -0.08022525906562805,
+ 0.0825900211930275,
+ 0.05784780904650688,
+ -0.19954009354114532,
+ -0.20153969526290894,
+ 0.16775847971439362
+ ],
+ [
+ -0.4311541020870209,
+ -0.3013177514076233,
+ -0.06462755799293518,
+ 0.08752308785915375,
+ 0.12869223952293396,
+ 0.07245280593633652,
+ -0.1027635782957077,
+ -0.38550764322280884,
+ -0.12315567582845688,
+ 0.1788141131401062,
+ -0.06572850793600082,
+ 0.3179053068161011,
+ 0.24983134865760803
+ ],
+ [
+ -0.3641359210014343,
+ -0.09185764938592911,
+ 0.28328436613082886,
+ 0.2730138301849365,
+ 0.12595508992671967,
+ -0.04021301865577698,
+ -0.0639706626534462,
+ -0.07912948727607727,
+ -0.08967989683151245,
+ -0.458464652299881,
+ 0.11333420872688293,
+ -0.10430294275283813,
+ 0.12423478066921234
+ ],
+ [
+ -0.2626790404319763,
+ -0.029405439272522926,
+ 0.1691773235797882,
+ -0.16682051122188568,
+ 0.00991673581302166,
+ 0.33753031492233276,
+ -0.8686320185661316,
+ -0.38862550258636475,
+ 0.18885909020900726,
+ 0.2196504920721054,
+ 0.06935793161392212,
+ -0.21568086743354797,
+ 0.04005394130945206
+ ],
+ [
+ -0.12052804976701736,
+ 0.15113531053066254,
+ -0.2258468121290207,
+ -0.14269405603408813,
+ -0.007194845471531153,
+ 0.0751257836818695,
+ 0.08895590901374817,
+ -0.3100498616695404,
+ -0.22949354350566864,
+ 0.3293784558773041,
+ -0.12956123054027557,
+ -0.2043842077255249,
+ -0.1533811092376709
+ ],
+ [
+ -0.49806979298591614,
+ -0.04830557107925415,
+ 0.1700863391160965,
+ 0.418049693107605,
+ 0.3638938367366791,
+ 0.3594074249267578,
+ 0.39813557267189026,
+ -0.09734770655632019,
+ 0.23351074755191803,
+ 0.13417662680149078,
+ 0.08594613522291183,
+ 0.4296848177909851,
+ -0.07181321829557419
+ ],
+ [
+ 0.08223146200180054,
+ -0.0018819124670699239,
+ -0.26730579137802124,
+ -0.20485271513462067,
+ -0.012915043160319328,
+ 0.28456470370292664,
+ 0.13464391231536865,
+ -0.2727796137332916,
+ 0.15094691514968872,
+ -0.3096568286418915,
+ -0.4623531401157379,
+ -0.05994802713394165,
+ -0.44913995265960693
+ ],
+ [
+ 0.09303081035614014,
+ 0.12237520515918732,
+ 0.012606668286025524,
+ 0.3872867226600647,
+ 0.10020188242197037,
+ -0.02615727111697197,
+ -0.2934131622314453,
+ 0.4300881028175354,
+ 0.06807950139045715,
+ -0.1847943365573883,
+ -0.2719053030014038,
+ -0.06416849792003632,
+ -0.17496007680892944
+ ],
+ [
+ 0.10023966431617737,
+ -0.22861520946025848,
+ -0.3516126275062561,
+ -0.5764127373695374,
+ -0.44583749771118164,
+ -0.07259082794189453,
+ 0.35537412762641907,
+ 0.3627690374851227,
+ -0.15680935978889465,
+ -0.07226448506116867,
+ -0.13952721655368805,
+ -0.07210751622915268,
+ 0.23389209806919098
+ ],
+ [
+ -0.30529338121414185,
+ -0.06843209266662598,
+ -0.29780495166778564,
+ -0.9098109006881714,
+ -0.09131325781345367,
+ -0.3501591384410858,
+ -0.7427487373352051,
+ -0.1393917202949524,
+ 0.08865808695554733,
+ -0.18189974129199982,
+ -0.0876726433634758,
+ 0.14123141765594482,
+ 0.13371805846691132
+ ],
+ [
+ 0.4503017067909241,
+ 0.16772980988025665,
+ -0.37819141149520874,
+ -0.44360822439193726,
+ 0.060817278921604156,
+ 0.32554227113723755,
+ 0.35835281014442444,
+ 0.01980886608362198,
+ 0.20961534976959229,
+ 0.09152323007583618,
+ 0.36215516924858093,
+ -0.2382376343011856,
+ 0.029010865837335587
+ ],
+ [
+ 0.1671791672706604,
+ -0.025726061314344406,
+ 0.46037933230400085,
+ 0.33599135279655457,
+ -0.3053950369358063,
+ -0.21956385672092438,
+ 0.018729867413640022,
+ 0.008232119493186474,
+ 0.19710946083068848,
+ -0.05239027366042137,
+ -0.11997734010219574,
+ -0.28433626890182495,
+ -0.05396251007914543
+ ],
+ [
+ -0.08888962119817734,
+ -0.0074840327724814415,
+ 0.0010366961359977722,
+ 0.16012191772460938,
+ -0.4859410524368286,
+ -0.004400375299155712,
+ -0.25691479444503784,
+ -0.2501823306083679,
+ -0.037692420184612274,
+ 0.21454042196273804,
+ -0.06574186682701111,
+ 0.028364578261971474,
+ 0.10614991933107376
+ ],
+ [
+ -0.19984053075313568,
+ 0.3999255895614624,
+ 0.3859013020992279,
+ -0.008763164281845093,
+ 0.05337761715054512,
+ -0.05795661360025406,
+ 0.19042441248893738,
+ -0.3980652391910553,
+ 0.2606085240840912,
+ -0.36224454641342163,
+ -0.13887424767017365,
+ -0.01993805356323719,
+ 0.25798115134239197
+ ],
+ [
+ -0.18213874101638794,
+ 0.3282216787338257,
+ -0.5462505221366882,
+ -0.1092725321650505,
+ -0.6331356167793274,
+ 0.12781599164009094,
+ -0.09713553637266159,
+ 0.3483908474445343,
+ 0.11978042870759964,
+ -0.1137649416923523,
+ -0.12099278718233109,
+ 0.024691687896847725,
+ -0.04209648817777634
+ ],
+ [
+ 0.5497441291809082,
+ -0.0014693968696519732,
+ 0.2241649627685547,
+ -0.4881584048271179,
+ 0.06641259044408798,
+ -0.3958529233932495,
+ 0.4216475188732147,
+ 0.05082586780190468,
+ 0.20942124724388123,
+ 0.27624326944351196,
+ 0.02658577263355255,
+ -0.1346961259841919,
+ -0.02302182838320732
+ ],
+ [
+ -0.3392588198184967,
+ 0.20843234658241272,
+ 0.03391489386558533,
+ -0.3654923737049103,
+ -0.11971007287502289,
+ 0.03183070942759514,
+ 0.19257013499736786,
+ 0.18359732627868652,
+ 0.4768144190311432,
+ -0.22112081944942474,
+ 0.24759984016418457,
+ -0.35773754119873047,
+ -0.04972255229949951
+ ],
+ [
+ 0.1251971572637558,
+ -0.13569964468479156,
+ 0.4806353449821472,
+ -0.0601363442838192,
+ 0.23355363309383392,
+ 0.10462657362222672,
+ -0.8310760855674744,
+ 0.11379008740186691,
+ -0.14354120194911957,
+ 0.2514714002609253,
+ -0.1564786732196808,
+ -0.28444764018058777,
+ 0.10283307731151581
+ ],
+ [
+ -0.10372496396303177,
+ 0.01423429325222969,
+ 0.4853004217147827,
+ -0.06958960741758347,
+ -0.46353626251220703,
+ -0.0851714089512825,
+ 0.36282333731651306,
+ 0.31007006764411926,
+ 0.2311960607767105,
+ -0.4897943437099457,
+ -0.2712634801864624,
+ 0.008577444590628147,
+ -0.4192871153354645
+ ],
+ [
+ 0.21138827502727509,
+ -0.38202965259552,
+ 0.3968730866909027,
+ 0.18384063243865967,
+ -0.06147631257772446,
+ -0.6775612235069275,
+ -0.07260699570178986,
+ 0.2006090134382248,
+ 0.3689287602901459,
+ -0.08281159400939941,
+ 0.30175113677978516,
+ 0.11554694175720215,
+ 0.005002783611416817
+ ],
+ [
+ 0.002080874750390649,
+ 0.27095964550971985,
+ -0.05258764326572418,
+ 0.130062535405159,
+ -0.0028593065217137337,
+ 0.4235307276248932,
+ 0.13979874551296234,
+ 0.2026497721672058,
+ 0.10380033403635025,
+ -0.042964424937963486,
+ -0.0009023332968354225,
+ -0.2256675362586975,
+ 0.11393173038959503
+ ],
+ [
+ -0.061181627213954926,
+ -0.2582927644252777,
+ 0.31414633989334106,
+ 0.1496669501066208,
+ -0.0485113151371479,
+ 0.5886037945747375,
+ -0.04424503818154335,
+ 0.7054523229598999,
+ 0.18600822985172272,
+ 0.0029492543544620275,
+ 0.24034881591796875,
+ -0.09117217361927032,
+ -0.1324344426393509
+ ],
+ [
+ -0.24351762235164642,
+ -0.10972386598587036,
+ 0.1460368037223816,
+ 0.2663494348526001,
+ 0.1085638701915741,
+ 0.2671543061733246,
+ -0.2784324884414673,
+ -0.15602554380893707,
+ 0.21003027260303497,
+ -0.08113177120685577,
+ -0.12597565352916718,
+ -0.2952854037284851,
+ -0.28854620456695557
+ ],
+ [
+ 0.05862046033143997,
+ -0.05087459459900856,
+ -0.010610814206302166,
+ -0.11003550887107849,
+ 0.03449758514761925,
+ -0.24074164032936096,
+ 0.039885833859443665,
+ 0.2177591174840927,
+ -0.47024598717689514,
+ -0.34501907229423523,
+ -0.46926116943359375,
+ -0.20928184688091278,
+ 0.008205903694033623
+ ],
+ [
+ -0.17373758554458618,
+ 0.12019117176532745,
+ 0.0429859459400177,
+ -0.42440903186798096,
+ -0.0805688351392746,
+ -0.148147314786911,
+ -0.5859450101852417,
+ 0.05209624022245407,
+ 0.031402524560689926,
+ -0.1676451563835144,
+ 0.30912086367607117,
+ 0.27882272005081177,
+ -0.38265812397003174
+ ],
+ [
+ -0.3918400704860687,
+ -0.2818326950073242,
+ -0.019607387483119965,
+ -0.38601183891296387,
+ -0.25343936681747437,
+ 0.10142719745635986,
+ 0.5019767880439758,
+ 0.014465565793216228,
+ -0.25335201621055603,
+ 0.13931375741958618,
+ -0.04524105787277222,
+ 0.1716393381357193,
+ -0.02344362623989582
+ ],
+ [
+ -0.2799905836582184,
+ -0.15262730419635773,
+ 0.1665252447128296,
+ -0.1660282164812088,
+ 0.2298835664987564,
+ 0.3248575031757355,
+ 0.1524488925933838,
+ -0.00577168446034193,
+ -0.07428950816392899,
+ -0.17003528773784637,
+ 0.2906138598918915,
+ -0.25770461559295654,
+ -0.10956588387489319
+ ],
+ [
+ -0.09922421723604202,
+ 0.24231721460819244,
+ 0.033530302345752716,
+ -0.1840294897556305,
+ -0.14863182604312897,
+ -0.3239496350288391,
+ -0.2615140378475189,
+ 0.06989920884370804,
+ -0.471751868724823,
+ -0.3283047378063202,
+ 0.02946913056075573,
+ -0.136993408203125,
+ -0.06648393720388412
+ ],
+ [
+ 0.21499907970428467,
+ 0.03529290109872818,
+ -0.08019367605447769,
+ 0.25295111536979675,
+ -0.2972573935985565,
+ -0.6035439968109131,
+ -0.023684166371822357,
+ 0.29705801606178284,
+ 0.34756386280059814,
+ 0.20807844400405884,
+ 0.3178033232688904,
+ 0.02867848612368107,
+ -0.3608260452747345
+ ],
+ [
+ -0.08934739977121353,
+ -0.04203595966100693,
+ 0.5485541820526123,
+ -0.01818658597767353,
+ -0.5079426765441895,
+ -0.005266811698675156,
+ 0.40319061279296875,
+ -0.016706913709640503,
+ 0.06470813602209091,
+ 0.1396273672580719,
+ 0.026197118684649467,
+ -0.07552863657474518,
+ -0.28042691946029663
+ ],
+ [
+ -0.24888604879379272,
+ 0.3297758102416992,
+ -0.3071618378162384,
+ -0.0316467359662056,
+ 0.1978953629732132,
+ 0.3074512481689453,
+ 0.1256120502948761,
+ 0.27231618762016296,
+ -0.10071903467178345,
+ 0.06435053050518036,
+ -0.38230153918266296,
+ 0.17152005434036255,
+ 0.007021758705377579
+ ],
+ [
+ -0.06701122224330902,
+ -0.2750074863433838,
+ -0.4473819434642792,
+ -0.12073979526758194,
+ -0.007767376024276018,
+ 0.030878812074661255,
+ 0.2267475724220276,
+ -0.4004344642162323,
+ 0.3063676655292511,
+ -0.3240155875682831,
+ 0.13530080020427704,
+ -0.04287036508321762,
+ 0.05107332020998001
+ ],
+ [
+ -0.46750450134277344,
+ 0.16815143823623657,
+ 0.32987233996391296,
+ -0.06962510198354721,
+ 0.09750789403915405,
+ 0.047996725887060165,
+ 0.05034244805574417,
+ -0.1954888552427292,
+ -0.22761309146881104,
+ 0.1371261328458786,
+ -0.08804171532392502,
+ 0.06251535564661026,
+ 0.0341489277780056
+ ],
+ [
+ 0.09755714982748032,
+ 0.050311241298913956,
+ 0.5460689663887024,
+ -0.42048707604408264,
+ -0.11051499843597412,
+ -0.5397922396659851,
+ -0.08603452146053314,
+ -0.007517437916249037,
+ 0.08747653663158417,
+ 0.10564997792243958,
+ 0.21647235751152039,
+ 0.06287024170160294,
+ -0.032532304525375366
+ ],
+ [
+ 0.6455535292625427,
+ -0.21332912147045135,
+ -0.5545065402984619,
+ 0.19560132920742035,
+ -0.0995100736618042,
+ 0.3261417746543884,
+ 0.17067904770374298,
+ -0.04307596758008003,
+ 0.1488419622182846,
+ 0.3426224887371063,
+ 0.2755790054798126,
+ 0.006430555135011673,
+ -0.23489603400230408
+ ],
+ [
+ -0.15865539014339447,
+ 0.20476694405078888,
+ 0.08771807700395584,
+ 0.06349878013134003,
+ 0.10917392373085022,
+ 0.35466164350509644,
+ 0.03037361428141594,
+ -0.14445681869983673,
+ -0.4520297348499298,
+ -0.4569331705570221,
+ -0.14660608768463135,
+ 0.002050685463473201,
+ -0.1341574490070343
+ ],
+ [
+ 0.15667667984962463,
+ -0.07297471165657043,
+ -0.2468172162771225,
+ 0.23662665486335754,
+ 0.21779346466064453,
+ -0.39004045724868774,
+ -0.3326071798801422,
+ 0.019281471148133278,
+ 0.2276054173707962,
+ 0.08268521726131439,
+ -0.004261565860360861,
+ 0.13863730430603027,
+ 0.2932063937187195
+ ],
+ [
+ -0.23732174932956696,
+ 0.17523734271526337,
+ 0.16314567625522614,
+ -0.26516351103782654,
+ 0.09924314171075821,
+ -0.3351919949054718,
+ 0.3986639678478241,
+ 0.035489097237586975,
+ -0.17189034819602966,
+ -0.2672170102596283,
+ 0.24250206351280212,
+ 0.2463962435722351,
+ -0.06627291440963745
+ ],
+ [
+ -0.17010390758514404,
+ -0.016220485791563988,
+ -0.4636819064617157,
+ 0.18988023698329926,
+ -0.44871529936790466,
+ 0.2544304132461548,
+ 0.08711282163858414,
+ -0.00048645163769833744,
+ 0.23620043694972992,
+ -0.16803961992263794,
+ 0.21301205456256866,
+ 0.15039919316768646,
+ 0.2291892021894455
+ ],
+ [
+ 0.14537300169467926,
+ 0.09081799536943436,
+ -0.3272501528263092,
+ -0.02106560207903385,
+ 0.12440982460975647,
+ -0.44731810688972473,
+ -0.06430705636739731,
+ -0.02917785383760929,
+ 0.3398036062717438,
+ 0.19899587333202362,
+ -0.06645840406417847,
+ 0.21473471820354462,
+ 0.16143213212490082
+ ],
+ [
+ -0.25066161155700684,
+ -0.47398641705513,
+ -0.2939445972442627,
+ -0.02203419804573059,
+ -0.033632926642894745,
+ -0.01639193668961525,
+ 0.1068260446190834,
+ 0.019428517669439316,
+ 0.21907247602939606,
+ 0.20629872381687164,
+ -0.2705807685852051,
+ -0.07170672714710236,
+ 0.11179506033658981
+ ],
+ [
+ 0.41125601530075073,
+ 0.2971354126930237,
+ -0.16849102079868317,
+ 0.3532737195491791,
+ 0.2555796504020691,
+ 0.19581814110279083,
+ -0.08383610844612122,
+ -0.017013592645525932,
+ -0.432533860206604,
+ 0.025904299691319466,
+ 0.2505236864089966,
+ -0.04781761392951012,
+ -0.02294793538749218
+ ],
+ [
+ 0.1652211993932724,
+ 0.03988897427916527,
+ 0.04730714485049248,
+ 0.253953218460083,
+ 0.337531715631485,
+ -0.443236380815506,
+ 0.08540553599596024,
+ -0.5470725893974304,
+ 0.016836510971188545,
+ -0.42600706219673157,
+ -0.2048584520816803,
+ 0.02917277254164219,
+ 0.3407105505466461
+ ],
+ [
+ -0.3491149842739105,
+ 0.11713100969791412,
+ 0.0007417536107823253,
+ -0.04195642098784447,
+ 0.07632623612880707,
+ 0.4266873598098755,
+ 0.2728149890899658,
+ 0.0772416889667511,
+ 0.2699781358242035,
+ 0.0138264624401927,
+ 0.37652042508125305,
+ -0.08127383887767792,
+ -0.4270368814468384
+ ],
+ [
+ -0.18139664828777313,
+ -0.03625515475869179,
+ 0.06310547888278961,
+ 0.3512726426124573,
+ 0.09623705595731735,
+ -0.704629123210907,
+ 0.23323501646518707,
+ -0.011263130232691765,
+ -0.13306908309459686,
+ -0.1254596710205078,
+ -0.2687686085700989,
+ -0.08939646929502487,
+ 0.12440017610788345
+ ],
+ [
+ -0.3647765815258026,
+ -0.010604667477309704,
+ -0.21224327385425568,
+ 0.22111843526363373,
+ 0.18880735337734222,
+ -0.25782427191734314,
+ 0.061157021671533585,
+ -0.375694215297699,
+ 0.28101179003715515,
+ -0.05660352483391762,
+ -0.1162019744515419,
+ 0.13459806144237518,
+ -0.010806424543261528
+ ],
+ [
+ -0.29103779792785645,
+ -0.051839955151081085,
+ 0.4144618511199951,
+ -0.0376129113137722,
+ 0.1778261661529541,
+ -0.18882791697978973,
+ 0.08701316267251968,
+ 0.10776394605636597,
+ -0.17684288322925568,
+ -0.3458026945590973,
+ 0.02329202927649021,
+ 0.07106459885835648,
+ 0.0950731411576271
+ ],
+ [
+ 0.1390323042869568,
+ -0.23956452310085297,
+ -0.5130435228347778,
+ -0.17717060446739197,
+ 0.2641371488571167,
+ 0.4788528084754944,
+ -0.0034938743337988853,
+ -0.27584993839263916,
+ 0.05254009738564491,
+ 0.022839419543743134,
+ 0.13870586454868317,
+ -0.08523643761873245,
+ 0.124752476811409
+ ],
+ [
+ -0.3572181463241577,
+ 0.029650887474417686,
+ -0.09930124878883362,
+ 0.31546223163604736,
+ -0.1751370131969452,
+ 0.1705775409936905,
+ -0.2079431563615799,
+ -0.17675724625587463,
+ -0.6910910606384277,
+ -0.17347437143325806,
+ 0.20725809037685394,
+ -0.0918068066239357,
+ -0.0344637855887413
+ ],
+ [
+ -0.20070190727710724,
+ -0.340415894985199,
+ -0.12730151414871216,
+ -0.8188026547431946,
+ -0.055193398147821426,
+ -0.2129935771226883,
+ -0.02483142912387848,
+ -0.2894546687602997,
+ -0.08048653602600098,
+ 0.07144548743963242,
+ 0.39024782180786133,
+ 0.015637502074241638,
+ 0.03475908190011978
+ ],
+ [
+ -0.18702059984207153,
+ -0.30298954248428345,
+ -0.1267576813697815,
+ 0.09775310009717941,
+ -0.18700116872787476,
+ 0.0017182804876938462,
+ -0.005887078586965799,
+ 0.008853036910295486,
+ -0.14848875999450684,
+ 0.2002364546060562,
+ -0.11037757247686386,
+ -0.1156177669763565,
+ -0.26102134585380554
+ ],
+ [
+ -0.15566055476665497,
+ 0.03335363045334816,
+ -0.29146015644073486,
+ -0.08010867238044739,
+ 0.1009998545050621,
+ 0.39260533452033997,
+ 0.12639951705932617,
+ -0.054133277386426926,
+ -0.18723736703395844,
+ 0.07253473252058029,
+ 0.07900170236825943,
+ -0.14228202402591705,
+ -0.23021511733531952
+ ],
+ [
+ -0.2746272087097168,
+ -0.12257865816354752,
+ -0.27903813123703003,
+ 0.27374038100242615,
+ 0.37847673892974854,
+ -0.3476799428462982,
+ 0.12571293115615845,
+ 0.08535917103290558,
+ 0.06525271385908127,
+ -0.15264751017093658,
+ 0.1868678331375122,
+ 0.19229933619499207,
+ -0.07252367585897446
+ ],
+ [
+ -0.14401091635227203,
+ -0.018945656716823578,
+ 0.01930980756878853,
+ -0.1692747175693512,
+ 0.29491451382637024,
+ -0.39945587515830994,
+ -0.4657893180847168,
+ 0.25520092248916626,
+ 0.15174074470996857,
+ -0.007469676434993744,
+ 0.21958154439926147,
+ -0.05757985636591911,
+ 0.15635746717453003
+ ],
+ [
+ -0.08630824834108353,
+ 0.03445489704608917,
+ -0.1587214320898056,
+ -0.29107725620269775,
+ -0.41421937942504883,
+ -0.03159508481621742,
+ 0.383916974067688,
+ 0.15776893496513367,
+ -0.723247230052948,
+ -0.4182873070240021,
+ -0.07698579132556915,
+ -0.3728782534599304,
+ -0.19663608074188232
+ ],
+ [
+ -0.003848988562822342,
+ -0.07503966242074966,
+ -0.19928322732448578,
+ -0.010966913774609566,
+ 0.2619953155517578,
+ 0.2057601511478424,
+ 0.39855146408081055,
+ -0.18244194984436035,
+ 0.004585072863847017,
+ -0.19169408082962036,
+ -0.1245870515704155,
+ 0.04967397078871727,
+ 0.07290806621313095
+ ],
+ [
+ 0.35430967807769775,
+ -0.3794298470020294,
+ 0.38995155692100525,
+ -0.3296014964580536,
+ 0.14668290317058563,
+ 0.2387242466211319,
+ 0.2088487595319748,
+ -0.34669339656829834,
+ 0.18535639345645905,
+ 0.2890818417072296,
+ 0.08807805180549622,
+ -0.025784548372030258,
+ 0.2272142767906189
+ ],
+ [
+ 0.007772244047373533,
+ 0.367416113615036,
+ 0.5523821115493774,
+ 0.031086372211575508,
+ 0.4815885126590729,
+ -0.04104354605078697,
+ 0.301297664642334,
+ 0.12076990306377411,
+ -0.003298743162304163,
+ 0.11882071942090988,
+ 0.22718319296836853,
+ 0.029434815049171448,
+ 0.09854426234960556
+ ],
+ [
+ -0.35811614990234375,
+ -0.0029762613121420145,
+ 0.11649613827466965,
+ 0.181138813495636,
+ 0.05056029185652733,
+ -0.5606780052185059,
+ -0.13362886011600494,
+ -0.3810370862483978,
+ -0.5162398219108582,
+ -0.2884252965450287,
+ -0.2629288136959076,
+ 0.21195419132709503,
+ -0.16714325547218323
+ ],
+ [
+ 0.2704832851886749,
+ 0.17021799087524414,
+ -0.05895324796438217,
+ -0.3384433686733246,
+ -0.3909049928188324,
+ 0.38553494215011597,
+ 0.01870807074010372,
+ -0.1617358922958374,
+ 0.18386588990688324,
+ -0.0516870841383934,
+ -0.28463879227638245,
+ 0.02212064154446125,
+ 0.08001381903886795
+ ],
+ [
+ 0.18656830489635468,
+ 0.12879183888435364,
+ -0.23685885965824127,
+ 0.26886171102523804,
+ 0.056689467281103134,
+ 0.6753718256950378,
+ -0.29059427976608276,
+ 0.2333647906780243,
+ -0.5413393974304199,
+ 0.006537044420838356,
+ 0.02271474525332451,
+ -0.33299899101257324,
+ -0.004220182541757822
+ ],
+ [
+ 0.16717033088207245,
+ 0.03256445750594139,
+ 0.052902307361364365,
+ -0.377789169549942,
+ 0.2971380352973938,
+ 0.39744600653648376,
+ 0.10926368832588196,
+ 0.10302362591028214,
+ 0.29225292801856995,
+ -0.09506676346063614,
+ 0.23629330098628998,
+ -0.12180318683385849,
+ -0.36593934893608093
+ ],
+ [
+ -0.13522948324680328,
+ -0.2980266511440277,
+ 0.35451021790504456,
+ 0.3378157317638397,
+ -0.13947799801826477,
+ -0.2996511459350586,
+ -0.0011742900824174285,
+ 0.32273370027542114,
+ 0.21668893098831177,
+ 0.13573935627937317,
+ 0.02383076772093773,
+ -0.19183333218097687,
+ 0.315691739320755
+ ],
+ [
+ 0.6778576970100403,
+ -0.04117833077907562,
+ 0.10995204746723175,
+ -0.3809323310852051,
+ 0.2231072336435318,
+ -0.1827763319015503,
+ -0.3075316548347473,
+ 0.08501533418893814,
+ -0.027295786887407303,
+ -0.37125441431999207,
+ -0.1212998703122139,
+ -0.10183098912239075,
+ -0.21415814757347107
+ ],
+ [
+ -0.0762210413813591,
+ 0.09954733401536942,
+ -0.15605054795742035,
+ 0.22454659640789032,
+ 0.11856045573949814,
+ 0.43652135133743286,
+ -0.6064560413360596,
+ -0.36591899394989014,
+ -0.1464727520942688,
+ 0.029258253052830696,
+ 0.16411681473255157,
+ 0.11690740287303925,
+ -0.0962761715054512
+ ],
+ [
+ 0.199836865067482,
+ 0.22389492392539978,
+ -0.3283970355987549,
+ 0.138694167137146,
+ -0.20468315482139587,
+ -0.33403313159942627,
+ 0.1508159339427948,
+ -0.5105782151222229,
+ 0.12724126875400543,
+ -0.6165580749511719,
+ -0.21978545188903809,
+ 0.1782406121492386,
+ -0.23975792527198792
+ ],
+ [
+ -0.6032638549804688,
+ -0.08001580089330673,
+ 0.2054527848958969,
+ 0.13716137409210205,
+ 0.22460231184959412,
+ 0.0669151246547699,
+ -0.22342315316200256,
+ -0.21532557904720306,
+ 0.1287473440170288,
+ 0.2931123971939087,
+ 0.11478902399539948,
+ -0.17180760204792023,
+ 0.12911562621593475
+ ],
+ [
+ 0.30323949456214905,
+ -0.19083261489868164,
+ -0.2938980758190155,
+ 0.11518747359514236,
+ 0.19093647599220276,
+ -0.3192421495914459,
+ -0.10780483484268188,
+ -0.009294162504374981,
+ 0.2394648641347885,
+ -0.2130894511938095,
+ -0.05057841166853905,
+ -0.3542744815349579,
+ 0.3232356309890747
+ ],
+ [
+ 0.08124428242444992,
+ -0.0520966537296772,
+ -0.305100679397583,
+ 0.12247081100940704,
+ 0.2345213145017624,
+ -0.1901734620332718,
+ -0.15933141112327576,
+ -0.42104876041412354,
+ 0.4137115776538849,
+ 0.09924782812595367,
+ -0.13499872386455536,
+ 0.08106622844934464,
+ 0.0781460553407669
+ ],
+ [
+ 0.15870879590511322,
+ 0.09990561008453369,
+ 0.27799907326698303,
+ 0.2629215717315674,
+ 0.13102057576179504,
+ -0.2877577543258667,
+ 0.40693390369415283,
+ -0.48053330183029175,
+ 0.2045319676399231,
+ -0.016775695607066154,
+ 0.18923497200012207,
+ 0.026728512719273567,
+ -0.22340798377990723
+ ],
+ [
+ 0.03815097734332085,
+ 0.006906353402882814,
+ -0.7048632502555847,
+ 0.18865975737571716,
+ 0.43252676725387573,
+ 0.10937977582216263,
+ -0.17060090601444244,
+ 0.10367278009653091,
+ 0.3629976212978363,
+ 0.10823354125022888,
+ 0.13696011900901794,
+ -0.12976552546024323,
+ 0.13773807883262634
+ ],
+ [
+ 0.081364206969738,
+ 0.014384191483259201,
+ -0.2249748408794403,
+ 0.237743079662323,
+ 0.16067472100257874,
+ 0.07851991057395935,
+ -0.25540047883987427,
+ 0.29653051495552063,
+ -0.33306562900543213,
+ 0.0682794377207756,
+ 0.2870417833328247,
+ 0.07474291324615479,
+ -0.3287220299243927
+ ],
+ [
+ 0.07060158252716064,
+ -0.024512024596333504,
+ -0.03694286197423935,
+ 0.42087429761886597,
+ -0.18074922263622284,
+ 0.11496856063604355,
+ -0.16152912378311157,
+ 0.0698959156870842,
+ -0.4579349458217621,
+ -0.2639523148536682,
+ -0.009549521841108799,
+ 0.06875064224004745,
+ 0.057391270995140076
+ ],
+ [
+ 0.23166728019714355,
+ 0.007819642312824726,
+ -0.39796069264411926,
+ -0.21911300718784332,
+ -0.5087413787841797,
+ -0.12054325640201569,
+ -0.7190596461296082,
+ 0.16286888718605042,
+ 0.46715089678764343,
+ 0.3178914785385132,
+ 0.31097346544265747,
+ 0.07557210326194763,
+ -0.233867347240448
+ ],
+ [
+ 0.5317090153694153,
+ 0.0028773273807018995,
+ -0.13949105143547058,
+ 0.018030831590294838,
+ 0.33018386363983154,
+ -0.09435267746448517,
+ 0.08993704617023468,
+ 0.20230573415756226,
+ 0.08943954855203629,
+ -0.5996811985969543,
+ -0.2202225923538208,
+ 0.12224872410297394,
+ -0.19368217885494232
+ ],
+ [
+ 0.45899030566215515,
+ 0.046330150216817856,
+ 0.4984212815761566,
+ -0.02563645876944065,
+ 0.23955535888671875,
+ 0.3887278139591217,
+ 0.07934596389532089,
+ 0.15366822481155396,
+ 0.0895312950015068,
+ -0.02693980745971203,
+ -0.024568097665905952,
+ -0.03571607545018196,
+ -0.045017536729574203
+ ],
+ [
+ -0.10204503685235977,
+ -0.05773258954286575,
+ -0.3882671296596527,
+ -0.21408991515636444,
+ 0.2925959527492523,
+ 0.21455040574073792,
+ -0.09583521634340286,
+ 0.2944086790084839,
+ -0.09217576682567596,
+ 0.11946061253547668,
+ -0.09293468296527863,
+ -0.007104878313839436,
+ -0.2693921625614166
+ ],
+ [
+ -0.18011142313480377,
+ -0.2118837982416153,
+ 0.0850146934390068,
+ 0.1694103628396988,
+ -0.32840582728385925,
+ 0.14944404363632202,
+ 0.23146238923072815,
+ 0.20516279339790344,
+ 0.42950439453125,
+ -0.06966119259595871,
+ -0.0071711004711687565,
+ -0.10337621718645096,
+ 0.31259724497795105
+ ],
+ [
+ 0.07168317586183548,
+ 0.21827077865600586,
+ -0.27759888768196106,
+ 0.29261383414268494,
+ -0.06325048208236694,
+ -0.5041850209236145,
+ -0.05989640951156616,
+ -0.5404871702194214,
+ -0.022050760686397552,
+ -0.29488927125930786,
+ 0.08027458935976028,
+ 0.2240152806043625,
+ 0.25452467799186707
+ ],
+ [
+ 0.2295425683259964,
+ -0.01091746985912323,
+ -0.6873616576194763,
+ 0.14215250313282013,
+ 0.10926423221826553,
+ 0.39578527212142944,
+ 0.37126031517982483,
+ -0.3968247175216675,
+ 0.1312207579612732,
+ 0.36060577630996704,
+ -0.11749473959207535,
+ -0.14821843802928925,
+ -0.0017166062025353312
+ ],
+ [
+ -0.15426145493984222,
+ -0.09958052635192871,
+ -0.30049723386764526,
+ 0.3120000660419464,
+ 0.4002348482608795,
+ -0.2877107858657837,
+ 0.18284407258033752,
+ -0.19913774728775024,
+ -0.21860559284687042,
+ 0.18161757290363312,
+ -0.18319052457809448,
+ 0.19935055077075958,
+ -0.26109716296195984
+ ],
+ [
+ -0.1182982549071312,
+ -0.16623692214488983,
+ -0.5328167676925659,
+ 0.06709256768226624,
+ 0.3430011570453644,
+ 0.1386127769947052,
+ 0.19337624311447144,
+ -0.16799069941043854,
+ -0.08994141966104507,
+ 0.16045938432216644,
+ -0.08240030705928802,
+ 0.09082669764757156,
+ 0.07869929075241089
+ ],
+ [
+ 0.373100608587265,
+ 0.48242470622062683,
+ 0.08913648873567581,
+ 0.11254587024450302,
+ 0.2600317895412445,
+ 0.4537370502948761,
+ -0.011607207357883453,
+ -0.3495674431324005,
+ 0.11303351819515228,
+ 0.031104419380426407,
+ 0.00182831019628793,
+ -0.08544334024190903,
+ 0.06462124735116959
+ ],
+ [
+ -0.04729556664824486,
+ -0.46088406443595886,
+ -0.025429124012589455,
+ -0.01890188828110695,
+ -0.08289019018411636,
+ -0.22444570064544678,
+ 0.0013382409233599901,
+ -0.5519993901252747,
+ 0.26369428634643555,
+ -0.07250865548849106,
+ -0.03536079078912735,
+ 0.12147058546543121,
+ -0.2906624674797058
+ ],
+ [
+ 0.3772434592247009,
+ -0.2750411927700043,
+ -0.1991979479789734,
+ 0.07719862461090088,
+ 0.04119456931948662,
+ -0.0746307447552681,
+ 0.1634635031223297,
+ -0.1075339987874031,
+ 0.084819495677948,
+ 0.4463717043399811,
+ -0.24016119539737701,
+ -0.4854397475719452,
+ 0.28085842728614807
+ ],
+ [
+ -0.16955941915512085,
+ -0.03763536736369133,
+ -0.06554953753948212,
+ -0.09292160719633102,
+ 0.2598607540130615,
+ -0.005644072778522968,
+ 0.02511029876768589,
+ -0.09065071493387222,
+ 0.17232531309127808,
+ 0.1180548220872879,
+ 0.05640468746423721,
+ 0.003190274117514491,
+ 0.16484257578849792
+ ],
+ [
+ -0.19256524741649628,
+ -0.035885315388441086,
+ -0.23651671409606934,
+ 0.3579004108905792,
+ -0.26118576526641846,
+ 0.12682922184467316,
+ 0.10423010587692261,
+ 0.4358757436275482,
+ -0.14004173874855042,
+ 0.050905436277389526,
+ 0.30501025915145874,
+ -0.2547728717327118,
+ 0.02909197099506855
+ ],
+ [
+ -0.00884551927447319,
+ -0.21905195713043213,
+ -0.016784757375717163,
+ 0.3731747567653656,
+ 0.05382183939218521,
+ 0.4842839241027832,
+ -0.1682250052690506,
+ 0.04149759188294411,
+ 0.2835145890712738,
+ 0.1944265067577362,
+ -0.4236717224121094,
+ 0.1908518522977829,
+ -0.351588636636734
+ ],
+ [
+ 0.6380516290664673,
+ -0.023523081094026566,
+ -0.3044954836368561,
+ 0.2128516435623169,
+ 0.1512865275144577,
+ 0.40091660618782043,
+ 0.037681423127651215,
+ 0.14179585874080658,
+ -0.48863479495048523,
+ 0.04738679528236389,
+ 0.3187534213066101,
+ 0.00045700688497163355,
+ 0.014066076837480068
+ ],
+ [
+ 0.0046538542956113815,
+ 0.011670686304569244,
+ -0.37707990407943726,
+ 0.07988515496253967,
+ -0.18374578654766083,
+ 0.10665654391050339,
+ -0.8602948188781738,
+ -0.43007123470306396,
+ -0.20295551419258118,
+ -0.015174103900790215,
+ -0.1182069182395935,
+ 0.11701013147830963,
+ -0.2779524326324463
+ ],
+ [
+ 0.11691876500844955,
+ -0.2790720462799072,
+ 0.3339858949184418,
+ -0.17912739515304565,
+ -0.002426190534606576,
+ -0.01318464893847704,
+ -0.9231696128845215,
+ -0.2608726918697357,
+ 0.40690794587135315,
+ 0.26437997817993164,
+ 0.042692236602306366,
+ 0.052349288016557693,
+ 0.22482885420322418
+ ],
+ [
+ 0.2128976732492447,
+ 0.1569250524044037,
+ 0.2805536091327667,
+ -0.12567950785160065,
+ 0.0372452437877655,
+ -0.3785509765148163,
+ 0.0754832774400711,
+ 0.19418121874332428,
+ -0.6833413243293762,
+ -0.18037380278110504,
+ 0.23891323804855347,
+ 0.15983836352825165,
+ 0.2443924844264984
+ ],
+ [
+ -0.045922715216875076,
+ 0.11699707061052322,
+ 0.057824309915304184,
+ -0.08571387827396393,
+ 0.32767918705940247,
+ -0.29945218563079834,
+ 0.05165475234389305,
+ 0.11789916455745697,
+ 0.3142908811569214,
+ -0.011986806988716125,
+ 0.17400377988815308,
+ -0.3995846211910248,
+ -0.19427980482578278
+ ],
+ [
+ -0.004445775877684355,
+ 0.15081952512264252,
+ -0.4417363107204437,
+ 0.15362563729286194,
+ 0.21907241642475128,
+ -0.08657603710889816,
+ 0.21606825292110443,
+ 0.3533935546875,
+ 0.20068368315696716,
+ -0.24532738327980042,
+ 0.20568029582500458,
+ 0.03230249509215355,
+ -0.18857671320438385
+ ],
+ [
+ -0.5563863515853882,
+ 0.19991205632686615,
+ 0.7072317600250244,
+ -0.2047976851463318,
+ -0.07489289343357086,
+ 0.34304749965667725,
+ 0.3296198546886444,
+ 0.09766529500484467,
+ -0.0784999430179596,
+ -0.34556302428245544,
+ -0.09842559695243835,
+ 0.039142169058322906,
+ -0.021947449073195457
+ ],
+ [
+ -0.1367456018924713,
+ -0.0030623823404312134,
+ 0.057499416172504425,
+ -0.3996986746788025,
+ 0.2854032516479492,
+ -0.3701781928539276,
+ 0.21766968071460724,
+ -0.05653444305062294,
+ -0.23038651049137115,
+ -0.01095053181052208,
+ -0.17491167783737183,
+ 0.10995952039957047,
+ -0.0757833868265152
+ ],
+ [
+ -0.10128746926784515,
+ 0.10665752738714218,
+ 0.008848436176776886,
+ 0.07620900124311447,
+ 0.0059105996042490005,
+ 7.205065776361153e-05,
+ 0.3944801390171051,
+ 0.3251148462295532,
+ 0.23769496381282806,
+ -0.15892939269542694,
+ 0.07100225985050201,
+ -0.4332124888896942,
+ 0.010096431709825993
+ ],
+ [
+ -0.1768210083246231,
+ -0.18340276181697845,
+ 0.001623425050638616,
+ 0.20159699022769928,
+ -0.08927533030509949,
+ 0.6392431259155273,
+ -0.9325793385505676,
+ 0.25249183177948,
+ -0.24121147394180298,
+ 0.33376017212867737,
+ 0.4692442715167999,
+ 0.035955436527729034,
+ 0.08090293407440186
+ ],
+ [
+ -0.22564229369163513,
+ -0.2561354637145996,
+ -1.3654130697250366,
+ -0.15530513226985931,
+ -0.0026599070988595486,
+ 0.08762144297361374,
+ -0.38049525022506714,
+ 0.10087984055280685,
+ -0.09655912220478058,
+ -0.02611776441335678,
+ 0.012519799172878265,
+ 0.030432825908064842,
+ -0.09684382379055023
+ ],
+ [
+ 0.28824716806411743,
+ -0.21870803833007812,
+ -0.16924481093883514,
+ 0.46756282448768616,
+ -0.3193212151527405,
+ -0.20083653926849365,
+ -0.45283883810043335,
+ 0.4936756193637848,
+ -0.25036272406578064,
+ 0.1074955016374588,
+ 0.13981464505195618,
+ -0.07062017917633057,
+ 0.20453374087810516
+ ],
+ [
+ -0.37632426619529724,
+ 0.023242535069584846,
+ 0.403758704662323,
+ -0.5405698418617249,
+ -0.04872119426727295,
+ -0.1674855798482895,
+ -0.5529700517654419,
+ -0.3500245213508606,
+ -0.5704483389854431,
+ -0.014192325994372368,
+ -0.0592123307287693,
+ -0.11486945301294327,
+ -0.2126927375793457
+ ],
+ [
+ -0.20464110374450684,
+ -0.0850566029548645,
+ -0.029002338647842407,
+ 0.12800747156143188,
+ -0.6059226393699646,
+ 0.3300586938858032,
+ 0.28265616297721863,
+ -0.02119620144367218,
+ 0.3012149930000305,
+ -0.30299875140190125,
+ 0.09099925309419632,
+ 0.07387415319681168,
+ 0.11487554013729095
+ ],
+ [
+ 0.1986282914876938,
+ 0.19519412517547607,
+ -0.38607245683670044,
+ 0.3127345144748688,
+ 0.002946534426882863,
+ -0.4678138792514801,
+ -0.2860093116760254,
+ 0.09629431366920471,
+ 0.270903080701828,
+ -0.12366373091936111,
+ 0.12661738693714142,
+ -0.30580514669418335,
+ -0.3104628920555115
+ ],
+ [
+ -0.2955853044986725,
+ -0.3251827359199524,
+ -0.2509268820285797,
+ 0.07475117594003677,
+ -0.20850567519664764,
+ -0.44456949830055237,
+ 0.051270436495542526,
+ 0.018012693151831627,
+ 0.11225541681051254,
+ -0.1231650710105896,
+ -0.2772364616394043,
+ -0.22073239088058472,
+ -0.0653977021574974
+ ],
+ [
+ 0.1933528631925583,
+ -0.1599702686071396,
+ 0.3890591859817505,
+ 0.1769028753042221,
+ -0.1299305111169815,
+ 0.11517280340194702,
+ 0.21320852637290955,
+ -0.023867473006248474,
+ -0.08731769770383835,
+ -0.238845095038414,
+ -0.06022835522890091,
+ 0.20325517654418945,
+ 0.26722362637519836
+ ],
+ [
+ -0.34047064185142517,
+ -0.07236069440841675,
+ 0.06118741258978844,
+ 0.08961661905050278,
+ 0.17382913827896118,
+ 0.2728501558303833,
+ 0.25996580719947815,
+ -0.28523385524749756,
+ -0.447998970746994,
+ -0.16263441741466522,
+ 0.030397776514291763,
+ 0.07321569323539734,
+ 0.10687745362520218
+ ],
+ [
+ -0.32778340578079224,
+ -0.36357372999191284,
+ 0.10514234751462936,
+ 0.1822606474161148,
+ 0.026659611612558365,
+ -0.002128040883690119,
+ -0.16742902994155884,
+ 0.22414827346801758,
+ 0.34101632237434387,
+ -0.414081871509552,
+ -0.24726711213588715,
+ -0.1910814791917801,
+ -0.25300133228302
+ ],
+ [
+ 0.20284202694892883,
+ 0.22310879826545715,
+ -0.09175264835357666,
+ -0.40912482142448425,
+ -0.1802767962217331,
+ -0.2787109911441803,
+ -0.3064904510974884,
+ 0.22596676647663116,
+ -0.3635615408420563,
+ 0.2812367081642151,
+ 0.11356999725103378,
+ -0.318589448928833,
+ 0.08336939662694931
+ ],
+ [
+ 0.38195160031318665,
+ 0.03335738927125931,
+ -0.5335058569908142,
+ -0.03819908946752548,
+ -0.02460385486483574,
+ -0.3300994336605072,
+ 0.3992239832878113,
+ -0.07268156111240387,
+ 0.03751498460769653,
+ 0.17805716395378113,
+ -0.08026189357042313,
+ -0.3458326756954193,
+ -0.20366187393665314
+ ],
+ [
+ -0.46825602650642395,
+ -0.0029622504953294992,
+ -0.09496761858463287,
+ 0.1982409507036209,
+ 0.15728545188903809,
+ -0.2035212367773056,
+ 0.16241173446178436,
+ -0.38586297631263733,
+ 0.3763304650783539,
+ -0.03425220027565956,
+ -0.22369584441184998,
+ -0.31587332487106323,
+ -0.13464592397212982
+ ],
+ [
+ -0.13012930750846863,
+ 0.3396182954311371,
+ -0.4679093360900879,
+ -0.3572634756565094,
+ -0.19409683346748352,
+ 0.04419347643852234,
+ 0.24613319337368011,
+ 0.061356887221336365,
+ 0.4071618914604187,
+ 0.47669270634651184,
+ -0.09375584870576859,
+ -0.19679337739944458,
+ -0.44209086894989014
+ ]
+ ],
+ [
+ [
+ 0.018219739198684692,
+ -0.09646723419427872,
+ 0.07454709708690643,
+ 0.06161380931735039,
+ -0.006799010559916496,
+ 0.10184838622808456,
+ 0.08798973262310028,
+ -0.07850953191518784,
+ 0.011188327334821224,
+ 0.08524810522794724,
+ -0.1571773737668991,
+ 0.035052474588155746,
+ 0.1785498410463333,
+ 0.029873937368392944,
+ -0.08988912403583527,
+ 0.022495459765195847,
+ 0.03982220217585564,
+ 0.029116356745362282,
+ -0.08388350903987885,
+ -0.03617621585726738,
+ -0.02884429693222046,
+ -0.04017459228634834,
+ -0.017280157655477524,
+ 0.04433999955654144,
+ -0.02471611648797989,
+ 0.029065009206533432,
+ 0.013151707127690315,
+ 0.07672682404518127,
+ -0.02299288846552372,
+ -0.0760030522942543,
+ 0.03338173031806946,
+ -0.021944932639598846,
+ -0.0662168487906456,
+ -0.0046288142912089825,
+ -0.020774496719241142,
+ 0.16680222749710083,
+ -0.03899861127138138,
+ 0.05796864256262779,
+ 0.0340903140604496,
+ 0.049473755061626434,
+ -0.047948434948921204,
+ -0.1550675332546234,
+ 0.07000972330570221,
+ 0.07917586714029312,
+ 0.016673870384693146,
+ -0.009089440107345581,
+ 0.017897728830575943,
+ -0.015161716379225254,
+ 0.06361237168312073,
+ -0.062846340239048,
+ -0.07507970184087753,
+ 0.02215183526277542,
+ 0.0723285973072052,
+ 0.053254906088113785,
+ 0.026656638830900192,
+ -0.09317565709352493,
+ 0.11220590770244598,
+ 0.07024280726909637,
+ 0.0561104454100132,
+ 0.02861620858311653,
+ 0.03564126044511795,
+ -0.009296980686485767,
+ 0.0075655654072761536,
+ -0.009516087360680103,
+ -0.02917361631989479,
+ -0.21397820115089417,
+ 0.0018511217785999179,
+ 0.00492468848824501,
+ -0.01981751248240471,
+ -0.09233584254980087,
+ -0.18141627311706543,
+ 0.061435017734766006,
+ 0.010503634810447693,
+ 0.0050401524640619755,
+ -0.03528561443090439,
+ -0.0941401794552803,
+ 0.07366326451301575,
+ 0.0035352243576198816,
+ 0.05383983254432678,
+ -0.06497901678085327,
+ 0.08547446876764297,
+ 0.019188271835446358,
+ 0.013645362108945847,
+ -0.07891425490379333,
+ 0.10479230433702469,
+ 0.11281126737594604,
+ 0.04737356677651405,
+ 0.046065255999565125,
+ 0.007549292407929897,
+ 0.03802464157342911,
+ -0.048982586711645126,
+ -0.07231000810861588,
+ 0.05617180094122887,
+ -0.05134878680109978,
+ -0.06102363392710686,
+ 0.06286761909723282,
+ 0.10445437580347061,
+ -0.06788648664951324,
+ -8.455992792733014e-05,
+ -0.053546905517578125,
+ 0.0407492071390152,
+ -0.05465124920010567,
+ 0.0558830089867115,
+ -0.05688697472214699,
+ -0.05511736869812012,
+ 0.01887454278767109,
+ -0.036653291434049606,
+ -0.09590993076562881,
+ 0.08518277108669281,
+ 0.04751770943403244,
+ 0.00690359016880393,
+ 0.01838502660393715,
+ -0.0657363012433052,
+ 0.043211743235588074,
+ 0.09584445506334305,
+ -0.01736079715192318,
+ 0.005686406046152115,
+ -0.14709696173667908,
+ -0.027912955731153488,
+ 0.044494785368442535,
+ 0.04404277354478836,
+ -0.018893957138061523,
+ 0.031774066388607025,
+ -0.030790507793426514,
+ 0.10381884127855301,
+ 0.10012118518352509,
+ 0.04456346854567528,
+ -0.12345439940690994
+ ],
+ [
+ -0.04366224259138107,
+ -0.03988340497016907,
+ -0.027272675186395645,
+ -0.08578596264123917,
+ 0.09593483805656433,
+ 0.1438608467578888,
+ 0.22205762565135956,
+ -0.054564010351896286,
+ -0.029638443142175674,
+ 0.24980893731117249,
+ 0.2250930815935135,
+ 0.038504816591739655,
+ 0.02610793709754944,
+ 0.14048533141613007,
+ -0.013169611804187298,
+ 0.0033675716258585453,
+ 0.1559501588344574,
+ -0.08512993901968002,
+ -0.009641251526772976,
+ 0.04013749212026596,
+ -0.16436025500297546,
+ 0.02284420095384121,
+ 0.04611126706004143,
+ 0.011338652111589909,
+ -0.05414551869034767,
+ -0.0033125155605375767,
+ 0.055500030517578125,
+ 0.15653949975967407,
+ -0.051860034465789795,
+ 0.034047193825244904,
+ 0.09617786854505539,
+ 0.017718710005283356,
+ 0.1395457237958908,
+ 0.059239376336336136,
+ -0.08237612247467041,
+ 0.0016281215939670801,
+ -0.12236908078193665,
+ 0.05766136944293976,
+ 0.030708888545632362,
+ 0.0032188640907406807,
+ -0.1876683384180069,
+ 0.07252556830644608,
+ -0.05732478201389313,
+ 0.024640005081892014,
+ -0.2488022893667221,
+ -0.036899764090776443,
+ 0.08544021844863892,
+ 0.023594796657562256,
+ 0.12174620479345322,
+ -0.10455157607793808,
+ 0.07488745450973511,
+ -0.008201503194868565,
+ -0.5354313850402832,
+ -0.032505642622709274,
+ -0.1553194522857666,
+ 0.024152345955371857,
+ 0.020946798846125603,
+ 0.11037244647741318,
+ -0.08579467982053757,
+ 0.054161135107278824,
+ 0.054597996175289154,
+ -0.18702523410320282,
+ -0.06077027693390846,
+ -0.045753903687000275,
+ -0.06247496232390404,
+ -0.1746106743812561,
+ -0.01596141792833805,
+ -0.041279226541519165,
+ 0.026474345475435257,
+ -0.06815830618143082,
+ -0.07384060323238373,
+ -0.04557356610894203,
+ -0.02851514145731926,
+ -0.15558405220508575,
+ 0.032944124191999435,
+ -0.1305556744337082,
+ 0.15945951640605927,
+ -0.09210573881864548,
+ 0.045924678444862366,
+ -0.03189486265182495,
+ -0.016103772446513176,
+ -0.1000695675611496,
+ 0.08418722450733185,
+ 0.02808430790901184,
+ -0.018935440108180046,
+ -0.006368079222738743,
+ 0.1346205174922943,
+ 0.06244322657585144,
+ 0.10128394514322281,
+ -0.21042297780513763,
+ -0.011791245080530643,
+ 0.00697533180937171,
+ 0.047211967408657074,
+ 0.03484340012073517,
+ -0.020177500322461128,
+ 0.05033306032419205,
+ -0.08386674523353577,
+ -0.21777044236660004,
+ -0.03588562831282616,
+ -0.02458086423575878,
+ 0.04479387030005455,
+ -0.11563028395175934,
+ 0.014267588965594769,
+ 0.02016410417854786,
+ -0.07439658790826797,
+ -0.03553749620914459,
+ -0.17706096172332764,
+ -0.08134593069553375,
+ 0.09938134998083115,
+ -0.14681099355220795,
+ -0.172814279794693,
+ -0.07844581454992294,
+ -0.10121552646160126,
+ 0.06735233962535858,
+ 0.037241797894239426,
+ 0.15259318053722382,
+ -0.03785921633243561,
+ -0.11281542479991913,
+ 0.02455972693860531,
+ -0.05434728041291237,
+ 0.05339659005403519,
+ -0.01463327743113041,
+ -0.04604827240109444,
+ -0.04048222303390503,
+ 0.16280102729797363,
+ 0.12418854981660843,
+ 0.08864647150039673,
+ 0.07456153631210327
+ ],
+ [
+ -0.08777999877929688,
+ -0.08828102797269821,
+ 0.09394829720258713,
+ -0.044136788696050644,
+ -0.06294093281030655,
+ -0.08060112595558167,
+ 0.05393722280859947,
+ -0.07617608457803726,
+ 0.06506304442882538,
+ 0.05197449028491974,
+ -0.22411371767520905,
+ 0.046819448471069336,
+ 0.26677319407463074,
+ 0.09424933791160583,
+ 0.05660441890358925,
+ 0.08204120397567749,
+ -0.28375932574272156,
+ 0.09491997212171555,
+ -0.027609892189502716,
+ -0.07027342170476913,
+ -0.17479217052459717,
+ 0.30773741006851196,
+ -0.16301515698432922,
+ -0.12343518435955048,
+ 0.011471367441117764,
+ 0.12639306485652924,
+ -0.3234254717826843,
+ -0.02480117790400982,
+ -0.07915925234556198,
+ 0.14103731513023376,
+ 0.0663117840886116,
+ -0.12133550643920898,
+ 0.07859761267900467,
+ -0.06832479685544968,
+ 0.047317929565906525,
+ -0.18684375286102295,
+ 0.019010545685887337,
+ 0.07009278982877731,
+ 0.049190275371074677,
+ -0.3498014509677887,
+ -0.13270793855190277,
+ -0.2593308091163635,
+ 0.1141480877995491,
+ -0.1748884916305542,
+ -0.20433549582958221,
+ -0.027941307052969933,
+ 0.10660794377326965,
+ -0.04801894724369049,
+ -0.0168705265969038,
+ -0.1668137162923813,
+ -0.03204342722892761,
+ 0.08961070328950882,
+ -0.022071899846196175,
+ 0.0973498672246933,
+ 0.04838287830352783,
+ 0.025685787200927734,
+ -0.008137140423059464,
+ 0.1332472860813141,
+ 0.0861138254404068,
+ 0.07386302947998047,
+ 0.15232205390930176,
+ 0.15091367065906525,
+ 0.032322537153959274,
+ -0.04015224426984787,
+ 0.1709579974412918,
+ 0.37716659903526306,
+ 0.18268543481826782,
+ 0.1602870225906372,
+ 0.024307414889335632,
+ -0.4708167314529419,
+ 0.04431665316224098,
+ -0.03973490372300148,
+ -0.28667396306991577,
+ 0.07172611355781555,
+ -0.052345603704452515,
+ 0.13505011796951294,
+ -0.0028523753862828016,
+ 0.0018361147958785295,
+ -0.025408020243048668,
+ -0.044182341545820236,
+ 0.002621020656079054,
+ 0.10347174108028412,
+ -0.3277919888496399,
+ -0.0511430948972702,
+ -0.1834374964237213,
+ 0.03346710652112961,
+ -0.017552994191646576,
+ -0.15763753652572632,
+ -0.18161317706108093,
+ -0.028803296387195587,
+ 0.134186252951622,
+ -0.08387858420610428,
+ 0.07384360581636429,
+ -0.07357937097549438,
+ -0.0451325997710228,
+ 0.1873624175786972,
+ 0.13002994656562805,
+ 0.20409730076789856,
+ -0.28164854645729065,
+ -0.041622135788202286,
+ 0.011276671662926674,
+ 0.09881874173879623,
+ -0.1091432124376297,
+ -0.05511726438999176,
+ -0.06761851906776428,
+ -0.06233453005552292,
+ -0.002571213524788618,
+ 0.0007353940745815635,
+ 0.08992432057857513,
+ -0.02546185441315174,
+ 0.08591751754283905,
+ 0.03086784854531288,
+ -0.4728988707065582,
+ -0.16527283191680908,
+ 0.0025602495297789574,
+ 0.0685092955827713,
+ -0.01541915349662304,
+ 0.2594982385635376,
+ -0.0031214922200888395,
+ -0.04352348670363426,
+ -0.2147342562675476,
+ 0.14683598279953003,
+ -0.3219284415245056,
+ -0.5988808870315552,
+ -0.08926576375961304,
+ 0.049239370971918106,
+ -0.12583103775978088,
+ -0.054186515510082245
+ ],
+ [
+ 0.07710544764995575,
+ -0.18329750001430511,
+ 0.09492483735084534,
+ 0.07396245747804642,
+ 0.005324447527527809,
+ 0.08248968422412872,
+ -0.15271462500095367,
+ -0.22876857221126556,
+ -0.045491866767406464,
+ -0.0427100732922554,
+ 0.016563596203923225,
+ 0.09627670049667358,
+ -0.3218867778778076,
+ 0.20546002686023712,
+ 0.11841712146997452,
+ 0.11589130014181137,
+ -0.09981642663478851,
+ 0.04615166783332825,
+ -0.18844769895076752,
+ -0.2854122221469879,
+ 0.06752467900514603,
+ 0.08963949233293533,
+ -0.13537634909152985,
+ 0.05911797657608986,
+ 0.1287340670824051,
+ -0.03183428570628166,
+ -0.058367349207401276,
+ 0.1617414504289627,
+ 0.17339740693569183,
+ 0.10734125971794128,
+ -0.12121203541755676,
+ -0.14875103533267975,
+ 0.06654571741819382,
+ -0.05614486709237099,
+ 0.13991184532642365,
+ 0.01342823076993227,
+ 0.22406667470932007,
+ 0.023757832124829292,
+ 0.049936648458242416,
+ -0.010973641648888588,
+ -0.06290178000926971,
+ 0.11927430331707001,
+ -0.006864798720926046,
+ 0.0794132724404335,
+ 0.02207094430923462,
+ -0.030406678095459938,
+ 0.10549483448266983,
+ -0.043844159692525864,
+ -0.040650878101587296,
+ 0.000997487804852426,
+ 0.25994622707366943,
+ 0.16689202189445496,
+ -0.08382531255483627,
+ 0.08189453184604645,
+ -0.24978703260421753,
+ -0.009402989409863949,
+ 0.171400249004364,
+ 0.004062807187438011,
+ -0.052251726388931274,
+ -0.1314944475889206,
+ 0.06613542884588242,
+ -0.14117494225502014,
+ -0.0469946451485157,
+ 0.04849262163043022,
+ 0.051265522837638855,
+ 0.014989004470407963,
+ 0.04981909319758415,
+ -0.06804874539375305,
+ -0.09144828468561172,
+ -0.06569790095090866,
+ -0.03956082463264465,
+ -0.0069680605083703995,
+ -0.14746804535388947,
+ 0.08820489794015884,
+ -0.015624400228261948,
+ -0.2035723179578781,
+ 0.1816118061542511,
+ 0.07732156664133072,
+ 0.07195135951042175,
+ 0.10831501334905624,
+ 0.17344556748867035,
+ -0.010874085128307343,
+ -0.009266512468457222,
+ 0.009654657915234566,
+ 0.15002234280109406,
+ 0.0868125930428505,
+ -0.01889617182314396,
+ -0.1041441559791565,
+ 0.061954792588949203,
+ -0.017732758074998856,
+ -0.002066943095996976,
+ 0.08301135152578354,
+ 0.033814750611782074,
+ 0.12804098427295685,
+ 0.0940321758389473,
+ 0.05929211899638176,
+ 0.08111003786325455,
+ -0.06460170447826385,
+ -0.18669556081295013,
+ -0.02501339092850685,
+ 0.07367009669542313,
+ 0.19835789501667023,
+ 0.07208416610956192,
+ 0.06555461883544922,
+ 0.05209244042634964,
+ 0.12305328249931335,
+ 0.02143392339348793,
+ 0.21838442981243134,
+ 0.1600487381219864,
+ -0.11680774390697479,
+ 0.13360601663589478,
+ -0.08702053874731064,
+ -0.03975346311926842,
+ 0.020558465272188187,
+ 0.14914433658123016,
+ -0.22512729465961456,
+ 0.026435425505042076,
+ 0.02134077437222004,
+ -0.050070423632860184,
+ -0.16032899916172028,
+ -0.04838675633072853,
+ 0.05955909937620163,
+ -0.3921580910682678,
+ -0.2889035642147064,
+ -0.018992487341165543,
+ 0.1880977749824524,
+ -0.22202685475349426,
+ 0.12896431982517242
+ ],
+ [
+ -0.14982032775878906,
+ -0.0438121072947979,
+ 0.1618519425392151,
+ 0.06273909658193588,
+ -0.06122744455933571,
+ -0.08573876321315765,
+ -0.03334282711148262,
+ -0.06522249430418015,
+ 0.10430960357189178,
+ -0.19786617159843445,
+ 0.3869205117225647,
+ 0.10419587790966034,
+ -0.08232583850622177,
+ -0.045139115303754807,
+ -0.005762174259871244,
+ 0.01088549755513668,
+ 0.0731579065322876,
+ -0.3183622658252716,
+ 0.012427416630089283,
+ -0.08503033965826035,
+ -0.7466164231300354,
+ 0.011984540149569511,
+ -0.10463400930166245,
+ 0.18085621297359467,
+ 0.027885498479008675,
+ -0.21805012226104736,
+ -0.11751596629619598,
+ 0.09866130352020264,
+ 0.3014037609100342,
+ 0.13392266631126404,
+ 0.19781625270843506,
+ 0.05038033798336983,
+ -0.38718441128730774,
+ 0.1848674714565277,
+ 0.21683885157108307,
+ -0.5937297940254211,
+ -0.07603869587182999,
+ 0.20278185606002808,
+ -0.15553180873394012,
+ 0.03819640725851059,
+ -0.009890005923807621,
+ -0.05258834734559059,
+ -0.5933769345283508,
+ 0.1463337540626526,
+ -0.40082675218582153,
+ -0.27249711751937866,
+ 0.15393826365470886,
+ -0.11246295273303986,
+ 0.1274707019329071,
+ 0.06036047264933586,
+ -0.24703647196292877,
+ 0.09616688638925552,
+ 0.029776768758893013,
+ -0.18739250302314758,
+ -0.2982015311717987,
+ 0.08034591376781464,
+ 0.0705164447426796,
+ 0.10652870684862137,
+ 0.0401625894010067,
+ 0.061956360936164856,
+ -0.20484572649002075,
+ 0.06912866234779358,
+ -0.18469657003879547,
+ -0.12315119802951813,
+ 0.03582711145281792,
+ 0.08491581678390503,
+ -0.007683210540562868,
+ -0.26193612813949585,
+ 0.083865687251091,
+ 0.05912237986922264,
+ 0.14736482501029968,
+ -0.13348844647407532,
+ 0.06776504963636398,
+ -0.0034948443062603474,
+ 0.03021770715713501,
+ 0.03882430121302605,
+ 0.17496226727962494,
+ -0.11695406585931778,
+ -0.16507813334465027,
+ -0.10649487376213074,
+ 0.006603171583265066,
+ 0.06768722832202911,
+ -0.050011735409498215,
+ -0.27403905987739563,
+ -0.10870315879583359,
+ 0.02423289604485035,
+ 0.16262875497341156,
+ 0.023541515693068504,
+ -0.029662471264600754,
+ 0.11368146538734436,
+ -0.010363632813096046,
+ 0.04634997621178627,
+ -0.682279109954834,
+ 0.23176009953022003,
+ 0.09290780872106552,
+ -0.00039114730316214263,
+ -0.18280769884586334,
+ -0.00850045494735241,
+ 0.11619364470243454,
+ -0.001821874058805406,
+ 0.03447658196091652,
+ 0.01767871342599392,
+ -0.03021698258817196,
+ 0.09701815247535706,
+ -0.29362040758132935,
+ -0.06804905831813812,
+ 0.00643650908023119,
+ 0.009058542549610138,
+ -0.23731356859207153,
+ 0.007565407082438469,
+ -0.31476372480392456,
+ 0.12198641151189804,
+ 0.07928924262523651,
+ -0.05933317169547081,
+ 0.014917676337063313,
+ 0.17360010743141174,
+ -0.02559753507375717,
+ -0.0659712553024292,
+ 0.18342210352420807,
+ 0.05127304419875145,
+ -0.02824457176029682,
+ -0.04391869157552719,
+ 0.013763032853603363,
+ -0.04619654268026352,
+ 0.04905478283762932,
+ -0.0899888351559639,
+ -0.010250585153698921,
+ 0.003663488896563649
+ ],
+ [
+ 0.11707988381385803,
+ -0.012062357738614082,
+ -0.21134260296821594,
+ -0.0901583656668663,
+ -0.04336472973227501,
+ -0.08038540929555893,
+ 0.12857629358768463,
+ 0.037310514599084854,
+ 0.001155287493020296,
+ -0.18154838681221008,
+ -0.4831831753253937,
+ -0.18810047209262848,
+ -0.20520667731761932,
+ -0.12275321036577225,
+ -0.07644340395927429,
+ 0.16898515820503235,
+ -1.1960588693618774,
+ 0.13621988892555237,
+ -0.29121333360671997,
+ -0.35968175530433655,
+ -0.08596019446849823,
+ 0.08861041069030762,
+ -0.005422593094408512,
+ -0.01172693818807602,
+ 0.13935968279838562,
+ -0.3189579248428345,
+ 0.01244546938687563,
+ -0.008065720088779926,
+ 0.12723392248153687,
+ -0.05961800366640091,
+ 0.03831127658486366,
+ -0.05634935945272446,
+ -0.3498627245426178,
+ -0.6863208413124084,
+ 0.06956834346055984,
+ 0.1816672384738922,
+ -0.3183107078075409,
+ -0.0981999933719635,
+ -0.002650436945259571,
+ 0.2681486904621124,
+ 0.007516677025705576,
+ 0.10718858987092972,
+ 0.35853880643844604,
+ 0.09932074695825577,
+ 0.19860641658306122,
+ -0.5967840552330017,
+ -0.4281823933124542,
+ 0.18975435197353363,
+ 0.012677052058279514,
+ -0.14243347942829132,
+ 0.0359477661550045,
+ -0.002246828516945243,
+ 0.15934644639492035,
+ 0.21286478638648987,
+ 0.31106454133987427,
+ -0.27341189980506897,
+ 0.024886377155780792,
+ 0.13637128472328186,
+ -0.023705124855041504,
+ -0.3759010136127472,
+ -0.1565374881029129,
+ 0.0526781901717186,
+ 0.1087900698184967,
+ 0.20917214453220367,
+ -0.05167149007320404,
+ -0.12696072459220886,
+ -0.18906660377979279,
+ 0.018862957134842873,
+ 0.06601996719837189,
+ -0.01790613681077957,
+ -0.08147965371608734,
+ -0.07037747651338577,
+ -0.22820989787578583,
+ -0.18264365196228027,
+ -0.18189352750778198,
+ 0.11085999011993408,
+ -0.20925398170948029,
+ 0.14725826680660248,
+ -0.05900055542588234,
+ -0.29020750522613525,
+ 0.04318507760763168,
+ 0.0020446127746254206,
+ 0.033521197736263275,
+ -0.23804806172847748,
+ 0.108457550406456,
+ 0.06655804067850113,
+ 0.03150900825858116,
+ -0.4711359441280365,
+ 0.02820977196097374,
+ 0.0003283287223894149,
+ 0.18346089124679565,
+ -0.22149167954921722,
+ -0.638874351978302,
+ 0.16683624684810638,
+ 0.3318592607975006,
+ 0.04412943497300148,
+ 0.16905361413955688,
+ 0.08307899534702301,
+ -0.07756691426038742,
+ 0.08944916725158691,
+ 0.11442209035158157,
+ 0.039660077542066574,
+ 0.032522059977054596,
+ -0.15192092955112457,
+ 0.10905548185110092,
+ 0.01011120155453682,
+ -0.0063481261022388935,
+ 0.2228701114654541,
+ -0.03282828629016876,
+ -0.07650118321180344,
+ 0.2302437424659729,
+ -0.03907551243901253,
+ 0.1344173550605774,
+ 0.06473687291145325,
+ 0.07323276996612549,
+ 0.06255131959915161,
+ 0.23272645473480225,
+ 0.07507288455963135,
+ -0.2470303773880005,
+ 0.21013285219669342,
+ -0.06068211421370506,
+ -0.028370413929224014,
+ 0.1136016845703125,
+ 0.1780325174331665,
+ -0.3764476776123047,
+ -0.008990650065243244,
+ -0.02255677618086338,
+ -0.2012152522802353
+ ],
+ [
+ 0.03936747461557388,
+ 0.05760778859257698,
+ 0.17184151709079742,
+ 0.061656009405851364,
+ 0.02115621790289879,
+ -0.02682637609541416,
+ -0.23889857530593872,
+ 0.032917097210884094,
+ -0.1310713291168213,
+ -0.052512649446725845,
+ 0.06268664449453354,
+ 0.011497918516397476,
+ -0.32750463485717773,
+ 0.1271658092737198,
+ 0.029513025656342506,
+ 0.07868492603302002,
+ -0.14726945757865906,
+ -0.10937400907278061,
+ 0.05438733473420143,
+ -0.02940277010202408,
+ -0.07206796854734421,
+ 0.014690808020532131,
+ -0.038904741406440735,
+ -0.0755150094628334,
+ 0.06934578716754913,
+ -0.09066906571388245,
+ 0.06439448148012161,
+ -0.6019983291625977,
+ 0.24964351952075958,
+ 0.06756246834993362,
+ 0.20133481919765472,
+ -0.31035467982292175,
+ -0.4670463502407074,
+ 0.20263099670410156,
+ 0.1495734304189682,
+ -0.17337815463542938,
+ -0.0814167857170105,
+ 0.16301429271697998,
+ -0.17113785445690155,
+ 0.011796075850725174,
+ 0.07431884109973907,
+ -0.011949067935347557,
+ 0.04033703729510307,
+ -0.0384526289999485,
+ 0.021888025104999542,
+ -0.3256795108318329,
+ 0.09764056652784348,
+ -0.11547206342220306,
+ 0.009990040212869644,
+ -0.0007690232596360147,
+ 0.08858699351549149,
+ 0.006568937096744776,
+ -0.07664135843515396,
+ -0.110886350274086,
+ 0.016882408410310745,
+ 0.03436069190502167,
+ 0.10611739754676819,
+ 0.0006027460913173854,
+ -0.009608699940145016,
+ 0.059267327189445496,
+ 0.1073053851723671,
+ 0.04530549421906471,
+ -0.01619189977645874,
+ 0.137496680021286,
+ 0.12040077894926071,
+ -0.10403656214475632,
+ 0.29377231001853943,
+ -0.12708911299705505,
+ -0.11599291115999222,
+ -0.002952129114419222,
+ 0.06096046045422554,
+ -0.12166620045900345,
+ 0.03810232877731323,
+ 0.02259567566215992,
+ 0.005838738288730383,
+ 0.11958830058574677,
+ -0.14639411866664886,
+ -0.3870731294155121,
+ -0.17899182438850403,
+ -0.17306245863437653,
+ -0.11419942229986191,
+ -0.013556916266679764,
+ 0.05984777957201004,
+ 0.00554418470710516,
+ 0.01343554724007845,
+ 0.13138322532176971,
+ 0.20628155767917633,
+ 0.03328976035118103,
+ -0.08494625985622406,
+ -0.034574560821056366,
+ -0.39129430055618286,
+ 0.12612563371658325,
+ -0.3977392017841339,
+ -0.05173712968826294,
+ -0.07228949666023254,
+ 0.19712670147418976,
+ -0.19306683540344238,
+ 0.10010359436273575,
+ 0.0014237085124477744,
+ -0.17489585280418396,
+ 0.13310351967811584,
+ -0.07438543438911438,
+ 0.10692553222179413,
+ -0.028833646327257156,
+ -0.13412727415561676,
+ 0.03237123414874077,
+ -0.03446381539106369,
+ 0.06430743634700775,
+ 0.04411814361810684,
+ -0.06312329322099686,
+ -0.1818610429763794,
+ 0.13397471606731415,
+ 0.07224933803081512,
+ 0.040291883051395416,
+ -0.028984030708670616,
+ -0.11788427829742432,
+ 0.06873753666877747,
+ 0.18020471930503845,
+ 0.020279547199606895,
+ 0.12370510399341583,
+ -0.03191715478897095,
+ -0.04649142175912857,
+ -0.0929684266448021,
+ 0.05522165820002556,
+ -0.4121522307395935,
+ -0.1106007993221283,
+ -0.13722629845142365,
+ -0.7423602938652039
+ ],
+ [
+ -0.10283973067998886,
+ -0.03984961658716202,
+ 0.057836320251226425,
+ -0.07530853152275085,
+ 0.061661865562200546,
+ 0.12187274545431137,
+ 0.017080266028642654,
+ -0.08751711249351501,
+ 0.009585625492036343,
+ 0.15795555710792542,
+ 0.0414922758936882,
+ 0.009402278810739517,
+ -0.10274571925401688,
+ 0.03383331373333931,
+ 0.00859924964606762,
+ -0.14399734139442444,
+ -0.036325350403785706,
+ -0.07787557691335678,
+ -0.07997114211320877,
+ 0.07484255731105804,
+ -0.0927937850356102,
+ 0.007331077940762043,
+ 0.09539409726858139,
+ 0.048107896000146866,
+ -0.15003743767738342,
+ -0.058698516339063644,
+ -0.08889590203762054,
+ 0.05983630195260048,
+ -0.03845806047320366,
+ 0.07196547836065292,
+ 0.20435070991516113,
+ -0.03439377248287201,
+ -0.07293073832988739,
+ 0.003368769772350788,
+ -0.2043071836233139,
+ 0.041323915123939514,
+ -0.03691798448562622,
+ 0.052060239017009735,
+ -0.06334474682807922,
+ 0.06350775063037872,
+ -0.17736117541790009,
+ 0.07516203075647354,
+ 0.03710560128092766,
+ 0.09054245054721832,
+ -0.12412932515144348,
+ -0.30105265974998474,
+ -0.0462571419775486,
+ -0.04892895370721817,
+ 0.09597120434045792,
+ -0.16400237381458282,
+ 0.11350036412477493,
+ -0.06311789155006409,
+ -0.13055790960788727,
+ 0.022336307913064957,
+ 0.0013610244495794177,
+ 0.013146121054887772,
+ -0.10032600909471512,
+ 0.05416052043437958,
+ 0.11732112616300583,
+ -0.07413464039564133,
+ 0.01350784208625555,
+ -0.004450702108442783,
+ 0.08555237203836441,
+ -0.04758218303322792,
+ 0.062199223786592484,
+ 0.07473936676979065,
+ 0.16612428426742554,
+ -0.03797914460301399,
+ 0.07917381823062897,
+ 0.10846436023712158,
+ 0.016377154737710953,
+ -0.10064995288848877,
+ 0.004516888409852982,
+ -0.006061824504286051,
+ -0.05185989290475845,
+ 0.021475743502378464,
+ -0.000630661437753588,
+ -0.0030517277773469687,
+ 0.07590028643608093,
+ 0.05946324020624161,
+ 0.02406134642660618,
+ 0.0054471432231366634,
+ -0.01517221238464117,
+ 0.06061382219195366,
+ -0.001450062613002956,
+ -0.017832666635513306,
+ 0.1013614609837532,
+ -0.10011085867881775,
+ -0.12895536422729492,
+ -0.06204682216048241,
+ -0.05191326513886452,
+ -0.03854918107390404,
+ 0.008216272108256817,
+ 0.06809049844741821,
+ -0.015553941950201988,
+ 0.06485951691865921,
+ 0.04411296173930168,
+ 0.025506576523184776,
+ 0.04994133859872818,
+ 0.015198955312371254,
+ 0.001620965776965022,
+ -0.0776236280798912,
+ 0.1180325299501419,
+ 0.08628765493631363,
+ -0.06278582662343979,
+ 0.010058251209557056,
+ -0.028645483776926994,
+ -0.003767607035115361,
+ -0.11952932178974152,
+ -0.08966277539730072,
+ -0.027798842638731003,
+ -0.010600497014820576,
+ -0.09261175990104675,
+ 0.033845532685518265,
+ -0.15218991041183472,
+ -0.02115710638463497,
+ 0.0186784490942955,
+ -0.09833063930273056,
+ -0.06596490740776062,
+ -0.10110572725534439,
+ -0.00592827470973134,
+ 0.06700719147920609,
+ -0.04142523929476738,
+ 0.024928661063313484,
+ 0.13474304974079132,
+ -0.1610475778579712,
+ -0.03819579258561134,
+ -0.022631030529737473
+ ],
+ [
+ -9.666322720650764e-37,
+ -6.135865585739077e-41,
+ -8.511566500161725e-28,
+ 1.7412244648918062e-38,
+ -3.579979285938841e-26,
+ -4.125506756880121e-40,
+ -4.016765996048515e-40,
+ -3.4321582897168447e-40,
+ -1.5084768327768876e-25,
+ -3.975189470611998e-40,
+ -5.3744280261942574e-40,
+ -2.3043589988816146e-34,
+ 3.186720863690353e-40,
+ 5.493089980153283e-41,
+ -1.0469629773169366e-30,
+ 1.7370776023463297e-40,
+ -4.910780403303105e-40,
+ 4.142728715006673e-40,
+ -2.0641827028736718e-40,
+ -5.927996971541133e-40,
+ 9.981448961385672e-42,
+ 1.7810503481568425e-41,
+ 6.344995368554912e-40,
+ 2.1776925911725885e-26,
+ 1.3744075467944238e-40,
+ -1.735788407759151e-40,
+ -3.892428783308974e-40,
+ -2.1361204014690687e-28,
+ 3.052871057236312e-26,
+ 1.5485188809867824e-40,
+ 5.434389587482716e-40,
+ -2.2365564269702675e-40,
+ 4.684750961007512e-40,
+ -5.2976929222878304e-40,
+ 5.647468064210619e-32,
+ -5.234466335577495e-40,
+ 1.1296716626204542e-28,
+ 4.5323737659968316e-40,
+ 1.0851817179401369e-28,
+ 1.7150688273412533e-30,
+ -1.975830834697992e-41,
+ -4.048953821774056e-40,
+ -4.817944380041586e-41,
+ -4.389997937527806e-28,
+ -4.071136376464318e-40,
+ 2.45059075441124e-41,
+ 5.4153739673218286e-40,
+ -4.173697411068251e-40,
+ -2.5964476737205697e-31,
+ 4.520364638157568e-40,
+ 5.708903956643948e-40,
+ -6.731015824442306e-25,
+ -4.989042922535646e-40,
+ -1.400499724200152e-40,
+ -1.6205316090684347e-40,
+ -4.026792567846351e-26,
+ 1.2424209259978265e-37,
+ -3.31281950859955e-39,
+ 1.892873965609963e-40,
+ 3.782132581181968e-40,
+ 2.8575418414358102e-40,
+ 5.0180918397011e-40,
+ -1.3593015493490023e-40,
+ -2.0541774318383926e-40,
+ 2.049450616700083e-36,
+ 4.649788564322608e-41,
+ -4.855723386639783e-40,
+ -6.256223110839935e-40,
+ 8.508964535073154e-41,
+ -3.407439384806155e-40,
+ 3.433741756981532e-41,
+ 2.8361580268702135e-40,
+ 2.4135684489837784e-40,
+ -2.1321821059473118e-18,
+ -1.7413259034302882e-34,
+ -4.621103984757879e-40,
+ -1.5678117333183873e-33,
+ 3.2462760484241577e-40,
+ -2.078949009707819e-22,
+ -3.22911935717488e-36,
+ -4.034360492614637e-24,
+ 4.000146596261623e-40,
+ 9.690679530038272e-41,
+ -2.622642179861041e-40,
+ 3.3661991710010756e-41,
+ -4.5952513324421175e-33,
+ -1.2589111260663081e-39,
+ -1.2598373843512268e-40,
+ -3.815455458663612e-41,
+ 3.719816838473443e-40,
+ -1.5500719400747935e-38,
+ 2.6467585264320712e-40,
+ 1.7360686674520159e-41,
+ -4.761121727313215e-40,
+ -3.0532145372122436e-28,
+ -3.0337691363092992e-40,
+ -1.1123787469503263e-40,
+ -3.363788937642437e-40,
+ -4.434352938417311e-40,
+ -6.19399144603927e-40,
+ 3.9098966320906144e-27,
+ -1.4878426574815178e-40,
+ -1.0499387647759303e-30,
+ -2.8359898710544945e-40,
+ -3.7924492287895625e-31,
+ 1.8706073330118416e-40,
+ -5.5168980410621616e-40,
+ 4.595146595895459e-31,
+ 4.7183681111666646e-40,
+ 1.8358411181119428e-40,
+ 5.649278706986927e-40,
+ 1.842679454617848e-40,
+ -4.841696389011892e-40,
+ 2.0879347118439774e-43,
+ 1.128930384872886e-21,
+ -3.618390855625613e-40,
+ -1.3035158574842313e-40,
+ -1.3828713895189457e-40,
+ -2.9586229694761506e-28,
+ -3.8074680574169605e-40,
+ -2.2101139249484582e-40,
+ -2.266097254693074e-33,
+ -2.775930218873533e-40,
+ 5.909275624057754e-42,
+ 1.064874729009715e-40,
+ -3.775882790031079e-40,
+ 2.323310814896617e-40,
+ -2.5513020750422647e-40
+ ],
+ [
+ 0.00021852762438356876,
+ -1.5505507637600533e-40,
+ -4.5176253479439765e-05,
+ -2.653624542325872e-11,
+ -6.598750701414247e-07,
+ -8.563979463360738e-06,
+ 4.063408323297138e-23,
+ 4.2242329072905704e-05,
+ 3.123431721596681e-11,
+ -0.000127591731143184,
+ -3.8600581319769844e-05,
+ -6.713211405440234e-06,
+ -3.319737518121112e-17,
+ -3.1723427010786554e-18,
+ -3.7361905924626626e-06,
+ -2.4217660450000786e-40,
+ -1.3880868228415604e-17,
+ -3.975427691350933e-40,
+ -3.226427125468945e-08,
+ 1.1239814982349358e-41,
+ -1.9183511387483448e-13,
+ 0.00013431470142677426,
+ -3.388894037925638e-05,
+ -4.558428827294847e-06,
+ -2.524901611974385e-40,
+ -3.597216107209533e-07,
+ 5.9577148931566626e-05,
+ -9.47430180531228e-06,
+ -8.637837709102314e-06,
+ -3.585065496736206e-05,
+ -6.9372676006485e-15,
+ -3.300525130978116e-11,
+ -2.0338314094935778e-13,
+ -1.0909898678912455e-10,
+ -5.113709466814358e-26,
+ -7.692985631628459e-16,
+ -4.295913811347418e-07,
+ -2.016092004453185e-08,
+ -4.182552584097721e-05,
+ -6.795929863301353e-08,
+ -1.6368630895158276e-06,
+ -5.450092794490047e-05,
+ -6.3585689531464595e-06,
+ -9.64413970905298e-07,
+ -6.890433468242918e-08,
+ -7.16517334353739e-09,
+ -3.0104324650892522e-06,
+ -6.384175321727525e-07,
+ -5.134882741231195e-09,
+ -6.57685878736094e-17,
+ -7.812898938919233e-11,
+ -2.861756001948379e-06,
+ -5.757629423897015e-06,
+ -1.0580782827673829e-07,
+ -2.7564481115405215e-06,
+ -6.522976764244959e-05,
+ -2.2290096239885315e-06,
+ -5.700027759303339e-05,
+ 1.3968539132966958e-35,
+ 5.4401068852171616e-40,
+ -2.7876113861680096e-08,
+ -4.4541400326088623e-14,
+ -4.038389670313336e-05,
+ -2.0077617447592773e-27,
+ -6.458382983964839e-08,
+ 7.462894018317456e-07,
+ -4.1030756392501644e-07,
+ -2.8058187648612557e-18,
+ -3.451833308076857e-08,
+ -1.6308857597735482e-09,
+ -0.00010331669182050973,
+ -2.250901616207557e-06,
+ -3.8933764388458456e-14,
+ -1.6537527699256316e-05,
+ -2.8405461307556834e-06,
+ -1.1430524864408653e-06,
+ -2.612054913697648e-06,
+ 1.3419674873453043e-40,
+ -1.7050508560600974e-08,
+ -9.576931603305638e-08,
+ 1.5602897880871108e-40,
+ -1.427717234037118e-05,
+ -5.402832688346498e-15,
+ -3.6862186914010664e-11,
+ 1.0000400525391159e-35,
+ -1.9235871207001765e-07,
+ -1.943041055032468e-18,
+ -5.4773868214397226e-06,
+ -1.6660298696180575e-09,
+ -5.074874570709653e-05,
+ -9.594439688953571e-06,
+ -6.077095128145294e-40,
+ -3.2809651805305873e-15,
+ -1.0749054126790725e-06,
+ -8.407909263041802e-06,
+ -1.1571815409828995e-24,
+ -1.1426273881058602e-13,
+ -4.0394415918854065e-06,
+ 1.5705332798613252e-40,
+ -6.894764164981637e-13,
+ -0.00012295591295696795,
+ 2.1173619795947986e-41,
+ -1.6745735820222762e-06,
+ -2.5341823857161216e-05,
+ -2.464191502758728e-13,
+ -5.095924571207888e-09,
+ -8.943602125555117e-08,
+ -1.4535087757394649e-05,
+ -7.891808734283856e-11,
+ -6.715411147151597e-33,
+ -6.680830199800511e-19,
+ -1.0938913419522578e-06,
+ 3.384538516115754e-08,
+ -7.790715130795434e-07,
+ -0.00015691990847699344,
+ -7.950623626129527e-08,
+ -7.807701152273694e-09,
+ 0.00030737818451598287,
+ -7.23006742191501e-05,
+ 5.10364111094813e-40,
+ -1.4424562323256396e-05,
+ -4.383070295599367e-11,
+ -1.2977021413007606e-07,
+ 9.971822961923818e-31,
+ 2.474092699242349e-28,
+ 4.350849562928195e-40,
+ -4.582605470204726e-06,
+ -4.974547736863661e-16
+ ],
+ [
+ 0.04827325791120529,
+ 0.21514892578125,
+ 0.1942320466041565,
+ 0.11831087619066238,
+ -0.23914529383182526,
+ -0.049641937017440796,
+ -0.06199654936790466,
+ -0.09256814420223236,
+ 0.08374757319688797,
+ 0.05048320069909096,
+ 0.08450467139482498,
+ 0.12681645154953003,
+ 0.09265699237585068,
+ 0.04159415885806084,
+ -0.06953300535678864,
+ -0.055886656045913696,
+ -0.018805397674441338,
+ -0.21417495608329773,
+ -0.15096667408943176,
+ 0.39774689078330994,
+ -0.004762500058859587,
+ 0.12813067436218262,
+ -0.1484374701976776,
+ -0.05632397159934044,
+ 0.11754769831895828,
+ -0.07552138715982437,
+ 0.05153961107134819,
+ 0.04554073512554169,
+ 0.1590009182691574,
+ 0.10840501636266708,
+ 0.14735138416290283,
+ 0.07707295566797256,
+ 0.03371281176805496,
+ 0.08857610076665878,
+ 0.05045890063047409,
+ -0.11738065630197525,
+ 0.08873655647039413,
+ 0.12854890525341034,
+ -0.11114844679832458,
+ -0.09454745799303055,
+ 0.06770875304937363,
+ 0.05067264288663864,
+ -0.06973784416913986,
+ 0.023371215909719467,
+ -0.07201961427927017,
+ -0.036594197154045105,
+ -0.022149818018078804,
+ 0.08335564285516739,
+ 0.1110721156001091,
+ -0.29455623030662537,
+ -0.08380600810050964,
+ 0.13196788728237152,
+ 0.0900752916932106,
+ -0.2703433036804199,
+ -0.24520330131053925,
+ 0.1513301283121109,
+ 0.08282192796468735,
+ -0.002659645164385438,
+ -0.08893971145153046,
+ -0.003290957771241665,
+ -0.2056335061788559,
+ -0.032364990562200546,
+ -0.001887918566353619,
+ 0.08015158027410507,
+ -0.07939223945140839,
+ 0.05478687956929207,
+ 0.14241234958171844,
+ -0.04256710410118103,
+ -0.09351171553134918,
+ -0.03417447209358215,
+ -0.06494317948818207,
+ 0.02894498035311699,
+ 0.16303542256355286,
+ -0.09350043535232544,
+ -0.13421085476875305,
+ 0.1102103516459465,
+ 0.1263013333082199,
+ 0.06418556720018387,
+ -0.19309304654598236,
+ -0.051990434527397156,
+ -0.16825035214424133,
+ 0.09767627716064453,
+ 0.026185767725110054,
+ -0.20945434272289276,
+ -0.17457975447177887,
+ -0.05536230280995369,
+ 0.22240698337554932,
+ -0.12430312484502792,
+ 0.10322536528110504,
+ 0.04315957799553871,
+ 0.10825398564338684,
+ 0.04031112417578697,
+ -0.06651556491851807,
+ -0.04260280355811119,
+ 0.12265636026859283,
+ -0.06199626997113228,
+ -0.10540129244327545,
+ 0.11977565288543701,
+ 0.2967701852321625,
+ -0.2084561288356781,
+ 0.13269734382629395,
+ -0.11665571480989456,
+ -0.028106898069381714,
+ 0.05031342804431915,
+ -0.08633992075920105,
+ -0.06864435970783234,
+ 0.046477578580379486,
+ 0.1503124088048935,
+ -0.07416870445013046,
+ -0.2418452352285385,
+ -0.22392095625400543,
+ -0.1432890146970749,
+ 0.0681062862277031,
+ -0.08762646466493607,
+ 0.03314952552318573,
+ -0.09757079184055328,
+ -0.12986120581626892,
+ 0.01167116966098547,
+ 0.16542869806289673,
+ 0.02823389321565628,
+ 0.03637228161096573,
+ -0.06437701731920242,
+ 0.09288445860147476,
+ 0.0327470600605011,
+ 0.07214664667844772,
+ -0.03767981380224228,
+ -0.017573459073901176,
+ 0.1495993435382843
+ ],
+ [
+ -0.041472092270851135,
+ 0.01547745056450367,
+ -0.02573670819401741,
+ 0.0338791199028492,
+ 0.02639606222510338,
+ 0.05719899758696556,
+ 0.027113167569041252,
+ 0.07817833870649338,
+ -0.08719311654567719,
+ 0.004046034533530474,
+ -0.09280002862215042,
+ -0.04546007513999939,
+ -0.06504745036363602,
+ 0.0362648144364357,
+ 0.04667660966515541,
+ -0.029684709385037422,
+ -0.08254169672727585,
+ -0.08373236656188965,
+ -0.11791915446519852,
+ -0.12591414153575897,
+ 0.0014984642621129751,
+ 0.048400770872831345,
+ -0.01895231008529663,
+ -0.054966773837804794,
+ 0.06127454340457916,
+ -0.007002448663115501,
+ -0.26911380887031555,
+ 0.03734554350376129,
+ -0.030913937836885452,
+ 0.20641818642616272,
+ 0.18065892159938812,
+ 0.013039067387580872,
+ -0.08649847656488419,
+ -0.1057911291718483,
+ 0.10698824375867844,
+ -0.1952851414680481,
+ -0.004707066807895899,
+ 0.028329646214842796,
+ 0.08458753675222397,
+ 0.047512687742710114,
+ -0.10218003392219543,
+ 0.15643644332885742,
+ 0.025615546852350235,
+ 0.14368866384029388,
+ -0.22137250006198883,
+ 0.09859690070152283,
+ -0.11498043686151505,
+ -0.06961458176374435,
+ -0.13299117982387543,
+ -0.06046851724386215,
+ -0.02598375827074051,
+ 0.04813646525144577,
+ 0.23292164504528046,
+ -0.03287215903401375,
+ -0.04419177025556564,
+ -0.10097257792949677,
+ 0.13817471265792847,
+ -0.045997146517038345,
+ -0.1634233295917511,
+ -0.28002509474754333,
+ -0.053338728845119476,
+ -0.19627666473388672,
+ -0.04104764014482498,
+ 0.02803809382021427,
+ -0.08308050036430359,
+ 0.14895769953727722,
+ -0.027241431176662445,
+ 0.07953374832868576,
+ 0.045976027846336365,
+ 0.22073884308338165,
+ 0.15013034641742706,
+ 0.1861959993839264,
+ -0.20713387429714203,
+ 0.10499055683612823,
+ 0.11764609068632126,
+ -0.11645462363958359,
+ -0.10664629936218262,
+ 0.12691327929496765,
+ -0.038693107664585114,
+ 0.029057752341032028,
+ -0.08724923431873322,
+ 0.19190159440040588,
+ -0.1494167596101761,
+ 0.011152287013828754,
+ -0.16955722868442535,
+ 0.17099051177501678,
+ 0.15986573696136475,
+ -0.21062053740024567,
+ 0.0629768893122673,
+ -0.09799345582723618,
+ 0.07509797066450119,
+ -0.20448066294193268,
+ 0.11914660036563873,
+ 0.05141711235046387,
+ 0.018616240471601486,
+ -0.3615768253803253,
+ -0.0556289479136467,
+ -0.0795636922121048,
+ -0.23317621648311615,
+ 0.03840075805783272,
+ 0.16618263721466064,
+ 0.18325117230415344,
+ 0.02762136422097683,
+ 0.051379188895225525,
+ 0.06972934305667877,
+ 0.018536992371082306,
+ 0.10861487686634064,
+ 0.1290348619222641,
+ -0.021076735109090805,
+ 0.10722018033266068,
+ -0.18228723108768463,
+ 0.020615722984075546,
+ -0.419887900352478,
+ -0.026923978701233864,
+ 0.05717199668288231,
+ -0.06604387611150742,
+ 0.07278672605752945,
+ 0.09682442992925644,
+ -0.06399456411600113,
+ 0.26224485039711,
+ 0.08474847674369812,
+ 0.01061875931918621,
+ -0.07568567991256714,
+ -0.2520374357700348,
+ -0.15267734229564667,
+ -0.8471099138259888,
+ -0.31546881794929504,
+ -0.09156917780637741
+ ],
+ [
+ -0.35277503728866577,
+ 0.11820149421691895,
+ -0.0030589995440095663,
+ -0.053522296249866486,
+ -0.05968159809708595,
+ 0.22406208515167236,
+ -0.04311959445476532,
+ 0.019874313846230507,
+ 0.08595995604991913,
+ -0.09159152209758759,
+ -0.1711912304162979,
+ -0.12692248821258545,
+ -0.0067992620170116425,
+ 0.10868405550718307,
+ -0.05567067861557007,
+ 0.10666446387767792,
+ 0.04125598073005676,
+ 0.06319345533847809,
+ 0.014548756182193756,
+ 0.0652332454919815,
+ -0.16421367228031158,
+ 0.19096538424491882,
+ 0.20599962770938873,
+ 0.15232260525226593,
+ 0.05928250402212143,
+ 0.23737427592277527,
+ 0.4701627492904663,
+ -0.04843895137310028,
+ -0.05845407769083977,
+ -0.2441394329071045,
+ 0.13110405206680298,
+ -0.19882719218730927,
+ 0.07783149927854538,
+ -0.1635933369398117,
+ 0.0330621711909771,
+ -0.15153834223747253,
+ 0.09116355329751968,
+ -0.030985934659838676,
+ -0.08226179331541061,
+ -0.029148802161216736,
+ -0.10930293053388596,
+ 0.2359568029642105,
+ 0.0879155620932579,
+ 0.06380531936883926,
+ -0.08510856330394745,
+ 0.11418550461530685,
+ -0.058886125683784485,
+ -0.026658127084374428,
+ -0.11213912814855576,
+ 0.17400281131267548,
+ 0.0070968130603432655,
+ -0.0024675517342984676,
+ -0.0650077760219574,
+ 0.1320456713438034,
+ 0.1123906597495079,
+ -0.2018636018037796,
+ 0.057058390229940414,
+ -0.05744340270757675,
+ -0.03860144317150116,
+ 0.06840206682682037,
+ -0.062225341796875,
+ -0.09066668897867203,
+ -0.020396782085299492,
+ -0.08101317286491394,
+ 0.11080241948366165,
+ 0.06144142150878906,
+ 0.1512887328863144,
+ -0.37515541911125183,
+ -0.03558921068906784,
+ -0.057247284799814224,
+ 0.09447670727968216,
+ -0.07621780782938004,
+ 0.06213551387190819,
+ 0.10089583694934845,
+ 0.06938038021326065,
+ -0.34581562876701355,
+ -0.21749567985534668,
+ -0.10950621962547302,
+ 0.01688399352133274,
+ 0.0645124539732933,
+ 0.1977268010377884,
+ 0.0567384772002697,
+ -0.07458191365003586,
+ 0.031786996871232986,
+ 0.11169219017028809,
+ -0.014339459128677845,
+ -0.015313252806663513,
+ 0.14144395291805267,
+ 0.035564225167036057,
+ -0.012537859380245209,
+ -0.06328368932008743,
+ 0.043391548097133636,
+ 0.08211874216794968,
+ -0.03450951725244522,
+ -0.0014689835952594876,
+ -0.039964113384485245,
+ 0.0711001604795456,
+ 0.0064759403467178345,
+ 0.03688541799783707,
+ 0.08051969110965729,
+ 0.08449471741914749,
+ 0.12263805419206619,
+ 0.10150298476219177,
+ -0.16469042003154755,
+ -0.02410830557346344,
+ 0.06726542115211487,
+ 0.0921986773610115,
+ -0.09149423986673355,
+ 0.047271478921175,
+ 0.14061239361763,
+ 0.033983513712882996,
+ 0.08036905527114868,
+ 0.024914074689149857,
+ 0.011389260180294514,
+ -0.04575974494218826,
+ 0.14109128713607788,
+ 0.002089719520881772,
+ 0.0386323556303978,
+ -0.30370646715164185,
+ -0.023665331304073334,
+ -0.3174821436405182,
+ 0.12076598405838013,
+ 0.06213612109422684,
+ -0.14683392643928528,
+ 0.10492662340402603,
+ 0.17357446253299713,
+ -0.05210854858160019,
+ -0.27452170848846436
+ ],
+ [
+ -0.2632894217967987,
+ 0.07958473265171051,
+ 0.11559826135635376,
+ -0.042120352387428284,
+ 0.020214686170220375,
+ -0.32958775758743286,
+ 0.10046248137950897,
+ -0.25719404220581055,
+ 0.11074749380350113,
+ 0.0757545530796051,
+ -0.18737460672855377,
+ -0.42136794328689575,
+ 0.07335198670625687,
+ -0.3403390645980835,
+ 0.09304189682006836,
+ 0.1185125857591629,
+ 0.16296356916427612,
+ 0.003851336659863591,
+ -0.01040879637002945,
+ 0.03535989299416542,
+ -0.13972064852714539,
+ -0.12546832859516144,
+ 0.05829951539635658,
+ -0.08608102798461914,
+ 0.01581210270524025,
+ 0.1052127480506897,
+ -0.7268087267875671,
+ -0.07337155938148499,
+ 0.20192523300647736,
+ -0.21199262142181396,
+ -0.007353718392550945,
+ -0.2468317598104477,
+ -0.21410875022411346,
+ -0.2008274644613266,
+ -0.04810459166765213,
+ 0.04794730246067047,
+ 0.02092467062175274,
+ 0.07563482969999313,
+ -0.09588226675987244,
+ -0.0035723051987588406,
+ -0.14108313620090485,
+ -0.3728482723236084,
+ -0.2421407252550125,
+ 0.06196984648704529,
+ -0.13556581735610962,
+ 0.22880704700946808,
+ 0.024122921749949455,
+ 0.011857481673359871,
+ -0.001619938644580543,
+ 0.010159431956708431,
+ 0.18034881353378296,
+ -0.1823078989982605,
+ -0.008941304869949818,
+ 0.07899856567382812,
+ -0.08110322058200836,
+ 0.08976677060127258,
+ -0.005852886475622654,
+ -0.009935887530446053,
+ 0.017941994592547417,
+ 0.028338544070720673,
+ -0.02821565605700016,
+ 0.07789101451635361,
+ 0.016744934022426605,
+ 0.07681363821029663,
+ 0.14577268064022064,
+ -0.07020723074674606,
+ -0.20163577795028687,
+ 0.3214800953865051,
+ -0.02065255306661129,
+ -0.0019298326224088669,
+ 0.06756987422704697,
+ -0.540946364402771,
+ 0.17782072722911835,
+ 0.016683008521795273,
+ 0.09398216754198074,
+ 0.0009104206110350788,
+ 0.010129650123417377,
+ 0.13159960508346558,
+ 0.03592286258935928,
+ -0.008510339073836803,
+ -0.1079682931303978,
+ 0.018063673749566078,
+ -0.07589083909988403,
+ 0.053342584520578384,
+ 0.017478473484516144,
+ 0.05279942974448204,
+ 0.05174185708165169,
+ 0.1171601414680481,
+ 0.037189844995737076,
+ 0.036696907132864,
+ -0.2835801839828491,
+ 0.02954948879778385,
+ -0.14355909824371338,
+ 0.14295746386051178,
+ -0.006755168549716473,
+ 0.04022542014718056,
+ -0.0073356470093131065,
+ 0.029745694249868393,
+ 0.16948921978473663,
+ 0.036058347672224045,
+ -0.23549194633960724,
+ -0.068946972489357,
+ 0.06212791055440903,
+ 0.08875610679388046,
+ 0.14584296941757202,
+ 0.023215170949697495,
+ -0.6775221824645996,
+ -0.047236815094947815,
+ -0.21048469841480255,
+ 0.05047723650932312,
+ 0.028359970077872276,
+ -0.45001962780952454,
+ 0.047964099794626236,
+ 0.04154519364237785,
+ -0.021934567019343376,
+ -0.596041738986969,
+ -0.04739311710000038,
+ -0.48127856850624084,
+ 0.04063626006245613,
+ -0.03214060142636299,
+ 0.1294226497411728,
+ -0.11068681627511978,
+ 0.10164506733417511,
+ 0.042889583855867386,
+ -0.030884895473718643,
+ -0.13194581866264343,
+ 0.09165879338979721,
+ -0.09304430335760117
+ ],
+ [
+ 0.05927729234099388,
+ -0.04080034792423248,
+ 0.0045895446091890335,
+ -0.015026696026325226,
+ 0.08820954710245132,
+ -0.01579476334154606,
+ 0.11670828610658646,
+ 0.01974877342581749,
+ -0.16741134226322174,
+ 0.18911658227443695,
+ 0.12600496411323547,
+ 0.01793961226940155,
+ 0.24705548584461212,
+ -0.03416374325752258,
+ 0.017679043114185333,
+ -0.042155589908361435,
+ -0.01418888196349144,
+ -0.0316920168697834,
+ -0.12243267148733139,
+ -0.032390058040618896,
+ -0.03941312059760094,
+ -0.010874838568270206,
+ 0.035786811262369156,
+ -0.12955987453460693,
+ -0.1394377201795578,
+ -0.15552803874015808,
+ -0.030987141653895378,
+ 0.0941588506102562,
+ 0.005113832652568817,
+ 0.007594419177621603,
+ -0.031324490904808044,
+ -0.044215474277734756,
+ -0.018272534012794495,
+ 0.01632906310260296,
+ -0.2206863909959793,
+ 0.1332484483718872,
+ 0.04491109028458595,
+ -0.17643041908740997,
+ 0.02061809040606022,
+ 0.004753515589982271,
+ 0.07232297211885452,
+ -0.06613914668560028,
+ 0.2680169343948364,
+ 0.12306854873895645,
+ 0.15085719525814056,
+ 0.05817614123225212,
+ 0.13488906621932983,
+ -0.033693715929985046,
+ -0.12351356446743011,
+ 0.21045829355716705,
+ -0.0027632650453597307,
+ 0.16401566565036774,
+ -0.062194984406232834,
+ 0.17648883163928986,
+ 0.186547189950943,
+ 0.0046088178642094135,
+ 0.08602715283632278,
+ 0.07607992738485336,
+ 0.08184435218572617,
+ 0.05599053576588631,
+ 0.12118565291166306,
+ 0.21106424927711487,
+ -0.04509493336081505,
+ 0.01290035992860794,
+ -0.13690073788166046,
+ 0.10442542284727097,
+ 0.05121029168367386,
+ 0.09293413162231445,
+ -0.08502528071403503,
+ -0.026876533403992653,
+ -0.09911118447780609,
+ -0.03521854802966118,
+ -0.14729048311710358,
+ -0.01226585078984499,
+ -0.019324135035276413,
+ 0.20008818805217743,
+ -0.07489624619483948,
+ -0.068305104970932,
+ -0.042914681136608124,
+ -0.0816175565123558,
+ -0.20135782659053802,
+ -0.1433621197938919,
+ 0.042012039572000504,
+ -0.16165804862976074,
+ 0.004701828584074974,
+ -0.00538162374868989,
+ -0.1241571232676506,
+ 0.0637902319431305,
+ -0.022987039759755135,
+ 0.03398121893405914,
+ 0.03981027752161026,
+ -0.0005038785748183727,
+ 0.06766356527805328,
+ -0.10969240963459015,
+ 0.04098111763596535,
+ -0.011221442371606827,
+ 0.019288398325443268,
+ 0.019808968529105186,
+ -0.09669153392314911,
+ -0.10390061885118484,
+ -0.10525468736886978,
+ 0.12109336256980896,
+ -0.0285157673060894,
+ 0.1513492316007614,
+ 0.03275969624519348,
+ 0.03730916231870651,
+ -0.0036404121201485395,
+ 0.019858477637171745,
+ -0.06727392226457596,
+ 0.07111500948667526,
+ -0.03786486014723778,
+ 0.18430368602275848,
+ -0.04535341262817383,
+ -0.05884890258312225,
+ -0.007395537104457617,
+ -0.046449337154626846,
+ 0.06282126158475876,
+ 0.05068972706794739,
+ -0.00897266622632742,
+ 0.04791278392076492,
+ 0.06286835670471191,
+ -0.12306797504425049,
+ 0.12870927155017853,
+ -0.03549109399318695,
+ 0.19998939335346222,
+ 0.09145954996347427,
+ 0.07121636718511581,
+ 0.12775221467018127
+ ],
+ [
+ -0.18863828480243683,
+ 0.13802814483642578,
+ 0.011659153737127781,
+ -0.09028783440589905,
+ -0.12011153250932693,
+ -0.1248089000582695,
+ -0.1540067344903946,
+ 0.13314023613929749,
+ 0.02796090766787529,
+ 0.04794574901461601,
+ 0.16549047827720642,
+ 0.14027254283428192,
+ 0.2159137725830078,
+ -0.3342932462692261,
+ -0.10867980867624283,
+ 0.12314080446958542,
+ 0.24799218773841858,
+ 0.007029733154922724,
+ 0.3517593443393707,
+ 0.20524971187114716,
+ -0.1111295148730278,
+ 0.015840958803892136,
+ 0.10552038252353668,
+ -0.028550803661346436,
+ -0.012343713082373142,
+ -0.05760304257273674,
+ 0.07848094403743744,
+ -0.4578622877597809,
+ -0.023597905412316322,
+ 0.023705508559942245,
+ 0.11210179328918457,
+ 0.14420783519744873,
+ -0.02648250013589859,
+ 0.12285242974758148,
+ -0.11761555075645447,
+ 0.025227995589375496,
+ -0.05908258631825447,
+ 0.04673607647418976,
+ 0.25781145691871643,
+ -0.00534990755841136,
+ -0.0687614157795906,
+ -0.10785610973834991,
+ 0.133162721991539,
+ 0.042215123772621155,
+ 0.0449877493083477,
+ -0.5618857145309448,
+ -0.028807340189814568,
+ -0.014855315908789635,
+ 0.008101169019937515,
+ 0.1618019938468933,
+ -0.16945302486419678,
+ -0.1978403925895691,
+ -0.06837091594934464,
+ -0.03944693133234978,
+ -0.00402437848970294,
+ 0.16741715371608734,
+ -0.024829473346471786,
+ 0.04997527226805687,
+ -0.10996900498867035,
+ 0.12391627579927444,
+ -0.04603812098503113,
+ 0.04676542803645134,
+ 0.03522162139415741,
+ 0.03009788878262043,
+ -0.016470113769173622,
+ 0.0056106229312717915,
+ 0.19896285235881805,
+ -0.00954469945281744,
+ -0.10910220444202423,
+ -0.06468662619590759,
+ -0.015788929536938667,
+ -0.11197644472122192,
+ 0.06381752341985703,
+ -0.021336887031793594,
+ -0.019491834565997124,
+ 0.08358027786016464,
+ -0.0016401486936956644,
+ -0.008876850828528404,
+ -0.22529494762420654,
+ -0.13062526285648346,
+ -0.10566311329603195,
+ -0.12546922266483307,
+ -0.08323357999324799,
+ 0.014096773229539394,
+ -0.14815160632133484,
+ -0.0045191338285803795,
+ 0.09776374697685242,
+ -0.08853740245103836,
+ -0.18871860206127167,
+ -0.0019081158097833395,
+ -0.1800527125597,
+ -0.018966803327202797,
+ -0.20852375030517578,
+ 0.03136094659566879,
+ -0.012602409347891808,
+ -0.0258474238216877,
+ -0.045244768261909485,
+ 0.0544578917324543,
+ 0.01456401590257883,
+ -0.0027459843549877405,
+ 0.14419884979724884,
+ 0.04964772239327431,
+ 0.03521395102143288,
+ -0.016228221356868744,
+ -0.02864147536456585,
+ -0.02788839302957058,
+ -0.27481281757354736,
+ -0.20274101197719574,
+ -0.016517456620931625,
+ 0.06953984498977661,
+ -0.046268071979284286,
+ 0.11017832159996033,
+ 0.1166820079088211,
+ -0.096051886677742,
+ -0.015064023435115814,
+ -0.046748459339141846,
+ -0.19804047048091888,
+ 0.049726299941539764,
+ 0.12597915530204773,
+ 0.12882453203201294,
+ -0.1046181470155716,
+ 0.014702286571264267,
+ 0.11417761445045471,
+ 0.13632147014141083,
+ -0.1344628632068634,
+ -0.09819568693637848,
+ 0.18047554790973663,
+ 0.004963807296007872
+ ],
+ [
+ -0.09002082049846649,
+ -0.08129559457302094,
+ -0.04166140407323837,
+ 0.014535960741341114,
+ 0.03620045259594917,
+ 0.08880089968442917,
+ -0.04947185888886452,
+ 0.055668700486421585,
+ -0.04375359043478966,
+ -0.03112468682229519,
+ 0.029770459979772568,
+ 0.11217477172613144,
+ 0.01137261837720871,
+ -0.10682950913906097,
+ 0.06273709237575531,
+ -0.0478987954556942,
+ 0.020192114636301994,
+ -0.06250475347042084,
+ 0.08323966711759567,
+ 0.0370660200715065,
+ 0.07346628606319427,
+ 0.07532497495412827,
+ 0.03203747794032097,
+ 0.09356728941202164,
+ -0.04986974596977234,
+ -0.0072738537564873695,
+ 0.05784117057919502,
+ -0.03966808319091797,
+ 0.009404870681464672,
+ -0.009851645678281784,
+ -0.03465047851204872,
+ 0.04189971089363098,
+ -0.21373358368873596,
+ 0.002556543331593275,
+ -0.036918748170137405,
+ -0.09380887448787689,
+ 0.002836011815816164,
+ 0.12916631996631622,
+ 0.07554636895656586,
+ 0.040415577590465546,
+ -0.07146596908569336,
+ -0.0027707009576261044,
+ 0.04369776323437691,
+ -0.012271923944354057,
+ -0.006677041295915842,
+ 0.008487197570502758,
+ -0.026980556547641754,
+ 0.07671336084604263,
+ -0.02412811852991581,
+ 0.11114570498466492,
+ -0.03412793204188347,
+ -0.08652301132678986,
+ -0.005597091745585203,
+ 0.0009268690482713282,
+ 0.026081858202815056,
+ 0.10593872517347336,
+ -0.06961813569068909,
+ 0.09318923950195312,
+ -0.02331349439918995,
+ 0.05721530690789223,
+ 0.07916276901960373,
+ 0.02368125505745411,
+ 0.0403168685734272,
+ 0.06356401741504669,
+ 0.02727501653134823,
+ -0.023504149168729782,
+ 0.09742307662963867,
+ 0.021443061530590057,
+ 0.007009182590991259,
+ -0.009172353893518448,
+ 0.06531183421611786,
+ 0.004403716418892145,
+ 0.06598854064941406,
+ -0.06144307181239128,
+ -0.03925139456987381,
+ -0.09862947463989258,
+ 0.0628843903541565,
+ -0.00937437079846859,
+ 0.04518982768058777,
+ 0.018025649711489677,
+ -0.10106479376554489,
+ -0.021943535655736923,
+ 0.0723634883761406,
+ 0.11731875687837601,
+ -0.016155093908309937,
+ -0.0742952972650528,
+ -0.07631713151931763,
+ 0.03005196712911129,
+ -0.05594811588525772,
+ 0.06467210501432419,
+ -0.0912412777543068,
+ -0.017386876046657562,
+ -0.04685530811548233,
+ 0.03757491707801819,
+ -0.010344387963414192,
+ -0.015283018350601196,
+ 0.0583786815404892,
+ -0.036341916769742966,
+ 0.10519305616617203,
+ 0.06956180930137634,
+ 0.05848216265439987,
+ 0.02404031716287136,
+ 0.03199658542871475,
+ -0.009530849754810333,
+ 0.025023749098181725,
+ 0.006529180333018303,
+ -0.0681510642170906,
+ -0.07443667948246002,
+ -0.03589214012026787,
+ -0.08459828794002533,
+ -0.019702091813087463,
+ 0.012889834120869637,
+ 0.12761518359184265,
+ 0.05959593504667282,
+ 0.07163389027118683,
+ 0.02614159695804119,
+ 0.01046692207455635,
+ 0.06726005673408508,
+ 0.05341964587569237,
+ -0.07199248671531677,
+ 0.04260685667395592,
+ -0.015671614557504654,
+ -0.06717237830162048,
+ 0.039600007236003876,
+ -0.1083158403635025,
+ 0.0624048076570034,
+ -0.026848861947655678,
+ -0.01677272841334343
+ ],
+ [
+ -0.050523966550827026,
+ 0.25891542434692383,
+ 0.2640231251716614,
+ -0.28082171082496643,
+ -0.05332006886601448,
+ 0.03240310400724411,
+ -0.2024172693490982,
+ 0.20008635520935059,
+ -0.04879515618085861,
+ -0.08151262998580933,
+ -0.19367563724517822,
+ -0.105728879570961,
+ 0.1392727792263031,
+ -0.38764488697052,
+ -0.5616477131843567,
+ 0.06448723375797272,
+ 0.0347556509077549,
+ -0.21958142518997192,
+ 0.2050047516822815,
+ 0.23046445846557617,
+ -0.8099494576454163,
+ -0.009935270063579082,
+ 0.3073028028011322,
+ -0.004186827223747969,
+ -0.049090199172496796,
+ -0.016187766566872597,
+ 0.16877053678035736,
+ -0.9122653007507324,
+ -0.08807170391082764,
+ 0.12996608018875122,
+ 0.061140939593315125,
+ 0.14820325374603271,
+ -0.43787574768066406,
+ 0.12810663878917694,
+ -0.05214862525463104,
+ -0.5566034913063049,
+ -0.3431795835494995,
+ 0.20852522552013397,
+ 0.06425745040178299,
+ -0.05986493453383446,
+ 0.10967143625020981,
+ -0.14359736442565918,
+ -0.05603840574622154,
+ 0.18075190484523773,
+ -0.24507732689380646,
+ 0.03705955296754837,
+ -0.23538142442703247,
+ 0.07322388142347336,
+ 0.22042463719844818,
+ 0.10565204173326492,
+ -0.7055004239082336,
+ -0.11639048904180527,
+ 0.07104384154081345,
+ -0.07209401577711105,
+ 0.021379850804805756,
+ 0.09456497430801392,
+ 0.13697779178619385,
+ 0.26432329416275024,
+ -0.36552876234054565,
+ 0.05876585468649864,
+ -0.19182252883911133,
+ 0.10540588945150375,
+ -0.09928885847330093,
+ 0.2814381718635559,
+ -0.025258343666791916,
+ -0.2293490618467331,
+ 0.1822151094675064,
+ -0.05179353058338165,
+ 0.028584452345967293,
+ 0.046763114631175995,
+ 0.06332793831825256,
+ 0.027545856311917305,
+ 0.1669316440820694,
+ -0.036795686930418015,
+ 0.0316133089363575,
+ -0.08753926306962967,
+ 0.36007654666900635,
+ -0.8609288334846497,
+ -0.17672213912010193,
+ -0.35183385014533997,
+ 0.014326651580631733,
+ -0.04736480861902237,
+ -0.4864243268966675,
+ -0.02096990868449211,
+ -0.09493817389011383,
+ 0.06365466117858887,
+ 0.13896393775939941,
+ 0.004313118290156126,
+ -0.544935405254364,
+ 0.05643470585346222,
+ -0.8357908725738525,
+ -0.14578953385353088,
+ -0.1520068198442459,
+ -0.03249762952327728,
+ -0.3681516647338867,
+ -0.28255191445350647,
+ -0.6120071411132812,
+ 0.018742861226201057,
+ 0.05178051441907883,
+ -0.3815155029296875,
+ 0.15658916532993317,
+ 0.009062564931809902,
+ 0.13660481572151184,
+ -0.17090663313865662,
+ -0.13919861614704132,
+ -0.5508991479873657,
+ -0.49128398299217224,
+ -1.9056625366210938,
+ -0.0840110257267952,
+ 0.06814945489168167,
+ -0.10277565568685532,
+ 0.6403352618217468,
+ 0.12030179053544998,
+ 0.032622989267110825,
+ -1.382047414779663,
+ 0.1046234592795372,
+ 0.4694845974445343,
+ -0.05390448495745659,
+ -0.09217114001512527,
+ 0.4233892858028412,
+ -0.10116828233003616,
+ -0.2311173528432846,
+ 0.10938592255115509,
+ 0.24289678037166595,
+ -0.05838168039917946,
+ -0.7116761207580566,
+ 0.14414525032043457,
+ -0.09739848226308823
+ ],
+ [
+ -0.030432404950261116,
+ 0.317840039730072,
+ 0.013277520425617695,
+ -0.04185384884476662,
+ 0.01645059697329998,
+ 0.020740671083331108,
+ -0.054308682680130005,
+ 0.17277248203754425,
+ -0.07035251706838608,
+ 0.14960794150829315,
+ 0.08494533598423004,
+ 0.03291182592511177,
+ 0.1033465713262558,
+ -0.27629250288009644,
+ -0.07660665363073349,
+ 0.07581278681755066,
+ 0.09606751054525375,
+ 0.014061927795410156,
+ 0.027231819927692413,
+ -0.11631883680820465,
+ 0.16448764503002167,
+ -0.14898106455802917,
+ -0.06412886828184128,
+ -0.00975930504500866,
+ -0.036471009254455566,
+ -0.19172635674476624,
+ -0.07843971252441406,
+ 0.12440459430217743,
+ -0.12893244624137878,
+ -0.18176667392253876,
+ 0.1183137521147728,
+ 0.24120889604091644,
+ 0.05860809609293938,
+ 0.021550340577960014,
+ 0.11726503074169159,
+ -0.17124974727630615,
+ -0.1591860055923462,
+ 0.04030216485261917,
+ 0.032634057104587555,
+ 0.04396551847457886,
+ 0.10628453642129898,
+ 0.053640447556972504,
+ 0.05780256167054176,
+ -0.017011012881994247,
+ -0.5366721153259277,
+ 0.011472483165562153,
+ -0.06359584629535675,
+ 0.0509444922208786,
+ 0.01921316422522068,
+ 0.23585614562034607,
+ -0.10114719718694687,
+ 0.06528592109680176,
+ 0.03780950605869293,
+ 0.010459527373313904,
+ 0.007124691735953093,
+ 0.03254646435379982,
+ -0.11831511557102203,
+ 0.07821981608867645,
+ -0.2843676805496216,
+ -0.5560430288314819,
+ -0.09154951572418213,
+ 0.18567122519016266,
+ 0.005736490245908499,
+ 0.16698871552944183,
+ -0.09317448735237122,
+ 0.19526956975460052,
+ 0.08188746869564056,
+ -0.07202699780464172,
+ -0.08093417435884476,
+ 0.593601405620575,
+ 0.09591300785541534,
+ -0.007259118836373091,
+ -0.0008278342429548502,
+ -0.008564295247197151,
+ -0.2826215922832489,
+ -0.2186349332332611,
+ -0.022631848230957985,
+ 0.057230643928050995,
+ -0.07506442815065384,
+ -0.004341702442616224,
+ 0.09283540397882462,
+ 0.14537081122398376,
+ -0.11455120891332626,
+ 0.11741882562637329,
+ -0.35539305210113525,
+ 0.030125517398118973,
+ 0.1858861893415451,
+ -0.14165769517421722,
+ -0.08454698324203491,
+ -0.3559980094432831,
+ -0.04340226948261261,
+ 0.11771798878908157,
+ -0.10764620453119278,
+ -0.008347862400114536,
+ 0.06877920776605606,
+ -0.23139286041259766,
+ 0.08371387422084808,
+ -0.8451933860778809,
+ -0.0855465680360794,
+ 0.04454021900892258,
+ 0.16984042525291443,
+ -0.21380719542503357,
+ 0.11908365041017532,
+ -0.12613028287887573,
+ 0.008390638045966625,
+ -0.014750564470887184,
+ 0.24154506623744965,
+ -0.09350886195898056,
+ -0.08326970785856247,
+ -0.014666804112493992,
+ -0.08737348765134811,
+ -0.1543010175228119,
+ 0.6352481245994568,
+ 0.029556090012192726,
+ 0.07766562700271606,
+ 0.21625633537769318,
+ 0.21382559835910797,
+ 0.04633805528283119,
+ -0.005132277961820364,
+ -0.0891478955745697,
+ 0.07734435051679611,
+ -0.13191959261894226,
+ -0.1643320620059967,
+ 0.1717858761548996,
+ 0.09972892701625824,
+ -0.8480440378189087,
+ -0.1490955501794815,
+ 0.11247878521680832
+ ],
+ [
+ 0.056460902094841,
+ 0.0006469623767770827,
+ -0.05973278731107712,
+ 0.0018377829110249877,
+ -0.00393964909017086,
+ 0.026966676115989685,
+ -0.011904871091246605,
+ 0.029345497488975525,
+ 0.015089625492691994,
+ 0.02738172933459282,
+ 0.058171115815639496,
+ 0.07294687628746033,
+ 0.07231537252664566,
+ 0.025667952373623848,
+ 0.04503732547163963,
+ -0.07386339455842972,
+ -0.005277142859995365,
+ 0.05141281709074974,
+ 0.03686732053756714,
+ 0.025259681046009064,
+ -0.02375241182744503,
+ -0.020918671041727066,
+ -0.004051933065056801,
+ 0.09533669054508209,
+ 0.009660796262323856,
+ -0.036179546266794205,
+ 0.10656203329563141,
+ 0.031133655458688736,
+ 0.04415581002831459,
+ -0.03401448577642441,
+ -0.010166311636567116,
+ -0.02527250535786152,
+ -0.07661668211221695,
+ 0.07051537930965424,
+ 0.006892517674714327,
+ -0.12280473858118057,
+ -0.001083078677766025,
+ 0.03337183594703674,
+ 0.0533129908144474,
+ -0.05124905705451965,
+ -0.06684527546167374,
+ 0.08395195007324219,
+ 0.015095474198460579,
+ -0.010526641272008419,
+ -0.07194851338863373,
+ -0.041995901614427567,
+ 0.054696254432201385,
+ 0.020865511149168015,
+ 0.06564145535230637,
+ 0.04294843226671219,
+ -0.07302206754684448,
+ 0.009092512540519238,
+ 0.009298236109316349,
+ -0.032159797847270966,
+ -0.001033599372021854,
+ 0.014466164633631706,
+ -0.02877863124012947,
+ 0.05673256516456604,
+ -0.06691016256809235,
+ 0.03824690729379654,
+ 0.02261652611196041,
+ 0.02796918712556362,
+ -0.010538391768932343,
+ 0.025026218965649605,
+ 0.06278077512979507,
+ 0.051100000739097595,
+ 0.04948653653264046,
+ -0.0007080921204760671,
+ -0.04930480197072029,
+ -0.06682547926902771,
+ 0.037406180053949356,
+ -0.04713958874344826,
+ 0.0850658118724823,
+ -0.054741021245718,
+ -0.0626959502696991,
+ -0.10096988081932068,
+ 0.06401564925909042,
+ -0.04253922030329704,
+ 0.0055317687802016735,
+ 0.01658863201737404,
+ 0.05202440917491913,
+ 0.043474264442920685,
+ -0.06714737415313721,
+ 0.06707330048084259,
+ -0.05137902870774269,
+ -0.03830952197313309,
+ 0.012345831841230392,
+ 0.0024281374644488096,
+ -0.012845181860029697,
+ 0.050673093646764755,
+ 0.05012684687972069,
+ 0.06361361593008041,
+ -0.019020620733499527,
+ 0.0533851720392704,
+ -0.012245483696460724,
+ -0.023954059928655624,
+ 0.023678315803408623,
+ -0.008655951358377934,
+ -0.004141473677009344,
+ 0.009108210913836956,
+ 0.024071527644991875,
+ 0.052295394241809845,
+ 0.048978712409734726,
+ -0.052522625774145126,
+ 0.04037332162261009,
+ -0.0919712707400322,
+ 0.0285762008279562,
+ 0.057007383555173874,
+ 0.005972222425043583,
+ 0.014043763279914856,
+ 0.017137160524725914,
+ -0.034065112471580505,
+ 0.08476892858743668,
+ 0.006287887692451477,
+ 0.0489974170923233,
+ -0.006413774564862251,
+ 0.007512648589909077,
+ -0.025745386257767677,
+ 0.0031993165612220764,
+ 0.02622719295322895,
+ -0.07621300965547562,
+ 0.028058957308530807,
+ -0.015017742291092873,
+ 0.009696311317384243,
+ -0.02364412695169449,
+ -0.001216136384755373,
+ -0.016832483932375908,
+ 0.07113596051931381
+ ],
+ [
+ -0.0036322029773145914,
+ -0.012416079640388489,
+ 0.0005242801853455603,
+ -0.0069754458963871,
+ -0.010156288743019104,
+ -0.005528849083930254,
+ -0.004267557989805937,
+ -0.0011310884729027748,
+ -0.0050515769980847836,
+ -0.004076057579368353,
+ 0.0033928819466382265,
+ -6.12938092672266e-05,
+ -0.00047095734043978155,
+ 0.0037004859186708927,
+ -0.007446396164596081,
+ -0.0021680286154150963,
+ 0.01011741068214178,
+ -0.004982414189726114,
+ 0.008182257413864136,
+ -0.008148100227117538,
+ -0.006507983896881342,
+ -0.002860765904188156,
+ -0.008440257981419563,
+ -0.0024951354134827852,
+ -0.007727718446403742,
+ 0.008852523751556873,
+ -0.0028444002382457256,
+ -0.002813636092469096,
+ -0.0007463045767508447,
+ 0.0012131485855206847,
+ -0.011911490000784397,
+ 0.002062804065644741,
+ -0.008210757747292519,
+ 0.004965110681951046,
+ 0.0017369335982948542,
+ 0.0019448067760095,
+ 0.005741000175476074,
+ -0.011701030656695366,
+ -0.0051679168827831745,
+ -0.0004748135106638074,
+ 0.0023951856419444084,
+ -0.0020187923219054937,
+ -0.0019059327896684408,
+ 0.002149492036551237,
+ -0.0015696781920269132,
+ 0.018494855612516403,
+ -0.006562946829944849,
+ -0.008603306487202644,
+ 0.009217359125614166,
+ -0.014968653209507465,
+ -0.007102627772837877,
+ 0.0014820306096225977,
+ -0.012520276941359043,
+ 0.015932366251945496,
+ -0.004165792837738991,
+ 0.004580152221024036,
+ 0.01416345126926899,
+ 0.010918189771473408,
+ -0.010895070619881153,
+ -0.002640943042933941,
+ -0.003425228875130415,
+ -0.0028913491405546665,
+ 0.0036646046210080385,
+ 0.00031035669962875545,
+ 0.004694185685366392,
+ -0.010493380017578602,
+ 0.008804721757769585,
+ 0.008817569352686405,
+ -0.003400815185159445,
+ -0.002175969071686268,
+ 0.01352107897400856,
+ -0.0038962680846452713,
+ -0.0027411740738898516,
+ -0.0014935113722458482,
+ -0.007055308669805527,
+ 0.0031622129026800394,
+ -0.007761009968817234,
+ -0.016658436506986618,
+ 0.0005871079047210515,
+ 0.0012646719114854932,
+ 0.0012463134480640292,
+ -0.012074711732566357,
+ -0.00014673982514068484,
+ -0.00020626875630114228,
+ 0.007381488103419542,
+ 0.008660870604217052,
+ -0.008588679134845734,
+ 0.010021986439824104,
+ 0.0002924166328739375,
+ 0.0013516700128093362,
+ 0.014274848625063896,
+ -0.0009187801624648273,
+ -0.01434001699090004,
+ 0.009050394408404827,
+ 0.008913898840546608,
+ 0.0016001100884750485,
+ -0.005442966241389513,
+ 1.758213693392463e-05,
+ 0.0005831856396980584,
+ -0.014636417850852013,
+ 0.0033769968431442976,
+ -0.00045642093755304813,
+ 0.006333374418318272,
+ -0.0003944170312024653,
+ -0.004370789043605328,
+ -0.0066308933310210705,
+ 0.0026707604993134737,
+ -0.0004724801692645997,
+ -0.003524726489558816,
+ 0.00977078266441822,
+ -0.00014404176909010857,
+ -0.02232786826789379,
+ 0.01720087230205536,
+ -0.004387080669403076,
+ -0.008015339262783527,
+ 0.0047739604488015175,
+ 0.005014955531805754,
+ 0.00823309738188982,
+ 0.0021117860451340675,
+ -0.0005273944698274136,
+ 0.0037050251848995686,
+ -0.004796420689672232,
+ -0.004929990042001009,
+ 0.010750534012913704,
+ -0.004486578982323408,
+ -0.0035492212045937777,
+ -0.0007282084552571177,
+ 0.004496285226196051
+ ],
+ [
+ -0.07206837087869644,
+ 0.06448623538017273,
+ -0.05858830362558365,
+ 0.051728978753089905,
+ 0.023024171590805054,
+ 0.03600110486149788,
+ -0.07734877616167068,
+ 0.04986626282334328,
+ 0.05140470340847969,
+ -0.12233088910579681,
+ 0.028330354019999504,
+ 0.07548289000988007,
+ -0.006406498607248068,
+ 0.20547159016132355,
+ -0.141757532954216,
+ -0.13326941430568695,
+ 0.24483036994934082,
+ -0.12101755291223526,
+ -0.014380883425474167,
+ -0.052867595106363297,
+ -0.22885198891162872,
+ 0.13686849176883698,
+ -0.19344015419483185,
+ -0.012478487566113472,
+ 0.010642435401678085,
+ -0.18253260850906372,
+ 0.03798770532011986,
+ -0.36676204204559326,
+ 0.14655658602714539,
+ 0.12942887842655182,
+ 0.11087081581354141,
+ -0.17374074459075928,
+ -0.30833157896995544,
+ 0.14044351875782013,
+ 0.029711250215768814,
+ -0.09673439711332321,
+ 0.03407661244273186,
+ 0.15610165894031525,
+ 0.09338663518428802,
+ 0.07154753059148788,
+ -0.07305078953504562,
+ -0.22086596488952637,
+ -0.24463993310928345,
+ 0.07657655328512192,
+ -0.22644200921058655,
+ -0.6683581471443176,
+ 0.28358837962150574,
+ -0.12128029018640518,
+ 0.032413918524980545,
+ -0.04831603169441223,
+ -0.09830667078495026,
+ 0.08720036596059799,
+ 0.06022457033395767,
+ 0.08593052625656128,
+ -0.07814031094312668,
+ 0.11881227046251297,
+ 0.16968248784542084,
+ -0.02303691953420639,
+ -0.034872591495513916,
+ 0.040614958852529526,
+ 0.002785144839435816,
+ 0.11403393000364304,
+ 0.04930868372321129,
+ -0.0002757177862804383,
+ 0.06357062608003616,
+ -0.00350449257530272,
+ 0.060427360236644745,
+ -0.27137890458106995,
+ 0.06843067705631256,
+ 0.06966497749090195,
+ 0.14403340220451355,
+ -0.15156199038028717,
+ 0.07504509389400482,
+ -0.22142574191093445,
+ -0.1295275241136551,
+ 0.03274773433804512,
+ 0.060876909643411636,
+ 0.020623942837119102,
+ -0.231109619140625,
+ -0.06197154149413109,
+ -0.24773262441158295,
+ 0.1310271918773651,
+ 0.058903567492961884,
+ -0.053562674671411514,
+ -0.022867659106850624,
+ 0.05235036090016365,
+ 0.033555373549461365,
+ 0.13029436767101288,
+ -0.04387717694044113,
+ 0.012062768451869488,
+ 0.06135736033320427,
+ 0.09473945200443268,
+ -0.39091140031814575,
+ 0.13202475011348724,
+ -0.04673781991004944,
+ 0.11487162113189697,
+ -0.08407820761203766,
+ -0.04127135127782822,
+ 0.027620213106274605,
+ -0.10787361860275269,
+ 0.053172044456005096,
+ 0.11614623665809631,
+ -0.04375189542770386,
+ 0.012034821324050426,
+ 0.03731787949800491,
+ -0.08775321394205093,
+ -0.018301252275705338,
+ 0.15277153253555298,
+ -0.3587838113307953,
+ -0.06818961352109909,
+ 0.048661936074495316,
+ 0.04346393421292305,
+ 0.03670266643166542,
+ -0.0031503329519182444,
+ 0.10299006849527359,
+ 0.010888492688536644,
+ 0.24071373045444489,
+ 0.058078959584236145,
+ 0.11848308891057968,
+ 0.06935173273086548,
+ -0.14377331733703613,
+ -0.03845414146780968,
+ 0.05799301341176033,
+ 0.08206411451101303,
+ -0.6852760910987854,
+ -0.09428318589925766,
+ 0.07413560152053833,
+ -0.1140931248664856
+ ],
+ [
+ -0.010131812654435635,
+ 0.10097990930080414,
+ -0.20737190544605255,
+ 0.13118232786655426,
+ 0.24356400966644287,
+ -0.03779494762420654,
+ -0.5962477326393127,
+ -0.32456308603286743,
+ 0.10129615664482117,
+ -0.09686974436044693,
+ 0.19153966009616852,
+ -0.03318970650434494,
+ -0.3374251127243042,
+ 0.002903660060837865,
+ 0.01882133260369301,
+ 0.013651769608259201,
+ -0.5167500972747803,
+ -0.10395104438066483,
+ -0.4693738520145416,
+ 0.21480868756771088,
+ -0.37346217036247253,
+ 0.21762922406196594,
+ -0.661828339099884,
+ 0.06568561494350433,
+ 0.07973172515630722,
+ -0.7144091129302979,
+ -0.14019142091274261,
+ -0.042819250375032425,
+ 0.06731618940830231,
+ 0.13336831331253052,
+ -0.33023324608802795,
+ -0.14978435635566711,
+ 0.06387696415185928,
+ 0.11414007842540741,
+ -0.07744289189577103,
+ -0.15161573886871338,
+ -0.16338148713111877,
+ 0.16705821454524994,
+ 0.18232817947864532,
+ -0.017943337559700012,
+ 0.0005297563620842993,
+ 0.19244103133678436,
+ -0.1585940718650818,
+ -0.01787111908197403,
+ 0.03209875896573067,
+ -0.6730806231498718,
+ 0.1585041731595993,
+ 0.1018826961517334,
+ -0.47400572896003723,
+ 0.04654737561941147,
+ -0.09544811397790909,
+ 0.2909339964389801,
+ 0.02782626263797283,
+ 0.17401735484600067,
+ 0.20644189417362213,
+ -0.3998975455760956,
+ 0.014406917616724968,
+ -0.493539422750473,
+ -0.09538859128952026,
+ -0.1180504709482193,
+ -0.04163781926035881,
+ 0.356374591588974,
+ 0.0823233425617218,
+ 0.08939574658870697,
+ -0.3368508219718933,
+ -0.03319619223475456,
+ 0.13779737055301666,
+ -0.306706964969635,
+ 0.11117183417081833,
+ -0.6898229122161865,
+ -0.013088976964354515,
+ -0.07064581662416458,
+ -0.12098126858472824,
+ -0.2097281515598297,
+ -0.5898545384407043,
+ -0.16226722300052643,
+ -0.027172373607754707,
+ 0.24326112866401672,
+ 0.014298086985945702,
+ 0.2344261258840561,
+ -0.1030227318406105,
+ 0.15521332621574402,
+ -0.08317168802022934,
+ 0.2321217656135559,
+ -0.23724855482578278,
+ 0.2313825488090515,
+ 0.2077067345380783,
+ 0.012028300203382969,
+ -0.0310235433280468,
+ 0.0321817584335804,
+ -0.761491060256958,
+ 0.3588871359825134,
+ -0.8004235029220581,
+ -0.25254133343696594,
+ 0.2385205328464508,
+ 0.21716426312923431,
+ -0.01715037412941456,
+ -0.17999005317687988,
+ -0.4611869752407074,
+ 0.03689286485314369,
+ -0.06774681061506271,
+ 0.13444410264492035,
+ -0.16787870228290558,
+ -0.05301349237561226,
+ -0.032686930149793625,
+ -0.10003988444805145,
+ -0.5625115036964417,
+ 0.1192416399717331,
+ -0.09610766172409058,
+ 0.045969948172569275,
+ -0.08616435527801514,
+ 0.03663567453622818,
+ -0.03506907448172569,
+ 0.2793661653995514,
+ 0.01729045808315277,
+ -0.19029858708381653,
+ 0.10631711781024933,
+ -0.02200859785079956,
+ -0.1375402808189392,
+ -0.06540774554014206,
+ -0.11009930074214935,
+ -0.0791810154914856,
+ 0.0059525188989937305,
+ 0.22254206240177155,
+ 0.13857552409172058,
+ -0.6382758617401123,
+ -0.11515527218580246,
+ -0.13473837077617645
+ ],
+ [
+ 0.007818971760571003,
+ 0.298423171043396,
+ 0.03873715549707413,
+ -0.281228631734848,
+ -0.1448945850133896,
+ 0.007069116923958063,
+ -0.16426528990268707,
+ 0.09726125746965408,
+ 0.17159706354141235,
+ -0.01504322700202465,
+ -0.19063197076320648,
+ -0.2048942744731903,
+ 0.2693907916545868,
+ -0.01348052453249693,
+ -0.37375348806381226,
+ 0.06928037106990814,
+ -0.023305101320147514,
+ -0.17931342124938965,
+ 0.14089229702949524,
+ 0.15701788663864136,
+ -0.6787843108177185,
+ -0.11782397329807281,
+ 0.10762683302164078,
+ -0.011024505831301212,
+ -0.020435212180018425,
+ -0.09656580537557602,
+ 0.2781142294406891,
+ -0.42046117782592773,
+ 0.005417739041149616,
+ -0.07489031553268433,
+ 0.09830142557621002,
+ 0.26509079337120056,
+ -0.2529531717300415,
+ 0.2380482703447342,
+ 0.16759955883026123,
+ -0.31973791122436523,
+ -0.27771857380867004,
+ 0.1473432332277298,
+ 0.019290458410978317,
+ 0.01814866065979004,
+ 0.10067557543516159,
+ -0.07441364973783493,
+ -0.03644012659788132,
+ 0.057341963052749634,
+ -0.09716664999723434,
+ 0.29473555088043213,
+ -0.26572084426879883,
+ -0.11291752755641937,
+ 0.20234903693199158,
+ 0.14151643216609955,
+ -0.32988405227661133,
+ -0.48805785179138184,
+ -0.08222396671772003,
+ -0.05179349333047867,
+ 0.06551972031593323,
+ -0.03339498117566109,
+ 0.007185961585491896,
+ 0.16025452315807343,
+ -0.33218711614608765,
+ 0.08520130813121796,
+ 0.032981567084789276,
+ 0.05687567591667175,
+ 0.04292065277695656,
+ 0.23861832916736603,
+ -0.0718112587928772,
+ -0.04965909570455551,
+ 0.2806243300437927,
+ -0.0873359963297844,
+ -0.07473232597112656,
+ 0.04413152486085892,
+ 0.19899454712867737,
+ -0.08203402161598206,
+ 0.17973153293132782,
+ 0.06589300185441971,
+ 0.01266455091536045,
+ 0.0568668395280838,
+ 0.06539242714643478,
+ -0.6820963621139526,
+ 0.024239543825387955,
+ -0.3339473307132721,
+ 0.03862283006310463,
+ -0.0011403487296774983,
+ -0.17386946082115173,
+ -0.06420623511075974,
+ -0.048178914934396744,
+ 0.06749143451452255,
+ 0.21186956763267517,
+ -0.11361432820558548,
+ -0.5385302305221558,
+ 0.09507540613412857,
+ 0.6424960494041443,
+ -0.1291331648826599,
+ -0.08993947505950928,
+ -0.007789966184645891,
+ -0.7806925773620605,
+ -0.08591597527265549,
+ -0.7246087193489075,
+ 0.07601787894964218,
+ 0.04514610767364502,
+ -0.43109065294265747,
+ 0.07600071281194687,
+ -0.08408557623624802,
+ -0.033987198024988174,
+ -0.025831101462244987,
+ -0.03607494756579399,
+ -0.6744252443313599,
+ -0.21901115775108337,
+ -0.5505521297454834,
+ -0.17528541386127472,
+ 0.13189095258712769,
+ -0.11955741792917252,
+ 0.39555177092552185,
+ 0.1518840789794922,
+ -0.06862549483776093,
+ -0.8982878923416138,
+ -0.004244702402502298,
+ -0.35918402671813965,
+ -0.010855907574295998,
+ -0.06126362085342407,
+ 0.20009319484233856,
+ 0.04267139360308647,
+ -0.3195117115974426,
+ 0.2037869542837143,
+ 0.15432150661945343,
+ -0.32638707756996155,
+ -0.5833671689033508,
+ 0.02945803292095661,
+ -0.21632005274295807
+ ],
+ [
+ 0.01756337098777294,
+ 0.0439942330121994,
+ -0.032467927783727646,
+ -0.021272091194987297,
+ -0.07258469611406326,
+ 0.04237062856554985,
+ -0.10320266336202621,
+ 0.10375718772411346,
+ -0.01625131070613861,
+ 0.023569168522953987,
+ 0.076879121363163,
+ 0.008875813335180283,
+ -0.010136953555047512,
+ -0.10944940149784088,
+ -0.18386051058769226,
+ -0.04280684515833855,
+ 0.04320735111832619,
+ -0.15730510652065277,
+ -0.015046875923871994,
+ 0.05402732267975807,
+ -0.016210993751883507,
+ 0.04442676156759262,
+ -0.08504962176084518,
+ 0.033600207418203354,
+ 0.01429572980850935,
+ -0.21922795474529266,
+ 0.02802887372672558,
+ -0.21205009520053864,
+ -0.035454168915748596,
+ 0.03202896937727928,
+ 0.16341613233089447,
+ -0.09760413318872452,
+ -0.01456579938530922,
+ -0.06215277314186096,
+ 0.08966192603111267,
+ 0.007286007981747389,
+ 0.05366678908467293,
+ 0.11157789081335068,
+ 0.1960938721895218,
+ 0.07421774417161942,
+ 0.015429391525685787,
+ -0.05549872666597366,
+ 0.06948407739400864,
+ 0.05828779563307762,
+ -0.0999470055103302,
+ -0.26329275965690613,
+ 0.0770886167883873,
+ 0.005755765829235315,
+ 0.032069284468889236,
+ 0.07134699076414108,
+ -0.0726892352104187,
+ -0.1491439938545227,
+ -0.006022997200489044,
+ -0.10928529500961304,
+ -0.0257433969527483,
+ 0.043893296271562576,
+ -0.013246994465589523,
+ 0.17516061663627625,
+ -0.07482919096946716,
+ 0.05218246951699257,
+ -0.1843772679567337,
+ 0.08321984112262726,
+ 0.011118046008050442,
+ 0.05875139310956001,
+ 0.07528064399957657,
+ 0.14080578088760376,
+ 0.1493387222290039,
+ 0.10722889751195908,
+ -0.08045214414596558,
+ -0.035011500120162964,
+ 0.00135675142519176,
+ 0.04414280131459236,
+ 0.07001380622386932,
+ 0.05418364703655243,
+ 0.013209705241024494,
+ -0.01353182177990675,
+ 0.07854489237070084,
+ 0.021544383838772774,
+ -0.19948545098304749,
+ 0.025002047419548035,
+ -0.1435409039258957,
+ 0.05166541412472725,
+ -0.06472239643335342,
+ 0.09890373796224594,
+ -0.14997293055057526,
+ -0.09350879490375519,
+ 0.08047406375408173,
+ -0.002517084591090679,
+ -0.1328093558549881,
+ 0.047247715294361115,
+ -0.08026081323623657,
+ 0.0318380743265152,
+ -0.20526641607284546,
+ 0.04420655593276024,
+ 0.08703549951314926,
+ 0.09282776713371277,
+ -0.14883428812026978,
+ 0.04762735217809677,
+ 0.0919484794139862,
+ -0.12519468367099762,
+ 0.07458025962114334,
+ 0.15720701217651367,
+ -0.03176441416144371,
+ 0.09213270992040634,
+ -0.011261987499892712,
+ -0.22462774813175201,
+ -0.1659754067659378,
+ 0.028723448514938354,
+ -0.11639855802059174,
+ -0.04809265956282616,
+ -0.04830390587449074,
+ -0.046834252774715424,
+ 0.2413182556629181,
+ 0.003912505228072405,
+ 0.012142417952418327,
+ -0.038848455995321274,
+ 0.032365165650844574,
+ 0.044666290283203125,
+ 0.058431752026081085,
+ 0.06045066565275192,
+ 0.03633192554116249,
+ 0.002637691330164671,
+ 0.09035307168960571,
+ 0.2491893619298935,
+ -0.3350314795970917,
+ -0.11550258100032806,
+ 0.11901245266199112,
+ -0.0827321857213974
+ ],
+ [
+ 0.06081501021981239,
+ 0.021811971440911293,
+ 0.018994471058249474,
+ -0.1085362508893013,
+ 0.027207819744944572,
+ 0.0994291678071022,
+ 0.06965508311986923,
+ 0.07788306474685669,
+ 0.055785734206438065,
+ 0.07858536392450333,
+ 0.12396637350320816,
+ 0.023039406165480614,
+ -0.09751277416944504,
+ 0.04520241916179657,
+ -0.03865604102611542,
+ 0.07621755450963974,
+ -0.004550247453153133,
+ -0.16688914597034454,
+ 0.07097499072551727,
+ 0.013264700770378113,
+ -0.046212732791900635,
+ -0.08326417952775955,
+ 0.019220933318138123,
+ -0.043337926268577576,
+ 0.062000423669815063,
+ -0.038877248764038086,
+ -0.09867484867572784,
+ 0.0031237713992595673,
+ 0.1132771223783493,
+ -0.06690185517072678,
+ -0.245234876871109,
+ 0.10870189964771271,
+ 0.009637880139052868,
+ 0.018742607906460762,
+ 0.06483510136604309,
+ 0.0979844331741333,
+ 0.007492696866393089,
+ -0.01545935869216919,
+ 0.037687111645936966,
+ -0.013536976650357246,
+ -0.08325828611850739,
+ -0.06029658764600754,
+ 0.10618828982114792,
+ -0.011241868138313293,
+ -0.11882238835096359,
+ 0.06578614562749863,
+ 0.025935450568795204,
+ 0.03133999556303024,
+ -0.025853242725133896,
+ -0.030649367719888687,
+ -0.02388886548578739,
+ -0.05595512315630913,
+ -0.13636866211891174,
+ -0.026975266635417938,
+ -0.14394864439964294,
+ 0.03116626851260662,
+ -0.14203506708145142,
+ -0.08463118225336075,
+ -0.039572007954120636,
+ -0.0016931180143728852,
+ -0.0013084778329357505,
+ -0.13615916669368744,
+ -0.04098600521683693,
+ 0.008066005073487759,
+ -0.07660532742738724,
+ -0.022627053782343864,
+ -0.013851710595190525,
+ 0.006379412487149239,
+ 0.014232429675757885,
+ -0.04307379201054573,
+ -0.10298149287700653,
+ 0.11398547142744064,
+ -0.046580877155065536,
+ -0.024383511394262314,
+ 0.0020681205205619335,
+ -0.19350524246692657,
+ -0.00596274109557271,
+ 0.0981660708785057,
+ 0.021524298936128616,
+ -0.011963463388383389,
+ 0.026499643921852112,
+ -0.022242894396185875,
+ -0.32699689269065857,
+ 0.013319918885827065,
+ 0.09131576120853424,
+ -0.011740774847567081,
+ -0.05320753529667854,
+ 0.002008129144087434,
+ 0.04584449529647827,
+ -0.07457627356052399,
+ -0.08834581077098846,
+ 0.17597413063049316,
+ 0.11214587092399597,
+ -0.04941529035568237,
+ 0.007556448224931955,
+ -0.17090199887752533,
+ -0.0963694378733635,
+ -0.15016445517539978,
+ -0.3409455120563507,
+ -0.04626506194472313,
+ 0.06501035392284393,
+ 0.04889852926135063,
+ -0.01648704521358013,
+ 0.10703827440738678,
+ 0.05845903977751732,
+ -0.031656745821237564,
+ 0.026161422953009605,
+ 0.08858665823936462,
+ 0.007542830426245928,
+ 0.004337786231189966,
+ -0.06966618448495865,
+ 0.04399655759334564,
+ -0.1017666831612587,
+ 0.09753807634115219,
+ 0.10695941001176834,
+ 0.19434699416160583,
+ 0.11447399854660034,
+ -0.02287023700773716,
+ 0.008874362334609032,
+ 0.007014438509941101,
+ -0.050857916474342346,
+ 0.01402221992611885,
+ -0.00919693149626255,
+ 0.09567968547344208,
+ 0.133785679936409,
+ -0.16450440883636475,
+ -0.12346841394901276,
+ 0.0586065836250782
+ ],
+ [
+ 0.0506473034620285,
+ 0.09080252796411514,
+ 0.04324831813573837,
+ -0.021858932450413704,
+ -0.06047965958714485,
+ 0.08834156394004822,
+ 0.01593790389597416,
+ -0.27050769329071045,
+ 0.017794767394661903,
+ -0.04993385449051857,
+ -0.01590183936059475,
+ -0.015625368803739548,
+ -0.016758082434535027,
+ -0.2931942939758301,
+ 0.0423365943133831,
+ -0.154631108045578,
+ -0.17470112442970276,
+ -0.101689413189888,
+ 0.03912084922194481,
+ 0.021804986521601677,
+ -0.0558139868080616,
+ -0.1422976553440094,
+ 0.04069128260016441,
+ -0.0436636321246624,
+ 0.08431258052587509,
+ -0.01221997756510973,
+ -0.4673442840576172,
+ -0.07466408610343933,
+ 0.0036995848640799522,
+ -0.3759593665599823,
+ 0.058024290949106216,
+ -0.13178567588329315,
+ -0.08892663568258286,
+ 0.242336243391037,
+ -0.1493428349494934,
+ 0.19644270837306976,
+ 0.05507059767842293,
+ 0.07590276002883911,
+ -0.06303295493125916,
+ -0.0652441456913948,
+ 0.0648922249674797,
+ -0.22578628361225128,
+ -0.026903273537755013,
+ 0.009222355671226978,
+ 0.1982722133398056,
+ -0.1195550486445427,
+ 0.1269877403974533,
+ 0.01569732464849949,
+ 0.012753034010529518,
+ -0.07449297606945038,
+ -0.04313609004020691,
+ -0.01778772659599781,
+ 0.04421735927462578,
+ -0.007613425143063068,
+ -0.016638655215501785,
+ -0.06784664839506149,
+ -0.01020299643278122,
+ -0.0478522889316082,
+ 0.04801929369568825,
+ -0.029335783794522285,
+ -0.009891035966575146,
+ 0.05118538811802864,
+ 0.02399996668100357,
+ 0.0770433098077774,
+ 0.14091186225414276,
+ -0.009373219683766365,
+ 0.11580551415681839,
+ 0.2879100739955902,
+ -0.10935626178979874,
+ 0.0021371745970100164,
+ -0.007114716339856386,
+ -0.08222746849060059,
+ -0.09296872466802597,
+ -0.011508574709296227,
+ 0.13260239362716675,
+ -0.020283570513129234,
+ 0.057248275727033615,
+ 0.16446608304977417,
+ -0.004295936785638332,
+ -0.09003531187772751,
+ 0.0825750008225441,
+ -0.09556286036968231,
+ 0.030737973749637604,
+ 0.09053275734186172,
+ 0.1774456650018692,
+ 0.07086996734142303,
+ -0.006485829595476389,
+ 0.12799857556819916,
+ 0.001964770257472992,
+ 0.027441207319498062,
+ -0.01874486729502678,
+ 0.11531516164541245,
+ -0.20297755300998688,
+ -0.19651903212070465,
+ -0.0028402444440871477,
+ -0.11818896234035492,
+ -0.03262125328183174,
+ 0.07678226381540298,
+ 0.03305886685848236,
+ 0.02443082630634308,
+ 0.06519877910614014,
+ 0.05529220029711723,
+ -0.026260295882821083,
+ 0.03921579197049141,
+ -0.08173321187496185,
+ -0.014017736539244652,
+ 0.17250540852546692,
+ -0.16763269901275635,
+ -0.1453571617603302,
+ -0.040111467242240906,
+ -0.00014044708223082125,
+ 0.054544977843761444,
+ 0.029216375201940536,
+ -0.020138872787356377,
+ 0.07444655895233154,
+ -0.5583115220069885,
+ 0.12506945431232452,
+ -0.006005831528455019,
+ 0.025875447317957878,
+ 0.1270401030778885,
+ 0.10943803191184998,
+ -0.12334036827087402,
+ 0.04358352720737457,
+ 0.20228368043899536,
+ -0.014483333565294743,
+ 0.07861541211605072,
+ -0.019833000376820564,
+ -0.15551748871803284
+ ],
+ [
+ -0.011639087460935116,
+ 0.14200399816036224,
+ 0.1254170536994934,
+ 0.07063907384872437,
+ -0.18437395989894867,
+ -0.06451601535081863,
+ -0.13226501643657684,
+ -0.07124137878417969,
+ 0.017211880534887314,
+ -0.12133882194757462,
+ -0.025589389726519585,
+ 0.2197813093662262,
+ 0.025306561961770058,
+ -0.005710646044462919,
+ -0.42807871103286743,
+ -0.04124094545841217,
+ 0.3805929720401764,
+ -0.21973416209220886,
+ 0.16426579654216766,
+ -0.16614650189876556,
+ -0.3328489065170288,
+ 0.0703621432185173,
+ -0.5650712251663208,
+ 0.07689489424228668,
+ 0.2074332982301712,
+ -0.4564379155635834,
+ 0.002528207842260599,
+ 0.06538008153438568,
+ 0.13950283825397491,
+ 0.14383243024349213,
+ 0.04772702977061272,
+ 0.10541736334562302,
+ -0.8667005896568298,
+ 0.23547309637069702,
+ 0.05734043940901756,
+ -0.36548277735710144,
+ -0.3459267318248749,
+ 0.2856829762458801,
+ -0.022237759083509445,
+ 0.01322904508560896,
+ -0.004421534948050976,
+ -0.17731522023677826,
+ -0.046439602971076965,
+ 0.04487663507461548,
+ -0.14736954867839813,
+ 0.309561550617218,
+ 0.24844326078891754,
+ -0.008388372138142586,
+ 0.05055363103747368,
+ -0.05554072558879852,
+ -0.17119255661964417,
+ -0.09778013080358505,
+ 0.1296693980693817,
+ 0.06944109499454498,
+ -0.2088676542043686,
+ 0.04874032735824585,
+ 0.11041762679815292,
+ 0.08033840358257294,
+ -0.0006494799163192511,
+ 0.1268027424812317,
+ -0.13766083121299744,
+ 0.10500441491603851,
+ 0.007430489175021648,
+ 0.09392397850751877,
+ 0.07586562633514404,
+ 0.14607150852680206,
+ 0.00831131637096405,
+ 0.05369235575199127,
+ -0.01884145475924015,
+ 0.009620679542422295,
+ 0.05165088176727295,
+ -0.25311699509620667,
+ 0.04885581135749817,
+ -0.036048464477062225,
+ -0.19700457155704498,
+ 0.15330146253108978,
+ 0.18727748095989227,
+ -0.04983442276716232,
+ -0.05490219220519066,
+ -0.9079042673110962,
+ 0.1045481413602829,
+ 0.14665232598781586,
+ -0.20384186506271362,
+ -0.1602231115102768,
+ -0.13420605659484863,
+ -0.06928268074989319,
+ 0.10773379355669022,
+ 0.46489647030830383,
+ -0.30044540762901306,
+ 0.1402941644191742,
+ 0.029404953122138977,
+ 0.12401431798934937,
+ -0.748126745223999,
+ -0.046407993882894516,
+ -0.4952637553215027,
+ -0.04645443707704544,
+ -0.20503072440624237,
+ -0.0680258721113205,
+ 0.22878368198871613,
+ -0.1423254758119583,
+ 0.02721140719950199,
+ 0.37162694334983826,
+ -0.19240018725395203,
+ 0.046682197600603104,
+ 0.1357332468032837,
+ -0.018933096900582314,
+ 0.06522998213768005,
+ -0.28999894857406616,
+ -0.17617376148700714,
+ -0.017141344025731087,
+ -0.13233938813209534,
+ 0.16505025327205658,
+ 0.16044564545154572,
+ -0.16361786425113678,
+ 0.06373869627714157,
+ 0.10295507311820984,
+ -0.006043627392500639,
+ 0.10583989322185516,
+ 0.0997459813952446,
+ 0.11253242194652557,
+ -0.03692075237631798,
+ -0.23435501754283905,
+ 0.0020479001104831696,
+ 0.2025112807750702,
+ -0.07835375517606735,
+ -0.5716217756271362,
+ -0.007385284639894962,
+ 0.06037788838148117
+ ],
+ [
+ -0.12404238432645798,
+ -0.013236228376626968,
+ -0.148006871342659,
+ -0.046231310814619064,
+ -0.053447965532541275,
+ -0.005558034870773554,
+ 0.050123102962970734,
+ 0.256998211145401,
+ 0.010722680017352104,
+ 0.010098368860781193,
+ 0.2576557993888855,
+ 0.11677505075931549,
+ -0.01825680583715439,
+ -0.29400789737701416,
+ -0.08814606815576553,
+ -0.07527513056993484,
+ 0.06657516956329346,
+ -0.024372555315494537,
+ 0.2033901810646057,
+ 0.04944339394569397,
+ -0.26237985491752625,
+ 0.07525193691253662,
+ 0.06951941549777985,
+ -0.011969679035246372,
+ 0.11888431012630463,
+ -0.004548188764601946,
+ -0.0012968177907168865,
+ -0.36087870597839355,
+ -0.07567966729402542,
+ -0.022990969941020012,
+ 0.04016467556357384,
+ 0.1319267898797989,
+ -0.18434296548366547,
+ 0.04442383348941803,
+ -0.35863354802131653,
+ -0.12749610841274261,
+ 0.009427308104932308,
+ 0.10602452605962753,
+ 0.22727200388908386,
+ -0.11736952513456345,
+ -0.010175500065088272,
+ 0.031655751168727875,
+ 0.18658724427223206,
+ 0.07152236998081207,
+ -0.11835465580224991,
+ -0.8692449331283569,
+ -0.06332413852214813,
+ 0.1189093142747879,
+ 0.028538502752780914,
+ 0.06504272669553757,
+ -0.4836111068725586,
+ -0.11841586232185364,
+ 0.13578034937381744,
+ 0.010862606577575207,
+ 0.10056337714195251,
+ 0.12842532992362976,
+ -0.06341321021318436,
+ 0.05460076406598091,
+ 0.002955735893920064,
+ 0.08676008880138397,
+ 0.02189541421830654,
+ -0.011846637353301048,
+ 0.04860095679759979,
+ -0.1043035164475441,
+ -0.05622967332601547,
+ -0.07120835781097412,
+ 0.09317672252655029,
+ 0.01873563602566719,
+ 0.04013371840119362,
+ 0.07898939400911331,
+ -0.030460979789495468,
+ 0.1807820051908493,
+ 0.026772527024149895,
+ 0.09254395961761475,
+ -0.03634931519627571,
+ -0.13232854008674622,
+ 0.012870918959379196,
+ -0.1563621610403061,
+ -0.09395180642604828,
+ 0.012061526998877525,
+ -0.04741579666733742,
+ -0.12959454953670502,
+ 0.01232041697949171,
+ 0.15393339097499847,
+ 0.008067005313932896,
+ -0.054602399468421936,
+ -0.012753425166010857,
+ -0.05413351580500603,
+ -0.040812183171510696,
+ -0.10593456774950027,
+ -0.13260237872600555,
+ -0.0467023029923439,
+ -0.03831164911389351,
+ -0.05577610805630684,
+ -0.019835125654935837,
+ -0.1155974417924881,
+ -0.07162481546401978,
+ 0.06892696768045425,
+ 0.017427751794457436,
+ 0.02779991365969181,
+ -0.005210326984524727,
+ 0.05573827400803566,
+ 0.07035822421312332,
+ 0.09326398372650146,
+ 0.10539558529853821,
+ 0.06531088799238205,
+ -0.5422884225845337,
+ -0.20574726164340973,
+ 0.06217137351632118,
+ 0.049624744802713394,
+ -0.023385055363178253,
+ 0.15359143912792206,
+ 0.15822406113147736,
+ 0.11612459272146225,
+ -0.4588245749473572,
+ 0.02818855084478855,
+ 0.23407787084579468,
+ -0.18611784279346466,
+ 0.23921725153923035,
+ 0.08852078020572662,
+ -0.008376184850931168,
+ -0.14636924862861633,
+ -0.005404219031333923,
+ -0.01216423325240612,
+ -0.05110209062695503,
+ 0.0464441180229187,
+ 0.035048432648181915,
+ 0.006369533017277718
+ ],
+ [
+ -1.708605150660319e-29,
+ -1.2988789608657805e-39,
+ 5.111334127413396e-35,
+ 3.2617243854541453e-25,
+ 6.0757909147941285e-24,
+ 1.75142155249693e-28,
+ -1.0891715852437256e-36,
+ 9.78033773483627e-24,
+ -9.045351542795455e-26,
+ 3.815433109634664e-35,
+ 2.3436503567353303e-34,
+ -8.888139083937878e-38,
+ 2.480018022162061e-41,
+ 4.4757458937550014e-39,
+ 2.5604207852922065e-26,
+ 2.507083037013662e-37,
+ -3.351149225494227e-40,
+ -9.781707878280813e-40,
+ -1.636500900822123e-32,
+ 9.076350283278273e-41,
+ -2.9281812970224242e-40,
+ 1.8146736285147296e-33,
+ -1.3833406672818843e-19,
+ -1.3267731386883668e-29,
+ 3.0663072866509215e-40,
+ 1.0729747991370532e-35,
+ 7.586568129755033e-31,
+ -2.7423270816990238e-40,
+ 7.487999549494996e-37,
+ -1.8645017549790065e-34,
+ 4.309334694624108e-39,
+ -3.5042455892975746e-36,
+ -5.633528112247916e-40,
+ -2.3810583246114427e-40,
+ 7.992670128877319e-40,
+ 3.1261567440622344e-41,
+ -1.8386997669791655e-40,
+ -3.016834849287138e-34,
+ -2.0352353084487297e-30,
+ 1.7701930876552538e-39,
+ 5.924269517626029e-41,
+ 4.8535351189578935e-37,
+ 2.6067080150232036e-39,
+ 7.691804810688665e-35,
+ 9.19363896474226e-40,
+ -6.386262207030814e-39,
+ -4.565101091631138e-39,
+ 1.7599598421754105e-35,
+ -5.22538592152867e-40,
+ 1.4179318770963526e-40,
+ 1.50144225907779e-39,
+ -3.7912613917480566e-32,
+ -2.97095970369481e-32,
+ -2.987098745219921e-34,
+ -1.4250700914736233e-39,
+ 2.6262229897079364e-33,
+ 2.8236598458669005e-39,
+ -2.872101332480145e-41,
+ -6.61410229509813e-37,
+ -9.53061621295077e-39,
+ -2.0863289036218217e-34,
+ 9.904154924322122e-31,
+ -1.465639417383845e-34,
+ -1.9758588606672786e-40,
+ 2.7482224228111523e-36,
+ -8.822855391081913e-40,
+ -5.535510535680832e-37,
+ 5.591040742809588e-40,
+ -1.3460122042010416e-35,
+ 6.235714562989698e-35,
+ 1.2440144826114567e-38,
+ -2.0554171358591274e-29,
+ 6.319017554323029e-33,
+ -5.152504554312874e-35,
+ -3.417847788041868e-22,
+ 8.180755321496818e-30,
+ -8.316623709158394e-39,
+ 3.2219733291573724e-39,
+ -3.750531523417206e-30,
+ 8.187981707536447e-39,
+ -2.08269946078126e-39,
+ -1.147525419988483e-36,
+ 8.68417481998585e-34,
+ -1.556240035525212e-40,
+ -4.0461512248454066e-40,
+ -8.928289087537712e-40,
+ 1.4475871246932065e-25,
+ 2.2551320394133573e-39,
+ 5.4105114616506214e-40,
+ 4.724657542248512e-36,
+ 6.214178592719447e-32,
+ -3.6029667634287896e-39,
+ -4.987655637055965e-40,
+ 5.4231007270541156e-39,
+ 4.2539357611354904e-40,
+ -6.452367249785041e-32,
+ 3.959039626972525e-33,
+ -5.258513514133826e-26,
+ 1.0520297266364816e-38,
+ 4.188008872284401e-39,
+ 2.1196771488656175e-37,
+ 5.317283074819091e-40,
+ 8.797509924149389e-35,
+ -9.914046505251648e-41,
+ -1.076943843185224e-34,
+ 2.0402334351967876e-29,
+ -5.981022105431184e-40,
+ 4.315228555965058e-40,
+ 2.5659767460941344e-35,
+ 2.0062249983891974e-40,
+ 7.071918946923411e-40,
+ -3.4643046818493926e-34,
+ 2.083842920328149e-40,
+ 3.8033578163651933e-31,
+ -4.5889631985956254e-26,
+ -3.039337223783263e-37,
+ 3.9575821554077565e-39,
+ 1.643001678455758e-33,
+ -1.402601559792762e-37,
+ 1.3832203240469503e-36,
+ 1.6215827584395662e-29,
+ -3.3775650334154267e-29,
+ 6.101667914172018e-33,
+ -4.150113557913665e-40,
+ 2.358315250535451e-40,
+ 1.2305103374665741e-37,
+ 9.208534380883864e-34,
+ 5.072490246086189e-40
+ ],
+ [
+ -0.06545699387788773,
+ -0.04897903650999069,
+ 0.07164176553487778,
+ -0.14237485826015472,
+ 0.07290563732385635,
+ 0.06283052265644073,
+ 0.04516969621181488,
+ -0.00392785482108593,
+ -0.045426707714796066,
+ -0.0951942503452301,
+ 0.1255570948123932,
+ -0.04554799199104309,
+ -0.019015124067664146,
+ -0.010990429669618607,
+ -0.06686249375343323,
+ -0.05069315433502197,
+ 0.05434919148683548,
+ -0.05116482451558113,
+ 0.06290464103221893,
+ -0.0571458600461483,
+ 0.04516392573714256,
+ 0.10713663697242737,
+ -0.04579157382249832,
+ 0.061578456312417984,
+ -0.11550264805555344,
+ 0.044599901884794235,
+ 0.07344415783882141,
+ -0.002972901100292802,
+ -0.07708510756492615,
+ 0.03919694200158119,
+ -0.021944500505924225,
+ -0.03224025294184685,
+ -0.19106832146644592,
+ 0.10563737899065018,
+ 0.11656548827886581,
+ -0.1060548648238182,
+ 0.026744619011878967,
+ 0.07047722488641739,
+ 0.049835205078125,
+ -0.012871669605374336,
+ -0.004306422080844641,
+ 0.11719849705696106,
+ 0.1060684472322464,
+ -0.011126157827675343,
+ -0.07531348615884781,
+ 0.0003443688037805259,
+ -0.015840014442801476,
+ 0.07778692245483398,
+ 0.09471800923347473,
+ 0.026601608842611313,
+ 0.133925661444664,
+ 0.0148536441847682,
+ 0.064248226583004,
+ 0.011701107025146484,
+ -0.06269572675228119,
+ 0.056256964802742004,
+ 0.015230025164783001,
+ 0.13004684448242188,
+ -0.033899616450071335,
+ -0.016843652352690697,
+ 0.010748421773314476,
+ 0.0035175310913473368,
+ 0.015751482918858528,
+ 0.02207208052277565,
+ 0.16496455669403076,
+ 0.08839946240186691,
+ 0.11167356371879578,
+ 0.03276721015572548,
+ 0.03853556886315346,
+ 0.02582627348601818,
+ 0.12828928232192993,
+ -0.036480654031038284,
+ 0.05266597494482994,
+ 0.038557372987270355,
+ -0.05219312384724617,
+ -0.021443326026201248,
+ 0.029886135831475258,
+ 0.019655460491776466,
+ 0.044996123760938644,
+ -0.030324753373861313,
+ -0.11253110319375992,
+ 0.07725398242473602,
+ -0.09282790869474411,
+ 0.02209324762225151,
+ -0.0745052620768547,
+ 0.025405997410416603,
+ 0.055691592395305634,
+ -0.03355657681822777,
+ -0.05105552822351456,
+ -0.06938335299491882,
+ -0.012865530326962471,
+ 0.013036256656050682,
+ -0.08398865163326263,
+ -0.05079716816544533,
+ 0.04473594203591347,
+ -0.0014084501890465617,
+ 0.003302184399217367,
+ -0.005270682275295258,
+ 0.033661309629678726,
+ 0.11747231334447861,
+ -0.0449979342520237,
+ 0.029418306425213814,
+ -0.003915002103894949,
+ -0.045601192861795425,
+ 0.05501389130949974,
+ -0.0592830665409565,
+ -0.05754227936267853,
+ 0.04136306419968605,
+ -0.16289368271827698,
+ 0.04573705792427063,
+ -0.024916160851716995,
+ -0.052635565400123596,
+ 0.03121121972799301,
+ -0.008338334038853645,
+ 0.1241462454199791,
+ -0.07093822956085205,
+ -0.014633173123002052,
+ 0.023479575291275978,
+ 0.04268394410610199,
+ -0.02637697570025921,
+ 0.032176487147808075,
+ -0.059986554086208344,
+ 0.03819979354739189,
+ 0.021077359095215797,
+ 0.0035572086926549673,
+ -0.04531107097864151,
+ -0.06141228228807449,
+ -0.00019166302809026092
+ ],
+ [
+ -0.10263272374868393,
+ -0.024178706109523773,
+ -0.08161205798387527,
+ -0.2814946174621582,
+ -0.024108629673719406,
+ 0.3961687982082367,
+ 0.037908148020505905,
+ 0.5050157904624939,
+ -0.1330016553401947,
+ -0.041522398591041565,
+ -0.16912829875946045,
+ -0.1952224224805832,
+ 0.3129233717918396,
+ -0.034844234585762024,
+ 0.02996155060827732,
+ -0.14761210978031158,
+ 0.07469799369573593,
+ -0.19057175517082214,
+ 0.17864003777503967,
+ 0.1913851797580719,
+ -0.23087769746780396,
+ -0.04897056147456169,
+ -0.04464507848024368,
+ -0.05270995572209358,
+ -0.06632930040359497,
+ -0.13792365789413452,
+ 0.31414762139320374,
+ -0.11609048396348953,
+ 0.15994024276733398,
+ 0.026678692549467087,
+ 0.3199292719364166,
+ -0.08578554540872574,
+ -0.889018714427948,
+ -0.21729913353919983,
+ 0.07796023041009903,
+ -0.5512118935585022,
+ 0.14663483202457428,
+ -0.033297210931777954,
+ 0.006460944190621376,
+ 0.11077459901571274,
+ -0.07985985279083252,
+ -0.11791766434907913,
+ -0.4736067056655884,
+ 0.07797112315893173,
+ -1.0891400575637817,
+ -0.12804362177848816,
+ -0.5395496487617493,
+ -0.004117090255022049,
+ 0.17611064016819,
+ 0.00011375117901479825,
+ -0.12491904944181442,
+ -0.031984079629182816,
+ 0.04403652250766754,
+ 0.1549587845802307,
+ -0.01655634492635727,
+ 0.08033283799886703,
+ 0.1404501348733902,
+ 0.09893602132797241,
+ 0.020104531198740005,
+ 0.1358717381954193,
+ -0.20212911069393158,
+ -0.05355386063456535,
+ -0.03829466924071312,
+ -0.20622281730175018,
+ -0.03670647740364075,
+ 0.22606143355369568,
+ 0.1362299919128418,
+ -0.1598019301891327,
+ -6.923858018126339e-05,
+ 0.045194439589977264,
+ 0.11713188141584396,
+ -0.4731104373931885,
+ -0.06767692416906357,
+ -0.11490077525377274,
+ 0.051369402557611465,
+ -0.0731361135840416,
+ 0.10258733481168747,
+ -0.10379156470298767,
+ -0.02376760169863701,
+ 0.11796100437641144,
+ -0.3528265357017517,
+ 0.1414411962032318,
+ -1.5701152086257935,
+ 0.03617304563522339,
+ -0.21721182763576508,
+ -0.09277713298797607,
+ -0.044091034680604935,
+ -0.030396051704883575,
+ -0.06317027658224106,
+ 0.08384033292531967,
+ 0.23110567033290863,
+ 0.03587409481406212,
+ -0.7863844633102417,
+ 0.03728930652141571,
+ -0.05317725986242294,
+ -0.5268135666847229,
+ -0.40828248858451843,
+ 0.09072817862033844,
+ 0.1352134644985199,
+ 0.10524976253509521,
+ 0.09761006385087967,
+ -0.019665326923131943,
+ 0.036212120205163956,
+ 0.1351386308670044,
+ -0.07333245128393173,
+ -0.30613836646080017,
+ -0.7368185520172119,
+ -0.09250396490097046,
+ -0.3917859196662903,
+ 0.005616565700620413,
+ -0.046367097645998,
+ 0.5149053931236267,
+ 0.08395858854055405,
+ -0.40043577551841736,
+ 0.0514216348528862,
+ 0.41495296359062195,
+ 0.13496515154838562,
+ 0.046692922711372375,
+ 0.18049176037311554,
+ 0.038725681602954865,
+ 0.04132773354649544,
+ -0.1664634793996811,
+ 0.08423867076635361,
+ 0.37225568294525146,
+ -0.906098484992981,
+ -0.5114443898200989,
+ 0.13718494772911072,
+ -1.1319215297698975
+ ],
+ [
+ -0.0335046611726284,
+ -0.04788026213645935,
+ 0.007197719067335129,
+ -0.21017304062843323,
+ 0.025315606966614723,
+ -0.07944763451814651,
+ 0.2392961084842682,
+ -0.027937866747379303,
+ -0.13278789818286896,
+ 0.04136377200484276,
+ -0.08421292901039124,
+ 0.04871489107608795,
+ -0.10007507354021072,
+ -0.08279348164796829,
+ 0.041378092020750046,
+ -0.021004287526011467,
+ -0.08529572933912277,
+ -0.2952892482280731,
+ 0.12388627976179123,
+ -0.17167767882347107,
+ -0.28919172286987305,
+ -0.11833585053682327,
+ 0.056717414408922195,
+ -0.057562049478292465,
+ 0.1571905016899109,
+ -0.1626599133014679,
+ -0.16962440311908722,
+ 0.030919494107365608,
+ -0.07790686190128326,
+ -0.017600031569600105,
+ 0.16313159465789795,
+ 0.002620526123791933,
+ 0.15113207697868347,
+ 0.020363179966807365,
+ -0.0889490619301796,
+ -0.011963862925767899,
+ 0.035914961248636246,
+ 0.038142312318086624,
+ 0.03540082275867462,
+ -0.03684143349528313,
+ -0.037352271378040314,
+ 0.09549648314714432,
+ 0.10202938318252563,
+ 0.08443361520767212,
+ 0.10503558069467545,
+ 0.029323631897568703,
+ 0.0214458666741848,
+ 0.07123091071844101,
+ 0.04566793516278267,
+ 0.03387771174311638,
+ 0.09672229737043381,
+ 0.12974688410758972,
+ 0.03626974672079086,
+ -0.030160289257764816,
+ -0.037922222167253494,
+ -0.06853538006544113,
+ -0.18037551641464233,
+ -0.05968530476093292,
+ -0.20842835307121277,
+ -0.3195459842681885,
+ 0.03409985452890396,
+ -0.012549218721687794,
+ 0.14143060147762299,
+ 0.1497703194618225,
+ 0.09304342418909073,
+ 0.1560242772102356,
+ -0.03567025065422058,
+ 0.09948459267616272,
+ -0.09501770883798599,
+ 0.21311041712760925,
+ -0.040618814527988434,
+ 0.10558363795280457,
+ -0.05585762858390808,
+ 0.09078160673379898,
+ 0.14704783260822296,
+ 0.19172899425029755,
+ -0.1753823310136795,
+ -0.198561891913414,
+ 0.019907526671886444,
+ -0.06567836552858353,
+ -0.08304981142282486,
+ -0.006167805753648281,
+ -0.09157800674438477,
+ 0.19218815863132477,
+ -0.012037104927003384,
+ 0.0014827882405370474,
+ -0.1669463962316513,
+ 0.009988355450332165,
+ 0.09412878006696701,
+ 0.08156927675008774,
+ -0.123862124979496,
+ -0.30522143840789795,
+ -0.06902176886796951,
+ -0.018353663384914398,
+ -0.04862309247255325,
+ -0.01641397923231125,
+ 0.10838785022497177,
+ -0.05183965340256691,
+ -0.19179269671440125,
+ -0.09324774891138077,
+ 0.0569632388651371,
+ 0.04528842121362686,
+ -0.007036041002720594,
+ -0.018942298367619514,
+ 0.002741041127592325,
+ -0.06482158601284027,
+ 0.2134658247232437,
+ -0.03169829398393631,
+ 0.08631561696529388,
+ 0.13091957569122314,
+ -0.004254992585629225,
+ 0.03575780615210533,
+ -0.34110569953918457,
+ 0.09068125486373901,
+ 0.07456091046333313,
+ 0.04731065779924393,
+ -0.0188747588545084,
+ 0.12544111907482147,
+ -0.015446782112121582,
+ -0.12090529501438141,
+ -0.028728527948260307,
+ 0.04233414679765701,
+ 0.039791740477085114,
+ 0.026525449007749557,
+ 0.2940525710582733,
+ -0.23667584359645844,
+ -0.04255277290940285,
+ -0.049276456236839294
+ ],
+ [
+ 0.08033234626054764,
+ 0.011126075871288776,
+ 0.06015361472964287,
+ 0.08190982788801193,
+ 0.06086524575948715,
+ -0.006511329207569361,
+ -0.06072274222970009,
+ -0.0951891764998436,
+ -0.009333268739283085,
+ -0.003765768138691783,
+ -0.17724011838436127,
+ -0.03330233320593834,
+ 0.06475704163312912,
+ -0.16214847564697266,
+ 0.03739458695054054,
+ -0.09823985397815704,
+ 0.2419707030057907,
+ 0.15730004012584686,
+ 0.06722060590982437,
+ 0.17500349879264832,
+ -0.12022356688976288,
+ -0.10567204654216766,
+ 0.017617497593164444,
+ -0.08158881962299347,
+ -0.04246135428547859,
+ -0.24122248589992523,
+ -0.19832439720630646,
+ 0.005655268207192421,
+ 0.10520468652248383,
+ 0.03245050460100174,
+ 0.10149715095758438,
+ 0.2121438831090927,
+ -0.15958689153194427,
+ 0.03704299405217171,
+ -0.007230808027088642,
+ 0.06204744800925255,
+ -0.004175259731709957,
+ 0.10266582667827606,
+ -0.042029090225696564,
+ 0.09485592693090439,
+ -0.2812352180480957,
+ -0.27786320447921753,
+ 0.15757513046264648,
+ -0.026971861720085144,
+ 0.05896999314427376,
+ -0.30830663442611694,
+ 0.04163764789700508,
+ 0.042336355894804,
+ -0.147605761885643,
+ 0.2969270646572113,
+ 0.07617751508951187,
+ -0.1007581576704979,
+ 0.07920914888381958,
+ -0.020090332254767418,
+ 0.1909990757703781,
+ 0.08118858933448792,
+ 0.04809916391968727,
+ 0.014959635213017464,
+ -0.026235394179821014,
+ -0.1317806839942932,
+ -0.12965001165866852,
+ -0.204665869474411,
+ 0.05153760686516762,
+ 0.1670066863298416,
+ 0.08931538462638855,
+ 0.04323553666472435,
+ -0.007711630780249834,
+ 0.050818514078855515,
+ 0.03548763319849968,
+ -0.06600844860076904,
+ -0.054435547441244125,
+ 0.024020086973905563,
+ -0.10733914375305176,
+ 0.0695246234536171,
+ -0.0809035673737526,
+ -0.0566566027700901,
+ 0.01978127658367157,
+ 0.14850978553295135,
+ -0.026654664427042007,
+ 0.004489007405936718,
+ 0.15804392099380493,
+ 0.0689757838845253,
+ -0.15744653344154358,
+ -0.07116247713565826,
+ 0.18925458192825317,
+ -0.05769462510943413,
+ 0.0955624058842659,
+ 0.11359070986509323,
+ 0.1134057566523552,
+ 0.0775146335363388,
+ 0.2649472653865814,
+ 0.26255160570144653,
+ -0.05409877002239227,
+ -0.0644068494439125,
+ -0.07987052202224731,
+ -0.011506225913763046,
+ 0.03319195657968521,
+ -0.3037119209766388,
+ -0.09792255610227585,
+ -0.10230862349271774,
+ 0.0674276202917099,
+ -0.06492935866117477,
+ -0.05796622857451439,
+ -0.17785458266735077,
+ 0.009549444541335106,
+ 0.12429839372634888,
+ -0.11129532009363174,
+ 0.05488556995987892,
+ -0.2514827847480774,
+ -0.19407151639461517,
+ -0.1453956961631775,
+ -0.005427065771073103,
+ -0.28421926498413086,
+ -0.02033633552491665,
+ 0.05497220531105995,
+ 0.16502001881599426,
+ -0.1572427749633789,
+ 0.06642760336399078,
+ -0.11034755408763885,
+ 0.1571487933397293,
+ -0.03616500273346901,
+ 0.10026831179857254,
+ 0.06464836746454239,
+ 0.034199658781290054,
+ -0.23751221597194672,
+ -0.2752484977245331,
+ 0.12341517955064774,
+ 0.0570061020553112
+ ],
+ [
+ -0.4499478340148926,
+ -0.02090173214673996,
+ 0.13502268493175507,
+ -0.18730910122394562,
+ -0.008685216307640076,
+ -0.22127895057201385,
+ 0.040365733206272125,
+ -0.053880397230386734,
+ -0.007110548671334982,
+ -0.6644781231880188,
+ -0.1941748857498169,
+ 0.011723348870873451,
+ -0.7054663300514221,
+ 0.2646782398223877,
+ -0.07845968753099442,
+ 0.10926216095685959,
+ 0.0664115846157074,
+ 0.04929657280445099,
+ 0.09111957997083664,
+ -0.06705573201179504,
+ -0.7382773756980896,
+ 0.3041072487831116,
+ 0.03490478917956352,
+ -0.09386807680130005,
+ 0.036665115505456924,
+ -0.3801749050617218,
+ 0.2014818638563156,
+ 0.06814045459032059,
+ -0.011930946260690689,
+ -0.6193518042564392,
+ 0.2516321837902069,
+ -0.40727540850639343,
+ -0.12581117451190948,
+ 0.0021203900687396526,
+ 0.19118265807628632,
+ 0.031817395240068436,
+ 0.22604596614837646,
+ 0.05851166322827339,
+ -0.05555621162056923,
+ 0.006060417275875807,
+ -0.013567494228482246,
+ -0.20065130293369293,
+ -0.22174808382987976,
+ 0.04621780663728714,
+ 0.07829253375530243,
+ -0.038863327354192734,
+ -0.14879313111305237,
+ 0.11118511855602264,
+ -0.05455666780471802,
+ 0.11403705924749374,
+ 0.10819169133901596,
+ -0.3724074065685272,
+ -0.0967596024274826,
+ 0.1145261749625206,
+ 0.0993732139468193,
+ -0.17160935699939728,
+ -0.08008844405412674,
+ 0.16445858776569366,
+ -0.024098535999655724,
+ 0.003332944819703698,
+ -0.04528480023145676,
+ -0.045690637081861496,
+ 0.12486085295677185,
+ 0.0426473394036293,
+ -0.002572940429672599,
+ -0.5154967308044434,
+ 0.1360313445329666,
+ 0.039235733449459076,
+ 0.03687521815299988,
+ 0.050707943737506866,
+ 0.23833444714546204,
+ -0.5974093675613403,
+ -0.05384330824017525,
+ -0.18579742312431335,
+ 0.05896877869963646,
+ -0.09817281365394592,
+ -0.23853252828121185,
+ -0.1218176856637001,
+ 0.08636154234409332,
+ 0.17812404036521912,
+ 0.3098451793193817,
+ -0.07132291793823242,
+ -0.2333378791809082,
+ -0.0579184927046299,
+ -0.008946326561272144,
+ -0.010417686775326729,
+ 0.014409639872610569,
+ 0.12523908913135529,
+ -0.054609015583992004,
+ -0.18026545643806458,
+ 0.1620568484067917,
+ 0.04899073764681816,
+ -0.24912399053573608,
+ 0.1110076904296875,
+ 0.04097776487469673,
+ -0.13059133291244507,
+ -0.053384408354759216,
+ 0.09581585973501205,
+ 0.02631315588951111,
+ -0.038474053144454956,
+ 0.37592804431915283,
+ -0.0679982528090477,
+ 0.1196548193693161,
+ -0.14403904974460602,
+ 0.004618452861905098,
+ -0.13533315062522888,
+ -0.8610506653785706,
+ 0.07214914262294769,
+ -0.08852270990610123,
+ 0.18590950965881348,
+ 0.1183350682258606,
+ 0.0012335111387073994,
+ 0.22958749532699585,
+ 0.028851594775915146,
+ -0.14458759129047394,
+ 0.46033984422683716,
+ -0.06436537951231003,
+ 0.11683231592178345,
+ -0.5119854807853699,
+ 0.03787980601191521,
+ -0.4054548442363739,
+ 0.004819386173039675,
+ -0.03476973623037338,
+ 0.06517913937568665,
+ 0.15874405205249786,
+ -0.0900236964225769,
+ 0.06693416833877563,
+ 0.138095885515213
+ ],
+ [
+ -0.05260346084833145,
+ -0.033169835805892944,
+ 0.09669484198093414,
+ -0.0022011299151927233,
+ 0.004912170115858316,
+ -0.04037303477525711,
+ -0.011524372734129429,
+ -0.09783994406461716,
+ -0.020857198163866997,
+ -0.2736143469810486,
+ -0.22473059594631195,
+ 0.007760701235383749,
+ -0.06426598131656647,
+ -0.010641085915267467,
+ -0.1251421868801117,
+ 0.11825321614742279,
+ 0.09091941267251968,
+ -0.13488373160362244,
+ -0.07934869080781937,
+ -0.12412875145673752,
+ 0.1396000236272812,
+ 0.124903604388237,
+ -0.05664398893713951,
+ -0.032827138900756836,
+ 0.0693807452917099,
+ -0.07924576103687286,
+ -0.08994641155004501,
+ -0.1035076156258583,
+ 0.04715588316321373,
+ 0.08542585372924805,
+ 0.07924637943506241,
+ -0.27051666378974915,
+ -0.003081209259107709,
+ 0.0061918143182992935,
+ 0.13918916881084442,
+ -0.030337560921907425,
+ 0.06526333838701248,
+ 0.026794789358973503,
+ -0.023672647774219513,
+ 0.20516662299633026,
+ -0.12906862795352936,
+ 0.015221713110804558,
+ -0.10222998261451721,
+ -0.021342845633625984,
+ 0.14554384350776672,
+ -0.24554379284381866,
+ 0.05382183566689491,
+ -0.17247170209884644,
+ 0.1396813690662384,
+ 0.05373959615826607,
+ 0.03800518810749054,
+ 0.03738449513912201,
+ -0.20778071880340576,
+ -0.007979674264788628,
+ 0.19082655012607574,
+ -0.04408673942089081,
+ 0.07989279180765152,
+ 0.08704976737499237,
+ 0.07801361382007599,
+ 0.07745658606290817,
+ -0.0019351454684510827,
+ -0.20926643908023834,
+ -0.12741585075855255,
+ -0.01776018738746643,
+ 0.14131128787994385,
+ 0.0030498732812702656,
+ -0.04022841528058052,
+ -0.13412567973136902,
+ -0.07757232338190079,
+ -0.18983638286590576,
+ 0.15445178747177124,
+ -0.1873639076948166,
+ -0.2441592812538147,
+ 0.10755407810211182,
+ 0.07389397919178009,
+ -0.0475320927798748,
+ -0.04658791422843933,
+ 0.023123500868678093,
+ -0.10779251903295517,
+ 0.006964132655411959,
+ 0.028984718024730682,
+ 0.24648156762123108,
+ 0.15902560949325562,
+ -0.17108775675296783,
+ 0.06393293291330338,
+ 0.1303279548883438,
+ 0.10256216675043106,
+ 0.06355912238359451,
+ -0.05969911441206932,
+ 0.0243314728140831,
+ 0.13412874937057495,
+ 0.12447336316108704,
+ -0.11127422004938126,
+ -0.21614541113376617,
+ -0.08387605100870132,
+ -0.020364772528409958,
+ -0.08614076673984528,
+ -0.0830858126282692,
+ 0.11122280359268188,
+ -0.07830213755369186,
+ 0.057337623089551926,
+ 0.13403671979904175,
+ -0.09147528558969498,
+ -0.0927748903632164,
+ 0.01820763200521469,
+ -0.06847359985113144,
+ 0.3648298978805542,
+ 0.0024848217144608498,
+ 0.14939962327480316,
+ 0.05263481289148331,
+ 0.20754143595695496,
+ -0.07436657696962357,
+ 0.2899438142776489,
+ -0.05371851846575737,
+ -0.015335166826844215,
+ 0.12007083743810654,
+ -0.16179706156253815,
+ -0.03613251447677612,
+ -0.12388832122087479,
+ 0.027469906955957413,
+ -0.011571569368243217,
+ 0.013432160019874573,
+ -0.5463423132896423,
+ -0.06565337628126144,
+ -0.18745405972003937,
+ -0.04864726588129997,
+ 0.05153406038880348,
+ 0.1039930135011673
+ ],
+ [
+ 0.0547507181763649,
+ -0.13324297964572906,
+ 0.0034405512269586325,
+ 0.0019103517988696694,
+ -0.009216834791004658,
+ 0.039276089519262314,
+ -0.0753646120429039,
+ 0.06912734359502792,
+ -0.05986831337213516,
+ 0.03323444351553917,
+ 0.12204858660697937,
+ -0.05637521669268608,
+ -0.07268474251031876,
+ -0.03040204383432865,
+ -0.07486095279455185,
+ 0.01884196512401104,
+ 0.030102644115686417,
+ 0.05557113140821457,
+ 0.12982147932052612,
+ -0.04554924741387367,
+ -0.07929115742444992,
+ -0.030071577057242393,
+ 0.0739666149020195,
+ 0.0498993955552578,
+ 0.15491369366645813,
+ -0.14759260416030884,
+ -0.07264281064271927,
+ -0.02411087229847908,
+ -0.04357026517391205,
+ 0.07682470977306366,
+ 0.04371696710586548,
+ -0.004526807460933924,
+ 0.02424667403101921,
+ 0.020074553787708282,
+ -0.11645350605249405,
+ -0.007879825308918953,
+ 0.07230649143457413,
+ 0.09180980175733566,
+ -0.005185913760215044,
+ 0.14393173158168793,
+ 0.19089555740356445,
+ 0.0008361217915080488,
+ -0.08758119493722916,
+ 0.19326740503311157,
+ -0.13446691632270813,
+ -0.16659240424633026,
+ 0.09314420819282532,
+ 0.13095930218696594,
+ 0.07485520094633102,
+ -0.023014472797513008,
+ 0.22226788103580475,
+ -0.09790483862161636,
+ -0.1137305498123169,
+ -0.019489891827106476,
+ -0.01977364346385002,
+ -0.12470704317092896,
+ -0.1660533994436264,
+ 0.03995785489678383,
+ -0.1410951316356659,
+ -0.08092427998781204,
+ 0.09306801110506058,
+ -0.019549019634723663,
+ -0.01484761480242014,
+ -0.019695261493325233,
+ 0.07125338166952133,
+ -0.10563130676746368,
+ -0.025852695107460022,
+ 0.07193111628293991,
+ 0.07661047577857971,
+ -0.0016130432486534119,
+ 0.0468205027282238,
+ 0.0046112751588225365,
+ 0.09907755255699158,
+ -0.001411248929798603,
+ 0.06784063577651978,
+ -0.09297768026590347,
+ -0.15650172531604767,
+ -0.16060209274291992,
+ -0.10276113450527191,
+ -0.0840572640299797,
+ -0.04466021806001663,
+ 0.02996690943837166,
+ 0.04366299882531166,
+ 0.1310880333185196,
+ -0.08641908317804337,
+ -0.04323498532176018,
+ -0.08177101612091064,
+ 0.05205336585640907,
+ 0.0611598826944828,
+ 0.0939076691865921,
+ -0.07394421845674515,
+ -0.07983823865652084,
+ -0.0673614963889122,
+ 0.06676562130451202,
+ -0.06116902455687523,
+ -0.06809081137180328,
+ 0.03222811594605446,
+ 0.06311822682619095,
+ 0.036603908985853195,
+ -0.03409180790185928,
+ 0.07846218347549438,
+ 0.13779638707637787,
+ 0.02977631613612175,
+ -0.02421778067946434,
+ 0.044626060873270035,
+ -0.13350026309490204,
+ -0.23805078864097595,
+ -0.37404435873031616,
+ 0.03790333867073059,
+ 0.086899533867836,
+ 0.07224775850772858,
+ 0.06746301054954529,
+ 0.13045893609523773,
+ 0.13177259266376495,
+ -0.1337258517742157,
+ 0.07187721133232117,
+ -0.19010411202907562,
+ -0.16259363293647766,
+ -0.03652658686041832,
+ 0.15200500190258026,
+ -0.06867792457342148,
+ 0.07219947129487991,
+ -0.07604579627513885,
+ 0.29546672105789185,
+ 0.016599517315626144,
+ -0.01660092920064926,
+ 0.03443552926182747,
+ 0.2533494830131531
+ ],
+ [
+ -0.009517939761281013,
+ 0.005656349007040262,
+ 0.016130991280078888,
+ -0.0487244687974453,
+ 0.0027237723115831614,
+ -0.039856813848018646,
+ -0.02950448729097843,
+ -0.0068128774873912334,
+ -0.03140130266547203,
+ -0.10423456877470016,
+ 0.005162307061254978,
+ 0.018079567700624466,
+ 0.030075017362833023,
+ -0.02981952391564846,
+ -0.013558242470026016,
+ -0.0030866723973304033,
+ 0.00030467912438325584,
+ -0.04593023285269737,
+ 0.020524518564343452,
+ -0.010797952301800251,
+ 0.04703512415289879,
+ -0.0359579436480999,
+ -0.03892681375145912,
+ 0.1009056344628334,
+ 0.0863112062215805,
+ -0.03258334472775459,
+ -0.012578295543789864,
+ -0.006612666882574558,
+ 0.09632471203804016,
+ 0.062202755361795425,
+ 0.07299434393644333,
+ -0.03476400673389435,
+ -0.0665699765086174,
+ 0.04237255081534386,
+ 0.053223416209220886,
+ -0.007385658100247383,
+ 0.03707398101687431,
+ 0.0336926095187664,
+ 0.06385356187820435,
+ 0.043886687606573105,
+ -0.02275792323052883,
+ 0.03543055057525635,
+ -0.006185383070260286,
+ 0.014214139431715012,
+ 0.02181536890566349,
+ -0.032557930797338486,
+ 0.07797981053590775,
+ 0.0884004682302475,
+ -0.00033606545184738934,
+ 0.06864035874605179,
+ -0.005153395235538483,
+ 0.02820206806063652,
+ 0.024085860699415207,
+ -0.05961492285132408,
+ -0.04526258632540703,
+ -0.0001396029838360846,
+ 0.08701611310243607,
+ 0.002242401707917452,
+ 0.03328903391957283,
+ -0.004263394046574831,
+ 0.0016415086574852467,
+ -0.053362950682640076,
+ -0.0403766855597496,
+ 0.030156796798110008,
+ 0.08290272206068039,
+ 0.03914862871170044,
+ 0.07614094763994217,
+ -0.004560800269246101,
+ 0.06251002848148346,
+ 0.04445939511060715,
+ 0.02866545133292675,
+ -0.09018179774284363,
+ 0.033328793942928314,
+ -0.03800603747367859,
+ -0.035806380212306976,
+ -0.04039666801691055,
+ 0.005018687807023525,
+ -0.025493012741208076,
+ -0.0041546281427145,
+ 0.0045529259368777275,
+ -0.04347219318151474,
+ 0.15612812340259552,
+ -0.06524636596441269,
+ -0.0025417215656489134,
+ -0.09165138006210327,
+ 0.04016523435711861,
+ 0.002641010330989957,
+ 0.02468092180788517,
+ -0.04130743443965912,
+ 0.07494194060564041,
+ 0.035178691148757935,
+ 0.02575530670583248,
+ -0.023817086592316628,
+ 0.019138824194669724,
+ -0.046438563615083694,
+ -0.042390111833810806,
+ -0.08182672411203384,
+ -0.0042299628257751465,
+ -0.005930098704993725,
+ 0.003342775395140052,
+ 0.05706610158085823,
+ 0.006573065649718046,
+ 0.032201554626226425,
+ -0.041722413152456284,
+ -0.052066121250391006,
+ -0.07452237606048584,
+ -0.07026496529579163,
+ 0.02061188966035843,
+ -0.0779339000582695,
+ 0.008546070195734501,
+ 0.02640659362077713,
+ -0.03248627856373787,
+ 0.0015294348122552037,
+ 0.026766473427414894,
+ 0.038702208548784256,
+ -0.028450870886445045,
+ -0.012687730602920055,
+ 0.0863153263926506,
+ 0.04294927790760994,
+ 0.006022096611559391,
+ 0.06699233502149582,
+ -0.03650345653295517,
+ -0.048530466854572296,
+ 0.08733171969652176,
+ -0.09623707085847855,
+ -0.013353493064641953,
+ -0.020759008824825287,
+ -0.05124666914343834
+ ],
+ [
+ 0.06337250024080276,
+ 0.00047817346057854593,
+ -0.49476802349090576,
+ 0.04434862360358238,
+ 0.03751498460769653,
+ 0.022025275975465775,
+ -0.08335675299167633,
+ -0.07335726171731949,
+ 0.05607231706380844,
+ 0.06408807635307312,
+ 0.17238187789916992,
+ 0.14058710634708405,
+ 0.2956317663192749,
+ -0.06060131639242172,
+ -0.3276984989643097,
+ 0.06737968325614929,
+ 0.13147304952144623,
+ -0.03382835537195206,
+ -0.005220816470682621,
+ -0.006617026403546333,
+ 0.2848731279373169,
+ 0.06564268469810486,
+ 0.12224689871072769,
+ 0.13471971452236176,
+ 0.020500607788562775,
+ 0.09435594826936722,
+ -0.003706794697791338,
+ 0.0035962683614343405,
+ 0.03460569679737091,
+ 0.01810469664633274,
+ -0.0002998600248247385,
+ 0.041104577481746674,
+ 0.11244343221187592,
+ -0.17400309443473816,
+ -0.06660496443510056,
+ 0.05955951660871506,
+ -0.09198972582817078,
+ -0.3733079135417938,
+ 0.009655117057263851,
+ 0.15534213185310364,
+ 0.07830478250980377,
+ 0.06737800687551498,
+ 0.11815829575061798,
+ 0.09504736214876175,
+ 0.023048335686326027,
+ -0.1096993237733841,
+ 0.03101031854748726,
+ -0.03938145563006401,
+ -0.00013429780665319413,
+ -0.08179758489131927,
+ -0.10855596512556076,
+ -0.15741798281669617,
+ 0.1835532784461975,
+ -0.16759376227855682,
+ 0.23211924731731415,
+ -0.1174778863787651,
+ -0.38261574506759644,
+ -0.057385560125112534,
+ -0.16832536458969116,
+ -0.16631650924682617,
+ 0.15260668098926544,
+ 0.06000608205795288,
+ -0.0968955010175705,
+ -0.007976575754582882,
+ -0.5044055581092834,
+ 0.04101806506514549,
+ 0.036520279943943024,
+ 0.11278685927391052,
+ 0.02813011407852173,
+ -0.08983303606510162,
+ -0.21969258785247803,
+ 0.08329517394304276,
+ -0.2748418152332306,
+ 0.01720353588461876,
+ -0.1742541640996933,
+ -0.045525845140218735,
+ -0.23969121277332306,
+ -0.9098151326179504,
+ -0.0026259147562086582,
+ -0.0025111983995884657,
+ 0.17236143350601196,
+ -0.19832554459571838,
+ -0.02624594420194626,
+ -0.18676835298538208,
+ -0.0444672666490078,
+ -0.3411053419113159,
+ -0.46285754442214966,
+ 0.05635170638561249,
+ -0.08619407564401627,
+ 0.08139259368181229,
+ 0.14407916367053986,
+ -0.01660725474357605,
+ -0.7420406937599182,
+ 0.05104970186948776,
+ 0.43816521763801575,
+ -0.08187385648488998,
+ -0.3539186120033264,
+ -0.01584855280816555,
+ -1.3145984411239624,
+ -0.2741836905479431,
+ -0.04851241037249565,
+ -0.0008126030443236232,
+ -0.16387641429901123,
+ 0.011566711589694023,
+ 0.04403159022331238,
+ 0.1447100192308426,
+ -0.04823194071650505,
+ 0.08720572292804718,
+ 0.32752707600593567,
+ 0.1479390561580658,
+ -0.21585047245025635,
+ 0.0498599112033844,
+ -0.11495921015739441,
+ -0.03623342141509056,
+ 0.19651776552200317,
+ -0.017318200320005417,
+ -0.07030058652162552,
+ 0.04678918421268463,
+ 0.0411478690803051,
+ -0.29470574855804443,
+ 0.07458989322185516,
+ -0.07512802630662918,
+ 0.11052272468805313,
+ 0.12681211531162262,
+ 0.05583731085062027,
+ 0.4233972132205963,
+ 0.0013305017491802573,
+ 0.4961242973804474
+ ],
+ [
+ 0.0611053965985775,
+ 0.008832607418298721,
+ -0.01783697120845318,
+ 0.058197297155857086,
+ -0.12182396650314331,
+ 0.12759704887866974,
+ 0.0654120147228241,
+ -0.06752464175224304,
+ 0.03347418084740639,
+ 0.07702323794364929,
+ -0.024596912786364555,
+ 0.06338576227426529,
+ 0.10838642716407776,
+ 0.11972390860319138,
+ -0.13054820895195007,
+ 0.034602634608745575,
+ 0.04547745734453201,
+ -0.006412498652935028,
+ 0.019995126873254776,
+ 0.05635034292936325,
+ -0.22970183193683624,
+ 0.14679516851902008,
+ 0.019826875999569893,
+ 0.03992842882871628,
+ -0.17804381251335144,
+ 0.07240664958953857,
+ -0.21488602459430695,
+ 0.0836467519402504,
+ -0.03617909923195839,
+ -0.009169720113277435,
+ 0.04190623760223389,
+ -0.12169156968593597,
+ -0.008543274365365505,
+ 0.09737690538167953,
+ -0.1675516813993454,
+ 0.15656182169914246,
+ -0.040045276284217834,
+ 0.07333347201347351,
+ -0.10106874257326126,
+ -0.08109229058027267,
+ -0.007158433087170124,
+ -0.12768089771270752,
+ 0.056647978723049164,
+ -0.045753363519907,
+ 0.05319003760814667,
+ 0.010192306712269783,
+ 0.027523072436451912,
+ 0.04169638827443123,
+ 0.09373556077480316,
+ 0.1318095177412033,
+ 0.04733481630682945,
+ -0.09367816150188446,
+ -0.06259788572788239,
+ 0.04148806631565094,
+ 0.014644120819866657,
+ 0.01143344771116972,
+ 0.15117666125297546,
+ -0.023180939257144928,
+ -0.01521890889853239,
+ 0.044746849685907364,
+ 0.0754413828253746,
+ -0.009559787809848785,
+ -0.0024715715553611517,
+ 0.038263700902462006,
+ -0.020734179764986038,
+ -0.32310372591018677,
+ -0.19517390429973602,
+ -0.09471254050731659,
+ 0.0014752349816262722,
+ 0.02113398350775242,
+ -0.10969212651252747,
+ -0.024933502078056335,
+ 0.03252055495977402,
+ 0.07257290184497833,
+ 0.03165343031287193,
+ 0.0034494525752961636,
+ -0.09444873780012131,
+ 0.10011670738458633,
+ 0.0627204030752182,
+ -0.07452137023210526,
+ 0.06886015832424164,
+ -0.034359801560640335,
+ 0.08808062225580215,
+ -0.13163292407989502,
+ 0.06754579395055771,
+ 0.07306766510009766,
+ 0.11326263844966888,
+ 0.07077378779649734,
+ -0.09174107760190964,
+ -0.04550581052899361,
+ 0.12232532352209091,
+ 0.09140952676534653,
+ -0.08785656094551086,
+ -0.0031950732227414846,
+ 0.01703548990190029,
+ 0.041741129010915756,
+ -0.04815554618835449,
+ 0.04640478268265724,
+ 0.08553174883127213,
+ -0.09814228117465973,
+ 0.06339576840400696,
+ 0.0781078189611435,
+ 0.04357202723622322,
+ 0.06111442670226097,
+ -0.006057451479136944,
+ 0.08007228374481201,
+ 0.007697467226535082,
+ -0.04753778129816055,
+ -0.08178588002920151,
+ -0.10064343363046646,
+ -0.05310669168829918,
+ 0.0630192756652832,
+ 0.04222767427563667,
+ -0.11151689291000366,
+ 0.015316260978579521,
+ -0.2887967526912689,
+ 0.13145333528518677,
+ -0.20421293377876282,
+ -0.005098188295960426,
+ 0.06468173116445541,
+ 0.020133882761001587,
+ 0.017633484676480293,
+ 0.07496856898069382,
+ -0.013967613689601421,
+ -0.1826077699661255,
+ 0.1231728047132492,
+ 0.031234145164489746,
+ -0.033651433885097504
+ ],
+ [
+ 0.13294686377048492,
+ -0.0811614990234375,
+ -0.02020018920302391,
+ -0.20082023739814758,
+ 0.02798011153936386,
+ 0.09096059948205948,
+ -0.02082555554807186,
+ -0.1372816115617752,
+ -0.04264388978481293,
+ 0.026152417063713074,
+ 0.1676291525363922,
+ 0.099132239818573,
+ 0.3096359074115753,
+ -0.3822519779205322,
+ 0.06548881530761719,
+ 0.1643582433462143,
+ 0.0745316669344902,
+ -0.09364145249128342,
+ 0.10256990045309067,
+ 0.10301602631807327,
+ 0.10751685500144958,
+ -0.06337784975767136,
+ -0.027765465900301933,
+ -0.09442105144262314,
+ -0.14722730219364166,
+ -0.02042597159743309,
+ -0.07415247708559036,
+ -0.06341902911663055,
+ -0.008476982824504375,
+ 0.036486126482486725,
+ 0.1462118923664093,
+ 0.17288637161254883,
+ -0.04741203784942627,
+ 0.21063554286956787,
+ 0.05399256572127342,
+ -0.08397189527750015,
+ -0.1295773833990097,
+ 0.011374620720744133,
+ -0.04053199663758278,
+ 0.05415879562497139,
+ -0.302077978849411,
+ -0.31518521904945374,
+ -0.1471225768327713,
+ -0.016737403348088264,
+ -0.14340795576572418,
+ -0.7552106976509094,
+ 0.08943478018045425,
+ 0.10891875624656677,
+ -0.003383783856406808,
+ -0.0012865595053881407,
+ 0.11454663425683975,
+ -0.39786097407341003,
+ -0.05113276466727257,
+ 0.1534784436225891,
+ -0.13942445814609528,
+ 0.03337053209543228,
+ -0.0032863295637071133,
+ 0.08813446015119553,
+ -0.16051983833312988,
+ 0.02409067004919052,
+ -0.18560341000556946,
+ 0.1949971467256546,
+ 0.056939590722322464,
+ 0.016793999820947647,
+ -0.0034976282622665167,
+ -0.10333538800477982,
+ 0.06970233470201492,
+ -0.14398668706417084,
+ -0.08183500915765762,
+ 0.12532691657543182,
+ -0.007296164054423571,
+ -0.050551172345876694,
+ 0.07394740730524063,
+ 0.021835703402757645,
+ 0.06198533996939659,
+ -0.07333151996135712,
+ 0.06975949555635452,
+ 0.24688947200775146,
+ -0.22239701449871063,
+ -0.06658392399549484,
+ -0.11053314059972763,
+ -0.13227412104606628,
+ 0.07516126334667206,
+ 0.19503355026245117,
+ 0.12328717112541199,
+ 0.012807844206690788,
+ 0.16478729248046875,
+ -0.12104983627796173,
+ -0.4834393858909607,
+ 0.034283630549907684,
+ -0.07887432724237442,
+ -0.10287662595510483,
+ -0.4061257243156433,
+ -0.05682339146733284,
+ -0.08846408128738403,
+ 0.07114600390195847,
+ -0.38578280806541443,
+ -0.032677289098501205,
+ 0.03394341468811035,
+ -0.043584614992141724,
+ 0.026169558987021446,
+ -0.2013360559940338,
+ 0.07914037257432938,
+ -0.08457442373037338,
+ -0.01121661625802517,
+ -0.020288260653614998,
+ 0.01704087108373642,
+ -0.0853983461856842,
+ -0.022972460836172104,
+ 0.09879082441329956,
+ -0.04369010031223297,
+ -0.1151723563671112,
+ 0.03294111415743828,
+ 0.05052448436617851,
+ 0.03806797415018082,
+ 0.05613444373011589,
+ -0.136430561542511,
+ -0.3065389096736908,
+ 0.1232742965221405,
+ -0.33190709352493286,
+ -0.017537519335746765,
+ -0.03552500531077385,
+ 0.032309580594301224,
+ 0.16932009160518646,
+ 0.30665677785873413,
+ 0.4963979125022888,
+ 0.26763033866882324,
+ 0.10775285959243774
+ ],
+ [
+ -0.02710394747555256,
+ -0.0874847024679184,
+ -0.0534755103290081,
+ 0.013380386866629124,
+ -0.017584070563316345,
+ -0.04145187512040138,
+ -0.04626079648733139,
+ 0.064061239361763,
+ 0.029391758143901825,
+ -0.0014558819821104407,
+ 0.10135290026664734,
+ 0.2564385235309601,
+ 0.19479160010814667,
+ 0.02653925120830536,
+ -0.03650468960404396,
+ 0.007864090614020824,
+ 0.15133921802043915,
+ -0.12359365820884705,
+ 0.1291312575340271,
+ 0.17131765186786652,
+ -0.6594901084899902,
+ 0.005695527885109186,
+ -0.025904709473252296,
+ 0.0077131642028689384,
+ 0.07507201284170151,
+ -0.14725883305072784,
+ -0.11976132541894913,
+ -0.22606313228607178,
+ 0.04280661791563034,
+ 0.19864347577095032,
+ 0.12513239681720734,
+ 0.01839076541364193,
+ 0.08983777463436127,
+ -0.005026019643992186,
+ -0.04864382743835449,
+ -0.18403159081935883,
+ -0.12508650124073029,
+ -0.005487199407070875,
+ 0.2347613275051117,
+ 0.009238151833415031,
+ -0.07721509784460068,
+ -0.009486343711614609,
+ -0.011060593649744987,
+ 0.0545852854847908,
+ -0.015149605460464954,
+ -0.6301679015159607,
+ 0.06723957508802414,
+ -0.1487574279308319,
+ -0.05060236155986786,
+ 0.10786332190036774,
+ -0.010419833473861217,
+ -0.06401750445365906,
+ -0.09338469058275223,
+ -0.1959545612335205,
+ 0.03326604887843132,
+ 0.25883764028549194,
+ -0.021050818264484406,
+ -0.11232846230268478,
+ -0.015026367269456387,
+ 0.11729241907596588,
+ 0.009399447590112686,
+ 0.0861792117357254,
+ 0.004974448122084141,
+ 0.20268389582633972,
+ -0.06704418361186981,
+ 0.12578974664211273,
+ -0.019175512716174126,
+ -0.03014247491955757,
+ -0.0019926263485103846,
+ 0.03429127857089043,
+ -0.09525948762893677,
+ 0.01248068455606699,
+ 0.15326575934886932,
+ -0.03648138418793678,
+ 0.057147227227687836,
+ 0.028883259743452072,
+ 0.1634775847196579,
+ 0.08865201473236084,
+ -0.1916368156671524,
+ -0.08679519593715668,
+ -0.5173342227935791,
+ -0.07733722031116486,
+ 0.06933696568012238,
+ 0.15863750874996185,
+ -0.26812443137168884,
+ -0.013752956874668598,
+ 0.0985134094953537,
+ -0.04632226377725601,
+ -0.1769380122423172,
+ 0.029761439189314842,
+ 0.07647883892059326,
+ 0.015910690650343895,
+ -0.1065220981836319,
+ 0.03270692378282547,
+ -0.06884055584669113,
+ -0.009572180919349194,
+ -0.03752324730157852,
+ 0.046956997364759445,
+ 0.13459935784339905,
+ 0.05556648597121239,
+ 0.005140150431543589,
+ -0.18806786835193634,
+ -0.02665076218545437,
+ -0.05613326281309128,
+ 0.0941164419054985,
+ -0.09072589874267578,
+ 0.006406528875231743,
+ -0.12869223952293396,
+ -0.11389891803264618,
+ 0.034323688596487045,
+ -0.12335806339979172,
+ -0.024770274758338928,
+ 0.30221566557884216,
+ 0.011450733989477158,
+ -0.19592434167861938,
+ 0.07453598827123642,
+ -0.13188333809375763,
+ -0.17493167519569397,
+ 0.25114932656288147,
+ 0.1546190083026886,
+ 0.0018013914814218879,
+ -0.09941217303276062,
+ 0.02141127735376358,
+ -0.01277556736022234,
+ -0.31161046028137207,
+ 0.038346532732248306,
+ -7.84418371040374e-05,
+ 0.14943625032901764
+ ],
+ [
+ -0.057931337505578995,
+ 0.04676571115851402,
+ 0.031560298055410385,
+ -0.31932875514030457,
+ 0.03226117789745331,
+ -0.22664225101470947,
+ -0.1987306773662567,
+ 0.24023263156414032,
+ -0.07392103224992752,
+ -0.18093419075012207,
+ 0.133636936545372,
+ 0.0026879049837589264,
+ -0.016858773306012154,
+ -0.15831661224365234,
+ -0.08322469890117645,
+ 0.015900209546089172,
+ 0.07384690642356873,
+ -0.07268921285867691,
+ 0.22745943069458008,
+ 0.11120070517063141,
+ 0.2824326455593109,
+ 0.09807176142930984,
+ -0.09041669219732285,
+ -0.04711882770061493,
+ -0.12488167732954025,
+ -0.22885379195213318,
+ 0.21135295927524567,
+ 0.01846795529127121,
+ 0.09615090489387512,
+ 0.13404689729213715,
+ -0.013243069872260094,
+ -0.10804439336061478,
+ -0.07252001762390137,
+ 0.08882910013198853,
+ -0.05820072069764137,
+ -0.027983849868178368,
+ -0.1459638774394989,
+ 0.031471334397792816,
+ -0.020571263507008553,
+ 0.0678873062133789,
+ 0.02832219935953617,
+ 0.08901669085025787,
+ 0.05193544551730156,
+ -0.00212711188942194,
+ 0.019466858357191086,
+ -0.2799759805202484,
+ 0.027787618339061737,
+ 0.04066411033272743,
+ 0.0695410743355751,
+ 0.11386518180370331,
+ -0.01207781583070755,
+ -0.07779944688081741,
+ -0.05497089400887489,
+ -0.010085235349833965,
+ 0.03456110134720802,
+ -0.004409261979162693,
+ 0.18323655426502228,
+ 0.1590157151222229,
+ -0.14985722303390503,
+ 0.05943793058395386,
+ 0.03351476415991783,
+ -0.03505415841937065,
+ 0.0415654256939888,
+ 0.15158125758171082,
+ -0.10378233343362808,
+ 0.06679604947566986,
+ 0.03420516103506088,
+ -0.19503338634967804,
+ -0.019222533330321312,
+ 0.054617252200841904,
+ 0.07456890493631363,
+ -0.3173748254776001,
+ 0.02183847874403,
+ 0.0011425345437601209,
+ -0.07108188420534134,
+ 0.07732230424880981,
+ -0.015918271616101265,
+ 0.014112315140664577,
+ -0.020890481770038605,
+ -0.018968237563967705,
+ -0.1597152203321457,
+ 0.1506420075893402,
+ -0.06922784447669983,
+ 0.06597818434238434,
+ -0.02436762861907482,
+ -0.031067606061697006,
+ 0.01890355534851551,
+ 0.06144223362207413,
+ -0.22258806228637695,
+ -0.048629410564899445,
+ -0.30330151319503784,
+ -0.12608279287815094,
+ -0.2021186500787735,
+ -0.09767087548971176,
+ 0.06845001131296158,
+ 0.13384124636650085,
+ 0.02682410553097725,
+ 0.07685317099094391,
+ -0.03651538863778114,
+ 0.02496396005153656,
+ -0.0644657090306282,
+ -0.030506810173392296,
+ 0.06659489125013351,
+ -0.008992202579975128,
+ 0.06352001428604126,
+ -0.05934641510248184,
+ -0.23099754750728607,
+ 0.025136062875390053,
+ -0.28503480553627014,
+ -0.04087712988257408,
+ -0.0946996808052063,
+ 0.1775009036064148,
+ 0.04337351396679878,
+ 0.07568489760160446,
+ -0.001892865402624011,
+ -0.032457925379276276,
+ -0.12819498777389526,
+ 0.12104827165603638,
+ 0.1855820119380951,
+ 0.2587057054042816,
+ -0.16338424384593964,
+ -0.05892932415008545,
+ 0.0708334892988205,
+ 0.08962573111057281,
+ -0.29585233330726624,
+ -0.11862656474113464,
+ 0.047787055373191833,
+ -0.32008400559425354
+ ],
+ [
+ -0.2844700217247009,
+ -0.028808237984776497,
+ 0.013639555312693119,
+ -0.010822360403835773,
+ 0.3727062940597534,
+ -0.06374730169773102,
+ -0.14647674560546875,
+ 0.03837158530950546,
+ -0.048870787024497986,
+ 0.06730469316244125,
+ 0.37642326951026917,
+ 0.14971010386943817,
+ -0.5286074876785278,
+ -0.05259702354669571,
+ 0.028521763160824776,
+ 0.06119704619050026,
+ -0.07305024564266205,
+ 0.045818910002708435,
+ 0.022086089476943016,
+ -0.3048144280910492,
+ 0.30507394671440125,
+ -0.0393938384950161,
+ -0.10125887393951416,
+ -0.0033735898323357105,
+ 0.049415234476327896,
+ -0.12388786673545837,
+ -0.3920873701572418,
+ 0.055220216512680054,
+ 0.037233490496873856,
+ 0.09767460078001022,
+ 0.027545401826500893,
+ -0.04818166047334671,
+ -0.1870957612991333,
+ -0.5076246857643127,
+ -0.18586668372154236,
+ 0.0022905725054442883,
+ 0.0853985920548439,
+ 0.06285956501960754,
+ -0.2037002295255661,
+ 0.03555610030889511,
+ 0.11115644872188568,
+ -0.41570237278938293,
+ 0.37359389662742615,
+ -0.05954284220933914,
+ 0.0063908835873007774,
+ -0.02368737943470478,
+ 0.3449402451515198,
+ 0.06068592146039009,
+ -0.16658543050289154,
+ -0.14561904966831207,
+ -0.16373613476753235,
+ -0.014388415031135082,
+ 0.11174788326025009,
+ -0.21835042536258698,
+ 0.06988918036222458,
+ 0.1490606814622879,
+ 0.15180593729019165,
+ 0.03899169713258743,
+ 0.022720851004123688,
+ -0.08441338688135147,
+ -0.1744716465473175,
+ 0.22738522291183472,
+ 0.07596806436777115,
+ 0.21617017686367035,
+ 0.5185579657554626,
+ -0.4741838276386261,
+ -0.15975862741470337,
+ -0.008101433515548706,
+ -0.08675838261842728,
+ -0.8212230205535889,
+ -0.2277543991804123,
+ 0.12778499722480774,
+ -0.7383280396461487,
+ -0.08339580148458481,
+ 0.08745130151510239,
+ 0.17725242674350739,
+ 0.033963073045015335,
+ 0.3018995523452759,
+ 0.00753203546628356,
+ -0.20856428146362305,
+ 0.07117456942796707,
+ -0.16139069199562073,
+ 0.04776102304458618,
+ 0.051256176084280014,
+ -0.23810303211212158,
+ 0.034527070820331573,
+ 0.027872618287801743,
+ -0.037180040031671524,
+ 0.009545322507619858,
+ 0.06901907920837402,
+ 0.4433479309082031,
+ 0.12801507115364075,
+ -0.2932189702987671,
+ -0.2749660015106201,
+ 0.33123689889907837,
+ 0.05365666002035141,
+ -0.16338683664798737,
+ 0.04374559968709946,
+ -0.1003754660487175,
+ 0.019461067393422127,
+ -0.14797253906726837,
+ 0.0756947249174118,
+ -0.4872519075870514,
+ -0.04216231405735016,
+ -0.2900966703891754,
+ -0.238920196890831,
+ -0.035728029906749725,
+ -0.23591332137584686,
+ 0.05014707148075104,
+ -0.07696206122636795,
+ -0.046538468450307846,
+ -0.11927056312561035,
+ 0.21928070485591888,
+ 0.06161428242921829,
+ -0.10891838371753693,
+ -0.2489786148071289,
+ 0.027256693691015244,
+ -0.19853946566581726,
+ -0.03578636422753334,
+ 0.03161167725920677,
+ -0.026132851839065552,
+ -0.017653927206993103,
+ -0.5730936527252197,
+ 0.08169857412576675,
+ -0.08903428167104721,
+ 0.08605242520570755,
+ 0.31881317496299744,
+ 0.15935097634792328
+ ],
+ [
+ -0.10992591828107834,
+ 0.06294616311788559,
+ 0.05293181911110878,
+ -0.1327795833349228,
+ -0.03389513120055199,
+ 0.06948719173669815,
+ 0.011268391273915768,
+ 0.0595281682908535,
+ 0.18986991047859192,
+ 0.22330674529075623,
+ -0.24599291384220123,
+ -0.16066612303256989,
+ 0.18291611969470978,
+ 0.011524345725774765,
+ -0.5592898726463318,
+ -0.15485915541648865,
+ 0.20170776546001434,
+ 0.07820887118577957,
+ -0.15635612607002258,
+ 0.02177715301513672,
+ 0.02772601880133152,
+ 0.1269187182188034,
+ -0.2965095341205597,
+ -0.1724909543991089,
+ 0.07977760583162308,
+ 0.17806535959243774,
+ -0.4216062128543854,
+ -0.05006338655948639,
+ 0.09380391240119934,
+ -0.18199864029884338,
+ 0.035103652626276016,
+ 0.016501834616065025,
+ -0.1600726693868637,
+ 0.17796823382377625,
+ 0.07156526297330856,
+ -0.2404380440711975,
+ 0.11371267586946487,
+ -0.006292153149843216,
+ 0.17945024371147156,
+ -0.2574010193347931,
+ -0.2365780472755432,
+ 0.04174041748046875,
+ 0.13886816799640656,
+ -0.10833429545164108,
+ -1.1836513294838369e-05,
+ -0.0591987706720829,
+ 0.0377790629863739,
+ 0.048982683569192886,
+ 0.2529616057872772,
+ 0.15419423580169678,
+ -0.15173865854740143,
+ 0.018042374402284622,
+ -0.003924254328012466,
+ 0.15501324832439423,
+ 0.024113643914461136,
+ 0.025774510577321053,
+ 0.2061021775007248,
+ 0.11098195612430573,
+ -0.2087148278951645,
+ 0.1666935831308365,
+ 0.23932932317256927,
+ 0.21524085104465485,
+ 0.17176087200641632,
+ 0.06099153310060501,
+ 0.1293404996395111,
+ 0.17875409126281738,
+ -0.5659262537956238,
+ 0.1147182509303093,
+ -0.08159805089235306,
+ -0.31950339674949646,
+ -0.27345433831214905,
+ -0.025521965697407722,
+ -0.363013356924057,
+ -0.05234351009130478,
+ 0.06978554278612137,
+ 0.02640795335173607,
+ -0.0023570405319333076,
+ 0.08333086222410202,
+ -0.05796732008457184,
+ -0.08398536592721939,
+ -0.16811326146125793,
+ -0.23297640681266785,
+ 0.02300517074763775,
+ -0.1551523506641388,
+ 0.2743947207927704,
+ -0.3655557334423065,
+ 0.05276399478316307,
+ -0.07430847734212875,
+ 0.001714037382043898,
+ -0.04971063882112503,
+ 0.1742926687002182,
+ -0.22748109698295593,
+ -0.34282293915748596,
+ -0.020815838128328323,
+ -0.14725050330162048,
+ 0.011130235157907009,
+ -0.2401459813117981,
+ 0.3138495683670044,
+ -0.5373295545578003,
+ 0.0023453361354768276,
+ -0.010622920468449593,
+ -0.16125701367855072,
+ -0.178779736161232,
+ -0.11946995556354523,
+ -0.055056650191545486,
+ -0.1897992193698883,
+ -0.42015761137008667,
+ 0.31870734691619873,
+ -0.08792531490325928,
+ 0.07127426564693451,
+ -0.006108525674790144,
+ 0.15865501761436462,
+ -0.3788885176181793,
+ -0.04802878573536873,
+ 0.04939616844058037,
+ 0.38097894191741943,
+ 0.09732647985219955,
+ 0.038004789501428604,
+ -0.5386629104614258,
+ 0.09361781924962997,
+ -0.3959081768989563,
+ 0.14170975983142853,
+ 0.24393858015537262,
+ -0.05158548429608345,
+ -0.35483941435813904,
+ 0.08243720233440399,
+ 0.4355694353580475,
+ 0.017935259267687798
+ ],
+ [
+ -0.09504737704992294,
+ 0.03814321756362915,
+ 0.19251589477062225,
+ -0.07069138437509537,
+ -0.11735629290342331,
+ 0.10534565895795822,
+ -0.10165545344352722,
+ -0.14102940261363983,
+ -0.13226591050624847,
+ 0.007005801424384117,
+ 0.02985970489680767,
+ 0.07936964184045792,
+ -0.6756815314292908,
+ -0.004462141543626785,
+ -0.003328886814415455,
+ -0.054057441651821136,
+ 0.3961148262023926,
+ 0.031333133578300476,
+ 0.3419254422187805,
+ -1.5545575618743896,
+ -1.8073573112487793,
+ 0.04835018888115883,
+ -0.06621672213077545,
+ 0.0654698982834816,
+ 0.11029107868671417,
+ -0.15954026579856873,
+ 0.09718896448612213,
+ 0.01058522891253233,
+ -0.015305875800549984,
+ 0.11794907599687576,
+ -0.07894407212734222,
+ -0.1756177693605423,
+ -0.28834086656570435,
+ -0.06660226732492447,
+ 0.12221450358629227,
+ -0.032818201929330826,
+ -0.5335270762443542,
+ -0.4405561685562134,
+ 0.2446363866329193,
+ -0.08983560651540756,
+ -0.0665493905544281,
+ 0.21899861097335815,
+ 0.1774977147579193,
+ 0.10739301890134811,
+ 0.054015152156353,
+ 0.07766268402338028,
+ 0.09007930010557175,
+ -0.11462567746639252,
+ 0.23740418255329132,
+ 0.16818732023239136,
+ 0.08789998292922974,
+ 0.05478785187005997,
+ 0.01801237463951111,
+ 0.20310476422309875,
+ -0.1059441938996315,
+ 0.05987584590911865,
+ -0.3295327126979828,
+ 0.035538241267204285,
+ 0.21564818918704987,
+ -0.5653443336486816,
+ -0.7986452579498291,
+ 0.03291596099734306,
+ 0.1638323962688446,
+ -0.5297175645828247,
+ -0.022905895486474037,
+ 0.0434148870408535,
+ 0.15279027819633484,
+ 0.013314558193087578,
+ -0.07382505387067795,
+ 0.2002612054347992,
+ -0.21723191440105438,
+ -0.12464546412229538,
+ 0.04300158843398094,
+ -0.06718987226486206,
+ 0.11162332445383072,
+ 0.034300245344638824,
+ 0.02470703423023224,
+ 0.10004332661628723,
+ -0.2567947804927826,
+ -0.9704762697219849,
+ 0.04648102819919586,
+ 0.1361691802740097,
+ -0.07546725124120712,
+ 0.9300634264945984,
+ -0.33756014704704285,
+ 0.03787078708410263,
+ -0.01069867704063654,
+ 0.25141775608062744,
+ -0.1922580748796463,
+ -0.10937047004699707,
+ 0.22346897423267365,
+ -0.08307121694087982,
+ -0.844054102897644,
+ -0.036981116980314255,
+ -1.2671045064926147,
+ -0.14072991907596588,
+ -0.4736660122871399,
+ -0.047189705073833466,
+ 0.040674589574337006,
+ -0.2579832077026367,
+ 0.09915654361248016,
+ -0.43463006615638733,
+ -0.14166904985904694,
+ -0.7018392086029053,
+ 0.5571130514144897,
+ 0.05528317019343376,
+ 0.046841010451316833,
+ -0.01242025475949049,
+ -0.09942496567964554,
+ 0.5649347901344299,
+ -0.20540086925029755,
+ 0.24493055045604706,
+ -0.04554209113121033,
+ -0.13907596468925476,
+ -0.18828994035720825,
+ -0.09154419600963593,
+ -0.09863393753767014,
+ 0.0848577618598938,
+ -0.04180509224534035,
+ 0.0427023246884346,
+ -0.1330210566520691,
+ -0.20735061168670654,
+ -0.4460740089416504,
+ 0.35854384303092957,
+ 0.350202351808548,
+ 0.3085081875324249,
+ 0.09496332705020905,
+ -0.3187117874622345
+ ],
+ [
+ 0.00826207920908928,
+ -0.17036442458629608,
+ 0.16956280171871185,
+ 0.05665018409490585,
+ -0.41616660356521606,
+ -0.02198522910475731,
+ 0.1317703276872635,
+ 0.02359050139784813,
+ 0.18789348006248474,
+ 0.11013378202915192,
+ 0.25434064865112305,
+ -0.029478469863533974,
+ 0.4354928433895111,
+ -0.13719771802425385,
+ -0.04760434478521347,
+ -0.05107756704092026,
+ 0.03623955324292183,
+ 0.06056300550699234,
+ 0.0009544981294311583,
+ -0.3473834693431854,
+ -0.7478641271591187,
+ 0.1584187150001526,
+ -0.12803016602993011,
+ 0.049315162003040314,
+ 0.08214504271745682,
+ 0.03281671181321144,
+ 0.009988303296267986,
+ 0.14750882983207703,
+ -0.1401960402727127,
+ -0.019428541883826256,
+ -0.14678555727005005,
+ 0.241935133934021,
+ -0.2653272747993469,
+ 0.18951725959777832,
+ -0.15260407328605652,
+ -0.27242225408554077,
+ -0.27575019001960754,
+ 0.184384286403656,
+ -0.20168530941009521,
+ -0.17849569022655487,
+ -0.009748085401952267,
+ -0.09181280434131622,
+ -0.09598128497600555,
+ -0.11298323422670364,
+ -0.008697286248207092,
+ -0.3363116979598999,
+ -0.0323861688375473,
+ 0.14833243191242218,
+ 0.12453241646289825,
+ -0.41279691457748413,
+ -0.08180126547813416,
+ -0.030452042818069458,
+ 0.016901595517992973,
+ 0.153997540473938,
+ -0.07433262467384338,
+ 0.11704505980014801,
+ 0.2565838396549225,
+ 0.1644185334444046,
+ 0.1330583095550537,
+ -0.10123724490404129,
+ -0.3928241729736328,
+ 0.18613408505916595,
+ -0.012530628591775894,
+ -0.09419838339090347,
+ 0.1788119673728943,
+ 0.2084224671125412,
+ 0.19888044893741608,
+ -0.05791282281279564,
+ 0.010141042992472649,
+ 0.09553244709968567,
+ 0.20334787666797638,
+ 0.03826738893985748,
+ 0.13083937764167786,
+ 0.00025820991140790284,
+ -0.27196016907691956,
+ 0.09734280407428741,
+ 0.16093650460243225,
+ 0.08955198526382446,
+ -0.04222914204001427,
+ -0.08410514146089554,
+ -0.05284685268998146,
+ 0.013127036392688751,
+ -0.046610213816165924,
+ -0.25042954087257385,
+ -0.051401056349277496,
+ 0.17128968238830566,
+ 0.051585063338279724,
+ 0.16510359942913055,
+ 0.12969690561294556,
+ 0.08426947146654129,
+ 0.13037504255771637,
+ 0.14512485265731812,
+ -1.022443413734436,
+ 0.15745048224925995,
+ 0.0038077698554843664,
+ -0.06111006438732147,
+ -0.07440412044525146,
+ 0.1388392299413681,
+ 0.19755159318447113,
+ -0.015021322295069695,
+ -0.028497468680143356,
+ 0.00849470216780901,
+ -0.0029779034666717052,
+ 0.005381310824304819,
+ -0.17882679402828217,
+ 0.049252431839704514,
+ 0.07118367403745651,
+ -0.13490457832813263,
+ -0.12662304937839508,
+ 0.003441554494202137,
+ -0.08777172863483429,
+ -0.0779477059841156,
+ 0.22539277374744415,
+ -0.03571528196334839,
+ 0.01556404959410429,
+ 0.1042274758219719,
+ -0.05476674064993858,
+ -0.08992290496826172,
+ 0.03269844502210617,
+ 0.05469800531864166,
+ 0.06168848276138306,
+ -0.16720812022686005,
+ -0.06592715531587601,
+ -0.025193560868501663,
+ -0.07905664294958115,
+ -0.10791612416505814,
+ -0.05785524100065231,
+ 0.1371879130601883
+ ],
+ [
+ 0.07062950730323792,
+ 0.20408162474632263,
+ 0.10676775127649307,
+ -0.09831234812736511,
+ -0.08411221206188202,
+ 0.0037321457639336586,
+ 0.12322406470775604,
+ 0.03196702152490616,
+ 0.11803048104047775,
+ 0.10732411593198776,
+ 0.04050784930586815,
+ -0.056104060262441635,
+ 0.3319401443004608,
+ -0.016812102869153023,
+ 0.124602310359478,
+ -0.6146717071533203,
+ 0.23294201493263245,
+ 0.5760626196861267,
+ 0.24226708710193634,
+ 0.5344154834747314,
+ 0.07773078233003616,
+ 0.06783264875411987,
+ 0.019812947139143944,
+ 0.10175902396440506,
+ -0.4809674322605133,
+ -0.07688675075769424,
+ 0.17616894841194153,
+ 0.030312329530715942,
+ -0.08690944314002991,
+ 0.07149839401245117,
+ 0.04005451872944832,
+ 0.242025226354599,
+ -0.19808068871498108,
+ 0.03317704796791077,
+ -0.24886931478977203,
+ -0.07284005731344223,
+ -0.06297941505908966,
+ 0.18243791162967682,
+ -0.14910565316677094,
+ 0.06621099263429642,
+ -0.14458221197128296,
+ 0.026793446391820908,
+ -0.016177134588360786,
+ -0.24264724552631378,
+ -0.14334256947040558,
+ 0.14479684829711914,
+ 0.07383359968662262,
+ 0.20937541127204895,
+ 0.0029576176311820745,
+ 0.00993114523589611,
+ 0.14728277921676636,
+ -0.05470586568117142,
+ -0.21031762659549713,
+ 0.026293842121958733,
+ 0.021250493824481964,
+ 0.05948925390839577,
+ -0.17103122174739838,
+ 0.10194701701402664,
+ -0.08111989498138428,
+ -0.021941518411040306,
+ -0.2832324206829071,
+ -0.2518366575241089,
+ 0.14903129637241364,
+ -0.28011220693588257,
+ -0.1348002552986145,
+ -0.05931214243173599,
+ -0.08532548695802689,
+ 0.034552522003650665,
+ -0.03716877102851868,
+ 0.3281300961971283,
+ -0.04695723205804825,
+ 0.007571196183562279,
+ -0.08623506128787994,
+ -0.09671597182750702,
+ -0.16667070984840393,
+ -0.091814786195755,
+ 0.14025789499282837,
+ 0.20195411145687103,
+ -0.2612152695655823,
+ 0.028432732447981834,
+ -0.03167806565761566,
+ -0.01580817624926567,
+ 0.08364537358283997,
+ 0.018187755718827248,
+ 0.029392287135124207,
+ 0.020834816619753838,
+ -0.5257556438446045,
+ -0.13787657022476196,
+ 0.08300191164016724,
+ -0.01668335124850273,
+ -0.1032351478934288,
+ 0.505081295967102,
+ -0.4197598397731781,
+ -0.21764254570007324,
+ 0.04332650452852249,
+ -0.15630537271499634,
+ 0.0887550413608551,
+ -0.3400382101535797,
+ -0.5321564078330994,
+ -0.21906690299510956,
+ 0.05037899687886238,
+ -0.08185530453920364,
+ -0.06740721315145493,
+ -0.09015244990587234,
+ 0.20350199937820435,
+ 0.22322039306163788,
+ -0.001217774348333478,
+ 0.11935678869485855,
+ -0.3102191090583801,
+ -0.11313777416944504,
+ 0.05293910205364227,
+ 0.0059758019633591175,
+ -0.13472746312618256,
+ -0.10790900141000748,
+ 0.1166258379817009,
+ 0.3060673475265503,
+ -0.21816758811473846,
+ -0.008304454386234283,
+ 0.07889848947525024,
+ -0.22403965890407562,
+ -0.10326699167490005,
+ 0.18266434967517853,
+ -0.16318121552467346,
+ 0.14864173531532288,
+ 0.219834104180336,
+ -0.2441873550415039,
+ 0.20704297721385956,
+ 0.11781461536884308
+ ],
+ [
+ 0.039343640208244324,
+ -0.05528906360268593,
+ -0.031396299600601196,
+ 0.017721079289913177,
+ -0.005985046271234751,
+ -0.017162015661597252,
+ 0.09949550777673721,
+ 0.03307585418224335,
+ -0.03866153955459595,
+ 0.029979346320033073,
+ -0.055466294288635254,
+ -0.14494140446186066,
+ -0.0523548498749733,
+ -0.10776856541633606,
+ 0.09713703393936157,
+ 0.0074309539049863815,
+ 0.00520939938724041,
+ 0.020074084401130676,
+ -0.07243605703115463,
+ -0.09205352514982224,
+ 0.1729525923728943,
+ 0.026043778285384178,
+ -0.07654813677072525,
+ -0.08106978982686996,
+ 0.10888468474149704,
+ -0.0885794460773468,
+ -0.025223782286047935,
+ 0.0611095055937767,
+ 0.03899270296096802,
+ -0.16660411655902863,
+ -0.03989091143012047,
+ -0.11982592940330505,
+ 0.057563841342926025,
+ -0.05798552930355072,
+ 0.10797049105167389,
+ -0.03592795506119728,
+ -0.09989313036203384,
+ 0.014134765602648258,
+ 0.042946986854076385,
+ 0.026015210896730423,
+ 0.022193163633346558,
+ -0.006772022694349289,
+ 0.15258754789829254,
+ -0.024887550622224808,
+ 0.10453978925943375,
+ -0.07259868830442429,
+ -0.06710069626569748,
+ -0.050422195345163345,
+ -0.14139164984226227,
+ 0.005072456318885088,
+ 0.19964133203029633,
+ -0.15547586977481842,
+ -0.052428994327783585,
+ 0.00892260018736124,
+ 0.07510624825954437,
+ 0.09770054370164871,
+ -0.026861442252993584,
+ -0.09976668655872345,
+ 0.07974722236394882,
+ -0.009952819906175137,
+ 0.0021986605133861303,
+ 0.10029482841491699,
+ 0.05973726883530617,
+ -0.028586866334080696,
+ 0.028565963730216026,
+ 0.161594420671463,
+ -0.2518689036369324,
+ -0.21201564371585846,
+ 0.06565915048122406,
+ -0.025195157155394554,
+ 0.07735827565193176,
+ 0.050215210765600204,
+ -0.10829400271177292,
+ 0.030763404443860054,
+ -0.043440598994493484,
+ 0.07601039111614227,
+ -0.049494218081235886,
+ -0.008901811204850674,
+ 0.07696651667356491,
+ 0.04403172433376312,
+ -0.021207008510828018,
+ 0.14552077651023865,
+ 0.03201063349843025,
+ 0.0069293431006371975,
+ -0.057520363479852676,
+ 0.06712079048156738,
+ -0.0427376851439476,
+ 0.01910516992211342,
+ -0.095307856798172,
+ 0.11301161348819733,
+ 0.024013131856918335,
+ 0.07118772715330124,
+ 0.07968463003635406,
+ -0.039409007877111435,
+ 0.11455775797367096,
+ -0.11815192550420761,
+ 0.008788729086518288,
+ 0.031139807775616646,
+ -0.1287432312965393,
+ -0.030268067494034767,
+ -0.04805348441004753,
+ -0.11988190561532974,
+ -0.034271273761987686,
+ -0.04182395711541176,
+ 0.004398145712912083,
+ -0.08602117002010345,
+ 0.08337955176830292,
+ -0.046409107744693756,
+ 0.058283381164073944,
+ 0.08603472262620926,
+ 0.0003876144182868302,
+ 0.018957020714879036,
+ 0.0010602043475955725,
+ 0.05096057057380676,
+ 0.05283350497484207,
+ 0.080174021422863,
+ 0.12086799740791321,
+ -0.026586215943098068,
+ -0.056771911680698395,
+ 0.08281164616346359,
+ 0.009452825412154198,
+ -0.016265960410237312,
+ 0.05491306260228157,
+ -0.00451164785772562,
+ -0.022449523210525513,
+ 0.006326174363493919,
+ -0.047152865678071976,
+ -0.0791773721575737
+ ],
+ [
+ -0.02680901437997818,
+ 0.04456852376461029,
+ 0.04995998367667198,
+ -0.01953991688787937,
+ -0.03530638664960861,
+ 0.04610345512628555,
+ 0.04165656864643097,
+ 0.05606025829911232,
+ -0.00023522402625530958,
+ -0.08275459706783295,
+ 9.005246101878583e-05,
+ -0.05516372248530388,
+ 0.04659361019730568,
+ -0.05841856449842453,
+ 0.04125639796257019,
+ -0.0064588868990540504,
+ 0.024989528581500053,
+ 0.08228730410337448,
+ 0.11557576805353165,
+ 0.05530920997262001,
+ 0.0785900205373764,
+ 0.04960399866104126,
+ 0.02664068527519703,
+ 0.11722312867641449,
+ 0.07923530042171478,
+ -0.18454985320568085,
+ -0.017304088920354843,
+ 0.031935133039951324,
+ 0.06235995143651962,
+ -0.01837725006043911,
+ -0.06213510408997536,
+ -0.13798704743385315,
+ -0.08927779644727707,
+ 0.04174543917179108,
+ 0.02865150012075901,
+ -0.00044752334360964596,
+ -0.09941127151250839,
+ 0.03495108708739281,
+ 0.14351266622543335,
+ -0.008367171511054039,
+ 0.1453353613615036,
+ 0.02690790966153145,
+ 0.0007977214409038424,
+ 0.07328478246927261,
+ -0.012772386893630028,
+ -0.004093134310096502,
+ -0.056104037910699844,
+ 0.06982901692390442,
+ -0.027725908905267715,
+ 0.001962026348337531,
+ -0.13644294440746307,
+ 0.07331959158182144,
+ -0.06869703531265259,
+ 0.02389492839574814,
+ -0.017539825290441513,
+ -0.0810656026005745,
+ -0.01983054168522358,
+ 0.0005192008684389293,
+ 0.04733427241444588,
+ 0.023226935416460037,
+ -0.034762416034936905,
+ -0.017720580101013184,
+ -0.002586296759545803,
+ -0.02743210643529892,
+ 0.14236494898796082,
+ 0.06611646711826324,
+ -0.011383340694010258,
+ -0.18151947855949402,
+ -0.009386081248521805,
+ 0.03433949127793312,
+ 0.08333136141300201,
+ 0.07886802405118942,
+ 0.08572962135076523,
+ 0.046896569430828094,
+ 0.00688902148976922,
+ 0.1124100312590599,
+ -0.04512825608253479,
+ -0.010578319430351257,
+ 0.07748563587665558,
+ -0.05894193798303604,
+ -0.01141420193016529,
+ 0.1266210973262787,
+ -0.04588965326547623,
+ -0.050025518983602524,
+ 0.06369630247354507,
+ 0.06437646597623825,
+ -0.02933298982679844,
+ 0.09911200404167175,
+ -0.04039739444851875,
+ -0.006226087920367718,
+ -0.15052561461925507,
+ -0.010537318885326385,
+ 0.018890703096985817,
+ 0.06434519588947296,
+ -0.00482111144810915,
+ -0.056040678173303604,
+ 0.02842571958899498,
+ -0.05419834330677986,
+ 0.09007715433835983,
+ -0.008179510943591595,
+ 0.0007091247825883329,
+ -0.07366126030683517,
+ 0.11279283463954926,
+ -0.03337278962135315,
+ 0.07566022872924805,
+ 0.07144822180271149,
+ -0.00028278198442421854,
+ -0.0710919201374054,
+ -0.031133705750107765,
+ -0.027944492176175117,
+ 0.050594083964824677,
+ 0.10429167747497559,
+ 0.0698527842760086,
+ -0.07157225161790848,
+ 0.11084455251693726,
+ 0.024769946932792664,
+ -0.17032736539840698,
+ 0.09184965491294861,
+ -0.028921226039528847,
+ -0.06164158508181572,
+ -0.07758671790361404,
+ -0.003178437938913703,
+ 0.037643540650606155,
+ 0.07231781631708145,
+ -0.10061667114496231,
+ -0.0186628308147192,
+ 0.03188207000494003,
+ -0.012063825502991676
+ ],
+ [
+ 0.04184660315513611,
+ 0.12218637764453888,
+ 0.187053844332695,
+ -0.14552491903305054,
+ 0.07416565716266632,
+ -0.3564668893814087,
+ -0.04529449716210365,
+ -0.024167131632566452,
+ 0.04651229828596115,
+ -0.2713988423347473,
+ -0.12948209047317505,
+ -0.024510860443115234,
+ -0.33198797702789307,
+ 0.12814971804618835,
+ 0.006487732753157616,
+ 0.08312752097845078,
+ -0.03629077225923538,
+ -0.2233487069606781,
+ 0.11056563258171082,
+ 0.11516036838293076,
+ -0.41133424639701843,
+ -0.04917778819799423,
+ -0.005886328872293234,
+ -0.17711596190929413,
+ 0.07526475936174393,
+ -0.20924986898899078,
+ 0.2977084219455719,
+ 0.01789751462638378,
+ 0.07090257108211517,
+ -0.08760331571102142,
+ 0.09887681901454926,
+ -0.06877495348453522,
+ -0.21875838935375214,
+ 0.15971097350120544,
+ 0.026184700429439545,
+ 0.0031243874691426754,
+ 0.1127190813422203,
+ -0.035306379199028015,
+ 0.07345717400312424,
+ 0.027339741587638855,
+ -0.0036064202431589365,
+ 0.13626790046691895,
+ -0.11920525878667831,
+ 0.008525659330189228,
+ -0.039921585470438004,
+ -0.003908854443579912,
+ -0.10399197041988373,
+ 0.10498303174972534,
+ -0.1116369366645813,
+ 0.23612679541110992,
+ 0.0932052880525589,
+ 0.1789865642786026,
+ 0.043144144117832184,
+ 0.04160340875387192,
+ 0.12297949939966202,
+ -0.1065034344792366,
+ 0.038646407425403595,
+ 0.036563217639923096,
+ -0.10904667526483536,
+ 0.02541879191994667,
+ -0.3490541875362396,
+ 0.18042968213558197,
+ -0.00980855617672205,
+ -0.08009811490774155,
+ -0.0907079353928566,
+ -0.4989135265350342,
+ 0.18854890763759613,
+ 0.0683874785900116,
+ -0.40825873613357544,
+ 0.002873203018680215,
+ 0.15703071653842926,
+ -0.38055479526519775,
+ -0.122237928211689,
+ 0.019502032548189163,
+ -0.132590651512146,
+ 0.2942887544631958,
+ 0.0025757476687431335,
+ -0.12440188974142075,
+ -0.04862651973962784,
+ -0.010301540605723858,
+ 0.21414688229560852,
+ -0.23572352528572083,
+ 0.09659972041845322,
+ 0.07314793020486832,
+ 0.005589250009506941,
+ -0.06849091500043869,
+ 0.10665397346019745,
+ -0.06187494471669197,
+ -0.19952359795570374,
+ -0.2216297686100006,
+ 0.030555931851267815,
+ -0.12020791321992874,
+ -0.19082389771938324,
+ 0.04788019508123398,
+ 0.12246611714363098,
+ 0.10159742832183838,
+ -0.16049636900424957,
+ -0.07396385073661804,
+ -0.012247608043253422,
+ -0.10770740360021591,
+ 0.18443670868873596,
+ -0.08341501653194427,
+ 0.046902503818273544,
+ 0.0206928551197052,
+ -0.015642035752534866,
+ -0.29878559708595276,
+ 0.08711623400449753,
+ -0.06448405981063843,
+ -0.029813252389431,
+ 0.11123139411211014,
+ 0.05302610993385315,
+ 0.1958516538143158,
+ 0.02174725942313671,
+ 0.09459438920021057,
+ -0.10891860723495483,
+ -0.8298431038856506,
+ -0.010869813151657581,
+ 0.029071323573589325,
+ -0.234670490026474,
+ 0.19867867231369019,
+ 0.2801978886127472,
+ -0.19348283112049103,
+ -0.22788499295711517,
+ 0.19306322932243347,
+ -0.021936122328042984,
+ 0.12827585637569427,
+ 0.27825435996055603,
+ 0.11344289779663086
+ ],
+ [
+ 0.06816712021827698,
+ 0.1669611632823944,
+ 0.14921796321868896,
+ -0.9147858619689941,
+ -0.005651181563735008,
+ 0.03556949645280838,
+ -0.4703153967857361,
+ 0.10316535085439682,
+ 0.10405445098876953,
+ 0.15853941440582275,
+ 0.2545525133609772,
+ -0.03948155418038368,
+ 0.24576494097709656,
+ -0.21635200083255768,
+ -0.2729499936103821,
+ 0.10008502751588821,
+ -0.025241227820515633,
+ 0.7085394859313965,
+ -0.18546108901500702,
+ -0.6256080865859985,
+ -0.18095125257968903,
+ 0.16116711497306824,
+ -0.09507877379655838,
+ -0.037821780890226364,
+ -0.15982376039028168,
+ -0.27025073766708374,
+ -0.019091535359621048,
+ -0.19568999111652374,
+ -0.09716746211051941,
+ -0.03246719390153885,
+ 0.22099968791007996,
+ -0.4411758482456207,
+ -0.059055209159851074,
+ -0.05856786668300629,
+ -0.28962332010269165,
+ -0.15297867357730865,
+ -0.11611264944076538,
+ -0.08864841610193253,
+ 0.04635544866323471,
+ 0.15925022959709167,
+ -0.32793307304382324,
+ -0.07744668424129486,
+ -0.04677401855587959,
+ -0.11061180382966995,
+ -0.8263669610023499,
+ -0.16805681586265564,
+ 0.4758889377117157,
+ 0.3626023828983307,
+ 0.17875823378562927,
+ -0.1819436401128769,
+ -0.20459015667438507,
+ 0.12811842560768127,
+ 0.08237505704164505,
+ 0.0014551745261996984,
+ -0.2037612944841385,
+ 0.08784633129835129,
+ 0.1692775934934616,
+ 0.09130627661943436,
+ -0.07132097333669662,
+ -0.09378860890865326,
+ -0.08448892086744308,
+ -0.10878828912973404,
+ -0.05419682711362839,
+ -0.2101709395647049,
+ 0.04264992102980614,
+ 0.0860786885023117,
+ 0.2168550044298172,
+ 0.0025893710553646088,
+ 0.01294972375035286,
+ -0.039180655032396317,
+ 0.1871774047613144,
+ 0.0033453505020588636,
+ -0.25099948048591614,
+ -0.2725472152233124,
+ -0.47173652052879333,
+ 0.2191726714372635,
+ -0.280659943819046,
+ -0.9304627776145935,
+ -0.355610728263855,
+ 0.013721353374421597,
+ -0.13586781919002533,
+ -0.23808583617210388,
+ 0.15713149309158325,
+ -0.06893289089202881,
+ -0.12002011388540268,
+ 0.15188805758953094,
+ 0.14597928524017334,
+ 0.20122715830802917,
+ 0.22376807034015656,
+ -0.013889013789594173,
+ 0.1933085024356842,
+ 0.35562169551849365,
+ 0.009428433142602444,
+ -0.2196909338235855,
+ -0.061648860573768616,
+ -0.1062820553779602,
+ 0.3600105345249176,
+ 0.13556723296642303,
+ -0.09912915527820587,
+ -0.7553201913833618,
+ 0.06891516596078873,
+ -0.09921479225158691,
+ 0.0920078232884407,
+ 0.07753375917673111,
+ -0.36023029685020447,
+ -0.3539535105228424,
+ -0.5030076503753662,
+ 0.027931228280067444,
+ 0.30297529697418213,
+ -0.06807316094636917,
+ 0.2104732245206833,
+ -0.42509859800338745,
+ 0.15896400809288025,
+ 0.191303089261055,
+ 0.11663074791431427,
+ 0.09342294186353683,
+ -0.14819182455539703,
+ 0.042659543454647064,
+ 0.024075442925095558,
+ 0.07538778334856033,
+ 0.007116188295185566,
+ 0.02837240882217884,
+ -0.17887137830257416,
+ -0.17289553582668304,
+ -0.20362181961536407,
+ 0.07188300043344498,
+ -0.06909217685461044,
+ -0.11693855375051498
+ ],
+ [
+ -0.03659050539135933,
+ -0.13951465487480164,
+ 0.09687329083681107,
+ -0.06617806851863861,
+ 0.05291234329342842,
+ 0.010775621980428696,
+ 0.031072478741407394,
+ -0.059151846915483475,
+ 0.05587488040328026,
+ -0.016148053109645844,
+ 0.14599159359931946,
+ 0.13420364260673523,
+ -0.17319637537002563,
+ -0.07856179773807526,
+ -0.08787840604782104,
+ -0.02872447855770588,
+ 0.1671314239501953,
+ -0.21409884095191956,
+ -0.02647704817354679,
+ -0.12452127039432526,
+ -0.040452685207128525,
+ 0.00316391303204,
+ -0.15746735036373138,
+ 0.0555284284055233,
+ -0.0029142077546566725,
+ -0.05270341783761978,
+ 0.1542748659849167,
+ -0.09783735126256943,
+ 0.13474851846694946,
+ 0.08430666476488113,
+ -0.06649921089410782,
+ -0.0761638730764389,
+ -0.10178010165691376,
+ -0.017518706619739532,
+ 0.043492089956998825,
+ 0.012107538059353828,
+ -0.11644679307937622,
+ 0.06603296846151352,
+ -0.15838061273097992,
+ 0.04585065692663193,
+ 0.0757729709148407,
+ -0.05224213749170303,
+ 0.04748325049877167,
+ 0.10953782498836517,
+ -0.010537451133131981,
+ -0.1867198348045349,
+ 0.05298299342393875,
+ -0.14793828129768372,
+ 0.1583813726902008,
+ 0.004034178797155619,
+ -0.035077355802059174,
+ -0.2747015655040741,
+ 0.06295948475599289,
+ 0.035236820578575134,
+ -0.1072302758693695,
+ 0.07239974290132523,
+ 0.2196403294801712,
+ 0.15601153671741486,
+ -0.07855222374200821,
+ -0.0054009114392101765,
+ -0.13757292926311493,
+ -0.04407311603426933,
+ -0.02955280803143978,
+ 0.05792798101902008,
+ 0.06891844421625137,
+ 0.011730763129889965,
+ 0.18097640573978424,
+ 0.041041020303964615,
+ -0.06945661455392838,
+ -0.04792236536741257,
+ -0.01661137118935585,
+ -0.0485394112765789,
+ 0.13165493309497833,
+ -0.043900687247514725,
+ 0.044644422829151154,
+ -0.004929292947053909,
+ -0.12835608422756195,
+ -0.28444793820381165,
+ -0.0342266708612442,
+ 0.07114441692829132,
+ -0.18344828486442566,
+ 0.026726121082901955,
+ -0.014703875407576561,
+ 0.0007623568526469171,
+ -0.12135091423988342,
+ 0.002192347077652812,
+ 0.10958565026521683,
+ 0.0843985453248024,
+ 0.006787269841879606,
+ -0.00619725463911891,
+ 0.16494961082935333,
+ -0.01603946089744568,
+ -0.221614271402359,
+ 0.0592527911067009,
+ 0.04577099531888962,
+ 0.10602207481861115,
+ -0.04550449922680855,
+ 0.08952442556619644,
+ 0.010127106681466103,
+ -0.23720663785934448,
+ -0.05248814448714256,
+ 0.040054965764284134,
+ -0.002014769008383155,
+ -0.07009302079677582,
+ -0.0706329345703125,
+ -0.11958833783864975,
+ 0.00848864670842886,
+ -0.06270486116409302,
+ 0.01732959970831871,
+ -0.07989004999399185,
+ 0.07793155312538147,
+ 0.025497352704405785,
+ -0.02718839980661869,
+ 0.046647511422634125,
+ -0.057425834238529205,
+ 0.031431831419467926,
+ -0.10488121211528778,
+ 0.14564234018325806,
+ 0.03156057000160217,
+ 0.15347854793071747,
+ -0.10059128701686859,
+ -0.018728919327259064,
+ 0.19918720424175262,
+ 0.22199216485023499,
+ -0.11636379361152649,
+ -0.1416979432106018,
+ 0.08755689114332199,
+ 0.1108296737074852
+ ],
+ [
+ 0.3273962140083313,
+ -0.09161362051963806,
+ -0.016535619273781776,
+ -0.08057495951652527,
+ -0.08731499314308167,
+ -0.49288415908813477,
+ 0.10627418011426926,
+ -0.021653974428772926,
+ -0.05700734257698059,
+ -0.0006110180984251201,
+ 0.14501552283763885,
+ -0.11893128603696823,
+ -1.6352616548538208,
+ 0.11249319463968277,
+ -0.08955124765634537,
+ -0.12836459279060364,
+ -0.39704203605651855,
+ 0.07206829637289047,
+ 0.1330057680606842,
+ 0.1498335748910904,
+ 0.14233633875846863,
+ -0.23813354969024658,
+ 0.03329815715551376,
+ -0.22015886008739471,
+ 0.028160570189356804,
+ -0.08306238055229187,
+ 0.3087393641471863,
+ -0.1009536013007164,
+ -0.15982866287231445,
+ -0.3260402977466583,
+ 0.06664086133241653,
+ 0.13112951815128326,
+ 0.1723480373620987,
+ 0.19691939651966095,
+ -0.3206341862678528,
+ -0.15886808931827545,
+ -0.04317602887749672,
+ 0.0054625170305371284,
+ -0.23887322843074799,
+ 0.12085366249084473,
+ -0.0029327047523111105,
+ 0.23097309470176697,
+ -0.1332031786441803,
+ -0.17394165694713593,
+ 0.16312849521636963,
+ 0.11935395747423172,
+ -0.05700867623090744,
+ 0.08909250050783157,
+ -0.09962256252765656,
+ 0.24343916773796082,
+ 0.08672957867383957,
+ 0.06748337298631668,
+ -0.1304151713848114,
+ -0.14422419667243958,
+ -0.05693608149886131,
+ -0.1031961590051651,
+ 0.08272887021303177,
+ 0.2645004391670227,
+ -0.15639743208885193,
+ 0.10261597484350204,
+ -0.00800550077110529,
+ 0.1001395508646965,
+ 0.1287437379360199,
+ -0.27271321415901184,
+ -0.0394158661365509,
+ 0.04946065694093704,
+ 0.11651189625263214,
+ -0.2161467969417572,
+ -0.2123977541923523,
+ 0.10775340348482132,
+ 0.2331734299659729,
+ -0.14402452111244202,
+ -0.003717035287991166,
+ -0.02789275534451008,
+ -0.11394866555929184,
+ 0.14234599471092224,
+ 0.03951741009950638,
+ -0.149675190448761,
+ -0.07605940848588943,
+ -0.0012004936579614878,
+ -0.2231462150812149,
+ -0.21617433428764343,
+ -0.0038362254854291677,
+ 0.018399015069007874,
+ 0.03414956480264664,
+ 0.03002401441335678,
+ -0.09034019708633423,
+ 0.1557830572128296,
+ -0.07291919738054276,
+ 0.043498411774635315,
+ -0.0919022262096405,
+ -0.08479759097099304,
+ -0.06574303656816483,
+ -0.004369721747934818,
+ 0.03062618151307106,
+ -0.11595692485570908,
+ 0.1092069000005722,
+ -0.07301148027181625,
+ 0.07405918091535568,
+ -0.24496181309223175,
+ -0.031301192939281464,
+ -0.18977706134319305,
+ 0.03765131160616875,
+ 0.023552514612674713,
+ -0.0013368577929213643,
+ -0.11323811113834381,
+ -0.15886826813220978,
+ 0.17266668379306793,
+ -0.11227794736623764,
+ 0.033062644302845,
+ 0.07064338028430939,
+ -0.5133976936340332,
+ 0.22012941539287567,
+ 0.10951317846775055,
+ -0.04302984103560448,
+ -0.27083370089530945,
+ 0.1438116431236267,
+ 0.254339337348938,
+ -0.016837691888213158,
+ 0.039612144231796265,
+ 0.21017570793628693,
+ -0.2714381217956543,
+ 0.0793779119849205,
+ -0.11445919424295425,
+ -0.3139689564704895,
+ -0.11331900209188461,
+ 0.17284204065799713,
+ -0.024502916261553764
+ ],
+ [
+ -0.002941761864349246,
+ -0.17560790479183197,
+ -0.1727912873029709,
+ 0.0512942299246788,
+ 0.021632233634591103,
+ 0.03146487846970558,
+ 0.03634396940469742,
+ -0.12041804194450378,
+ -0.05380634963512421,
+ -0.0481334924697876,
+ -0.06328552216291428,
+ -0.05689336732029915,
+ -0.09020183235406876,
+ -0.0912633165717125,
+ 0.10141853988170624,
+ -0.02628502808511257,
+ -0.11012677848339081,
+ -0.00534454733133316,
+ 0.05631250515580177,
+ -0.08152817189693451,
+ 0.032827720046043396,
+ -0.09533423185348511,
+ -0.04290631413459778,
+ 0.11135834455490112,
+ -0.02895382232964039,
+ -0.032064538449048996,
+ 0.005697549320757389,
+ 0.08756784349679947,
+ 0.07222053408622742,
+ -0.015418276190757751,
+ -0.1028999537229538,
+ -0.0008464159327559173,
+ 0.0511598102748394,
+ -0.05584995448589325,
+ -0.1956242024898529,
+ -0.04471680894494057,
+ -0.01566525362432003,
+ -0.06455346196889877,
+ -0.019685450941324234,
+ 0.06851392984390259,
+ -0.011926657520234585,
+ 0.044774651527404785,
+ 0.07288236916065216,
+ 0.10694516450166702,
+ 0.08736639469861984,
+ 0.1065722182393074,
+ 0.027580885216593742,
+ 0.058326590806245804,
+ -0.014792128466069698,
+ -0.06975778937339783,
+ 0.03901944309473038,
+ -0.004201431758701801,
+ 0.07069192081689835,
+ 0.10732332617044449,
+ -0.09596066921949387,
+ -0.0616946779191494,
+ 0.07092032581567764,
+ 0.007667285855859518,
+ 0.06712962687015533,
+ 0.026250364258885384,
+ 0.08537507057189941,
+ -0.0014958545798435807,
+ 0.14142964780330658,
+ -0.36776426434516907,
+ 0.025934189558029175,
+ 0.0898609459400177,
+ -0.026911459863185883,
+ 0.03633580729365349,
+ 0.05672615021467209,
+ -0.01920611783862114,
+ -0.1422828733921051,
+ 0.10418301075696945,
+ -0.09944427758455276,
+ 0.12206653505563736,
+ 0.03547729179263115,
+ 0.006640707608312368,
+ 0.12215108424425125,
+ -0.0810949057340622,
+ 0.05695689469575882,
+ 0.0006908435025252402,
+ -0.019783291965723038,
+ 0.053446974605321884,
+ -0.01720094308257103,
+ -0.035274285823106766,
+ 0.011445987969636917,
+ 0.10159288346767426,
+ -0.01854035072028637,
+ -0.08366621285676956,
+ -0.02086693048477173,
+ -0.013750730082392693,
+ 0.055133964866399765,
+ -0.050689373165369034,
+ 0.08766137063503265,
+ -0.027531201019883156,
+ 0.024648349732160568,
+ 0.011541386134922504,
+ 0.0587247833609581,
+ -0.08937090635299683,
+ 0.1690862625837326,
+ 0.1028122529387474,
+ 0.05885342136025429,
+ 0.00042149046203121543,
+ -0.007084849756211042,
+ -0.07005082815885544,
+ 0.08526858687400818,
+ -0.014345753006637096,
+ 0.11207114905118942,
+ -0.007661192212253809,
+ 0.006899328902363777,
+ -0.04091697558760643,
+ 0.12291263788938522,
+ 0.02519596740603447,
+ -0.28693461418151855,
+ -0.06446775048971176,
+ -0.08245190232992172,
+ 0.16229774057865143,
+ -0.07769344747066498,
+ 0.11632157117128372,
+ 0.015632063150405884,
+ 0.0038552326150238514,
+ 0.07665443420410156,
+ 0.030715472996234894,
+ 0.019107863306999207,
+ 0.13070039451122284,
+ -0.024515150114893913,
+ -0.01673641987144947,
+ 0.00985648948699236,
+ -0.09992681443691254
+ ],
+ [
+ 0.012301706708967686,
+ -0.1865394562482834,
+ 0.12609852850437164,
+ 0.055411916226148605,
+ 0.0803336575627327,
+ 0.08742652088403702,
+ 0.18860386312007904,
+ -0.012310086749494076,
+ 0.10441114008426666,
+ 0.017437050119042397,
+ -0.095530666410923,
+ 0.11900115013122559,
+ 0.13463552296161652,
+ -0.11324873566627502,
+ -0.1682630330324173,
+ -0.10532485693693161,
+ 0.005521008744835854,
+ -0.03265417367219925,
+ -0.19402135908603668,
+ -0.01461628545075655,
+ 0.015015332028269768,
+ 0.0034590386785566807,
+ -0.036276496946811676,
+ 0.017033472657203674,
+ -0.14103905856609344,
+ 0.010103310458362103,
+ -0.009501595981419086,
+ 0.0038069237489253283,
+ 0.03574692830443382,
+ 0.0362301766872406,
+ 0.34418052434921265,
+ -0.04488551989197731,
+ -0.10760709643363953,
+ 0.09666061401367188,
+ -0.05151355639100075,
+ -0.28953415155410767,
+ -0.013422392308712006,
+ 0.10261782258749008,
+ -0.04011663421988487,
+ -0.0059935650788247585,
+ -0.0334150567650795,
+ -0.08485536277294159,
+ 0.07634840160608292,
+ -0.0042059230618178844,
+ 0.006024524569511414,
+ -0.0859842449426651,
+ -0.020825102925300598,
+ 0.022956855595111847,
+ 0.07369617372751236,
+ 0.06279696524143219,
+ -0.06914542615413666,
+ -0.10594988614320755,
+ 0.03801831975579262,
+ -0.1473183035850525,
+ -0.026315605267882347,
+ -0.010381347499787807,
+ 0.13979850709438324,
+ 0.0016420113388448954,
+ -0.024791482836008072,
+ -0.39615005254745483,
+ 0.112028568983078,
+ -0.2427929937839508,
+ -0.020595915615558624,
+ 0.11579952389001846,
+ -0.025587081909179688,
+ 0.018722930923104286,
+ -0.03667612001299858,
+ -0.11392521113157272,
+ 0.05068076774477959,
+ 0.06799103319644928,
+ -0.1285630166530609,
+ 0.1358880251646042,
+ -0.06018054857850075,
+ -0.04503580555319786,
+ -0.014425945468246937,
+ -0.06896030902862549,
+ -0.08295333385467529,
+ -0.06906097382307053,
+ -0.002480648923665285,
+ -0.05059168487787247,
+ 0.07196693867444992,
+ 0.04057547450065613,
+ -0.25372809171676636,
+ 0.20481865108013153,
+ -0.02248345874249935,
+ 0.09514666348695755,
+ 0.061819419264793396,
+ 0.1796906441450119,
+ 0.15091896057128906,
+ 0.10154664516448975,
+ -0.019665617495775223,
+ -0.011019846424460411,
+ -0.3557998836040497,
+ -0.026316186413168907,
+ -0.16811715066432953,
+ -0.20851384103298187,
+ 0.07865449786186218,
+ -0.002151824999600649,
+ 0.0028705610893666744,
+ -0.1532393991947174,
+ 0.07377748191356659,
+ -0.1570206880569458,
+ 0.034638892859220505,
+ -0.18472060561180115,
+ -0.028331344947218895,
+ 0.014422374777495861,
+ -0.033516693860292435,
+ 0.14503003656864166,
+ -0.10672903060913086,
+ -0.2824220359325409,
+ 0.1804901659488678,
+ -0.08295020461082458,
+ -0.4120776653289795,
+ 0.07755880802869797,
+ 0.05911930650472641,
+ 0.2060115933418274,
+ -0.15597741305828094,
+ -0.0777733102440834,
+ -0.03537466749548912,
+ 0.11676358431577682,
+ -0.0782470852136612,
+ 0.02059067413210869,
+ 0.06511933356523514,
+ 0.033795636147260666,
+ -0.409798800945282,
+ -0.06085214018821716,
+ -0.19383125007152557,
+ -0.15302999317646027
+ ],
+ [
+ -0.0938999280333519,
+ -0.27419963479042053,
+ 0.019205676391720772,
+ 0.07053342461585999,
+ -0.2604018449783325,
+ 0.1117512658238411,
+ 0.01715139113366604,
+ -0.009433966130018234,
+ 0.22768385708332062,
+ -0.0046544563956558704,
+ 0.08446452766656876,
+ -0.006287071388214827,
+ -0.08807071298360825,
+ -0.17385461926460266,
+ 0.1414819210767746,
+ -0.15319262444972992,
+ 0.0921265259385109,
+ 0.00534857576712966,
+ 0.09465035051107407,
+ -0.01572393625974655,
+ -0.1698799431324005,
+ 0.12188563495874405,
+ -0.09742250293493271,
+ 0.09272810071706772,
+ 0.027977686375379562,
+ 0.04821936786174774,
+ -0.027223115786910057,
+ -0.05037993565201759,
+ -0.019360454753041267,
+ -0.026345131918787956,
+ -0.1666080504655838,
+ -0.05890616774559021,
+ -0.1733086109161377,
+ 0.17864570021629333,
+ -0.1510128527879715,
+ -0.16279946267604828,
+ -0.16970008611679077,
+ 0.07922007143497467,
+ 0.07036653906106949,
+ -0.11295412480831146,
+ 0.029837526381015778,
+ -0.04210599511861801,
+ 0.19662699103355408,
+ 0.07059518992900848,
+ -0.10013685375452042,
+ 0.01621786504983902,
+ 0.16942569613456726,
+ -0.13478527963161469,
+ 0.17179371416568756,
+ 0.0016305040335282683,
+ -0.18615034222602844,
+ -0.08935011923313141,
+ -0.07771198451519012,
+ 0.20252646505832672,
+ 0.029728464782238007,
+ 0.057170260697603226,
+ 0.08609101176261902,
+ 0.14518745243549347,
+ -0.22716273367404938,
+ -0.030635204166173935,
+ -0.2850937843322754,
+ -0.0418272502720356,
+ 0.055602654814720154,
+ 0.02186974510550499,
+ 0.08305298537015915,
+ 0.1656361222267151,
+ 0.1152043491601944,
+ 0.13334456086158752,
+ 0.11743920296430588,
+ -0.0701037272810936,
+ 0.056531842797994614,
+ -0.006760588847100735,
+ 0.10336834192276001,
+ -0.0037316898815333843,
+ -0.12610146403312683,
+ -0.00983942300081253,
+ 0.14811448752880096,
+ -0.25732919573783875,
+ -0.027645573019981384,
+ -0.04392676427960396,
+ -0.005481339525431395,
+ 0.07578736543655396,
+ -0.009134958498179913,
+ -0.018662868067622185,
+ -0.06836294382810593,
+ 0.04037229344248772,
+ -0.01782483235001564,
+ 0.13785170018672943,
+ -0.0684676468372345,
+ 0.02057214453816414,
+ 0.12203533947467804,
+ 0.10938757658004761,
+ -0.5271665453910828,
+ 0.007249460555613041,
+ -0.09394117444753647,
+ -0.06644684821367264,
+ -0.0042889011092484,
+ 0.1557435393333435,
+ 0.0386505052447319,
+ -0.21100133657455444,
+ -0.008710778318345547,
+ -0.13093531131744385,
+ -0.06953966617584229,
+ 0.12960286438465118,
+ -0.05580013617873192,
+ -0.31841203570365906,
+ -0.10488904267549515,
+ -0.03834470361471176,
+ -0.31248903274536133,
+ 0.07162126898765564,
+ 0.07143654674291611,
+ -0.05309257656335831,
+ 0.07239829748868942,
+ 0.014606340788304806,
+ -0.09377992153167725,
+ 0.13139231503009796,
+ -0.09192992746829987,
+ 0.07100644707679749,
+ 0.05311399698257446,
+ 0.04620150849223137,
+ 0.005889242514967918,
+ 0.0042155152186751366,
+ 0.16965703666210175,
+ 0.19761410355567932,
+ -0.19544734060764313,
+ 0.09606491029262543,
+ 0.09114355593919754,
+ 0.06094963103532791
+ ],
+ [
+ -0.04857373982667923,
+ -0.03849109634757042,
+ 0.06969689577817917,
+ 0.028014808893203735,
+ -0.09499533474445343,
+ -0.035254210233688354,
+ -0.007704808842390776,
+ 0.05658813193440437,
+ -0.0367467999458313,
+ 0.03566402569413185,
+ 0.0010474740993231535,
+ 0.08510836958885193,
+ -0.0056148492731153965,
+ 0.04331820085644722,
+ 0.023484928533434868,
+ -0.002087409608066082,
+ -0.00922251958400011,
+ -0.024757007136940956,
+ 0.031868599355220795,
+ 0.053568679839372635,
+ 0.03889710083603859,
+ -0.018381262198090553,
+ -0.028321273624897003,
+ 0.026673825457692146,
+ 0.004562058951705694,
+ -0.04059956967830658,
+ 0.03845967352390289,
+ -0.050379421561956406,
+ 0.0724017322063446,
+ -0.029374612495303154,
+ 0.058761246502399445,
+ 0.010827790945768356,
+ -0.08855433017015457,
+ -0.010343647561967373,
+ 0.09055010229349136,
+ -0.06187576800584793,
+ 0.019922679290175438,
+ 0.08703088760375977,
+ 0.06471351534128189,
+ 0.024686604738235474,
+ -0.042092062532901764,
+ -0.029733939096331596,
+ 0.04503351449966431,
+ 0.08669652044773102,
+ 0.004962591454386711,
+ 0.04258982092142105,
+ 0.0666874423623085,
+ 0.06931579858064651,
+ 0.01793333888053894,
+ -0.04032202810049057,
+ -0.03002457320690155,
+ 0.04944921284914017,
+ 0.06049646809697151,
+ -0.06458234786987305,
+ -0.0002273732388857752,
+ 0.03448314592242241,
+ 0.015497040934860706,
+ -0.003382178721949458,
+ -0.047499191015958786,
+ -0.01775788702070713,
+ 0.02234051376581192,
+ -0.04555080831050873,
+ -0.035131633281707764,
+ 0.0378398671746254,
+ 0.06430835276842117,
+ -0.006359244231134653,
+ 0.10617890954017639,
+ 0.029215866699814796,
+ -0.0015654778108000755,
+ 0.045697931200265884,
+ -0.025392994284629822,
+ -0.026006117463111877,
+ 0.016668027266860008,
+ 0.0831236019730568,
+ -0.020391790196299553,
+ -0.08402958512306213,
+ 0.03982952982187271,
+ 0.053645018488168716,
+ -0.05413355678319931,
+ -0.08806878328323364,
+ -0.033997561782598495,
+ 0.05065545439720154,
+ -0.10042889416217804,
+ -0.030840162187814713,
+ -0.048853352665901184,
+ 0.03035121224820614,
+ -0.05829929560422897,
+ 0.016506029292941093,
+ -0.0055850716307759285,
+ 0.035155922174453735,
+ -0.012790851294994354,
+ -0.038241684436798096,
+ -0.06887729465961456,
+ -0.014101521112024784,
+ -0.04021415486931801,
+ 0.034962836652994156,
+ -0.05878506973385811,
+ -0.008772820234298706,
+ -0.014887669123709202,
+ 0.0901917889714241,
+ 0.10429093986749649,
+ -0.03917063772678375,
+ 0.04592658206820488,
+ 0.017170170322060585,
+ -0.02180514857172966,
+ 0.00705066230148077,
+ -0.0707511156797409,
+ 0.026745392009615898,
+ -0.11656858026981354,
+ 0.027566585689783096,
+ -0.03350834548473358,
+ 0.08117581903934479,
+ 0.05941018462181091,
+ -0.03594072163105011,
+ -0.06056724488735199,
+ 0.027045859023928642,
+ 0.0011404918041080236,
+ -0.0402982197701931,
+ -0.040729038417339325,
+ 0.03455357998609543,
+ -0.01117018237709999,
+ -0.05750822648406029,
+ -0.0532941110432148,
+ 0.08046530187129974,
+ 0.01988973841071129,
+ -0.04923156648874283,
+ 0.010052274912595749,
+ -0.04115899279713631
+ ],
+ [
+ -0.21504570543766022,
+ 0.05922774598002434,
+ -0.02011696621775627,
+ -0.03572791814804077,
+ 0.05884544923901558,
+ 0.0037848150823265314,
+ -0.07371830940246582,
+ 0.06530626863241196,
+ 0.03066278249025345,
+ -0.0287181306630373,
+ 0.1852925419807434,
+ 0.198503777384758,
+ 0.02192637510597706,
+ -0.11467356979846954,
+ -0.3006402552127838,
+ 0.028979167342185974,
+ 0.23845845460891724,
+ -0.058809589594602585,
+ 0.07443368434906006,
+ 0.0677509605884552,
+ -0.2772158682346344,
+ 0.011608581990003586,
+ -0.018562927842140198,
+ -0.18733108043670654,
+ 0.06491424143314362,
+ -0.09906971454620361,
+ 0.04635152593255043,
+ 0.1464175134897232,
+ 0.09490124881267548,
+ 0.015987366437911987,
+ 0.10012131184339523,
+ 0.050205424427986145,
+ -0.058306898921728134,
+ 0.11841502040624619,
+ -0.13470256328582764,
+ -0.1124657541513443,
+ -0.17111343145370483,
+ -0.018373610451817513,
+ 0.06365609914064407,
+ 0.09608445316553116,
+ -0.024028535932302475,
+ -0.1384543627500534,
+ 0.11836809664964676,
+ -0.0689074844121933,
+ -0.07169156521558762,
+ -0.4090377390384674,
+ 0.07384063303470612,
+ 0.08389701694250107,
+ -0.05627517029643059,
+ 0.19364535808563232,
+ 0.1363641321659088,
+ -0.06754185259342194,
+ 0.02933334745466709,
+ -0.16464069485664368,
+ 0.173816978931427,
+ 0.19287432730197906,
+ 0.004006592556834221,
+ 0.011305280961096287,
+ -0.029288990423083305,
+ 0.023532943800091743,
+ 0.003494593547657132,
+ 0.14891336858272552,
+ 0.023311303928494453,
+ 0.018758604303002357,
+ 0.016131097450852394,
+ 0.180354043841362,
+ 0.31680530309677124,
+ -0.1067608892917633,
+ 0.0007411090773530304,
+ 0.03980400040745735,
+ 0.16938519477844238,
+ -0.09495928883552551,
+ -0.011301388964056969,
+ -0.07053639739751816,
+ -0.00807571318000555,
+ 0.013265821151435375,
+ -0.05106000974774361,
+ 0.05784609541296959,
+ -0.23246023058891296,
+ -0.04334859922528267,
+ -0.4260920584201813,
+ -0.12201161682605743,
+ -0.06362245976924896,
+ 0.11738409847021103,
+ -0.1367325484752655,
+ -0.08563429862260818,
+ 0.18923911452293396,
+ -0.06269470602273941,
+ -0.10687152296304703,
+ 0.06014932319521904,
+ -0.19487954676151276,
+ -0.004588622134178877,
+ -0.3437671661376953,
+ -0.11401098221540451,
+ -0.13649882376194,
+ -0.012418674305081367,
+ 0.00211523100733757,
+ 0.05406634137034416,
+ 0.06685840338468552,
+ -0.015446076169610023,
+ -0.028923094272613525,
+ -0.20431384444236755,
+ -0.05016496405005455,
+ 0.04133160784840584,
+ 0.03251435607671738,
+ 0.0379076786339283,
+ -0.3304142355918884,
+ -0.28439953923225403,
+ 0.11203805357217789,
+ 0.10238289833068848,
+ -0.0054287356324493885,
+ 0.05789750814437866,
+ 0.18755927681922913,
+ 0.02533848211169243,
+ 0.035066716372966766,
+ 0.25617852807044983,
+ -0.2021154910326004,
+ -0.15181373059749603,
+ 0.17469677329063416,
+ 0.2535836696624756,
+ -0.14478273689746857,
+ 0.030919602140784264,
+ 0.08175615966320038,
+ 0.1892169713973999,
+ -0.13211478292942047,
+ -0.05775774270296097,
+ 0.04185391962528229,
+ 0.012197066098451614
+ ],
+ [
+ 0.0481601282954216,
+ -0.061157625168561935,
+ -0.07369223237037659,
+ 0.08097724616527557,
+ 0.135075181722641,
+ 0.07527924329042435,
+ 0.10031740367412567,
+ 0.02513836696743965,
+ 0.0423596017062664,
+ 0.03949837386608124,
+ -0.17576013505458832,
+ -0.02332235686480999,
+ -0.223618283867836,
+ -0.15332050621509552,
+ -0.035081177949905396,
+ 0.07867221534252167,
+ 0.10515791922807693,
+ -0.050876684486866,
+ -0.07076418399810791,
+ -0.013631651178002357,
+ -0.006335076875984669,
+ -0.03343569487333298,
+ 0.10709754377603531,
+ 0.016737397760152817,
+ 0.018223071470856667,
+ 0.07643309980630875,
+ 0.02190515398979187,
+ 0.04133225604891777,
+ -0.19691814482212067,
+ -0.07665999233722687,
+ -0.037191737443208694,
+ 0.0022571012377738953,
+ 0.06433285772800446,
+ -0.20899134874343872,
+ -0.07328969985246658,
+ 0.0069082011468708515,
+ -0.19624947011470795,
+ 0.04462210461497307,
+ -0.06842995434999466,
+ 0.030763018876314163,
+ 0.08983220905065536,
+ 0.03618394955992699,
+ 0.14377981424331665,
+ -0.02812904492020607,
+ 0.0673510730266571,
+ -0.03778122738003731,
+ -0.1418229639530182,
+ 0.0016937657492235303,
+ -0.029143115505576134,
+ 0.06990602612495422,
+ -0.16983073949813843,
+ 0.030488718301057816,
+ 0.030644018203020096,
+ 0.030455900356173515,
+ 0.0815005749464035,
+ 0.11532893776893616,
+ -0.007322211749851704,
+ -0.0679083913564682,
+ 0.10911117494106293,
+ 0.027290139347314835,
+ 0.13626083731651306,
+ 0.05758583918213844,
+ 0.04673340171575546,
+ 0.010665379464626312,
+ 0.08507177233695984,
+ 0.01480881031602621,
+ -0.008938821032643318,
+ -0.0669914111495018,
+ 0.14718011021614075,
+ -0.016588330268859863,
+ -0.12196928262710571,
+ 0.01720470003783703,
+ -0.04117147997021675,
+ 0.010331826284527779,
+ -0.019578462466597557,
+ 0.186295747756958,
+ -0.14703603088855743,
+ -0.03544461354613304,
+ -0.027966372668743134,
+ -0.010804167948663235,
+ -0.046176113188266754,
+ 0.09422473609447479,
+ 0.07661699503660202,
+ -0.09928778558969498,
+ -0.04642200097441673,
+ 0.10033243894577026,
+ -0.112083300948143,
+ -0.013480034656822681,
+ 0.06421282142400742,
+ 0.0959801897406578,
+ -0.013292577117681503,
+ -0.03548587113618851,
+ 0.09605248272418976,
+ -0.04417917877435684,
+ 0.06012250855565071,
+ 0.03609582409262657,
+ 0.13920722901821136,
+ 0.007736777421087027,
+ -0.0633515864610672,
+ -0.13049522042274475,
+ 0.07335411012172699,
+ -0.006070197559893131,
+ 0.04053718224167824,
+ -0.016257785260677338,
+ -0.005418351385742426,
+ 0.06012902036309242,
+ 0.1325281411409378,
+ 0.04571286588907242,
+ 0.013450359925627708,
+ -0.15341529250144958,
+ -7.443396316375583e-05,
+ -0.025224803015589714,
+ -0.20845384895801544,
+ 0.06979311257600784,
+ -0.002930302871391177,
+ 0.10761827975511551,
+ 0.018619906157255173,
+ 0.12780888378620148,
+ -0.0044706715270876884,
+ 0.05954540893435478,
+ -0.05320749059319496,
+ 0.06436338275671005,
+ 0.10935541987419128,
+ -0.16422146558761597,
+ 0.1622447520494461,
+ 0.07779292017221451,
+ -0.0319506898522377,
+ 0.09894628077745438
+ ],
+ [
+ -0.07148068398237228,
+ 0.07186494022607803,
+ -0.010442853905260563,
+ -0.008349613286554813,
+ -0.019876906648278236,
+ 0.0410350002348423,
+ 0.05922868475317955,
+ 0.14955107867717743,
+ -0.06570306420326233,
+ -0.04596063867211342,
+ 0.04751412943005562,
+ 0.04496239870786667,
+ 0.055645011365413666,
+ 0.2189396172761917,
+ -0.4608803391456604,
+ -0.04176586866378784,
+ -0.20895196497440338,
+ -0.0834641307592392,
+ 0.19289976358413696,
+ 0.12221415340900421,
+ -0.11177659779787064,
+ 0.03295160084962845,
+ 0.007604540791362524,
+ -0.11836925148963928,
+ -0.03455140069127083,
+ 0.02368893101811409,
+ -0.12836124002933502,
+ 0.01528227049857378,
+ 0.02003459632396698,
+ 0.10498564690351486,
+ 0.038948800414800644,
+ -0.016857784241437912,
+ 0.008736181072890759,
+ 0.06447054445743561,
+ -0.011610905639827251,
+ -0.21396365761756897,
+ -0.005474238656461239,
+ 0.007985532283782959,
+ 0.03480236604809761,
+ 0.1628418117761612,
+ -0.17574210464954376,
+ -0.30855119228363037,
+ -0.05605355650186539,
+ -0.03087301179766655,
+ -0.04874779284000397,
+ -0.5468395948410034,
+ -0.08738940209150314,
+ 0.08347982913255692,
+ 0.07734224200248718,
+ 0.006236698478460312,
+ 0.051253318786621094,
+ 0.07475783675909042,
+ 0.07484301179647446,
+ -0.11922089755535126,
+ 0.05622325465083122,
+ 0.11985598504543304,
+ 0.13046856224536896,
+ 0.11870402097702026,
+ -0.028733275830745697,
+ 0.03219890594482422,
+ -0.12446126341819763,
+ 0.01687629148364067,
+ -0.06714317202568054,
+ -0.018795544281601906,
+ -0.05309830605983734,
+ 0.0482650026679039,
+ 0.33604496717453003,
+ -0.7169981598854065,
+ -0.1049315333366394,
+ 0.1490902304649353,
+ 0.046288859099149704,
+ -0.07006236165761948,
+ 0.014085550792515278,
+ -0.24071957170963287,
+ 0.01847449503839016,
+ -0.016695760190486908,
+ -0.06547152996063232,
+ -0.12886148691177368,
+ -0.20510074496269226,
+ -0.13619078695774078,
+ -0.4817722737789154,
+ 0.042510807514190674,
+ 0.07006017863750458,
+ 0.21541675925254822,
+ -0.0585038848221302,
+ -0.038775015622377396,
+ 0.06873449683189392,
+ -0.00852986890822649,
+ -0.22086603939533234,
+ -0.043372899293899536,
+ 0.16485595703125,
+ -0.063601553440094,
+ -0.11489581316709518,
+ -0.08277760446071625,
+ -0.06621631979942322,
+ -0.04715970158576965,
+ -0.018409235402941704,
+ 0.012982969172298908,
+ 0.04020953178405762,
+ 0.04542998969554901,
+ -0.153661847114563,
+ -0.13644255697727203,
+ -0.003173798555508256,
+ 0.019596440717577934,
+ -0.07433018088340759,
+ 0.04207202047109604,
+ -0.5339446663856506,
+ -0.7670915722846985,
+ -0.024869512766599655,
+ 0.08791644871234894,
+ -0.05324985086917877,
+ 0.24774332344532013,
+ 0.14828473329544067,
+ 0.10707584023475647,
+ 0.09689179807901382,
+ 0.25484010577201843,
+ -0.18472105264663696,
+ -0.22993801534175873,
+ 0.18809428811073303,
+ 0.25439026951789856,
+ -0.07040754705667496,
+ -0.14985765516757965,
+ 0.14617054164409637,
+ 0.20696593821048737,
+ -0.07132156193256378,
+ 0.02987966313958168,
+ 0.036686066538095474,
+ 0.04680192843079567
+ ],
+ [
+ -0.045244768261909485,
+ 0.3794306218624115,
+ -0.5548692345619202,
+ 0.05034590885043144,
+ 0.048649903386831284,
+ 0.06496565043926239,
+ -0.00964719895273447,
+ -0.1994377076625824,
+ -0.023586932569742203,
+ -0.0149984210729599,
+ 0.04819577559828758,
+ 0.1431717872619629,
+ 0.08683864772319794,
+ -0.1565379798412323,
+ -0.18077297508716583,
+ 0.1654280722141266,
+ -0.14776013791561127,
+ 0.11178776621818542,
+ -0.07661092281341553,
+ -0.27433404326438904,
+ -0.18727880716323853,
+ 0.0014032491017132998,
+ -0.305795818567276,
+ 0.22745664417743683,
+ -0.056286200881004333,
+ 0.08865141123533249,
+ -0.0031820929143577814,
+ -0.1378864347934723,
+ 0.061913520097732544,
+ -0.0007427640375681221,
+ 0.08155497163534164,
+ 0.1816399097442627,
+ -0.00010053376172436401,
+ 0.2519194483757019,
+ 0.1527346819639206,
+ 0.25380739569664,
+ -0.18240728974342346,
+ -0.05419950187206268,
+ -0.20322668552398682,
+ 0.2103080153465271,
+ -0.12257878482341766,
+ -0.41203320026397705,
+ 0.33740198612213135,
+ 0.1928902268409729,
+ -0.31111249327659607,
+ -0.3706647753715515,
+ -0.4959532916545868,
+ -0.009770525619387627,
+ 0.11780455708503723,
+ 0.11707772314548492,
+ -0.08167867362499237,
+ 0.15761719644069672,
+ 0.051057204604148865,
+ -1.8871092796325684,
+ -0.2801891565322876,
+ -0.14941871166229248,
+ 0.05634797364473343,
+ 0.10048209130764008,
+ 0.009442216716706753,
+ -0.7453246116638184,
+ 0.03072291798889637,
+ -0.14677654206752777,
+ 0.09057420492172241,
+ -0.25736552476882935,
+ -0.22930273413658142,
+ -0.2585945725440979,
+ -0.08632194995880127,
+ -0.07828109711408615,
+ 0.06109071150422096,
+ 0.5685810446739197,
+ -0.6471291184425354,
+ -0.001320009003393352,
+ 0.13091008365154266,
+ -0.21783024072647095,
+ -0.6317462921142578,
+ -0.10361555963754654,
+ 0.026986438781023026,
+ -0.1907915621995926,
+ -0.0012544798664748669,
+ -0.1997278928756714,
+ 0.2261386662721634,
+ -0.07971206307411194,
+ 0.12231193482875824,
+ -0.5927475094795227,
+ 0.1310444176197052,
+ 0.4252593517303467,
+ 0.13084083795547485,
+ -0.467151015996933,
+ -0.06053933873772621,
+ -0.023121381178498268,
+ -0.42861616611480713,
+ -0.19360394775867462,
+ -0.6459985971450806,
+ 0.02312956191599369,
+ 0.11011771857738495,
+ -0.09751708805561066,
+ 0.09812180697917938,
+ 0.1177060455083847,
+ -0.014891283586621284,
+ 0.11921200156211853,
+ 0.21737244725227356,
+ -0.06026836484670639,
+ 0.16511203348636627,
+ -0.5915645360946655,
+ 0.05968763306736946,
+ -0.07154273241758347,
+ 0.059874217957258224,
+ 0.16129709780216217,
+ -0.44610583782196045,
+ -0.7697670459747314,
+ 1.168225884437561,
+ 0.20315514504909515,
+ 0.10273709893226624,
+ 0.16441704332828522,
+ -0.36720362305641174,
+ 0.00735081173479557,
+ 0.08029545843601227,
+ 0.08387130498886108,
+ -0.025240475311875343,
+ -0.020988496020436287,
+ -0.034739598631858826,
+ -0.07675132900476456,
+ 0.16072934865951538,
+ -0.032829802483320236,
+ 0.15416762232780457,
+ -0.10919275879859924,
+ -0.06545328348875046,
+ 0.11909424513578415
+ ],
+ [
+ 0.26019036769866943,
+ 0.11595030128955841,
+ -0.10848525911569595,
+ -0.3267025649547577,
+ 0.02210596762597561,
+ 0.09513632208108902,
+ -0.11097539216279984,
+ 0.2019355595111847,
+ -0.0896754264831543,
+ 0.0035693824756890535,
+ 0.04895268380641937,
+ -0.17031319439411163,
+ 0.06324247270822525,
+ 0.0041732448153197765,
+ -0.07114367187023163,
+ 0.005061843432486057,
+ 0.017197104170918465,
+ 0.06674166023731232,
+ -0.14041705429553986,
+ -0.025357559323310852,
+ 0.12483485788106918,
+ 0.05927359685301781,
+ 0.03670748695731163,
+ -0.0863356813788414,
+ 0.0956553965806961,
+ -0.26146936416625977,
+ 0.08888775110244751,
+ -0.00026469488511793315,
+ -0.06712319701910019,
+ -0.2266860008239746,
+ -0.061417415738105774,
+ -0.3119480311870575,
+ -0.09606722742319107,
+ 0.0716165080666542,
+ -0.018835440278053284,
+ 0.006021848879754543,
+ -0.06163521856069565,
+ -0.03187023103237152,
+ 0.11367907375097275,
+ 0.10403319448232651,
+ -0.15596464276313782,
+ 0.22395950555801392,
+ -0.3441096842288971,
+ 0.039189115166664124,
+ -0.4713420569896698,
+ -0.4937548339366913,
+ -0.4649128317832947,
+ 0.14405784010887146,
+ -0.13395237922668457,
+ 0.15194503962993622,
+ -0.19589285552501678,
+ -0.18754814565181732,
+ 0.019327238202095032,
+ 0.164952352643013,
+ -0.16286931931972504,
+ -0.010999198071658611,
+ 0.03618307411670685,
+ 0.22050799429416656,
+ -0.007174741476774216,
+ -0.05980752408504486,
+ 0.008609647862613201,
+ 0.2892554700374603,
+ 0.10214044153690338,
+ -0.1269078552722931,
+ 0.06543951481580734,
+ 0.0558670237660408,
+ 0.06461811065673828,
+ -0.08891331404447556,
+ -0.06449297070503235,
+ 0.3327935039997101,
+ 0.14276254177093506,
+ -0.0323537178337574,
+ -0.08335665613412857,
+ 0.04784965515136719,
+ 0.0036938285920768976,
+ -0.030511386692523956,
+ 0.028179265558719635,
+ 0.005236541852355003,
+ 0.11425496637821198,
+ 0.08042522519826889,
+ -0.29813775420188904,
+ 0.20346635580062866,
+ -0.022333061322569847,
+ 0.12188902497291565,
+ 0.06478917598724365,
+ 0.19219474494457245,
+ -0.005255959928035736,
+ -0.25419145822525024,
+ -0.011332983151078224,
+ -0.24926044046878815,
+ -0.06341909617185593,
+ 0.10090446472167969,
+ -0.08999209105968475,
+ 0.05501149594783783,
+ -0.00772486999630928,
+ 0.007875523529946804,
+ -0.11819735914468765,
+ -0.5003669261932373,
+ -0.290856271982193,
+ 0.028249207884073257,
+ 0.15221290290355682,
+ 0.06040434539318085,
+ -0.006344416178762913,
+ -0.13502848148345947,
+ 0.004639197140932083,
+ 0.08973339200019836,
+ 0.20701734721660614,
+ 0.030042948201298714,
+ -0.2643253803253174,
+ -0.005589891225099564,
+ 0.20749905705451965,
+ -0.05041229724884033,
+ 0.06696310639381409,
+ 0.025624653324484825,
+ -0.0182812437415123,
+ 0.0950915515422821,
+ -0.14911925792694092,
+ 0.04179513081908226,
+ 0.07468367367982864,
+ -0.047000061720609665,
+ -0.14785103499889374,
+ -0.013155661523342133,
+ -0.11454398185014725,
+ 0.20982779562473297,
+ -0.46368056535720825,
+ -0.37305352091789246,
+ -0.3306875228881836,
+ 0.0024306117556989193
+ ],
+ [
+ 0.06568416953086853,
+ -0.2791063189506531,
+ -0.036109648644924164,
+ -0.24871473014354706,
+ -0.004380709026008844,
+ 0.028245078399777412,
+ 0.06450094282627106,
+ -0.11274652928113937,
+ 0.028940770775079727,
+ 0.24304020404815674,
+ 0.12306037545204163,
+ 0.0906049981713295,
+ -0.04793999716639519,
+ -0.19205230474472046,
+ -0.05486350134015083,
+ 0.05575813725590706,
+ 0.27927646040916443,
+ -0.013599712401628494,
+ 0.14765408635139465,
+ -0.00602763332426548,
+ -0.10279069095849991,
+ -0.2569059133529663,
+ -0.012026875279843807,
+ -0.06032100319862366,
+ 0.07522566616535187,
+ -0.1778370440006256,
+ -0.3169967830181122,
+ -0.010083133354783058,
+ 0.04046742618083954,
+ -0.06901399046182632,
+ -0.07242273539304733,
+ 0.28400030732154846,
+ 0.03306419029831886,
+ 0.11893516033887863,
+ 0.021151790395379066,
+ 0.05769673362374306,
+ -0.07792231440544128,
+ -0.08355291187763214,
+ 0.07937081903219223,
+ -0.0671556368470192,
+ -0.1223621591925621,
+ -0.2460363507270813,
+ -0.0191893819719553,
+ -0.002892374759539962,
+ -0.09775484353303909,
+ -0.0412384457886219,
+ 0.10504788905382156,
+ -0.002770237158983946,
+ 0.013135658577084541,
+ 0.1574126034975052,
+ -0.13231532275676727,
+ 0.05046677589416504,
+ 0.060082677751779556,
+ -0.047034986317157745,
+ -0.06718304008245468,
+ -0.0357745997607708,
+ -0.053773824125528336,
+ 0.05154358223080635,
+ 0.042201653122901917,
+ -0.07211587578058243,
+ -0.020290587097406387,
+ -0.08697854727506638,
+ 0.08975496143102646,
+ 0.06667235493659973,
+ 0.0836549699306488,
+ 0.10891953110694885,
+ 0.17768774926662445,
+ -0.1961899697780609,
+ -0.0478990264236927,
+ 0.18812167644500732,
+ -0.0759412869811058,
+ 0.05436466634273529,
+ -0.14461536705493927,
+ 0.1367407739162445,
+ -0.08236604183912277,
+ 0.05294358357787132,
+ -0.13463068008422852,
+ 0.14848092198371887,
+ 0.04666675627231598,
+ -0.18833109736442566,
+ 0.07076703011989594,
+ -0.05106228217482567,
+ 0.0720098689198494,
+ 0.10346229374408722,
+ -0.19683556258678436,
+ -0.11017608642578125,
+ -0.018820585682988167,
+ 0.10688534379005432,
+ -0.04455957189202309,
+ 0.09043433517217636,
+ -0.008447474800050259,
+ -0.066454216837883,
+ -0.06020648032426834,
+ -0.06622012704610825,
+ -0.009539714083075523,
+ 0.12273097038269043,
+ 0.01243171188980341,
+ -0.02869386598467827,
+ 0.2327074110507965,
+ 0.07600787281990051,
+ 0.15555445849895477,
+ 0.10994019359350204,
+ 0.01747923716902733,
+ 0.041420578956604004,
+ -0.006425689905881882,
+ 0.10728651285171509,
+ 0.3358995318412781,
+ 0.061728864908218384,
+ 0.08362453430891037,
+ -0.0410432294011116,
+ 0.10108890384435654,
+ 0.0632362812757492,
+ -0.3222469687461853,
+ -0.21193893253803253,
+ -0.038742795586586,
+ -0.07911123335361481,
+ 0.0005279518663883209,
+ -0.031995683908462524,
+ -0.021087072789669037,
+ -0.13993500173091888,
+ -0.02896016836166382,
+ -0.19180016219615936,
+ 0.13557052612304688,
+ -0.040076710283756256,
+ -0.06561626493930817,
+ -0.04387018084526062,
+ -0.25297486782073975,
+ 0.17140574753284454
+ ],
+ [
+ 0.027371276170015335,
+ -0.13096198439598083,
+ -0.07951635867357254,
+ -0.1488196849822998,
+ 0.11525813490152359,
+ -0.10636518895626068,
+ -0.03239048644900322,
+ -0.02812151052057743,
+ -0.2297532558441162,
+ -0.1372842937707901,
+ -0.3430788218975067,
+ -0.038291171193122864,
+ -0.1399669200181961,
+ 0.09292362630367279,
+ -0.4506731927394867,
+ 0.02217855118215084,
+ 0.08011295646429062,
+ 0.03123338706791401,
+ 0.027747957035899162,
+ -0.16811783611774445,
+ -0.24948477745056152,
+ -0.043181903660297394,
+ -0.08399442583322525,
+ -0.1344296783208847,
+ -0.008696860633790493,
+ -0.018243128433823586,
+ 0.2412552386522293,
+ 0.02011202834546566,
+ -0.08929028362035751,
+ -0.056643661111593246,
+ 0.2481500506401062,
+ 0.03610047698020935,
+ -0.03660980984568596,
+ -0.007111292332410812,
+ -0.2629711627960205,
+ -0.12061819434165955,
+ 0.0720292404294014,
+ -0.4117734432220459,
+ -0.18786503374576569,
+ -0.20081783831119537,
+ 0.0033546003978699446,
+ 0.1655818223953247,
+ 0.19283747673034668,
+ 0.12131034582853317,
+ 0.026933517307043076,
+ -0.2594786286354065,
+ 0.059094034135341644,
+ 0.017047058790922165,
+ -0.06538544595241547,
+ -0.002769551007077098,
+ 0.17899471521377563,
+ -0.030131665989756584,
+ -0.055845893919467926,
+ 0.21494482457637787,
+ 0.0074417185969650745,
+ -0.4000815451145172,
+ 0.16660891473293304,
+ 0.046350035816431046,
+ 0.10804317146539688,
+ 0.25608089566230774,
+ -0.10413290560245514,
+ 0.2648656368255615,
+ 0.09454682469367981,
+ 0.0649852305650711,
+ -0.29403719305992126,
+ -0.04386979714035988,
+ 0.028146469965577126,
+ -0.0018743532709777355,
+ -0.21021027863025665,
+ 0.08829940855503082,
+ 0.058079153299331665,
+ -0.11446014046669006,
+ -0.2953282594680786,
+ 0.1226501539349556,
+ -0.0030804111156612635,
+ 0.20721645653247833,
+ -0.08433102816343307,
+ -0.3549896478652954,
+ 0.3852939009666443,
+ 0.011533423326909542,
+ 0.07648332417011261,
+ -0.16790619492530823,
+ 0.011979663744568825,
+ -0.05175965651869774,
+ 0.23724019527435303,
+ -0.05560705065727234,
+ -0.12400376796722412,
+ -0.3023795485496521,
+ 0.16825580596923828,
+ -0.08474723249673843,
+ -0.5488306879997253,
+ -0.10006824880838394,
+ -1.1237157583236694,
+ 0.012089727446436882,
+ -0.0830613523721695,
+ 0.12209412455558777,
+ -0.11187675595283508,
+ 0.09405461698770523,
+ -0.17009775340557098,
+ 0.0821494609117508,
+ 0.048101555556058884,
+ 0.2580830156803131,
+ -0.017845511436462402,
+ -0.24564816057682037,
+ -0.19216756522655487,
+ -0.057188112288713455,
+ 0.13442067801952362,
+ 0.25046947598457336,
+ 0.09834036231040955,
+ 0.1933080554008484,
+ 0.29352837800979614,
+ 0.47784411907196045,
+ -0.5572893619537354,
+ -0.12900805473327637,
+ -0.25469014048576355,
+ 0.029107721522450447,
+ 0.06511642038822174,
+ 0.13395795226097107,
+ -0.2492731660604477,
+ 0.14317961037158966,
+ 0.0817793533205986,
+ -0.2255566269159317,
+ 0.054880838841199875,
+ 0.012613444589078426,
+ 0.15076902508735657,
+ 0.1751881241798401,
+ 0.11144432425498962,
+ 0.01754186674952507
+ ],
+ [
+ -0.052724532783031464,
+ 0.20151333510875702,
+ 0.0495123565196991,
+ 0.05786041170358658,
+ 0.10430985689163208,
+ -0.05871093273162842,
+ -0.06345336139202118,
+ 0.0908084288239479,
+ 0.010975008830428123,
+ 0.025828585028648376,
+ 0.0056916517205536366,
+ 0.05819700285792351,
+ -0.18182916939258575,
+ 0.008546815253794193,
+ -0.061712052673101425,
+ 0.06289545446634293,
+ -0.048413872718811035,
+ -0.16578726470470428,
+ -0.0705428421497345,
+ -0.03866717591881752,
+ 0.1583447903394699,
+ 0.117472805082798,
+ 0.050578441470861435,
+ -0.059388693422079086,
+ 0.12913638353347778,
+ 0.0324852354824543,
+ -0.18780027329921722,
+ 0.02496984228491783,
+ 0.14298689365386963,
+ 0.14124122262001038,
+ -0.0940382331609726,
+ 0.2714848816394806,
+ 0.15944407880306244,
+ 0.007683854550123215,
+ 0.17433695495128632,
+ -0.300119549036026,
+ -0.04481125250458717,
+ -0.03183593973517418,
+ 0.08603385090827942,
+ 0.14818483591079712,
+ -0.06904619932174683,
+ 0.008772644214332104,
+ -0.03301456943154335,
+ 0.0033687599934637547,
+ -0.22395066916942596,
+ 0.09041491895914078,
+ -0.11084616929292679,
+ 0.05353871360421181,
+ -0.08922562003135681,
+ 0.017106659710407257,
+ -0.09198383241891861,
+ -0.16019423305988312,
+ 0.04945001378655434,
+ 0.053490303456783295,
+ -0.160686194896698,
+ 0.04782935231924057,
+ -0.16094925999641418,
+ 0.10255873203277588,
+ -0.07591967284679413,
+ 0.05642334371805191,
+ 0.04886668547987938,
+ -0.12989071011543274,
+ 0.12681631743907928,
+ -0.1960798054933548,
+ 0.003965310286730528,
+ -0.0001358956506010145,
+ -0.037027277052402496,
+ -0.16192691028118134,
+ 0.09349735081195831,
+ 0.04733635112643242,
+ 0.02718685008585453,
+ 0.09984417259693146,
+ 0.04803409054875374,
+ 0.11871228367090225,
+ -0.027402544394135475,
+ -0.16820795834064484,
+ 0.058213356882333755,
+ -0.11965131759643555,
+ 0.0234356801956892,
+ 0.03495835140347481,
+ 0.14536195993423462,
+ 0.05553906410932541,
+ -0.16810408234596252,
+ 0.046969518065452576,
+ -0.16614925861358643,
+ 0.08256086707115173,
+ -0.038101449608802795,
+ -0.12318267673254013,
+ -0.1933308243751526,
+ 0.03482886403799057,
+ -0.00040065572829917073,
+ -0.07787391543388367,
+ 0.07396192103624344,
+ -0.0535135380923748,
+ 0.02319786138832569,
+ -0.016701024025678635,
+ -0.12364312261343002,
+ -0.05576566979289055,
+ -0.16915275156497955,
+ 0.08685057610273361,
+ -0.03589697927236557,
+ 0.010244089178740978,
+ 0.05251847207546234,
+ 0.10600820928812027,
+ -0.03255327045917511,
+ -0.12339877337217331,
+ 0.1170831024646759,
+ 0.03999081254005432,
+ 0.03541553393006325,
+ -0.08758139610290527,
+ 0.13287609815597534,
+ -0.19407452642917633,
+ -0.20194034278392792,
+ -0.03315987437963486,
+ 0.025873469188809395,
+ 0.2585095763206482,
+ -0.006668754853308201,
+ -0.056710924953222275,
+ -0.07468999922275543,
+ -0.09798334538936615,
+ -0.18145042657852173,
+ 0.0033692452125251293,
+ -0.039363015443086624,
+ 0.03360946103930473,
+ -0.202927827835083,
+ -0.7715777158737183,
+ -0.0915595293045044,
+ -0.005878994707018137
+ ],
+ [
+ 0.004728531464934349,
+ 0.05852954089641571,
+ 0.04849248751997948,
+ -0.13984383642673492,
+ -0.023725446313619614,
+ -0.12018699198961258,
+ -0.029071349650621414,
+ 0.06623532623052597,
+ -0.016359781846404076,
+ -0.09269599616527557,
+ 0.05897534266114235,
+ -0.03196629881858826,
+ 0.17420673370361328,
+ -0.23313742876052856,
+ -0.3192990720272064,
+ 0.0428418405354023,
+ 0.19449062645435333,
+ 0.010704790242016315,
+ 0.04991776868700981,
+ 0.07040461152791977,
+ 0.2763651907444,
+ -0.08638020604848862,
+ 0.036100175231695175,
+ -0.16881170868873596,
+ -0.011055831797420979,
+ -0.12782834470272064,
+ 0.17820312082767487,
+ -0.005981302820146084,
+ 0.01869300566613674,
+ -0.020357200875878334,
+ 0.3222335875034332,
+ 0.05555807426571846,
+ -0.008118633180856705,
+ 0.13994990289211273,
+ -0.053270138800144196,
+ -0.13302534818649292,
+ -0.20690608024597168,
+ -0.0858759805560112,
+ 0.18454551696777344,
+ -0.023236531764268875,
+ 0.02120841108262539,
+ 0.08745836466550827,
+ -0.033270739018917084,
+ 0.030456986278295517,
+ 0.06825754791498184,
+ -0.6061124801635742,
+ -0.20366232097148895,
+ -0.1310543715953827,
+ -0.04278672859072685,
+ 0.019910218194127083,
+ -0.09215665608644485,
+ -0.06307679414749146,
+ -0.11189908534288406,
+ -0.08123145252466202,
+ 0.01852140575647354,
+ 0.13358314335346222,
+ -0.037198346108198166,
+ -0.06514444202184677,
+ 0.0448371097445488,
+ 0.018652522936463356,
+ 0.011874238960444927,
+ 0.04452796280384064,
+ 0.1188950389623642,
+ 0.1213189885020256,
+ -0.036167580634355545,
+ 0.1648382693529129,
+ 0.19552873075008392,
+ -0.16189689934253693,
+ -0.014364805072546005,
+ 0.018666792660951614,
+ 0.08146843314170837,
+ -0.05834528058767319,
+ 0.07800543308258057,
+ -0.0012464334722608328,
+ -0.04570535197854042,
+ 0.09520899504423141,
+ -0.09164465963840485,
+ -0.09111931174993515,
+ -0.38006627559661865,
+ -0.12076140195131302,
+ -0.1124340146780014,
+ 0.10577534139156342,
+ -0.07914374768733978,
+ 0.11781805753707886,
+ -0.1784798502922058,
+ 0.06465725600719452,
+ 0.11622463911771774,
+ -0.04867926985025406,
+ -0.052238646894693375,
+ 0.1504058539867401,
+ -1.4788333177566528,
+ 0.06357045471668243,
+ -0.1535155028104782,
+ -0.05520036816596985,
+ -0.1635567843914032,
+ 0.061029523611068726,
+ -0.16760055720806122,
+ -0.010563244111835957,
+ 0.06692282855510712,
+ -0.2549525797367096,
+ 0.0006265058182179928,
+ -0.021442098543047905,
+ 0.03819136321544647,
+ -0.029554719105362892,
+ -0.17348118126392365,
+ -0.10895483195781708,
+ 0.030207861214876175,
+ 0.3693648874759674,
+ -0.17279714345932007,
+ 0.07102468609809875,
+ -0.031363628804683685,
+ 0.26303836703300476,
+ 0.16409261524677277,
+ 0.003991485107690096,
+ -0.3972315490245819,
+ 0.1701420098543167,
+ -0.006253332365304232,
+ 0.0020736870355904102,
+ -0.04710637032985687,
+ 0.18722307682037354,
+ -0.02831968106329441,
+ -0.04297930374741554,
+ 0.022891419008374214,
+ 0.20754322409629822,
+ -0.48658883571624756,
+ -0.22909937798976898,
+ 0.11885718256235123,
+ -0.46902334690093994
+ ],
+ [
+ 0.12966272234916687,
+ -0.007360656745731831,
+ 0.061235908418893814,
+ 0.08076929301023483,
+ 0.023691395297646523,
+ -0.15586043894290924,
+ 0.06820093840360641,
+ -0.06514070183038712,
+ 0.01214582845568657,
+ -0.1758643239736557,
+ -0.1413014680147171,
+ 0.09423520416021347,
+ -0.21729187667369843,
+ 0.10132813453674316,
+ -0.03141697496175766,
+ 0.05812502279877663,
+ 0.08627642691135406,
+ 0.07192486524581909,
+ -0.0668289065361023,
+ 0.05381755158305168,
+ -0.10642077773809433,
+ -0.11875130981206894,
+ 0.07498949766159058,
+ 0.21271970868110657,
+ -0.00018062097660731524,
+ 0.024072658270597458,
+ -0.5649756789207458,
+ -0.06204131990671158,
+ 0.13868620991706848,
+ -0.0752866119146347,
+ -0.04851313680410385,
+ -0.4386079013347626,
+ 0.0274188369512558,
+ -0.1550387293100357,
+ -0.07904964685440063,
+ 0.2511279284954071,
+ 0.19192640483379364,
+ -0.057444505393505096,
+ -0.03290176764130592,
+ 0.07186154276132584,
+ -0.1571197211742401,
+ -0.13438567519187927,
+ -0.13997720181941986,
+ -0.04874617978930473,
+ -0.031197506934404373,
+ -0.04387471079826355,
+ 0.15658770501613617,
+ 0.04448807239532471,
+ 0.01751384325325489,
+ -0.029285045340657234,
+ 0.048812367022037506,
+ 0.0407353974878788,
+ -0.00832420401275158,
+ 0.18194489181041718,
+ 0.014224818907678127,
+ -0.13758373260498047,
+ 0.11031801253557205,
+ -0.15505632758140564,
+ 0.029397763311862946,
+ 0.08054986596107483,
+ 0.01083151251077652,
+ 0.025888880714774132,
+ 0.057619646191596985,
+ -0.032670192420482635,
+ 0.006632988806813955,
+ -0.4142110347747803,
+ 0.014740522019565105,
+ 0.07384705543518066,
+ 0.1001928374171257,
+ -0.007263291161507368,
+ -0.11265186965465546,
+ -0.08988604694604874,
+ 0.0462053082883358,
+ 0.015702437609434128,
+ 0.0949975848197937,
+ -0.06872424483299255,
+ -0.12592889368534088,
+ 0.11579219996929169,
+ 0.08150125294923782,
+ 0.033369582146406174,
+ -0.048806872218847275,
+ -0.043363332748413086,
+ 0.07659149169921875,
+ -0.09472240507602692,
+ 0.08889376372098923,
+ 0.07607120275497437,
+ 0.09682059288024902,
+ 0.07842063158750534,
+ 0.03771235793828964,
+ 0.09469985216856003,
+ 0.08529437333345413,
+ 0.19783252477645874,
+ -0.02082202211022377,
+ 0.1421523541212082,
+ -0.12626637518405914,
+ 0.0006469184882007539,
+ -0.04485580325126648,
+ 0.013545172289013863,
+ 0.013684321194887161,
+ 0.09763503819704056,
+ -0.10885018110275269,
+ 0.038817327469587326,
+ 0.03226421773433685,
+ -0.02596290037035942,
+ 0.1289830505847931,
+ 0.041971612721681595,
+ -0.2893608808517456,
+ 0.21206432580947876,
+ 0.013410660438239574,
+ 0.03840477019548416,
+ -0.05336631461977959,
+ -0.2593543231487274,
+ -0.04276334121823311,
+ 0.07859902828931808,
+ -0.09878284484148026,
+ -0.3722444474697113,
+ 0.08965621888637543,
+ -0.5145974159240723,
+ -0.20321214199066162,
+ -0.051271162927150726,
+ 0.09452270716428757,
+ 0.013266505673527718,
+ 0.020961331203579903,
+ -0.025135984644293785,
+ -0.14911101758480072,
+ -0.03291100263595581,
+ 0.05625533312559128,
+ 0.06336399167776108
+ ],
+ [
+ 0.08068303763866425,
+ -0.4604851305484772,
+ 0.21835477650165558,
+ -0.12043691426515579,
+ -0.11777772009372711,
+ -0.06417425721883774,
+ 0.13569742441177368,
+ -0.027688438072800636,
+ 0.1009046658873558,
+ 0.12271740287542343,
+ 0.16189908981323242,
+ -0.04504493251442909,
+ -0.2626798152923584,
+ -0.575246274471283,
+ -0.038127969950437546,
+ 0.38994014263153076,
+ 0.010613269172608852,
+ 0.28948789834976196,
+ -0.13264958560466766,
+ -0.0005838611978106201,
+ 0.1139659509062767,
+ 0.040877360850572586,
+ 0.1738293170928955,
+ 0.051417309790849686,
+ -0.1991862803697586,
+ -0.10373934358358383,
+ -0.04598042368888855,
+ 0.12701651453971863,
+ -0.29635119438171387,
+ -0.3122963011264801,
+ 0.021017741411924362,
+ -0.3374790549278259,
+ -0.21292050182819366,
+ -0.030133269727230072,
+ -0.0064400071278214455,
+ -0.10169267654418945,
+ -0.3108963072299957,
+ 0.09013724327087402,
+ 0.14740508794784546,
+ 0.045348264276981354,
+ -0.13836686313152313,
+ -0.08134415745735168,
+ 0.2040412873029709,
+ 0.14905764162540436,
+ 0.32249611616134644,
+ 0.2916358709335327,
+ -0.6801439523696899,
+ 0.13808032870292664,
+ 0.04117457568645477,
+ -0.35449719429016113,
+ 0.22641296684741974,
+ -0.11808512359857559,
+ -0.07027171552181244,
+ -0.10572060197591782,
+ -0.15515469014644623,
+ -0.2763161063194275,
+ -0.4814583361148834,
+ 0.02502397634088993,
+ 0.4127350151538849,
+ -2.3265841007232666,
+ -0.0951528251171112,
+ 0.0266332495957613,
+ 0.2985280454158783,
+ 0.36305856704711914,
+ 0.039458323270082474,
+ 0.015102248638868332,
+ 0.03162441775202751,
+ -0.06619574874639511,
+ 0.011212985031306744,
+ 0.6458699703216553,
+ 0.35162439942359924,
+ -0.1140977144241333,
+ 0.0463264100253582,
+ -0.21078985929489136,
+ -1.115431547164917,
+ -0.08310552686452866,
+ -0.06262164562940598,
+ 0.042927294969558716,
+ -0.05489038676023483,
+ -0.24256335198879242,
+ -0.09005032479763031,
+ 0.043770480901002884,
+ -0.2041400521993637,
+ 0.24453145265579224,
+ 0.11554188281297684,
+ 0.2026459127664566,
+ -0.345918208360672,
+ -0.6503119468688965,
+ 0.13783079385757446,
+ -0.1749541461467743,
+ -0.008121663704514503,
+ -0.2794790267944336,
+ -0.4686086177825928,
+ 0.19028058648109436,
+ 0.42985427379608154,
+ -0.11628211289644241,
+ -0.14329630136489868,
+ -0.27742478251457214,
+ -0.06483302265405655,
+ -0.018348509445786476,
+ 0.16192781925201416,
+ -0.12277788668870926,
+ 0.09701694548130035,
+ 0.01128819864243269,
+ 0.014032882638275623,
+ 0.07983975112438202,
+ 0.05060616508126259,
+ -0.5240373611450195,
+ -1.2179608345031738,
+ -0.03863126039505005,
+ -0.05036527290940285,
+ 0.03355466574430466,
+ -0.4347473084926605,
+ 0.2565353214740753,
+ -0.11326612532138824,
+ 0.2726048529148102,
+ -0.42376112937927246,
+ -0.023075588047504425,
+ -0.05473586916923523,
+ 0.4343847930431366,
+ -0.0051671178080141544,
+ 0.3547937273979187,
+ -0.08823041617870331,
+ 0.11607196182012558,
+ -0.9579744935035706,
+ -0.015813684090971947,
+ -0.0497591532766819,
+ 0.10366342961788177
+ ],
+ [
+ 0.022100506350398064,
+ 0.05973423272371292,
+ -0.006858102045953274,
+ -0.07625041902065277,
+ 0.0537552647292614,
+ -0.07332704961299896,
+ -0.016882669180631638,
+ 0.004047991242259741,
+ 0.00806268397718668,
+ -0.009886280633509159,
+ 0.06888791173696518,
+ 0.0757407695055008,
+ 0.021822482347488403,
+ 0.0018336917273700237,
+ 0.07594286650419235,
+ -0.0274543184787035,
+ -0.00705647561699152,
+ 0.06866790354251862,
+ 0.09266436100006104,
+ -0.0003403244190849364,
+ 0.03812582790851593,
+ 0.022745877504348755,
+ 0.03063935413956642,
+ 0.03293226659297943,
+ -0.05427825450897217,
+ -0.052394285798072815,
+ 0.08560802042484283,
+ -0.05473952740430832,
+ 0.06855395436286926,
+ 0.0021014539524912834,
+ 0.005207826849073172,
+ 0.04866959527134895,
+ -0.02787557616829872,
+ -0.014721778221428394,
+ 0.11407733708620071,
+ -0.08830782026052475,
+ 0.10983572155237198,
+ 0.04407014325261116,
+ 0.07730831205844879,
+ 0.033464789390563965,
+ 0.009146101772785187,
+ 0.020720038563013077,
+ 0.03308495506644249,
+ 0.060373518615961075,
+ 0.045881785452365875,
+ -0.07335836440324783,
+ 0.07737629115581512,
+ 0.013063381426036358,
+ 0.10062108933925629,
+ 0.038289185613393784,
+ 0.03762344270944595,
+ 0.09670377522706985,
+ -0.021044831722974777,
+ 0.04225647822022438,
+ 0.007198530249297619,
+ 0.007486679591238499,
+ 0.08079442381858826,
+ 0.10847241431474686,
+ 0.04503866657614708,
+ -0.06439220160245895,
+ -0.03718191012740135,
+ -0.04443495720624924,
+ -0.034459877759218216,
+ -0.024855585768818855,
+ 0.11225103586912155,
+ -0.012098684906959534,
+ 0.16411805152893066,
+ 0.055935293436050415,
+ 0.03670573607087135,
+ -0.0026147107128053904,
+ 0.02849329635500908,
+ -0.033770378679037094,
+ -0.023687465116381645,
+ 0.016730692237615585,
+ -0.016792554408311844,
+ -0.05543510243296623,
+ 0.05381111055612564,
+ -0.024749239906668663,
+ 0.06550175696611404,
+ 0.044264715164899826,
+ 0.05848730728030205,
+ 0.06899718940258026,
+ -0.03510728478431702,
+ 0.05905619636178017,
+ -0.05505536124110222,
+ 0.002036695135757327,
+ 0.043284349143505096,
+ 0.09028360992670059,
+ -0.05221617966890335,
+ 0.025539042428135872,
+ 0.00040586444083601236,
+ 0.050219520926475525,
+ 0.007055121008306742,
+ -0.03503123298287392,
+ -0.019040584564208984,
+ -0.030668051913380623,
+ -0.028253722935914993,
+ -0.05933734029531479,
+ 0.09187337011098862,
+ -0.03565239533782005,
+ 0.007415323983877897,
+ 0.003446849761530757,
+ 0.0861821174621582,
+ -0.028345314785838127,
+ 0.06000646948814392,
+ -0.04835960268974304,
+ -0.009463253431022167,
+ 0.027377089485526085,
+ -0.09059581160545349,
+ -0.02526162937283516,
+ -0.03889518231153488,
+ -0.028866000473499298,
+ 0.03326292335987091,
+ -0.07780182361602783,
+ 0.033728089183568954,
+ -0.03527432680130005,
+ 0.05570830777287483,
+ -0.05192122980952263,
+ 0.04176004230976105,
+ 0.07814699411392212,
+ 0.06351935863494873,
+ 0.07046718895435333,
+ -0.06931284070014954,
+ 0.04990892484784126,
+ -0.005853850860148668,
+ -0.02124575711786747,
+ 0.021970102563500404,
+ 0.011145196855068207
+ ],
+ [
+ -0.10874991863965988,
+ 0.11763397604227066,
+ -0.04454135149717331,
+ -0.04409550130367279,
+ 0.029610177502036095,
+ -0.0469261072576046,
+ -0.10175896435976028,
+ 0.02217860519886017,
+ 0.02360335923731327,
+ -0.12451070547103882,
+ 0.0718151405453682,
+ 0.040806274861097336,
+ 0.13956202566623688,
+ -0.1283247172832489,
+ -0.021691428497433662,
+ 0.06577760726213455,
+ -0.1157815083861351,
+ -0.05095899850130081,
+ 0.14206258952617645,
+ 0.029813125729560852,
+ 0.047458719462156296,
+ 0.05395878851413727,
+ -0.054781120270490646,
+ -0.03520810976624489,
+ 0.03340160474181175,
+ 0.020458677783608437,
+ -0.013200613670051098,
+ 0.03782344236969948,
+ -0.027826769277453423,
+ -0.0177626870572567,
+ -0.08389586955308914,
+ 0.0930219516158104,
+ -0.17846925556659698,
+ 0.0683843269944191,
+ 0.0992787778377533,
+ -0.40700653195381165,
+ -0.03024269826710224,
+ 0.0932631716132164,
+ 0.07231274247169495,
+ 0.1799630969762802,
+ 0.05498238280415535,
+ 0.08438967913389206,
+ -0.06030955910682678,
+ 0.12739457190036774,
+ -0.014909046702086926,
+ -0.09680614620447159,
+ -0.08667949587106705,
+ 0.07913587987422943,
+ 0.04462272301316261,
+ 0.1466536819934845,
+ -0.1304406374692917,
+ 0.09753764420747757,
+ 0.08904200792312622,
+ 0.0024527590721845627,
+ -0.1307583898305893,
+ 0.10451482981443405,
+ 0.06756467372179031,
+ 0.05104636773467064,
+ 0.04643775522708893,
+ 0.04838382825255394,
+ 0.01280492264777422,
+ 0.04848919436335564,
+ 0.08307463675737381,
+ 0.012579288333654404,
+ 0.11235181242227554,
+ 0.08992814272642136,
+ 0.1150992214679718,
+ -0.09207111597061157,
+ -0.02370542660355568,
+ 0.10883768647909164,
+ 0.10126376897096634,
+ -0.004358799662441015,
+ 0.06549526751041412,
+ -0.066440649330616,
+ -0.06488785892724991,
+ -0.09109856933355331,
+ -0.0006314009078778327,
+ 0.05163821950554848,
+ 0.08556362986564636,
+ -0.12821485102176666,
+ 0.053370941430330276,
+ 0.11493109166622162,
+ -0.05387183651328087,
+ 0.03503965958952904,
+ 0.01115469727665186,
+ 0.07940593361854553,
+ -0.049753088504076004,
+ -0.002931189024820924,
+ 0.026441605761647224,
+ 0.0880935937166214,
+ 0.10981141030788422,
+ -0.009769277647137642,
+ -0.15580111742019653,
+ 0.08266335725784302,
+ -0.1104380413889885,
+ -0.05999383330345154,
+ -0.04163913428783417,
+ -0.046950776129961014,
+ -0.020358119159936905,
+ 0.06878373771905899,
+ 0.060373615473508835,
+ -0.0904647707939148,
+ -0.001194355427287519,
+ 0.06163525581359863,
+ 0.09129751473665237,
+ -0.06476165354251862,
+ -0.08394224941730499,
+ -0.09015800058841705,
+ -0.1100175529718399,
+ 0.06773547828197479,
+ -0.12030615657567978,
+ 0.11214296519756317,
+ 0.09926857799291611,
+ -0.07497785240411758,
+ -0.07614120095968246,
+ 0.09117268770933151,
+ -0.08321798592805862,
+ 0.04765239357948303,
+ 0.013470078818500042,
+ 0.01739692874252796,
+ -0.09838885068893433,
+ -0.049362629652023315,
+ 0.010396691970527172,
+ 0.03182753548026085,
+ 0.09512922912836075,
+ 0.043936651200056076,
+ 0.04824742302298546,
+ 0.032766036689281464
+ ],
+ [
+ -0.09444815665483475,
+ -0.10546442866325378,
+ 0.004151022061705589,
+ 0.26865676045417786,
+ -0.09786245971918106,
+ -0.0870860368013382,
+ -0.1030690148472786,
+ 0.151222825050354,
+ -0.16227436065673828,
+ -0.07391563802957535,
+ 0.01781049370765686,
+ 0.07307354360818863,
+ 0.06218486651778221,
+ -0.5777086615562439,
+ -0.3971981406211853,
+ -0.11923658847808838,
+ -0.17235496640205383,
+ -0.19170288741588593,
+ 0.4237936735153198,
+ 0.3947053551673889,
+ 0.0948033481836319,
+ 0.07797446101903915,
+ -0.3725269138813019,
+ -0.03751477599143982,
+ 0.32913753390312195,
+ -0.20175257325172424,
+ 0.11862052232027054,
+ -0.1722174882888794,
+ -0.05023976042866707,
+ 0.13087758421897888,
+ 0.332387775182724,
+ 0.0913136824965477,
+ -0.31936120986938477,
+ -0.020207837224006653,
+ 0.03258311375975609,
+ 0.26868852972984314,
+ 0.025287505239248276,
+ 0.23182709515094757,
+ -0.0030688790138810873,
+ 0.07344377785921097,
+ -0.05932801216840744,
+ 0.002265426330268383,
+ -0.013018941506743431,
+ -0.07382942736148834,
+ -0.07015806436538696,
+ -0.037649620324373245,
+ 0.13419577479362488,
+ 0.1620219498872757,
+ 0.17791183292865753,
+ 0.04432394355535507,
+ 0.1689101606607437,
+ 0.3161015808582306,
+ 0.06653757393360138,
+ -0.2137129157781601,
+ 0.2577473819255829,
+ 0.0035910988226532936,
+ 0.1699383556842804,
+ 0.06487233936786652,
+ -0.22776897251605988,
+ -0.17907263338565826,
+ 0.03378954529762268,
+ -0.04180801287293434,
+ -0.366566002368927,
+ -0.03351831063628197,
+ 0.1308535635471344,
+ -0.07481737434864044,
+ 0.3166605830192566,
+ 0.3140139579772949,
+ -0.003924658056348562,
+ -0.3712998628616333,
+ 0.10029216855764389,
+ 0.007486800663173199,
+ 0.10769049823284149,
+ -0.04785921052098274,
+ -0.15964457392692566,
+ 0.18918821215629578,
+ -0.05380452424287796,
+ -0.045164965093135834,
+ -0.05487172678112984,
+ -0.264744371175766,
+ -0.3187876045703888,
+ 0.17602095007896423,
+ 0.12430839985609055,
+ 0.2621302306652069,
+ -0.44947323203086853,
+ 0.11485685408115387,
+ -0.10570235550403595,
+ 0.154866561293602,
+ -0.017136283218860626,
+ 0.09437155723571777,
+ 0.16342693567276,
+ 0.31610172986984253,
+ -0.3965337872505188,
+ 0.10463127493858337,
+ -0.5655682682991028,
+ -0.6598596572875977,
+ 0.15606650710105896,
+ -0.22883625328540802,
+ 0.1680314987897873,
+ 0.05444402992725372,
+ -0.22881101071834564,
+ -0.7171896696090698,
+ -0.25398334860801697,
+ 0.22015957534313202,
+ 0.07082755118608475,
+ -0.3327757716178894,
+ -0.3070888817310333,
+ 0.34825870394706726,
+ -0.4655570089817047,
+ -0.7730278372764587,
+ 0.09746160358190536,
+ 0.12433277815580368,
+ 0.22675098478794098,
+ -0.062036577612161636,
+ 0.020063752308487892,
+ 0.06953223049640656,
+ 0.17867273092269897,
+ -0.10206679999828339,
+ -0.046225693076848984,
+ -0.27563706040382385,
+ -0.19284509122371674,
+ -0.2345849722623825,
+ 0.02791452780365944,
+ 0.200689435005188,
+ -0.8062997460365295,
+ -0.6312804818153381,
+ -0.04716772213578224,
+ 0.29504427313804626
+ ],
+ [
+ 0.020345857366919518,
+ 0.08258439600467682,
+ 0.04198909550905228,
+ -0.012981762178242207,
+ -0.1486009955406189,
+ 0.08143780380487442,
+ 0.03239312767982483,
+ 0.05183764174580574,
+ 0.09492125362157822,
+ 0.03350841999053955,
+ -0.11826544255018234,
+ 0.004810255952179432,
+ 0.01743023656308651,
+ 0.08030740171670914,
+ -0.3595708906650543,
+ -0.07846042513847351,
+ 0.17077846825122833,
+ 0.06355525553226471,
+ 0.0008098255493678153,
+ 0.16387782990932465,
+ -0.314718633890152,
+ 0.011779466643929482,
+ -0.08589942753314972,
+ -0.05517808347940445,
+ 0.07806329429149628,
+ 0.07241081446409225,
+ -0.015361661091446877,
+ -0.0918382853269577,
+ -0.1521817445755005,
+ 0.06674808263778687,
+ 0.13242582976818085,
+ 0.00159309187438339,
+ 0.0535249225795269,
+ 0.013043437153100967,
+ -0.025688836351037025,
+ -0.14653842151165009,
+ -0.06288441270589828,
+ 0.0830831304192543,
+ 0.10518289357423782,
+ -0.1229301393032074,
+ 0.04864174500107765,
+ -0.1046496108174324,
+ -0.031805217266082764,
+ 0.10773799568414688,
+ 0.00237857224419713,
+ -0.250005304813385,
+ 0.06048933044075966,
+ 0.037960827350616455,
+ -0.008680831640958786,
+ 0.0014409392606467009,
+ -0.06735807657241821,
+ -0.08703939616680145,
+ 0.13478907942771912,
+ 0.09688401222229004,
+ 0.007311120629310608,
+ 0.07687411457300186,
+ 0.025612207129597664,
+ 0.08480565994977951,
+ -0.04219629243016243,
+ -0.03235746920108795,
+ -0.06431146711111069,
+ 0.023429619148373604,
+ 0.01075203251093626,
+ 0.08108755946159363,
+ 0.06615999341011047,
+ 0.06703384220600128,
+ 0.11017568409442902,
+ 0.01596059463918209,
+ 0.05204823613166809,
+ 0.08427974581718445,
+ 0.04228236898779869,
+ 0.005966749042272568,
+ 0.05200062319636345,
+ -0.048708561807870865,
+ 0.012274525128304958,
+ 0.02917325869202614,
+ 0.06927766650915146,
+ 0.10555313527584076,
+ -0.07545927911996841,
+ -0.1694139838218689,
+ -0.12465400993824005,
+ -0.04468682035803795,
+ -0.0652848407626152,
+ 0.022826163098216057,
+ -0.022961921989917755,
+ 0.06117899343371391,
+ 0.016012853011488914,
+ 0.13477642834186554,
+ -0.06917978078126907,
+ -0.019295673817396164,
+ 0.337545245885849,
+ -0.0454840213060379,
+ -0.1998652219772339,
+ 0.11409991979598999,
+ -0.12017957121133804,
+ -0.027296677231788635,
+ -0.07282096147537231,
+ 0.07185978442430496,
+ 0.06815982609987259,
+ -0.0940287709236145,
+ 0.06805936992168427,
+ 0.052890777587890625,
+ 0.0917636975646019,
+ -0.06638538092374802,
+ -0.06039520353078842,
+ -0.07764308899641037,
+ -0.08000923693180084,
+ -0.33001887798309326,
+ -0.1008705198764801,
+ -0.009203345514833927,
+ -0.038755808025598526,
+ 0.039360638707876205,
+ 0.1258840560913086,
+ -0.09986866265535355,
+ -0.08260538429021835,
+ 0.1423780620098114,
+ -0.10750985890626907,
+ 0.10695836693048477,
+ -0.09841299802064896,
+ -0.05929999426007271,
+ 0.0009934597183018923,
+ 0.02132529579102993,
+ 0.09034831076860428,
+ 0.028612608090043068,
+ -0.009373960085213184,
+ 0.04995357617735863,
+ -0.05761996656656265,
+ -0.06977792084217072
+ ],
+ [
+ -0.00044584175338968635,
+ -9.155052410614317e-11,
+ -2.9199471729413062e-09,
+ -9.188117360281467e-07,
+ -1.139207412848009e-07,
+ -1.284078962271451e-06,
+ 2.0215529730194248e-05,
+ -4.659285696106963e-05,
+ -2.7013120416086167e-05,
+ -9.8429472927819e-06,
+ -4.647890010150632e-16,
+ -1.2911179965158226e-06,
+ -1.6734784694979737e-27,
+ -3.427300887537399e-09,
+ -3.5351957657986485e-40,
+ -6.171132492337846e-20,
+ -6.793305045209966e-31,
+ 2.1716719800224382e-07,
+ -5.32333133340138e-22,
+ -2.4571139567441946e-10,
+ 1.0010455839597196e-40,
+ -1.7649843186973158e-07,
+ -2.417084942862857e-06,
+ -1.8549266087575234e-06,
+ -3.988310723346267e-11,
+ -6.969708010728937e-06,
+ -0.00014265533536672592,
+ -4.2984069084597576e-29,
+ -1.9570025600046392e-08,
+ -2.171365667891223e-05,
+ 6.236420407867982e-11,
+ -7.306345537472225e-07,
+ -3.095748567386386e-41,
+ -3.624598607822572e-40,
+ -9.231123623745091e-14,
+ -6.830018933009765e-23,
+ -2.7363830312765458e-08,
+ 8.225140568640654e-09,
+ -6.475165311421126e-20,
+ -2.90887214760005e-07,
+ -5.343924271983269e-07,
+ -4.114118894449348e-07,
+ -1.27003657590663e-10,
+ -2.843396629259587e-10,
+ -1.3586016756050867e-08,
+ 6.107489291836499e-40,
+ -6.156495452325217e-11,
+ 4.4341055827068487e-10,
+ -1.7904647393152118e-05,
+ 6.2674895504931066e-40,
+ -1.0277708357623406e-17,
+ -4.68755589899672e-10,
+ 6.583687588157527e-14,
+ -3.3520132199441055e-13,
+ -1.2669014726185424e-09,
+ -2.5660361302470847e-07,
+ -2.4041673896135762e-06,
+ -4.460528725758195e-05,
+ 4.756451289722463e-06,
+ -4.384489784570178e-06,
+ 6.3542059795891576e-21,
+ -4.125657142139971e-05,
+ -6.436049261537846e-06,
+ -1.3688464983960004e-18,
+ -2.225570977509861e-10,
+ -1.37610829398227e-08,
+ -2.397555363131687e-05,
+ -3.329783671013331e-11,
+ -3.857734895973408e-07,
+ -1.3570698683906812e-05,
+ -1.00075114861653e-09,
+ -3.794394069700502e-05,
+ 4.04758975491859e-06,
+ -8.826262503236765e-22,
+ -1.3386523960434715e-06,
+ -0.00011272213305346668,
+ -5.418936478739696e-15,
+ 5.921733167405601e-40,
+ 2.132702221883318e-31,
+ -1.8009417655535146e-17,
+ -7.403718610410337e-11,
+ -2.0494383557709056e-15,
+ -2.023037086473778e-05,
+ -7.793586956350573e-12,
+ -1.7994027601275775e-08,
+ -9.5906580099836e-07,
+ -2.033852979366202e-05,
+ -1.2433476470619098e-09,
+ -8.323967473213381e-17,
+ -3.956924956582952e-06,
+ 4.341337793571986e-32,
+ -4.3608569200159764e-08,
+ -3.949672033245256e-18,
+ -1.478904563916028e-12,
+ -1.8938862607218105e-17,
+ -3.9012338675092906e-06,
+ -1.8966120478580706e-05,
+ 1.865072044893168e-05,
+ -1.8906891909864498e-06,
+ -4.338051011824496e-19,
+ -0.00028914096765220165,
+ -3.152842917297782e-11,
+ -1.0782426898003905e-06,
+ -2.2289306400580244e-07,
+ 1.6852294493219233e-07,
+ -5.130399586050771e-06,
+ -3.6227349937689723e-06,
+ -7.151771939912961e-39,
+ 1.3502351482848207e-40,
+ 1.5482792999066408e-12,
+ 3.418707876789995e-07,
+ 1.1283815754129157e-40,
+ -2.0737494719065249e-16,
+ -2.5020722205226775e-06,
+ -2.0625165411677895e-18,
+ -8.26649265945889e-05,
+ -6.290624806428754e-19,
+ -3.7695743230869994e-05,
+ -2.135755892140878e-07,
+ -4.705426817963598e-06,
+ -0.0008775395690463483,
+ -1.4698167010498828e-16,
+ -6.313180165307131e-06,
+ -2.1105923952990935e-10,
+ 1.2301018309382542e-40,
+ -1.5831767008478437e-09,
+ -3.6177410947857425e-05,
+ -6.594370443266157e-41
+ ],
+ [
+ -0.14104413986206055,
+ -0.08550803363323212,
+ -0.056075986474752426,
+ -0.1392381638288498,
+ -0.04371555894613266,
+ 0.08799414336681366,
+ 0.07550466805696487,
+ -0.04804478585720062,
+ 0.006246818695217371,
+ -0.035008132457733154,
+ 0.020046859979629517,
+ 0.04793033376336098,
+ 0.08181677758693695,
+ -0.14407086372375488,
+ -0.13555876910686493,
+ -0.14684459567070007,
+ -0.1291399896144867,
+ -0.05401122570037842,
+ 0.075422003865242,
+ 0.2204241156578064,
+ 0.11591820418834686,
+ 0.10085967928171158,
+ 0.05159406736493111,
+ 0.09519592672586441,
+ -0.09217249602079391,
+ 0.0064501091837882996,
+ 0.15199624001979828,
+ 0.12175027281045914,
+ -0.11525428295135498,
+ 0.1416197121143341,
+ 0.019238445907831192,
+ 0.11461994051933289,
+ -0.17880570888519287,
+ -0.005189654882997274,
+ -0.04494582116603851,
+ -0.02208442986011505,
+ -0.15709708631038666,
+ 0.05099504441022873,
+ 0.12399493902921677,
+ 0.05006171017885208,
+ -0.12395890057086945,
+ 0.10361938923597336,
+ -0.12926459312438965,
+ 0.12684008479118347,
+ -0.07075630873441696,
+ -0.03219493851065636,
+ 0.06384515762329102,
+ 0.1479233205318451,
+ 0.11414188146591187,
+ 0.1729881465435028,
+ -0.026519786566495895,
+ 0.03900572657585144,
+ 0.04804244264960289,
+ -0.081888847053051,
+ -0.05678464099764824,
+ 0.05022229254245758,
+ -0.06730110198259354,
+ 0.06722192466259003,
+ 0.07272542268037796,
+ 0.06768149882555008,
+ 0.10650067031383514,
+ -0.07044139504432678,
+ -0.020618867129087448,
+ 0.022606302052736282,
+ 0.1243889331817627,
+ 0.050003230571746826,
+ 0.2117871791124344,
+ -0.07247675210237503,
+ -0.0433017872273922,
+ -0.018049292266368866,
+ -0.07728008925914764,
+ -0.051487650722265244,
+ -0.010388107970356941,
+ -0.03840603679418564,
+ 0.042314570397138596,
+ -0.13308650255203247,
+ 0.17549486458301544,
+ 0.08729366213083267,
+ 0.10613762587308884,
+ -0.1805201917886734,
+ -0.22303836047649384,
+ 0.17258907854557037,
+ -0.12479858845472336,
+ 0.09327780455350876,
+ -0.17199286818504333,
+ -0.03702288120985031,
+ -0.01579420268535614,
+ 0.02618500404059887,
+ -0.004428249318152666,
+ -0.08325447887182236,
+ 0.12585794925689697,
+ -0.065574511885643,
+ -0.1369810253381729,
+ 0.1628239005804062,
+ 0.009094227105379105,
+ -0.020980389788746834,
+ 0.04186570644378662,
+ -0.024476798251271248,
+ 0.16985087096691132,
+ 0.028288502246141434,
+ 0.06904555857181549,
+ -0.05354343727231026,
+ 0.0034970175474882126,
+ 0.01316171232610941,
+ 0.12500526010990143,
+ 0.062093738466501236,
+ -0.029471196234226227,
+ -0.08351898193359375,
+ -0.3311784565448761,
+ 0.027033844962716103,
+ 0.09369193017482758,
+ 0.12931285798549652,
+ 0.1198355183005333,
+ -0.06606995314359665,
+ 0.026732195168733597,
+ 0.03589631989598274,
+ -0.05032728984951973,
+ 0.15489289164543152,
+ 0.032181669026613235,
+ -0.0541946180164814,
+ -0.038826677948236465,
+ -0.10267078876495361,
+ -0.06151000037789345,
+ 0.016563208773732185,
+ 0.05637247860431671,
+ 0.08317486941814423,
+ -0.046989064663648605,
+ -0.05246599018573761
+ ],
+ [
+ -0.10186420381069183,
+ 0.02016870491206646,
+ 0.054370246827602386,
+ 0.13046176731586456,
+ -0.021356552839279175,
+ 0.07473702728748322,
+ -0.004555057268589735,
+ 0.09229419380426407,
+ 0.029509060084819794,
+ -0.08054400235414505,
+ 0.19508476555347443,
+ -0.04133418947458267,
+ 0.146103635430336,
+ -0.08147824555635452,
+ -0.131513312458992,
+ -0.03063621185719967,
+ 0.06328791379928589,
+ -0.11086396872997284,
+ 0.02187536470592022,
+ 0.08178805559873581,
+ -0.4296962320804596,
+ -0.015291551128029823,
+ 0.08149909973144531,
+ 0.053222719579935074,
+ -0.054673902690410614,
+ -0.16605141758918762,
+ -0.03590128570795059,
+ -0.28833988308906555,
+ -0.007345319725573063,
+ 0.06583943217992783,
+ 0.005079068709164858,
+ 0.03580319881439209,
+ 0.013572314754128456,
+ -0.04575575888156891,
+ 0.0785786584019661,
+ -0.22729343175888062,
+ -0.0904286652803421,
+ 0.004339638166129589,
+ 0.19334560632705688,
+ 0.0402449332177639,
+ 0.059076592326164246,
+ 0.013826125301420689,
+ -0.11223575472831726,
+ 0.0489761121571064,
+ -0.11104200035333633,
+ -0.12019079923629761,
+ 0.11134091764688492,
+ 0.01799221895635128,
+ 0.06266142427921295,
+ 0.1326330155134201,
+ -0.032054029405117035,
+ -0.1561957597732544,
+ 0.05022146552801132,
+ -0.07156559079885483,
+ 0.10750767588615417,
+ 0.08466636389493942,
+ 0.10223737359046936,
+ 0.05556120350956917,
+ -0.12165739387273788,
+ 0.008870034478604794,
+ -0.15012112259864807,
+ 0.03577403351664543,
+ 0.06069657579064369,
+ 0.06260450929403305,
+ 0.042518071830272675,
+ 0.13712525367736816,
+ 0.06046714261174202,
+ -0.07188569009304047,
+ 0.03488211706280708,
+ 0.056959472596645355,
+ -0.0702919140458107,
+ -0.06275980919599533,
+ -0.04078558087348938,
+ -0.11212116479873657,
+ 0.12560388445854187,
+ -0.0017485315911471844,
+ -0.005485716741532087,
+ -0.03272698447108269,
+ -0.054903946816921234,
+ 0.009742619469761848,
+ -0.12828007340431213,
+ 0.0064230505377054214,
+ -0.07852432131767273,
+ 0.06572259217500687,
+ -0.11800432205200195,
+ 0.03379007428884506,
+ 0.06506215035915375,
+ -0.018542135134339333,
+ -0.11898178607225418,
+ 0.11570706218481064,
+ -0.0810745507478714,
+ 0.008890210650861263,
+ -0.3217940926551819,
+ -0.0547780878841877,
+ 0.05689295381307602,
+ 0.064761683344841,
+ -0.03760334476828575,
+ -0.04549845680594444,
+ -0.00040005645132623613,
+ -0.1264895647764206,
+ 0.0457359217107296,
+ -0.0731520727276802,
+ 0.00581421609967947,
+ -0.0028948418330401182,
+ -0.016589587554335594,
+ -0.1273030787706375,
+ -0.01079714298248291,
+ 0.036282576620578766,
+ -0.0026773165445774794,
+ 0.008228794671595097,
+ -0.10860657691955566,
+ 0.08314163237810135,
+ 0.0635782927274704,
+ 0.03370481729507446,
+ -0.05471549928188324,
+ 0.15337076783180237,
+ -0.05022745206952095,
+ -0.0714479461312294,
+ -0.07447922229766846,
+ 0.0042650289833545685,
+ -0.01152635645121336,
+ -0.23130302131175995,
+ -0.010172521695494652,
+ -0.1043105199933052,
+ -0.07436321675777435,
+ 0.03893746808171272,
+ 0.07749798148870468,
+ -0.12848053872585297
+ ],
+ [
+ -0.23194119334220886,
+ 0.02223324216902256,
+ 0.09503065794706345,
+ 0.03651803731918335,
+ 0.03210384398698807,
+ 0.07084006071090698,
+ 0.12949901819229126,
+ 0.08622266352176666,
+ 0.06083107367157936,
+ -0.021112516522407532,
+ 0.11472856253385544,
+ 0.02182413451373577,
+ 0.047894056886434555,
+ -0.03157518059015274,
+ -0.3266664743423462,
+ 0.05045453459024429,
+ 0.07629546523094177,
+ -0.010329179465770721,
+ 0.05431155860424042,
+ 0.11045083403587341,
+ -0.46407878398895264,
+ -0.05686293914914131,
+ -0.007122046779841185,
+ 0.06823472678661346,
+ 0.06266732513904572,
+ 0.048078592866659164,
+ 0.1936330646276474,
+ 0.0200031790882349,
+ -0.020903313532471657,
+ 0.09307220578193665,
+ 0.05274999141693115,
+ 0.19260834157466888,
+ -0.13740763068199158,
+ -0.06888734549283981,
+ -0.11812756955623627,
+ -0.3511490821838379,
+ -0.03247915208339691,
+ -0.04806635528802872,
+ -0.014915005303919315,
+ -0.13664229214191437,
+ -0.05732613429427147,
+ -0.01680649444460869,
+ -0.07354304939508438,
+ -0.06927555054426193,
+ -0.0865766629576683,
+ -0.16119498014450073,
+ -0.14710628986358643,
+ 0.10504905134439468,
+ 0.1445237547159195,
+ 0.13133475184440613,
+ -0.19812551140785217,
+ 0.10569991916418076,
+ 0.04979626461863518,
+ -0.04298693314194679,
+ 0.001944013754837215,
+ 0.10887430608272552,
+ 0.11620942503213882,
+ 0.08811014145612717,
+ 0.06621793657541275,
+ 0.10560007393360138,
+ 0.02439979277551174,
+ 0.05429239571094513,
+ -0.18555310368537903,
+ -0.0711669921875,
+ 0.11930855363607407,
+ 0.016111819073557854,
+ -0.017016051337122917,
+ -0.11795993149280548,
+ 0.018993163481354713,
+ 0.008340730331838131,
+ 0.15057677030563354,
+ -0.04989412799477577,
+ 0.0342726930975914,
+ -0.002316840225830674,
+ 0.03589965030550957,
+ -0.2172316163778305,
+ 0.04691608250141144,
+ -0.08149195462465286,
+ -0.17072880268096924,
+ -0.03349434584379196,
+ -0.010138606652617455,
+ -0.10026789456605911,
+ -0.08649274706840515,
+ 0.15808235108852386,
+ -0.07925079017877579,
+ 0.11087116599082947,
+ 0.028199272230267525,
+ 0.1862000674009323,
+ 0.10573423653841019,
+ -0.024707259610295296,
+ -0.04990684986114502,
+ 0.12717404961585999,
+ -0.1824958324432373,
+ 0.16071966290473938,
+ -0.056628912687301636,
+ -0.08178392052650452,
+ -0.04939638078212738,
+ 0.09060322493314743,
+ 0.019238369539380074,
+ 0.13549914956092834,
+ -0.03668870031833649,
+ -0.01356151606887579,
+ -0.010227298364043236,
+ -0.0405622161924839,
+ -0.09244225919246674,
+ 0.07932641357183456,
+ -0.06395259499549866,
+ -0.07755931466817856,
+ -0.020049242302775383,
+ 0.14064288139343262,
+ -0.05962531641125679,
+ -0.08709976822137833,
+ 0.012743543833494186,
+ -0.004799806047230959,
+ -0.1648935228586197,
+ 0.11586228013038635,
+ -0.2497323453426361,
+ -0.2673991918563843,
+ 0.10768316686153412,
+ 0.051774926483631134,
+ -0.13987122476100922,
+ -0.05224622040987015,
+ 0.09690986573696136,
+ 0.24265065789222717,
+ 0.18305596709251404,
+ 0.008408626541495323,
+ 0.029821181669831276,
+ 0.18184328079223633
+ ],
+ [
+ 0.06524014472961426,
+ 0.03542494401335716,
+ -0.023717235773801804,
+ 0.074525848031044,
+ 0.082551971077919,
+ 0.13401426374912262,
+ 0.11827995628118515,
+ 0.004647840745747089,
+ -0.030520129948854446,
+ 0.10916905850172043,
+ -0.0853806659579277,
+ -0.06702870875597,
+ -0.031672872602939606,
+ -0.028118353337049484,
+ 0.10981348156929016,
+ -0.026015369221568108,
+ 0.020694442093372345,
+ -0.045821718871593475,
+ -0.16597825288772583,
+ -0.10307992994785309,
+ -0.12719495594501495,
+ -0.021188272163271904,
+ -0.05058007687330246,
+ -0.07219534367322922,
+ 0.015828397125005722,
+ 0.04573511332273483,
+ -0.05061129108071327,
+ 0.09712455421686172,
+ -0.0346960611641407,
+ -0.03800984472036362,
+ 0.084380604326725,
+ -0.011169150471687317,
+ 0.03385401517152786,
+ -0.10393992066383362,
+ -0.1975974142551422,
+ 0.12237498909235,
+ 0.04829597845673561,
+ 0.039124611765146255,
+ -0.0065456475131213665,
+ 0.012799251824617386,
+ 0.012488883920013905,
+ -0.011260004714131355,
+ 0.11188855767250061,
+ 0.05298624932765961,
+ 0.12003233283758163,
+ 0.04985029995441437,
+ -0.03707883134484291,
+ 0.08285057544708252,
+ 0.025311172008514404,
+ -0.06653886288404465,
+ -0.06367388367652893,
+ 0.05146661773324013,
+ -0.008155238814651966,
+ -0.03916007652878761,
+ 0.052029144018888474,
+ -0.025483082979917526,
+ 0.0013410589890554547,
+ 0.05617273226380348,
+ -0.02646353654563427,
+ 0.09048664569854736,
+ 0.02036181651055813,
+ 0.003363247262313962,
+ 0.11120794713497162,
+ -0.12126263976097107,
+ -0.04787605628371239,
+ 0.028184540569782257,
+ -0.007874956354498863,
+ 0.026851711794734,
+ 0.0806286558508873,
+ -0.0474785678088665,
+ -0.11698351800441742,
+ 0.08319810777902603,
+ 0.04081812500953674,
+ 0.11070805788040161,
+ -0.023195145651698112,
+ 0.14310263097286224,
+ 0.0498601533472538,
+ -0.019457463175058365,
+ 0.0014453897019848228,
+ -0.046539679169654846,
+ -0.0020168565679341555,
+ -0.052405837923288345,
+ 0.030997352674603462,
+ -0.047029558569192886,
+ 0.03183538094162941,
+ 0.10284077376127243,
+ 0.05554753541946411,
+ 0.0530998595058918,
+ 0.06437595188617706,
+ -0.004071675706654787,
+ 0.06491346657276154,
+ 0.028183339163661003,
+ 0.026170790195465088,
+ 0.05512348935008049,
+ 0.09696631133556366,
+ 0.006638756953179836,
+ 0.026820234954357147,
+ -0.03327921777963638,
+ -0.07775981724262238,
+ -0.08585870265960693,
+ 0.09956376999616623,
+ 0.031181177124381065,
+ 0.053810689598321915,
+ 0.11012953519821167,
+ -0.040220435708761215,
+ 0.08790276199579239,
+ 0.0733589306473732,
+ 0.01823059655725956,
+ 0.012245666235685349,
+ -0.030432865023612976,
+ 0.09484956413507462,
+ 0.110826276242733,
+ -0.15462452173233032,
+ 0.059399645775556564,
+ -0.08569499105215073,
+ 0.09312780946493149,
+ -0.051459502428770065,
+ -0.02192225307226181,
+ -0.06574779748916626,
+ 0.10327831655740738,
+ 0.03625495731830597,
+ -0.03052496537566185,
+ -0.007164822891354561,
+ -0.1233021542429924,
+ -0.016860343515872955,
+ 0.04941525682806969,
+ 0.03569978103041649,
+ 0.005020069889724255
+ ],
+ [
+ -0.11164629459381104,
+ 0.15105506777763367,
+ 0.09701869636774063,
+ 0.0810626819729805,
+ 0.12749886512756348,
+ -0.0319955013692379,
+ -0.04619266465306282,
+ -0.04096680507063866,
+ 0.034487299621105194,
+ -0.04204656928777695,
+ -0.19515003263950348,
+ -0.15646955370903015,
+ -0.2914915978908539,
+ -0.05874834209680557,
+ -0.1132689043879509,
+ -0.03598152846097946,
+ 0.2939285337924957,
+ 0.5754775404930115,
+ 0.23100292682647705,
+ -0.10509742051362991,
+ -0.541304349899292,
+ 0.03866291418671608,
+ -0.03214070200920105,
+ -0.20464955270290375,
+ 0.061889104545116425,
+ -0.10301069170236588,
+ -0.124962218105793,
+ -0.06609375774860382,
+ 0.13707496225833893,
+ 0.09277550131082535,
+ 0.08434879779815674,
+ 0.10155724734067917,
+ -0.11806999146938324,
+ -0.07780826836824417,
+ -0.2906869947910309,
+ -0.21161368489265442,
+ 0.0009408799814991653,
+ 0.118462473154068,
+ 0.06649639457464218,
+ -0.0676729679107666,
+ 0.045548100024461746,
+ 0.025043629109859467,
+ -0.31727346777915955,
+ 0.03560110926628113,
+ 0.0801440104842186,
+ -0.29722660779953003,
+ 0.11351663619279861,
+ 0.10988357663154602,
+ -0.05790632218122482,
+ 0.16405612230300903,
+ -0.12696924805641174,
+ -0.027369188144803047,
+ 0.12681254744529724,
+ -0.08794545382261276,
+ 0.09446056932210922,
+ -0.014684640802443027,
+ -0.01649453677237034,
+ 0.07423200458288193,
+ -0.27172020077705383,
+ -0.40296512842178345,
+ 0.01592831499874592,
+ -0.0013568255817517638,
+ -0.06894074380397797,
+ 0.20201167464256287,
+ 0.0751696303486824,
+ -0.018957577645778656,
+ 0.18249477446079254,
+ 0.6739743947982788,
+ -0.11182788014411926,
+ -0.15168242156505585,
+ 0.15883298218250275,
+ -0.23132164776325226,
+ 0.0756797343492508,
+ -0.016765359789133072,
+ -0.16559961438179016,
+ 0.2166551798582077,
+ -0.021698327735066414,
+ -0.04414715990424156,
+ 0.0986928939819336,
+ -0.11694693565368652,
+ -0.2712996006011963,
+ -0.03708009421825409,
+ 0.1996261328458786,
+ 0.011765626259148121,
+ 0.09744807332754135,
+ -0.008408080786466599,
+ 0.05317723751068115,
+ 0.02631121501326561,
+ -0.34671133756637573,
+ -0.05676514655351639,
+ 0.25383031368255615,
+ -0.03342818841338158,
+ -0.9062691330909729,
+ -0.10456361621618271,
+ 0.09077282249927521,
+ -0.05493927001953125,
+ -0.029109127819538116,
+ 0.09489627182483673,
+ 0.17592523992061615,
+ -0.2488584667444229,
+ -0.028514647856354713,
+ -0.07406992465257645,
+ 0.1365910768508911,
+ -0.05706648901104927,
+ -0.14491045475006104,
+ -0.1994006335735321,
+ -0.21311986446380615,
+ 0.01370824221521616,
+ -0.3455093801021576,
+ -0.14846056699752808,
+ -0.16408434510231018,
+ 0.12065283209085464,
+ -0.3558879494667053,
+ -0.14080731570720673,
+ 0.004712911322712898,
+ 0.6059274673461914,
+ -0.0336279459297657,
+ -0.02742130123078823,
+ 0.06461355835199356,
+ 0.17877726256847382,
+ -0.5528210401535034,
+ 0.03950337693095207,
+ 0.19186638295650482,
+ 0.04613344371318817,
+ -0.21826568245887756,
+ -0.18291588127613068,
+ -0.2283824235200882,
+ -0.15731385350227356
+ ],
+ [
+ 0.12980566918849945,
+ -0.010648083873093128,
+ -0.26158350706100464,
+ 0.1521385759115219,
+ 0.06790915876626968,
+ -0.004507440607994795,
+ 0.12591896951198578,
+ 0.042173292487859726,
+ 0.11879072338342667,
+ 0.044531818479299545,
+ -0.34106481075286865,
+ -0.13566194474697113,
+ 0.05440749228000641,
+ -0.4015127718448639,
+ -0.21474748849868774,
+ 0.1313474029302597,
+ -0.42949533462524414,
+ 0.05412033572793007,
+ 0.02274465374648571,
+ 0.07306714355945587,
+ 0.2414691150188446,
+ 0.012267409823834896,
+ -0.01725826971232891,
+ -0.020107785239815712,
+ 0.022303052246570587,
+ -0.004747059661895037,
+ -0.1255103349685669,
+ -0.1674378216266632,
+ -0.029930897057056427,
+ -0.056021083146333694,
+ -0.029717588797211647,
+ 0.01119951717555523,
+ 0.01748896762728691,
+ -0.14886710047721863,
+ -0.13047254085540771,
+ -0.020692838355898857,
+ -0.14935362339019775,
+ -0.03664599359035492,
+ -0.15636709332466125,
+ 0.044494468718767166,
+ 0.2710318863391876,
+ 0.010894453153014183,
+ 0.35111433267593384,
+ -0.009558538906276226,
+ 0.16209878027439117,
+ -0.17432287335395813,
+ -0.2802223563194275,
+ 0.01656157895922661,
+ -0.20723950862884521,
+ 0.10633515566587448,
+ -0.3867756128311157,
+ -0.09485997259616852,
+ 0.16949862241744995,
+ 0.14491471648216248,
+ 0.1620754599571228,
+ -0.05009424686431885,
+ -0.029779210686683655,
+ -0.11953331530094147,
+ 0.010751346126198769,
+ 0.0020671773236244917,
+ -0.01434371992945671,
+ 0.03159945830702782,
+ 0.03339000418782234,
+ 0.016721896827220917,
+ -0.11544930189847946,
+ 0.15678374469280243,
+ -0.32710200548171997,
+ -0.018844982609152794,
+ 0.079367995262146,
+ 0.11593242734670639,
+ -0.10202649980783463,
+ 0.0951942652463913,
+ 0.08367416262626648,
+ -0.014336416497826576,
+ -0.06342708319425583,
+ 0.10386951267719269,
+ -0.10254890471696854,
+ 0.07274951785802841,
+ -0.0034639397636055946,
+ 0.008365362882614136,
+ 0.03845919296145439,
+ 0.08889131993055344,
+ 0.05469471216201782,
+ 0.043139394372701645,
+ 0.16031034290790558,
+ 0.014928297139704227,
+ -0.04077139124274254,
+ -0.06610412895679474,
+ 0.011744723655283451,
+ 0.18740214407444,
+ -0.1798553615808487,
+ 0.011072861962020397,
+ -0.2645839750766754,
+ 0.07310065627098083,
+ 0.07488888502120972,
+ -0.003921852447092533,
+ 0.019502058625221252,
+ 0.1711875945329666,
+ -0.0007777467253617942,
+ -0.08872412145137787,
+ -0.04599153622984886,
+ 0.026223482564091682,
+ -0.04111479967832565,
+ 0.14085891842842102,
+ 0.029653236269950867,
+ 0.03985505551099777,
+ 0.2159292995929718,
+ 0.4454796314239502,
+ 0.16199210286140442,
+ -0.003381438786163926,
+ 0.05938190221786499,
+ 0.03670213371515274,
+ 0.023748282343149185,
+ 0.028455479070544243,
+ 0.023952031508088112,
+ 0.05069076269865036,
+ 0.09028373658657074,
+ 0.005668729543685913,
+ -0.06579168140888214,
+ 0.06033523008227348,
+ 0.08485228568315506,
+ -0.1524336189031601,
+ 0.12803098559379578,
+ -0.044908516108989716,
+ -0.06879984587430954,
+ -0.07449499517679214,
+ 0.0857132151722908,
+ -0.1535177379846573
+ ],
+ [
+ -0.07883087545633316,
+ -0.10804041475057602,
+ 0.1816711574792862,
+ 0.05030537024140358,
+ -0.02058379538357258,
+ 0.028147835284471512,
+ -0.0026933837216347456,
+ -0.09386476874351501,
+ 0.059356946498155594,
+ 0.016371026635169983,
+ 0.1398944854736328,
+ 0.1731071025133133,
+ -0.11059224605560303,
+ 0.11256727576255798,
+ -0.46799972653388977,
+ 0.03961014747619629,
+ 0.15416032075881958,
+ -0.019011976197361946,
+ 0.16369004547595978,
+ 0.01502049807459116,
+ -0.3820514976978302,
+ 0.10203112661838531,
+ 0.046229779720306396,
+ 0.1281808465719223,
+ 0.03812706843018532,
+ -0.06598834693431854,
+ 0.01704377681016922,
+ -0.19543801248073578,
+ 0.02855488657951355,
+ -0.0012100775493308902,
+ 0.07636778801679611,
+ -0.01885504275560379,
+ 0.15408951044082642,
+ 0.05460058152675629,
+ -0.09078076481819153,
+ -0.08731397986412048,
+ -0.0178412776440382,
+ 0.009529132395982742,
+ -0.02196154184639454,
+ 0.05682351067662239,
+ 0.012602673843502998,
+ 0.03788965195417404,
+ -0.1945255994796753,
+ 0.09411356598138809,
+ -0.2128574103116989,
+ -0.15137924253940582,
+ 0.10154969990253448,
+ 0.0039481851272284985,
+ -0.0760086178779602,
+ 0.08458138257265091,
+ 0.15712343156337738,
+ -0.15465262532234192,
+ -0.08671475946903229,
+ -0.1222393661737442,
+ -0.08581878989934921,
+ 0.048469178378582,
+ -0.03092498704791069,
+ 0.120295450091362,
+ 0.019471729174256325,
+ 0.12445582449436188,
+ -0.0002412160101812333,
+ -0.07147208601236343,
+ 0.025575710460543633,
+ -0.03206673264503479,
+ 0.0060219066217541695,
+ 0.010328374803066254,
+ 0.031135231256484985,
+ 0.09292185306549072,
+ 0.06541694700717926,
+ -0.07232216745615005,
+ -0.025525709614157677,
+ 0.1454779952764511,
+ 0.009013992734253407,
+ -0.14307358860969543,
+ 0.11549556255340576,
+ -0.17205211520195007,
+ 0.21330943703651428,
+ -0.01931619830429554,
+ -0.05484173819422722,
+ -0.01539616845548153,
+ -0.0749770924448967,
+ -0.017893634736537933,
+ -0.04368395730853081,
+ 0.04135642945766449,
+ -0.04186986759305,
+ -0.10097698867321014,
+ 0.05810542404651642,
+ 0.10213780403137207,
+ 0.0406399630010128,
+ -0.0025311154313385487,
+ -0.24844668805599213,
+ 0.1340441107749939,
+ -0.31990283727645874,
+ 0.004675612319260836,
+ 0.0164024718105793,
+ -0.00191535335034132,
+ 0.006479678675532341,
+ -0.06633109599351883,
+ 0.15401610732078552,
+ -0.02929462119936943,
+ 0.10599207133054733,
+ 0.12774427235126495,
+ -0.02852899394929409,
+ 0.08546929806470871,
+ -0.08496031910181046,
+ -0.003923008218407631,
+ -0.07987330108880997,
+ -0.21283338963985443,
+ -0.18863262236118317,
+ -0.02976061776280403,
+ -0.022594358772039413,
+ 0.024058399721980095,
+ 0.007697511464357376,
+ 0.01994980126619339,
+ -0.19354231655597687,
+ 0.09053049981594086,
+ -0.3502095341682434,
+ -0.1018480509519577,
+ 0.12027610093355179,
+ -0.02503804676234722,
+ -0.09151419997215271,
+ -0.027944346889853477,
+ 0.010775971226394176,
+ 0.16753730177879333,
+ -0.03857749328017235,
+ 0.10553496330976486,
+ 0.11496828496456146,
+ 0.0340392105281353
+ ],
+ [
+ 0.11624166369438171,
+ -0.01571604236960411,
+ 0.055150873959064484,
+ -0.06317383050918579,
+ -0.08703821152448654,
+ -0.08720247447490692,
+ -0.559186577796936,
+ 0.06004374474287033,
+ 0.1289820820093155,
+ 0.004837502725422382,
+ -0.3999999463558197,
+ -0.515246570110321,
+ 0.4138813316822052,
+ 0.12979130446910858,
+ -0.005172504112124443,
+ 0.0681481882929802,
+ -0.06546269357204437,
+ 0.3748612701892853,
+ 0.28702783584594727,
+ 0.38527384400367737,
+ 0.43039771914482117,
+ -0.011079145595431328,
+ -0.19132556021213531,
+ -0.1232079267501831,
+ -0.02443065494298935,
+ -0.25439900159835815,
+ -0.04770185425877571,
+ 0.1642468124628067,
+ 0.002528670011088252,
+ -0.12973152101039886,
+ 0.16487818956375122,
+ -0.06454241275787354,
+ 0.10422591120004654,
+ -0.07241131365299225,
+ 0.2096889168024063,
+ 0.0955149456858635,
+ -0.10111594945192337,
+ -0.07672996819019318,
+ -0.4653593897819519,
+ -0.032145772129297256,
+ 0.07852419465780258,
+ 0.04060721397399902,
+ 0.019509170204401016,
+ 0.021607957780361176,
+ 0.13177554309368134,
+ -0.16385455429553986,
+ -0.06875932216644287,
+ -0.04431833326816559,
+ 0.04098524525761604,
+ -0.1542675644159317,
+ 0.15816128253936768,
+ -0.3721161484718323,
+ 0.03207479789853096,
+ -0.13583774864673615,
+ 0.17195332050323486,
+ -0.1444127857685089,
+ 0.030313819646835327,
+ 0.2632273733615875,
+ -0.30573147535324097,
+ 0.15116849541664124,
+ -0.15042588114738464,
+ 0.19506770372390747,
+ -0.12220057100057602,
+ 0.03104354254901409,
+ -0.5907121896743774,
+ 0.01538354717195034,
+ -0.08873238414525986,
+ -0.27525201439857483,
+ -0.0860881358385086,
+ 0.13073845207691193,
+ 0.1127089112997055,
+ 0.007789279334247112,
+ -0.8492324948310852,
+ -0.17791880667209625,
+ -0.1550365835428238,
+ 0.011879228055477142,
+ -0.06764309108257294,
+ 0.23961757123470306,
+ 0.37707704305648804,
+ 0.038580797612667084,
+ -0.05314377695322037,
+ -0.17047083377838135,
+ 0.08967919647693634,
+ 0.28448131680488586,
+ 0.41862213611602783,
+ -0.35943540930747986,
+ 0.07687916606664658,
+ 0.3043081760406494,
+ -0.1421555131673813,
+ -0.008262289687991142,
+ 0.21802853047847748,
+ -0.12047397345304489,
+ -0.5514250993728638,
+ -0.24352504312992096,
+ -0.20739121735095978,
+ 0.0384545773267746,
+ 0.30992016196250916,
+ 0.15926837921142578,
+ -0.1042383462190628,
+ -0.32362040877342224,
+ -0.34364497661590576,
+ 0.43160298466682434,
+ 0.09140705317258835,
+ 0.19288015365600586,
+ -1.0271941423416138,
+ -0.2545274496078491,
+ -0.2871151566505432,
+ -0.04322255775332451,
+ 0.0037722319830209017,
+ 0.257635235786438,
+ 0.3313235938549042,
+ -0.011471675708889961,
+ 0.3620432913303375,
+ 0.1522638499736786,
+ 0.3640832304954529,
+ -0.2083352953195572,
+ -0.2241700440645218,
+ 0.01692509651184082,
+ -0.02049091085791588,
+ 0.083431176841259,
+ -0.042351651936769485,
+ -0.08233878761529922,
+ -0.21785210072994232,
+ 0.4199874997138977,
+ 0.006673484109342098,
+ 0.26084187626838684,
+ -0.12582415342330933,
+ -0.045637667179107666
+ ],
+ [
+ -0.09767929464578629,
+ -0.02646580897271633,
+ -0.02548760548233986,
+ -0.37020596861839294,
+ 0.0378107950091362,
+ 0.16748683154582977,
+ 0.1685241311788559,
+ 0.1537238359451294,
+ -0.14425452053546906,
+ 0.2700742185115814,
+ 0.0596657432615757,
+ 0.029250971972942352,
+ -0.25435182452201843,
+ 0.07161706686019897,
+ -0.16305822134017944,
+ 0.2718462347984314,
+ -0.22415445744991302,
+ -0.06677820533514023,
+ 0.056159839034080505,
+ -0.13023880124092102,
+ -0.032388005405664444,
+ -0.08899647742509842,
+ -0.1781005561351776,
+ 0.19714532792568207,
+ -0.2311280220746994,
+ 0.08445937931537628,
+ -0.045824915170669556,
+ -0.0017121504060924053,
+ -0.33260414004325867,
+ 0.04943729564547539,
+ -0.07386311888694763,
+ 0.1724644899368286,
+ -0.08592069149017334,
+ 0.17305625975131989,
+ 0.007955878041684628,
+ -0.09980817139148712,
+ 0.03475431725382805,
+ 0.05254169926047325,
+ 0.03976953402161598,
+ 0.09794768691062927,
+ -0.1415271759033203,
+ 0.19170264899730682,
+ -0.03711928427219391,
+ -0.1178331971168518,
+ -0.3025088906288147,
+ -0.054161231964826584,
+ 0.15518106520175934,
+ 0.04724365472793579,
+ 0.12686321139335632,
+ 0.034326646476984024,
+ 0.0503666028380394,
+ 0.007065047975629568,
+ -0.3584679663181305,
+ 0.046997759491205215,
+ -0.10511962324380875,
+ 0.138271763920784,
+ 0.004238039255142212,
+ 0.0754486471414566,
+ 0.13247737288475037,
+ 0.2191682606935501,
+ -0.031811319291591644,
+ -0.09962992370128632,
+ 0.11258156597614288,
+ -0.23694868385791779,
+ -0.1538933366537094,
+ -0.17110522091388702,
+ 0.0240901131182909,
+ -0.554036021232605,
+ 0.1116071343421936,
+ -0.06416866183280945,
+ 0.10978896915912628,
+ 0.1295633316040039,
+ 0.07489017397165298,
+ -0.03071265108883381,
+ -0.040281910449266434,
+ -0.2966133952140808,
+ 0.06645472347736359,
+ -0.08449490368366241,
+ 0.03005966730415821,
+ -0.06931386888027191,
+ -0.46020254492759705,
+ 0.020355116575956345,
+ -0.08875144273042679,
+ -0.01933923363685608,
+ -0.06929413974285126,
+ 0.005526193417608738,
+ -0.005028835032135248,
+ 0.08662579208612442,
+ -0.044920071959495544,
+ -0.8463559150695801,
+ -0.050016578286886215,
+ 0.5585256814956665,
+ -0.2755867838859558,
+ 0.015931742265820503,
+ -0.07500067353248596,
+ 0.039979442954063416,
+ 0.004177835304290056,
+ -0.39306432008743286,
+ -0.16676579415798187,
+ -0.18732644617557526,
+ -0.000799868896137923,
+ -0.131780207157135,
+ 0.10766572505235672,
+ 0.033867307007312775,
+ -0.01042663212865591,
+ 0.08592263609170914,
+ -0.07332299649715424,
+ -0.02247733250260353,
+ -0.06473665684461594,
+ -0.03810109943151474,
+ -0.09914673119783401,
+ 0.11249876022338867,
+ 0.30195072293281555,
+ 0.018936045467853546,
+ 0.015083040110766888,
+ 0.4338112473487854,
+ -0.14515697956085205,
+ -0.24012601375579834,
+ 0.10155973583459854,
+ -0.04951704666018486,
+ -0.1673204004764557,
+ 0.018459811806678772,
+ -0.10294149070978165,
+ -0.2198963165283203,
+ -0.1505623310804367,
+ 0.0688878670334816,
+ 0.018406838178634644,
+ 0.05594385042786598
+ ],
+ [
+ -0.12746946513652802,
+ 0.024723824113607407,
+ -0.0376197025179863,
+ 0.021044239401817322,
+ 0.0011405112454667687,
+ -0.04892275482416153,
+ 0.003858888288959861,
+ 0.10181489586830139,
+ 0.10485230386257172,
+ -0.03406596556305885,
+ 0.15208466351032257,
+ 0.12345488369464874,
+ 0.060594238340854645,
+ -0.14685428142547607,
+ 0.028292110189795494,
+ -0.1468980610370636,
+ 0.03351476788520813,
+ 0.006978187244385481,
+ 0.2556180953979492,
+ 0.1519002467393875,
+ 0.10329752415418625,
+ 0.06649171561002731,
+ 0.007208199240267277,
+ 0.1388019174337387,
+ -0.01975197345018387,
+ 0.027535369619727135,
+ 0.10498390346765518,
+ 0.06343314796686172,
+ -0.14083239436149597,
+ 0.13760565221309662,
+ 0.013929623179137707,
+ -0.01909775100648403,
+ -0.19026914238929749,
+ 0.02120637334883213,
+ 0.05106830224394798,
+ -0.14571569859981537,
+ -0.11374138295650482,
+ 0.017053967341780663,
+ 0.11531165987253189,
+ -0.010985620319843292,
+ 0.06688769906759262,
+ 0.01022972259670496,
+ 0.038309309631586075,
+ 0.010309632867574692,
+ -0.07820086181163788,
+ -0.038133423775434494,
+ 0.03997375816106796,
+ -0.06989584863185883,
+ 0.13131941854953766,
+ 0.16958771646022797,
+ -0.03026803582906723,
+ 0.04541432484984398,
+ -0.11246780306100845,
+ -0.01870913989841938,
+ 0.09264366328716278,
+ -0.035363294184207916,
+ -0.11365361511707306,
+ 0.03595827519893646,
+ -0.06666871905326843,
+ 0.06897125393152237,
+ -0.09781718254089355,
+ -0.01970064267516136,
+ -0.05191226676106453,
+ -0.0029533582273870707,
+ 0.05745602771639824,
+ -0.0934310182929039,
+ 0.0695151537656784,
+ 0.07759737223386765,
+ -0.08607800304889679,
+ 0.017747079953551292,
+ -0.0304858461022377,
+ 0.04644801840186119,
+ -0.017055166885256767,
+ -0.015288762748241425,
+ 0.021949302405118942,
+ -0.08836259692907333,
+ 0.03136719763278961,
+ -0.11182188987731934,
+ 0.05890974774956703,
+ -0.021940503269433975,
+ 0.0756509080529213,
+ -0.06306964159011841,
+ 0.015943702310323715,
+ 0.16031193733215332,
+ 0.07178078591823578,
+ 0.0294327475130558,
+ -0.02170618437230587,
+ -0.040162473917007446,
+ -0.04722602665424347,
+ -0.042037613689899445,
+ 0.06592158228158951,
+ 0.055321935564279556,
+ -0.041841473430395126,
+ -0.03193536773324013,
+ 0.005528357345610857,
+ 0.07812253385782242,
+ 0.04115033894777298,
+ -0.0454261489212513,
+ 0.11569187790155411,
+ -0.048677898943424225,
+ 0.10013031959533691,
+ -0.054694224148988724,
+ -0.052041396498680115,
+ 0.03838324546813965,
+ 0.07824435830116272,
+ -0.10582361370325089,
+ -0.26646795868873596,
+ -0.1206146627664566,
+ 0.03230404853820801,
+ 0.00307282991707325,
+ -0.008678714744746685,
+ 0.22847716510295868,
+ 0.07282295823097229,
+ 0.06895799189805984,
+ 0.03233928605914116,
+ -0.08143479377031326,
+ -0.07896750420331955,
+ 0.09057149291038513,
+ 0.05636338144540787,
+ 0.10702451318502426,
+ -0.011341196484863758,
+ 0.020170027390122414,
+ 0.05724503844976425,
+ 0.1362958550453186,
+ -0.09090482443571091,
+ 0.005083740688860416,
+ 0.08164390921592712,
+ 0.09439848363399506
+ ],
+ [
+ -0.008619899861514568,
+ 0.02950391359627247,
+ 0.041573114693164825,
+ -0.03377021849155426,
+ -0.22733448445796967,
+ -0.009479114785790443,
+ -0.09811480343341827,
+ 0.09123116731643677,
+ 0.0176051277667284,
+ 0.10825192928314209,
+ 0.14220422506332397,
+ 0.10346661508083344,
+ 0.057383328676223755,
+ -0.09473565965890884,
+ -0.0729885920882225,
+ -0.5289965271949768,
+ 0.017915483564138412,
+ -0.2828711271286011,
+ 0.09230373054742813,
+ 0.08629033714532852,
+ 0.34277230501174927,
+ -0.029111536219716072,
+ -0.32557961344718933,
+ -0.03589485213160515,
+ -0.2188313752412796,
+ -0.0635717585682869,
+ 0.01615806482732296,
+ 0.08041473478078842,
+ 0.11144591122865677,
+ 0.16756732761859894,
+ 0.08115367591381073,
+ 0.03625577688217163,
+ -0.04937059432268143,
+ 0.020722832530736923,
+ 0.007699364330619574,
+ 0.009437430649995804,
+ 0.0009414675878360868,
+ 0.09586779773235321,
+ 0.037508103996515274,
+ -0.0634361132979393,
+ -0.09604517370462418,
+ -0.14146415889263153,
+ -0.08024024963378906,
+ -0.0303496140986681,
+ -0.07836363464593887,
+ -0.21103283762931824,
+ 0.18571089208126068,
+ -0.06084670498967171,
+ 0.14082282781600952,
+ -0.1406082957983017,
+ -0.09961295872926712,
+ 0.0821763277053833,
+ 0.028768833726644516,
+ -0.034922126680612564,
+ -0.010712186805903912,
+ 0.12908026576042175,
+ 0.22368402779102325,
+ 0.10746410489082336,
+ -0.16835224628448486,
+ 0.1845204383134842,
+ 0.03438553959131241,
+ 0.04837709292769432,
+ 0.04383551701903343,
+ 0.0748986005783081,
+ 0.052893031388521194,
+ 0.03615095093846321,
+ 0.015149577520787716,
+ 0.08199726045131683,
+ -0.17325888574123383,
+ -0.19667865335941315,
+ 0.065639927983284,
+ 0.05473312735557556,
+ 0.05926407128572464,
+ -0.10390913486480713,
+ -0.20850573480129242,
+ 0.0373510867357254,
+ 0.005822872743010521,
+ 0.15684835612773895,
+ -0.07239682227373123,
+ -0.1928108185529709,
+ -0.32712528109550476,
+ -0.10599428415298462,
+ 0.08284176886081696,
+ -0.1319519281387329,
+ -0.0751095712184906,
+ 0.0451040156185627,
+ 0.2729843854904175,
+ -0.024619217962026596,
+ -0.012405910529196262,
+ 0.005724112968891859,
+ 0.012200315482914448,
+ 0.4910992681980133,
+ -0.2716349959373474,
+ -0.0014599432470276952,
+ -0.007098309695720673,
+ -0.029435016214847565,
+ 0.041705530136823654,
+ -0.05379387363791466,
+ 0.09218251705169678,
+ -0.027666321024298668,
+ -0.09147574007511139,
+ -0.11111937463283539,
+ -0.2074972540140152,
+ 0.09940126538276672,
+ -0.1570773869752884,
+ -0.09040587395429611,
+ -0.1201348826289177,
+ 0.14941321313381195,
+ -0.19362638890743256,
+ -0.06515025347471237,
+ 0.016433952376246452,
+ -0.04331999272108078,
+ 0.33345547318458557,
+ -0.03530190885066986,
+ 0.13463129103183746,
+ -0.15002213418483734,
+ 0.3075539767742157,
+ 0.09617678076028824,
+ 0.1323065161705017,
+ 0.0900944322347641,
+ -0.0746457502245903,
+ -0.03389609977602959,
+ 0.006052124314010143,
+ 0.18295727670192719,
+ -0.23882946372032166,
+ -0.1359127312898636,
+ 0.0661553218960762,
+ 0.26008161902427673
+ ],
+ [
+ 0.275935560464859,
+ 0.1652606576681137,
+ -0.19000062346458435,
+ 0.15897560119628906,
+ -0.037145063281059265,
+ 0.11762473732233047,
+ -0.1431088149547577,
+ -0.4287289083003998,
+ -0.023353515192866325,
+ 0.0029914032202214003,
+ 0.19956910610198975,
+ -0.355596661567688,
+ -0.12636777758598328,
+ -0.4502655267715454,
+ -0.09180711954832077,
+ 0.010518644005060196,
+ 0.11942804604768753,
+ 0.034093502908945084,
+ 0.2288271188735962,
+ 0.2261287122964859,
+ 0.2871485650539398,
+ -0.1853117048740387,
+ -0.008599755354225636,
+ -0.18058960139751434,
+ 0.060403987765312195,
+ 0.2323015183210373,
+ -0.38637328147888184,
+ -0.11449313908815384,
+ -0.6314042806625366,
+ 0.22713477909564972,
+ -0.3727354407310486,
+ 0.4686967730522156,
+ -0.04629014432430267,
+ -0.019582515582442284,
+ 0.08101990818977356,
+ 0.04716792702674866,
+ -0.11164221167564392,
+ -0.3087153136730194,
+ -0.33557286858558655,
+ 0.006678826175630093,
+ 0.06455597281455994,
+ -0.3527022898197174,
+ -0.2719956040382385,
+ 0.024951523169875145,
+ -0.14401434361934662,
+ -0.13791276514530182,
+ 0.15103012323379517,
+ 0.11955331265926361,
+ 0.1766151785850525,
+ 0.0664343386888504,
+ -1.0029864311218262,
+ 0.04064562916755676,
+ 0.030789313837885857,
+ 0.06264917552471161,
+ 0.10574875771999359,
+ 0.19984391331672668,
+ 0.11182354390621185,
+ 0.24388115108013153,
+ 0.024383431300520897,
+ 0.07221149653196335,
+ -0.03310650959610939,
+ 0.05348244309425354,
+ -0.021915512159466743,
+ 0.1808372586965561,
+ 0.154388889670372,
+ -0.09497803449630737,
+ -0.009944372810423374,
+ 0.013318709097802639,
+ -0.07390138506889343,
+ 0.03921384736895561,
+ 0.100347138941288,
+ 0.08459543436765671,
+ 0.15930426120758057,
+ -0.15386484563350677,
+ 0.14959901571273804,
+ -0.14557719230651855,
+ 0.14275594055652618,
+ -0.2637668251991272,
+ -0.0537969172000885,
+ -0.12310314923524857,
+ -0.026928899809718132,
+ -0.018619541078805923,
+ -0.04153279960155487,
+ 0.09819190204143524,
+ 0.0714327022433281,
+ 0.06667140126228333,
+ 0.04973718523979187,
+ 0.11347902566194534,
+ -0.06612741947174072,
+ 0.3952409029006958,
+ 0.38254809379577637,
+ 0.10156295448541641,
+ 0.08729171752929688,
+ 0.0005177009734325111,
+ -0.06880532205104828,
+ 0.09628837555646896,
+ -0.2572055160999298,
+ 0.07991338521242142,
+ 0.17876414954662323,
+ -0.06502752006053925,
+ -0.05755683779716492,
+ 0.19448959827423096,
+ 0.04040355607867241,
+ -0.3619987666606903,
+ -0.19416801631450653,
+ -0.2359343320131302,
+ -0.34764689207077026,
+ -0.141602024435997,
+ -0.08679439127445221,
+ 0.11009471118450165,
+ -0.03969990834593773,
+ -1.770026445388794,
+ 0.07601990550756454,
+ -0.1249859556555748,
+ -0.0063919867388904095,
+ -0.6881052851676941,
+ -0.032630015164613724,
+ -0.11964694410562515,
+ 0.1878069043159485,
+ -0.5467861890792847,
+ -0.26607340574264526,
+ -0.345798134803772,
+ 0.03436001017689705,
+ 0.009500943124294281,
+ 0.3526684045791626,
+ -0.38263407349586487,
+ -0.03845313563942909,
+ -0.2561958134174347
+ ],
+ [
+ 0.02119838073849678,
+ 0.006122015882283449,
+ -0.19972746074199677,
+ 0.0331338495016098,
+ 0.06285413354635239,
+ 0.19839166104793549,
+ -0.08385197073221207,
+ 0.02966902405023575,
+ 0.03716616332530975,
+ 0.24646444618701935,
+ 0.06929785013198853,
+ 0.06817226111888885,
+ 0.08643137663602829,
+ -0.11162200570106506,
+ -0.14698950946331024,
+ 0.07015752792358398,
+ 0.3245279788970947,
+ 0.05342041328549385,
+ -0.18306873738765717,
+ -0.16903308033943176,
+ -0.04020591825246811,
+ 0.007130536716431379,
+ -0.20360428094863892,
+ 0.13609719276428223,
+ 0.13604092597961426,
+ -0.07449481636285782,
+ -0.2029234915971756,
+ 0.03909219428896904,
+ 0.061778753995895386,
+ -0.022083034738898277,
+ -0.005375449080020189,
+ -0.008014907129108906,
+ 0.0024300767108798027,
+ -0.0035792342387139797,
+ 0.04054637625813484,
+ 0.06398648023605347,
+ -0.18860873579978943,
+ 0.07875309884548187,
+ -0.052270010113716125,
+ 0.0835486352443695,
+ 0.037376563996076584,
+ -0.11308088153600693,
+ 0.328698992729187,
+ 0.11984138935804367,
+ 0.20148572325706482,
+ -0.08167455345392227,
+ 0.019305387511849403,
+ 0.06239515170454979,
+ -0.12433987110853195,
+ 0.1459835022687912,
+ 0.005868660751730204,
+ 0.02645665593445301,
+ 0.10151762515306473,
+ -0.0014670017408207059,
+ 0.12013545632362366,
+ -0.020266445353627205,
+ -0.20025356113910675,
+ -0.018666699528694153,
+ 0.05820460990071297,
+ -0.07696835696697235,
+ -0.07306207716464996,
+ -0.11976257711648941,
+ -0.0647280365228653,
+ 0.00804979633539915,
+ 0.07356103509664536,
+ 0.028761694207787514,
+ -0.35542935132980347,
+ 0.18447689712047577,
+ 0.08331208676099777,
+ 0.10473587363958359,
+ -0.042404115200042725,
+ -0.05478600412607193,
+ -0.07303871959447861,
+ -0.19149042665958405,
+ -0.13379709422588348,
+ -0.10448404401540756,
+ 0.11113845556974411,
+ -0.01602412573993206,
+ 0.06736055016517639,
+ 0.10649147629737854,
+ 0.02224687859416008,
+ 0.06182729825377464,
+ -0.13068877160549164,
+ -0.04639412835240364,
+ 0.11108597368001938,
+ -0.03905295953154564,
+ -0.06113893911242485,
+ -0.030884385108947754,
+ 0.01946406625211239,
+ -0.03005182556807995,
+ 0.45347192883491516,
+ 0.15264509618282318,
+ -0.11278238892555237,
+ 0.14507387578487396,
+ 0.10473841428756714,
+ -0.3255913257598877,
+ 0.14445705711841583,
+ -0.04275968298316002,
+ -0.17154011130332947,
+ -0.06325735151767731,
+ 0.08711835741996765,
+ -0.06514601409435272,
+ 0.047180671244859695,
+ 0.0415475033223629,
+ 0.06802841275930405,
+ 0.10720280557870865,
+ -0.0153557313606143,
+ -0.1618494987487793,
+ 0.06409239768981934,
+ 0.15348462760448456,
+ 0.12096192687749863,
+ 0.12055931240320206,
+ -0.06515578180551529,
+ 0.08273628354072571,
+ -0.0974465161561966,
+ -0.0534808374941349,
+ -0.23102650046348572,
+ -0.010547109879553318,
+ 0.1040920615196228,
+ -0.19188295304775238,
+ -0.02869671955704689,
+ -0.1751348078250885,
+ 0.17289960384368896,
+ -0.00567677291110158,
+ 0.007491199765354395,
+ 0.014689347706735134,
+ -0.1377055048942566,
+ -0.26718634366989136
+ ],
+ [
+ -0.032156433910131454,
+ 0.1121002584695816,
+ 0.07099778950214386,
+ -0.26680290699005127,
+ -0.028496038168668747,
+ -0.03010357730090618,
+ 0.019727807492017746,
+ -0.013099674135446548,
+ -0.1980319619178772,
+ 0.04483691602945328,
+ 0.24775198101997375,
+ -0.16583071649074554,
+ -1.2298603057861328,
+ -0.16207726299762726,
+ 0.044226083904504776,
+ 0.1750195175409317,
+ -0.2546505928039551,
+ -0.05247771739959717,
+ 0.1483478546142578,
+ 0.10165983438491821,
+ 0.08422192186117172,
+ -0.05736769735813141,
+ 0.0764559954404831,
+ -0.07861950993537903,
+ 0.1392192542552948,
+ 0.14048291742801666,
+ 0.0007231808849610388,
+ -0.23195523023605347,
+ -0.4298853278160095,
+ -0.15191100537776947,
+ -0.12717485427856445,
+ 0.1372087001800537,
+ 0.16509756445884705,
+ -0.050060782581567764,
+ 0.06400089710950851,
+ -0.5898275971412659,
+ -0.2345123291015625,
+ -0.1957385241985321,
+ 0.08917835354804993,
+ 0.13834910094738007,
+ -0.08896128833293915,
+ 0.10082324594259262,
+ 0.1733614206314087,
+ 0.07996395975351334,
+ -0.016322122886776924,
+ -0.16024146974086761,
+ -0.2694755792617798,
+ -0.07095825672149658,
+ 0.15098927915096283,
+ 0.1756410002708435,
+ -0.22151359915733337,
+ 0.09296814352273941,
+ -0.13343748450279236,
+ 0.07943455129861832,
+ 0.03684939816594124,
+ 0.17885737121105194,
+ -0.024877041578292847,
+ -0.02647467330098152,
+ -0.06720030307769775,
+ 0.09838120639324188,
+ -0.12644055485725403,
+ 0.04072877764701843,
+ 0.07018515467643738,
+ 0.14387819170951843,
+ -0.08674003183841705,
+ -0.06945402920246124,
+ 0.13108867406845093,
+ -0.1458662450313568,
+ 0.011609703302383423,
+ 0.09273232519626617,
+ 0.17020772397518158,
+ -0.03558893874287605,
+ 0.026508856564760208,
+ -0.031576890498399734,
+ -0.03739458695054054,
+ 0.021177448332309723,
+ -0.029170330613851547,
+ -0.060975439846515656,
+ -0.1097940057516098,
+ -0.10203050076961517,
+ 0.16018156707286835,
+ -0.08754288405179977,
+ 0.008768152445554733,
+ 0.0825934037566185,
+ 0.22969521582126617,
+ 0.07537299394607544,
+ 0.009448202326893806,
+ -0.0251519363373518,
+ -0.06465736776590347,
+ -0.07919053733348846,
+ 0.07797374576330185,
+ 0.13599343597888947,
+ -0.007772950455546379,
+ 0.012574764899909496,
+ 0.01997946761548519,
+ -0.04317529872059822,
+ -0.15461091697216034,
+ 0.003913807682693005,
+ 0.05646957829594612,
+ -0.20896732807159424,
+ -0.013078508898615837,
+ 0.1651305854320526,
+ 0.08759237825870514,
+ 0.190042644739151,
+ -0.2608363628387451,
+ -0.11361437290906906,
+ 0.1781146377325058,
+ -0.1007465049624443,
+ 0.023202743381261826,
+ 0.15325108170509338,
+ 0.06094760447740555,
+ -0.30479925870895386,
+ 0.19822239875793457,
+ -0.06570911407470703,
+ -0.05179695039987564,
+ -0.12916797399520874,
+ 0.018564024940133095,
+ -0.00674356147646904,
+ 0.133587047457695,
+ 0.16908606886863708,
+ -0.0008576909312978387,
+ 0.015966150909662247,
+ 0.006275718566030264,
+ 0.07083070278167725,
+ 0.1428391933441162,
+ 0.04436357691884041,
+ 0.11945687234401703,
+ -0.19663044810295105
+ ],
+ [
+ -0.022856557741761208,
+ 0.04487277567386627,
+ -0.05677424743771553,
+ -0.06255180388689041,
+ -0.02123691327869892,
+ -0.0012819505063816905,
+ -0.04396839439868927,
+ -0.04157068580389023,
+ 0.09559015929698944,
+ -0.12035655975341797,
+ -0.0199015811085701,
+ 0.0275283120572567,
+ 0.09828685969114304,
+ -0.018498536199331284,
+ 0.06405064463615417,
+ 0.049634408205747604,
+ 0.03303837776184082,
+ 0.027570385485887527,
+ 0.1688777506351471,
+ 0.07480121403932571,
+ 0.04290056973695755,
+ -0.04273523390293121,
+ 0.005349800921976566,
+ -0.024258479475975037,
+ 0.04584629088640213,
+ -0.06074584275484085,
+ 0.07113653421401978,
+ -0.008897927589714527,
+ 0.08160443603992462,
+ 0.127738818526268,
+ 0.07444062829017639,
+ -0.04685695841908455,
+ -0.12552885711193085,
+ -0.000905435299500823,
+ 0.05252488702535629,
+ -0.0008776640170253813,
+ 0.00025598154752515256,
+ 0.04184594750404358,
+ 0.05445915833115578,
+ -0.029792984947562218,
+ -0.019995179027318954,
+ 0.020275073125958443,
+ -0.0108407661318779,
+ 0.04892155900597572,
+ -0.033022619783878326,
+ -0.02463371679186821,
+ 0.10228396952152252,
+ 0.05368858575820923,
+ 0.11179719865322113,
+ 0.08611889183521271,
+ -0.04666087031364441,
+ -0.0514596551656723,
+ 0.0202898308634758,
+ -0.13701915740966797,
+ -0.00905620027333498,
+ -0.014576721005141735,
+ 0.00265760556794703,
+ -0.015653185546398163,
+ 0.028510140255093575,
+ -0.00882194098085165,
+ -0.12436816841363907,
+ -0.05838567763566971,
+ -0.008891049772500992,
+ -0.0443514809012413,
+ 0.05052797868847847,
+ 0.06339982897043228,
+ 0.11926479637622833,
+ 0.05656243488192558,
+ 0.0043640779331326485,
+ -0.009952029213309288,
+ 0.06414405256509781,
+ 0.03272782266139984,
+ 0.07020559906959534,
+ -0.05609814077615738,
+ -0.10609102249145508,
+ -0.05953008681535721,
+ 0.10224830359220505,
+ 0.025717739015817642,
+ -0.00024869816843420267,
+ -0.056671902537345886,
+ -0.047084614634513855,
+ 0.06979303807020187,
+ 0.010882535018026829,
+ 0.008338131941854954,
+ -0.0077162026427686214,
+ -0.03440956398844719,
+ -0.00133825046941638,
+ -0.07306027412414551,
+ -0.08648783713579178,
+ 0.0470319502055645,
+ 0.044719040393829346,
+ 0.10532621294260025,
+ -0.10298075526952744,
+ 0.10043300688266754,
+ -0.07484367489814758,
+ 0.07906537503004074,
+ -0.061359304934740067,
+ 0.06187963858246803,
+ -0.008959894068539143,
+ 0.10647768527269363,
+ -0.027124937623739243,
+ -0.07867374271154404,
+ 0.03543009236454964,
+ -0.11053677648305893,
+ 0.038374435156583786,
+ 0.01329584326595068,
+ -0.10386889427900314,
+ -0.06739332526922226,
+ -0.003415660234168172,
+ -0.08784373104572296,
+ -0.07695187628269196,
+ 0.037762489169836044,
+ 0.029262980446219444,
+ -0.01627308316528797,
+ 0.07368969172239304,
+ -0.0014174157986417413,
+ -0.06133376806974411,
+ 0.04289627820253372,
+ 0.03101777844130993,
+ -0.03650839999318123,
+ 0.032930418848991394,
+ 0.013213892467319965,
+ 0.04695914313197136,
+ 0.04289361461997032,
+ -0.027238616719841957,
+ -0.0064278109930455685,
+ -0.026891781017184258,
+ 0.031789012253284454
+ ],
+ [
+ -0.004749776795506477,
+ -5.360155046219006e-05,
+ -0.0027947176713496447,
+ -0.0032766100484877825,
+ -0.0008638365543447435,
+ -0.0009035306866280735,
+ -0.00038527260767295957,
+ 0.001215755706652999,
+ -0.0017604364547878504,
+ 0.0024402840062975883,
+ -0.0004977608332410455,
+ 1.0542900781729259e-05,
+ -3.045215635211207e-07,
+ -2.2582747988053598e-05,
+ -0.0006901302258484066,
+ 7.118785106285941e-06,
+ -2.049406866433401e-09,
+ -0.00041168846655637026,
+ 3.724958341777551e-09,
+ 3.2313307656295365e-06,
+ -2.2463311779574724e-06,
+ 0.005032592918723822,
+ -0.002087303902953863,
+ -0.00029537369846366346,
+ 2.938290526799392e-05,
+ -6.309221589617664e-07,
+ -0.0015364978462457657,
+ -0.0023707877844572067,
+ -0.0012628973927348852,
+ -7.102676136128139e-06,
+ -0.00015057598648127168,
+ -3.30837101500947e-05,
+ -0.00020321470219641924,
+ -0.00014515641669277102,
+ 8.593955863034353e-05,
+ 3.4707920804066816e-06,
+ -0.00045834240154363215,
+ -0.0014739976031705737,
+ 0.0005632165702991188,
+ -2.5197548893629573e-05,
+ -0.0003651680308394134,
+ -0.0015271867159754038,
+ 1.8328381656829151e-06,
+ -0.00024410152400378138,
+ -0.00035790441324934363,
+ -6.62324673612602e-05,
+ -0.00010202339763054624,
+ -0.0010405067587271333,
+ -0.00022129612625576556,
+ 4.61888163272306e-07,
+ 4.5915225200587884e-05,
+ -0.0053244782611727715,
+ 0.00023759211762808263,
+ -1.293276909564156e-06,
+ 2.912622585427016e-05,
+ -0.0008311775745823979,
+ -0.0005812984309159219,
+ -0.0008955416851677,
+ -0.0006573451682925224,
+ -0.000917591736651957,
+ -0.0007255348027683794,
+ -0.001728262985125184,
+ -0.0025877775624394417,
+ 1.959160584874553e-07,
+ -0.00014723208732903004,
+ 0.0006007168558426201,
+ -4.986745352653088e-06,
+ 4.32345335205607e-14,
+ -0.00032041288795880973,
+ -0.0009070870000869036,
+ -0.000769883394241333,
+ -0.00022777530830353498,
+ -0.0013800961896777153,
+ -0.0012436407851055264,
+ -0.0004152007168158889,
+ 0.00025631595053710043,
+ 0.00048309782869182527,
+ 2.1284629838191904e-05,
+ -0.0015570248942822218,
+ 5.9108413552166894e-05,
+ -0.00030266045359894633,
+ 0.00013385791680775583,
+ -0.0007740167784504592,
+ 7.178285886766389e-05,
+ -0.00013858955935575068,
+ -0.00063857133500278,
+ -0.00721492525190115,
+ -0.00040520037873648107,
+ -1.4049944184080232e-05,
+ 0.00087831070413813,
+ -0.0005532990908250213,
+ -0.0006217529298737645,
+ -0.00035008281702175736,
+ -2.3029817384667695e-05,
+ -0.0008767739636823535,
+ -0.00015826871094759554,
+ -0.003996041603386402,
+ -0.0018523423932492733,
+ -0.0001028352344292216,
+ -0.0006587653770111501,
+ -0.002557189203798771,
+ -7.211663614725694e-05,
+ -0.00016773022070992738,
+ -0.00019901136693079025,
+ -0.0002744705998338759,
+ -0.0023915800265967846,
+ 0.0004756658454425633,
+ -0.0004359026497695595,
+ -7.605910650454462e-05,
+ -2.8242680855328217e-05,
+ -0.00043340426054783165,
+ 0.0006144908838905394,
+ 4.494909717323026e-06,
+ -0.0008624817128293216,
+ 0.0011404610704630613,
+ -9.516581485513598e-05,
+ 6.14068703725934e-05,
+ -0.005436489824205637,
+ -0.002297725062817335,
+ -3.649156860774383e-05,
+ 0.00029152812203392386,
+ -0.0003130583500023931,
+ -0.00029568737954832613,
+ -1.4830204619897813e-08,
+ -2.475851488270564e-07,
+ -0.0012207728577777743,
+ -0.0004876990569755435,
+ -0.00011673672997858375
+ ],
+ [
+ -0.0009659687639214098,
+ 0.045937541872262955,
+ -0.030188847333192825,
+ -0.051727816462516785,
+ -0.04918219521641731,
+ -0.019897419959306717,
+ 0.006848420947790146,
+ -0.009278587065637112,
+ 0.027427490800619125,
+ -0.07886139303445816,
+ 0.06559595465660095,
+ 0.06274643540382385,
+ 0.01668153516948223,
+ -0.015285590663552284,
+ -0.00920771062374115,
+ 0.0030949260108172894,
+ 0.00882281269878149,
+ -0.025673357769846916,
+ 0.017734529450535774,
+ -0.0003367047756910324,
+ -0.018354620784521103,
+ 0.02070082351565361,
+ -0.004740834701806307,
+ -0.011495983228087425,
+ -0.01224990002810955,
+ -0.05208698287606239,
+ 0.0790492370724678,
+ 0.04094821587204933,
+ -0.02649003639817238,
+ -0.009379874914884567,
+ 0.029234370216727257,
+ -0.009284519590437412,
+ 0.011224743910133839,
+ 0.050322361290454865,
+ 0.056622836738824844,
+ 0.011170273646712303,
+ -0.009114030748605728,
+ -0.03423908352851868,
+ -0.0027833774220198393,
+ 0.06740715354681015,
+ -0.0718802735209465,
+ 0.03713907673954964,
+ -0.011839720420539379,
+ 0.03924999013543129,
+ -0.04202329367399216,
+ -0.01220724731683731,
+ -0.0021672940347343683,
+ -0.006062021013349295,
+ 0.00022312799410428852,
+ 0.000876422505825758,
+ -0.05139923095703125,
+ 0.06723244488239288,
+ -0.02662120945751667,
+ -0.007329009938985109,
+ 0.05603739246726036,
+ 0.0168553926050663,
+ -0.008066878654062748,
+ 0.009327257052063942,
+ -0.04043477028608322,
+ -0.003708562580868602,
+ -0.09111032634973526,
+ -0.03659063205122948,
+ -0.04575714096426964,
+ -0.026567094027996063,
+ -0.012945499271154404,
+ 0.04821668565273285,
+ 0.11087341606616974,
+ -0.004760699812322855,
+ -0.011431105434894562,
+ -0.0019724073354154825,
+ -0.028743714094161987,
+ -0.09445206820964813,
+ -0.016284234821796417,
+ 0.027125846594572067,
+ -0.05462346598505974,
+ -0.09789221733808517,
+ 0.035306140780448914,
+ 0.03787245228886604,
+ -0.03248464688658714,
+ -0.03321496769785881,
+ 0.012496530078351498,
+ 0.041937947273254395,
+ 0.013050006702542305,
+ 0.01693713106215,
+ -0.07966431230306625,
+ -0.02545466274023056,
+ -0.012346772477030754,
+ 0.007580060977488756,
+ -0.038773342967033386,
+ 0.0003212405426893383,
+ -0.006084801163524389,
+ 0.04436745122075081,
+ -0.06606435030698776,
+ -0.03705325722694397,
+ 0.025862237438559532,
+ -0.002331853611394763,
+ -0.045494552701711655,
+ -0.01780787855386734,
+ 0.007346542552113533,
+ 0.05293174088001251,
+ 0.04766920208930969,
+ 0.00852229818701744,
+ -0.022024234756827354,
+ 0.04152403399348259,
+ 0.012117693200707436,
+ -0.02248343639075756,
+ -0.032710589468479156,
+ -0.012539537623524666,
+ -0.036493271589279175,
+ 0.04236834868788719,
+ 0.01045633852481842,
+ -0.02241237461566925,
+ 0.03259315714240074,
+ -0.030569640919566154,
+ 0.0017610013019293547,
+ -0.05094379186630249,
+ 0.0385771319270134,
+ 0.04215108975768089,
+ -0.00023095292272046208,
+ 0.032588791102170944,
+ 0.029889550060033798,
+ -0.06679310649633408,
+ 0.059742145240306854,
+ 0.007210161071270704,
+ -0.006186027079820633,
+ 0.013310938142240047,
+ 0.04370136931538582,
+ 0.0156700536608696
+ ],
+ [
+ -0.05412008613348007,
+ 0.010381434112787247,
+ 0.021653344854712486,
+ -0.04477553069591522,
+ -0.12003907561302185,
+ -0.09462250769138336,
+ -0.0983566865324974,
+ 0.06516776978969574,
+ -0.04503883421421051,
+ -0.06807953864336014,
+ 0.06831184774637222,
+ 0.12044505774974823,
+ 0.0795726627111435,
+ -0.09406139701604843,
+ -0.2198992669582367,
+ 0.0037924384232610464,
+ 0.13219207525253296,
+ -0.17990969121456146,
+ 0.14013062417507172,
+ 0.06921444088220596,
+ 0.08685183525085449,
+ 0.08346769213676453,
+ -0.05580170080065727,
+ -0.029459748417139053,
+ 0.12348329275846481,
+ -0.13697563111782074,
+ 0.06457316130399704,
+ -0.011059180833399296,
+ -0.060691721737384796,
+ 0.008451825007796288,
+ -0.051496777683496475,
+ 0.01891815848648548,
+ -0.13862761855125427,
+ 0.15652123093605042,
+ 0.13554930686950684,
+ -0.10610471665859222,
+ 0.08807627856731415,
+ 0.05179155617952347,
+ 0.05665804445743561,
+ -0.01573575660586357,
+ 0.005955331493169069,
+ 0.032564926892519,
+ -0.1559731662273407,
+ 0.1065542921423912,
+ -0.06964106112718582,
+ -0.08344428986310959,
+ 0.011269127018749714,
+ 0.15038123726844788,
+ -0.013799088075757027,
+ 0.11423389613628387,
+ -0.1697530746459961,
+ -0.11382301151752472,
+ 0.08237218111753464,
+ 0.03806707635521889,
+ -0.13815540075302124,
+ 0.04390700161457062,
+ 0.13404731452465057,
+ 0.0810299962759018,
+ 0.08329906314611435,
+ 0.08863252401351929,
+ -0.13960127532482147,
+ 0.03546145185828209,
+ 0.025180377066135406,
+ 0.056741438806056976,
+ 0.01410349365323782,
+ 0.02013334445655346,
+ 0.0209128949791193,
+ -0.22141367197036743,
+ 0.11761308461427689,
+ -0.07549607008695602,
+ 0.003845473052933812,
+ -0.1606534868478775,
+ 0.021332761272788048,
+ -0.0760880708694458,
+ 0.029683755710721016,
+ -0.09043291211128235,
+ 0.022210607305169106,
+ 0.056272026151418686,
+ 0.020880049094557762,
+ -0.0040367101319134235,
+ -0.11569046229124069,
+ 0.2571037709712982,
+ -0.09802695363759995,
+ 0.01624787412583828,
+ -0.10170961171388626,
+ 0.03313923999667168,
+ 0.19340597093105316,
+ 0.07979143410921097,
+ -0.054403237998485565,
+ 0.16575725376605988,
+ 0.010035901330411434,
+ -0.0912293940782547,
+ -0.17739517986774445,
+ 0.11435428261756897,
+ 0.012896290048956871,
+ 0.08155736327171326,
+ -0.048506274819374084,
+ 0.017170824110507965,
+ -0.004670025780797005,
+ 0.01886621117591858,
+ 0.061723582446575165,
+ -0.033185217529535294,
+ 0.06486264616250992,
+ 0.04181754216551781,
+ 0.057110343128442764,
+ -0.030568929389119148,
+ -0.12827521562576294,
+ -0.08688687533140182,
+ -0.24250738322734833,
+ 0.04736584052443504,
+ 0.014085025526583195,
+ -0.024027179926633835,
+ 0.12047254294157028,
+ -0.0742117241024971,
+ 0.021231280639767647,
+ 0.09346447885036469,
+ -0.07762507349252701,
+ 0.07382959872484207,
+ 0.03118390403687954,
+ 0.005068227648735046,
+ -0.07262168079614639,
+ -0.20503975450992584,
+ 0.044183146208524704,
+ 0.14974060654640198,
+ -0.0600312240421772,
+ 0.026143640279769897,
+ -0.03869996219873428,
+ 0.035469021648168564
+ ],
+ [
+ 0.0783107802271843,
+ -0.06209395080804825,
+ 0.0775170773267746,
+ 0.052745521068573,
+ -0.05323448404669762,
+ 0.03723796457052231,
+ 0.023208189755678177,
+ -0.046077754348516464,
+ -0.08712354302406311,
+ -0.11231788992881775,
+ 0.12065090984106064,
+ 0.09735070914030075,
+ 0.08098666369915009,
+ 0.0008674478158354759,
+ -0.07813674956560135,
+ -0.08195708692073822,
+ 0.08007963746786118,
+ -0.08599144965410233,
+ -0.12421919405460358,
+ -0.1070384830236435,
+ -0.18375536799430847,
+ 0.026169059798121452,
+ -0.05858877673745155,
+ 0.11871934682130814,
+ 0.027422772720456123,
+ -0.16596676409244537,
+ 0.1185077503323555,
+ -0.2931102216243744,
+ 0.058145955204963684,
+ 0.03627323731780052,
+ 0.13171541690826416,
+ -0.013797903433442116,
+ -0.2606445848941803,
+ -0.07792270183563232,
+ 0.04705105349421501,
+ -0.046407684683799744,
+ 0.07301218062639236,
+ 0.05719660967588425,
+ 0.025195684283971786,
+ -0.021518753841519356,
+ 0.0027664965018630028,
+ -0.03722113370895386,
+ -0.06558717787265778,
+ 0.08700130879878998,
+ 0.05732503905892372,
+ -0.1175960823893547,
+ 0.1751236617565155,
+ 0.11834891885519028,
+ 0.045822467654943466,
+ 0.05800104886293411,
+ 0.06859605759382248,
+ -0.040403950959444046,
+ 0.02516876719892025,
+ -0.3626827895641327,
+ 0.03252297267317772,
+ -0.03225744143128395,
+ 0.08381500840187073,
+ 0.07262907177209854,
+ -0.14457014203071594,
+ 0.051144469529390335,
+ -0.0465659573674202,
+ -0.04613771662116051,
+ 0.007858566008508205,
+ 0.04653696343302727,
+ 0.023363297805190086,
+ 0.04013524949550629,
+ 0.20805996656417847,
+ 0.052848488092422485,
+ -0.023402636870741844,
+ -0.0770229697227478,
+ 0.014178812503814697,
+ -0.030377550050616264,
+ 0.13914506137371063,
+ -0.03710757568478584,
+ -0.01884017139673233,
+ 0.06817333400249481,
+ 0.03372802212834358,
+ -0.15559056401252747,
+ -0.09961248189210892,
+ -0.10863467305898666,
+ -0.2521604895591736,
+ 0.058229681104421616,
+ 0.02746099978685379,
+ -0.1274789720773697,
+ -0.10521097481250763,
+ -0.04122538864612579,
+ 0.0005927450256422162,
+ 0.09356043487787247,
+ -0.005073938053101301,
+ -0.02273348718881607,
+ 0.18530170619487762,
+ 0.01927751488983631,
+ -0.47309115529060364,
+ 0.09965679794549942,
+ -0.09994552284479141,
+ 0.044199664145708084,
+ -0.15941093862056732,
+ 0.07569195330142975,
+ 0.04863956943154335,
+ 0.02459474466741085,
+ 0.04846476390957832,
+ 0.13527025282382965,
+ 0.07478143274784088,
+ 0.11627490073442459,
+ 0.02294449508190155,
+ -0.3537912368774414,
+ -0.06947092711925507,
+ -0.1707899272441864,
+ 0.016928566619753838,
+ 0.11249400675296783,
+ -0.1328856199979782,
+ 0.1875341236591339,
+ 0.1605599969625473,
+ 0.00577149074524641,
+ -0.04612089693546295,
+ 0.160458043217659,
+ 0.10576420277357101,
+ 0.08362124860286713,
+ 0.13664701581001282,
+ -0.03724243864417076,
+ -0.02373570203781128,
+ -0.1694856584072113,
+ 0.09192536026239395,
+ 0.047866176813840866,
+ 0.041556812822818756,
+ -0.21142099797725677,
+ -0.013325473293662071,
+ 0.033590465784072876
+ ],
+ [
+ -0.16974706947803497,
+ -0.013276711106300354,
+ 0.00870585348457098,
+ 0.08049459010362625,
+ 0.008109571412205696,
+ 0.0025743262376636267,
+ -0.029012005776166916,
+ 0.047674939036369324,
+ 0.00548558821901679,
+ -0.17715318500995636,
+ 0.12060627341270447,
+ 0.06666550040245056,
+ 0.43342992663383484,
+ -0.08594294637441635,
+ -0.5472456216812134,
+ -0.025757573544979095,
+ 0.07323829084634781,
+ -0.09105446934700012,
+ 0.37387362122535706,
+ 0.08532585203647614,
+ -0.679141104221344,
+ -0.14288429915905,
+ -0.05902261659502983,
+ 0.01658516190946102,
+ 0.04135235771536827,
+ -0.18881317973136902,
+ 0.06117340177297592,
+ 0.10362137109041214,
+ -0.01725500077009201,
+ 0.08261173218488693,
+ -0.015196184627711773,
+ 0.1715594232082367,
+ -0.50400310754776,
+ 0.31396764516830444,
+ 0.02331027016043663,
+ -0.00996393896639347,
+ -0.0873170718550682,
+ 0.20405033230781555,
+ 0.05743598937988281,
+ 0.006898785475641489,
+ -0.04900485277175903,
+ -0.11970929801464081,
+ -0.09672103822231293,
+ -0.07270237058401108,
+ -0.02925228700041771,
+ -0.2118958681821823,
+ 0.06413758546113968,
+ 0.08792413026094437,
+ -0.040877167135477066,
+ -6.135779403848574e-05,
+ -0.287894606590271,
+ -0.21185548603534698,
+ 0.03082280047237873,
+ -0.13821503520011902,
+ -0.003109552199020982,
+ 0.19534873962402344,
+ 0.1634657233953476,
+ 0.051271893084049225,
+ 0.03925219178199768,
+ 0.03213047981262207,
+ -0.10586637258529663,
+ 0.10121849179267883,
+ 0.00875455979257822,
+ -0.10927174240350723,
+ 0.1436740756034851,
+ 0.13789226114749908,
+ 0.2922316789627075,
+ 0.08311786502599716,
+ -0.08646401017904282,
+ 0.023914018645882607,
+ 0.04494757205247879,
+ -0.031619228422641754,
+ 0.02106788381934166,
+ -0.1977376937866211,
+ -0.049747005105018616,
+ 0.06780429929494858,
+ -0.08405772596597672,
+ -0.13275672495365143,
+ -0.3085252642631531,
+ -0.2482079714536667,
+ -0.30780038237571716,
+ 0.14354628324508667,
+ -0.08113561570644379,
+ 0.10517571866512299,
+ -0.12481875717639923,
+ -0.07294172048568726,
+ -0.0022403753828257322,
+ 0.10069069266319275,
+ -0.0959811806678772,
+ 0.07175649702548981,
+ -0.5910592675209045,
+ -0.02270411141216755,
+ -0.9116727709770203,
+ 0.03462376073002815,
+ -0.28613823652267456,
+ -0.06896331161260605,
+ 0.1170155480504036,
+ 0.0047248732298612595,
+ 0.04108273610472679,
+ -0.03805609419941902,
+ -0.08602793514728546,
+ 0.01743868924677372,
+ 0.026034241542220116,
+ -0.11675702035427094,
+ -0.08064799755811691,
+ -0.026928972452878952,
+ -0.10761459171772003,
+ -0.7605286836624146,
+ -0.46380940079689026,
+ 0.10488393157720566,
+ 0.01561813335865736,
+ 0.21165993809700012,
+ 0.144938662648201,
+ -0.12368196249008179,
+ 0.04582733288407326,
+ 0.23434913158416748,
+ -0.10771222412586212,
+ -0.15288381278514862,
+ 0.11517055332660675,
+ 0.12524695694446564,
+ -0.004074688069522381,
+ -0.14222010970115662,
+ 0.17129836976528168,
+ 0.20149309933185577,
+ -0.26205068826675415,
+ -0.2507866621017456,
+ 0.1013573557138443,
+ -0.20686477422714233
+ ],
+ [
+ 0.08675603568553925,
+ -0.04924555867910385,
+ -0.15757234394550323,
+ 0.031558964401483536,
+ 0.11017536371946335,
+ 0.06146883964538574,
+ 0.19680474698543549,
+ 0.003780987113714218,
+ -0.2885929048061371,
+ 0.03709396719932556,
+ -0.09273272007703781,
+ -0.012492988258600235,
+ 0.2135177105665207,
+ -0.33416685461997986,
+ -0.16756805777549744,
+ 0.17318390309810638,
+ -0.555483877658844,
+ 0.056309666484594345,
+ 0.26585260033607483,
+ 0.08137231320142746,
+ 0.3254030644893646,
+ 0.04905780404806137,
+ -0.0004609464667737484,
+ -0.11070796847343445,
+ 0.054153162986040115,
+ -0.06229635700583458,
+ -0.10936834663152695,
+ 0.15657664835453033,
+ -0.2574399411678314,
+ -0.0327109694480896,
+ -0.10009638965129852,
+ -0.07509712874889374,
+ -0.2651923894882202,
+ -0.4021395444869995,
+ -0.468514621257782,
+ 0.04949710890650749,
+ 0.1837141364812851,
+ -0.2196643203496933,
+ -0.1571110635995865,
+ 0.060903795063495636,
+ 0.025448502972722054,
+ -0.03401053324341774,
+ 0.13747890293598175,
+ -0.08266312628984451,
+ -0.0903635174036026,
+ -0.27135568857192993,
+ -0.15599872171878815,
+ 0.12481475621461868,
+ -0.1620606929063797,
+ 0.05685736984014511,
+ -0.4011027216911316,
+ 0.204836905002594,
+ 0.051946595311164856,
+ 0.12413392961025238,
+ 0.16698716580867767,
+ 0.13195425271987915,
+ -0.06835778802633286,
+ -0.034156180918216705,
+ -0.25071731209754944,
+ -0.021448714658617973,
+ -0.016461357474327087,
+ 0.26151543855667114,
+ 0.07864474505186081,
+ 0.17389187216758728,
+ -0.08629564195871353,
+ 0.15622662007808685,
+ -0.11040123552083969,
+ -0.19204944372177124,
+ 0.05964328721165657,
+ 0.14725792407989502,
+ -0.0252989511936903,
+ 0.007619159296154976,
+ -0.1776377111673355,
+ 0.16713851690292358,
+ -0.3712519109249115,
+ 0.1553904265165329,
+ -0.04910900071263313,
+ -0.17310303449630737,
+ 0.08439517766237259,
+ -0.23322449624538422,
+ 0.02817469649016857,
+ 0.0729636549949646,
+ -0.043519072234630585,
+ -0.14348860085010529,
+ 0.19556428492069244,
+ 0.0017799785127863288,
+ -0.26780086755752563,
+ -0.22917942702770233,
+ -0.22644217312335968,
+ 0.06633588671684265,
+ 0.28340741991996765,
+ -0.23967261612415314,
+ -0.06867237389087677,
+ 0.01884148083627224,
+ -0.11188331991434097,
+ 0.13153158128261566,
+ 0.04652686417102814,
+ 0.18151134252548218,
+ -0.010962572880089283,
+ -0.5159135460853577,
+ -0.03854915872216225,
+ 0.30726757645606995,
+ 0.025458725169301033,
+ 0.21914255619049072,
+ -0.15601128339767456,
+ -0.21966613829135895,
+ -0.18772362172603607,
+ 0.23973922431468964,
+ 0.19637024402618408,
+ -0.009257867000997066,
+ 0.21424467861652374,
+ 0.2042698711156845,
+ 0.25431111454963684,
+ -0.04386188089847565,
+ 0.15342675149440765,
+ -0.023999156430363655,
+ -0.03818193078041077,
+ 0.12436921149492264,
+ 0.11113045364618301,
+ -0.08261441439390182,
+ 5.984990275464952e-05,
+ -0.3166167736053467,
+ 0.32878413796424866,
+ -0.15462122857570648,
+ -0.31561025977134705,
+ 0.03368854150176048,
+ 0.03422364592552185,
+ -0.17395758628845215
+ ],
+ [
+ -0.1079932153224945,
+ -0.058108922094106674,
+ 0.16107238829135895,
+ -0.06802112609148026,
+ -0.08859067410230637,
+ -0.025067681446671486,
+ -0.058310288935899734,
+ 0.13243107497692108,
+ 0.01723628118634224,
+ 0.004805194213986397,
+ 0.03628576546907425,
+ -0.03461208567023277,
+ -0.35326382517814636,
+ 0.204325333237648,
+ -0.13805431127548218,
+ -0.00806991383433342,
+ -0.5502825975418091,
+ -0.07940246164798737,
+ 0.04991210624575615,
+ -0.004542887210845947,
+ -0.44374772906303406,
+ -0.040956441313028336,
+ -0.08269327133893967,
+ 0.08908300846815109,
+ 0.04443015903234482,
+ -0.13246691226959229,
+ 0.10874763131141663,
+ -0.09507060050964355,
+ 0.03444927558302879,
+ -0.0619351789355278,
+ -0.003085497999563813,
+ 0.09234225004911423,
+ -0.15391896665096283,
+ 0.14162443578243256,
+ 0.06882685422897339,
+ -0.33378738164901733,
+ 0.0896821990609169,
+ 0.042083993554115295,
+ 0.14141498506069183,
+ 0.056810759007930756,
+ 0.01242655050009489,
+ 0.047269534319639206,
+ -0.20154079794883728,
+ 0.02460796944797039,
+ -0.0025588159915059805,
+ 0.004870925098657608,
+ -0.024067936465144157,
+ 0.07062233984470367,
+ 0.021638451144099236,
+ 0.04681726172566414,
+ -0.05278048664331436,
+ 0.06918779015541077,
+ -0.11305337399244308,
+ -0.04187703877687454,
+ 0.04821775108575821,
+ -0.14323614537715912,
+ 0.19046659767627716,
+ 0.00012921373127028346,
+ -0.014746185392141342,
+ -0.06877554208040237,
+ -0.009217028506100178,
+ 0.12014289945363998,
+ 0.0770832970738411,
+ 0.09677247703075409,
+ -0.1273730993270874,
+ -0.0675196424126625,
+ 0.12332307547330856,
+ -0.2922936975955963,
+ 0.00500972056761384,
+ 0.058786578476428986,
+ 0.09132737666368484,
+ -0.06598961353302002,
+ 0.12078772485256195,
+ 0.06632108986377716,
+ -0.04037463292479515,
+ -0.010475999675691128,
+ 0.08104552328586578,
+ -0.15024887025356293,
+ -0.15263959765434265,
+ -0.19324056804180145,
+ 0.11844342201948166,
+ -0.05861712992191315,
+ 0.10300588607788086,
+ 0.10088586062192917,
+ 0.1492317020893097,
+ 0.039142362773418427,
+ 0.08330883085727692,
+ -0.02019585482776165,
+ -0.10730573534965515,
+ -0.046750567853450775,
+ 0.32330524921417236,
+ 0.09848538041114807,
+ -0.6992539763450623,
+ -0.07044966518878937,
+ -0.3867523968219757,
+ 0.13274651765823364,
+ -0.3288094997406006,
+ -0.055095214396715164,
+ -0.010446997359395027,
+ -0.24840307235717773,
+ 0.22637607157230377,
+ 0.17327803373336792,
+ 0.11393189430236816,
+ -0.02747414819896221,
+ -0.11980723589658737,
+ -0.11430279165506363,
+ 0.012197989970445633,
+ 0.0505264587700367,
+ -0.014160780236124992,
+ 0.02941620536148548,
+ -0.28946977853775024,
+ 0.47213131189346313,
+ 0.05838055908679962,
+ -0.032171543687582016,
+ -0.49156564474105835,
+ -0.024989230558276176,
+ 0.13208609819412231,
+ 0.0715160220861435,
+ -0.14407067000865936,
+ 0.1823405921459198,
+ 0.022447684779763222,
+ -0.3923014998435974,
+ 0.02583010494709015,
+ 0.32148730754852295,
+ 0.12203289568424225,
+ 0.03533616289496422,
+ -0.04628293588757515,
+ -0.04807164520025253
+ ],
+ [
+ -0.19024065136909485,
+ -0.252533882856369,
+ -0.019715487957000732,
+ 0.047169029712677,
+ -0.057813823223114014,
+ 0.0335092730820179,
+ 0.0036097215488553047,
+ 0.23629534244537354,
+ 0.04145783931016922,
+ 0.015565905719995499,
+ 0.1458183079957962,
+ -0.0402115099132061,
+ 0.1835932433605194,
+ -0.11074043810367584,
+ -0.26481571793556213,
+ -0.08152663707733154,
+ 0.15711240470409393,
+ -0.17441695928573608,
+ -0.05699195712804794,
+ -0.0160861536860466,
+ 0.008906514383852482,
+ 0.14310625195503235,
+ -0.03766690939664841,
+ -0.04292721301317215,
+ 0.15639038383960724,
+ -0.16025248169898987,
+ 0.060089632868766785,
+ -0.16941995918750763,
+ 0.003307783743366599,
+ -0.08539890497922897,
+ -0.09507834911346436,
+ -0.021324526518583298,
+ -0.005308454856276512,
+ 0.23059196770191193,
+ -0.15391209721565247,
+ 0.09060069173574448,
+ 0.04788491502404213,
+ 0.1102127656340599,
+ 0.05092727392911911,
+ -0.13365112245082855,
+ 0.005585954058915377,
+ -0.07319989800453186,
+ 0.08416307717561722,
+ 0.07884838432073593,
+ -0.1797676533460617,
+ 0.030152088031172752,
+ 0.17531463503837585,
+ -0.10311593860387802,
+ 0.12146880477666855,
+ 0.17616918683052063,
+ -0.0594387985765934,
+ -0.07066290825605392,
+ 0.01412491500377655,
+ 0.09983557462692261,
+ -0.06846794486045837,
+ 0.06230270862579346,
+ 0.20361082255840302,
+ -0.0585748590528965,
+ -0.26450350880622864,
+ 0.0445450097322464,
+ -0.16132082045078278,
+ 0.005000120494514704,
+ 0.03272498771548271,
+ 0.029690496623516083,
+ 0.0029387071263045073,
+ -0.03390410542488098,
+ 0.053230274468660355,
+ -0.14193861186504364,
+ 0.020743142813444138,
+ -0.14382445812225342,
+ 0.021842438727617264,
+ -0.10581634938716888,
+ -0.004721806384623051,
+ 0.003347614547237754,
+ -0.07901641726493835,
+ -0.1352909654378891,
+ 0.10122517496347427,
+ -0.26144030690193176,
+ -0.09566234797239304,
+ 0.15630820393562317,
+ 0.0006697386270388961,
+ 0.04405131936073303,
+ 0.1331574022769928,
+ -0.0244685597717762,
+ 0.0126058803871274,
+ 0.03927677869796753,
+ 0.16056929528713226,
+ 0.12790364027023315,
+ 0.026373114436864853,
+ 0.02760746143758297,
+ 0.09701279550790787,
+ 0.0029215740505605936,
+ -0.3708004653453827,
+ 0.09096989035606384,
+ 0.005134083330631256,
+ -0.5552148222923279,
+ 0.10908109694719315,
+ 0.08115455508232117,
+ 0.19338807463645935,
+ -0.2545126676559448,
+ -0.10457564890384674,
+ -0.09614507108926773,
+ 0.024394264444708824,
+ 0.06999236345291138,
+ -0.08052948862314224,
+ -0.33623167872428894,
+ -0.09075400233268738,
+ -0.10139493644237518,
+ -0.21180123090744019,
+ 0.04576632007956505,
+ 0.046867746859788895,
+ 0.1231309026479721,
+ 0.046315208077430725,
+ -0.08899713307619095,
+ 0.024158736690878868,
+ 0.21690280735492706,
+ 0.24213100969791412,
+ -0.004678723402321339,
+ 0.049206893891096115,
+ 0.41365209221839905,
+ -0.029656101018190384,
+ 0.05131585896015167,
+ 0.1078445166349411,
+ 0.22551696002483368,
+ -0.1947326362133026,
+ -0.20488090813159943,
+ 0.0723985806107521,
+ -0.06438877433538437
+ ],
+ [
+ 0.01791493408381939,
+ -0.025942755863070488,
+ 0.09545334428548813,
+ 0.046465128660202026,
+ 0.016201790422201157,
+ 0.04795854911208153,
+ 0.049426041543483734,
+ 0.05556958541274071,
+ 0.11742531508207321,
+ -0.10908105224370956,
+ 0.18711280822753906,
+ 0.033176667988300323,
+ 0.08249927312135696,
+ 0.06045115739107132,
+ 0.07445468753576279,
+ 0.07197996973991394,
+ -0.08960839360952377,
+ 0.07605665922164917,
+ 0.04981362819671631,
+ -0.04324726760387421,
+ -0.003607548540458083,
+ 0.07709771394729614,
+ -0.018393972888588905,
+ 0.08008398115634918,
+ -0.014669940806925297,
+ -0.01782369799911976,
+ -0.03640350326895714,
+ 0.08876810222864151,
+ 0.054390981793403625,
+ 0.008247011341154575,
+ -0.07544739544391632,
+ -0.08353977650403976,
+ 0.07725229859352112,
+ 0.05759109929203987,
+ -0.08736513555049896,
+ -0.19626383483409882,
+ -0.12539047002792358,
+ 0.10644373297691345,
+ -0.10277232527732849,
+ 0.06071652099490166,
+ 0.012111731804907322,
+ 0.07315482944250107,
+ -0.13153834640979767,
+ 0.013529067859053612,
+ -0.19497279822826385,
+ 0.12907059490680695,
+ 0.13801982998847961,
+ 0.06010165810585022,
+ 0.029515668749809265,
+ 0.03725430369377136,
+ -0.012215410359203815,
+ -0.04317757487297058,
+ -0.009204107336699963,
+ 0.006863452028483152,
+ -0.09893722087144852,
+ -0.04463561624288559,
+ 0.09153374284505844,
+ -0.0002521635324228555,
+ 0.03681527078151703,
+ -0.03201797604560852,
+ 0.01717298850417137,
+ -0.027461454272270203,
+ -0.07738136500120163,
+ 0.033871155232191086,
+ 0.13231778144836426,
+ -0.054085202515125275,
+ 0.01540937926620245,
+ -0.19857051968574524,
+ 0.08374720811843872,
+ -0.020926279947161674,
+ 0.08145733177661896,
+ -0.04677482694387436,
+ 0.03541560098528862,
+ 0.09200383722782135,
+ 0.04398716613650322,
+ -0.11131878942251205,
+ 0.05890766903758049,
+ -0.01778149977326393,
+ 0.017070239409804344,
+ -0.1720496416091919,
+ 0.008870814926922321,
+ -0.019129304215312004,
+ -0.07214629650115967,
+ -0.003646161872893572,
+ 0.06006057932972908,
+ 0.10719681531190872,
+ 0.06815898418426514,
+ 0.10359420627355576,
+ -0.13623450696468353,
+ -0.06407197564840317,
+ 0.007115744519978762,
+ 0.00642108591273427,
+ 0.01056867279112339,
+ 0.10550247132778168,
+ 0.01760658249258995,
+ -0.05009228363633156,
+ 0.04645248129963875,
+ -0.08067593723535538,
+ -0.015521382912993431,
+ 0.13890522718429565,
+ 0.006651498842984438,
+ 0.07805135846138,
+ 0.06009603664278984,
+ -0.07019500434398651,
+ -0.012347945012152195,
+ 0.005085631273686886,
+ -0.0323946587741375,
+ -0.03416810557246208,
+ -0.10191236436367035,
+ 0.12254025042057037,
+ -0.02236918918788433,
+ 0.059133131057024,
+ 0.048790909349918365,
+ 0.07976420223712921,
+ -0.10350076109170914,
+ 0.04162734001874924,
+ -0.22263696789741516,
+ 0.03198809549212456,
+ 0.10009842365980148,
+ 0.12853595614433289,
+ -0.0868561714887619,
+ 0.0185559019446373,
+ -0.003401882713660598,
+ 0.1320810467004776,
+ 0.1389266699552536,
+ -0.08731698244810104,
+ 0.002416628645732999,
+ 0.06596992909908295
+ ],
+ [
+ 0.03402885049581528,
+ 0.17184652388095856,
+ -0.0684080496430397,
+ -0.08321606367826462,
+ -0.10243111848831177,
+ -0.016146551817655563,
+ -0.23775449395179749,
+ 0.08948293328285217,
+ -0.02245282754302025,
+ 0.22760383784770966,
+ 0.07137952744960785,
+ -0.00772787444293499,
+ 0.14328080415725708,
+ 0.2795014977455139,
+ -0.026929821819067,
+ -0.016401957720518112,
+ 0.1470419019460678,
+ -0.04003877937793732,
+ -0.021982381120324135,
+ 0.06376465409994125,
+ 0.034196749329566956,
+ -0.034421853721141815,
+ -0.08936117589473724,
+ -0.05335858091711998,
+ -0.11902857571840286,
+ 0.06406857073307037,
+ 0.09919808804988861,
+ 0.11816784739494324,
+ 0.2573908865451813,
+ -0.14958268404006958,
+ -0.048101916909217834,
+ -0.007493417244404554,
+ -0.08915136009454727,
+ 0.07983780652284622,
+ 0.0017997643444687128,
+ 0.06836969405412674,
+ 0.043636504560709,
+ 0.08021841198205948,
+ 0.0690588727593422,
+ -0.09686476737260818,
+ -0.12845516204833984,
+ -0.04548157751560211,
+ -0.045027896761894226,
+ -0.0007180914981290698,
+ 0.1153668463230133,
+ -0.12038947641849518,
+ 0.15076185762882233,
+ 0.0993744507431984,
+ -0.013236787170171738,
+ -0.1732177436351776,
+ 0.015414605848491192,
+ -0.23610834777355194,
+ -0.1269170492887497,
+ 0.06376733630895615,
+ -0.1374727040529251,
+ 0.004723945166915655,
+ 0.029386013746261597,
+ 0.033333923667669296,
+ 0.08234690874814987,
+ 0.13926872611045837,
+ 0.04503564164042473,
+ 0.16013045608997345,
+ -0.20866484940052032,
+ -0.04521014913916588,
+ 0.07477078586816788,
+ -0.3979688584804535,
+ -0.028738820925354958,
+ 0.18040470778942108,
+ -0.06811711192131042,
+ -0.1297680139541626,
+ 0.12433342635631561,
+ -0.4820062220096588,
+ 0.07175249606370926,
+ 0.003000649157911539,
+ 0.041797488927841187,
+ 0.14857541024684906,
+ 0.05472109094262123,
+ -0.025885380804538727,
+ 0.0358748659491539,
+ -0.016018683090806007,
+ -0.08206749707460403,
+ -0.10003101080656052,
+ 0.24121898412704468,
+ 0.06406819820404053,
+ -0.16363966464996338,
+ -0.04091299697756767,
+ 0.06072753667831421,
+ 0.07490544021129608,
+ -0.026494791731238365,
+ -0.40030384063720703,
+ 0.03300757706165314,
+ 0.13088351488113403,
+ 0.06993871927261353,
+ 0.05875615403056145,
+ -0.014963909983634949,
+ 0.06571130454540253,
+ 0.13375288248062134,
+ -0.15387213230133057,
+ 0.0017725001089274883,
+ 0.015218920074403286,
+ 0.041125986725091934,
+ -0.08208359777927399,
+ -0.04627269133925438,
+ -0.005012473091483116,
+ 0.11098652333021164,
+ 0.09685841202735901,
+ -0.17673125863075256,
+ -0.06659920513629913,
+ -0.19631990790367126,
+ 0.0214687529951334,
+ -0.056450530886650085,
+ -0.0054071275517344475,
+ 0.06359260529279709,
+ 0.0256314966827631,
+ -0.08834754675626755,
+ -0.09362724423408508,
+ -0.07478292286396027,
+ -0.11418525129556656,
+ 0.08474377542734146,
+ 0.18872839212417603,
+ -0.08264492452144623,
+ 0.06566280126571655,
+ -0.12940745055675507,
+ 0.019459476694464684,
+ -0.09139396250247955,
+ -0.09026888757944107,
+ 0.246625155210495,
+ 0.07982154190540314
+ ],
+ [
+ -0.05507000535726547,
+ -0.02131926268339157,
+ 0.04944295436143875,
+ -0.03573378175497055,
+ -0.01657203398644924,
+ 0.14195500314235687,
+ 0.21404534578323364,
+ 0.02811877243220806,
+ -0.0576045885682106,
+ 0.15966397523880005,
+ 0.2409980446100235,
+ 0.026132900267839432,
+ 0.3758307993412018,
+ 0.033755313605070114,
+ -0.18917512893676758,
+ 0.20075681805610657,
+ 0.04076554998755455,
+ -0.1220354214310646,
+ -0.1138526126742363,
+ -0.06354916095733643,
+ -0.059131596237421036,
+ -0.01199362613260746,
+ -0.1554720103740692,
+ 0.07684934884309769,
+ -0.07363799959421158,
+ 0.009605887345969677,
+ 0.07168678194284439,
+ -0.2739746868610382,
+ 0.07860474288463593,
+ 0.1279282569885254,
+ -0.0882757157087326,
+ 0.29636430740356445,
+ -0.21375158429145813,
+ 0.26944777369499207,
+ -0.058581311255693436,
+ 0.32430365681648254,
+ -0.07423863559961319,
+ -0.008950176648795605,
+ -0.32775214314460754,
+ 0.09635032713413239,
+ -0.22904905676841736,
+ -0.08342330902814865,
+ 0.049132734537124634,
+ 0.032984450459480286,
+ -0.017277343198657036,
+ -0.08202850818634033,
+ 0.07708396017551422,
+ -0.10757459700107574,
+ 0.09509218484163284,
+ 0.033357180655002594,
+ -0.19157864153385162,
+ 0.15730640292167664,
+ -0.028441214933991432,
+ 0.19777168333530426,
+ 0.023929376155138016,
+ 0.30504804849624634,
+ 0.1002316027879715,
+ -0.01444215141236782,
+ 0.17837172746658325,
+ -0.2999696731567383,
+ -0.22165510058403015,
+ -0.6968523859977722,
+ -0.13073420524597168,
+ -0.13355430960655212,
+ -0.05382949113845825,
+ -0.22527579963207245,
+ 0.0012581351911649108,
+ -0.23846299946308136,
+ -0.015188734978437424,
+ 0.03868040814995766,
+ -0.2551972568035126,
+ -0.06245913729071617,
+ -0.17034785449504852,
+ 0.10582216084003448,
+ -0.10647819936275482,
+ -0.255878746509552,
+ 0.1901082992553711,
+ 0.12736175954341888,
+ -0.11881639063358307,
+ -0.08173978328704834,
+ 0.1352575421333313,
+ -0.10771975666284561,
+ 0.004049294162541628,
+ -0.9885585308074951,
+ -0.021124059334397316,
+ -0.03339037671685219,
+ -0.11345835030078888,
+ -0.05960260331630707,
+ 0.19854438304901123,
+ 0.017005328088998795,
+ 0.2673771381378174,
+ -0.014508014544844627,
+ -0.4334041476249695,
+ -0.39906299114227295,
+ 0.061464689671993256,
+ -0.1496482938528061,
+ -0.1355964094400406,
+ -0.4513859450817108,
+ -0.03250174596905708,
+ -0.1912541687488556,
+ 0.1424100399017334,
+ 0.0781925693154335,
+ -0.09312355518341064,
+ 0.016138849779963493,
+ -0.1684177815914154,
+ 0.08388680964708328,
+ 0.11225790530443192,
+ -0.04652887582778931,
+ -0.1853048950433731,
+ -0.00502705667167902,
+ -0.12878072261810303,
+ 0.32022517919540405,
+ -0.17318204045295715,
+ 0.02135736495256424,
+ 0.08441817760467529,
+ 0.06962086260318756,
+ -0.08189657330513,
+ -0.057970549911260605,
+ 0.2673652470111847,
+ -0.07123631238937378,
+ -0.07232522964477539,
+ 0.011358468793332577,
+ -0.11902695149183273,
+ -0.31605780124664307,
+ 0.04831117019057274,
+ -0.09163043648004532,
+ -0.022405127063393593,
+ 0.08179832249879837
+ ],
+ [
+ -0.05075155943632126,
+ 0.06007346883416176,
+ 0.04109467193484306,
+ 0.053282804787158966,
+ 0.06533806025981903,
+ 0.05562977120280266,
+ -0.05099375173449516,
+ 0.060241568833589554,
+ 0.020855695009231567,
+ -0.09233864396810532,
+ 0.09251739084720612,
+ 0.08472535014152527,
+ 0.09527648985385895,
+ 0.052704520523548126,
+ 0.033505626022815704,
+ -0.06626196205615997,
+ 0.0474107563495636,
+ 0.017282461747527122,
+ -0.011970995925366879,
+ 0.036480773240327835,
+ 0.06753698736429214,
+ 0.06463093310594559,
+ -0.09152448922395706,
+ 0.07208115607500076,
+ 0.05212666094303131,
+ -0.05862032249569893,
+ 0.11908654123544693,
+ 0.0022102773655205965,
+ 0.043653856962919235,
+ 0.06451453268527985,
+ -0.0257997065782547,
+ 0.05256029963493347,
+ -0.06490683555603027,
+ 0.08359035849571228,
+ 0.11670561879873276,
+ -0.04109185189008713,
+ 0.06029554829001427,
+ 0.08626388758420944,
+ 0.03846277296543121,
+ 0.027039479464292526,
+ 0.004472294822335243,
+ -0.06400847434997559,
+ -0.02305387146770954,
+ 0.06068957597017288,
+ -0.08961204439401627,
+ -0.006609043106436729,
+ -0.03764680400490761,
+ -0.03983108326792717,
+ 0.049245286732912064,
+ 0.05488681420683861,
+ -0.05985971540212631,
+ 0.06347443163394928,
+ -0.007649154867976904,
+ 0.041829366236925125,
+ -0.06142677739262581,
+ 0.05242614448070526,
+ 0.04408152028918266,
+ 0.0104526923969388,
+ 0.03687090799212456,
+ -0.07762142270803452,
+ 0.02884487994015217,
+ -0.04635879024863243,
+ -0.07366127520799637,
+ -0.0033723588567227125,
+ 0.01275240071117878,
+ 0.015148023143410683,
+ 0.08099985122680664,
+ 0.03688198700547218,
+ -0.07628071308135986,
+ -0.024569496512413025,
+ -0.032038260251283646,
+ -0.025578701868653297,
+ 0.002566736890003085,
+ 0.08247742801904678,
+ 0.029258985072374344,
+ -0.030174406245350838,
+ 0.021106787025928497,
+ -0.02103414013981819,
+ -0.08780112862586975,
+ -0.04166444018483162,
+ 0.009409008547663689,
+ 0.03348240628838539,
+ -0.10171521455049515,
+ 0.051232412457466125,
+ -0.059736382216215134,
+ 0.0500001460313797,
+ -0.03418341651558876,
+ 0.07528172433376312,
+ 0.027022384107112885,
+ -0.011322054080665112,
+ 0.04829498007893562,
+ 0.0034503985662013292,
+ -0.0356631800532341,
+ 0.05397336930036545,
+ -0.05105278640985489,
+ -0.07796555757522583,
+ 0.031243061646819115,
+ 0.04457807540893555,
+ 0.03978641331195831,
+ 0.016067547723650932,
+ 0.09660463780164719,
+ -0.039868347346782684,
+ -0.014092287980020046,
+ -0.014105375856161118,
+ -0.014528402127325535,
+ -0.05022742599248886,
+ -0.13002842664718628,
+ -0.028510889038443565,
+ -0.004857775289565325,
+ -0.05690135061740875,
+ -0.042781099677085876,
+ 0.0017229042714461684,
+ 0.09719821810722351,
+ -0.08027160912752151,
+ 0.052277177572250366,
+ -0.05458057299256325,
+ 0.0371289886534214,
+ 0.07427956908941269,
+ 0.04087419435381889,
+ 0.04853630065917969,
+ 0.031039929017424583,
+ 0.07483533769845963,
+ 0.05205433443188667,
+ 0.00034488539677113295,
+ -0.03262289986014366,
+ 0.0077996645122766495,
+ -0.07109898328781128,
+ -0.04631292447447777
+ ],
+ [
+ -0.034364085644483566,
+ 0.01366499811410904,
+ -0.050639212131500244,
+ 0.02495812438428402,
+ 0.03625164553523064,
+ -0.19375380873680115,
+ 0.024802280589938164,
+ -0.004905098583549261,
+ 0.05862438306212425,
+ -0.06739203631877899,
+ 0.4541315734386444,
+ -0.14850732684135437,
+ -0.29218003153800964,
+ 0.17652375996112823,
+ 0.16355639696121216,
+ 0.0006983880302868783,
+ -0.5748200416564941,
+ -0.130961075425148,
+ -0.03462770953774452,
+ 0.007168447133153677,
+ 0.04161759093403816,
+ 0.05439426377415657,
+ -0.04206879064440727,
+ 0.021860796958208084,
+ -0.005913739558309317,
+ 0.2500191330909729,
+ -0.07939167320728302,
+ -0.2596276104450226,
+ -0.050456512719392776,
+ -0.32970717549324036,
+ -0.11508201062679291,
+ 0.1354358047246933,
+ 0.1753389537334442,
+ -0.21002636849880219,
+ -0.07071862369775772,
+ 0.12705105543136597,
+ 0.09845433384180069,
+ -0.24003276228904724,
+ -0.9818633198738098,
+ 0.13733619451522827,
+ 0.1237991526722908,
+ 0.08727428317070007,
+ 0.5008524656295776,
+ 0.11503604054450989,
+ -0.08274747431278229,
+ -0.07544020563364029,
+ 0.009651330299675465,
+ -0.015211090445518494,
+ -0.09755361825227737,
+ 0.1361347883939743,
+ -0.02835853025317192,
+ -0.019144834950566292,
+ -0.006387061905115843,
+ 0.16071385145187378,
+ 0.03541707992553711,
+ -0.017365654930472374,
+ -0.011994481086730957,
+ -0.07240567356348038,
+ -0.07341742515563965,
+ 0.0857895165681839,
+ -0.15003702044487,
+ 0.05391468107700348,
+ 0.019032076001167297,
+ 0.0538313202559948,
+ -0.049717579036951065,
+ 0.04513609781861305,
+ -0.28474941849708557,
+ 0.47179755568504333,
+ 0.03661379963159561,
+ 0.06483380496501923,
+ 0.04901105910539627,
+ -0.02619193121790886,
+ 0.028165308758616447,
+ -0.0685148760676384,
+ -0.0031237995717674494,
+ 0.14587272703647614,
+ -0.1276971399784088,
+ -0.22385139763355255,
+ 0.0539671964943409,
+ -0.1270672082901001,
+ 0.04747120663523674,
+ -0.09596765786409378,
+ -0.007317489944398403,
+ -0.024358101189136505,
+ 0.16819700598716736,
+ -0.0407785102725029,
+ 0.06253518909215927,
+ -0.07786669582128525,
+ -0.14297811686992645,
+ -0.07657699286937714,
+ 0.050816453993320465,
+ 0.0432378388941288,
+ -0.2909793257713318,
+ -0.004221203271299601,
+ -0.1737229973077774,
+ 0.019902151077985764,
+ -0.016461418941617012,
+ 0.11222855746746063,
+ -0.010353737510740757,
+ -0.29926440119743347,
+ -0.06961150467395782,
+ 0.029195809736847878,
+ 0.07926090061664581,
+ 0.14165686070919037,
+ -0.09339983016252518,
+ -0.004020492546260357,
+ 0.07114912569522858,
+ -0.24216331541538239,
+ 0.15601202845573425,
+ 0.0038938107900321484,
+ 0.04824419692158699,
+ -0.02217330038547516,
+ 0.1345236450433731,
+ -0.02145131304860115,
+ -0.6536331176757812,
+ -0.32908183336257935,
+ 0.1301077902317047,
+ 0.20210956037044525,
+ -0.3153581917285919,
+ -0.011250759474933147,
+ 0.08730414509773254,
+ -0.06925900280475616,
+ 0.08352179080247879,
+ 0.030913259834051132,
+ 0.14725427329540253,
+ 0.03529774397611618,
+ 0.18357326090335846,
+ -0.24009162187576294
+ ],
+ [
+ -0.05785241723060608,
+ 0.10063207894563675,
+ 0.009645380079746246,
+ 0.09382807463407516,
+ 0.057568032294511795,
+ -0.04681988060474396,
+ -0.2814941108226776,
+ -0.2991574704647064,
+ 0.13419915735721588,
+ -0.19655455648899078,
+ -0.09377829730510712,
+ -0.046257566660642624,
+ 0.03976738080382347,
+ 0.13096971809864044,
+ 0.16601769626140594,
+ 0.22202259302139282,
+ -0.2949269115924835,
+ -0.12465850263834,
+ -0.4231935739517212,
+ -0.006281765177845955,
+ 0.14321166276931763,
+ 0.03367907553911209,
+ -0.1643390953540802,
+ 0.058880969882011414,
+ -0.009653732180595398,
+ -0.23885636031627655,
+ 0.10869532823562622,
+ -0.1949620544910431,
+ -0.022088689729571342,
+ 0.1815725564956665,
+ -0.04105697572231293,
+ 0.23392239212989807,
+ -0.3140588402748108,
+ -0.10523411631584167,
+ 0.09147334098815918,
+ -0.015120396390557289,
+ 0.10563974827528,
+ 0.005437401123344898,
+ 0.0708921030163765,
+ 0.08642204105854034,
+ 0.009408035315573215,
+ 0.032508734613657,
+ -0.10628470778465271,
+ 0.1673254519701004,
+ -0.1441275030374527,
+ -0.9983530640602112,
+ 0.06685927510261536,
+ -0.03895234316587448,
+ -0.030156802386045456,
+ 0.07780111581087112,
+ -0.041675761342048645,
+ 0.08189360052347183,
+ 0.006465703248977661,
+ -0.2882259786128998,
+ -0.1616893857717514,
+ 0.14872929453849792,
+ 0.027775054797530174,
+ -0.10623019933700562,
+ -0.017209434881806374,
+ 0.17870131134986877,
+ -0.03869114816188812,
+ -0.3410245180130005,
+ -0.030567819252610207,
+ 0.06180263310670853,
+ -0.05928216874599457,
+ -0.28897756338119507,
+ 0.2604711651802063,
+ 0.1580100953578949,
+ 0.17353583872318268,
+ -0.2424541562795639,
+ -0.20194730162620544,
+ 0.032669782638549805,
+ 0.06093314290046692,
+ -0.010068221017718315,
+ -0.051924776285886765,
+ -0.3538822829723358,
+ 0.2700287103652954,
+ -0.21148258447647095,
+ -0.012954628095030785,
+ -0.18607397377490997,
+ -0.09839504212141037,
+ -0.1803533136844635,
+ -0.17657765746116638,
+ 0.21982517838478088,
+ 0.09631680697202682,
+ -0.28538814187049866,
+ 0.04010291025042534,
+ -0.40274733304977417,
+ -0.16290006041526794,
+ -0.07956428825855255,
+ 0.6290508508682251,
+ -0.07114563137292862,
+ -0.2360440343618393,
+ -0.7841418981552124,
+ -0.2129071056842804,
+ -0.05691816285252571,
+ -0.044528305530548096,
+ 0.09897283464670181,
+ -0.22227083146572113,
+ -0.059639859944581985,
+ 0.03645295277237892,
+ 0.3975054621696472,
+ -0.024859732016921043,
+ 0.12806645035743713,
+ -0.05103042349219322,
+ -0.05628630891442299,
+ -0.3426257371902466,
+ -0.00939891766756773,
+ 0.042580682784318924,
+ -0.09265851974487305,
+ 0.07650777697563171,
+ 0.049619149416685104,
+ 0.2958213686943054,
+ 0.011523501016199589,
+ -0.07654157280921936,
+ -0.636650562286377,
+ -0.00765631441026926,
+ 0.051264118403196335,
+ 0.026328522711992264,
+ -0.13748876750469208,
+ -0.09978058934211731,
+ -0.07052633911371231,
+ 0.12946857511997223,
+ 0.007580659817904234,
+ 0.31295689940452576,
+ 0.3850337266921997,
+ 0.1715293824672699,
+ 0.2588191032409668
+ ],
+ [
+ -0.03500312194228172,
+ -0.11029358953237534,
+ 0.058573901653289795,
+ 0.014679742977023125,
+ 0.03801311179995537,
+ -0.08058583736419678,
+ -0.33443590998649597,
+ -0.07363328337669373,
+ -0.11673133075237274,
+ -0.015089466236531734,
+ 0.11915460228919983,
+ -0.19552305340766907,
+ -0.0018842731369659305,
+ -0.2225828617811203,
+ -0.04368438944220543,
+ -0.18539972603321075,
+ -0.009713297709822655,
+ 0.004975649528205395,
+ -0.03727368637919426,
+ 0.023286867886781693,
+ -0.1565008908510208,
+ -0.011285142041742802,
+ -0.2231624871492386,
+ -0.08160023391246796,
+ -0.023162836208939552,
+ -0.08662538975477219,
+ 0.10125204175710678,
+ 0.13266779482364655,
+ 0.021796584129333496,
+ 0.08525101095438004,
+ 0.07079177349805832,
+ 0.22965413331985474,
+ 0.08301083743572235,
+ 0.07257188111543655,
+ -0.02253502607345581,
+ 0.08336064964532852,
+ 0.19950313866138458,
+ 0.0030744136311113834,
+ -0.2167322039604187,
+ 0.10524797439575195,
+ -0.08689101040363312,
+ 0.07861118018627167,
+ 0.1435534507036209,
+ -0.013694120571017265,
+ -0.15481656789779663,
+ -0.5166780948638916,
+ 0.12849117815494537,
+ 0.11689741909503937,
+ -0.6834136843681335,
+ -0.04960346221923828,
+ 0.009049243293702602,
+ -0.26923486590385437,
+ 0.05041193217039108,
+ -0.02689318172633648,
+ 0.10265225917100906,
+ -0.15087932348251343,
+ -0.15728215873241425,
+ -0.009680625982582569,
+ -0.11187408864498138,
+ -0.38680702447891235,
+ 0.03635323420166969,
+ 0.19670069217681885,
+ 0.18773691356182098,
+ 0.28645437955856323,
+ 0.2015988826751709,
+ -0.24749761819839478,
+ -0.566813051700592,
+ -0.012071026489138603,
+ -0.021162858232855797,
+ 0.11551038175821304,
+ 0.056844159960746765,
+ -0.04833778366446495,
+ 0.051523033529520035,
+ 0.061391036957502365,
+ 0.09329529851675034,
+ -0.528886079788208,
+ -0.10218077898025513,
+ -0.010639429092407227,
+ -0.07837643474340439,
+ 0.12088513374328613,
+ 0.014652717858552933,
+ -0.03144022449851036,
+ -0.012989030219614506,
+ 0.1701495349407196,
+ -0.4619208574295044,
+ -0.020544061437249184,
+ 0.05315040796995163,
+ 0.16402943432331085,
+ -0.05258168280124664,
+ -0.2616097629070282,
+ 0.14146070182323456,
+ 0.24581041932106018,
+ -0.31169936060905457,
+ 0.3033657371997833,
+ -0.10853741317987442,
+ 0.05876293405890465,
+ 0.22122496366500854,
+ -0.17194312810897827,
+ -0.24239954352378845,
+ 0.11911101639270782,
+ -0.11921755969524384,
+ -0.13346531987190247,
+ -0.14232701063156128,
+ 0.27124354243278503,
+ -0.40329116582870483,
+ -0.02210230939090252,
+ -0.11382360011339188,
+ 0.12426042556762695,
+ -0.34048137068748474,
+ 0.10911496728658676,
+ 0.08892162144184113,
+ 0.0016809850931167603,
+ -0.006928650662302971,
+ 0.03486957028508186,
+ -0.3684970736503601,
+ -0.23897820711135864,
+ -0.6507090926170349,
+ -0.08072611689567566,
+ -0.025833817198872566,
+ 0.08556969463825226,
+ 0.18245169520378113,
+ -0.23255300521850586,
+ -0.1756393164396286,
+ 0.0038658350240439177,
+ 0.1164507195353508,
+ -0.18601351976394653,
+ 0.079983651638031,
+ 0.07902306318283081
+ ],
+ [
+ 0.04744051396846771,
+ 0.3501811623573303,
+ 0.016084585338830948,
+ -0.12134507298469543,
+ -0.06107659265398979,
+ -0.019069593399763107,
+ 0.06098470464348793,
+ -0.09800015389919281,
+ -0.23486611247062683,
+ 0.04954270273447037,
+ -0.13560539484024048,
+ -0.3029384911060333,
+ 0.18619607388973236,
+ 0.16791419684886932,
+ -0.2335570901632309,
+ -0.2640669047832489,
+ 0.19209930300712585,
+ -0.31711190938949585,
+ 0.0033899808768182993,
+ -0.9375644326210022,
+ -0.1390312910079956,
+ 0.08762377500534058,
+ 0.05409293621778488,
+ -0.08712887018918991,
+ -0.27749741077423096,
+ -0.21618731319904327,
+ -0.22798122465610504,
+ -0.042443595826625824,
+ -0.49589747190475464,
+ -0.4583521783351898,
+ -0.1777624487876892,
+ -0.413225919008255,
+ -0.01658625900745392,
+ -0.15268462896347046,
+ 0.21356235444545746,
+ 0.4105224311351776,
+ 0.057944849133491516,
+ -0.015789460390806198,
+ 0.05805232748389244,
+ 0.01964305154979229,
+ 0.04913802072405815,
+ -0.10555639863014221,
+ -0.2441979944705963,
+ -0.024102000519633293,
+ 0.4596140384674072,
+ 0.009997056797146797,
+ 0.33381029963493347,
+ -0.11775051802396774,
+ 0.13603340089321136,
+ 0.5409362316131592,
+ -0.3091731667518616,
+ -0.04616522416472435,
+ -0.06289330869913101,
+ -0.10406564176082611,
+ 0.028147879987955093,
+ 0.0236998051404953,
+ 0.3681204915046692,
+ 0.17072725296020508,
+ -0.14778293669223785,
+ -0.344341903924942,
+ -0.03936358168721199,
+ -0.2473531812429428,
+ 0.11310060322284698,
+ -0.613621175289154,
+ 0.019861998036503792,
+ 0.35305482149124146,
+ 0.18740513920783997,
+ -0.702521026134491,
+ 0.08046234399080276,
+ -0.10790092498064041,
+ 0.10652562975883484,
+ -0.12191914767026901,
+ -0.08506406843662262,
+ -0.1280076652765274,
+ -0.09068406373262405,
+ 0.08132967352867126,
+ -0.22058457136154175,
+ 0.19185470044612885,
+ 0.07505033165216446,
+ -0.012269659899175167,
+ 0.1336406171321869,
+ 0.11552256345748901,
+ -0.10077863931655884,
+ 0.04646674171090126,
+ 0.10620252043008804,
+ 0.01826818287372589,
+ -0.2421698272228241,
+ 0.037228140980005264,
+ 0.07485733926296234,
+ -0.0035711568780243397,
+ 0.08291175216436386,
+ 0.15031857788562775,
+ -0.06429225951433182,
+ 0.14790476858615875,
+ -0.018214279785752296,
+ -0.47439906001091003,
+ -0.017914751544594765,
+ 0.2692652642726898,
+ 0.1402575820684433,
+ 0.03970937803387642,
+ 0.15560896694660187,
+ -0.3744448721408844,
+ 0.003873751498758793,
+ 0.07473213970661163,
+ -0.13146282732486725,
+ 0.038064904510974884,
+ 0.1531292200088501,
+ -0.10464932024478912,
+ 0.19341252744197845,
+ -0.3296719193458557,
+ -0.1406797468662262,
+ -0.15250054001808167,
+ 0.09428688883781433,
+ -0.019406825304031372,
+ -0.061579588800668716,
+ 0.056586526334285736,
+ 0.03924350067973137,
+ -0.5412783026695251,
+ -0.2921083867549896,
+ 0.4318559467792511,
+ 0.05303330719470978,
+ -0.21462926268577576,
+ -0.2415643334388733,
+ -0.3421584665775299,
+ -0.08560625463724136,
+ -0.011194444261491299,
+ -0.34886765480041504,
+ 0.07568749040365219
+ ],
+ [
+ 0.008060253225266933,
+ 0.05988208204507828,
+ -0.0013654726790264249,
+ 0.003013470908626914,
+ -0.2575582265853882,
+ -0.04816637188196182,
+ 0.1732870191335678,
+ 0.05960530415177345,
+ 0.015651829540729523,
+ -0.0640391856431961,
+ -0.22270606458187103,
+ -0.12955482304096222,
+ 0.04919688403606415,
+ 0.06474018096923828,
+ 0.042336441576480865,
+ 0.039161317050457,
+ 0.10421798378229141,
+ 0.2790203094482422,
+ 0.21959391236305237,
+ 0.6378502249717712,
+ -0.0898100808262825,
+ 0.005358349531888962,
+ -0.10286261886358261,
+ -0.01699739322066307,
+ 0.1471143364906311,
+ -0.11436440050601959,
+ 0.026341823861002922,
+ 0.06510856002569199,
+ 0.1601673662662506,
+ 0.031657010316848755,
+ 0.016646092757582664,
+ 0.181640625,
+ 0.11736728996038437,
+ -0.021263377740979195,
+ -0.15383924543857574,
+ -0.2691207230091095,
+ 0.011040529236197472,
+ 0.05587590113282204,
+ -0.09700872749090195,
+ 0.27181166410446167,
+ 0.0019587641581892967,
+ -0.022556912153959274,
+ -0.3491414189338684,
+ -0.22165030241012573,
+ 0.057059094309806824,
+ -0.18389983475208282,
+ -0.03395810350775719,
+ -0.15415963530540466,
+ -0.2874647378921509,
+ 0.0835510715842247,
+ 0.1143430769443512,
+ 0.08022210001945496,
+ 0.04676882550120354,
+ 0.06359831988811493,
+ -0.1185191422700882,
+ 0.029990950599312782,
+ -0.005116136744618416,
+ 0.02068069763481617,
+ -0.1840038299560547,
+ 0.176298588514328,
+ -0.24522428214550018,
+ 0.03290135785937309,
+ -0.317613810300827,
+ 0.031289223581552505,
+ 0.13962461054325104,
+ -0.013756575994193554,
+ 0.030770571902394295,
+ -0.08911740779876709,
+ -0.012970815412700176,
+ -0.01519605703651905,
+ -0.0057386127300560474,
+ 0.04031286761164665,
+ -0.13666634261608124,
+ 0.06901378184556961,
+ -0.37476232647895813,
+ 0.05644898861646652,
+ 0.08669921010732651,
+ -0.10550033301115036,
+ -0.06645208597183228,
+ 0.025189977139234543,
+ -0.027945224195718765,
+ 0.08571132272481918,
+ -0.09880457073450089,
+ 0.011575276963412762,
+ -0.3854926526546478,
+ -0.36543604731559753,
+ -0.023380184546113014,
+ 0.24693846702575684,
+ -0.007882521487772465,
+ 0.037850890308618546,
+ -0.10896891355514526,
+ 0.11888999491930008,
+ -0.3500766456127167,
+ 0.07734168320894241,
+ -0.007458634674549103,
+ -0.05164363980293274,
+ -0.06706497073173523,
+ -0.5805925130844116,
+ -0.1763964146375656,
+ -0.07913561165332794,
+ 0.03218692168593407,
+ -0.07781650871038437,
+ -0.25672265887260437,
+ 0.21471354365348816,
+ 0.28738072514533997,
+ -0.00545237772166729,
+ 0.05537362024188042,
+ 0.07160620391368866,
+ -0.03422999754548073,
+ -0.20350764691829681,
+ 0.14728330075740814,
+ 0.020241010934114456,
+ -0.4721711575984955,
+ 0.035242244601249695,
+ 0.10296231508255005,
+ 0.37980589270591736,
+ 0.035042062401771545,
+ 0.014317094348371029,
+ 0.13781072199344635,
+ -0.0637299194931984,
+ -0.17858773469924927,
+ 0.15325239300727844,
+ -0.5329996347427368,
+ 0.15490716695785522,
+ 0.2627120018005371,
+ -0.02690720558166504,
+ -0.18768227100372314,
+ 0.1807984858751297
+ ],
+ [
+ -0.11069995909929276,
+ -0.0361710749566555,
+ -0.05023827776312828,
+ -0.11715874075889587,
+ 0.006298726890236139,
+ 0.06394832581281662,
+ -0.07114605605602264,
+ 0.04748836159706116,
+ -0.03151697292923927,
+ 0.4037519097328186,
+ 0.07973339408636093,
+ -0.07463320344686508,
+ 0.13119105994701385,
+ 0.10082056373357773,
+ -0.022978443652391434,
+ 0.13820843398571014,
+ 0.08049740642309189,
+ -0.006477805785834789,
+ 0.08643132448196411,
+ 0.11766654253005981,
+ 0.0637887567281723,
+ -0.12851934134960175,
+ 0.11493454873561859,
+ -0.31300845742225647,
+ 0.0530414804816246,
+ 0.033691659569740295,
+ -0.22755147516727448,
+ -0.008600138127803802,
+ -0.10520932823419571,
+ -0.16335712373256683,
+ -0.029736001044511795,
+ 0.19327537715435028,
+ -0.21595466136932373,
+ -0.02394651062786579,
+ 0.04072326049208641,
+ -0.19098258018493652,
+ 0.0352352038025856,
+ 0.049644578248262405,
+ 0.07671507447957993,
+ -0.055751193314790726,
+ -0.3795986771583557,
+ 0.12021838873624802,
+ -0.12458398938179016,
+ 0.016724998131394386,
+ -0.2290058434009552,
+ -0.11339280009269714,
+ -0.002168697537854314,
+ -0.01945374347269535,
+ -0.07510098069906235,
+ -0.10881152749061584,
+ -0.09698985517024994,
+ -0.0821429193019867,
+ -0.024197060614824295,
+ 0.016772348433732986,
+ -0.16653260588645935,
+ 0.1247415840625763,
+ -0.016146106645464897,
+ -0.010790119878947735,
+ 0.20532923936843872,
+ 0.21497324109077454,
+ 0.05237189307808876,
+ -0.24924395978450775,
+ -0.19208846986293793,
+ 0.07718594372272491,
+ 0.04791101813316345,
+ 0.33555424213409424,
+ -0.034399282187223434,
+ 0.1015062928199768,
+ -0.135126531124115,
+ -0.11011108011007309,
+ 0.05888548120856285,
+ 0.14566509425640106,
+ -0.0346771739423275,
+ 0.0819680467247963,
+ 0.03055502474308014,
+ -0.00713674072176218,
+ 0.0984339639544487,
+ -0.07809858024120331,
+ 0.0003933811385650188,
+ -0.007449776399880648,
+ 0.05727580189704895,
+ 0.14825616776943207,
+ -0.6510351896286011,
+ -0.01617405191063881,
+ -0.11186500638723373,
+ 0.015037063509225845,
+ 0.09380999952554703,
+ 0.05348784849047661,
+ -0.07382088154554367,
+ 0.1783403903245926,
+ 0.032999929040670395,
+ 0.0039691682904958725,
+ -0.0038469270803034306,
+ -0.22246809303760529,
+ 0.0575171522796154,
+ -0.045170124620199203,
+ 0.006224551238119602,
+ -0.11150231212377548,
+ -0.06002156063914299,
+ -0.09353010356426239,
+ -0.15149933099746704,
+ -0.23994587361812592,
+ -0.06334011256694794,
+ 0.06319431215524673,
+ -0.11241863667964935,
+ 0.02395869977772236,
+ 0.3657398819923401,
+ -0.04065369814634323,
+ -0.11754345148801804,
+ 0.17338091135025024,
+ -0.0568859837949276,
+ 0.05827471986413002,
+ 0.09721074998378754,
+ -0.13025976717472076,
+ 0.10374946892261505,
+ 0.4384205937385559,
+ -0.03487764298915863,
+ -0.03445944935083389,
+ 0.08922462910413742,
+ 0.0035328706726431847,
+ 0.06022754684090614,
+ 0.1041577085852623,
+ -0.05793899670243263,
+ 0.06821019947528839,
+ -0.08021565526723862,
+ 0.045155275613069534,
+ -0.4623643755912781,
+ -0.04474380239844322
+ ],
+ [
+ 0.09019472450017929,
+ -0.01584523543715477,
+ -0.0823553130030632,
+ -0.07583436369895935,
+ 0.005524053703993559,
+ -0.04324500262737274,
+ 0.03214110806584358,
+ -0.04296056181192398,
+ -0.04444437474012375,
+ -0.16958926618099213,
+ 0.06742851436138153,
+ 0.09212705492973328,
+ 0.07566104829311371,
+ -0.1028389111161232,
+ 0.10844631493091583,
+ -0.06225913017988205,
+ -0.06552150100469589,
+ -0.34070682525634766,
+ 0.029548844322562218,
+ 0.13618813455104828,
+ 0.1861131340265274,
+ -0.017207447439432144,
+ -0.1894988715648651,
+ 0.009387781843543053,
+ -0.06112179532647133,
+ -0.08514562994241714,
+ 0.1318208873271942,
+ 0.008560947142541409,
+ 0.13941338658332825,
+ 0.12381214648485184,
+ 0.14116498827934265,
+ -0.32244759798049927,
+ -0.22140157222747803,
+ -0.02758917398750782,
+ 0.1092623844742775,
+ -0.11741430312395096,
+ -0.027313441038131714,
+ 0.14570213854312897,
+ 0.014553910121321678,
+ -0.011813564226031303,
+ 0.10577317327260971,
+ -0.03657934442162514,
+ -0.12064201384782791,
+ 0.1254260390996933,
+ -0.24406656622886658,
+ -0.1361042559146881,
+ 0.15975819528102875,
+ -0.24544507265090942,
+ 0.09915439039468765,
+ 0.023997463285923004,
+ 0.019991682842373848,
+ 0.12410097569227219,
+ -0.05489063635468483,
+ -0.06096179783344269,
+ -0.026923412457108498,
+ 0.046569451689720154,
+ -0.029221873730421066,
+ 0.15861906111240387,
+ -0.07817312330007553,
+ 0.015204569324851036,
+ -0.23029068112373352,
+ 0.12302616238594055,
+ -0.09459497779607773,
+ 0.029163779690861702,
+ 0.054196301847696304,
+ 0.07156804203987122,
+ 0.08272919058799744,
+ -0.10209823399782181,
+ 0.06663566827774048,
+ 0.06485863775014877,
+ -0.037604253739118576,
+ -0.046474065631628036,
+ -0.0028736810199916363,
+ 0.04942545294761658,
+ -0.07913847267627716,
+ 0.04599349945783615,
+ 0.11606284230947495,
+ -0.05313688516616821,
+ 0.024331675842404366,
+ -0.12469855695962906,
+ 0.10146526992321014,
+ 0.11884273588657379,
+ -0.17550964653491974,
+ -3.1381605367641896e-05,
+ 0.002040270483121276,
+ -0.03323400765657425,
+ 0.11809074133634567,
+ 0.09043652564287186,
+ -0.011575785465538502,
+ 0.1427130401134491,
+ 0.16791509091854095,
+ -0.05635606870055199,
+ -0.39032429456710815,
+ 0.1435529887676239,
+ -0.097979836165905,
+ -0.2738165557384491,
+ -0.1712430864572525,
+ 0.026801003143191338,
+ 0.02471931464970112,
+ -0.05322689935564995,
+ 0.1033157929778099,
+ 0.04486861452460289,
+ -0.05226697400212288,
+ 0.11500038206577301,
+ 0.043725986033678055,
+ -0.1764233112335205,
+ -0.19012592732906342,
+ -0.13764843344688416,
+ -0.3133106231689453,
+ -0.008518649265170097,
+ -0.0777585357427597,
+ 0.17646904289722443,
+ 0.14687032997608185,
+ -0.09803684800863266,
+ 0.08861979842185974,
+ 0.09559087455272675,
+ 0.3461950421333313,
+ 0.06764566898345947,
+ 0.0806322693824768,
+ 0.05198058858513832,
+ -0.04391499608755112,
+ -0.08683855831623077,
+ -0.025047991424798965,
+ 0.16992712020874023,
+ -0.3815115690231323,
+ -0.14546774327754974,
+ -0.004296218045055866,
+ -0.21258191764354706
+ ],
+ [
+ 0.07700692862272263,
+ 0.362967848777771,
+ 0.037658873945474625,
+ 0.0919339582324028,
+ 0.09182237088680267,
+ 0.03532266616821289,
+ -0.14692038297653198,
+ -0.27524110674858093,
+ -0.03426111489534378,
+ -0.22764326632022858,
+ -0.07577305287122726,
+ 0.13078393042087555,
+ -0.38927850127220154,
+ 0.01637921668589115,
+ 0.13312627375125885,
+ 0.2689998745918274,
+ -0.008082779124379158,
+ -0.184591144323349,
+ -0.09901832789182663,
+ 0.32574328780174255,
+ -0.1569225937128067,
+ -0.09810412675142288,
+ 0.0529470220208168,
+ -0.09569448977708817,
+ 0.0325014665722847,
+ -0.02157684788107872,
+ 0.012269697152078152,
+ 0.006447982974350452,
+ 0.1318628042936325,
+ 0.09955150634050369,
+ 0.104733407497406,
+ -0.1557747721672058,
+ 0.14787371456623077,
+ -0.11121635138988495,
+ 0.30065950751304626,
+ -0.03753340244293213,
+ 0.10796582698822021,
+ 0.04024107754230499,
+ 0.03620349243283272,
+ 0.0020574594382196665,
+ 0.088230662047863,
+ -0.04680425673723221,
+ -0.13738657534122467,
+ 0.12510453164577484,
+ 0.02170502208173275,
+ 0.10886172950267792,
+ 0.12985041737556458,
+ 0.010413152165710926,
+ -0.14913801848888397,
+ 0.0025767115876078606,
+ -0.05778643861413002,
+ 0.05178946629166603,
+ 0.06382680684328079,
+ 0.0368037186563015,
+ -0.12735480070114136,
+ -0.008801484480500221,
+ -0.06999295949935913,
+ 0.09571041911840439,
+ 0.06604178249835968,
+ 0.1366422325372696,
+ -0.09479035437107086,
+ -0.15079167485237122,
+ -0.2791488468647003,
+ 0.17681241035461426,
+ -0.11943936347961426,
+ 0.12223619222640991,
+ 0.0598648302257061,
+ 0.3608716130256653,
+ 0.041329920291900635,
+ -0.05831841006875038,
+ -0.0397334098815918,
+ 0.13715441524982452,
+ -0.0741693302989006,
+ 0.16515474021434784,
+ 0.08594008535146713,
+ -0.06003338471055031,
+ 0.07296983152627945,
+ 0.015117044560611248,
+ -0.018771087750792503,
+ 0.08844926953315735,
+ 0.006341609638184309,
+ 0.10250641405582428,
+ 0.03865562006831169,
+ 0.04381156340241432,
+ -0.23889409005641937,
+ -0.07095803320407867,
+ 0.19262228906154633,
+ -0.20135721564292908,
+ 0.004646706394851208,
+ 0.2518692910671234,
+ 0.005224279593676329,
+ -0.010860745795071125,
+ -0.13003754615783691,
+ 0.03218717500567436,
+ 0.05152931064367294,
+ 0.012877043336629868,
+ -0.29062163829803467,
+ -0.19444923102855682,
+ -0.2987559139728546,
+ 0.1600905805826187,
+ -0.012921495363116264,
+ 0.002897716360166669,
+ -0.060245633125305176,
+ 0.12232869863510132,
+ 0.08183345198631287,
+ -0.057950105518102646,
+ -0.029539527371525764,
+ 0.20980355143547058,
+ 0.0006047409842722118,
+ -0.015367820858955383,
+ -0.11384140700101852,
+ 0.03260524570941925,
+ 0.2585211992263794,
+ 0.017726579681038857,
+ 0.1078614592552185,
+ -0.4565546214580536,
+ 0.04262514039874077,
+ 0.12797331809997559,
+ 0.05106595531105995,
+ -0.1423257440328598,
+ 0.0029127895832061768,
+ 0.03996835649013519,
+ -0.017228877171874046,
+ -0.1539647877216339,
+ 0.07608885318040848,
+ -0.1613522469997406,
+ -0.17343954741954803,
+ 0.0684589222073555
+ ],
+ [
+ -0.4555928707122803,
+ -0.03857779502868652,
+ -0.0338260680437088,
+ -0.028421912342309952,
+ -0.15463918447494507,
+ 0.009381053037941456,
+ -0.3342217206954956,
+ 0.10372021049261093,
+ -0.05657382309436798,
+ -0.028352094814181328,
+ -0.3685641884803772,
+ -0.25119027495384216,
+ 0.18288768827915192,
+ -0.007007717154920101,
+ 0.03491612896323204,
+ 0.02223595418035984,
+ 0.056111935526132584,
+ 0.048045702278614044,
+ 0.015422199852764606,
+ -0.3294396698474884,
+ -0.6259031891822815,
+ 0.13333939015865326,
+ -0.1190742552280426,
+ 0.0735064148902893,
+ -0.06638183444738388,
+ 0.023278165608644485,
+ 0.13946741819381714,
+ 0.08310502022504807,
+ -0.054623737931251526,
+ -0.4734610915184021,
+ -0.2697869837284088,
+ -0.1830895096063614,
+ 0.03143030032515526,
+ -0.11463603377342224,
+ -0.03707747161388397,
+ 0.16919586062431335,
+ 0.11740085482597351,
+ 0.028525397181510925,
+ -0.11406080424785614,
+ -0.30353981256484985,
+ 0.04995578154921532,
+ 0.14487838745117188,
+ 0.10259928554296494,
+ 0.06881336122751236,
+ 0.0775798037648201,
+ 0.10065710544586182,
+ -0.125356987118721,
+ -0.03245577588677406,
+ -0.06819174438714981,
+ -0.1470710039138794,
+ 0.03730865940451622,
+ -0.09006353467702866,
+ 0.021707510575652122,
+ 0.038076866418123245,
+ -0.0038729910738766193,
+ 0.03094407171010971,
+ -0.023129940032958984,
+ 0.12174216657876968,
+ -0.03536384925246239,
+ -0.04608716815710068,
+ -0.12768273055553436,
+ 0.17003260552883148,
+ 0.17700687050819397,
+ 0.27759116888046265,
+ -0.18433189392089844,
+ -0.5560452938079834,
+ 0.20588411390781403,
+ 0.07144249975681305,
+ 0.020802507176995277,
+ 0.1210118904709816,
+ 0.01882963627576828,
+ -0.19240494072437286,
+ 0.19744153320789337,
+ -0.04764750599861145,
+ -0.05234755948185921,
+ 0.42689597606658936,
+ -0.05883520841598511,
+ -0.07991089671850204,
+ 0.07526478916406631,
+ 0.03213942423462868,
+ 0.12761227786540985,
+ 0.13374973833560944,
+ -0.04362761601805687,
+ -0.021113382652401924,
+ -0.02114981599152088,
+ -0.04849012941122055,
+ -0.03374556452035904,
+ -0.23703891038894653,
+ 0.06574226170778275,
+ -0.12947668135166168,
+ -0.030203619971871376,
+ -0.006273951381444931,
+ -0.004531534854322672,
+ -0.012808607891201973,
+ -9.947730723069981e-05,
+ -0.13016155362129211,
+ -0.09106133133172989,
+ 0.011237537488341331,
+ -0.08298385143280029,
+ 0.016452113166451454,
+ -0.05583765730261803,
+ 0.11382216960191727,
+ -0.07412587851285934,
+ 0.022424286231398582,
+ 0.10804887115955353,
+ 0.06762203574180603,
+ -0.24973170459270477,
+ -0.014700664207339287,
+ 0.1319582313299179,
+ 0.025003384798765182,
+ -0.19519846141338348,
+ -0.03925691545009613,
+ 0.1835165023803711,
+ -0.16844400763511658,
+ -0.14131464064121246,
+ -1.9416025876998901,
+ 0.10302198678255081,
+ 0.2774777114391327,
+ -0.12134549021720886,
+ 0.08280422538518906,
+ -0.1514057219028473,
+ 0.18511226773262024,
+ 0.18247590959072113,
+ 0.12227306514978409,
+ 0.3694884181022644,
+ 0.07677261531352997,
+ 0.27845844626426697,
+ -0.019107036292552948
+ ],
+ [
+ 0.0570477657020092,
+ 0.02580777369439602,
+ -0.027045562863349915,
+ -0.3938111364841461,
+ -0.12496328353881836,
+ -0.005740193650126457,
+ -0.36344215273857117,
+ 0.24376553297042847,
+ 0.10221818089485168,
+ 0.00819211732596159,
+ -0.10368043184280396,
+ 0.1426512897014618,
+ 0.44817373156547546,
+ 0.03963415324687958,
+ 0.04962139204144478,
+ -0.13696862757205963,
+ -0.3246763050556183,
+ 0.09797266870737076,
+ 0.08890107274055481,
+ 0.0786423310637474,
+ 0.09095216542482376,
+ 0.31812459230422974,
+ -0.3281908333301544,
+ -0.30132195353507996,
+ 0.076666921377182,
+ -0.3348168432712555,
+ -0.13213732838630676,
+ -0.08620228618383408,
+ 0.5397965312004089,
+ -0.1883048415184021,
+ -0.12734763324260712,
+ -0.016609156504273415,
+ 0.02075969986617565,
+ 0.22663933038711548,
+ -0.3172050714492798,
+ -0.43840011954307556,
+ -0.1671704649925232,
+ 0.30818164348602295,
+ 0.19551801681518555,
+ -0.07075397670269012,
+ -0.6091893911361694,
+ 0.04267750307917595,
+ -0.1238492950797081,
+ -0.290554940700531,
+ 0.32172349095344543,
+ -0.018335087224841118,
+ 0.0718098059296608,
+ -0.018623746931552887,
+ 0.20343279838562012,
+ -0.17332495748996735,
+ -0.37087494134902954,
+ 0.032574836164712906,
+ -0.18469935655593872,
+ 0.06060893088579178,
+ 0.007792746648192406,
+ -0.02293357253074646,
+ -0.02857653982937336,
+ 0.010247007943689823,
+ -0.2822771966457367,
+ -0.3528403341770172,
+ 0.06564489006996155,
+ -0.6833745241165161,
+ 0.12093828618526459,
+ -0.24923212826251984,
+ 0.014938391745090485,
+ -0.14017713069915771,
+ -0.016300195828080177,
+ -0.24036595225334167,
+ -0.03851170837879181,
+ -0.1761503666639328,
+ 0.06860928982496262,
+ 0.0672663003206253,
+ -0.004755143076181412,
+ -0.004657530691474676,
+ -0.2684628665447235,
+ -0.19284537434577942,
+ 0.04050600156188011,
+ -0.29997357726097107,
+ 0.06807784736156464,
+ 0.0753079205751419,
+ -0.14991848170757294,
+ 0.27532365918159485,
+ 0.049833036959171295,
+ 0.29846087098121643,
+ 0.09443292021751404,
+ 0.11916235089302063,
+ 0.0853794738650322,
+ -0.16858069598674774,
+ -0.007355846464633942,
+ -0.017552129924297333,
+ -0.03511343523859978,
+ -0.16823948919773102,
+ -0.6627655029296875,
+ 0.11420208215713501,
+ -0.05470462888479233,
+ 0.03870198875665665,
+ -0.3663022816181183,
+ 0.3550664782524109,
+ 0.2918487787246704,
+ 0.22520728409290314,
+ 0.1341996192932129,
+ -0.11122198402881622,
+ -0.012851831503212452,
+ -0.2627066969871521,
+ -0.10199342668056488,
+ -0.11768098175525665,
+ -0.3489589989185333,
+ -0.006385158747434616,
+ 0.1747308373451233,
+ -0.15219472348690033,
+ 0.41335341334342957,
+ -0.11679571866989136,
+ -0.11973913013935089,
+ 0.12023627758026123,
+ 0.06902012974023819,
+ 0.2533632814884186,
+ -0.14335007965564728,
+ -0.6772888898849487,
+ -0.13706187903881073,
+ -0.15908710658550262,
+ 0.06809552758932114,
+ 0.21025623381137848,
+ -0.24327750504016876,
+ 0.2716046869754791,
+ 0.04970308765769005,
+ 0.039718978106975555,
+ -0.3893130421638489,
+ -0.2832285463809967
+ ],
+ [
+ -0.07558222860097885,
+ 0.006723813712596893,
+ 0.023517411202192307,
+ -0.01663401909172535,
+ 0.009884004481136799,
+ -0.0345214419066906,
+ -0.014434866607189178,
+ 0.08104366064071655,
+ 0.11513692140579224,
+ 0.011845191940665245,
+ 0.10644713789224625,
+ -0.10059388726949692,
+ -0.0013881268678233027,
+ 0.03635132685303688,
+ 0.13399481773376465,
+ 0.03583725541830063,
+ 0.09599944204092026,
+ -0.011792699806392193,
+ 0.20306260883808136,
+ -0.08006599545478821,
+ -0.10591718554496765,
+ 0.03839271515607834,
+ -0.1344800889492035,
+ 0.07541996985673904,
+ 0.19879339635372162,
+ -0.009614686481654644,
+ -0.006225500255823135,
+ -0.08185599744319916,
+ 0.009963863529264927,
+ 0.060309890657663345,
+ 0.07306483387947083,
+ 0.07053721696138382,
+ -0.44253814220428467,
+ 0.03675201162695885,
+ -0.007057767827063799,
+ -0.3239661157131195,
+ 0.0885327085852623,
+ 0.187168687582016,
+ -0.0917423740029335,
+ -0.07572264969348907,
+ 0.032630279660224915,
+ -0.09048868715763092,
+ 0.014637559652328491,
+ -0.020168974995613098,
+ -0.11486317217350006,
+ -0.29941606521606445,
+ -0.06866921484470367,
+ 0.03329930827021599,
+ 0.1143377348780632,
+ 0.011615258641541004,
+ -0.1292702853679657,
+ -0.18587277829647064,
+ 0.06681372970342636,
+ -0.018505943939089775,
+ 0.012830864638090134,
+ 0.10734078288078308,
+ 0.011985646560788155,
+ 0.06725069135427475,
+ 0.11573486030101776,
+ -0.04502275586128235,
+ 0.014525610953569412,
+ -0.09427444636821747,
+ -0.008256297558546066,
+ -0.030384888872504234,
+ 0.01906091906130314,
+ 0.1276632696390152,
+ 0.11930136382579803,
+ -0.015630263835191727,
+ 0.08832965046167374,
+ -0.06598871946334839,
+ 0.0797785222530365,
+ -0.0821489542722702,
+ 0.11018653213977814,
+ 0.015655633062124252,
+ -0.058477360755205154,
+ -0.019628318026661873,
+ 0.05653474107384682,
+ 0.019071504473686218,
+ -0.044273052364587784,
+ 0.006489504594355822,
+ -0.09654926508665085,
+ 0.10203201323747635,
+ -0.035749100148677826,
+ -0.07216256111860275,
+ -0.008805365301668644,
+ 0.10112869739532471,
+ 0.02296634018421173,
+ -0.010583718307316303,
+ -0.04380735382437706,
+ -0.008884803391993046,
+ -0.18332038819789886,
+ 0.10686099529266357,
+ -0.09588604420423508,
+ 0.08822908997535706,
+ -0.043758559972047806,
+ -0.037908557802438736,
+ -0.03904839977622032,
+ 0.07938092201948166,
+ -0.02105756290256977,
+ 0.13244135677814484,
+ 0.10143657773733139,
+ -0.10154028236865997,
+ 0.024699339643120766,
+ -0.008070564828813076,
+ -0.04247472062706947,
+ -0.03536387160420418,
+ -0.011009926907718182,
+ -0.06588172912597656,
+ -0.09244298189878464,
+ 0.01887907274067402,
+ -0.14008377492427826,
+ 0.05023614317178726,
+ 0.04619153216481209,
+ -0.056905340403318405,
+ -0.012789773754775524,
+ 0.05880126357078552,
+ 0.007525037974119186,
+ -0.07670587301254272,
+ 0.06436154246330261,
+ -0.010502236895263195,
+ -0.07690519094467163,
+ -0.07466233521699905,
+ 0.1372014582157135,
+ 0.11761488020420074,
+ -0.011373582296073437,
+ -0.0011860583908855915,
+ -0.010885713621973991,
+ -0.1659897118806839
+ ],
+ [
+ -0.06940096616744995,
+ -0.17101828753948212,
+ -0.1365196257829666,
+ -0.5359589457511902,
+ 0.0035101971589028835,
+ -0.32338643074035645,
+ -0.0028992046136409044,
+ -0.4929232895374298,
+ -0.051545292139053345,
+ 0.12274091690778732,
+ 0.12362087517976761,
+ 0.06940197199583054,
+ 0.01618785224854946,
+ 0.17607545852661133,
+ 0.19521698355674744,
+ -0.08301877230405807,
+ 0.30363303422927856,
+ -0.23456966876983643,
+ 0.23502959311008453,
+ 0.06785297393798828,
+ 0.018351225182414055,
+ 0.0029580360278487206,
+ 0.009887988679111004,
+ -0.13547582924365997,
+ -0.31451380252838135,
+ 0.11923503875732422,
+ -0.11990857124328613,
+ -0.009594987146556377,
+ 0.05963154509663582,
+ -0.09855768829584122,
+ 0.25284260511398315,
+ 0.13296480476856232,
+ -0.17616748809814453,
+ 0.08547444641590118,
+ -0.018636619672179222,
+ -0.003272861009463668,
+ -0.012520909309387207,
+ 0.11271005123853683,
+ -0.0015575947472825646,
+ 0.0287784431129694,
+ -0.20700107514858246,
+ -0.04870426654815674,
+ 0.13390932977199554,
+ 0.11894164234399796,
+ -0.011908152140676975,
+ -0.09465628862380981,
+ 0.09135694056749344,
+ -0.01485937274992466,
+ -0.005657576024532318,
+ 0.12360452115535736,
+ -0.1002417802810669,
+ -0.4311646819114685,
+ -0.024340860545635223,
+ -0.04418100416660309,
+ 0.06588611751794815,
+ -0.49956372380256653,
+ -0.25284457206726074,
+ 0.029253046959638596,
+ 0.02947372943162918,
+ -0.5961841940879822,
+ -0.0917447879910469,
+ 0.3095843195915222,
+ -0.013903687708079815,
+ 0.029768135398626328,
+ -0.048705197870731354,
+ -0.29907041788101196,
+ 0.21262812614440918,
+ 0.13538594543933868,
+ 0.007508663460612297,
+ 0.19134335219860077,
+ 0.17261554300785065,
+ -0.05424884706735611,
+ -0.21821443736553192,
+ -0.04494252800941467,
+ 0.03894960880279541,
+ -0.021166464313864708,
+ -0.18331748247146606,
+ 0.021135590970516205,
+ -0.034343551844358444,
+ -0.010908463038504124,
+ -0.2805461585521698,
+ 0.23111887276172638,
+ 0.6385664939880371,
+ 0.09066811203956604,
+ -0.19490426778793335,
+ -0.4323098659515381,
+ 0.14100602269172668,
+ 0.017653843387961388,
+ -0.2232057899236679,
+ -0.3629726469516754,
+ -0.07811284065246582,
+ -0.32620784640312195,
+ -0.21479575335979462,
+ -0.053145330399274826,
+ 0.16462266445159912,
+ -0.350886732339859,
+ -0.8266401886940002,
+ -0.11285221576690674,
+ -0.3422500491142273,
+ -0.07900942862033844,
+ 0.08357035368680954,
+ -0.5361188650131226,
+ -0.07456646114587784,
+ -0.1060861125588417,
+ -0.04974236339330673,
+ -0.16316840052604675,
+ 0.3063100576400757,
+ -0.08602432161569595,
+ -0.43071404099464417,
+ 0.07197558134794235,
+ 0.3050892651081085,
+ 0.11921555548906326,
+ 0.14531128108501434,
+ -0.05980633944272995,
+ 0.08422769606113434,
+ 0.14766906201839447,
+ 0.13894858956336975,
+ 0.12595485150814056,
+ 0.10061817616224289,
+ 0.49659088253974915,
+ -0.0019406821811571717,
+ -0.060929350554943085,
+ 0.04502672329545021,
+ 0.21883413195610046,
+ 0.16355019807815552,
+ -0.048710405826568604,
+ 0.016856729984283447,
+ -0.061476755887269974
+ ],
+ [
+ 0.10016962885856628,
+ -0.010274588130414486,
+ 0.05182357877492905,
+ 0.06956535577774048,
+ -0.0173965934664011,
+ -0.011244586668908596,
+ 0.06379945576190948,
+ 0.052551429718732834,
+ 0.06531822681427002,
+ 0.04006089270114899,
+ -0.10019068419933319,
+ 0.002959904260933399,
+ 0.12074568122625351,
+ -0.007632292341440916,
+ 0.022090667858719826,
+ 0.11650747805833817,
+ 0.006939641200006008,
+ -0.08818849176168442,
+ 0.0108944745734334,
+ -0.06506664305925369,
+ 0.013764986768364906,
+ 0.005276576150208712,
+ -0.08876977860927582,
+ 0.041864048689603806,
+ 0.09322181344032288,
+ -0.004488212056457996,
+ -0.07307851314544678,
+ -0.0010372435208410025,
+ 0.049360815435647964,
+ 0.0054590716026723385,
+ 0.006440204102545977,
+ -0.06820422410964966,
+ -0.021676786243915558,
+ 0.0397145114839077,
+ 0.0012800745898857713,
+ 0.07386341691017151,
+ -0.005496046505868435,
+ 0.03908878564834595,
+ -0.018884049728512764,
+ 0.084945447742939,
+ -0.011544589884579182,
+ -0.12145821005105972,
+ -0.06262265145778656,
+ 0.07857023924589157,
+ -0.04001670330762863,
+ 0.0456671267747879,
+ -0.12914526462554932,
+ 0.04664640501141548,
+ 0.017249664291739464,
+ -0.008213689550757408,
+ -0.078413225710392,
+ -0.05715758353471756,
+ 0.06142508238554001,
+ 0.02191011980175972,
+ 0.02089688368141651,
+ -0.026662923395633698,
+ 0.002659400925040245,
+ 0.010687260888516903,
+ 0.00415431521832943,
+ 0.017348365858197212,
+ -0.06585202366113663,
+ 0.009207702241837978,
+ 0.08492682129144669,
+ 0.025843800976872444,
+ 0.008410198614001274,
+ -0.040954507887363434,
+ -0.16241639852523804,
+ -0.09408893436193466,
+ 0.030860116705298424,
+ -0.030448712408542633,
+ 0.024618906900286674,
+ -0.07624676823616028,
+ -0.050029706209897995,
+ 0.015101027674973011,
+ 0.008731895126402378,
+ -0.005163616966456175,
+ -0.016517074778676033,
+ 0.013342677615582943,
+ -0.018305223435163498,
+ 0.06058698520064354,
+ 0.02535492368042469,
+ -0.0014730156399309635,
+ 0.03812725469470024,
+ 0.022633083164691925,
+ 0.026032086461782455,
+ 0.009453002363443375,
+ 0.059898823499679565,
+ -0.05425108224153519,
+ -0.035754647105932236,
+ 0.07836917042732239,
+ 0.038476064801216125,
+ 0.010618230327963829,
+ -0.09000751376152039,
+ -0.043080467730760574,
+ 0.07129234820604324,
+ -0.06593001633882523,
+ -0.005188079085201025,
+ 0.019621217623353004,
+ -0.048588015139102936,
+ -0.06472895294427872,
+ -0.009012101218104362,
+ -0.03380448743700981,
+ 0.08233749866485596,
+ -0.045430250465869904,
+ 3.431398363318294e-05,
+ -0.01813228242099285,
+ 0.05594703182578087,
+ 0.06519906967878342,
+ -0.09853655844926834,
+ 0.025499727576971054,
+ -0.05555672198534012,
+ -0.02468022145330906,
+ -0.06364111602306366,
+ -0.037881966680288315,
+ -0.004600340500473976,
+ -0.016238372772932053,
+ -0.010151775553822517,
+ -0.04727615788578987,
+ 0.007969299331307411,
+ -0.04190324619412422,
+ 0.002025892958045006,
+ 0.037030212581157684,
+ -0.01608317904174328,
+ 0.09813655912876129,
+ -0.08405668288469315,
+ 0.016390005126595497,
+ 0.017167193815112114,
+ -0.05458718165755272
+ ],
+ [
+ 0.04893726482987404,
+ -0.0058402493596076965,
+ 0.09677095711231232,
+ -0.01799270138144493,
+ -0.0845121443271637,
+ 0.050097040832042694,
+ -0.0760682076215744,
+ 0.047012072056531906,
+ 0.04017748683691025,
+ -0.000549644639249891,
+ -0.008726249448955059,
+ 0.09820261597633362,
+ 0.003039821982383728,
+ 0.0014271332183852792,
+ -0.02098223753273487,
+ -0.04054472595453262,
+ 0.1749071478843689,
+ -0.20440784096717834,
+ 0.032307855784893036,
+ 0.09268529713153839,
+ -0.3435579240322113,
+ 0.06814207136631012,
+ -0.05877280607819557,
+ 0.1223217099905014,
+ 0.11179354041814804,
+ -0.051450274884700775,
+ 0.025481754913926125,
+ -0.1819257289171219,
+ 0.007147911936044693,
+ 0.08810316771268845,
+ 0.20382805168628693,
+ 0.04239678010344505,
+ -0.1195031926035881,
+ 0.0032910157460719347,
+ -0.007354235276579857,
+ 0.24458040297031403,
+ -0.0926448255777359,
+ 0.03889201954007149,
+ -0.08063124120235443,
+ 0.02067529410123825,
+ 0.021831054240465164,
+ -0.044897451996803284,
+ -0.0507982112467289,
+ 0.04813080653548241,
+ 0.011655500158667564,
+ -0.1006115972995758,
+ 0.13817951083183289,
+ 0.11375591158866882,
+ -0.029052352532744408,
+ 0.032122306525707245,
+ 0.08776398003101349,
+ -0.1208442971110344,
+ 0.1185803934931755,
+ -0.0451594702899456,
+ 0.06881650537252426,
+ 0.1314273327589035,
+ 0.13900017738342285,
+ 0.1061820238828659,
+ -0.06934898346662521,
+ -0.01508370228111744,
+ -0.16175629198551178,
+ 0.025260161608457565,
+ -0.019894346594810486,
+ 0.1751524955034256,
+ 0.004936481360346079,
+ 0.14545002579689026,
+ 0.19607006013393402,
+ 0.018146924674510956,
+ -0.026711300015449524,
+ -0.025026461109519005,
+ 0.024112621322274208,
+ -0.008576999418437481,
+ 0.08398990333080292,
+ -0.011081922799348831,
+ 0.04346594214439392,
+ 0.07444331794977188,
+ 0.033239029347896576,
+ 0.07223405689001083,
+ -0.1309126615524292,
+ -0.02131984755396843,
+ -0.28765928745269775,
+ 0.12153533101081848,
+ -0.029027482494711876,
+ 0.06173262000083923,
+ -0.26933974027633667,
+ 0.04371882602572441,
+ -0.038598477840423584,
+ 0.1349632889032364,
+ 0.03874923661351204,
+ 0.08301515132188797,
+ 0.1785111278295517,
+ 0.051854055374860764,
+ -0.3853868246078491,
+ 0.05699970945715904,
+ -0.012921108864247799,
+ 0.01769828237593174,
+ -0.03694178909063339,
+ 0.025612691417336464,
+ 0.005346054211258888,
+ -0.1594909131526947,
+ -0.07150875777006149,
+ -0.28304287791252136,
+ 0.05378830432891846,
+ -0.08613017946481705,
+ -0.09403800964355469,
+ -0.2186294049024582,
+ -0.03819073736667633,
+ -0.04001442342996597,
+ 0.06888549029827118,
+ -0.046198900789022446,
+ -0.2528606653213501,
+ 0.17923451960086823,
+ 0.07434991747140884,
+ -0.05781762674450874,
+ -0.0570165291428566,
+ 0.0757913887500763,
+ 0.0135014858096838,
+ -0.0033735090401023626,
+ 0.11975431442260742,
+ -0.0023670245427638292,
+ -0.011395405977964401,
+ -0.004186677746474743,
+ 0.03269597142934799,
+ 0.1403622031211853,
+ -0.060640741139650345,
+ -0.14460735023021698,
+ 0.04573328047990799,
+ 0.007799024228006601
+ ],
+ [
+ -0.009682480245828629,
+ 0.05292750149965286,
+ 0.07668240368366241,
+ 0.10546676069498062,
+ 0.029432740062475204,
+ -0.45123785734176636,
+ 0.09541188925504684,
+ -0.10465805977582932,
+ -0.015568483620882034,
+ -0.17877328395843506,
+ 0.14573606848716736,
+ -0.03973155841231346,
+ -0.12162008881568909,
+ -0.24564428627490997,
+ 0.11408292502164841,
+ 0.06726127862930298,
+ 0.13195553421974182,
+ -0.1201321929693222,
+ 0.0724555030465126,
+ -0.04764515906572342,
+ 0.2118200659751892,
+ -0.35577526688575745,
+ 0.006964277476072311,
+ -0.5206752419471741,
+ 0.16660310328006744,
+ -0.03923766314983368,
+ 0.10647612065076828,
+ -0.1221228763461113,
+ -0.08642400056123734,
+ -0.24455711245536804,
+ -0.24729026854038239,
+ -0.28766903281211853,
+ -0.31521761417388916,
+ 0.02641470730304718,
+ -0.029588716104626656,
+ -0.5426087975502014,
+ -0.11675895750522614,
+ -0.10410301387310028,
+ -0.12491942197084427,
+ 0.1097325012087822,
+ -0.13869278132915497,
+ 0.08168550580739975,
+ -0.018541323021054268,
+ -0.24245180189609528,
+ 0.0056050121784210205,
+ 0.1566111296415329,
+ 0.08483851701021194,
+ 0.22938497364521027,
+ 0.0036835551727563143,
+ -0.5441039204597473,
+ 0.09151265025138855,
+ -0.12439418584108353,
+ -0.14873455464839935,
+ 0.09215636551380157,
+ -0.012051736935973167,
+ -0.04932255670428276,
+ 0.21852144598960876,
+ 0.05425585061311722,
+ -0.01630050502717495,
+ 0.09343045949935913,
+ 0.007835119031369686,
+ 0.04148249328136444,
+ 0.08018830418586731,
+ -0.11759725213050842,
+ -0.024801168590784073,
+ -0.04710831493139267,
+ 0.28018680214881897,
+ 0.07934600859880447,
+ -0.08701283484697342,
+ 0.12618325650691986,
+ -0.0806952714920044,
+ -0.28779932856559753,
+ 0.06395451724529266,
+ -0.13048182427883148,
+ -0.059479426592588425,
+ 0.2232690155506134,
+ -0.027086252346634865,
+ -0.16470271348953247,
+ -0.10676867514848709,
+ -0.0030674587469547987,
+ 0.16489183902740479,
+ 0.177242249250412,
+ 0.05709878355264664,
+ -0.13217869400978088,
+ 0.14346542954444885,
+ 0.06503988057374954,
+ 0.03210723027586937,
+ 0.09677568078041077,
+ -0.05039878189563751,
+ 0.027128838002681732,
+ 0.18376664817333221,
+ -0.07421406358480453,
+ -0.32794326543807983,
+ -0.34613439440727234,
+ -0.11973515897989273,
+ -0.03209976106882095,
+ -0.020840223878622055,
+ 0.048445168882608414,
+ 0.10510396957397461,
+ -0.403597891330719,
+ -0.11090874671936035,
+ -0.1491924226284027,
+ -0.024676864966750145,
+ -0.022991839796304703,
+ -0.09472640603780746,
+ -0.11453399062156677,
+ -0.08906660228967667,
+ 0.2052864283323288,
+ 0.17384682595729828,
+ -0.07431571930646896,
+ 0.14708857238292694,
+ -0.3357168138027191,
+ 0.021947024390101433,
+ -0.05447414889931679,
+ 0.08098731189966202,
+ 0.11021174490451813,
+ -0.22608281672000885,
+ 0.5040015578269958,
+ -0.25376829504966736,
+ 0.22929547727108002,
+ 0.19472669064998627,
+ -0.22433297336101532,
+ -0.08627758920192719,
+ -0.09376882761716843,
+ 0.011259117163717747,
+ 0.10272569209337234,
+ -0.030747821554541588,
+ -0.0700654610991478
+ ],
+ [
+ -0.03373949974775314,
+ -0.20386609435081482,
+ 0.028986118733882904,
+ -0.02541741356253624,
+ 0.17529776692390442,
+ 0.06198277696967125,
+ -0.08386463671922684,
+ 0.0013539398787543178,
+ -0.1949346512556076,
+ 0.1320994645357132,
+ -0.21428871154785156,
+ 0.013764902949333191,
+ 0.07008123397827148,
+ -0.07240710407495499,
+ 0.05570218712091446,
+ 0.11839047819375992,
+ -0.2439432442188263,
+ 0.32172784209251404,
+ 0.0011403111275285482,
+ -0.433788925409317,
+ 0.1881006509065628,
+ 0.051037225872278214,
+ -0.11586712300777435,
+ -0.0021518152207136154,
+ -0.3133847713470459,
+ 0.07732443511486053,
+ 0.05773279815912247,
+ 0.07260143756866455,
+ -0.04432855173945427,
+ 0.10585169494152069,
+ 0.1755530834197998,
+ -0.007567631546407938,
+ -0.07691910117864609,
+ -0.26937299966812134,
+ -0.0182910468429327,
+ -0.04958734288811684,
+ -0.22675833106040955,
+ 0.0002216265711467713,
+ 0.02831379696726799,
+ -0.0055421567521989346,
+ 0.011302954517304897,
+ -0.08322001993656158,
+ 0.08351431041955948,
+ 0.024850662797689438,
+ 0.12815693020820618,
+ -0.2277359664440155,
+ -0.18226532638072968,
+ 0.07065649330615997,
+ 0.07333964109420776,
+ 0.2076173573732376,
+ -0.2722102701663971,
+ -0.03309676796197891,
+ 0.11944717913866043,
+ 0.08164827525615692,
+ 0.029720788821578026,
+ -0.043797485530376434,
+ 0.028479482978582382,
+ 0.020878860726952553,
+ 0.052128955721855164,
+ -0.20585131645202637,
+ 0.20815885066986084,
+ 0.09836098551750183,
+ 0.24171386659145355,
+ -0.008032371290028095,
+ -0.024199075996875763,
+ 0.20322568714618683,
+ 0.06355233490467072,
+ 0.049235470592975616,
+ 0.05883649364113808,
+ 0.16226248443126678,
+ -0.03820045664906502,
+ 0.05564669892191887,
+ -0.17151591181755066,
+ 0.16064175963401794,
+ -0.18818634748458862,
+ 0.16918310523033142,
+ 0.1387612223625183,
+ -0.38740164041519165,
+ -0.0034635458141565323,
+ -0.1112586036324501,
+ -0.09161406010389328,
+ 0.04657602682709694,
+ 0.13405965268611908,
+ 0.11244387924671173,
+ 0.17962154746055603,
+ 0.03205510601401329,
+ -0.1620417982339859,
+ -0.316724568605423,
+ -0.1300724297761917,
+ 0.004112797789275646,
+ -0.3679676949977875,
+ -0.8888188004493713,
+ -1.3260128498077393,
+ -0.03746601939201355,
+ 0.06930089741945267,
+ 0.1198146864771843,
+ -0.06911249458789825,
+ -0.027608202770352364,
+ -0.05782115459442139,
+ -0.07657481729984283,
+ 0.11506764590740204,
+ 0.3820888102054596,
+ 0.1321304887533188,
+ -0.42697519063949585,
+ -0.04237403720617294,
+ -0.034845177084207535,
+ 0.11277307569980621,
+ 0.056731946766376495,
+ 0.08227284252643585,
+ -0.18221744894981384,
+ 0.5221775770187378,
+ 0.16589905321598053,
+ -0.3070075213909149,
+ 0.034732233732938766,
+ 0.03331894800066948,
+ 0.1380075365304947,
+ 0.08150234818458557,
+ 0.12187470495700836,
+ 0.11502106487751007,
+ -0.16480767726898193,
+ -0.0747382789850235,
+ 0.05263378471136093,
+ 0.15973956882953644,
+ -0.11154681444168091,
+ 0.1031060442328453,
+ 0.14426474273204803,
+ 0.013075035065412521,
+ 0.06027095764875412
+ ],
+ [
+ -0.15520255267620087,
+ 0.0181125458329916,
+ -0.08428597450256348,
+ -0.1390082687139511,
+ -0.18263308703899384,
+ 0.09813286364078522,
+ -0.34793365001678467,
+ 0.10763484984636307,
+ -0.08782882988452911,
+ 0.17000305652618408,
+ 0.1635645478963852,
+ -0.08807937055826187,
+ 0.12180091440677643,
+ 0.07664904743432999,
+ 0.023484421893954277,
+ -0.14350254833698273,
+ -0.07822943478822708,
+ -0.031011106446385384,
+ 0.2000948041677475,
+ -0.7007007002830505,
+ 0.16365677118301392,
+ 0.17082816362380981,
+ -0.21023450791835785,
+ 0.15482839941978455,
+ -0.6186422109603882,
+ 0.09985583275556564,
+ 0.00916769914329052,
+ 0.16208937764167786,
+ 0.19459307193756104,
+ -0.20068523287773132,
+ -0.05844015255570412,
+ 0.07200222462415695,
+ -0.10007701069116592,
+ 0.08475957810878754,
+ -0.12023811787366867,
+ 0.06343929469585419,
+ -0.025667887181043625,
+ -0.0564231313765049,
+ 0.010185373947024345,
+ -0.07049667835235596,
+ -0.20722773671150208,
+ -0.11022617667913437,
+ -0.18156608939170837,
+ 0.09187473356723785,
+ 0.003936861641705036,
+ -0.09194739162921906,
+ -0.017594361677765846,
+ 0.17291833460330963,
+ 0.09563695639371872,
+ 0.1762615293264389,
+ -0.3952924609184265,
+ -0.10080292820930481,
+ -0.107294961810112,
+ 0.029298121109604836,
+ -0.0710691586136818,
+ 0.12434081733226776,
+ 0.013349381275475025,
+ -0.046077944338321686,
+ -0.043741609901189804,
+ 0.2880513370037079,
+ 0.0745154395699501,
+ -0.3252546489238739,
+ 0.12081035226583481,
+ -0.28100040555000305,
+ 0.1265290230512619,
+ -0.004578909836709499,
+ -0.01107937190681696,
+ -0.3420383930206299,
+ 0.04421592503786087,
+ -0.04566372558474541,
+ -0.023252414539456367,
+ 0.02066107839345932,
+ -0.09750576317310333,
+ -0.004938255995512009,
+ -0.327876478433609,
+ -0.25856858491897583,
+ 0.20891813933849335,
+ -0.08908101171255112,
+ 0.09061186760663986,
+ 0.07218626141548157,
+ 0.08094844967126846,
+ -0.011012701317667961,
+ -0.03055514022707939,
+ -0.15159012377262115,
+ 0.07817917317152023,
+ 0.031234128400683403,
+ -0.12829139828681946,
+ -0.16767331957817078,
+ -0.2714453935623169,
+ -0.25519248843193054,
+ -0.11575079709291458,
+ 0.15695978701114655,
+ 0.0018485760083422065,
+ 0.14046752452850342,
+ 0.01577463187277317,
+ 0.27033159136772156,
+ -0.0033939408604055643,
+ -0.3100588917732239,
+ 0.28145667910575867,
+ 0.005141402594745159,
+ -0.02461238205432892,
+ -0.09548435360193253,
+ 0.038965512067079544,
+ -0.03453989326953888,
+ 0.023588130250573158,
+ 0.012711389921605587,
+ -0.2543503940105438,
+ 0.062455352395772934,
+ -0.3897725045681,
+ -0.11031099408864975,
+ -0.08257236331701279,
+ 0.10927227139472961,
+ 0.42813047766685486,
+ -0.05718206986784935,
+ 0.0066705429926514626,
+ 0.18214565515518188,
+ -0.16828954219818115,
+ 0.21732397377490997,
+ -0.07088091224431992,
+ 0.06865840405225754,
+ -0.05611380562186241,
+ 0.15235593914985657,
+ -0.06764762103557587,
+ -0.13969795405864716,
+ -0.19600360095500946,
+ -0.17516988515853882,
+ 0.08721411228179932,
+ 0.12968914210796356
+ ],
+ [
+ -0.11238700151443481,
+ -0.12590478360652924,
+ -0.018640849739313126,
+ 0.056609101593494415,
+ -0.04449351504445076,
+ -0.0035858822520822287,
+ -0.04093122109770775,
+ 0.012282810173928738,
+ -0.02729523926973343,
+ -0.08766801655292511,
+ 0.27297723293304443,
+ 0.1819225251674652,
+ 0.011973485350608826,
+ 0.09232823550701141,
+ 0.0050602625124156475,
+ -0.06857647746801376,
+ -0.15286347270011902,
+ 0.05194134637713432,
+ -0.08123817294836044,
+ -0.022473309189081192,
+ 0.010499238036572933,
+ -0.001212665461935103,
+ -0.18625488877296448,
+ 0.1599319577217102,
+ 0.09731491655111313,
+ -0.14146697521209717,
+ -0.005108128301799297,
+ 0.01515810377895832,
+ 0.18046905100345612,
+ 0.155790776014328,
+ -0.22740906476974487,
+ -0.01863410882651806,
+ -0.5205853581428528,
+ 0.02772824838757515,
+ -0.03363064303994179,
+ -0.07392145693302155,
+ 0.09469647705554962,
+ 0.15424472093582153,
+ -0.03624097257852554,
+ -0.07461462169885635,
+ -0.09659659117460251,
+ -0.1971689909696579,
+ -0.056987594813108444,
+ 0.15038242936134338,
+ -0.31143951416015625,
+ -0.2500779628753662,
+ 0.29711928963661194,
+ -0.07175704091787338,
+ 0.1043776273727417,
+ -0.03851475194096565,
+ 0.07258779555559158,
+ -0.08160170912742615,
+ -0.04302779212594032,
+ -0.02723030187189579,
+ -0.11148824542760849,
+ 0.05932198464870453,
+ 0.1146557405591011,
+ 0.12016455829143524,
+ 0.1304599940776825,
+ 0.06771352142095566,
+ -0.0775962620973587,
+ 0.016576742753386497,
+ -0.05617036670446396,
+ -0.09299235045909882,
+ 0.11756674200296402,
+ -0.06574629247188568,
+ 0.1122073158621788,
+ -0.02751249447464943,
+ 0.0949266105890274,
+ 0.016215916723012924,
+ 0.011630916967988014,
+ 0.03165903314948082,
+ 0.029043007642030716,
+ -0.197708860039711,
+ -0.19848133623600006,
+ -0.09184287488460541,
+ 0.13407044112682343,
+ 0.12438161671161652,
+ -0.04411923512816429,
+ -0.04930974170565605,
+ -0.20349879562854767,
+ 0.123837411403656,
+ -0.021471315994858742,
+ 0.01303805410861969,
+ -0.09922424703836441,
+ 0.015586872585117817,
+ 0.2197849005460739,
+ 0.10328707098960876,
+ 0.0406968779861927,
+ 0.06670669466257095,
+ -0.039120446890592575,
+ 0.16096921265125275,
+ -0.34162184596061707,
+ 0.043180983513593674,
+ -0.1315820962190628,
+ -0.08134584873914719,
+ -0.09721112996339798,
+ 0.14486537873744965,
+ 0.12716516852378845,
+ 0.07350900769233704,
+ 0.05324964597821236,
+ -0.10450754314661026,
+ 0.0751427561044693,
+ 0.027063103392720222,
+ -0.013825553469359875,
+ -0.10479243099689484,
+ -0.2941891849040985,
+ -0.10762480646371841,
+ -0.19687223434448242,
+ -0.0655607283115387,
+ -0.1385330855846405,
+ 0.15017810463905334,
+ 0.1323767900466919,
+ -0.027664611116051674,
+ 0.09297416359186172,
+ -0.010130951181054115,
+ 0.06616318225860596,
+ -0.06307036429643631,
+ 0.1716156005859375,
+ 0.020379718393087387,
+ -0.04996771365404129,
+ -0.05517945811152458,
+ 0.025452762842178345,
+ -0.00799772422760725,
+ -0.246479794383049,
+ -0.16347448527812958,
+ -0.045373089611530304,
+ 0.10530093312263489
+ ],
+ [
+ 0.021212151274085045,
+ -0.014556045643985271,
+ 0.12308353185653687,
+ -0.008947973139584064,
+ -0.02102857455611229,
+ 0.029185673221945763,
+ -0.026273446157574654,
+ 0.09616921842098236,
+ -0.020904704928398132,
+ -0.046645063906908035,
+ 0.0313723087310791,
+ 0.07961895316839218,
+ 0.13139225542545319,
+ -0.036146145313978195,
+ -0.05767407268285751,
+ 0.11898039281368256,
+ -0.07241222262382507,
+ -0.3726726770401001,
+ -0.022222647443413734,
+ 0.10817413777112961,
+ -0.17358657717704773,
+ 0.006756107322871685,
+ -0.33816471695899963,
+ -0.06903818994760513,
+ 0.0958629921078682,
+ 0.03751816228032112,
+ -0.01229590643197298,
+ -0.003997483290731907,
+ 0.09592573344707489,
+ 0.08838314563035965,
+ 0.034253329038619995,
+ -0.005883978679776192,
+ -0.1767890602350235,
+ 0.08971678465604782,
+ 0.17069286108016968,
+ -0.1699218899011612,
+ -0.1577530801296234,
+ 0.15159261226654053,
+ 0.1092519536614418,
+ -0.0013490464771166444,
+ 0.13342469930648804,
+ -0.08054398745298386,
+ -0.22331413626670837,
+ 0.07005267590284348,
+ -0.05445452407002449,
+ -0.4209088385105133,
+ 0.16884927451610565,
+ 0.11056655645370483,
+ -0.03872447460889816,
+ -0.138294979929924,
+ -0.03449954465031624,
+ 0.16699829697608948,
+ 0.025344939902424812,
+ 0.08181089907884598,
+ -0.10200044512748718,
+ 0.08064776659011841,
+ 0.06253424286842346,
+ 0.00414982670918107,
+ -0.12361068278551102,
+ 0.18191449344158173,
+ -0.11839795112609863,
+ 0.17322653532028198,
+ -0.1238081306219101,
+ -0.052344612777233124,
+ 0.10128083825111389,
+ 0.027662431821227074,
+ 0.1374344527721405,
+ -0.1649051457643509,
+ 0.03373895213007927,
+ 0.026597490534186363,
+ 0.0714898332953453,
+ -0.10654684156179428,
+ -0.022828616201877594,
+ -0.08680666983127594,
+ -0.08026181906461716,
+ -0.007190864998847246,
+ -0.02074909582734108,
+ -0.07425564527511597,
+ 0.015315448865294456,
+ -0.22029536962509155,
+ 0.09127532690763474,
+ 0.17612291872501373,
+ -0.03754301741719246,
+ -0.16699016094207764,
+ -0.11774273216724396,
+ -0.08488398790359497,
+ 0.182804137468338,
+ 0.08531278371810913,
+ 0.11736488342285156,
+ -0.020065894350409508,
+ 0.2015722543001175,
+ 0.04994514212012291,
+ -1.4182758331298828,
+ 0.04682062938809395,
+ -0.20435501635074615,
+ 0.08111504465341568,
+ -0.3645493984222412,
+ -0.05393547564744949,
+ 0.11758356541395187,
+ -0.2482536882162094,
+ 0.04504050314426422,
+ -0.22125330567359924,
+ 0.02407822012901306,
+ 0.10014230757951736,
+ 0.015849582850933075,
+ -0.012852243147790432,
+ -0.12249977141618729,
+ 0.054227109998464584,
+ -0.05478619784116745,
+ -0.03176501765847206,
+ -0.02743583358824253,
+ 0.1056777760386467,
+ 0.04198061302304268,
+ -0.10728026926517487,
+ 0.1708507239818573,
+ 0.03860192745923996,
+ -0.008396417833864689,
+ -0.070994071662426,
+ -0.055344562977552414,
+ -0.03527451679110527,
+ -0.037409745156764984,
+ 0.14319907128810883,
+ 0.012748748064041138,
+ 0.16019997000694275,
+ -0.024607589468359947,
+ -0.14934349060058594,
+ -0.06920216977596283,
+ 0.12574462592601776
+ ],
+ [
+ 0.07014277577400208,
+ -0.0351623110473156,
+ -0.11218171566724777,
+ 0.11228878051042557,
+ 0.2416064590215683,
+ 0.07768618315458298,
+ 0.20139671862125397,
+ -0.056351859122514725,
+ -0.031683556735515594,
+ -0.0559673011302948,
+ -0.10940022021532059,
+ -0.1315704882144928,
+ 0.1717953085899353,
+ -0.09507451206445694,
+ 0.10520726442337036,
+ 0.055889930576086044,
+ -0.15574617683887482,
+ -0.11354203522205353,
+ -0.04941444844007492,
+ -0.13760824501514435,
+ 0.08856821060180664,
+ -0.026700805872678757,
+ -0.11374159157276154,
+ -0.0029887992423027754,
+ 0.09967483580112457,
+ 0.028182007372379303,
+ 0.05805085971951485,
+ -0.1415824592113495,
+ 0.014357483945786953,
+ -0.055257998406887054,
+ 0.12128321826457977,
+ -0.11484801024198532,
+ 0.14399008452892303,
+ -0.2751915156841278,
+ 2.6399542548460886e-05,
+ -0.12891985476016998,
+ 0.10406123846769333,
+ -0.0046610720455646515,
+ 0.09761025011539459,
+ -0.002737517934292555,
+ 0.1710057556629181,
+ 0.07467767596244812,
+ 0.19904911518096924,
+ -0.07420102506875992,
+ 0.1825695037841797,
+ 0.01794128119945526,
+ -0.1413174867630005,
+ -0.1304275542497635,
+ -0.09736531972885132,
+ 0.13590827584266663,
+ 0.004227517172694206,
+ -0.14674699306488037,
+ 0.18957200646400452,
+ 0.05690461024641991,
+ -0.03822953999042511,
+ -0.05274684354662895,
+ 0.12726889550685883,
+ 0.0888669490814209,
+ -0.09172869473695755,
+ -0.04757538437843323,
+ 0.13331128656864166,
+ 0.060887549072504044,
+ 0.12637916207313538,
+ -0.08851641416549683,
+ -0.23486490547657013,
+ 0.04241888225078583,
+ -0.16076141595840454,
+ 0.03931017592549324,
+ 0.11708633601665497,
+ 0.02282727137207985,
+ -0.15546077489852905,
+ 0.07051675766706467,
+ -0.13935674726963043,
+ -0.1752493679523468,
+ -0.01036369614303112,
+ 0.09951820224523544,
+ -0.10911285132169724,
+ -0.09764610230922699,
+ 0.033752597868442535,
+ -0.011054752394557,
+ 0.06407804787158966,
+ -0.05066635087132454,
+ -0.07907290011644363,
+ -0.029791949316859245,
+ 0.04015176370739937,
+ -0.12839564681053162,
+ -0.05495491251349449,
+ -0.29271063208580017,
+ 0.13553035259246826,
+ 0.19222354888916016,
+ -0.0782637819647789,
+ -0.06670359522104263,
+ 0.2584686279296875,
+ -0.03308732435107231,
+ 0.10523476451635361,
+ -0.019808489829301834,
+ 0.07774040102958679,
+ 0.14416004717350006,
+ -0.43290817737579346,
+ 0.06242425739765167,
+ 0.003355608321726322,
+ 0.02894199825823307,
+ -0.16063717007637024,
+ 0.007322956342250109,
+ -0.005649432074278593,
+ -0.128949835896492,
+ 0.07308026403188705,
+ 0.06317023187875748,
+ -0.04360933601856232,
+ 0.11624979227781296,
+ -0.03618346154689789,
+ 0.08947136253118515,
+ -0.47764158248901367,
+ 0.040414854884147644,
+ 0.04210762307047844,
+ 0.07939056307077408,
+ -0.0468658022582531,
+ -0.030375273898243904,
+ -0.1277189552783966,
+ -0.02766875922679901,
+ 0.06974193453788757,
+ 0.045762427151203156,
+ 0.05726540461182594,
+ -0.06064724177122116,
+ 0.16445636749267578,
+ -0.022550180554389954,
+ -0.08066385239362717,
+ -0.0916556641459465
+ ],
+ [
+ -0.12670359015464783,
+ 0.05853061005473137,
+ -0.06844493001699448,
+ 0.04335508495569229,
+ -0.15289808809757233,
+ 0.026114648208022118,
+ 0.049946464598178864,
+ 0.07867565751075745,
+ 0.018592430278658867,
+ -0.16809295117855072,
+ 0.04641557112336159,
+ -0.12483598291873932,
+ 0.2641320526599884,
+ -0.3055526912212372,
+ -0.42058998346328735,
+ 0.10521021485328674,
+ 0.2037898302078247,
+ -0.009504948742687702,
+ 0.07657673954963684,
+ 0.04024892300367355,
+ -0.3284511864185333,
+ 0.07537226378917694,
+ -0.008081602863967419,
+ 0.061946917325258255,
+ -0.0010998526122421026,
+ -0.16480925679206848,
+ 0.17128832638263702,
+ -0.3784794509410858,
+ 0.010231069289147854,
+ -0.04435530677437782,
+ 0.2619415521621704,
+ 0.09728822857141495,
+ -0.06740335375070572,
+ -0.03171616420149803,
+ -0.03549680858850479,
+ 0.020831892266869545,
+ -0.18521955609321594,
+ 0.11249279975891113,
+ 0.1642773300409317,
+ 0.028309153392910957,
+ -0.02181088551878929,
+ -0.11785566806793213,
+ -0.1720147430896759,
+ 0.02929362840950489,
+ -0.05137592926621437,
+ -0.10623881220817566,
+ 0.004034942947328091,
+ -0.005083553958684206,
+ 0.1392102688550949,
+ 0.12150391936302185,
+ 0.014211629517376423,
+ -0.09720737487077713,
+ 0.0589771494269371,
+ -0.15021109580993652,
+ 0.06645956635475159,
+ 0.09847874939441681,
+ 0.0659671202301979,
+ 0.12213972210884094,
+ -0.027439456433057785,
+ -0.016916945576667786,
+ -0.09185638278722763,
+ -0.18259376287460327,
+ 0.030444424599409103,
+ -0.002183769829571247,
+ 0.013662177138030529,
+ 0.1678646057844162,
+ 0.07505106925964355,
+ -0.15538452565670013,
+ 0.1030774861574173,
+ -0.06060400232672691,
+ 0.06704123318195343,
+ -0.010108391754329205,
+ 0.1497269868850708,
+ -0.23932306468486786,
+ -0.05756823718547821,
+ 0.060190871357917786,
+ 0.09712830185890198,
+ 0.012486563064157963,
+ -0.08697210252285004,
+ -0.13108906149864197,
+ -0.22837071120738983,
+ 0.07913801074028015,
+ -0.14489814639091492,
+ -0.022766700014472008,
+ -0.10219480842351913,
+ 0.021647289395332336,
+ 0.11857856065034866,
+ 0.08575023710727692,
+ -0.09612056612968445,
+ 0.17948158085346222,
+ 0.07525833696126938,
+ 0.030646294355392456,
+ -0.19634924829006195,
+ 0.06541768461465836,
+ -0.03852180019021034,
+ -0.1658252626657486,
+ 0.06698651611804962,
+ -0.048025552183389664,
+ 0.10644666105508804,
+ -0.14985734224319458,
+ -0.020324628800153732,
+ -0.25834840536117554,
+ -0.01859930157661438,
+ 0.06704728305339813,
+ 0.0965677872300148,
+ -0.20235134661197662,
+ -0.14699392020702362,
+ 0.24269802868366241,
+ -0.3027573227882385,
+ 0.15615732967853546,
+ 0.0658564418554306,
+ 0.22233732044696808,
+ 0.04463149234652519,
+ 0.05108906701207161,
+ -0.23091135919094086,
+ 0.3518728017807007,
+ 0.06779973208904266,
+ -0.008436222560703754,
+ 0.046186599880456924,
+ 0.09458363801240921,
+ -0.20586149394512177,
+ -0.12211515009403229,
+ 0.06288594007492065,
+ 0.20402872562408447,
+ -0.4218448996543884,
+ -0.03784264624118805,
+ -0.031425971537828445,
+ -0.3249821066856384
+ ],
+ [
+ -0.058300845324993134,
+ 0.20745012164115906,
+ 0.07265610992908478,
+ 0.026096975430846214,
+ 0.13887976109981537,
+ 0.0005489321192726493,
+ -0.26757189631462097,
+ -0.1347556710243225,
+ -0.23581361770629883,
+ 0.09280536323785782,
+ -0.27552688121795654,
+ -0.12768524885177612,
+ 0.026498083025217056,
+ -0.44579601287841797,
+ -0.2752133011817932,
+ 0.23625190556049347,
+ -0.033908162266016006,
+ -1.2662625312805176,
+ 0.014485793188214302,
+ 0.29547378420829773,
+ -0.6393572092056274,
+ -0.03196083754301071,
+ 0.17717158794403076,
+ -0.06059296429157257,
+ -0.07955514639616013,
+ 0.18489709496498108,
+ 0.09252215176820755,
+ 0.15390756726264954,
+ -0.1419997215270996,
+ -0.18443699181079865,
+ 0.14637082815170288,
+ 0.026171663776040077,
+ -0.5015670657157898,
+ -0.2884386479854584,
+ 0.1476019322872162,
+ 0.03005380742251873,
+ 0.2266792207956314,
+ 0.11030063778162003,
+ -0.07772094756364822,
+ -0.016127651557326317,
+ 0.011067626997828484,
+ -0.16511696577072144,
+ 0.15066871047019958,
+ -0.010925629176199436,
+ -0.09620647877454758,
+ -0.18288780748844147,
+ -0.06117785722017288,
+ 0.06310617923736572,
+ -0.5031008720397949,
+ 0.3473767936229706,
+ -0.5198538899421692,
+ 0.19490426778793335,
+ 0.15623517334461212,
+ 0.05985216051340103,
+ 0.13408464193344116,
+ 0.06788714975118637,
+ 0.1250510960817337,
+ -0.2061993032693863,
+ -1.4160492420196533,
+ -0.23088213801383972,
+ -0.06822527199983597,
+ -0.002661078004166484,
+ 0.029115067794919014,
+ 0.15134410560131073,
+ -0.03307243809103966,
+ 0.23254504799842834,
+ 0.3156445324420929,
+ -0.16247589886188507,
+ 0.18690630793571472,
+ 0.10854858160018921,
+ -0.16166380047798157,
+ 0.064368836581707,
+ -0.33288654685020447,
+ -0.44020524621009827,
+ 0.0728880912065506,
+ 0.07155076414346695,
+ -0.01470980979502201,
+ 0.06650067865848541,
+ -0.12366008013486862,
+ -0.0830800011754036,
+ -0.16207584738731384,
+ -0.4292878210544586,
+ -0.06562856584787369,
+ 0.10687728971242905,
+ 0.2684785723686218,
+ -0.21883408725261688,
+ -0.04105547443032265,
+ -0.1453772634267807,
+ 0.09407351166009903,
+ -0.33736559748649597,
+ 0.25463223457336426,
+ -0.1384527087211609,
+ -0.18398812413215637,
+ -0.22044654190540314,
+ -0.14390592277050018,
+ -0.09311831742525101,
+ 0.08781791478395462,
+ 0.2504681646823883,
+ -0.7596649527549744,
+ -0.40232813358306885,
+ -0.028742847964167595,
+ 0.12352072447538376,
+ 0.05515861511230469,
+ 0.017746057361364365,
+ -0.10040784627199173,
+ 0.2759139835834503,
+ -0.30584976077079773,
+ -0.07145065814256668,
+ -0.30956968665122986,
+ 0.1862582415342331,
+ -0.36936235427856445,
+ 0.16688980162143707,
+ 0.059454094618558884,
+ 0.049328893423080444,
+ -0.0049695889465510845,
+ 0.08939918130636215,
+ 0.19247804582118988,
+ 0.1553768515586853,
+ -0.051356520503759384,
+ 0.11763298511505127,
+ -0.10939280688762665,
+ -0.035860586911439896,
+ 0.23290087282657623,
+ -0.2812832295894623,
+ -0.0015875404933467507,
+ 0.8846412301063538,
+ 0.05173202231526375,
+ -0.02991451881825924
+ ],
+ [
+ -0.2833716571331024,
+ -0.01045883446931839,
+ 0.1311863660812378,
+ 0.023237314075231552,
+ 0.08414684236049652,
+ 0.07144024223089218,
+ 0.10651535540819168,
+ 0.3003581762313843,
+ -0.1277167797088623,
+ 0.042347341775894165,
+ 0.09138737618923187,
+ 0.13765038549900055,
+ 0.4605830907821655,
+ -0.15266557037830353,
+ -0.284836083650589,
+ -0.18694671988487244,
+ 0.025315390899777412,
+ -0.13807758688926697,
+ 0.00750333908945322,
+ -0.0328548327088356,
+ -0.3762173354625702,
+ -0.06670304387807846,
+ -0.192694753408432,
+ 0.044747982174158096,
+ 0.06927310675382614,
+ -0.3003024160861969,
+ 0.08969210088253021,
+ 0.08440666645765305,
+ -0.018170710653066635,
+ -0.17766065895557404,
+ -0.05617024749517441,
+ 0.16515156626701355,
+ -0.17289264500141144,
+ -0.023961931467056274,
+ -0.2240113765001297,
+ -0.12013834714889526,
+ 0.2723321318626404,
+ 0.08252869546413422,
+ 0.09141071140766144,
+ -0.10177671909332275,
+ -0.0703808143734932,
+ -0.0003880492295138538,
+ -0.12967807054519653,
+ 0.0641188770532608,
+ 0.006737728137522936,
+ -0.27119848132133484,
+ -0.028498778119683266,
+ 0.10969524830579758,
+ 0.04731299728155136,
+ -0.018849927932024002,
+ -0.2163204699754715,
+ 0.10685645788908005,
+ -0.04648631438612938,
+ -0.018303487449884415,
+ 0.08888842910528183,
+ 0.1771603375673294,
+ 0.18295419216156006,
+ -0.005444866139441729,
+ 0.055780455470085144,
+ 0.08179789036512375,
+ -0.20270608365535736,
+ 0.09772735089063644,
+ 0.03463514894247055,
+ -0.08333923667669296,
+ 0.007068773731589317,
+ 0.0810212716460228,
+ 0.14951300621032715,
+ -0.1398766189813614,
+ 0.015347322449088097,
+ 0.10847602784633636,
+ 0.06289854645729065,
+ -0.407133549451828,
+ -0.042247530072927475,
+ -0.3595666289329529,
+ -0.14160160720348358,
+ 0.11895439773797989,
+ 0.15333783626556396,
+ 0.08144699037075043,
+ -0.3348076641559601,
+ 0.07028499245643616,
+ -0.17219598591327667,
+ 0.05357527732849121,
+ -0.1851181834936142,
+ -0.10151620954275131,
+ 0.026331702247262,
+ 0.09880059957504272,
+ 0.12294364720582962,
+ 0.07895776629447937,
+ 0.013659468851983547,
+ 0.023486172780394554,
+ 0.07317490130662918,
+ 0.04738108441233635,
+ -0.8077264428138733,
+ 0.05772717297077179,
+ -0.1070374995470047,
+ -0.16474947333335876,
+ 0.040634673088788986,
+ 0.10228157788515091,
+ 0.11225728690624237,
+ -0.025256605818867683,
+ 0.1587221920490265,
+ -0.02539418824017048,
+ 0.05065034702420235,
+ 0.004962633363902569,
+ -0.06527451425790787,
+ 0.12095000594854355,
+ -0.2241382747888565,
+ -0.2271765172481537,
+ -0.20756956934928894,
+ 0.14052821695804596,
+ 0.029862336814403534,
+ -0.08544861525297165,
+ 0.1612582951784134,
+ -0.06768684089183807,
+ 0.003743815468624234,
+ 0.2268703728914261,
+ -0.06765150278806686,
+ -0.3303546905517578,
+ 0.3167669475078583,
+ -0.10948602855205536,
+ -0.19783207774162292,
+ -0.08800287544727325,
+ 0.07103893160820007,
+ 0.34151336550712585,
+ -0.19146503508090973,
+ -0.13352634012699127,
+ 0.059924013912677765,
+ 0.14139758050441742
+ ],
+ [
+ -0.38959962129592896,
+ -0.08303744345903397,
+ 0.013090858235955238,
+ -0.34505975246429443,
+ -0.010397303849458694,
+ 0.17019739747047424,
+ 0.007793452590703964,
+ 0.202500119805336,
+ -0.18432430922985077,
+ 0.022671403363347054,
+ 0.2562287151813507,
+ 0.06401509791612625,
+ 0.19012291729450226,
+ -0.693723201751709,
+ 0.09999910742044449,
+ -0.04594073444604874,
+ 0.029487164691090584,
+ -0.2489795833826065,
+ 0.09767896682024002,
+ 0.12935370206832886,
+ -0.14421936869621277,
+ 0.07965601980686188,
+ 0.039961256086826324,
+ -0.011313557624816895,
+ -0.03947460278868675,
+ 0.07326416671276093,
+ 0.32380208373069763,
+ 0.05146734043955803,
+ -0.2828916907310486,
+ 0.060360778123140335,
+ 0.06715979427099228,
+ 0.19839811325073242,
+ -0.449133962392807,
+ 0.10023324191570282,
+ -0.12748286128044128,
+ -0.801084578037262,
+ -0.37160494923591614,
+ -0.09470392018556595,
+ 0.18981191515922546,
+ 0.045743923634290695,
+ 0.0369405634701252,
+ -0.2093656212091446,
+ -0.07763554155826569,
+ 0.007479988969862461,
+ 0.1395556628704071,
+ -0.8160651326179504,
+ -0.4891366958618164,
+ -0.10827787965536118,
+ 0.08526217192411423,
+ 0.024748247116804123,
+ -0.348864883184433,
+ 0.10248037427663803,
+ -0.13364684581756592,
+ 0.0790579542517662,
+ 0.0881509780883789,
+ -0.012020205147564411,
+ 0.1387951821088791,
+ 0.11384648084640503,
+ -0.006189262494444847,
+ 0.11277022212743759,
+ -0.13678455352783203,
+ 0.06858977675437927,
+ -0.08986220508813858,
+ -0.052851635962724686,
+ 0.002981176134198904,
+ 0.21299627423286438,
+ 0.255474328994751,
+ -0.19084133207798004,
+ 0.03599700331687927,
+ 0.004479550290852785,
+ 0.1444961577653885,
+ -0.021434929221868515,
+ 0.06461448967456818,
+ -0.12569402158260345,
+ 0.005367428530007601,
+ 0.02244952693581581,
+ 0.26586517691612244,
+ -0.2926822006702423,
+ -0.1335180252790451,
+ -0.056272946298122406,
+ -0.3134584426879883,
+ -0.05337870866060257,
+ -0.2686101496219635,
+ 0.04500696808099747,
+ -0.20399774610996246,
+ -0.017533063888549805,
+ -0.026522209867835045,
+ 0.10714105516672134,
+ 0.10819302499294281,
+ 0.2323804348707199,
+ 0.05683912709355354,
+ 0.04857287555932999,
+ -1.1003899574279785,
+ 0.061866044998168945,
+ -0.23288027942180634,
+ -0.3471205234527588,
+ 0.015438929200172424,
+ -0.03819103538990021,
+ 0.17148616909980774,
+ -0.0747537612915039,
+ -0.14700700342655182,
+ -0.009657368063926697,
+ -0.00972847267985344,
+ 0.07264848053455353,
+ -0.13252469897270203,
+ -0.11538960039615631,
+ -0.5282462239265442,
+ -0.010666993446648121,
+ 0.04405824840068817,
+ 0.05710693076252937,
+ -0.11731170862913132,
+ 0.47661086916923523,
+ 0.07386558502912521,
+ -0.20288528501987457,
+ -0.09192929416894913,
+ 0.44514521956443787,
+ 0.014272564090788364,
+ -0.06648489832878113,
+ 0.10130656510591507,
+ 0.2070777863264084,
+ -0.38231736421585083,
+ -0.05244328826665878,
+ 0.020609194412827492,
+ 0.461796373128891,
+ 0.04598718136548996,
+ -0.06330186128616333,
+ 0.15325510501861572,
+ 0.27057313919067383
+ ],
+ [
+ -0.44828030467033386,
+ 0.048996977508068085,
+ -0.055692508816719055,
+ -0.021444624289870262,
+ 0.0136663056910038,
+ 0.01632648892700672,
+ 0.006340031512081623,
+ 0.2693220376968384,
+ 0.006907705217599869,
+ -0.04462500289082527,
+ 0.10185114294290543,
+ 0.08448948711156845,
+ 0.32572734355926514,
+ -0.467989444732666,
+ -0.05995290353894234,
+ -0.02337992563843727,
+ 0.10729463398456573,
+ -0.07564529031515121,
+ 0.31894317269325256,
+ 0.19312816858291626,
+ -0.4805547297000885,
+ 0.11524203419685364,
+ 0.05771439149975777,
+ -0.024202896282076836,
+ -0.10051058232784271,
+ 0.22599555552005768,
+ 0.19865544140338898,
+ -0.0668187290430069,
+ -0.37262454628944397,
+ 0.059289492666721344,
+ -0.006592836696654558,
+ 0.06093962863087654,
+ 0.003229717491194606,
+ -0.0788615494966507,
+ -0.13608485460281372,
+ -0.15801580250263214,
+ -0.08486194908618927,
+ -0.01817161776125431,
+ 0.256752073764801,
+ -0.03345233201980591,
+ -0.05510847643017769,
+ -0.06311394274234772,
+ -0.17559905350208282,
+ -0.04742007702589035,
+ -0.012616240419447422,
+ -0.1665707677602768,
+ -0.10086043179035187,
+ -0.10733810812234879,
+ 0.104757159948349,
+ 0.11616234481334686,
+ -0.4474644064903259,
+ 0.10261689871549606,
+ -0.09192220866680145,
+ 0.13350309431552887,
+ 0.023577097803354263,
+ 0.08805719763040543,
+ -0.023995034396648407,
+ 0.10118794441223145,
+ -0.0304582342505455,
+ 0.11441292613744736,
+ -0.053170111030340195,
+ -0.02209489420056343,
+ -0.15139377117156982,
+ 0.09921064972877502,
+ 0.0800919458270073,
+ 0.19017855823040009,
+ 0.12358066439628601,
+ 0.04576299712061882,
+ -0.02178935706615448,
+ -0.04926731809973717,
+ 0.035468053072690964,
+ 0.1750515252351761,
+ -0.008526111952960491,
+ -0.13073231279850006,
+ 0.014108633622527122,
+ 0.06785829365253448,
+ 0.15868376195430756,
+ -0.28627467155456543,
+ -0.06030423194169998,
+ -0.004290005192160606,
+ -0.2238890528678894,
+ -0.06331953406333923,
+ -0.08061075210571289,
+ 0.11651495844125748,
+ -0.11863988637924194,
+ -0.09556056559085846,
+ 0.047146234661340714,
+ 0.0061664944514632225,
+ -0.04765507951378822,
+ -0.048831261694431305,
+ 0.1393192857503891,
+ -0.08016173541545868,
+ -0.6002864241600037,
+ -0.04565341770648956,
+ -0.014506650157272816,
+ -0.22978918254375458,
+ 0.05320210009813309,
+ 0.03441409766674042,
+ 0.03812064230442047,
+ -0.04341857507824898,
+ -0.12483333051204681,
+ -0.3196130394935608,
+ -0.07220491021871567,
+ 0.12090760469436646,
+ -0.12244710326194763,
+ 0.008286695927381516,
+ -0.10953690856695175,
+ -0.11676423251628876,
+ -0.21673326194286346,
+ 0.1732134371995926,
+ 0.061833299696445465,
+ 0.3622860908508301,
+ 0.1278005689382553,
+ -0.09926170855760574,
+ -0.05644288286566734,
+ 0.3958446979522705,
+ 0.13134005665779114,
+ -0.010907700285315514,
+ -0.06852703541517258,
+ 0.21079760789871216,
+ -0.1440414935350418,
+ 0.08464924991130829,
+ 0.10947507619857788,
+ 0.23124960064888,
+ 0.035889919847249985,
+ 0.06840106099843979,
+ 0.0755625069141388,
+ 0.26267319917678833
+ ],
+ [
+ -0.11242909729480743,
+ 0.07777813822031021,
+ 0.017147891223430634,
+ 0.0762556940317154,
+ -0.13979555666446686,
+ -0.017134366557002068,
+ -0.013230796903371811,
+ 0.046539243310689926,
+ 0.09505430608987808,
+ -0.0414227657020092,
+ 0.011501535773277283,
+ 0.0006677822093479335,
+ 0.03078167326748371,
+ 0.03196495771408081,
+ -0.4448053240776062,
+ 0.05593688413500786,
+ 0.095420241355896,
+ -0.017177168279886246,
+ 0.20258627831935883,
+ -0.0011969000333920121,
+ -0.23747749626636505,
+ 0.10683197528123856,
+ -0.03323505446314812,
+ 0.031687263399362564,
+ 0.046661339700222015,
+ 0.054656755179166794,
+ 0.012940018437802792,
+ 0.0006602873909287155,
+ -0.00022531057766173035,
+ 0.012515143491327763,
+ -0.02224370650947094,
+ 0.0003869870270136744,
+ -0.22065208852291107,
+ 0.09468060731887817,
+ 0.027235044166445732,
+ -0.24194775521755219,
+ -0.006803445052355528,
+ 0.042202215641736984,
+ 0.12874245643615723,
+ -0.011152839288115501,
+ 0.048327911645174026,
+ -0.01924109272658825,
+ 0.05618466064333916,
+ 0.08392523974180222,
+ -0.010170466266572475,
+ -0.20001554489135742,
+ 0.031138386577367783,
+ -0.014936487190425396,
+ -0.009930361062288284,
+ 0.01906576007604599,
+ -0.022151919081807137,
+ -0.1364564746618271,
+ -0.029475219547748566,
+ 0.003457417944446206,
+ -0.0936758816242218,
+ 0.06645279377698898,
+ -0.08753884583711624,
+ 0.09784088283777237,
+ 0.05310910567641258,
+ 0.013989313505589962,
+ -0.05888087674975395,
+ -0.0767161175608635,
+ 0.01887543499469757,
+ 0.03624594211578369,
+ 0.015229374170303345,
+ 0.14909999072551727,
+ 0.1695866733789444,
+ 0.061133455485105515,
+ 0.061879713088274,
+ 0.08529990166425705,
+ 0.0601227805018425,
+ 0.017911726608872414,
+ 0.0371505506336689,
+ 0.02199270762503147,
+ 0.028400950133800507,
+ -0.03420627489686012,
+ 0.12792915105819702,
+ -0.023482924327254295,
+ -0.10907995700836182,
+ -0.14806093275547028,
+ 0.06563640385866165,
+ 0.01166056003421545,
+ -0.07720408588647842,
+ 0.044623225927352905,
+ -0.0638914406299591,
+ -0.08010472357273102,
+ 0.00018978943990077823,
+ 0.018169814720749855,
+ -0.06458085775375366,
+ 0.008147467859089375,
+ 0.1874166876077652,
+ 0.11788869649171829,
+ -0.14503361284732819,
+ -0.056928880512714386,
+ -0.051586370915174484,
+ 0.0311379786580801,
+ -0.029242807999253273,
+ -0.011479995213449001,
+ 0.008777651004493237,
+ 0.016140438616275787,
+ 0.07853540033102036,
+ -0.014216870069503784,
+ -0.06865290552377701,
+ -0.00562622444704175,
+ -0.06683144718408585,
+ 0.03967902064323425,
+ 0.0025456338189542294,
+ -0.19979006052017212,
+ -0.08635608851909637,
+ 0.019245268777012825,
+ -0.019028937444090843,
+ 0.05601559579372406,
+ 0.07524778693914413,
+ 0.004251585807651281,
+ -0.29718995094299316,
+ 0.05612385645508766,
+ -0.018215905874967575,
+ 0.04229329898953438,
+ -0.08520445972681046,
+ -0.027483901008963585,
+ -0.08607099205255508,
+ -0.07842132449150085,
+ 0.06527925282716751,
+ 0.07952331751585007,
+ -0.07018627226352692,
+ 0.023047439754009247,
+ 0.010121683590114117,
+ 0.06487199664115906
+ ],
+ [
+ -0.06850838661193848,
+ 0.03820861876010895,
+ -0.04997118189930916,
+ -0.0558176226913929,
+ -0.13766519725322723,
+ -0.11654634028673172,
+ -0.1751621812582016,
+ 0.06240612640976906,
+ -0.029796531423926353,
+ -0.042663898319005966,
+ 0.057892680168151855,
+ -0.06606350839138031,
+ 0.36279329657554626,
+ -0.2325775921344757,
+ -0.43989458680152893,
+ -0.006151264533400536,
+ 0.15289334952831268,
+ -0.03182404488325119,
+ 0.21477963030338287,
+ 0.2055479735136032,
+ -0.12358276546001434,
+ -0.06091983988881111,
+ 0.10520388185977936,
+ -0.04231717064976692,
+ -0.03316401690244675,
+ -0.20634320378303528,
+ 0.1947881430387497,
+ -0.19119331240653992,
+ 0.00224330578930676,
+ 0.1105017215013504,
+ 0.25372496247291565,
+ 0.16088958084583282,
+ -0.12618398666381836,
+ 0.30473464727401733,
+ -0.05637894570827484,
+ -0.15415571630001068,
+ -0.17848704755306244,
+ 0.02226218394935131,
+ 0.3213121294975281,
+ 0.005376210901886225,
+ 0.064080610871315,
+ -0.10318352282047272,
+ 0.0498216412961483,
+ 0.06875601410865784,
+ 0.0332530215382576,
+ -0.40952959656715393,
+ -0.2061605155467987,
+ -0.0011906459694728255,
+ 0.1559947431087494,
+ 0.1803823560476303,
+ 0.03039652481675148,
+ -0.1341896504163742,
+ -0.10690904408693314,
+ 0.016638850793242455,
+ 0.014905170537531376,
+ 0.1646748036146164,
+ 0.04869476333260536,
+ 0.011145325377583504,
+ -0.05761881545186043,
+ 0.06827794015407562,
+ 0.07074949145317078,
+ 0.1155596524477005,
+ -0.02054426446557045,
+ 0.06492248922586441,
+ 0.026034777984023094,
+ 0.05220374837517738,
+ 0.23937484622001648,
+ -0.08600922673940659,
+ -0.10282047837972641,
+ 0.05017709732055664,
+ 0.03027898073196411,
+ -0.21838518977165222,
+ 0.03674689307808876,
+ -0.20900288224220276,
+ 0.07955801486968994,
+ 0.010319070890545845,
+ 0.0006021950975991786,
+ -0.16838690638542175,
+ -0.19675730168819427,
+ -0.020879825577139854,
+ -0.14897336065769196,
+ -0.11284782737493515,
+ -0.034122489392757416,
+ 0.14978983998298645,
+ -0.1882222294807434,
+ -0.02910163812339306,
+ 0.07628294825553894,
+ -0.12354149669408798,
+ -0.20605646073818207,
+ -0.067026287317276,
+ 0.03651810064911842,
+ -0.04009218513965607,
+ -0.4336915910243988,
+ -0.12370501458644867,
+ -0.1894737333059311,
+ -0.1067979484796524,
+ 0.0005106063326820731,
+ 0.02266286499798298,
+ 0.15023422241210938,
+ 0.07491898536682129,
+ 0.1738005131483078,
+ -0.011356878094375134,
+ -0.07745537161827087,
+ 0.0018616914749145508,
+ -0.03903433680534363,
+ -0.14344757795333862,
+ -0.25354230403900146,
+ -0.3587690591812134,
+ -0.16760607063770294,
+ 0.07490547746419907,
+ -0.027816174551844597,
+ 0.2804313898086548,
+ 0.13427774608135223,
+ -0.08475857973098755,
+ -0.13692010939121246,
+ 0.0434500016272068,
+ 0.15848766267299652,
+ 0.06419291347265244,
+ 0.13726398348808289,
+ 0.20845246315002441,
+ -0.1566987782716751,
+ -0.13126084208488464,
+ 0.1149948462843895,
+ 0.22904621064662933,
+ -0.5067880153656006,
+ -0.07808747887611389,
+ 0.12406840175390244,
+ -0.10160921514034271
+ ]
+ ],
+ [
+ [
+ -0.06756807118654251,
+ -0.16543987393379211,
+ -0.3955898582935333,
+ 0.23137737810611725,
+ 0.8105812072753906,
+ -0.7038881182670593,
+ 0.4241858720779419,
+ -0.1069340705871582,
+ 0.00033008589525707066,
+ -0.000287123752059415,
+ 0.21891747415065765,
+ -0.2620095908641815,
+ 0.21122407913208008,
+ -0.2604796290397644,
+ -0.20162317156791687,
+ 0.33764249086380005,
+ 0.027461672201752663,
+ 1.1470284461975098,
+ -0.6689460873603821,
+ 0.0030311518348753452,
+ 0.0007200560066848993,
+ 0.5650426149368286,
+ -1.4484511613845825,
+ 0.7349910736083984,
+ 0.13127289712429047,
+ -0.0971437618136406,
+ -0.20855778455734253,
+ 1.0889016389846802,
+ 0.29467228055000305,
+ 0.02700752764940262,
+ 0.06916867941617966,
+ 1.2414883375167847,
+ -0.2856679856777191,
+ -0.25423693656921387,
+ 0.36631569266319275,
+ -0.3396744132041931,
+ 0.194773331284523,
+ 0.005377310793846846,
+ -0.6050127744674683,
+ -0.08947154134511948,
+ -0.6805055141448975,
+ 0.3207355737686157,
+ 0.32702335715293884,
+ -1.0606392621994019,
+ -1.2447706460952759,
+ -2.5441553592681885,
+ 0.3214056193828583,
+ -0.8217073082923889,
+ -0.04984506592154503,
+ 0.048520974814891815,
+ -0.7850474715232849,
+ -1.295426368713379,
+ 0.2141086608171463,
+ -0.8262404799461365,
+ -0.12335185706615448,
+ -0.3200710713863373,
+ 0.2956101894378662,
+ 0.006402024067938328,
+ 0.48091503977775574,
+ -0.13661351799964905,
+ 0.5072853565216064,
+ -1.0244522094726562,
+ -0.5020338892936707,
+ -0.34595540165901184,
+ -0.7613320350646973,
+ -0.2577553391456604,
+ 0.5887584090232849,
+ -0.17392855882644653,
+ -1.6277570724487305,
+ 0.026200657710433006,
+ 0.12160252779722214,
+ 1.3254919052124023,
+ 0.13432152569293976,
+ 0.0013512569712474942,
+ 0.2175121009349823,
+ 0.14757132530212402,
+ 0.22288161516189575,
+ -0.08641904592514038,
+ -0.9761590361595154,
+ -0.22108010947704315,
+ 0.28592702746391296,
+ 1.2467024326324463,
+ -0.5349047780036926,
+ 0.09560094028711319,
+ 0.4562901258468628,
+ -0.5896481275558472,
+ -0.3397466242313385,
+ -0.34773266315460205,
+ 0.027619490399956703,
+ -0.005026989616453648,
+ 0.007132960017770529,
+ 0.13221536576747894,
+ 0.1813429743051529,
+ 0.6329764127731323,
+ -0.6600300073623657,
+ 0.36737582087516785,
+ 0.605143666267395,
+ 0.08125394582748413,
+ -0.2494572252035141,
+ -1.0565824508666992,
+ 0.015786949545145035,
+ -0.33262452483177185,
+ -0.7486162185668945,
+ -0.8038054704666138,
+ -1.5733354091644287,
+ -1.061435341835022,
+ -0.24699997901916504,
+ 0.28481364250183105,
+ 0.2269888073205948,
+ -0.8981099128723145,
+ -2.031986713409424,
+ 0.11067937314510345,
+ -0.42052552103996277,
+ -0.018095210194587708,
+ 0.1407410204410553,
+ -0.7161560654640198,
+ -0.3761627972126007,
+ -0.5308826565742493,
+ 0.3465748429298401,
+ 0.4759661853313446,
+ -0.2290668934583664,
+ 0.5694806575775146,
+ -1.6017088890075684,
+ 0.8640625476837158,
+ 1.2884881496429443,
+ 1.053236961364746,
+ 0.0726151391863823,
+ 0.6022239923477173
+ ]
+ ]
+ ],
+ "activationLayers": [
+ "reLU",
+ "reLU",
+ "reLU"
+ ],
+ "biases": [
+ [
+ 0.41210898756980896,
+ -0.14466501772403717,
+ 0.11615071445703506,
+ 0.15551765263080597,
+ 0.2896631360054016,
+ 0.2601502537727356,
+ -0.09201329946517944,
+ 0.12317017465829849,
+ 0.2754036784172058,
+ 0.1393490433692932,
+ 0.0106710996478796,
+ 0.3008906841278076,
+ -0.3705286979675293,
+ 0.13894571363925934,
+ -0.24349340796470642,
+ 0.11219232529401779,
+ -0.3475782573223114,
+ -0.3216690719127655,
+ -0.4586440920829773,
+ -0.35091671347618103,
+ -0.3820383548736572,
+ 0.23171252012252808,
+ -0.5182207822799683,
+ 0.2747291624546051,
+ 0.10045353323221207,
+ 0.007530077360570431,
+ -0.07444372773170471,
+ 0.12993216514587402,
+ 0.2992708384990692,
+ 0.2836220860481262,
+ -0.24976615607738495,
+ -0.09116362035274506,
+ -0.05714938044548035,
+ -0.2559919059276581,
+ 0.17496241629123688,
+ -0.07897314429283142,
+ -0.012259084731340408,
+ 0.2332637906074524,
+ 0.06723882257938385,
+ 0.05602554231882095,
+ -0.008035704493522644,
+ 0.06503932178020477,
+ -0.1942092925310135,
+ 0.16313612461090088,
+ -0.20086807012557983,
+ -0.4011442959308624,
+ 0.19558599591255188,
+ 0.11690598726272583,
+ 0.08897747099399567,
+ -0.1906489133834839,
+ 0.09074617922306061,
+ -0.022266032174229622,
+ 0.08257032930850983,
+ -0.4201367497444153,
+ 0.025272872298955917,
+ 0.16209301352500916,
+ 0.1653354912996292,
+ 0.06447666138410568,
+ -0.24351462721824646,
+ -0.25724470615386963,
+ -0.1045750230550766,
+ -0.05668416619300842,
+ 0.06308846175670624,
+ -0.0446014478802681,
+ 0.08223901689052582,
+ -0.17683956027030945,
+ -0.049475718289613724,
+ -0.3542690575122833,
+ 0.12083445489406586,
+ -0.08175133913755417,
+ 0.12638680636882782,
+ 0.04070816561579704,
+ 0.15121451020240784,
+ -0.17749427258968353,
+ -0.05650431290268898,
+ 0.089194156229496,
+ 0.24117672443389893,
+ -0.03255736455321312,
+ 0.3707243800163269,
+ -0.14949753880500793,
+ 0.2443474531173706,
+ 0.20650245249271393,
+ -0.04992556571960449,
+ -0.3056444823741913,
+ -0.03732169046998024,
+ 0.23476454615592957,
+ 0.3409971296787262,
+ -0.15662559866905212,
+ 0.023329952731728554,
+ 0.29453355073928833,
+ -0.46265003085136414,
+ 0.029613692313432693,
+ -0.6571834087371826,
+ 0.1144028827548027,
+ -0.20819827914237976,
+ -0.03867660462856293,
+ -0.037245795130729675,
+ 0.16308486461639404,
+ -0.36614203453063965,
+ -0.2943962514400482,
+ 0.334348201751709,
+ -0.150777205824852,
+ 0.2239372432231903,
+ 0.008847127668559551,
+ 0.11820665746927261,
+ 0.09000764787197113,
+ -0.12177037447690964,
+ -0.34207475185394287,
+ 0.07563664019107819,
+ 0.012970546260476112,
+ -0.3776833713054657,
+ -0.008794604800641537,
+ -0.16827081143856049,
+ 0.2858964204788208,
+ -0.019382338970899582,
+ -0.22749945521354675,
+ -0.25380027294158936,
+ 0.029560454189777374,
+ 0.224834144115448,
+ 0.04995596036314964,
+ 0.2540011703968048,
+ 0.057912442833185196,
+ 0.0915704295039177,
+ -0.3275631070137024,
+ -0.3664524555206299,
+ -0.04216212034225464,
+ -0.052519362419843674,
+ -0.3615948259830475
+ ],
+ [
+ 0.047699615359306335,
+ 0.08498521149158478,
+ 0.11366501450538635,
+ 0.20011846721172333,
+ 0.13601696491241455,
+ 0.044375352561473846,
+ 0.10027670860290527,
+ 0.042436566203832626,
+ -2.1180344804416773e-13,
+ -0.0035322783514857292,
+ 0.08897602558135986,
+ 0.05478644743561745,
+ 0.01309268083423376,
+ -0.031728990375995636,
+ -0.011171314865350723,
+ -0.11098471283912659,
+ 0.02556885965168476,
+ 0.08012890070676804,
+ 0.06106296181678772,
+ 0.007653011474758387,
+ -0.008623088710010052,
+ -0.022251330316066742,
+ 0.02949560061097145,
+ -0.09171757847070694,
+ 0.05878021568059921,
+ 0.0700177252292633,
+ -0.07448582351207733,
+ 0.026788588613271713,
+ -0.1554175615310669,
+ -1.267052191248827e-13,
+ 0.06707378476858139,
+ -0.21733832359313965,
+ 0.09259239584207535,
+ 0.04375907778739929,
+ -0.043065495789051056,
+ 0.08185916393995285,
+ -0.06715206056833267,
+ 0.021116917952895164,
+ 0.022028082981705666,
+ 0.01577305793762207,
+ 0.09392517060041428,
+ -0.02431216463446617,
+ 0.015894291922450066,
+ -0.0474163256585598,
+ 0.14496028423309326,
+ 0.027936071157455444,
+ -0.020667744800448418,
+ -0.13828492164611816,
+ 0.011518381536006927,
+ 0.06043945997953415,
+ 0.005468614865094423,
+ 0.11960017681121826,
+ 0.015274234116077423,
+ -0.07039181143045425,
+ 0.07687773555517197,
+ 0.15402936935424805,
+ -0.003556318348273635,
+ 0.027931367978453636,
+ -0.10420271754264832,
+ 0.02732524462044239,
+ 0.06901879608631134,
+ 0.05905807390809059,
+ 0.10269398987293243,
+ -0.11711360514163971,
+ 0.0024184132926166058,
+ 0.06942161917686462,
+ -0.012103397399187088,
+ -0.045856524258852005,
+ 0.02954353578388691,
+ -0.055997584015131,
+ 0.07168228924274445,
+ -0.08835671842098236,
+ 0.0692959725856781,
+ -0.0004929265123791993,
+ 0.08187314867973328,
+ -0.03290141746401787,
+ 0.04021641984581947,
+ 0.009694978594779968,
+ 0.09465997666120529,
+ -0.06636419892311096,
+ 0.03090566210448742,
+ -0.01891789212822914,
+ 0.09943457692861557,
+ -0.07068777084350586,
+ 0.04829065129160881,
+ 0.10806778073310852,
+ 0.14855991303920746,
+ -0.017830660566687584,
+ 0.0849478542804718,
+ -0.02673247642815113,
+ 0.051755715161561966,
+ 0.09093113243579865,
+ 0.07427509874105453,
+ -0.11021300405263901,
+ 0.08712634444236755,
+ -0.03183803707361221,
+ -0.08997230231761932,
+ 0.06885886192321777,
+ -0.006107353139668703,
+ 0.14184601604938507,
+ -0.02509114518761635,
+ -0.08376593887805939,
+ 0.058691930025815964,
+ 0.024715105071663857,
+ 0.002094974974170327,
+ -0.03127538412809372,
+ 0.024943839758634567,
+ 0.14382454752922058,
+ 0.14642073214054108,
+ -0.010911544784903526,
+ 0.20058637857437134,
+ 0.0668783187866211,
+ 0.049609556794166565,
+ 0.09508326649665833,
+ 0.0025026528164744377,
+ 0.017473747953772545,
+ 0.017592759802937508,
+ 0.052776649594306946,
+ 0.06248925253748894,
+ 0.06398999691009521,
+ 0.09754019230604172,
+ -0.12873417139053345,
+ 0.003965021576732397,
+ -0.025616483762860298,
+ -0.1462949514389038,
+ -0.34913501143455505,
+ 0.05132580175995827,
+ -0.06187589839100838
+ ],
+ [
+ 0.026853766292333603
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/models/0/scaler.txt b/models/0/scaler.txt
new file mode 100644
index 0000000000..461a1d8f8c
--- /dev/null
+++ b/models/0/scaler.txt
@@ -0,0 +1,2 @@
+2.6720630059068036,1.0017657905428634,1.9156327155670845,9.149623402193956,28.647771666093696,3.7526096196518424,10.19303372191143,1.82985123605338,3.1600228146388725,1.5738584867331313,1.435431446698128,1.2643060286901897,1.1452401787667594
+1.858559757027421,0.4865249978344985,3.162572904879665,25.21040017953888,34.48252849402906,5.320336536404879,25.362484286622546,3.722723690419032,10.46575141988185,2.489423223957629,1.8889113541845977,1.0913557664615596,0.6525565126200781
diff --git a/monitoring/MonitoringSettings.md b/monitoring/MonitoringSettings.md
new file mode 100644
index 0000000000..0a9c05e37e
--- /dev/null
+++ b/monitoring/MonitoringSettings.md
@@ -0,0 +1,24 @@
+# Monitoring Settings
+
+## Configuration files
+
+There are monitoring configuration files for each project in `project//monitoring.properties`.
+
+### Monitoring configure
+The file `monitoring.properties` is passed as a java property `-Dutbot.monitoring.settings.path`. It configures `org.utbot.monitoring.MonitoringSettings` class.
+
+#### Properties description:
+- `project` is a name of project that will be run in monitoring.
+- `classTimeoutSeconds` is a unit-test generation timeout for one class.
+- `runTimeoutMinutes` is a timeout for one whole run of the project.
+- `fuzzingRatios` is a list of numbers that configure the ratio of fuzzing time to total generation time.
+
+## Which project can be run?
+
+### Prerequisites
+
+Firstly, you should read [this](../utbot-junit-contest/README.md) paper about available projects and how to extend them.
+
+### How to add projects to monitoring
+
+To add a project to monitoring you should create a folder with a project name and create a file `monitoring.properties` with needed configurations.
diff --git a/monitoring/insert_metadata.py b/monitoring/insert_metadata.py
new file mode 100644
index 0000000000..10be3c4b45
--- /dev/null
+++ b/monitoring/insert_metadata.py
@@ -0,0 +1,281 @@
+import argparse
+import json
+import re
+import subprocess
+from collections import OrderedDict
+from datetime import datetime
+from os import environ
+from platform import uname
+from time import time
+from typing import Optional, List
+
+from monitoring_settings import JSON_VERSION
+from utils import load
+
+
+def try_get_output(args: str) -> Optional[str]:
+ """
+ Try to run subprocess with specified arguments
+ :param args: arguments for execution
+ :return: result output of execution or None
+ """
+ try:
+ return subprocess.check_output(args, stderr=subprocess.STDOUT, shell=True).decode()
+ except Exception as e:
+ print(f'Error in command "{args}":\n\t{e}')
+ return None
+
+
+def parse_gradle_version(s: str) -> Optional[str]:
+ """
+ Parse gradle version from given string
+ :param s: execution result of gradle --version
+ :return: parsed gradle version or None
+ """
+ if s is None:
+ return None
+ regex = re.compile(r'^\s*(Gradle [.\d]+)\s*$', re.MULTILINE)
+ result = regex.search(s)
+ if result is None:
+ return None
+ return result.group(1)
+
+
+def build_environment_data() -> dict:
+ """
+ Collect environment data from host
+ :return: dictionary with environment data
+ """
+ uname_result = uname()
+ environment = {
+ 'host': uname_result.node,
+ 'OS': f'{uname_result.system} version {uname_result.version}',
+ 'java_version': try_get_output('java -version'),
+ 'gradle_version': parse_gradle_version(try_get_output('gradle --version')),
+ 'JAVA_HOME': environ.get('JAVA_HOME'),
+ 'KOTLIN_HOME': environ.get('KOTLIN_HOME'),
+ 'PATH': environ.get('PATH'),
+ }
+ return environment
+
+
+def build_metadata(args: argparse.Namespace) -> dict:
+ """
+ Collect metadata into dictionary
+ :param args: parsed program arguments
+ :return: dictionary with metadata
+ """
+ metadata = {
+ 'source': {
+ 'type': args.source_type,
+ 'id': args.source_id
+ },
+ 'commit_hash': args.commit,
+ 'branch': args.branch,
+ 'build_number': args.build,
+ 'timestamp': args.timestamp,
+ 'date': datetime.fromtimestamp(args.timestamp).strftime('%Y-%m-%dT%H:%M:%S'),
+ 'environment': build_environment_data()
+ }
+ return metadata
+
+
+def build_target(target_name: str) -> dict:
+ return {
+ "target": target_name,
+ "summarised": [],
+ "by_class": OrderedDict()
+ }
+
+
+def transform_metrics(metrics: dict) -> dict:
+ """
+ Transform given metrics with calculation coverage
+ :param metrics: given metrics
+ :return: transformed metrics
+ """
+ result = OrderedDict()
+
+ instr_count_prefix = "covered_bytecode_instructions"
+ total_instr_count_prefix = "total_bytecode_instructions"
+
+ coverage_prefix = "total_bytecode_instruction_coverage"
+
+ total_count = 0
+ for metric in metrics:
+ if metric.startswith(total_instr_count_prefix):
+ total_count = metrics[metric]
+ break
+
+ for metric in metrics:
+ if metric.startswith(total_instr_count_prefix):
+ continue
+ if metric.startswith(instr_count_prefix):
+ coverage = metrics[metric] / total_count if total_count > 0 else 0.0
+ result[coverage_prefix + metric.removeprefix(instr_count_prefix)] = coverage
+ else:
+ result[metric] = metrics[metric]
+
+ return result
+
+
+def build_data(parameters: dict, metrics: dict) -> dict:
+ return {
+ "parameters": {
+ **parameters
+ },
+ "metrics": {
+ **transform_metrics(metrics)
+ }
+ }
+
+
+def build_by_class(class_name: str) -> dict:
+ return {
+ "class_name": class_name,
+ "data": []
+ }
+
+
+def update_from_class(by_class: dict, class_item: dict, parameters: dict):
+ """
+ Update class object using given class_item
+ :param by_class: dictionary with classname keys
+ :param class_item: class metrics of current run
+ :param parameters: parameters of current run
+ """
+ class_name = class_item["class_name"]
+ if class_name not in by_class:
+ by_class[class_name] = build_by_class(class_name)
+
+ metrics = class_item["metrics"]
+ by_class[class_name]["data"].append(
+ build_data(parameters, metrics)
+ )
+
+
+def update_from_target(targets: dict, target_item: dict, parameters: dict):
+ """
+ Update targets using given target_item
+ :param targets: dictionary with target keys
+ :param target_item: metrics of current run
+ :param parameters: parameters of current run
+ """
+ target_name = target_item["target"]
+ if target_name not in targets:
+ targets[target_name] = build_target(target_name)
+
+ summarised_metrics = target_item["summarised_metrics"]
+ targets[target_name]["summarised"].append(
+ build_data(parameters, summarised_metrics)
+ )
+
+ for class_item in target_item["metrics_by_class"]:
+ update_from_class(targets[target_name]["by_class"], class_item, parameters)
+
+
+def update_from_stats(targets: dict, stats: dict):
+ """
+ Updates targets using given statistics
+ :param targets: dictionary with target keys
+ :param stats: target object
+ """
+ parameters = stats["parameters"]
+ for target_item in stats["targets"]:
+ update_from_target(targets, target_item, parameters)
+
+
+def postprocess_by_class(by_class: dict) -> List[dict]:
+ """
+ Transform dictionary with classname keys into array with class objects
+ :param by_class: dictionary with classname keys
+ :return: array of class objects
+ """
+ return list(by_class.values())
+
+
+def postprocess_targets(targets: dict) -> List[dict]:
+ """
+ Transform dictionary with target keys into array with target objects
+ :param targets: dictionary with target keys
+ :return: array of targets
+ """
+ result = []
+ for target in targets.values():
+ target["by_class"] = postprocess_by_class(target["by_class"])
+ result.append(target)
+ return result
+
+
+def build_targets(stats_array: List[dict]) -> List[dict]:
+ """
+ Collect and group statistics by target
+ :param stats_array: list of dictionaries with parameters and metrics
+ :return: list of metrics and parameters grouped by target
+ """
+ result = OrderedDict()
+ for stats in stats_array:
+ update_from_stats(result, stats)
+
+ return postprocess_targets(result)
+
+
+def insert_metadata(args: argparse.Namespace) -> dict:
+ """
+ Collect metadata and statistics from specified files and merge them into result
+ :param args: parsed program arguments
+ :return: dictionary with statistics and metadata
+ """
+ stats_array = [item for f in args.stats_file for item in load(f)]
+ result = {
+ 'version': JSON_VERSION,
+ 'targets': build_targets(stats_array),
+ 'metadata': build_metadata(args)
+ }
+ return result
+
+
+def get_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--stats_file', required=True, nargs='+',
+ help='files (one or more) with statistics', type=str
+ )
+ parser.add_argument(
+ '--commit', help='commit hash', type=str
+ )
+ parser.add_argument(
+ '--build', help='build number', type=str
+ )
+ parser.add_argument(
+ '--output_file', required=True,
+ help='output file', type=str
+ )
+ parser.add_argument(
+ '--timestamp', help='statistics timestamp',
+ type=int, default=int(time())
+ )
+ parser.add_argument(
+ '--source_type', help='source type of metadata',
+ type=str, default="Manual"
+ )
+ parser.add_argument(
+ '--source_id', help='source id of metadata', type=str
+ )
+ parser.add_argument(
+ '--branch', help='branch name', type=str
+ )
+
+ args = parser.parse_args()
+ return args
+
+
+def main():
+ args = get_args()
+ stats = insert_metadata(args)
+ with open(args.output_file, "w") as f:
+ json.dump(stats, f, indent=4)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/monitoring/monitoring_settings.py b/monitoring/monitoring_settings.py
new file mode 100644
index 0000000000..8b0fb83a0f
--- /dev/null
+++ b/monitoring/monitoring_settings.py
@@ -0,0 +1,4 @@
+"""
+Json format version.
+"""
+JSON_VERSION = 2
diff --git a/monitoring/prepare_metrics.py b/monitoring/prepare_metrics.py
new file mode 100644
index 0000000000..59da56fca0
--- /dev/null
+++ b/monitoring/prepare_metrics.py
@@ -0,0 +1,150 @@
+import argparse
+import json
+from typing import List
+
+from utils import load
+
+
+def remove_in_class(name: str) -> str:
+ in_class = "_in_class"
+ idx = name.find(in_class)
+ if idx == -1:
+ return name
+ return name[:idx] + name[idx:].removeprefix(in_class)
+
+
+def update_from_counter_name(key_word: str, name: str, labels: dict) -> str:
+ if name == f"total_{key_word}":
+ labels["type"] = "total"
+ return key_word
+ if name.startswith(key_word):
+ labels["type"] = name.removeprefix(f"{key_word}_")
+ return key_word
+ return name
+
+
+def update_from_coverage(name: str, labels: dict) -> str:
+ coverage_key = "bytecode_instruction_coverage"
+ idx = name.find(coverage_key)
+ if idx == -1:
+ return name
+ labels["type"] = name[:idx - 1]
+ source = name[idx:].removeprefix(f"{coverage_key}")
+ if len(source) > 0:
+ source = source.removeprefix("_by_")
+ if source == "classes":
+ labels["type"] = "averaged_by_classes"
+ else:
+ labels["source"] = source
+ if "source" not in labels:
+ labels["source"] = "all"
+ return coverage_key
+
+
+def build_metric_struct(name: str, value: any, labels: dict) -> dict:
+ name = remove_in_class(name)
+ name = update_from_counter_name("classes", name, labels)
+ name = update_from_counter_name("methods", name, labels)
+ name = update_from_coverage(name, labels)
+
+ if type(value) == bool:
+ value = int(value)
+ name = f"test_generation_{name}"
+ elif type(value) == int:
+ name = f"{name}_total"
+
+ name = f"utbot_{name}"
+
+ return {
+ "metric": name,
+ "labels": labels,
+ "value": value
+ }
+
+
+def build_metrics_from_data(data: dict, labels: dict) -> List[dict]:
+ result = []
+ fuzzing_ratio = data["parameters"]["fuzzing_ratio"]
+ new_labels = {
+ **labels,
+ "fuzzing_ratio": fuzzing_ratio
+ }
+ metrics = data["metrics"]
+ for metric in metrics:
+ result.append(build_metric_struct(metric, metrics[metric], new_labels.copy()))
+ return result
+
+
+def build_metrics_from_data_array(metrics: List[dict], labels: dict) -> List[dict]:
+ result = []
+ for metric in metrics:
+ result.extend(build_metrics_from_data(metric, labels))
+ return result
+
+
+def build_metrics_from_target(target: dict, run_id: str) -> List[dict]:
+ result = []
+ project = target["target"]
+
+ result.extend(build_metrics_from_data_array(
+ target["summarised"],
+ {
+ "run_id": run_id,
+ "project": project,
+ "class": "All"
+ }
+ ))
+
+ for class_item in target["by_class"]:
+ class_name = class_item["class_name"]
+ result.extend(build_metrics_from_data_array(
+ class_item["data"],
+ {
+ "run_id": run_id,
+ "project": project,
+ "class": class_name
+ }
+ ))
+
+ return result
+
+
+def build_metrics_from_targets(targets: List[dict], run_id: str) -> List[dict]:
+ metrics = []
+ for target in targets:
+ metrics.extend(build_metrics_from_target(target, run_id))
+ return metrics
+
+
+def get_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--stats_file', required=True,
+ help='files with statistics after insertion metadata', type=str
+ )
+ parser.add_argument(
+ '--output_file', required=True,
+ help='output file', type=str
+ )
+
+ args = parser.parse_args()
+ return args
+
+
+def extract_run_id(text: str):
+ idx = text.find('-')
+ return "run" + text[idx:]
+
+
+def main():
+ args = get_args()
+ stats = load(args.stats_file)
+ run_id = extract_run_id(stats["metadata"]["source"]["id"])
+ metrics = build_metrics_from_targets(stats["targets"], run_id)
+ metrics.sort(key=lambda x: x["metric"])
+ with open(args.output_file, "w") as f:
+ json.dump(metrics, f, indent=4)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/monitoring/projects/fescar/monitoring.properties b/monitoring/projects/fescar/monitoring.properties
new file mode 100644
index 0000000000..cabd34e51e
--- /dev/null
+++ b/monitoring/projects/fescar/monitoring.properties
@@ -0,0 +1,4 @@
+project=fescar
+classTimeoutSeconds=20
+runTimeoutMinutes=20
+fuzzingRatios=0.0;0.05;1.0
\ No newline at end of file
diff --git a/monitoring/projects/guava/monitoring.properties b/monitoring/projects/guava/monitoring.properties
new file mode 100644
index 0000000000..0555a8c44a
--- /dev/null
+++ b/monitoring/projects/guava/monitoring.properties
@@ -0,0 +1,4 @@
+project=guava
+classTimeoutSeconds=20
+runTimeoutMinutes=20
+fuzzingRatios=0.0;0.05;1.0
\ No newline at end of file
diff --git a/monitoring/projects/pdfbox/monitoring.properties b/monitoring/projects/pdfbox/monitoring.properties
new file mode 100644
index 0000000000..3878e706fe
--- /dev/null
+++ b/monitoring/projects/pdfbox/monitoring.properties
@@ -0,0 +1,4 @@
+project=pdfbox
+classTimeoutSeconds=20
+runTimeoutMinutes=20
+fuzzingRatios=0.0;0.05;1.0
\ No newline at end of file
diff --git a/monitoring/projects/seata/monitoring.properties b/monitoring/projects/seata/monitoring.properties
new file mode 100644
index 0000000000..9cb7421c9a
--- /dev/null
+++ b/monitoring/projects/seata/monitoring.properties
@@ -0,0 +1,4 @@
+project=seata
+classTimeoutSeconds=20
+runTimeoutMinutes=20
+fuzzingRatios=0.0;0.05;1.0
\ No newline at end of file
diff --git a/monitoring/projects/spoon/monitoring.properties b/monitoring/projects/spoon/monitoring.properties
new file mode 100644
index 0000000000..41b56c94f0
--- /dev/null
+++ b/monitoring/projects/spoon/monitoring.properties
@@ -0,0 +1,4 @@
+project=spoon
+classTimeoutSeconds=20
+runTimeoutMinutes=20
+fuzzingRatios=0.0;0.05;1.0
\ No newline at end of file
diff --git a/monitoring/push_with_rebase.sh b/monitoring/push_with_rebase.sh
new file mode 100644
index 0000000000..655b09cb9c
--- /dev/null
+++ b/monitoring/push_with_rebase.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+# inputs: target_branch, target_directory, github_token, message
+
+AUTHOR_EMAIL='github-actions[bot]@users.noreply.github.com'
+AUTHOR_NAME='github-actions[bot]'
+INPUT_BRANCH=${target_branch:-GITHUB_REF_NAME}
+INPUT_DIRECTORY=${target_directory:-'.'}
+REPOSITORY=$GITHUB_REPOSITORY
+
+echo "Push to branch $INPUT_BRANCH";
+[ -z "${github_token}" ] && {
+ echo 'Missing input "github_token: ${{ secrets.GITHUB_TOKEN }}".';
+ exit 1;
+};
+
+cd "${INPUT_DIRECTORY}"
+
+remote_repo="https://${GITHUB_ACTOR}:${github_token}@github.com/${REPOSITORY}.git"
+
+git config http.sslVerify false
+git config --local user.email "${AUTHOR_EMAIL}"
+git config --local user.name "${AUTHOR_NAME}"
+
+git add -A
+git commit -m "${message}"
+
+until git push "${remote_repo}" HEAD:"${INPUT_BRANCH}"
+do
+ git pull --rebase || exit 1
+done
diff --git a/monitoring/utils.py b/monitoring/utils.py
new file mode 100644
index 0000000000..c897f46df6
--- /dev/null
+++ b/monitoring/utils.py
@@ -0,0 +1,15 @@
+import json
+from os.path import exists
+from typing import Optional
+
+
+def load(json_file: str) -> Optional[any]:
+ """
+ Try load object from json file
+ :param json_file: path to json file
+ :return: object from given json file or None
+ """
+ if exists(json_file):
+ with open(json_file, "r") as f:
+ return json.load(f)
+ return None
diff --git a/scripts/codeforces_scrapper/codeforces_scrapper.py b/scripts/ml/codeforces_scrapper/codeforces_scrapper.py
similarity index 100%
rename from scripts/codeforces_scrapper/codeforces_scrapper.py
rename to scripts/ml/codeforces_scrapper/codeforces_scrapper.py
diff --git a/scripts/prepare.sh b/scripts/ml/prepare.sh
similarity index 100%
rename from scripts/prepare.sh
rename to scripts/ml/prepare.sh
diff --git a/scripts/prog_list b/scripts/ml/prog_list
similarity index 100%
rename from scripts/prog_list
rename to scripts/ml/prog_list
diff --git a/scripts/quality_analysis.sh b/scripts/ml/quality_analysis.sh
similarity index 100%
rename from scripts/quality_analysis.sh
rename to scripts/ml/quality_analysis.sh
diff --git a/scripts/requirements.txt b/scripts/ml/requirements.txt
similarity index 100%
rename from scripts/requirements.txt
rename to scripts/ml/requirements.txt
diff --git a/scripts/run_contest_estimator.sh b/scripts/ml/run_contest_estimator.sh
similarity index 100%
rename from scripts/run_contest_estimator.sh
rename to scripts/ml/run_contest_estimator.sh
diff --git a/scripts/run_with_coverage.sh b/scripts/ml/run_with_coverage.sh
similarity index 84%
rename from scripts/run_with_coverage.sh
rename to scripts/ml/run_with_coverage.sh
index 29f41ddf20..95ba77eb7b 100644
--- a/scripts/run_with_coverage.sh
+++ b/scripts/ml/run_with_coverage.sh
@@ -13,7 +13,7 @@ if [[ -n $COVERAGE_PROCESSING ]]; then
fi
WORKDIR="."
-$WORKDIR/scripts/run_contest_estimator.sh $PROJECT $TIME_LIMIT "$PATH_SELECTOR" "" "$COVERAGE_PROCESSING"
+$WORKDIR/scripts/ml/run_contest_estimator.sh $PROJECT $TIME_LIMIT "$PATH_SELECTOR" "" "$COVERAGE_PROCESSING"
./gradlew :utbot-junit-contest:test :utbot-junit-contest:jacocoTestReport
diff --git a/scripts/selector_list b/scripts/ml/selector_list
similarity index 100%
rename from scripts/selector_list
rename to scripts/ml/selector_list
diff --git a/scripts/train.py b/scripts/ml/train.py
similarity index 100%
rename from scripts/train.py
rename to scripts/ml/train.py
diff --git a/scripts/ml/train_data.sh b/scripts/ml/train_data.sh
new file mode 100644
index 0000000000..25ef4b4709
--- /dev/null
+++ b/scripts/ml/train_data.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+WORKDIR="."
+TIME_LIMIT=${1}
+
+while read prog; do
+ echo "Starting features collection from $prog"
+ prog="${prog%%[[:cntrl:]]}"
+ while read selector; do
+ echo "Starting features collection from $prog with $selector"
+ selector="${selector%%[[:cntrl:]]}"
+ $WORKDIR/scripts/ml/run_contest_estimator.sh "$prog" "$TIME_LIMIT" "$selector" true
+ done <"$WORKDIR/scripts/ml/selector_list"
+done <"$WORKDIR/scripts/ml/prog_list"
diff --git a/scripts/ml/train_iteratively.sh b/scripts/ml/train_iteratively.sh
new file mode 100644
index 0000000000..a2169a9514
--- /dev/null
+++ b/scripts/ml/train_iteratively.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+TIME_LIMIT=${1}
+ITERATIONS=${2}
+OUTPUT_DIR=${3}
+PYTHON_COMMAND=${4}
+
+declare -a models=("linear" "nn16" "nn32" "nn64" "nn128")
+
+WORKDIR="."
+
+echo "Start training data on heuristical based selectors"
+
+$WORKDIR/scripts/ml/train_data.sh $TIME_LIMIT
+
+echo "Start iterative learning of models"
+
+for (( i=0; i < $ITERATIONS; i++ ))
+do
+
+ echo "Start $i iteration"
+
+ for model in "${models[@]}"
+ do
+ EXTRA_ARGS=""
+ if [[ $model == *"nn"* ]]; then
+ EXTRA_ARGS="--hidden_dim $(echo $model | cut -c 3-)"
+ echo "EXTRA_ARGS=$EXTRA_ARGS"
+ fi
+
+ COMMAND="$PYTHON_COMMAND $WORKDIR/scripts/ml/train.py --features_dir $WORKDIR/eval/features --output_dir $OUTPUT_DIR/$model/$i --prog_list $WORKDIR/scripts/prog_list --model $model $EXTRA_ARGS"
+ echo "TRAINING COMMAND=$COMMAND"
+ $COMMAND
+ done
+
+ while read prog; do
+ prog="${prog%%[[:cntrl:]]}"
+
+ for model in "${models[@]}"
+ do
+ PREDICTOR="BASE"
+
+ if [[ $model == *"linear"* ]]; then
+ PREDICTOR="LINEAR"
+ fi
+
+ $WORKDIR/scripts/ml/run_contest_estimator.sh $prog $TIME_LIMIT "NN_REWARD_GUIDED_SELECTOR $OUTPUT_DIR/$model/$i $PREDICTOR" "true eval/features/jlearch/$model$i/$prog"
+ done
+ done <"$WORKDIR/scripts/ml/prog_list"
+done
diff --git a/scripts/project/json_to_prometheus.py b/scripts/project/json_to_prometheus.py
new file mode 100644
index 0000000000..0a00270f9b
--- /dev/null
+++ b/scripts/project/json_to_prometheus.py
@@ -0,0 +1,36 @@
+import sys
+import json
+
+with open(sys.argv[1]) as metrics_raw:
+ metrics_json = json.load(metrics_raw)
+
+# metrics is a json list e.g.:
+# [
+# {
+# "metric": "total_classes",
+# "labels": {
+# "project": "guava",
+# "fuzzing_ratio": 0.1
+# },
+# "value": 20
+# },
+# {
+# "metric": "testcases_generated",
+# "labels": {
+# "project": "guava",
+# "fuzzing_ratio": 0.1
+# },
+# "value": 1042
+# }
+# ]
+#
+# the loop below iterates over each list item and constructs metrics set
+metrics_set_str = ""
+for metric in metrics_json:
+ labels_set_str = ""
+ comma = ""
+ for label, value in metric['labels'].items():
+ labels_set_str = f'{labels_set_str}{comma}{label}=\"{value}\"'
+ comma = ","
+ metrics_set_str += f'{metric["metric"]}{{{labels_set_str}}} {metric["value"]}\n'
+print(metrics_set_str)
diff --git a/scripts/project/logging.sh b/scripts/project/logging.sh
new file mode 100644
index 0000000000..52931a78cc
--- /dev/null
+++ b/scripts/project/logging.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+FILEBEAT_DIR=${1}
+LOGSTASH_HOST=${2}
+
+cat > ${FILEBEAT_DIR}/filebeat.yml </dev/null
+ sleep ${SLEEP_TIME_SECONDS}
+done &
+
+# jvm metrics
+#
+# to enable this part of monitoring you also need to pass -javaagent option to org.gradle.jvmargs of GRADLE_OPTS variable, for example:
+# GRADLE_OPTS: "-Dorg.gradle.jvmargs='-XX:MaxHeapSize=2048m -javaagent:/tmp/jmx-exporter.jar=12345:/tmp/jmx-exporter.yml -Dorg.gradle.daemon=false'"
+#curl ${JMX_EXPORTER_URL} -o ${JMX_EXPORTER_JAR}
+#chmod +x ${JMX_EXPORTER_JAR}
+#printf "rules:\n- pattern: \".*\"\n" > ${JMX_EXPORTER_CONFIG}
+#while true; do
+# curl localhost:${JMX_EXPORTER_PORT} 2>/dev/null | curl -u "${PUSHGATEWAY_USER}":"${PUSHGATEWAY_PASSWORD}" --data-binary @- "https://${PUSHGATEWAY_HOSTNAME}${PUSHGATEWAY_ADDITIONAL_PATH}/metrics/job/pushgateway/instance/${GITHUB_RUN_ID}-${HOSTNAME}${PROM_ADDITIONAL_LABELS}" 2>/dev/null
+# sleep ${SLEEP_TIME_SECONDS}
+#done &
diff --git a/scripts/project/ps_parser.sh b/scripts/project/ps_parser.sh
new file mode 100644
index 0000000000..7bdf32b0ca
--- /dev/null
+++ b/scripts/project/ps_parser.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+while read line; do
+ #echo $line
+ PID=$(echo $line | awk '{ print $1 }')
+ RSS=$(echo $line | awk '{ print $2 * 1024 }')
+ PID_EXECUTABLE=$(cat /proc/${PID}/stat 2>/dev/null | awk '{ print $2 }' | sed -n 's/^(\(.*\))$/\1/p' )
+ DESCRIPTION=$(echo $line | grep -o "Gradle Test Executor [0-9]*")
+ if [[ "${PID_EXECUTABLE=}" == "java" ]]; then
+ echo "process_memory_bytes{pid=\"${PID}\",pid_executable=\"${PID_EXECUTABLE}\",description=\"${DESCRIPTION}\"} ${RSS}"
+ fi
+done <<< $(ps -ax --no-headers --format=pid,rss,command --sort=-rss,pid)
diff --git a/scripts/train_data.sh b/scripts/train_data.sh
deleted file mode 100644
index a31e8609fe..0000000000
--- a/scripts/train_data.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-WORKDIR="."
-TIME_LIMIT=${1}
-
-while read prog; do
- echo "Starting features collection from $prog"
- prog="${prog%%[[:cntrl:]]}"
- while read selector; do
- echo "Starting features collection from $prog with $selector"
- selector="${selector%%[[:cntrl:]]}"
- $WORKDIR/scripts/run_contest_estimator.sh "$prog" "$TIME_LIMIT" "$selector" true
- done <"$WORKDIR/scripts/selector_list"
-done <"$WORKDIR/scripts/prog_list"
diff --git a/scripts/train_iteratively.sh b/scripts/train_iteratively.sh
deleted file mode 100644
index 842fd771bd..0000000000
--- a/scripts/train_iteratively.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-
-TIME_LIMIT=${1}
-ITERATIONS=${2}
-OUTPUT_DIR=${3}
-PYTHON_COMMAND=${4}
-
-declare -a models=("linear" "nn16" "nn32" "nn64" "nn128")
-
-WORKDIR="."
-
-echo "Start training data on heuristical based selectors"
-
-$WORKDIR/scripts/train_data.sh $TIME_LIMIT
-
-echo "Start iterative learning of models"
-
-for (( i=0; i < $ITERATIONS; i++ ))
-do
-
- echo "Start $i iteration"
-
- for model in "${models[@]}"
- do
- EXTRA_ARGS=""
- if [[ $model == *"nn"* ]]; then
- EXTRA_ARGS="--hidden_dim $(echo $model | cut -c 3-)"
- echo "EXTRA_ARGS=$EXTRA_ARGS"
- fi
-
- COMMAND="$PYTHON_COMMAND $WORKDIR/scripts/train.py --features_dir $WORKDIR/eval/features --output_dir $OUTPUT_DIR/$model/$i --prog_list $WORKDIR/scripts/prog_list --model $model $EXTRA_ARGS"
- echo "TRAINING COMMAND=$COMMAND"
- $COMMAND
- done
-
- while read prog; do
- prog="${prog%%[[:cntrl:]]}"
-
- for model in "${models[@]}"
- do
- PREDICTOR="BASE"
-
- if [[ $model == *"linear"* ]]; then
- PREDICTOR="LINEAR"
- fi
-
- $WORKDIR/scripts/run_contest_estimator.sh $prog $TIME_LIMIT "NN_REWARD_GUIDED_SELECTOR $OUTPUT_DIR/$model/$i $PREDICTOR" "true eval/features/jlearch/$model$i/$prog"
- done
- done <"$WORKDIR/scripts/prog_list"
-done
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index ac2c9d1279..0000000000
--- a/settings.gradle
+++ /dev/null
@@ -1,20 +0,0 @@
-rootProject.name = 'utbot'
-
-include 'utbot-core'
-include 'utbot-framework'
-include 'utbot-framework-api'
-include 'utbot-intellij'
-include 'utbot-sample'
-include 'utbot-fuzzers'
-include 'utbot-junit-contest'
-include 'utbot-analytics'
-include 'utbot-cli'
-include 'utbot-api'
-include 'utbot-instrumentation'
-include 'utbot-instrumentation-tests'
-
-include 'utbot-summary'
-include 'utbot-gradle'
-include 'utbot-maven'
-include 'utbot-summary-tests'
-
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000000..dda07b9caf
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,101 @@
+val projectType: String by settings
+val communityEdition: String by settings
+val ultimateEdition: String by settings
+
+val ideType: String by settings
+val buildType: String by settings
+val pycharmIdeType: String by settings
+
+val javaIde: String by settings
+val pythonIde: String by settings
+val jsIde: String by settings
+val jsBuild: String by settings
+val includeRiderInBuild: String by settings
+val goIde: String by settings
+
+pluginManagement {
+ resolutionStrategy {
+ eachPlugin {
+ if (requested.id.name == "rdgen") {
+ useModule("com.jetbrains.rd:rd-gen:${requested.version}")
+ }
+ }
+ }
+}
+
+rootProject.name = "utbot"
+
+include("utbot-core")
+include("utbot-framework")
+include("utbot-framework-api")
+include("utbot-modificators-analyzer")
+include("utbot-sample")
+include("utbot-java-fuzzing")
+include("utbot-fuzzing")
+include("utbot-junit-contest")
+include("utbot-analytics")
+include("utbot-analytics-torch")
+
+include("utbot-usvm")
+
+include("utbot-cli")
+
+include("utbot-api")
+include("utbot-instrumentation")
+include("utbot-instrumentation-tests")
+
+include("utbot-summary")
+include("utbot-gradle")
+include("utbot-maven")
+include("utbot-summary-tests")
+include("utbot-framework-test")
+include("utbot-testing")
+include("utbot-rd")
+include("utbot-android-studio")
+
+if (includeRiderInBuild.toBoolean()) {
+ include("utbot-rider")
+}
+
+include("utbot-ui-commons")
+
+include("utbot-spring-framework")
+include("utbot-spring-commons-api")
+include("utbot-spring-commons")
+include("utbot-spring-analyzer")
+include("utbot-spring-sample")
+include("utbot-spring-test")
+
+if (pycharmIdeType.split(",").contains(ideType)) {
+ include("utbot-python-pycharm")
+} else {
+ include("utbot-intellij-main")
+}
+
+if (javaIde.split(",").contains(ideType)) {
+ include("utbot-intellij")
+}
+
+if (pythonIde.split(",").contains(ideType)) {
+ include("utbot-python")
+ include("utbot-cli-python")
+ include("utbot-intellij-python")
+ include("utbot-python-parser")
+ include("utbot-python-executor")
+}
+
+if (projectType == ultimateEdition) {
+ if (jsBuild == buildType || jsIde.split(",").contains(ideType)) {
+ include("utbot-js")
+ include("utbot-cli-js")
+ include("utbot-intellij-js")
+ }
+
+ if (goIde.split(",").contains(ideType)) {
+ include("utbot-go")
+ include("utbot-cli-go")
+ include("utbot-intellij-go")
+ }
+}
+
+include("utbot-light")
diff --git a/utbot-analytics-torch/build.gradle b/utbot-analytics-torch/build.gradle
new file mode 100644
index 0000000000..572658ddc7
--- /dev/null
+++ b/utbot-analytics-torch/build.gradle
@@ -0,0 +1,48 @@
+configurations {
+ torchmodels
+}
+
+def osName = System.getProperty('os.name').toLowerCase().split()[0]
+if (osName == "mac") osName = "macosx"
+String classifier = osName + "-x86_64"
+
+evaluationDependsOn(':utbot-framework')
+compileTestJava.dependsOn tasks.getByPath(':utbot-framework:testClasses')
+
+dependencies {
+ api project(':utbot-analytics')
+ testImplementation project(':utbot-sample')
+ testImplementation group: 'junit', name: 'junit', version: junit4Version
+
+ implementation group: 'org.bytedeco', name: 'javacpp', version: javaCppVersion, classifier: "$classifier"
+ implementation group: 'org.jsoup', name: 'jsoup', version: jsoupVersion
+
+ implementation "ai.djl:api:$djlApiVersion"
+ implementation "ai.djl.pytorch:pytorch-engine:$djlApiVersion"
+ implementation "ai.djl.pytorch:pytorch-native-auto:$pytorchNativeVersion"
+
+ testImplementation project(':utbot-framework').sourceSets.test.output
+}
+
+processResources {
+ configurations.torchmodels.resolvedConfiguration.resolvedArtifacts.each { artifact ->
+ from(zipTree(artifact.getFile())) {
+ into "models"
+ }
+ }
+}
+
+jar {
+ dependsOn classes
+ manifest {
+ attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
+ }
+
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+ zip64 = true
+}
\ No newline at end of file
diff --git a/utbot-analytics-torch/readme.md b/utbot-analytics-torch/readme.md
new file mode 100644
index 0000000000..3238a2c511
--- /dev/null
+++ b/utbot-analytics-torch/readme.md
@@ -0,0 +1,10 @@
+To enable support of the `utbot-analytics-torch` models in `utbot-intellij` module the following steps should be made:
+
+- change the row `api project(':utbot-analytics')` to the `api project(':utbot-analytics-torch')` in the `build.gradle` file in the `utbot-intellij` module and uncomment it, if it's commented.
+- change the `pathSelectorType` in the `UtSettings.kt` to the `PathSelectorType.TORCH_SELECTOR`
+- don't forget the put the Torch model in the path ruled by the setting `modelPath` in the `UtSettings.kt`
+
+NOTE: for Windows you could obtain the error message related to the "engine not found problem" from DJL library during the Torch model initialization.
+The proposed solution from DJL authors includes the installation of the [Microsoft Visual C++ Redistributable.](https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)
+
+But at this moment it doesn't work on Windows at all.
\ No newline at end of file
diff --git a/utbot-analytics-torch/src/main/kotlin/org/utbot/AnalyticsTorchConfiguration.kt b/utbot-analytics-torch/src/main/kotlin/org/utbot/AnalyticsTorchConfiguration.kt
new file mode 100644
index 0000000000..7f70ec31e3
--- /dev/null
+++ b/utbot-analytics-torch/src/main/kotlin/org/utbot/AnalyticsTorchConfiguration.kt
@@ -0,0 +1,21 @@
+package org.utbot
+
+import org.utbot.analytics.EngineAnalyticsContext
+import org.utbot.features.FeatureExtractorFactoryImpl
+import org.utbot.features.FeatureProcessorWithStatesRepetitionFactory
+import org.utbot.predictors.TorchPredictorFactoryImpl
+
+/**
+ * The basic configuration of the utbot-analytics-torch module used in utbot-intellij and (as planned) in utbot-cli
+ * to implement the hidden configuration initialization to avoid direct calls of this configuration and usage of utbot-analytics-torch imports.
+ *
+ * @see
+ * Issue: Enable utbot-analytics module in utbot-intellij module
+ */
+object AnalyticsTorchConfiguration {
+ init {
+ EngineAnalyticsContext.featureProcessorFactory = FeatureProcessorWithStatesRepetitionFactory()
+ EngineAnalyticsContext.featureExtractorFactory = FeatureExtractorFactoryImpl()
+ EngineAnalyticsContext.mlPredictorFactory = TorchPredictorFactoryImpl()
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictor.kt b/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictor.kt
new file mode 100644
index 0000000000..5b0dce7047
--- /dev/null
+++ b/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictor.kt
@@ -0,0 +1,39 @@
+package org.utbot.predictors
+
+import ai.djl.Model
+import ai.djl.inference.Predictor
+import ai.djl.ndarray.NDArray
+import ai.djl.ndarray.NDList
+import ai.djl.translate.Translator
+import ai.djl.translate.TranslatorContext
+import org.utbot.analytics.MLPredictor
+import org.utbot.framework.UtSettings
+import java.io.Closeable
+import java.nio.file.Paths
+
+class TorchPredictor : MLPredictor, Closeable {
+ val model: Model
+
+ init {
+ model = Model.newInstance("model")
+ model.load(Paths.get(UtSettings.modelPath, "model.pt1"))
+ }
+
+ private val predictor: Predictor, Float> = model.newPredictor(object : Translator, Float> {
+ override fun processInput(ctx: TranslatorContext, input: List): NDList {
+ val array: NDArray = ctx.ndManager.create(input.toFloatArray())
+ return NDList(array)
+ }
+
+ override fun processOutput(ctx: TranslatorContext, list: NDList): Float = list[0].getFloat()
+ })
+
+ override fun predict(input: List): Double {
+ val reward: Float = predictor.predict(input.map { it.toFloat() }.toList())
+ return reward.toDouble()
+ }
+
+ override fun close() {
+ predictor.close()
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictorFactoryImpl.kt b/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictorFactoryImpl.kt
new file mode 100644
index 0000000000..f61fe0b1a0
--- /dev/null
+++ b/utbot-analytics-torch/src/main/kotlin/org/utbot/predictors/TorchPredictorFactoryImpl.kt
@@ -0,0 +1,11 @@
+package org.utbot.predictors
+
+import org.utbot.analytics.MLPredictorFactory
+import org.utbot.framework.UtSettings
+
+/**
+ * Creates [StateRewardPredictor], by checking the [UtSettings] configuration.
+ */
+class TorchPredictorFactoryImpl : MLPredictorFactory {
+ override operator fun invoke() = TorchPredictor()
+}
\ No newline at end of file
diff --git a/utbot-analytics-torch/src/test/kotlin/org/utbot/predictors/TorchPredictorTest.kt b/utbot-analytics-torch/src/test/kotlin/org/utbot/predictors/TorchPredictorTest.kt
new file mode 100644
index 0000000000..22d58ca158
--- /dev/null
+++ b/utbot-analytics-torch/src/test/kotlin/org/utbot/predictors/TorchPredictorTest.kt
@@ -0,0 +1,48 @@
+package org.utbot.predictors
+
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Disabled
+import org.junit.jupiter.api.Test
+import org.utbot.analytics.MLPredictor
+import org.utbot.testcheckers.withModelPath
+import kotlin.system.measureNanoTime
+
+class TorchPredictorTest {
+ @Test
+ @Disabled("Just to see the performance of predictors")
+ fun simpleTest() {
+ withModelPath("src/test/resources") {
+ val pred = TorchPredictor()
+
+ val features = listOf(0.0, 0.0)
+
+ assertEquals(5.0, pred.predict(features))
+ }
+ }
+
+ @Disabled("Just to see the performance of predictors")
+ @Test
+ fun performanceTest() {
+ val features = (1..13).map { 1.0 }.toList()
+ withModelPath("models") {
+ val averageTime = calcAverageTimeForModelPredict(::TorchPredictor, 100, features)
+ println(averageTime)
+ }
+ }
+
+ private fun calcAverageTimeForModelPredict(
+ model: () -> MLPredictor,
+ iterations: Int,
+ features: List
+ ): Double {
+ val pred = model()
+
+ (1..iterations).map {
+ pred.predict(features)
+ }
+
+ return (1..iterations)
+ .map { measureNanoTime { pred.predict(features) } }
+ .average()
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics-torch/src/test/resources/log4j2.xml b/utbot-analytics-torch/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000..7dde3c2fea
--- /dev/null
+++ b/utbot-analytics-torch/src/test/resources/log4j2.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/utbot-analytics/build.gradle b/utbot-analytics/build.gradle
index 2757b9f65d..5838ac7591 100644
--- a/utbot-analytics/build.gradle
+++ b/utbot-analytics/build.gradle
@@ -1,5 +1,3 @@
-apply from: "${parent.projectDir}/gradle/include/jvm-project.gradle"
-
configurations {
mlmodels
}
@@ -12,44 +10,31 @@ evaluationDependsOn(':utbot-framework')
compileTestJava.dependsOn tasks.getByPath(':utbot-framework:testClasses')
dependencies {
- implementation(project(":utbot-framework"))
- compile(project(':utbot-instrumentation'))
- implementation(project(':utbot-summary'))
+ api project(":utbot-framework")
testImplementation project(':utbot-sample')
- testImplementation group: 'junit', name: 'junit', version: junit4_version
+ testImplementation group: 'junit', name: 'junit', version: junit4Version
- implementation "com.github.UnitTestBot:soot:${soot_commit_hash}"
+ implementation("org.unittestbot.soot:soot-utbot-fork:${sootVersion}") {
+ exclude group:'com.google.guava', module:'guava'
+ }
implementation group: 'com.github.haifengl', name: 'smile-kotlin', version: '2.6.0'
implementation group: 'com.github.haifengl', name: 'smile-plot', version: '2.6.0'
implementation group: 'com.github.haifengl', name: 'smile-core', version: '2.6.0'
implementation group: 'com.github.haifengl', name: 'smile-interpolation', version: '2.6.0'
- implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlin_logging_version
+ implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
- implementation group: 'org.bytedeco', name: 'arpack-ng', version: "3.7.0-1.5.4", classifier: "$classifier"
- implementation group: 'org.bytedeco', name: 'openblas', version: "0.3.10-1.5.4", classifier: "$classifier"
- implementation group: 'org.bytedeco', name: 'javacpp', version: javacpp_version, classifier: "$classifier"
+ implementation group: 'org.bytedeco', name: 'arpack-ng', version: arpackNgVersion, classifier: "$classifier"
+ implementation group: 'org.bytedeco', name: 'openblas', version: openblasVersion, classifier: "$classifier"
implementation group: 'tech.tablesaw', name: 'tablesaw-core', version: '0.38.2'
implementation group: 'tech.tablesaw', name: 'tablesaw-jsplot', version: '0.38.2'
implementation group: 'org.apache.commons', name: 'commons-text', version: '1.9'
-
implementation group: 'com.github.javaparser', name: 'javaparser-core', version: '3.22.1'
- implementation group: 'org.jsoup', name: 'jsoup', version: jsoup_version
-
- implementation "ai.djl:api:$djl_api_version"
- implementation "ai.djl.pytorch:pytorch-engine:$djl_api_version"
- implementation "ai.djl.pytorch:pytorch-native-auto:$pytorch_native_version"
-
- testCompile project(':utbot-framework').sourceSets.test.output
-}
-
-test {
- useJUnitPlatform {
- excludeTags 'Summary'
- }
+ testImplementation project(':utbot-testing')
+ testImplementation project(':utbot-framework').sourceSets.test.output
}
processResources {
@@ -60,15 +45,27 @@ processResources {
}
}
-jar {
- dependsOn classes
- manifest {
- attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
- }
-
- from {
- configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
- }
-
- duplicatesStrategy = DuplicatesStrategy.EXCLUDE
-}
\ No newline at end of file
+// TODO if you need utbot-analytics fat jar, use shadow jar to create a SEPARATE task for a fat jar.
+// Do not use main jar for a fat jar, because it breaks Gradle conflict resolution, here's how:
+// 1. utbot-analytics depends on library A version 1.0 (and adds it to own main jar)
+// 2. utbot-junit-contest depends on utbot-analytics and library A version 1.1
+// 3. Both library A version 1.0 and version 1.1 end up on the classpath and it's a matter of chance which one is earlier
+// If utbot-analytics were to only declare its dependency on library A version 1.0 and not force it by adding it to a
+// main jar, then Gradle would be able to recognize the conflict of library A version 1.0 and version 1.1 and resolve
+// it according to a conflict resolution strategy, which by default picks the latest version, which works in most cases.
+// But if you put library A version 1.0 into some fat jar, Gradle will no longer be able to exclude it from the fat jar
+// in favor of a newer version when it needs to resolve dependency conflicts.
+//jar {
+// dependsOn classes
+// manifest {
+// attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
+// }
+//
+// dependsOn configurations.runtimeClasspath
+// from {
+// configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+// }
+//
+// duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+// zip64 = true
+//}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/AnalyticsConfiguration.kt b/utbot-analytics/src/main/kotlin/org/utbot/AnalyticsConfiguration.kt
new file mode 100644
index 0000000000..58e0df80b0
--- /dev/null
+++ b/utbot-analytics/src/main/kotlin/org/utbot/AnalyticsConfiguration.kt
@@ -0,0 +1,21 @@
+package org.utbot
+
+import org.utbot.analytics.EngineAnalyticsContext
+import org.utbot.features.FeatureExtractorFactoryImpl
+import org.utbot.features.FeatureProcessorWithStatesRepetitionFactory
+import org.utbot.predictors.MLPredictorFactoryImpl
+
+/**
+ * The basic configuration of the utbot-analytics module used in utbot-intellij and (as planned) in utbot-cli
+ * to implement the hidden configuration initialization to avoid direct calls of this configuration and usage of utbot-analytics imports.
+ *
+ * @see
+ * Issue: Enable utbot-analytics module in utbot-intellij module
+ */
+object AnalyticsConfiguration {
+ init {
+ EngineAnalyticsContext.featureProcessorFactory = FeatureProcessorWithStatesRepetitionFactory()
+ EngineAnalyticsContext.featureExtractorFactory = FeatureExtractorFactoryImpl()
+ EngineAnalyticsContext.mlPredictorFactory = MLPredictorFactoryImpl()
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureExtractorImpl.kt b/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureExtractorImpl.kt
index 6786c9847a..ddf1322659 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureExtractorImpl.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureExtractorImpl.kt
@@ -1,7 +1,7 @@
package org.utbot.features
import org.utbot.analytics.FeatureExtractor
-import org.utbot.engine.ExecutionState
+import org.utbot.engine.state.ExecutionState
import org.utbot.engine.InterProceduralUnitGraph
import org.utbot.engine.selectors.strategies.StatementsStatistics
import org.utbot.engine.selectors.strategies.SubpathStatistics
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureProcessorWithStatesRepetition.kt b/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureProcessorWithStatesRepetition.kt
index 49f9427678..4c80f18dda 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureProcessorWithStatesRepetition.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/features/FeatureProcessorWithStatesRepetition.kt
@@ -2,7 +2,7 @@ package org.utbot.features
import org.utbot.analytics.EngineAnalyticsContext
import org.utbot.analytics.FeatureProcessor
-import org.utbot.engine.ExecutionState
+import org.utbot.engine.state.ExecutionState
import org.utbot.engine.InterProceduralUnitGraph
import org.utbot.framework.UtSettings
import soot.jimple.Stmt
@@ -107,7 +107,7 @@ class FeatureProcessorWithStatesRepetition(
}
}
-internal class RewardEstimator {
+class RewardEstimator {
fun calculateRewards(testCases: List): Map {
val rewards = mutableMapOf()
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/features/UtExpressionStructureCounter.kt b/utbot-analytics/src/main/kotlin/org/utbot/features/UtExpressionStructureCounter.kt
index f6f209875c..b1c5661919 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/features/UtExpressionStructureCounter.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/features/UtExpressionStructureCounter.kt
@@ -34,21 +34,6 @@ val featureIndex = listOf(
UtBoolOpExpression::class.simpleName,
UtIsExpression::class.simpleName,
UtIteExpression::class.simpleName,
- UtStringConst::class.simpleName,
- UtConcatExpression::class.simpleName,
- UtConvertToString::class.simpleName,
- UtStringLength::class.simpleName,
- UtStringPositiveLength::class.simpleName,
- UtStringCharAt::class.simpleName,
- UtStringEq::class.simpleName,
- UtSubstringExpression::class.simpleName,
- UtReplaceExpression::class.simpleName,
- UtStartsWithExpression::class.simpleName,
- UtEndsWithExpression::class.simpleName,
- UtIndexOfExpression::class.simpleName,
- UtContainsExpression::class.simpleName,
- UtToStringExpression::class.simpleName,
- UtSeqLiteral::class.simpleName,
TREES,
MAX_NODES,
MIN_NODES,
@@ -160,6 +145,7 @@ class UtExpressionStructureCounter(private val input: Iterable) :
override fun visit(expr: UtAddNoOverflowExpression) = multipleExpressions(expr.left, expr.right)
override fun visit(expr: UtSubNoOverflowExpression) = multipleExpressions(expr.left, expr.right)
+ override fun visit(expr: UtMulNoOverflowExpression)= multipleExpressions(expr.left, expr.right)
override fun visit(expr: UtNegExpression): NestStat {
val stat = buildState(expr.variable.expr)
@@ -168,6 +154,13 @@ class UtExpressionStructureCounter(private val input: Iterable) :
return stat
}
+ override fun visit(expr: UtBvNotExpression): NestStat {
+ val stat = buildState(expr.variable.expr)
+ stat.level++
+ stat.nodes++
+ return stat
+ }
+
override fun visit(expr: UtCastExpression): NestStat {
val stat = buildState(expr.variable.expr)
stat.level++
@@ -216,59 +209,6 @@ class UtExpressionStructureCounter(private val input: Iterable) :
)
}
- //const string value
- override fun visit(expr: UtStringConst) = NestStat()
-
- override fun visit(expr: UtConcatExpression) = multipleExpression(expr.parts)
-
- override fun visit(expr: UtConvertToString): NestStat {
- val stat = buildState(expr.expression)
- stat.level++
- stat.nodes++
- return stat
- }
-
- override fun visit(expr: UtStringToInt): NestStat {
- val stat = buildState(expr.expression)
- stat.level++
- stat.nodes++
- return stat
- }
-
- override fun visit(expr: UtStringLength): NestStat {
- val stat = buildState(expr.string)
- stat.level++
- stat.nodes++
- return stat
- }
-
- override fun visit(expr: UtStringPositiveLength): NestStat {
- val stat = buildState(expr.string)
- stat.level++
- stat.nodes++
- return stat
- }
-
- override fun visit(expr: UtStringCharAt) = multipleExpressions(expr.string, expr.index)
-
- override fun visit(expr: UtStringEq) = multipleExpressions(expr.left, expr.right)
-
- override fun visit(expr: UtSubstringExpression) = multipleExpressions(expr.string, expr.beginIndex, expr.length)
-
- override fun visit(expr: UtReplaceExpression) = multipleExpressions(expr.string, expr.regex, expr.replacement)
-
- override fun visit(expr: UtStartsWithExpression) = multipleExpressions(expr.string, expr.prefix)
-
- override fun visit(expr: UtEndsWithExpression) = multipleExpressions(expr.string, expr.suffix)
-
- override fun visit(expr: UtIndexOfExpression) = multipleExpressions(expr.string, expr.substring)
-
- override fun visit(expr: UtContainsExpression) = multipleExpressions(expr.string, expr.substring)
-
- override fun visit(expr: UtToStringExpression) = multipleExpressions(expr.notNullExpr, expr.isNull)
-
- override fun visit(expr: UtSeqLiteral) = NestStat()
-
private fun multipleExpressions(vararg expressions: UtExpression) = multipleExpression(expressions.toList())
private fun multipleExpression(expressions: List): NestStat {
@@ -311,14 +251,6 @@ class UtExpressionStructureCounter(private val input: Iterable) :
override fun visit(expr: UtArrayApplyForAll): NestStat {
return NestStat()
}
-
- override fun visit(expr: UtStringToArray): NestStat {
- return NestStat()
- }
-
- override fun visit(expr: UtArrayToString): NestStat {
- return NestStat()
- }
}
data class NestStat(var nodes: Int = 1, var level: Int = 1)
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearRegressionPredictor.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearRegressionPredictor.kt
new file mode 100644
index 0000000000..731480a8da
--- /dev/null
+++ b/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearRegressionPredictor.kt
@@ -0,0 +1,72 @@
+package org.utbot.predictors
+
+import org.utbot.analytics.MLPredictor
+import mu.KotlinLogging
+import org.utbot.framework.PathSelectorType
+import org.utbot.framework.UtSettings
+import org.utbot.predictors.util.PredictorLoadingException
+import org.utbot.predictors.util.WeightsLoadingException
+import org.utbot.predictors.util.splitByCommaIntoDoubleArray
+import smile.math.MathEx.dot
+import smile.math.matrix.Matrix
+import java.io.File
+
+private const val DEFAULT_WEIGHT_PATH = "linear.txt"
+
+private val logger = KotlinLogging.logger {}
+
+/**
+ * Last weight is bias
+ */
+private fun loadWeights(path: String): Matrix {
+ val weightsFile = File("${UtSettings.modelPath}/${path}")
+ lateinit var weightsArray: DoubleArray
+
+ try {
+ if (!weightsFile.exists()) {
+ error("There is no file with weights with path: ${weightsFile.absolutePath}")
+ }
+
+ weightsArray = weightsFile.readText().splitByCommaIntoDoubleArray()
+ } catch (e: Exception) {
+ throw WeightsLoadingException(e)
+ }
+
+ return Matrix(weightsArray)
+}
+
+class LinearRegressionPredictor(weightsPath: String = DEFAULT_WEIGHT_PATH, scalerPath: String = DEFAULT_SCALER_PATH) :
+ MLPredictor {
+ private lateinit var weights: Matrix
+ private lateinit var scaler: StandardScaler
+
+ init {
+ try {
+ weights = loadWeights(weightsPath)
+ scaler = loadScaler(scalerPath)
+ } catch (e: PredictorLoadingException) {
+ logger.info(e) {
+ "Error while initialization of LinearRegressionPredictor. Changing pathSelectorType on INHERITORS_SELECTOR"
+ }
+ UtSettings.pathSelectorType = PathSelectorType.INHERITORS_SELECTOR
+ }
+ }
+
+ fun predict(input: List>): List {
+ // add 1 to each feature vector
+ val matrixValues = input
+ .map { (it + 1.0).toDoubleArray() }
+ .toTypedArray()
+
+ val X = Matrix(matrixValues)
+
+ return X.mm(weights).col(0).toList()
+ }
+
+ override fun predict(input: List): Double {
+ var inputArray = Matrix(input.toDoubleArray()).sub(scaler.mean).div(scaler.variance).col(0)
+ inputArray += 1.0
+
+ return dot(inputArray, weights.col(0))
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearStateRewardPredictor.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearStateRewardPredictor.kt
deleted file mode 100644
index 2d3dc434de..0000000000
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/LinearStateRewardPredictor.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.utbot.predictors
-
-import org.utbot.analytics.StateRewardPredictor
-import mu.KotlinLogging
-import org.utbot.framework.PathSelectorType
-import org.utbot.framework.UtSettings
-import org.utbot.predictors.util.PredictorLoadingException
-import org.utbot.predictors.util.WeightsLoadingException
-import org.utbot.predictors.util.splitByCommaIntoDoubleArray
-import smile.math.MathEx.dot
-import smile.math.matrix.Matrix
-import java.io.File
-
-private const val DEFAULT_WEIGHT_PATH = "linear.txt"
-
-private val logger = KotlinLogging.logger {}
-
-/**
- * Last weight is bias
- */
-private fun loadWeights(path: String): Matrix {
- val weightsFile = File("${UtSettings.rewardModelPath}/${path}")
- lateinit var weightsArray: DoubleArray
-
- try {
- if (!weightsFile.exists()) {
- error("There is no file with weights with path: ${weightsFile.absolutePath}")
- }
-
- weightsArray = weightsFile.readText().splitByCommaIntoDoubleArray()
- } catch (e: Exception) {
- throw WeightsLoadingException(e)
- }
-
- return Matrix(weightsArray)
-}
-
-class LinearStateRewardPredictor(weightsPath: String = DEFAULT_WEIGHT_PATH, scalerPath: String = DEFAULT_SCALER_PATH) :
- StateRewardPredictor {
- private lateinit var weights: Matrix
- private lateinit var scaler: StandardScaler
-
- init {
- try {
- weights = loadWeights(weightsPath)
- scaler = loadScaler(scalerPath)
- } catch (e: PredictorLoadingException) {
- logger.info(e) {
- "Error while initialization of LinearStateRewardPredictor. Changing pathSelectorType on INHERITORS_SELECTOR"
- }
- UtSettings.pathSelectorType = PathSelectorType.INHERITORS_SELECTOR
- }
- }
-
- fun predict(input: List>): List {
- // add 1 to each feature vector
- val matrixValues = input
- .map { (it + 1.0).toDoubleArray() }
- .toTypedArray()
-
- val X = Matrix(matrixValues)
-
- return X.mm(weights).col(0).toList()
- }
-
- override fun predict(input: List): Double {
- var inputArray = Matrix(input.toDoubleArray()).sub(scaler.mean).div(scaler.variance).col(0)
- inputArray += 1.0
-
- return dot(inputArray, weights.col(0))
- }
-}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/MultilayerPerceptronPredictor.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/MultilayerPerceptronPredictor.kt
new file mode 100644
index 0000000000..978f5b0267
--- /dev/null
+++ b/utbot-analytics/src/main/kotlin/org/utbot/predictors/MultilayerPerceptronPredictor.kt
@@ -0,0 +1,44 @@
+package org.utbot.predictors
+
+import mu.KotlinLogging
+import org.utbot.analytics.MLPredictor
+import org.utbot.framework.PathSelectorType
+import org.utbot.framework.UtSettings
+import org.utbot.predictors.util.PredictorLoadingException
+import smile.math.matrix.Matrix
+
+private const val DEFAULT_MODEL_PATH = "nn.json"
+
+private val logger = KotlinLogging.logger {}
+
+private fun getModel(path: String) = buildModel(loadModel(path))
+
+class MultilayerPerceptronPredictor(modelPath: String = DEFAULT_MODEL_PATH, scalerPath: String = DEFAULT_SCALER_PATH) :
+ MLPredictor {
+ private lateinit var nn: FeedForwardNetwork
+ private lateinit var scaler: StandardScaler
+
+ init {
+ try {
+ nn = getModel(modelPath)
+ scaler = loadScaler(scalerPath)
+ } catch (e: PredictorLoadingException) {
+ logger.info(e) {
+ "Error while initialization of MultilayerPerceptronPredictor. Changing pathSelectorType on INHERITORS_SELECTOR"
+ }
+ UtSettings.pathSelectorType = PathSelectorType.INHERITORS_SELECTOR
+ }
+ }
+
+ override fun predict(input: List): Double {
+ var inputArray = input.toDoubleArray()
+ inputArray = Matrix(inputArray).sub(scaler.mean).div(scaler.variance).col(0)
+
+ nn.operations.forEach {
+ inputArray = it(inputArray)
+ }
+
+ check(inputArray.size == 1) { "Neural network have several outputs" }
+ return inputArray[0]
+ }
+}
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNJson.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNJson.kt
index d14034e64d..ed0066ec06 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNJson.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNJson.kt
@@ -33,7 +33,7 @@ data class NNJson(
}
internal fun loadModel(path: String): NNJson {
- val modelFile = Paths.get(UtSettings.rewardModelPath, path).toFile()
+ val modelFile = Paths.get(UtSettings.modelPath, path).toFile()
lateinit var nnJson: NNJson
try {
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNStateRewardPredictorBase.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNStateRewardPredictorBase.kt
deleted file mode 100644
index d8e77c4d23..0000000000
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/NNStateRewardPredictorBase.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.utbot.predictors
-
-import mu.KotlinLogging
-import org.utbot.analytics.StateRewardPredictor
-import org.utbot.framework.PathSelectorType
-import org.utbot.framework.UtSettings
-import org.utbot.predictors.util.PredictorLoadingException
-import smile.math.matrix.Matrix
-
-private const val DEFAULT_MODEL_PATH = "nn.json"
-
-private val logger = KotlinLogging.logger {}
-
-private fun getModel(path: String) = buildModel(loadModel(path))
-
-class NNStateRewardPredictorBase(modelPath: String = DEFAULT_MODEL_PATH, scalerPath: String = DEFAULT_SCALER_PATH) :
- StateRewardPredictor {
- private lateinit var nn: FeedForwardNetwork
- private lateinit var scaler: StandardScaler
-
- init {
- try {
- nn = getModel(modelPath)
- scaler = loadScaler(scalerPath)
- } catch (e: PredictorLoadingException) {
- logger.info(e) {
- "Error while initialization of NNStateRewardPredictorBase. Changing pathSelectorType on INHERITORS_SELECTOR"
- }
- UtSettings.pathSelectorType = PathSelectorType.INHERITORS_SELECTOR
- }
- }
-
- override fun predict(input: List): Double {
- var inputArray = input.toDoubleArray()
- inputArray = Matrix(inputArray).sub(scaler.mean).div(scaler.variance).col(0)
-
- nn.operations.forEach {
- inputArray = it(inputArray)
- }
-
- check(inputArray.size == 1) { "Neural network have several outputs" }
- return inputArray[0]
- }
-}
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorFactory.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorFactory.kt
index c0b7dffe7c..0c6d3e12a0 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorFactory.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorFactory.kt
@@ -1,16 +1,16 @@
package org.utbot.predictors
-import org.utbot.analytics.StateRewardPredictorFactory
-import org.utbot.framework.StateRewardPredictorType
+import org.utbot.analytics.MLPredictor
+import org.utbot.analytics.MLPredictorFactory
+import org.utbot.framework.MLPredictorType
import org.utbot.framework.UtSettings
/**
- * Creates [StateRewardPredictor], by checking the [UtSettings] configuration.
+ * Creates [MLPredictor], by checking the [UtSettings] configuration.
*/
-class StateRewardPredictorFactoryImpl : StateRewardPredictorFactory {
- override operator fun invoke() = when (UtSettings.stateRewardPredictorType) {
- StateRewardPredictorType.BASE -> NNStateRewardPredictorBase()
- StateRewardPredictorType.TORCH -> StateRewardPredictorTorch()
- StateRewardPredictorType.LINEAR -> LinearStateRewardPredictor()
+class MLPredictorFactoryImpl : MLPredictorFactory {
+ override operator fun invoke() = when (UtSettings.mlPredictorType) {
+ MLPredictorType.MLP -> MultilayerPerceptronPredictor()
+ MLPredictorType.LINREG -> LinearRegressionPredictor()
}
}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorTorch.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorTorch.kt
deleted file mode 100644
index f0cfe17571..0000000000
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/StateRewardPredictorTorch.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.utbot.predictors
-
-import ai.djl.Model
-import ai.djl.inference.Predictor
-import ai.djl.ndarray.NDArray
-import ai.djl.ndarray.NDList
-import ai.djl.translate.Translator
-import ai.djl.translate.TranslatorContext
-import org.utbot.analytics.StateRewardPredictor
-import org.utbot.framework.UtSettings
-import java.io.Closeable
-import java.nio.file.Paths
-
-class StateRewardPredictorTorch : StateRewardPredictor, Closeable {
- val model: Model = Model.newInstance("model")
-
- init {
- model.load(Paths.get(UtSettings.rewardModelPath, "model.pt1"))
- }
-
- private val predictor: Predictor, Float> = model.newPredictor(object : Translator, Float> {
- override fun processInput(ctx: TranslatorContext, input: List): NDList {
- val array: NDArray = ctx.ndManager.create(input.toFloatArray())
- return NDList(array)
- }
-
- override fun processOutput(ctx: TranslatorContext, list: NDList): Float = list[0].getFloat()
- })
-
- override fun predict(input: List): Double {
- val reward: Float = predictor.predict(input.map { it.toFloat() }.toList())
- return reward.toDouble()
- }
-
- override fun close() {
- predictor.close()
- }
-}
\ No newline at end of file
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/predictors/scalers.kt b/utbot-analytics/src/main/kotlin/org/utbot/predictors/scalers.kt
index b65e78d478..db38bc7743 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/predictors/scalers.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/predictors/scalers.kt
@@ -13,7 +13,7 @@ data class StandardScaler(val mean: Matrix?, val variance: Matrix?)
internal fun loadScaler(path: String): StandardScaler =
try {
- Paths.get(UtSettings.rewardModelPath, path).toFile().bufferedReader().use {
+ Paths.get(UtSettings.modelPath, path).toFile().bufferedReader().use {
val mean = it.readLine()?.splitByCommaIntoDoubleArray() ?: error("There is not mean in $path")
val variance = it.readLine()?.splitByCommaIntoDoubleArray() ?: error("There is not variance in $path")
StandardScaler(Matrix(mean), Matrix(variance))
diff --git a/utbot-analytics/src/main/kotlin/org/utbot/visual/AbstractHtmlReport.kt b/utbot-analytics/src/main/kotlin/org/utbot/visual/AbstractHtmlReport.kt
index 9f1673a57e..ce7ff03e6f 100644
--- a/utbot-analytics/src/main/kotlin/org/utbot/visual/AbstractHtmlReport.kt
+++ b/utbot-analytics/src/main/kotlin/org/utbot/visual/AbstractHtmlReport.kt
@@ -1,5 +1,6 @@
package org.utbot.visual
+import org.utbot.common.dateTimeFormatter
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
@@ -7,8 +8,6 @@ import java.time.format.DateTimeFormatter
abstract class AbstractHtmlReport(bodyWidth: Int = 600) {
val builder = HtmlBuilder(bodyMaxWidth = bodyWidth)
- private val dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy_HH-mm-ss")
-
private fun nameWithDate() =
"logs/Report_" + dateTimeFormatter.format(LocalDateTime.now()) + ".html"
diff --git a/utbot-analytics/src/main/resources/config.properties b/utbot-analytics/src/main/resources/config.properties
new file mode 100644
index 0000000000..e71418b7e6
--- /dev/null
+++ b/utbot-analytics/src/main/resources/config.properties
@@ -0,0 +1,3 @@
+project=antlr
+selectors=random_120,cpi_120,fork_120,inheritors_120,random_120
+covStatistics=logs/covStatistics,logs/covStatistics
\ No newline at end of file
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/analytics/UtBotPredictorTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/analytics/UtBotPredictorTest.kt
deleted file mode 100644
index 38e68a8cbb..0000000000
--- a/utbot-analytics/src/test/kotlin/org/utbot/analytics/UtBotPredictorTest.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.utbot.analytics
-
-import org.junit.jupiter.api.Test
-
-internal class UtBotPredictorTest {
-
- @Test
- fun predict() {
- }
-}
\ No newline at end of file
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/features/FeatureProcessorWithRepetitionTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/features/FeatureProcessorWithRepetitionTest.kt
index 3c0176fd3e..b2020d374b 100644
--- a/utbot-analytics/src/test/kotlin/org/utbot/features/FeatureProcessorWithRepetitionTest.kt
+++ b/utbot-analytics/src/test/kotlin/org/utbot/features/FeatureProcessorWithRepetitionTest.kt
@@ -5,13 +5,13 @@ import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.utbot.analytics.EngineAnalyticsContext
-import org.utbot.examples.AbstractTestCaseGeneratorTest
-import org.utbot.examples.eq
-import org.utbot.examples.withFeaturePath
+import org.utbot.testcheckers.eq
+import org.utbot.testcheckers.withFeaturePath
+import org.utbot.testing.UtValueTestCaseChecker
import java.io.File
import java.io.FileInputStream
-class FeatureProcessorWithRepetitionTest : AbstractTestCaseGeneratorTest(OnePath::class, false) {
+class FeatureProcessorWithRepetitionTest: UtValueTestCaseChecker(OnePath::class, false) {
companion object {
const val featureDir = "src/test/resources/features"
fun reward(coverage: Double, time: Double) = RewardEstimator.reward(coverage, time)
@@ -96,6 +96,11 @@ class FeatureProcessorWithRepetitionTest : AbstractTestCaseGeneratorTest(OnePath
/**
* Test, that we correctly add test cases and dump them into file
+ *
+ * NOTE: works only if the
+ * ```
+ * UtSettings.pathSelectorType == PathSelectorType.INHERITORS_SELECTOR
+ * ```
*/
@Test
fun addTestCaseTest() {
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearRegressionPredictorTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearRegressionPredictorTest.kt
new file mode 100644
index 0000000000..32f36b05b3
--- /dev/null
+++ b/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearRegressionPredictorTest.kt
@@ -0,0 +1,45 @@
+package org.utbot.predictors
+
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Test
+import org.utbot.framework.PathSelectorType
+import org.utbot.framework.UtSettings
+import org.utbot.testcheckers.withPathSelectorType
+import org.utbot.testcheckers.withModelPath
+
+class LinearRegressionPredictorTest {
+ @Test
+ fun simpleTest() {
+ withModelPath("src/test/resources") {
+ val pred = LinearRegressionPredictor()
+
+ val features = listOf(
+ listOf(2.0, 3.0),
+ listOf(2.0, 3.0)
+ )
+
+ assertEquals(listOf(6.0, 6.0), pred.predict(features))
+ }
+ }
+
+ @Test
+ fun wrongFormatTest() {
+ withModelPath("src/test/resources") {
+ withPathSelectorType(PathSelectorType.ML_SELECTOR) {
+ LinearRegressionPredictor("wrong_format_linear.txt")
+ assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
+ }
+ }
+ }
+
+ @Test
+ fun simpleTestNotBatch() {
+ withModelPath("src/test/resources") {
+ val pred = LinearRegressionPredictor()
+
+ val features = listOf(2.0, 3.0)
+
+ assertEquals(6.0, pred.predict(features))
+ }
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearStateRewardPredictorTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearStateRewardPredictorTest.kt
deleted file mode 100644
index 6a68e83212..0000000000
--- a/utbot-analytics/src/test/kotlin/org/utbot/predictors/LinearStateRewardPredictorTest.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.utbot.predictors
-
-import org.junit.jupiter.api.Assertions.assertEquals
-import org.junit.jupiter.api.Test
-import org.utbot.examples.withPathSelectorType
-import org.utbot.examples.withRewardModelPath
-import org.utbot.framework.PathSelectorType
-import org.utbot.framework.UtSettings
-
-class LinearStateRewardPredictorTest {
- @Test
- fun simpleTest() {
- withRewardModelPath("src/test/resources") {
- val pred = LinearStateRewardPredictor()
-
- val features = listOf(
- listOf(2.0, 3.0),
- listOf(2.0, 3.0)
- )
-
- assertEquals(listOf(6.0, 6.0), pred.predict(features))
- }
- }
-
- @Test
- fun wrongFormatTest() {
- withRewardModelPath("src/test/resources") {
- withPathSelectorType(PathSelectorType.NN_REWARD_GUIDED_SELECTOR) {
- LinearStateRewardPredictor("wrong_format_linear.txt")
- assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
- }
- }
- }
-
- @Test
- fun simpleTestNotBatch() {
- withRewardModelPath("src/test/resources") {
- val pred = LinearStateRewardPredictor()
-
- val features = listOf(2.0, 3.0)
-
- assertEquals(6.0, pred.predict(features))
- }
- }
-}
\ No newline at end of file
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/predictors/MultilayerPerceptronPredictorTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/predictors/MultilayerPerceptronPredictorTest.kt
new file mode 100644
index 0000000000..c6829c6b56
--- /dev/null
+++ b/utbot-analytics/src/test/kotlin/org/utbot/predictors/MultilayerPerceptronPredictorTest.kt
@@ -0,0 +1,80 @@
+package org.utbot.predictors
+
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Disabled
+import org.junit.jupiter.api.Test
+import org.utbot.analytics.MLPredictor
+import org.utbot.framework.PathSelectorType
+import org.utbot.framework.UtSettings
+import org.utbot.testcheckers.withPathSelectorType
+import org.utbot.testcheckers.withModelPath
+import kotlin.system.measureNanoTime
+
+class MultilayerPerceptronPredictorTest {
+ @Test
+ fun simpleTest() {
+ withModelPath("src/test/resources") {
+ val pred = MultilayerPerceptronPredictor()
+
+ val features = listOf(0.0, 0.0)
+
+ assertEquals(5.0, pred.predict(features))
+ }
+ }
+
+ @Disabled("Just to see the performance of predictors")
+ @Test
+ fun performanceTest() {
+ val features = (1..13).map { 1.0 }.toList()
+ withModelPath("models\\test\\0") {
+ val averageTime = calcAverageTimeForModelPredict(::MultilayerPerceptronPredictor, 100, features)
+ println(averageTime)
+ }
+ }
+
+ internal fun calcAverageTimeForModelPredict(
+ model: () -> MLPredictor,
+ iterations: Int,
+ features: List
+ ): Double {
+ val pred = model()
+
+ (1..iterations).map {
+ pred.predict(features)
+ }
+
+ return (1..iterations)
+ .map { measureNanoTime { pred.predict(features) } }
+ .average()
+ }
+
+ @Test
+ fun corruptedModelFileTest() {
+ withModelPath("src/test/resources") {
+ withPathSelectorType(PathSelectorType.ML_SELECTOR) {
+ MultilayerPerceptronPredictor(modelPath = "corrupted_nn.json")
+ assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
+ }
+ }
+ }
+
+ @Test
+ fun emptyModelFileTest() {
+ withModelPath("src/test/resources") {
+ withPathSelectorType(PathSelectorType.ML_SELECTOR) {
+ MultilayerPerceptronPredictor(modelPath = "empty_nn.json")
+ assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
+ }
+ }
+ }
+
+ @Test
+ fun corruptedScalerTest() {
+ withModelPath("src/test/resources") {
+ withPathSelectorType(PathSelectorType.ML_SELECTOR) {
+ MultilayerPerceptronPredictor(scalerPath = "corrupted_scaler.txt")
+ assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/utbot-analytics/src/test/kotlin/org/utbot/predictors/NNStateRewardPredictorTest.kt b/utbot-analytics/src/test/kotlin/org/utbot/predictors/NNStateRewardPredictorTest.kt
deleted file mode 100644
index 42dd3bac40..0000000000
--- a/utbot-analytics/src/test/kotlin/org/utbot/predictors/NNStateRewardPredictorTest.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.utbot.predictors
-
-import org.junit.jupiter.api.Assertions.assertEquals
-import org.junit.jupiter.api.Disabled
-import org.junit.jupiter.api.Test
-import org.utbot.examples.withPathSelectorType
-import org.utbot.analytics.StateRewardPredictor
-import org.utbot.examples.withRewardModelPath
-import org.utbot.framework.PathSelectorType
-import org.utbot.framework.UtSettings
-import kotlin.system.measureNanoTime
-
-class NNStateRewardPredictorTest {
- @Test
- fun simpleTest() {
- withRewardModelPath("src/test/resources") {
- val pred = NNStateRewardPredictorBase()
-
- val features = listOf(0.0, 0.0)
-
- assertEquals(5.0, pred.predict(features))
- }
- }
-
- @Disabled("Just to see the performance of predictors")
- @Test
- fun performanceTest() {
- val features = (1..13).map { 1.0 }.toList()
- withRewardModelPath("models\\test\\0") {
- val averageTime = calcAverageTimeForModelPredict(::NNStateRewardPredictorBase, 100, features)
- println(averageTime)
- }
-
-
- withRewardModelPath("models") {
- val averageTime = calcAverageTimeForModelPredict(::StateRewardPredictorTorch, 100, features)
- println(averageTime)
- }
- }
-
- private fun calcAverageTimeForModelPredict(
- model: () -> StateRewardPredictor,
- iterations: Int,
- features: List
- ): Double {
- val pred = model()
-
- (1..iterations).map {
- pred.predict(features)
- }
-
- return (1..iterations)
- .map { measureNanoTime { pred.predict(features) } }
- .average()
- }
-
- @Test
- fun corruptedModelFileTest() {
- withRewardModelPath("src/test/resources") {
- withPathSelectorType(PathSelectorType.NN_REWARD_GUIDED_SELECTOR) {
- NNStateRewardPredictorBase(modelPath = "corrupted_nn.json")
- assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
- }
- }
- }
-
- @Test
- fun emptyModelFileTest() {
- withRewardModelPath("src/test/resources") {
- withPathSelectorType(PathSelectorType.NN_REWARD_GUIDED_SELECTOR) {
- NNStateRewardPredictorBase(modelPath = "empty_nn.json")
- assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
- }
- }
- }
-
- @Test
- fun corruptedScalerTest() {
- withRewardModelPath("src/test/resources") {
- withPathSelectorType(PathSelectorType.NN_REWARD_GUIDED_SELECTOR) {
- NNStateRewardPredictorBase(scalerPath = "corrupted_scaler.txt")
- assertEquals(PathSelectorType.INHERITORS_SELECTOR, UtSettings.pathSelectorType)
- }
- }
- }
-}
\ No newline at end of file
diff --git a/utbot-android-studio/build.gradle.kts b/utbot-android-studio/build.gradle.kts
new file mode 100644
index 0000000000..96197ffc94
--- /dev/null
+++ b/utbot-android-studio/build.gradle.kts
@@ -0,0 +1,46 @@
+plugins {
+ id("org.jetbrains.intellij") version "1.13.1"
+}
+
+intellij {
+ /*
+ The list of Android Studio releases can be found here https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html
+ For each release a compatible Intellij Idea version can be found in the right column. Specify it in "version.set("...")
+
+ NOTE!!!
+ We use Android Studio Chipmunk (2021.2.1), although Android Studio Dolphin (2021.3.1) has been released.
+ The reason is that a version of Kotlin plugin compatible with Android Studio is required.
+ The list of Kotlin plugin releases can be found here https://plugins.jetbrains.com/plugin/6954-kotlin/versions/stable
+ The last compatible with AS plugin version on 19 Oct 2022 is Kotlin 212-1.7.10-release-333-AS5457.46,
+ it is not compatible with Dolphin release (https://plugins.jetbrains.com/plugin/6954-kotlin/versions/stable/193255).
+ */
+
+ val androidPlugins = listOf("org.jetbrains.android")
+
+ val jvmPlugins = listOf(
+ "java",
+ "org.jetbrains.kotlin:212-1.7.10-release-333-AS5457.46"
+ )
+
+ plugins.set(jvmPlugins + androidPlugins)
+
+ version.set("212.5712.43")
+ type.set("IC")
+}
+
+project.tasks.asMap["runIde"]?.enabled = false
+
+tasks {
+ compileKotlin {
+ kotlinOptions {
+ jvmTarget = "11"
+ freeCompilerArgs = freeCompilerArgs + listOf("-Xallow-result-return-type", "-Xsam-conversions=class")
+ allWarningsAsErrors = false
+ }
+ }
+
+ java {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+}
\ No newline at end of file
diff --git a/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifier.kt b/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifier.kt
new file mode 100644
index 0000000000..4b5665d7e2
--- /dev/null
+++ b/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifier.kt
@@ -0,0 +1,117 @@
+package org.androidstudio.plugin.util
+
+import com.android.tools.idea.gradle.AndroidGradleJavaProjectModelModifier
+import com.android.tools.idea.gradle.dsl.api.GradleBuildModel
+import com.android.tools.idea.gradle.dsl.api.dependencies.ArtifactDependencySpec
+import com.android.tools.idea.gradle.dsl.api.dependencies.CommonConfigurationNames
+import com.android.tools.idea.gradle.project.sync.GradleSyncInvoker
+import com.android.tools.idea.gradle.project.sync.GradleSyncListener
+import com.android.tools.idea.gradle.project.sync.idea.GradleSyncExecutor
+import com.android.tools.idea.gradle.util.GradleUtil
+import com.android.tools.idea.project.AndroidProjectInfo
+import com.android.tools.idea.projectsystem.TestArtifactSearchScopes
+import com.google.wireless.android.sdk.stats.GradleSyncStats
+import com.intellij.ide.plugins.PluginManager
+import com.intellij.openapi.command.WriteCommandAction
+import com.intellij.openapi.command.undo.BasicUndoableAction
+import com.intellij.openapi.command.undo.UndoManager
+import com.intellij.openapi.extensions.PluginId
+import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
+import com.intellij.openapi.module.Module
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.roots.DependencyScope
+import com.intellij.openapi.roots.ExternalLibraryDescriptor
+import com.intellij.openapi.roots.libraries.Library
+import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.pom.java.LanguageLevel
+import com.intellij.util.containers.ContainerUtil
+import org.jetbrains.concurrency.AsyncPromise
+import org.jetbrains.concurrency.Promise
+import org.jetbrains.concurrency.rejectedPromise
+
+class UtAndroidGradleJavaProjectModelModifier : AndroidGradleJavaProjectModelModifier() {
+ override fun addExternalLibraryDependency(
+ modules: Collection,
+ descriptor: ExternalLibraryDescriptor,
+ scope: DependencyScope
+ ): Promise? {
+ val module = ContainerUtil.getFirstItem(modules) ?: return null
+ val dependencySpec = ArtifactDependencySpec.create(descriptor.libraryArtifactId, descriptor.libraryGroupId, descriptor.preferredVersion)
+ return addExternalLibraryDependency(module, dependencySpec, scope)
+ }
+
+ private fun addExternalLibraryDependency(
+ module: Module,
+ dependencySpec: ArtifactDependencySpec,
+ scope: DependencyScope,
+ ): Promise? {
+ val project = module.project
+ val openedFile = FileEditorManagerEx.getInstanceEx(project).currentFile
+ val buildModelsToUpdate: MutableList = ArrayList()
+
+ val buildModel = GradleBuildModel.get(module) ?: return null
+ val configurationName = getConfigurationName(module, scope, openedFile)
+ val dependencies = buildModel.dependencies()
+ dependencies.addArtifact(configurationName, dependencySpec)
+ buildModelsToUpdate.add(buildModel)
+
+ WriteCommandAction.writeCommandAction(project).withName("Add Gradle Library Dependency").run {
+ buildModelsToUpdate.forEach { buildModel -> buildModel.applyChanges() }
+ registerUndoAction(project)
+ }
+
+ return doAndroidGradleSync(project, GradleSyncStats.Trigger.TRIGGER_MODIFIER_ADD_LIBRARY_DEPENDENCY)
+ }
+
+ private fun getConfigurationName(module: Module, scope: DependencyScope, openedFile: VirtualFile?): String =
+ GradleUtil.mapConfigurationName(
+ getLegacyConfigurationName(module, scope, openedFile),
+ GradleUtil.getAndroidGradleModelVersionInUse(module),
+ false
+ )
+
+ private fun getLegacyConfigurationName(
+ module: Module,
+ scope: DependencyScope,
+ openedFile: VirtualFile?
+ ): String {
+ if (!scope.isForProductionCompile) {
+ val testScopes = TestArtifactSearchScopes.getInstance(module)
+ if (testScopes != null && openedFile != null) {
+ return if (testScopes.isAndroidTestSource(openedFile)) CommonConfigurationNames.ANDROID_TEST_COMPILE else CommonConfigurationNames.TEST_COMPILE
+ }
+ }
+ return CommonConfigurationNames.COMPILE
+ }
+
+ private fun registerUndoAction(project: Project) {
+ UndoManager.getInstance(project).undoableActionPerformed(object : BasicUndoableAction() {
+
+ override fun undo() {
+ doAndroidGradleSync(project, GradleSyncStats.Trigger.TRIGGER_MODIFIER_ACTION_UNDONE)
+
+ }
+
+ override fun redo() {
+ doAndroidGradleSync(project, GradleSyncStats.Trigger.TRIGGER_MODIFIER_ACTION_REDONE)
+ }
+ })
+ }
+
+ private fun doAndroidGradleSync(project: Project, trigger: GradleSyncStats.Trigger): AsyncPromise {
+ val promise = AsyncPromise()
+ val request = GradleSyncInvoker.Request(trigger)
+ val listener = object : GradleSyncListener {
+ override fun syncSucceeded(project: Project) {
+ promise.setResult(null)
+ }
+
+ override fun syncFailed(project: Project, errorMessage: String) {
+ promise.setError(errorMessage)
+ }
+ }
+ GradleSyncExecutor(project).sync(request, listener)
+
+ return promise
+ }
+}
\ No newline at end of file
diff --git a/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifierWrapper.kt b/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifierWrapper.kt
new file mode 100644
index 0000000000..4eba5a7db9
--- /dev/null
+++ b/utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifierWrapper.kt
@@ -0,0 +1,63 @@
+package org.androidstudio.plugin.util
+
+import com.android.tools.idea.model.AndroidModel
+import com.intellij.facet.ProjectFacetManager
+import com.intellij.ide.plugins.PluginManager
+import com.intellij.openapi.extensions.PluginId
+import com.intellij.openapi.module.Module
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.roots.DependencyScope
+import com.intellij.openapi.roots.ExternalLibraryDescriptor
+import com.intellij.openapi.roots.impl.IdeaProjectModelModifier
+import com.intellij.openapi.roots.libraries.Library
+import com.intellij.pom.java.LanguageLevel
+import org.jetbrains.android.facet.AndroidFacet
+import org.jetbrains.concurrency.Promise
+
+/*
+NOTE: this is a wrapper for [UtAndroidGradleJavaProjectModelModifier].
+The purpose of this wrapper is to avoid inheritance of [AndroidGradleJavaProjectModelModifier]
+because it leads to crashes when Android plugin is disabled.
+ */
+class UtAndroidGradleJavaProjectModelModifierWrapper(val project: Project): IdeaProjectModelModifier(project) {
+
+ override fun addExternalLibraryDependency(
+ modules: Collection,
+ descriptor: ExternalLibraryDescriptor,
+ scope: DependencyScope
+ ): Promise? {
+ if (!isAndroidGradleProject(project)) {
+ return null
+ }
+
+ // NOTE: we use such DependencyScope to obtain `implementation`, not `testImplementation`
+ // to deal with androidTest modules (there is no way to add `androidTestImplementation` additionally.
+ return UtAndroidGradleJavaProjectModelModifier().addExternalLibraryDependency(modules, descriptor, DependencyScope.COMPILE)
+ }
+
+ override fun addModuleDependency(
+ from: Module,
+ to: Module,
+ scope: DependencyScope,
+ exported: Boolean
+ ): Promise? = null
+
+ override fun addLibraryDependency(
+ from: Module,
+ library: Library,
+ scope: DependencyScope,
+ exported: Boolean
+ ): Promise? = null
+
+ override fun changeLanguageLevel(module: Module, level: LanguageLevel): Promise? = null
+
+ private fun isAndroidGradleProject(project: Project): Boolean {
+ val pluginId = PluginId.findId("org.jetbrains.android")
+ if (pluginId == null || PluginManager.getInstance().findEnabledPlugin(pluginId) == null) {
+ return false
+ }
+
+ return ProjectFacetManager.getInstance(project).getFacets(AndroidFacet.ID).stream()
+ .anyMatch { AndroidModel.isRequired(it) }
+ }
+}
\ No newline at end of file
diff --git a/utbot-api/build.gradle b/utbot-api/build.gradle
deleted file mode 100644
index e99e0d7078..0000000000
--- a/utbot-api/build.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-plugins {
- id "com.github.johnrengelman.shadow" version "6.1.0"
-}
-
-apply from: "${parent.projectDir}/gradle/include/jvm-project.gradle"
-
-shadowJar {
- configurations = [project.configurations.compileClasspath]
- archiveClassifier.set('')
- minimize()
-}
\ No newline at end of file
diff --git a/utbot-api/build.gradle.kts b/utbot-api/build.gradle.kts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/utbot-api/src/main/java/org/utbot/api/exception/UtMockAssumptionViolatedException.java b/utbot-api/src/main/java/org/utbot/api/exception/UtMockAssumptionViolatedException.java
new file mode 100644
index 0000000000..25a4b58691
--- /dev/null
+++ b/utbot-api/src/main/java/org/utbot/api/exception/UtMockAssumptionViolatedException.java
@@ -0,0 +1,8 @@
+package org.utbot.api.exception;
+
+public class UtMockAssumptionViolatedException extends RuntimeException {
+ @Override
+ public String getMessage() {
+ return "UtMock assumption violated";
+ }
+}
diff --git a/utbot-api/src/main/java/org/utbot/api/mock/UtMock.java b/utbot-api/src/main/java/org/utbot/api/mock/UtMock.java
index c7f7b2215b..42e25a21f1 100644
--- a/utbot-api/src/main/java/org/utbot/api/mock/UtMock.java
+++ b/utbot-api/src/main/java/org/utbot/api/mock/UtMock.java
@@ -1,5 +1,7 @@
package org.utbot.api.mock;
+import org.utbot.api.exception.UtMockAssumptionViolatedException;
+
public class UtMock {
public static T makeSymbolic() {
return makeSymbolic(false);
@@ -14,13 +16,16 @@ public static T makeSymbolic(boolean isNullable) {
public static void assume(boolean predicate) {
// to use compilers checks, i.e. for possible NPE
if (!predicate) {
- throw new RuntimeException();
+ throw new UtMockAssumptionViolatedException();
}
}
@SuppressWarnings("unused")
public static void assumeOrExecuteConcretely(boolean predicate) {
// In oppose to assume, we don't have predicate check here
- // to avoid RuntimeException during concrete execution
+ // to avoid UtMockAssumptionViolatedException during concrete execution
}
+
+ @SuppressWarnings("unused")
+ public static void disableClassCastExceptionCheck(Object object) {}
}
\ No newline at end of file
diff --git a/utbot-cli-go/build.gradle b/utbot-cli-go/build.gradle
new file mode 100644
index 0000000000..1f0cf22758
--- /dev/null
+++ b/utbot-cli-go/build.gradle
@@ -0,0 +1,77 @@
+tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17
+ freeCompilerArgs += ["-Xallow-result-return-type", "-Xsam-conversions=class"]
+ }
+}
+
+tasks.withType(JavaCompile) {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_17
+}
+
+configurations {
+ fetchInstrumentationJar
+}
+
+dependencies {
+ implementation project(':utbot-framework')
+ implementation project(':utbot-cli')
+ implementation project(':utbot-go')
+
+ // Without this dependency testng tests do not run.
+ implementation group: 'com.beust', name: 'jcommander', version: '1.48'
+ implementation group: 'org.junit.platform', name: 'junit-platform-console-standalone', version: junit4PlatformVersion
+ implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
+ implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: cliktVersion
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junit5Version
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junit5Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
+ implementation group: 'org.jacoco', name: 'org.jacoco.report', version: jacocoVersion
+ //noinspection GroovyAssignabilityCheck
+ fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')
+
+ implementation 'com.beust:klaxon:5.5' // to read and write JSON
+}
+
+processResources {
+ from(configurations.fetchInstrumentationJar) {
+ into "lib"
+ }
+}
+
+task createProperties(dependsOn: processResources) {
+ doLast {
+ new File("$buildDir/resources/main/version.properties").withWriter { w ->
+ Properties properties = new Properties()
+ //noinspection GroovyAssignabilityCheck
+ properties['version'] = project.version.toString()
+ properties.store w, null
+ }
+ }
+}
+
+classes {
+ dependsOn createProperties
+}
+
+jar {
+ manifest {
+ attributes 'Main-Class': 'org.utbot.cli.go.ApplicationKt'
+ attributes 'Bundle-SymbolicName': 'org.utbot.cli.go'
+ attributes 'Bundle-Version': "${project.version}"
+ attributes 'Implementation-Title': 'UtBot Go CLI'
+ attributes 'JAR-Type': 'Fat JAR'
+ }
+
+ archiveVersion.set(project.version as String)
+
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/Application.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/Application.kt
new file mode 100644
index 0000000000..2492442c23
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/Application.kt
@@ -0,0 +1,36 @@
+package org.utbot.cli.go
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.core.subcommands
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.versionOption
+import com.github.ajalt.clikt.parameters.types.enum
+import org.slf4j.event.Level
+import org.utbot.cli.getVersion
+import org.utbot.cli.setVerbosity
+import kotlin.system.exitProcess
+import org.utbot.cli.go.commands.GenerateGoTestsCommand
+import org.utbot.cli.go.commands.RunGoTestsCommand
+
+class UtBotCli : CliktCommand(name = "UnitTestBot Go Command Line Interface") {
+ private val verbosity by option("--verbosity", help = "Changes verbosity level, case insensitive")
+ .enum(ignoreCase = true)
+ .default(Level.INFO)
+
+ override fun run() = setVerbosity(verbosity)
+
+ init {
+ versionOption(getVersion())
+ }
+}
+
+fun main(args: Array) = try {
+ UtBotCli().subcommands(
+ GenerateGoTestsCommand(),
+ RunGoTestsCommand(),
+ ).main(args)
+} catch (ex: Throwable) {
+ ex.printStackTrace()
+ exitProcess(1)
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/CoverageJsonStructs.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/CoverageJsonStructs.kt
new file mode 100644
index 0000000000..55c97cb554
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/CoverageJsonStructs.kt
@@ -0,0 +1,13 @@
+package org.utbot.cli.go.commands
+
+import com.beust.klaxon.Json
+
+internal data class Position(@Json(index = 1) val line: Int, @Json(index = 2) val column: Int)
+
+internal data class CodeRegion(@Json(index = 1) val start: Position, @Json(index = 2) val end: Position)
+
+internal data class CoveredSourceFile(
+ @Json(index = 1) val sourceFileName: String,
+ @Json(index = 2) val covered: List,
+ @Json(index = 3) val uncovered: List
+)
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/GenerateGoTestsCommand.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/GenerateGoTestsCommand.kt
new file mode 100644
index 0000000000..b836808e7b
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/GenerateGoTestsCommand.kt
@@ -0,0 +1,154 @@
+package org.utbot.cli.go.commands
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.*
+import com.github.ajalt.clikt.parameters.types.int
+import com.github.ajalt.clikt.parameters.types.long
+import mu.KotlinLogging
+import org.utbot.cli.go.logic.CliGoUtTestsGenerationController
+import org.utbot.cli.go.util.durationInMillis
+import org.utbot.cli.go.util.now
+import org.utbot.cli.go.util.toAbsolutePath
+import org.utbot.go.logic.GoUtTestsGenerationConfig
+import org.utbot.go.logic.TestsGenerationMode
+import java.nio.file.Files
+import java.nio.file.Paths
+
+private val logger = KotlinLogging.logger {}
+
+class GenerateGoTestsCommand :
+ CliktCommand(name = "generateGo", help = "Generates tests for the specified Go source file") {
+
+ private val sourceFile: String by option(
+ "-s", "--source",
+ help = "Specifies Go source file to generate tests for"
+ )
+ .required()
+ .check("Must exist and ends with *.go suffix") {
+ it.endsWith(".go") && Files.exists(Paths.get(it))
+ }
+
+ private val selectedFunctionNames: List by option(
+ "-f", "--function",
+ help = StringBuilder()
+ .append("Specifies function name to generate tests for. ")
+ .append("Can be used multiple times to select multiple functions at the same time.")
+ .toString()
+ )
+ .multiple()
+
+ private val selectedMethodNames: List by option(
+ "-m", "--method",
+ help = StringBuilder()
+ .append("Specifies method name to generate tests for. ")
+ .append("Can be used multiple times to select multiple methods at the same time.")
+ .toString()
+ )
+ .multiple()
+
+ private val goExecutablePath: String by option(
+ "-go",
+ help = "Specifies path to Go executable. For example, it could be [/usr/local/go/bin/go] for some systems"
+ )
+ .required() // TODO: attempt to find it if not specified
+
+ private val gopath: String by option(
+ "-gopath",
+ help = buildString {
+ appendLine("Specifies path the location of your workspace.")
+ appendLine("It defaults to a directory named go inside your home directory, so \$HOME/go on Unix, \$home/go on Plan 9, and %USERPROFILE%\\go (usually C:\\Users\\YourName\\go) on Windows.")
+ }
+ ).required() // TODO: attempt to find it if not specified
+
+ private val numberOfFuzzingProcesses: Int by option(
+ "-parallel",
+ help = "The number of fuzzing processes running at once, default 8."
+ )
+ .int()
+ .default(8)
+ .check("Must be positive") { it > 0 }
+
+ private val eachFunctionExecutionTimeoutMillis: Long by option(
+ "-et", "--each-execution-timeout",
+ help = StringBuilder()
+ .append("Specifies a timeout in milliseconds for each fuzzed function execution.")
+ .append("Default is ${GoUtTestsGenerationConfig.DEFAULT_EACH_EXECUTION_TIMEOUT_MILLIS} ms")
+ .toString()
+ )
+ .long()
+ .default(GoUtTestsGenerationConfig.DEFAULT_EACH_EXECUTION_TIMEOUT_MILLIS)
+ .check("Must be positive") { it > 0 }
+
+ private val allFunctionExecutionTimeoutMillis: Long by option(
+ "-at", "--all-execution-timeout",
+ help = StringBuilder()
+ .append("Specifies a timeout in milliseconds for all fuzzed function execution.")
+ .append("Default is ${GoUtTestsGenerationConfig.DEFAULT_ALL_EXECUTION_TIMEOUT_MILLIS} ms")
+ .toString()
+ )
+ .long()
+ .default(GoUtTestsGenerationConfig.DEFAULT_ALL_EXECUTION_TIMEOUT_MILLIS)
+ .check("Must be positive") { it > 0 }
+
+ private val printToStdOut: Boolean by option(
+ "-p",
+ "--print-test",
+ help = "Specifies whether a test should be printed out to StdOut. Is disabled by default"
+ )
+ .flag(default = false)
+
+ private val overwriteTestFiles: Boolean by option(
+ "-w",
+ "--overwrite",
+ help = "Specifies whether to overwrite the output test file if it already exists. Is disabled by default"
+ )
+ .flag(default = false)
+
+ private val fuzzingMode: Boolean by option(
+ "-fm",
+ "--fuzzing-mode",
+ help = "Stop test generation when a panic or error occurs (only one test will be generated for one of these cases)"
+ )
+ .flag(default = false)
+
+ override fun run() {
+ if (selectedFunctionNames.isEmpty() && selectedMethodNames.isEmpty()) {
+ throw IllegalArgumentException("Functions or methods must be passed")
+ }
+
+ val sourceFileAbsolutePath = sourceFile.toAbsolutePath()
+ val goExecutableAbsolutePath = goExecutablePath.toAbsolutePath()
+ val gopathAbsolutePath = gopath.toAbsolutePath()
+ val mode = if (fuzzingMode) {
+ TestsGenerationMode.FUZZING_MODE
+ } else {
+ TestsGenerationMode.DEFAULT
+ }
+
+ val testsGenerationStarted = now()
+ logger.info { "Test file generation for [$sourceFile] - started" }
+ try {
+ CliGoUtTestsGenerationController(
+ printToStdOut = printToStdOut,
+ overwriteTestFiles = overwriteTestFiles
+ ).generateTests(
+ mapOf(sourceFileAbsolutePath to selectedFunctionNames),
+ mapOf(sourceFileAbsolutePath to selectedMethodNames),
+ GoUtTestsGenerationConfig(
+ goExecutableAbsolutePath,
+ gopathAbsolutePath,
+ numberOfFuzzingProcesses,
+ mode,
+ eachFunctionExecutionTimeoutMillis,
+ allFunctionExecutionTimeoutMillis
+ ),
+ )
+ } catch (t: Throwable) {
+ logger.error { "An error has occurred while generating test for snippet $sourceFile: $t" }
+ throw t
+ } finally {
+ val duration = durationInMillis(testsGenerationStarted)
+ logger.info { "Test file generation for [$sourceFile] - completed in [$duration] (ms)" }
+ }
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/RunGoTestsCommand.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/RunGoTestsCommand.kt
new file mode 100644
index 0000000000..b5e5847664
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/commands/RunGoTestsCommand.kt
@@ -0,0 +1,223 @@
+package org.utbot.cli.go.commands
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.*
+import com.github.ajalt.clikt.parameters.types.choice
+import mu.KotlinLogging
+import org.utbot.cli.go.util.*
+import org.utbot.go.util.convertObjectToJsonString
+import java.io.File
+
+private val logger = KotlinLogging.logger {}
+
+class RunGoTestsCommand : CliktCommand(name = "runGo", help = "Runs tests for the specified Go package") {
+
+ private val packageDirectory: String by option(
+ "-p", "--package",
+ help = "Specifies Go package to run tests for"
+ )
+ .required()
+ .check("Must exist and be directory") {
+ File(it).let { file -> file.exists() && file.isDirectory }
+ }
+
+ private val goExecutablePath: String by option(
+ "-go", "--go-path",
+ help = "Specifies path to Go executable. For example, it could be [/usr/local/go/bin/go] for some systems"
+ )
+ .required() // TODO: attempt to find it if not specified
+
+ private val verbose: Boolean by option(
+ "-v", "--verbose",
+ help = "Specifies whether an output should be verbose. Is disabled by default"
+ )
+ .flag(default = false)
+
+ private val json: Boolean by option(
+ "-j", "--json",
+ help = "Specifies whether an output should be in JSON format. Is disabled by default"
+ )
+ .flag(default = false)
+
+ private val output: String? by option(
+ "-o", "--output",
+ help = "Specifies output file for tests run report. Prints to StdOut by default"
+ )
+
+ private enum class CoverageMode(val displayName: String) {
+ REGIONS_HTML("html"), PERCENTS_BY_FUNCS("func"), REGIONS_JSON("json");
+
+ override fun toString(): String = displayName
+
+ val fileExtensionValidator: (String) -> Boolean
+ get() = when (this) {
+ REGIONS_HTML -> {
+ { it.substringAfterLast('.') == "html" }
+ }
+
+ REGIONS_JSON -> {
+ { it.substringAfterLast('.') == "json" }
+ }
+
+ PERCENTS_BY_FUNCS -> {
+ { true }
+ }
+ }
+ }
+
+ private val coverageMode: CoverageMode? by option(
+ "-cov-mode", "--coverage-mode",
+ help = StringBuilder()
+ .append("Specifies whether a test coverage report should be generated and defines its mode. ")
+ .append("Coverage report generation is disabled by default")
+ .toString()
+ )
+ .choice(
+ CoverageMode.REGIONS_HTML.toString() to CoverageMode.REGIONS_HTML,
+ CoverageMode.PERCENTS_BY_FUNCS.toString() to CoverageMode.PERCENTS_BY_FUNCS,
+ CoverageMode.REGIONS_JSON.toString() to CoverageMode.REGIONS_JSON,
+ )
+ .check(
+ StringBuilder()
+ .append("Test coverage report output file must be set ")
+ .append("and have an extension that matches the coverage mode")
+ .toString()
+ ) { mode ->
+ coverageOutput?.let { mode.fileExtensionValidator(it) } ?: false
+ }
+
+ private val coverageOutput: String? by option(
+ "-cov-out", "--coverage-output",
+ help = "Specifies output file for test coverage report. Required if [--coverage-mode] is set"
+ )
+ .check("Test coverage report mode must be specified") {
+ coverageMode != null
+ }
+
+ override fun run() {
+ val runningTestsStarted = now()
+ try {
+ logger.debug { "Running tests for [$packageDirectory] - started" }
+
+ /* run tests */
+
+ val packageDirectoryFile = File(packageDirectory).canonicalFile
+
+ val coverProfileFile = if (coverageMode != null) {
+ createFile(createCoverProfileFileName())
+ } else {
+ null
+ }
+
+ try {
+ val runGoTestCommand = mutableListOf(
+ goExecutablePath.toAbsolutePath().toString(),
+ "test",
+ "./"
+ )
+ if (verbose) {
+ runGoTestCommand.add("-v")
+ }
+ if (json) {
+ runGoTestCommand.add("-json")
+ }
+ if (coverageMode != null) {
+ runGoTestCommand.add("-coverprofile")
+ runGoTestCommand.add(coverProfileFile!!.canonicalPath)
+ }
+
+ val outputStream = if (output == null) {
+ System.out
+ } else {
+ createFile(output!!).outputStream()
+ }
+ executeCommandAndRedirectStdoutOrFail(runGoTestCommand, packageDirectoryFile, outputStream)
+
+ /* generate coverage report */
+
+ val coverageOutputFile = coverageOutput?.let { createFile(it) } ?: return
+
+ when (coverageMode) {
+ null -> {
+ return
+ }
+
+ CoverageMode.REGIONS_HTML, CoverageMode.PERCENTS_BY_FUNCS -> {
+ val runToolCoverCommand = mutableListOf(
+ "go",
+ "tool",
+ "cover",
+ "-${coverageMode!!.displayName}",
+ coverProfileFile!!.canonicalPath,
+ "-o",
+ coverageOutputFile.canonicalPath
+ )
+ executeCommandAndRedirectStdoutOrFail(runToolCoverCommand, packageDirectoryFile)
+ }
+
+ CoverageMode.REGIONS_JSON -> {
+ val coveredSourceFiles = parseCoverProfile(coverProfileFile!!)
+ val jsonCoverage = convertObjectToJsonString(coveredSourceFiles)
+ coverageOutputFile.writeText(jsonCoverage)
+ }
+ }
+ } finally {
+ coverProfileFile?.delete()
+ }
+ } catch (t: Throwable) {
+ logger.error { "An error has occurred while running tests for [$packageDirectory]: $t" }
+ throw t
+ } finally {
+ val duration = durationInMillis(runningTestsStarted)
+ logger.debug { "Running tests for [$packageDirectory] - completed in [$duration] (ms)" }
+ }
+ }
+
+ private fun createCoverProfileFileName(): String {
+ return "ut_go_cover_profile.out"
+ }
+
+ private fun parseCoverProfile(coverProfileFile: File): List {
+ data class CoverageRegions(
+ val covered: MutableList,
+ val uncovered: MutableList
+ )
+
+ val coverageRegionsBySourceFilesNames = mutableMapOf()
+
+ coverProfileFile.readLines().asSequence()
+ .drop(1) // drop "mode" value
+ .forEach { fullLine ->
+ val (sourceFileFullName, coverageInfoLine) = fullLine.split(":", limit = 2)
+ val sourceFileName = sourceFileFullName.substringAfterLast("/")
+ val (regionString, _, countString) = coverageInfoLine.split(" ", limit = 3)
+
+ fun parsePosition(positionString: String): Position {
+ val (lineNumber, columnNumber) = positionString.split(".", limit = 2).asSequence()
+ .map { it.toInt() }
+ .toList()
+ return Position(lineNumber, columnNumber)
+ }
+ val (startString, endString) = regionString.split(",", limit = 2)
+ val region = CodeRegion(parsePosition(startString), parsePosition(endString))
+
+ val regions = coverageRegionsBySourceFilesNames.getOrPut(sourceFileName) {
+ CoverageRegions(
+ mutableListOf(),
+ mutableListOf()
+ )
+ }
+ // it is called "count" in docs, but in reality it is like boolean for covered / uncovered
+ val count = countString.toInt()
+ if (count == 0) {
+ regions.uncovered.add(region)
+ } else {
+ regions.covered.add(region)
+ }
+ }
+
+ return coverageRegionsBySourceFilesNames.map { (sourceFileName, regions) ->
+ CoveredSourceFile(sourceFileName, regions.covered, regions.uncovered)
+ }
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/logic/CliGoUtTestsGenerationController.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/logic/CliGoUtTestsGenerationController.kt
new file mode 100644
index 0000000000..e10f3e9754
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/logic/CliGoUtTestsGenerationController.kt
@@ -0,0 +1,138 @@
+package org.utbot.cli.go.logic
+
+import mu.KotlinLogging
+import org.utbot.cli.go.util.durationInMillis
+import org.utbot.cli.go.util.now
+import org.utbot.go.api.GoUtFile
+import org.utbot.go.api.GoUtFunction
+import org.utbot.go.api.GoUtFuzzedFunctionTestCase
+import org.utbot.go.gocodeanalyzer.GoSourceCodeAnalyzer
+import org.utbot.go.logic.AbstractGoUtTestsGenerationController
+import java.io.File
+import java.nio.file.Path
+import java.time.LocalDateTime
+
+private val logger = KotlinLogging.logger {}
+
+class CliGoUtTestsGenerationController(
+ private val printToStdOut: Boolean,
+ private val overwriteTestFiles: Boolean
+) : AbstractGoUtTestsGenerationController() {
+
+ private lateinit var currentStageStarted: LocalDateTime
+
+ override fun onSourceCodeAnalysisStart(
+ targetFunctionNamesBySourceFiles: Map>,
+ targetMethodNamesBySourceFiles: Map>
+ ): Boolean {
+ currentStageStarted = now()
+ logger.debug { "Source code analysis - started" }
+
+ return true
+ }
+
+ override fun onSourceCodeAnalysisFinished(
+ analysisResults: Map
+ ): Boolean {
+ val stageDuration = durationInMillis(currentStageStarted)
+ logger.debug { "Source code analysis - completed in [$stageDuration] (ms)" }
+
+ return handleMissingSelectedFunctions(analysisResults)
+ }
+
+ override fun onPackageInstrumentationStart(): Boolean {
+ currentStageStarted = now()
+ logger.debug { "Package instrumentation - started" }
+
+ return true
+ }
+
+ override fun onPackageInstrumentationFinished(): Boolean {
+ val stageDuration = durationInMillis(currentStageStarted)
+ logger.debug { "Package instrumentation - completed in [$stageDuration] (ms)" }
+
+ return true
+ }
+
+ override fun onTestCasesGenerationForGoSourceFileFunctionsStart(
+ sourceFile: GoUtFile,
+ functions: List
+ ): Boolean {
+ currentStageStarted = now()
+ logger.debug { "Test cases generation for [${sourceFile.fileName}] - started" }
+
+ return true
+ }
+
+ override fun onTestCasesGenerationForGoSourceFileFunctionsFinished(
+ sourceFile: GoUtFile,
+ testCases: List
+ ): Boolean {
+ val stageDuration = durationInMillis(currentStageStarted)
+ logger.debug {
+ "Test cases generation for [${sourceFile.fileName}] functions - completed in [$stageDuration] (ms)"
+ }
+
+ return true
+ }
+
+ override fun onTestCasesFileCodeGenerationStart(
+ sourceFile: GoUtFile,
+ testCases: List
+ ): Boolean {
+ currentStageStarted = now()
+ logger.debug { "Test cases file code generation for [${sourceFile.fileName}] - started" }
+
+ return true
+ }
+
+ override fun onTestCasesFileCodeGenerationFinished(sourceFile: GoUtFile, generatedTestsFileCode: String): Boolean {
+ if (printToStdOut) {
+ logger.info { generatedTestsFileCode }
+ return true
+ }
+ writeGeneratedCodeToFile(sourceFile, generatedTestsFileCode)
+
+ val stageDuration = durationInMillis(currentStageStarted)
+ logger.debug {
+ "Test cases file code generation for [${sourceFile.fileName}] functions - completed in [$stageDuration] (ms)"
+ }
+
+ return true
+ }
+
+ private fun handleMissingSelectedFunctions(
+ analysisResults: Map
+ ): Boolean {
+ val missingSelectedFunctionsListMessage = generateMissingSelectedFunctionsListMessage(analysisResults)
+ val okSelectedFunctionsArePresent =
+ analysisResults.any { (_, analysisResult) -> analysisResult.functions.isNotEmpty() }
+
+ if (missingSelectedFunctionsListMessage != null) {
+ logger.warn { "Some selected functions were skipped during source code analysis.$missingSelectedFunctionsListMessage" }
+ }
+ if (!okSelectedFunctionsArePresent) {
+ throw Exception("Nothing to process. No functions were provided")
+ }
+
+ return true
+ }
+
+ private fun writeGeneratedCodeToFile(sourceFile: GoUtFile, generatedTestsFileCode: String) {
+ val testsFileNameWithExtension = createTestsFileNameWithExtension(sourceFile)
+ val testFile = File(sourceFile.absoluteDirectoryPath).resolve(testsFileNameWithExtension)
+ if (testFile.exists()) {
+ val alreadyExistsMessage = "File [${testFile.absolutePath}] already exists"
+ if (overwriteTestFiles) {
+ logger.warn { "$alreadyExistsMessage: it will be overwritten" }
+ } else {
+ logger.warn { "$alreadyExistsMessage: skipping test generation for [${sourceFile.fileName}]" }
+ return
+ }
+ }
+ testFile.writeText(generatedTestsFileCode)
+ }
+
+ private fun createTestsFileNameWithExtension(sourceFile: GoUtFile) =
+ sourceFile.fileNameWithoutExtension + "_go_ut_test.go"
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/FileUtils.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/FileUtils.kt
new file mode 100644
index 0000000000..b3d072fd05
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/FileUtils.kt
@@ -0,0 +1,16 @@
+package org.utbot.cli.go.util
+
+import java.io.File
+import java.nio.file.Path
+import java.nio.file.Paths
+
+fun String.toAbsolutePath(): Path = Paths.get(this).toAbsolutePath()
+
+fun createFile(filePath: String): File = createFile(File(filePath).canonicalFile)
+
+fun createFile(file: File): File {
+ return file.also {
+ it.parentFile?.mkdirs()
+ it.createNewFile()
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/IoUtils.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/IoUtils.kt
new file mode 100644
index 0000000000..220b2f0e5f
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/IoUtils.kt
@@ -0,0 +1,12 @@
+package org.utbot.cli.go.util
+
+import java.io.InputStream
+import java.io.OutputStream
+
+fun copy(from: InputStream, to: OutputStream?) {
+ val buffer = ByteArray(10240)
+ var len: Int
+ while (from.read(buffer).also { len = it } != -1) {
+ to?.write(buffer, 0, len)
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/ProcessExecutionUtils.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/ProcessExecutionUtils.kt
new file mode 100644
index 0000000000..3dbeebd99b
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/ProcessExecutionUtils.kt
@@ -0,0 +1,33 @@
+package org.utbot.cli.go.util
+
+import java.io.File
+import java.io.InputStreamReader
+import java.io.OutputStream
+
+fun executeCommandAndRedirectStdoutOrFail(
+ command: List,
+ workingDirectory: File? = null,
+ redirectStdoutToStream: OutputStream? = null // if null, stdout of process is suppressed
+) {
+ val executedProcess = runCatching {
+ val process = ProcessBuilder(command)
+ .redirectOutput(ProcessBuilder.Redirect.PIPE)
+ .redirectErrorStream(true)
+ .directory(workingDirectory)
+ .start()
+ copy(process.inputStream, redirectStdoutToStream)
+ process.waitFor()
+ process
+ }.getOrElse {
+ throw RuntimeException(
+ "Execution of [${command.joinToString(separator = " ")}] failed with throwable: $it"
+ )
+ }
+ val exitCode = executedProcess.exitValue()
+ if (exitCode != 0) {
+ val processOutput = InputStreamReader(executedProcess.inputStream).readText()
+ throw RuntimeException(
+ "Execution of [${command.joinToString(separator = " ")}] failed with non-zero exit code = $exitCode:\n$processOutput"
+ )
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/TimeMeasureUtils.kt b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/TimeMeasureUtils.kt
new file mode 100644
index 0000000000..c72601574b
--- /dev/null
+++ b/utbot-cli-go/src/main/kotlin/org/utbot/cli/go/util/TimeMeasureUtils.kt
@@ -0,0 +1,8 @@
+package org.utbot.cli.go.util
+
+import java.time.LocalDateTime
+import java.time.temporal.ChronoUnit
+
+fun now(): LocalDateTime = LocalDateTime.now()
+
+fun durationInMillis(started: LocalDateTime): Long = ChronoUnit.MILLIS.between(started, now())
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/resources/log4j2.xml b/utbot-cli-go/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..3d6ee82bcf
--- /dev/null
+++ b/utbot-cli-go/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/utbot-cli-go/src/main/resources/version.properties b/utbot-cli-go/src/main/resources/version.properties
new file mode 100644
index 0000000000..956d6e337a
--- /dev/null
+++ b/utbot-cli-go/src/main/resources/version.properties
@@ -0,0 +1,2 @@
+#to be populated during the build task
+version=N/A
\ No newline at end of file
diff --git a/utbot-cli-js/Dockerfile b/utbot-cli-js/Dockerfile
new file mode 100644
index 0000000000..3dcc611e25
--- /dev/null
+++ b/utbot-cli-js/Dockerfile
@@ -0,0 +1,22 @@
+FROM azul/zulu-openjdk:11.0.15-11.56.19
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+WORKDIR /usr/src/
+
+RUN apt-get update \
+ && apt-get install -y -q --no-install-recommends \
+ curl \
+ && curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh \
+ && /bin/bash nodesource_setup.sh \
+ && apt-get install -y -q --no-install-recommends \
+ nodejs \
+ && rm -rf /var/lib/apt/lists/*
+
+# Install UTBot Javascript CLI
+
+ARG ARTIFACT_PATH
+COPY ${ARTIFACT_PATH} .
+
+RUN UTBOT_JS_CLI_PATH="$(find /usr/src -type f -name 'utbot-cli*')" \
+ && ln -s "${UTBOT_JS_CLI_PATH}" /usr/src/utbot-cli.jar \
diff --git a/utbot-cli-js/build.gradle b/utbot-cli-js/build.gradle
new file mode 100644
index 0000000000..0248806799
--- /dev/null
+++ b/utbot-cli-js/build.gradle
@@ -0,0 +1,75 @@
+tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17
+ freeCompilerArgs += ["-Xallow-result-return-type", "-Xsam-conversions=class"]
+ }
+}
+
+tasks.withType(JavaCompile) {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_17
+}
+
+configurations {
+ fetchInstrumentationJar
+}
+
+dependencies {
+ implementation project(':utbot-framework')
+ implementation project(':utbot-cli')
+ implementation project(':utbot-js')
+
+ // Without this dependency testng tests do not run.
+ implementation group: 'com.beust', name: 'jcommander', version: '1.48'
+ implementation group: 'org.junit.platform', name: 'junit-platform-console-standalone', version: junit4PlatformVersion
+ implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
+ implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: cliktVersion
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junit5Version
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junit5Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
+ implementation group: 'org.json', name: 'json', version: '20220320'
+ //noinspection GroovyAssignabilityCheck
+ fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')
+}
+
+processResources {
+ from(configurations.fetchInstrumentationJar) {
+ into "lib"
+ }
+}
+
+task createProperties(dependsOn: processResources) {
+ doLast {
+ new File("$buildDir/resources/main/version.properties").withWriter { w ->
+ Properties properties = new Properties()
+ //noinspection GroovyAssignabilityCheck
+ properties['version'] = project.version.toString()
+ properties.store w, null
+ }
+ }
+}
+
+classes {
+ dependsOn createProperties
+}
+
+jar {
+ manifest {
+ attributes 'Main-Class': 'org.utbot.cli.js.ApplicationKt'
+ attributes 'Bundle-SymbolicName': 'org.utbot.cli.js'
+ attributes 'Bundle-Version': "${project.version}"
+ attributes 'Implementation-Title': 'UtBot JavaScript CLI'
+ attributes 'JAR-Type': 'Fat JAR'
+ }
+
+ archiveVersion.set(project.version as String)
+
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
diff --git a/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/Application.kt b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/Application.kt
new file mode 100644
index 0000000000..9f1ed44f6c
--- /dev/null
+++ b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/Application.kt
@@ -0,0 +1,35 @@
+package org.utbot.cli.js
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.core.subcommands
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.versionOption
+import com.github.ajalt.clikt.parameters.types.enum
+import org.slf4j.event.Level
+import org.utbot.cli.getVersion
+import org.utbot.cli.setVerbosity
+import kotlin.system.exitProcess
+
+class UtBotJsCli : CliktCommand(name = "UnitTestBot JavaScript Command Line Interface") {
+ private val verbosity by option("--verbosity", help = "Changes verbosity level, case insensitive")
+ .enum(ignoreCase = true)
+ .default(Level.INFO)
+
+ override fun run() = setVerbosity(verbosity)
+
+ init {
+ versionOption(getVersion())
+ }
+}
+
+fun main(args: Array) = try {
+ UtBotJsCli().subcommands(
+ JsCoverageCommand(),
+ JsGenerateTestsCommand(),
+ JsRunTestsCommand(),
+ ).main(args)
+} catch (ex: Throwable) {
+ ex.printStackTrace()
+ exitProcess(1)
+}
\ No newline at end of file
diff --git a/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsCoverageCommand.kt b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsCoverageCommand.kt
new file mode 100644
index 0000000000..788b63c559
--- /dev/null
+++ b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsCoverageCommand.kt
@@ -0,0 +1,163 @@
+package org.utbot.cli.js
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.check
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.required
+import mu.KotlinLogging
+import org.json.JSONArray
+import org.json.JSONObject
+import org.utbot.cli.js.JsUtils.makeAbsolutePath
+import org.w3c.dom.Document
+import org.w3c.dom.Element
+import utils.JsCmdExec
+import java.io.File
+import java.nio.file.Files
+import java.nio.file.Paths
+import javax.xml.parsers.DocumentBuilderFactory
+
+private val logger = KotlinLogging.logger {}
+
+class JsCoverageCommand : CliktCommand(name = "coverage_js", help = "Get tests coverage for the specified file.") {
+
+ private val testFile by option(
+ "-s", "--source",
+ help = "Target test file path."
+ ).required()
+ .check("Must exist and ends with .js suffix") {
+ it.endsWith(".js") && Files.exists(Paths.get(it))
+ }
+
+ private val output by option(
+ "-o", "--output",
+ help = "Specifies output .json file for generated tests."
+ ).check("Must end with .json suffix") {
+ it.endsWith(".json")
+ }
+
+ private val pathToNYC by option(
+ "--path-to-nyc",
+ help = "Sets path to nyc executable, defaults to \"nyc\" shortcut. " +
+ "As there are many nyc files in the global npm directory, choose one without file extension."
+ ).default("nyc")
+
+ override fun run() {
+ val testFileAbsolutePath = makeAbsolutePath(testFile)
+ val workingDir = testFileAbsolutePath.substringBeforeLast("/")
+ val coverageDataPath = "$workingDir/coverage"
+ val outputAbsolutePath = output?.let { makeAbsolutePath(it) }
+ JsCmdExec.runCommand(
+ dir = workingDir,
+ shouldWait = true,
+ timeout = 20,
+ cmd = arrayOf(
+ "\"$pathToNYC\"",
+ "--report-dir=\"$coverageDataPath\"",
+ "--reporter=\"clover\"",
+ "--temp-dir=\"${workingDir}/cache\"",
+ "mocha",
+ "\"$testFileAbsolutePath\""
+ )
+ )
+ val coveredList = mutableListOf()
+ val partiallyCoveredList = mutableListOf()
+ val uncoveredList = mutableListOf()
+ val db = DocumentBuilderFactory.newInstance().newDocumentBuilder()
+ val xmlFile = File("$coverageDataPath/clover.xml")
+ val doc = db.parse(xmlFile)
+ buildCoverageLists(
+ coveredList,
+ partiallyCoveredList,
+ uncoveredList,
+ doc,
+ )
+ val json = createJson(
+ coveredList,
+ partiallyCoveredList,
+ uncoveredList,
+ )
+ processResult(json, outputAbsolutePath)
+ }
+
+ private fun buildCoverageLists(
+ coveredList: MutableList,
+ partiallyCoveredList: MutableList,
+ uncoveredList: MutableList,
+ doc: Document,
+ ) {
+ doc.documentElement.normalize()
+ val lineList = try {
+ (((doc.getElementsByTagName("project").item(0) as Element)
+ .getElementsByTagName("package").item(0) as Element)
+ .getElementsByTagName("file").item(0) as Element)
+ .getElementsByTagName("line")
+ } catch (e: Exception) {
+ ((doc.getElementsByTagName("project").item(0) as Element)
+ .getElementsByTagName("file").item(0) as Element)
+ .getElementsByTagName("line")
+ }
+ for (i in 0 until lineList.length) {
+ val lineInfo = lineList.item(i) as Element
+ val num = lineInfo.getAttribute("num").toInt()
+ val count = lineInfo.getAttribute("count").toInt()
+ when (lineInfo.getAttribute("type")) {
+ "stmt" -> {
+ if (count > 0) coveredList += num
+ else uncoveredList += num
+ }
+
+ "cond" -> {
+ val trueCount = lineInfo.getAttribute("truecount").toInt()
+ val falseCount = lineInfo.getAttribute("falsecount").toInt()
+ when {
+ trueCount == 2 && falseCount == 0 -> coveredList += num
+ trueCount == 1 && falseCount == 1 -> partiallyCoveredList += num
+ trueCount == 0 && falseCount == 2 -> uncoveredList += num
+ }
+ }
+ }
+ }
+ }
+
+ private fun createJson(
+ coveredList: List,
+ partiallyCoveredList: List,
+ uncoveredList: List,
+ ): JSONObject {
+ val coveredArray = JSONArray()
+ coveredList.forEach {
+ val obj = JSONObject()
+ obj.put("start", it)
+ obj.put("end", it)
+ coveredArray.put(obj)
+ }
+ val partiallyCoveredArray = JSONArray()
+ partiallyCoveredList.forEach {
+ val obj = JSONObject()
+ obj.put("start", it)
+ obj.put("end", it)
+ partiallyCoveredArray.put(obj)
+ }
+ val uncoveredArray = JSONArray()
+ uncoveredList.forEach {
+ val obj = JSONObject()
+ obj.put("start", it)
+ obj.put("end", it)
+ uncoveredArray.put(obj)
+ }
+ val json = JSONObject()
+ json.put("covered", coveredArray)
+ json.put("notCovered", uncoveredArray)
+ json.put("partlyCovered", partiallyCoveredArray)
+ return json
+ }
+
+ private fun processResult(json: JSONObject, output: String?) {
+ output?.let { fileName ->
+ val file = File(fileName)
+ file.createNewFile()
+ file.writeText(json.toString())
+ } ?: logger.info { json.toString() }
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsGenerateTestsCommand.kt b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsGenerateTestsCommand.kt
new file mode 100644
index 0000000000..2a0e043216
--- /dev/null
+++ b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsGenerateTestsCommand.kt
@@ -0,0 +1,149 @@
+package org.utbot.cli.js
+
+import api.JsTestGenerator
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.*
+import com.github.ajalt.clikt.parameters.types.choice
+import mu.KotlinLogging
+import org.utbot.cli.js.JsUtils.makeAbsolutePath
+import service.coverage.CoverageMode
+import settings.JsDynamicSettings
+import settings.JsExportsSettings.endComment
+import settings.JsExportsSettings.startComment
+import settings.JsTestGenerationSettings.defaultTimeout
+import java.io.File
+import java.nio.file.Files
+import java.nio.file.Paths
+import java.time.LocalDateTime
+import java.time.temporal.ChronoUnit
+
+private val logger = KotlinLogging.logger {}
+
+
+class JsGenerateTestsCommand :
+ CliktCommand(name = "generate_js", help = "Generates tests for the specified class or toplevel functions.") {
+
+ private val sourceCodeFile by option(
+ "-s", "--source",
+ help = "Specifies source code file for a generated test."
+ )
+ .required()
+ .check("Must exist and ends with .js suffix") {
+ it.endsWith(".js") && Files.exists(Paths.get(it))
+ }
+
+ private val targetClass by option("-c", "--class", help = "Specifies target class to generate tests for.")
+
+ private val output by option("-o", "--output", help = "Specifies output file for generated tests.")
+ .check("Must end with .js suffix") {
+ it.endsWith(".js")
+ }
+
+ private val printToStdOut by option(
+ "-p",
+ "--print-test",
+ help = "Specifies whether test should be printed out to StdOut."
+ )
+ .flag(default = false)
+
+ private val timeout by option(
+ "-t",
+ "--timeout",
+ help = "Timeout for Node.js to run scripts in seconds."
+ ).default("$defaultTimeout")
+
+ private val coverageMode by option(
+ "--coverage-mode",
+ help = "Specifies the coverage mode for test generation. Check docs for more info."
+ ).choice(
+ CoverageMode.BASIC.toString() to CoverageMode.BASIC,
+ CoverageMode.FAST.toString() to CoverageMode.FAST
+ ).default(CoverageMode.FAST)
+
+ private val pathToNode by option(
+ "--path-to-node",
+ help = "Sets path to Node.js executable, defaults to \"node\" shortcut."
+ ).default("node")
+
+ private val pathToNYC by option(
+ "--path-to-nyc",
+ help = "Sets path to nyc executable, defaults to \"nyc\" shortcut. " +
+ "As there are many nyc files in the global npm directory, choose one without file extension."
+ ).default("nyc")
+
+ private val pathToNPM by option(
+ "--path-to-npm",
+ help = "Sets path to npm executable, defaults to \"npm\" shortcut."
+ ).default("npm")
+
+ override fun run() {
+ val started = LocalDateTime.now()
+ try {
+ val sourceFileAbsolutePath = makeAbsolutePath(sourceCodeFile)
+ logger.info { "Generating tests for [$sourceFileAbsolutePath] - started" }
+ val fileText = File(sourceCodeFile).readText()
+ currentFileText = fileText
+ val outputAbsolutePath = output?.let { makeAbsolutePath(it) }
+ val testGenerator = JsTestGenerator(
+ fileText = fileText,
+ sourceFilePath = sourceFileAbsolutePath,
+ parentClassName = targetClass,
+ outputFilePath = outputAbsolutePath,
+ exportsManager = ::manageExports,
+ settings = JsDynamicSettings(
+ pathToNode = pathToNode,
+ pathToNYC = pathToNYC,
+ pathToNPM = pathToNPM,
+ timeout = timeout.toLong(),
+ coverageMode = coverageMode,
+
+ )
+ )
+ val testCode = testGenerator.run()
+
+ if (printToStdOut || (outputAbsolutePath == null && !printToStdOut)) {
+ logger.info { "\n$testCode" }
+ }
+ outputAbsolutePath?.let { filePath ->
+ val outputFile = File(filePath)
+ outputFile.createNewFile()
+ outputFile.writeText(testCode)
+ }
+
+ } catch (t: Throwable) {
+ logger.error { "An error has occurred while generating tests for file $sourceCodeFile : $t" }
+ throw t
+ } finally {
+ val duration = ChronoUnit.MILLIS.between(started, LocalDateTime.now())
+ logger.debug { "Generating test for [$sourceCodeFile] - completed in [$duration] (ms)" }
+ }
+ }
+
+ // Needed for continuous exports managing
+ private var currentFileText = ""
+
+ private fun manageExports(swappedText: (String?, String) -> String) {
+ val file = File(sourceCodeFile)
+ when {
+
+ currentFileText.contains(startComment) -> {
+ val regex = Regex("$startComment((\\r\\n|\\n|\\r|.)*)$endComment")
+ regex.find(currentFileText)?.groups?.get(1)?.value?.let { existingSection ->
+ val newText = swappedText(existingSection, currentFileText)
+ file.writeText(newText)
+ currentFileText = newText
+ }
+ }
+
+ else -> {
+ val line = buildString {
+ append("\n$startComment")
+ append(swappedText(null, currentFileText))
+ append(endComment)
+ }
+ file.appendText(line)
+ currentFileText = file.readText()
+ }
+ }
+ }
+}
diff --git a/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsRunTestsCommand.kt b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsRunTestsCommand.kt
new file mode 100644
index 0000000000..60d96fc374
--- /dev/null
+++ b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsRunTestsCommand.kt
@@ -0,0 +1,59 @@
+package org.utbot.cli.js
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.check
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.required
+import com.github.ajalt.clikt.parameters.types.choice
+import mu.KotlinLogging
+import org.utbot.cli.js.JsUtils.makeAbsolutePath
+import utils.JsCmdExec
+import java.io.File
+
+private val logger = KotlinLogging.logger {}
+
+class JsRunTestsCommand : CliktCommand(name = "run_js", help = "Runs tests for the specified file or directory.") {
+
+ private val fileWithTests by option(
+ "--fileOrDir", "-f",
+ help = "Specifies a file or directory with tests."
+ ).required()
+
+ private val output by option(
+ "-o", "--output",
+ help = "Specifies an output .txt file for test framework result."
+ ).check("Must end with .txt suffix") {
+ it.endsWith(".txt")
+ }
+
+ private val testFramework by option("--test-framework", "-t", help = "Test framework to be used.")
+ .choice("mocha")
+ .default("mocha")
+
+
+ override fun run() {
+ val fileWithTestsAbsolutePath = makeAbsolutePath(fileWithTests)
+ val dir = if (fileWithTestsAbsolutePath.endsWith(".js"))
+ fileWithTestsAbsolutePath.substringBeforeLast("/") else fileWithTestsAbsolutePath
+ val outputAbsolutePath = output?.let { makeAbsolutePath(it) }
+ when (testFramework) {
+ "mocha" -> {
+ val (inputText, errorText) = JsCmdExec.runCommand(
+ dir = dir,
+ shouldWait = true,
+ cmd = arrayOf("mocha", "\"$fileWithTestsAbsolutePath\"")
+ )
+ if (errorText.isNotEmpty()) {
+ logger.error { "An error has occurred while running tests for $fileWithTests: $errorText" }
+ } else {
+ outputAbsolutePath?.let {
+ val file = File(it)
+ file.createNewFile()
+ file.writeText(inputText)
+ } ?: logger.info { "Output absolute path is null with text: $inputText" }
+ }
+ }
+ }
+ }
+}
diff --git a/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsUtils.kt b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsUtils.kt
new file mode 100644
index 0000000000..87b135a11a
--- /dev/null
+++ b/utbot-cli-js/src/main/kotlin/org/utbot/cli/js/JsUtils.kt
@@ -0,0 +1,14 @@
+package org.utbot.cli.js
+
+import java.io.File
+
+internal object JsUtils {
+
+ fun makeAbsolutePath(path: String): String {
+ val rawPath = when {
+ File(path).isAbsolute -> path
+ else -> System.getProperty("user.dir") + "/" + path
+ }
+ return rawPath.replace("\\", "/")
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-js/src/main/resources/log4j2.xml b/utbot-cli-js/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..d0f20b10bc
--- /dev/null
+++ b/utbot-cli-js/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/utbot-cli-js/src/main/resources/version.properties b/utbot-cli-js/src/main/resources/version.properties
new file mode 100644
index 0000000000..956d6e337a
--- /dev/null
+++ b/utbot-cli-js/src/main/resources/version.properties
@@ -0,0 +1,2 @@
+#to be populated during the build task
+version=N/A
\ No newline at end of file
diff --git a/utbot-cli-python/Dockerfile b/utbot-cli-python/Dockerfile
new file mode 100644
index 0000000000..6a76e29d21
--- /dev/null
+++ b/utbot-cli-python/Dockerfile
@@ -0,0 +1,24 @@
+FROM azul/zulu-openjdk:11.0.15-11.56.19
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+WORKDIR /usr/src/
+
+RUN apt-get update \
+ && apt-get install -y -q --no-install-recommends \
+ curl \
+ python3.9 \
+ python3.9-distutils \
+ && rm -rf /var/lib/apt/lists/* \
+ && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
+ && python3.9 get-pip.py \
+ && pip install -U \
+ pytest
+
+# Install UTBot Python CLI
+
+ARG ARTIFACT_PATH
+COPY ${ARTIFACT_PATH} .
+
+RUN UTBOT_PYTHON_CLI_PATH="$(find /usr/src -type f -name 'utbot-cli*')" \
+ && ln -s "${UTBOT_PYTHON_CLI_PATH}" /usr/src/utbot-cli.jar
diff --git a/utbot-cli-python/build.gradle b/utbot-cli-python/build.gradle
new file mode 100644
index 0000000000..fbfa2bdd9d
--- /dev/null
+++ b/utbot-cli-python/build.gradle
@@ -0,0 +1,70 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+tasks.withType(KotlinCompile).configureEach {
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17
+ freeCompilerArgs += ["-Xallow-result-return-type", "-Xsam-conversions=class"]
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_17
+}
+
+configurations {
+ fetchInstrumentationJar
+}
+
+dependencies {
+ implementation project(':utbot-framework')
+ implementation project(':utbot-python')
+
+ implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
+ implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: cliktVersion
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
+ implementation group: 'com.github.UnitTestBot', name: 'PythonTypesAPI', version: pythonTypesAPIHash
+}
+
+processResources {
+ from(configurations.fetchInstrumentationJar) {
+ into "lib"
+ }
+}
+
+tasks.register('createProperties') {
+ dependsOn processResources
+ doLast {
+ new File("$buildDir/resources/main/version.properties").withWriter { w ->
+ Properties properties = new Properties()
+ //noinspection GroovyAssignabilityCheck
+ properties['version'] = project.version.toString()
+ properties.store w, null
+ }
+ }
+}
+
+classes {
+ dependsOn createProperties
+}
+
+jar {
+ manifest {
+ attributes 'Main-Class': 'org.utbot.cli.language.python.ApplicationKt'
+ attributes 'Bundle-SymbolicName': 'org.utbot.cli.language.python'
+ attributes 'Bundle-Version': "${project.version}"
+ attributes 'Implementation-Title': 'UtBot Python CLI'
+ attributes 'JAR-Type': 'Fat JAR'
+ }
+
+ archiveVersion.set(project.version as String)
+
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
diff --git a/utbot-cli-python/src/README.md b/utbot-cli-python/src/README.md
new file mode 100644
index 0000000000..29873d592c
--- /dev/null
+++ b/utbot-cli-python/src/README.md
@@ -0,0 +1,105 @@
+## Build
+
+.jar file can be built in Github Actions with script `publish-plugin-and-cli-from-branch`.
+
+## Requirements
+
+ - Required Java version: 11.
+
+ - Preferred Python version: 3.10-3.11 (3.9 also supported but with limited functionality).
+
+ Make sure that your Python has `pip` installed (this is usually the case). [Read more about pip installation](https://pip.pypa.io/en/stable/installation/).
+
+ Before running utbot install pip requirements (or use `--install-requirements` flag in `generate_python` command):
+
+ python -m pip install mypy==1.0 utbot_executor==0.9.19 utbot_mypy_runner==0.2.16
+
+## Basic usage
+
+Generate tests:
+
+ java -jar utbot-cli-python.jar generate_python dir/file_with_sources.py -p -o generated_tests.py -s dir
+
+This will generate tests for top-level functions from `file_with_sources.py`.
+
+Run generated tests:
+
+ java -jar utbot-cli-python.jar run_python generated_tests.py -p
+
+### `generate_python` options
+
+- `-s, --sys-path ,`
+
+ (required) Directories to add to `sys.path`. One of directories must contain the file with the methods under test.
+
+ `sys.path` is a list of strings that specifies the search path for modules. It must include paths for all user modules that are used in imports.
+
+- `-p, --python-path `
+
+ (required) Path to Python interpreter.
+
+- `-o, --output `
+
+ (required) File for generated tests.
+
+- `--coverage `
+
+ File to write coverage report.
+
+- `-c, --class `
+
+ Specify top-level (ordinary, not nested) class under test. Without this option tests will be generated for top-level functions.
+
+- `-m, --methods ,`
+
+ Specify methods under test.
+
+- `--install-requirements`
+
+ Install Python requirements if missing.
+
+- `--do-not-minimize`
+
+ Turn off minimization of the number of generated tests.
+
+- `--do-not-check-requirements`
+
+ Turn off Python requirements check (to speed up).
+
+- `-t, --timeout INT`
+
+ Specify the maximum time in milliseconds to spend on generating tests (60000 by default).
+
+- `--timeout-for-run INT`
+
+ Specify the maximum time in milliseconds to spend on one function run (2000 by default).
+
+- `--test-framework [pytest|Unittest]`
+
+ Test framework to be used.
+
+- `--runtime-exception-behaviour [PASS|FAIL]`
+
+ Expected behaviour for runtime exception.
+
+- `--do-not-generate-regression-suite`
+
+ Generate regression test suite or not. Regression suite and error suite generation is active by default.
+
+### `run_python` options
+
+- `-p, --python-path `
+
+ (required) Path to Python interpreter.
+
+- `--test-framework [pytest|Unittest]`
+
+ Test framework of tests to run.
+
+- `-o, --output `
+
+ Specify file for report.
+
+## Problems
+
+- Unittest can not run tests from parent directories
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Application.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Application.kt
new file mode 100644
index 0000000000..0cad4e6264
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Application.kt
@@ -0,0 +1,55 @@
+package org.utbot.cli.language.python
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.core.subcommands
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.versionOption
+import com.github.ajalt.clikt.parameters.types.enum
+import mu.KotlinLogging
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.core.config.Configurator
+import org.slf4j.event.Level
+import java.util.*
+import kotlin.system.exitProcess
+
+private val logger = KotlinLogging.logger {}
+
+class UtBotPythonCli : CliktCommand(name = "UnitTestBot Python Command Line Interface") {
+ private val verbosity by option("--verbosity", help = "Changes verbosity level, case insensitive")
+ .enum(ignoreCase = true)
+ .default(Level.INFO)
+
+ override fun run() = setVerbosity(verbosity)
+
+ init {
+ versionOption(getVersion())
+ }
+}
+
+fun main(args: Array) = try {
+ UtBotPythonCli().subcommands(
+ PythonGenerateTestsCommand(),
+ PythonRunTestsCommand(),
+ PythonTypeInferenceCommand()
+ ).main(args)
+} catch (ex: Throwable) {
+ ex.printStackTrace()
+ exitProcess(1)
+}
+
+fun setVerbosity(verbosity: Level) {
+ Configurator.setAllLevels(LogManager.getRootLogger().name, level(verbosity))
+ logger.debug { "Log Level changed to [$verbosity]" }
+}
+
+private fun level(level: Level) = org.apache.logging.log4j.Level.toLevel(level.name)
+
+fun getVersion(): String {
+ val prop = Properties()
+ Thread.currentThread().contextClassLoader.getResourceAsStream("version.properties")
+ .use { stream ->
+ prop.load(stream)
+ }
+ return prop.getProperty("version")
+}
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/CliRequirementsInstaller.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/CliRequirementsInstaller.kt
new file mode 100644
index 0000000000..8653520a30
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/CliRequirementsInstaller.kt
@@ -0,0 +1,27 @@
+package org.utbot.cli.language.python
+
+import mu.KLogger
+import org.utbot.python.utils.RequirementsInstaller
+import org.utbot.python.utils.RequirementsUtils
+
+class CliRequirementsInstaller(
+ private val installRequirementsIfMissing: Boolean,
+ private val logger: KLogger,
+) : RequirementsInstaller {
+ override fun checkRequirements(pythonPath: String, requirements: List): Boolean {
+ return RequirementsUtils.requirementsAreInstalled(pythonPath, requirements)
+ }
+
+ override fun installRequirements(pythonPath: String, requirements: List) {
+ if (installRequirementsIfMissing) {
+ val result = RequirementsUtils.installRequirements(pythonPath, requirements)
+ if (result.exitValue != 0) {
+ System.err.println(result.stderr)
+ logger.error("Failed to install requirements.")
+ }
+ } else {
+ logger.error("Missing some requirements. Please add --install-requirements flag or install them manually.")
+ }
+ logger.info("Requirements: ${requirements.joinToString()}")
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonCliProcessor.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonCliProcessor.kt
new file mode 100644
index 0000000000..58aefea470
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonCliProcessor.kt
@@ -0,0 +1,42 @@
+package org.utbot.cli.language.python
+
+import mu.KotlinLogging
+import org.utbot.python.PythonTestGenerationConfig
+import org.utbot.python.PythonTestGenerationProcessor
+import org.utbot.python.PythonTestSet
+
+private val logger = KotlinLogging.logger {}
+
+class PythonCliProcessor(
+ override val configuration: PythonTestGenerationConfig,
+ private val testWriter: TestWriter,
+ private val coverageOutput: String?,
+ private val executionCounterOutput: String?,
+) : PythonTestGenerationProcessor() {
+
+ override fun saveTests(testsCode: String) {
+ testWriter.addTestCode(testsCode)
+// writeToFileAndSave(output, testsCode)
+ }
+
+ override fun notGeneratedTestsAction(testedFunctions: List) {
+ logger.error(
+ "Couldn't generate tests for the following functions: ${testedFunctions.joinToString()}"
+ )
+ }
+
+ private fun getExecutionsNumber(testSets: List): Int {
+ return testSets.sumOf { it.executionsNumber }
+ }
+
+ override fun processCoverageInfo(testSets: List) {
+ coverageOutput?.let { output ->
+ val coverageReport = getStringCoverageInfo(testSets)
+ writeToFileAndSave(output, coverageReport)
+ }
+ executionCounterOutput?.let { executionOutput ->
+ val executionReport = "{\"executions\": ${getExecutionsNumber(testSets)}}"
+ writeToFileAndSave(executionOutput, executionReport)
+ }
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt
new file mode 100644
index 0000000000..a9e2242829
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt
@@ -0,0 +1,380 @@
+package org.utbot.cli.language.python
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.arguments.argument
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.flag
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.required
+import com.github.ajalt.clikt.parameters.options.split
+import com.github.ajalt.clikt.parameters.types.choice
+import com.github.ajalt.clikt.parameters.types.long
+import mu.KotlinLogging
+import org.parsers.python.PythonParser
+import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour
+import org.utbot.framework.codegen.domain.TestFramework
+import org.utbot.framework.plugin.api.UtExecutionSuccess
+import org.utbot.python.MypyConfig
+import org.utbot.python.PythonMethodHeader
+import org.utbot.python.PythonTestGenerationConfig
+import org.utbot.python.PythonTestGenerationProcessor
+import org.utbot.python.PythonTestSet
+import org.utbot.python.TestFileInformation
+import org.utbot.python.code.PythonCode
+import org.utbot.python.coverage.CoverageOutputFormat
+import org.utbot.python.coverage.PythonCoverageMode
+import org.utbot.python.framework.api.python.PythonClassId
+import org.utbot.python.framework.api.python.pythonBuiltinsModuleName
+import org.utbot.python.framework.codegen.model.Pytest
+import org.utbot.python.framework.codegen.model.Unittest
+import org.utbot.python.newtyping.ast.parseClassDefinition
+import org.utbot.python.newtyping.ast.parseFunctionDefinition
+import org.utbot.python.newtyping.mypy.dropInitFile
+import org.utbot.python.utils.Cleaner
+import org.utbot.python.utils.Fail
+import org.utbot.python.utils.RequirementsInstaller
+import org.utbot.python.utils.Success
+import org.utbot.python.utils.separateTimeout
+import java.io.File
+import java.nio.file.Paths
+import java.util.concurrent.atomic.AtomicBoolean
+import kotlin.system.exitProcess
+import kotlin.system.measureTimeMillis
+
+private const val DEFAULT_TIMEOUT_IN_MILLIS = 60000L
+private const val DEFAULT_TIMEOUT_FOR_ONE_RUN_IN_MILLIS = 2000L
+
+private val logger = KotlinLogging.logger {}
+
+class PythonGenerateTestsCommand : CliktCommand(
+ name = "generate_python",
+ help = "Generate tests for a specified Python class or top-level functions from a specified file."
+) {
+ private val sourceFile by argument(
+ help = "File with Python code to generate tests for."
+ )
+
+ private lateinit var absPathToSourceFile: String
+ private lateinit var sourceFileContent: String
+
+ private val classesToTest by option(
+ "-c", "--classes",
+ help = "Generate tests for all methods of selected classes. Use '-' to specify top-level functions group."
+ )
+ .split(",")
+ private fun classesToTest() = classesToTest?.map { if (it == "-") null else it }
+
+ private val methodsToTest by option(
+ "-m", "--methods",
+ help = "Specify methods under test using full path (use qualified name: only name for top-level function and . for methods. Use '-' to skip test generation for top-level functions"
+ )
+ .split(",")
+
+ private val directoriesForSysPath by option(
+ "-s", "--sys-path",
+ help = "(required) Directories to add to sys.path. " +
+ "One of directories must contain the file with the methods under test."
+ ).split(",").required()
+
+ private val pythonPath by option(
+ "-p", "--python-path",
+ help = "(required) Path to Python interpreter."
+ ).required()
+
+ private val output by option(
+ "-o", "--output", help = "(required) File for generated tests."
+ ).required()
+
+ private val coverageOutput by option(
+ "--coverage",
+ help = "File to write coverage report."
+ )
+
+ private val executionCounterOutput by option(
+ "--executions-counter",
+ help = "File to write number of executions."
+ )
+
+ private val installRequirementsIfMissing by option(
+ "--install-requirements",
+ help = "Install Python requirements if missing."
+ ).flag(default = false)
+
+ private val doNotMinimize by option(
+ "--do-not-minimize",
+ help = "Turn off minimization of the number of generated tests."
+ ).flag(default = false)
+
+ private val timeout by option(
+ "-t", "--timeout",
+ help = "Specify the maximum time in milliseconds to spend on generating tests ($DEFAULT_TIMEOUT_IN_MILLIS by default)."
+ ).long().default(DEFAULT_TIMEOUT_IN_MILLIS)
+
+ private val timeoutForRun by option(
+ "--timeout-for-run",
+ help = "Specify the maximum time in milliseconds to spend on one function run ($DEFAULT_TIMEOUT_FOR_ONE_RUN_IN_MILLIS by default)."
+ ).long().default(DEFAULT_TIMEOUT_FOR_ONE_RUN_IN_MILLIS)
+
+ private val includeMypyAnalysisTime by option(
+ "--include-mypy-analysis-time",
+ help = "Include mypy static analysis time in the total timeout."
+ ).flag(default = false)
+
+ private val testFrameworkAsString by option("--test-framework", help = "Test framework to be used.")
+ .choice(Pytest.toString(), Unittest.toString())
+ .default(Unittest.toString())
+
+ private val runtimeExceptionTestsBehaviour by option("--runtime-exception-behaviour", help = "PASS or FAIL")
+ .choice("PASS", "FAIL")
+ .default("FAIL")
+
+ private val doNotGenerateRegressionSuite by option("--do-not-generate-regression-suite", help = "Do not generate regression test suite.")
+ .flag(default = false)
+
+ private val coverageMeasureMode by option("--coverage-measure-mode", help = "Use LINES or INSTRUCTIONS for coverage measurement.")
+ .choice("INSTRUCTIONS", "LINES")
+ .default("INSTRUCTIONS")
+
+ private val doNotSendCoverageContinuously by option("--do-not-send-coverage-continuously", help = "Do not send coverage during execution.")
+ .flag(default = false)
+
+ private val prohibitedExceptions by option(
+ "--prohibited-exceptions",
+ help = "Do not generate tests with these exceptions. Set '-' to generate tests for all exceptions."
+ )
+ .split(",")
+ .default(PythonTestGenerationConfig.defaultProhibitedExceptions)
+
+ private val testFramework: TestFramework
+ get() =
+ when (testFrameworkAsString) {
+ Unittest.toString() -> Unittest
+ Pytest.toString() -> Pytest
+ else -> error("Not reachable")
+ }
+
+ private val forbiddenMethods = listOf("__init__", "__new__")
+
+ private fun getPythonMethods(): List> {
+ val parsedModule = PythonParser(sourceFileContent).Module()
+
+ val topLevelFunctions = PythonCode.getTopLevelFunctions(parsedModule)
+ val topLevelClasses = PythonCode.getTopLevelClasses(parsedModule)
+
+ val functions = topLevelFunctions
+ .mapNotNull { parseFunctionDefinition(it) }
+ .map { PythonMethodHeader(it.name.toString(), absPathToSourceFile, null) }
+ val methods = topLevelClasses
+ .mapNotNull { cls ->
+ val parsedClass = parseClassDefinition(cls) ?: return@mapNotNull null
+ val innerClasses = PythonCode.getInnerClasses(cls)
+ (listOf(parsedClass to null) + innerClasses.mapNotNull { innerClass -> parseClassDefinition(innerClass)?.let { it to parsedClass } }).map { (cls, parent) ->
+ PythonCode.getClassMethods(cls.body)
+ .mapNotNull { parseFunctionDefinition(it) }
+ .map { function ->
+ val clsName = (parent?.let { "${it.name}." } ?: "") + cls.name.toString()
+ val parsedClassName = PythonClassId(pythonBuiltinsModuleName, clsName)
+ PythonMethodHeader(function.name.toString(), absPathToSourceFile, parsedClassName)
+ }
+ }
+ }
+ .flatten()
+
+ fun functionsFilter(group: List, methodFilter: List? = methodsToTest): List {
+ return methodFilter?.let {
+ if (it.isEmpty()) group
+ else group.filter { method -> method.fullname in it }
+ } ?: group
+ }
+
+ fun methodsFilter(group: List, containingClass: PythonClassId): List {
+ val localMethodFilter = methodsToTest?.let { it.filter { name -> name.startsWith(containingClass.typeName) } }
+ return functionsFilter(group, localMethodFilter)
+ }
+
+ fun groupFilter(group: List, classFilter: List?): List {
+ if (group.isEmpty()) return emptyList()
+ val groupClass = group.first().containingPythonClassId
+ if (classFilter != null && groupClass?.typeName !in classFilter) return emptyList()
+ return if (groupClass == null) functionsFilter(group)
+ else methodsFilter(group, groupClass)
+ }
+
+ val methodGroups = (methods + listOf(functions))
+ .map { groupFilter(it, classesToTest()) }
+ .map {
+ it.filter { forbiddenMethods.all { name -> !it.name.endsWith(name) } }
+ }
+ .filter { it.isNotEmpty() }
+
+ methodsToTest?.forEach { name ->
+ require(methodGroups.flatten().any { it.fullname == name }) { "Cannot find function '$name' in file '$absPathToSourceFile'" }
+ }
+ classesToTest()?.forEach { name ->
+ require(methodGroups.flatten().any { it.containingPythonClassId?.typeName == name }) { "Cannot find class '$name' or methods in file '$absPathToSourceFile'" }
+ }
+ return methodGroups
+ }
+
+ private val shutdown: AtomicBoolean = AtomicBoolean(false)
+ private val alreadySaved: AtomicBoolean = AtomicBoolean(false)
+
+ private val shutdownThread =
+ object : Thread() {
+ override fun run() {
+ shutdown.set(true)
+ try {
+ if (!alreadySaved.get()) {
+ saveTests()
+ }
+ } catch (_: InterruptedException) {
+ logger.warn { "Interrupted exception" }
+ }
+ }
+ }
+
+ private fun addShutdownHook() {
+ Runtime.getRuntime().addShutdownHook(shutdownThread)
+ }
+
+ private fun removeShutdownHook() {
+ Runtime.getRuntime().removeShutdownHook(shutdownThread)
+ }
+
+ private val testWriter = TestWriter()
+
+ private fun saveTests() {
+ logger.info("Saving tests...")
+ val testCode = testWriter.generateTestCode()
+ writeToFileAndSave(output, testCode)
+
+ Cleaner.doCleaning()
+ alreadySaved.set(true)
+ }
+
+ private fun initialize() {
+ absPathToSourceFile = sourceFile.toAbsolutePath()
+ sourceFileContent = File(absPathToSourceFile).readText()
+ }
+
+ override fun run() {
+ initialize()
+
+ val sysPathDirectories = directoriesForSysPath.map { it.toAbsolutePath() }.toSet()
+ val currentPythonModule = when (val module = findCurrentPythonModule(sysPathDirectories, absPathToSourceFile)) {
+ is Success -> {
+ module.value
+ }
+
+ is Fail -> {
+ logger.error { module.message }
+ return
+ }
+ }
+
+ logger.info("Checking requirements...")
+ val installer = CliRequirementsInstaller(installRequirementsIfMissing, logger)
+ val requirementsAreInstalled = RequirementsInstaller.checkRequirements(
+ installer,
+ pythonPath,
+ if (testFramework.isInstalled) emptyList() else listOf(testFramework.mainPackage)
+ )
+ if (!requirementsAreInstalled) {
+ return
+ }
+
+ val pythonMethodGroups = getPythonMethods()
+
+ val testFile = TestFileInformation(absPathToSourceFile, sourceFileContent, currentPythonModule.dropInitFile())
+
+ val mypyConfig: MypyConfig
+ val mypyTime = measureTimeMillis {
+ logger.info("Loading information about Python types...")
+ mypyConfig = PythonTestGenerationProcessor.sourceCodeAnalyze(
+ sysPathDirectories,
+ pythonPath,
+ testFile,
+ )
+ }
+ logger.info { "Mypy time: $mypyTime" }
+
+ addShutdownHook()
+
+ val startTime = System.currentTimeMillis()
+ val countOfFunctions = pythonMethodGroups.sumOf { it.size }
+ val timeoutAfterMypy = if (includeMypyAnalysisTime) timeout - mypyTime else timeout
+ val oneFunctionTimeout = separateTimeout(timeoutAfterMypy, countOfFunctions)
+ logger.info { "One function timeout: ${oneFunctionTimeout}ms. x${countOfFunctions}" }
+ pythonMethodGroups.forEachIndexed { index, pythonMethods ->
+ val usedTime = System.currentTimeMillis() - startTime
+ val countOfTestedFunctions = pythonMethodGroups.take(index).sumOf { it.size }
+ val expectedTime = countOfTestedFunctions * oneFunctionTimeout
+ val localOneFunctionTimeout = if (usedTime < expectedTime) {
+ separateTimeout(timeoutAfterMypy - usedTime, countOfFunctions - countOfTestedFunctions)
+ } else {
+ oneFunctionTimeout
+ }
+ val localTimeout = pythonMethods.size * localOneFunctionTimeout
+ logger.info { "Timeout for current group: ${localTimeout}ms" }
+
+ val config = PythonTestGenerationConfig(
+ pythonPath = pythonPath,
+ testFileInformation = testFile,
+ sysPathDirectories = sysPathDirectories,
+ testedMethods = pythonMethods,
+ timeout = localTimeout,
+ timeoutForRun = timeoutForRun,
+ testFramework = testFramework,
+ testSourceRootPath = Paths.get(output.toAbsolutePath()).parent.toAbsolutePath(),
+ withMinimization = !doNotMinimize,
+ isCanceled = { shutdown.get() },
+ runtimeExceptionTestsBehaviour = RuntimeExceptionTestsBehaviour.valueOf(runtimeExceptionTestsBehaviour),
+ coverageMeasureMode = PythonCoverageMode.parse(coverageMeasureMode),
+ sendCoverageContinuously = !doNotSendCoverageContinuously,
+ coverageOutputFormat = CoverageOutputFormat.Lines,
+ prohibitedExceptions = if (prohibitedExceptions == listOf("-")) emptyList() else prohibitedExceptions,
+ )
+ val processor = PythonCliProcessor(
+ config,
+ testWriter,
+ coverageOutput,
+ executionCounterOutput,
+ )
+
+ logger.info("Generating tests...")
+ val testSets = processor.testGenerate(mypyConfig).let {
+ return@let if (doNotGenerateRegressionSuite) {
+ it.map { testSet ->
+ PythonTestSet(
+ testSet.method,
+ testSet.executions.filterNot { execution -> execution.result is UtExecutionSuccess },
+ testSet.errors,
+ testSet.executionsNumber,
+ testSet.clustersInfo,
+ )
+ }
+ } else {
+ it
+ }
+ }
+ if (testSets.isNotEmpty()) {
+ logger.info("Saving tests...")
+ val testCode = processor.testCodeGenerate(testSets)
+ processor.saveTests(testCode)
+
+
+ logger.info("Saving coverage report...")
+ processor.processCoverageInfo(testSets)
+
+ logger.info(
+ "Finished test generation for the following functions: ${
+ testSets.joinToString { it.method.name }
+ }"
+ )
+ }
+ }
+ saveTests()
+ removeShutdownHook()
+ exitProcess(0)
+ }
+}
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonRunTestsCommand.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonRunTestsCommand.kt
new file mode 100644
index 0000000000..ffa9d08462
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonRunTestsCommand.kt
@@ -0,0 +1,82 @@
+package org.utbot.cli.language.python
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.arguments.argument
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.required
+import com.github.ajalt.clikt.parameters.types.choice
+import org.utbot.python.framework.codegen.model.Pytest
+import org.utbot.python.framework.codegen.model.Unittest
+import org.utbot.python.utils.CmdResult
+import org.utbot.python.utils.runCommand
+import java.io.File
+import java.nio.file.Paths
+
+class PythonRunTestsCommand : CliktCommand(name = "run_python", help = "Run tests in the specified file") {
+
+ private val sourceFile by argument(
+ help = "File with Python tests to run."
+ )
+
+ private val pythonPath by option(
+ "-p", "--python-path",
+ help = "Path to Python interpreter."
+ ).required()
+
+ private val output by option(
+ "-o", "--output",
+ help = "Specify file for report."
+ )
+
+ private val testFrameworkAsString by option("--test-framework", help = "Test framework of tests to run")
+ .choice(Pytest.toString(), Unittest.toString())
+ .default(Unittest.toString())
+
+ private fun runUnittest(): CmdResult {
+ val currentPath = Paths.get("").toAbsolutePath().toString()
+ val sourceFilePath = Paths.get(sourceFile).toAbsolutePath().toString()
+ return if (sourceFilePath.startsWith(currentPath)) {
+ runCommand(
+ listOf(
+ pythonPath,
+ "-m",
+ "unittest",
+ sourceFile
+ )
+ )
+ } else CmdResult(
+ "",
+ "File $sourceFile can not be imported from Unittest. Move test file to child directory or use pytest.",
+ 1
+ )
+ }
+
+ private fun runPytest(): CmdResult =
+ runCommand(
+ listOf(
+ pythonPath,
+ "-m",
+ "pytest",
+ sourceFile
+ )
+ )
+
+ override fun run() {
+ val result =
+ when (testFrameworkAsString) {
+ Unittest.toString() -> runUnittest()
+ Pytest.toString() -> runPytest()
+ else -> error("Not reachable")
+ }
+
+ output?.let {
+ val file = File(it)
+ file.writeText(result.stderr + result.stdout)
+ file.parentFile?.mkdirs()
+ file.createNewFile()
+ }
+ println(result.stderr)
+ println(result.stdout)
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonTypeInferenceCommand.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonTypeInferenceCommand.kt
new file mode 100644
index 0000000000..124cd6a36e
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonTypeInferenceCommand.kt
@@ -0,0 +1,89 @@
+package org.utbot.cli.language.python
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.arguments.argument
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.options.required
+import com.github.ajalt.clikt.parameters.options.split
+import com.github.ajalt.clikt.parameters.types.long
+import mu.KotlinLogging
+import org.utbot.python.newtyping.inference.TypeInferenceProcessor
+import org.utpython.types.pythonTypeRepresentation
+import org.utbot.python.utils.Fail
+import org.utbot.python.utils.RequirementsUtils.requirements
+import org.utbot.python.utils.Success
+
+private val logger = KotlinLogging.logger {}
+
+class PythonTypeInferenceCommand : CliktCommand(
+ name = "infer_types",
+ help = "Infer types for the specified Python top-level function."
+) {
+ private val sourceFile by argument(
+ help = "File with Python code."
+ )
+
+ private val function by argument(
+ help = "Function to infer types for."
+ )
+
+ private val className by option(
+ "-c", "--class",
+ help = "Class of the function"
+ )
+
+ private val pythonPath by option(
+ "-p", "--python-path",
+ help = "(required) Path to Python interpreter. Use only UNC format on Windows."
+ ).required()
+
+ private val timeout by option(
+ "-t", "--timout",
+ help = "(required) Timeout in milliseconds for type inference."
+ ).long().required()
+
+ private val directoriesForSysPath by option(
+ "-s", "--sys-path",
+ help = "(required) Directories to add to sys.path. Use only UNC format on Windows. " +
+ "One of directories must contain the file with the methods under test."
+ ).split(",").required()
+
+ private var startTime: Long = 0
+
+ override fun run() {
+ val moduleOpt = findCurrentPythonModule(
+ directoriesForSysPath.map { it.toAbsolutePath() },
+ sourceFile.toAbsolutePath()
+ )
+ if (moduleOpt is Fail) {
+ logger.error(moduleOpt.message)
+ }
+ val module = (moduleOpt as Success).value
+
+ val result = TypeInferenceProcessor(
+ pythonPath,
+ directoriesForSysPath.map{ it.toAbsolutePath() }.toSet(),
+ sourceFile,
+ module,
+ function,
+ className
+ ).inferTypes(
+ startingTypeInferenceAction = {
+ startTime = System.currentTimeMillis()
+ logger.info("Starting type inference...")
+ },
+ processSignature = { logger.info("Found signature: " + it.pythonTypeRepresentation()) },
+ cancel = { System.currentTimeMillis() - startTime > timeout },
+ checkRequirementsAction = { logger.info("Checking Python requirements...") },
+ missingRequirementsAction = {
+ logger.error("Some of the following Python requirements are missing: " +
+ "${requirements.joinToString()}. Please install them.")
+ },
+ loadingInfoAboutTypesAction = { logger.info("Loading information about types...") },
+ analyzingCodeAction = { logger.info("Analyzing code...") },
+ pythonMethodExtractionFailAction = { logger.error(it) }
+ )
+
+ result.forEach { println(it.pythonTypeRepresentation()) }
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/TestWriter.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/TestWriter.kt
new file mode 100644
index 0000000000..9857fdbe3e
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/TestWriter.kt
@@ -0,0 +1,28 @@
+package org.utbot.cli.language.python
+
+class TestWriter {
+ private val testCode: MutableList = mutableListOf()
+
+ fun addTestCode(code: String) {
+ testCode.add(code)
+ }
+
+ fun generateTestCode(): String {
+ val (importLines, code) = testCode.fold(mutableListOf() to StringBuilder()) { acc, s ->
+// val lines = s.split(System.lineSeparator())
+ val lines = s.split("(\\r\\n|\\r|\\n)".toRegex())
+ val firstClassIndex = lines.indexOfFirst { it.startsWith("class") }
+ lines.take(firstClassIndex).forEach { line -> if (line !in acc.first) acc.first.add(line) }
+ lines.drop(firstClassIndex).forEach { line -> acc.second.append(line + System.lineSeparator()) }
+ acc.first to acc.second
+ }
+ val codeBuilder = StringBuilder()
+ importLines.filter { it.isNotEmpty() }.forEach {
+ codeBuilder.append(it)
+ codeBuilder.append(System.lineSeparator())
+ }
+ codeBuilder.append(System.lineSeparator())
+ codeBuilder.append(code)
+ return codeBuilder.toString()
+ }
+}
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Utils.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Utils.kt
new file mode 100644
index 0000000000..708cfa6131
--- /dev/null
+++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/Utils.kt
@@ -0,0 +1,28 @@
+package org.utbot.cli.language.python
+
+import org.utbot.python.utils.Fail
+import org.utbot.python.utils.Optional
+import org.utbot.python.utils.Success
+import org.utbot.python.utils.getModuleName
+import java.io.File
+
+fun findCurrentPythonModule(
+ directoriesForSysPath: Collection,
+ sourceFile: String
+): Optional {
+ directoriesForSysPath.forEach { path ->
+ val module = getModuleName(path.toAbsolutePath(), sourceFile.toAbsolutePath())
+ if (module != null)
+ return Success(module)
+ }
+ return Fail("Couldn't find path for $sourceFile in --sys-path option. Please, specify it.")
+}
+
+fun String.toAbsolutePath(): String =
+ File(this).canonicalPath
+
+fun writeToFileAndSave(filename: String, fileContent: String) {
+ val file = File(filename)
+ file.parentFile?.mkdirs()
+ file.writeText(fileContent)
+}
diff --git a/utbot-cli-python/src/main/resources/log4j2.xml b/utbot-cli-python/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..3d6ee82bcf
--- /dev/null
+++ b/utbot-cli-python/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/utbot-cli-python/src/main/resources/version.properties b/utbot-cli-python/src/main/resources/version.properties
new file mode 100644
index 0000000000..956d6e337a
--- /dev/null
+++ b/utbot-cli-python/src/main/resources/version.properties
@@ -0,0 +1,2 @@
+#to be populated during the build task
+version=N/A
\ No newline at end of file
diff --git a/utbot-cli/Dockerfile b/utbot-cli/Dockerfile
new file mode 100644
index 0000000000..9e4e97e1b8
--- /dev/null
+++ b/utbot-cli/Dockerfile
@@ -0,0 +1,28 @@
+FROM azul/zulu-openjdk:11.0.15-11.56.19
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+WORKDIR /usr/src/
+
+RUN apt-get update \
+ && apt-get install -y -q --no-install-recommends \
+ wget \
+ unzip \
+ && rm -rf /var/lib/apt/lists/*
+
+# Install Kotlin compiler
+
+ENV KOTLIN_COMPILER_VERSION=1.8.0
+ENV KOTLIN_HOME="/opt/kotlin/kotlinc"
+ENV PATH="${KOTLIN_HOME}/bin:${PATH}"
+
+RUN wget --no-verbose https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_COMPILER_VERSION}/kotlin-compiler-${KOTLIN_COMPILER_VERSION}.zip -O /tmp/${KOTLIN_COMPILER_VERSION}.zip \
+ && unzip -q -d /opt/kotlin /tmp/${KOTLIN_COMPILER_VERSION}.zip
+
+# Install UTBot Java CLI
+
+ARG ARTIFACT_PATH
+COPY ${ARTIFACT_PATH} .
+
+RUN UTBOT_JAVA_CLI_PATH="$(find /usr/src -type f -name 'utbot-cli*')" \
+ && ln -s "${UTBOT_JAVA_CLI_PATH}" /usr/src/utbot-cli.jar
diff --git a/utbot-cli/build.gradle b/utbot-cli/build.gradle
index 9e2106f3e7..139bc81c4c 100644
--- a/utbot-cli/build.gradle
+++ b/utbot-cli/build.gradle
@@ -1,33 +1,36 @@
-apply from: "${parent.projectDir}/gradle/include/jvm-project.gradle"
+tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17
+ freeCompilerArgs += ["-Xallow-result-return-type", "-Xsam-conversions=class"]
+ }
+}
-configurations {
- fetchInstrumentationJar
+tasks.withType(JavaCompile) {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_17
}
-compileKotlin {
- kotlinOptions {
- allWarningsAsErrors = false
- }
+configurations {
+ fetchInstrumentationJar
}
dependencies {
- api project(":utbot-framework")
- api project(':utbot-summary')
+ implementation project(':utbot-framework')
- implementation group: 'org.mockito', name: 'mockito-core', version: mockito_version
+ implementation group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
// Without this dependency testng tests do not run.
implementation group: 'com.beust', name: 'jcommander', version: '1.48'
- implementation group: 'org.testng', name: 'testng', version: testng_version
- implementation group: 'junit', name: 'junit', version: junit4_version
- implementation group: 'org.junit.platform', name: 'junit-platform-console-standalone', version: junit4_platform_version
- implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlin_logging_version
- implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: clikt_version
- implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junit5_version
- implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junit5_version
- compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2_version
- compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2_version
- implementation group: 'org.jacoco', name: 'org.jacoco.report', version: jacoco_version
- fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration:'instrumentationArchive')
+ implementation group: 'org.testng', name: 'testng', version: testNgVersion
+ implementation group: 'junit', name: 'junit', version: junit4Version
+ implementation group: 'org.junit.platform', name: 'junit-platform-console-standalone', version: junit4PlatformVersion
+ implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
+ implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: cliktVersion
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junit5Version
+ implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junit5Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
+ implementation group: 'org.jacoco', name: 'org.jacoco.report', version: jacocoVersion
+ fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')
}
processResources {
@@ -40,6 +43,7 @@ task createProperties(dependsOn: processResources) {
doLast {
new File("$buildDir/resources/main/version.properties").withWriter { w ->
Properties properties = new Properties()
+ //noinspection GroovyAssignabilityCheck
properties['version'] = project.version.toString()
properties.store w, null
}
@@ -59,8 +63,9 @@ jar {
attributes 'JAR-Type': 'Fat JAR'
}
- version project.version
+ archiveVersion.set(project.version as String)
+ dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
diff --git a/utbot-cli/src/main/kotlin/org/utbot/cli/BunchTestGeneratorCommand.kt b/utbot-cli/src/main/kotlin/org/utbot/cli/BunchTestGeneratorCommand.kt
index f4b8e2e852..6b54026aa7 100644
--- a/utbot-cli/src/main/kotlin/org/utbot/cli/BunchTestGeneratorCommand.kt
+++ b/utbot-cli/src/main/kotlin/org/utbot/cli/BunchTestGeneratorCommand.kt
@@ -4,6 +4,7 @@ import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.choice
+import mu.KotlinLogging
import org.utbot.cli.util.createClassLoader
import org.utbot.engine.Mocker
import org.utbot.framework.plugin.api.ClassId
@@ -14,9 +15,6 @@ import java.io.File
import java.net.URLClassLoader
import java.nio.file.Paths
import java.time.temporal.ChronoUnit
-import kotlin.reflect.KClass
-import kotlin.reflect.jvm.jvmName
-import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
@@ -93,25 +91,25 @@ class BunchTestGeneratorCommand : GenerateTestsAbstractCommand(
logger.debug { "Generating test for [$targetClassFqn] - started" }
logger.debug { "Classpath to be used: ${newline()} $classPath ${newline()}" }
- val classUnderTest: KClass<*> = loadClassBySpecifiedFqn(targetClassFqn)
- val targetMethods = classUnderTest.targetMethods()
- if (targetMethods.isEmpty()) return
-
- initializeEngine(workingDirectory)
-
- // utContext is used in `generateTestCases`, `generateTest`, `generateReport`
+ // utContext is used in `targetMethods`, `generate`, `generateTest`, `generateReport`
withUtContext(UtContext(classLoader)) {
+ val classIdUnderTest = ClassId(targetClassFqn)
+ val targetMethods = classIdUnderTest.targetMethods()
+ if (targetMethods.isEmpty()) return
+
+ val testCaseGenerator = initializeGenerator(workingDirectory)
- val testClassName = "${classUnderTest.simpleName}Test"
+ val testClassName = "${classIdUnderTest.simpleName}Test"
- val testCases = generateTestCases(
+ val testSets = generateTestSets(
+ testCaseGenerator,
targetMethods,
searchDirectory = workingDirectory,
chosenClassesToMockAlways = (Mocker.defaultSuperClassesToMockAlwaysNames + classesToMockAlways)
.mapTo(mutableSetOf()) { ClassId(it) }
)
- val testClassBody = generateTest(classUnderTest, testClassName, testCases)
+ val testClassBody = generateTest(classIdUnderTest, testClassName, testSets)
val outputArgAsFile = File(output ?: "")
if (!outputArgAsFile.exists()) {
@@ -120,7 +118,7 @@ class BunchTestGeneratorCommand : GenerateTestsAbstractCommand(
val outputDir = "$outputArgAsFile${File.separator}"
- val packageNameAsList = classUnderTest.jvmName.split('.').dropLast(1)
+ val packageNameAsList = classIdUnderTest.jvmName.split('.').dropLast(1)
val path = Paths.get("${outputDir}${packageNameAsList.joinToString(separator = File.separator)}")
path.toFile().mkdirs()
diff --git a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt
index 3db74fb999..4d39fd2c1c 100644
--- a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt
+++ b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt
@@ -8,6 +8,7 @@ import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.options.unique
import com.github.ajalt.clikt.parameters.types.choice
import com.github.ajalt.clikt.parameters.types.long
+import mu.KotlinLogging
import org.utbot.common.PathUtil.classFqnToPath
import org.utbot.common.PathUtil.replaceSeparator
import org.utbot.common.PathUtil.toPath
@@ -15,33 +16,32 @@ import org.utbot.common.PathUtil.toURL
import org.utbot.common.toPath
import org.utbot.engine.Mocker
import org.utbot.framework.UtSettings
-import org.utbot.framework.codegen.ForceStaticMocking
-import org.utbot.framework.codegen.MockitoStaticMocking
-import org.utbot.framework.codegen.NoStaticMocking
-import org.utbot.framework.codegen.StaticsMocking
-import org.utbot.framework.codegen.model.ModelBasedTestCodeGenerator
-import org.utbot.framework.codegen.testFrameworkByName
+import org.utbot.framework.codegen.domain.ForceStaticMocking
+import org.utbot.framework.codegen.domain.MockitoStaticMocking
+import org.utbot.framework.codegen.domain.NoStaticMocking
+import org.utbot.framework.codegen.domain.ProjectType
+import org.utbot.framework.codegen.domain.StaticsMocking
+import org.utbot.framework.codegen.domain.testFrameworkByName
+import org.utbot.framework.codegen.generator.CodeGenerator
+import org.utbot.framework.codegen.generator.CodeGeneratorParams
+import org.utbot.framework.codegen.services.language.CgLanguageAssistant
import org.utbot.framework.plugin.api.ClassId
import org.utbot.framework.plugin.api.CodegenLanguage
-import org.utbot.framework.plugin.api.MockFramework
+import org.utbot.framework.plugin.api.ExecutableId
+import org.utbot.framework.plugin.api.MethodId
import org.utbot.framework.plugin.api.MockStrategyApi
+import org.utbot.framework.plugin.api.TestCaseGenerator
import org.utbot.framework.plugin.api.TreatOverflowAsError
-import org.utbot.framework.plugin.api.UtBotTestCaseGenerator
-import org.utbot.framework.plugin.api.UtMethod
-import org.utbot.framework.plugin.api.UtTestCase
-import org.utbot.summary.summarize
+import org.utbot.framework.plugin.api.UtMethodTestSet
+import org.utbot.framework.plugin.services.JdkInfoDefaultProvider
+import org.utbot.summary.summarizeAll
import java.io.File
-import java.lang.reflect.Method
import java.net.URLClassLoader
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import java.time.LocalDateTime
import java.time.temporal.ChronoUnit
-import kotlin.reflect.KCallable
-import kotlin.reflect.KClass
-import kotlin.reflect.jvm.kotlinFunction
-import mu.KotlinLogging
private const val LONG_GENERATION_TIMEOUT = 1_200_000L
@@ -50,7 +50,7 @@ private val logger = KotlinLogging.logger {}
abstract class GenerateTestsAbstractCommand(name: String, help: String) :
CliktCommand(name = name, help = help) {
- abstract val classPath:String?
+ abstract val classPath: String?
private val mockStrategy by option("-m", "--mock-strategy", help = "Defines the mock strategy")
.choice(
@@ -151,22 +151,20 @@ abstract class GenerateTestsAbstractCommand(name: String, help: String) :
return Paths.get(classAbsolutePath)
}
- protected fun loadClassBySpecifiedFqn(classFqn: String): KClass<*> =
- classLoader.loadClass(classFqn).kotlin
-
- protected fun generateTestCases(
- targetMethods: List>,
+ protected fun generateTestSets(
+ testCaseGenerator: TestCaseGenerator,
+ targetMethods: List,
sourceCodeFile: Path? = null,
searchDirectory: Path,
chosenClassesToMockAlways: Set
- ): List =
- UtBotTestCaseGenerator.generateForSeveralMethods(
+ ): List =
+ testCaseGenerator.generate(
targetMethods,
mockStrategy,
chosenClassesToMockAlways,
generationTimeout
- ).map {
- if (sourceCodeFile != null) it.summarize(sourceCodeFile.toFile(), searchDirectory) else it
+ ).let {
+ if (sourceCodeFile != null) it.summarizeAll(searchDirectory, sourceCodeFile.toFile()) else it
}
@@ -185,51 +183,50 @@ abstract class GenerateTestsAbstractCommand(name: String, help: String) :
}
}
- protected fun generateTest(classUnderTest: KClass<*>, testClassname: String, testCases: List): String =
+ protected fun generateTest(
+ classUnderTest: ClassId,
+ testClassname: String,
+ testSets: List
+ ): String =
initializeCodeGenerator(
testFramework,
classUnderTest
- ).generateAsString(testCases, testClassname)
+ ).generateAsString(testSets, testClassname)
- protected fun initializeEngine(workingDirectory: Path) {
+ protected fun initializeGenerator(workingDirectory: Path): TestCaseGenerator {
val classPathNormalized =
classLoader.urLs.joinToString(separator = File.pathSeparator) { it.toPath().absolutePath }
-
- // TODO: SAT-1566
- // Set UtSettings parameters.
+ // TODO: SAT-1566 Set UtSettings parameters.
UtSettings.treatOverflowAsError = treatOverflowAsError == TreatOverflowAsError.AS_ERROR
- UtBotTestCaseGenerator.init(workingDirectory, classPathNormalized, System.getProperty("java.class.path")) { false }
+ return TestCaseGenerator(
+ listOf(workingDirectory),
+ classPathNormalized,
+ System.getProperty("java.class.path"),
+ JdkInfoDefaultProvider().info
+ )
}
- private fun initializeCodeGenerator(testFramework: String, classUnderTest: KClass<*>): ModelBasedTestCodeGenerator {
+ private fun initializeCodeGenerator(testFramework: String, classUnderTest: ClassId): CodeGenerator {
val generateWarningsForStaticMocking =
forceStaticMocking == ForceStaticMocking.FORCE && staticsMocking is NoStaticMocking
- return ModelBasedTestCodeGenerator().apply {
- init(
+ return CodeGenerator(
+ CodeGeneratorParams(
testFramework = testFrameworkByName(testFramework),
- classUnderTest = classUnderTest.java,
- mockFramework = MockFramework.MOCKITO, // TODO: rewrite default mock framework system
+ classUnderTest = classUnderTest,
+ //TODO: Support Spring projects in utbot-cli if requested
+ projectType = ProjectType.PureJvm,
codegenLanguage = codegenLanguage,
+ cgLanguageAssistant = CgLanguageAssistant.getByCodegenLanguage(codegenLanguage),
staticsMocking = staticsMocking,
forceStaticMocking = forceStaticMocking,
- generateWarningsForStaticMocking = generateWarningsForStaticMocking
+ generateWarningsForStaticMocking = generateWarningsForStaticMocking,
)
- }
+ )
}
- protected fun KClass<*>.targetMethods() =
- this.java.declaredMethods.mapNotNull {
- toUtMethod(it, kClass = this)
- }
-
- private fun toUtMethod(method: Method, kClass: KClass<*>): UtMethod<*>? =
- method.kotlinFunction?.let {
- UtMethod(it as KCallable<*>, kClass)
- } ?: run {
- logger.info("Method does not have a kotlin function: $method")
- null
- }
+ protected fun ClassId.targetMethods(): List =
+ allMethods.filter { it.classId == this }.toList() // only declared methods
protected fun saveToFile(snippet: String, outputPath: String?) =
outputPath?.let {
diff --git a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsCommand.kt b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsCommand.kt
index 0380efaa7b..a6837ca80f 100644
--- a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsCommand.kt
+++ b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsCommand.kt
@@ -7,20 +7,24 @@ import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.options.required
import com.github.ajalt.clikt.parameters.types.choice
+import mu.KotlinLogging
import org.utbot.common.PathUtil.toPath
+import org.utbot.common.filterWhen
import org.utbot.engine.Mocker
+import org.utbot.framework.UtSettings
import org.utbot.framework.plugin.api.ClassId
import org.utbot.framework.plugin.api.CodegenLanguage
-import org.utbot.framework.plugin.api.UtTestCase
+import org.utbot.framework.plugin.api.UtMethodTestSet
import org.utbot.framework.plugin.api.util.UtContext
+import org.utbot.framework.plugin.api.util.isAbstract
+import org.utbot.framework.plugin.api.util.isSynthetic
import org.utbot.framework.plugin.api.util.withUtContext
+import org.utbot.framework.util.isKnownImplicitlyDeclaredMethod
import org.utbot.sarif.SarifReport
import org.utbot.sarif.SourceFindingStrategyDefault
import java.nio.file.Files
import java.nio.file.Paths
import java.time.temporal.ChronoUnit
-import kotlin.reflect.KClass
-import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
@@ -47,8 +51,8 @@ class GenerateTestsCommand :
help = "Specifies source code file for a generated test"
)
.required()
- .check("Must exist and ends with *.java suffix") {
- it.endsWith(".java") && Files.exists(Paths.get(it))
+ .check("Must exist and end with .java or .kt suffix") {
+ (it.endsWith(".java") || it.endsWith(".kt")) && Files.exists(Paths.get(it))
}
private val projectRoot by option(
@@ -90,32 +94,37 @@ class GenerateTestsCommand :
logger.debug { "Generating test for [$targetClassFqn] - started" }
logger.debug { "Classpath to be used: ${newline()} $classPath ${newline()}" }
- val classUnderTest: KClass<*> = loadClassBySpecifiedFqn(targetClassFqn)
- val targetMethods = classUnderTest.targetMethods()
- initializeEngine(workingDirectory)
-
- if (targetMethods.isEmpty()) {
- throw Exception("Nothing to process. No methods were provided")
- }
- // utContext is used in `generateTestCases`, `generateTest`, `generateReport`
- withUtContext(UtContext(targetMethods.first().clazz.java.classLoader)) {
+ // utContext is used in `targetMethods`, `generate`, `generateTest`, `generateReport`
+ withUtContext(UtContext(classLoader)) {
+ val classIdUnderTest = ClassId(targetClassFqn)
+ val targetMethods = classIdUnderTest.targetMethods()
+ .filterWhen(UtSettings.skipTestGenerationForSyntheticAndImplicitlyDeclaredMethods) {
+ !it.isSynthetic && !it.isKnownImplicitlyDeclaredMethod
+ }
+ .filterNot { it.isAbstract }
+ val testCaseGenerator = initializeGenerator(workingDirectory)
+
+ if (targetMethods.isEmpty()) {
+ throw Exception("Nothing to process. No methods were provided")
+ }
val testClassName = output?.toPath()?.toFile()?.nameWithoutExtension
- ?: "${classUnderTest.simpleName}Test"
- val testCases = generateTestCases(
+ ?: "${classIdUnderTest.simpleName}Test"
+ val testSets = generateTestSets(
+ testCaseGenerator,
targetMethods,
Paths.get(sourceCodeFile),
searchDirectory = workingDirectory,
chosenClassesToMockAlways = (Mocker.defaultSuperClassesToMockAlwaysNames + classesToMockAlways)
.mapTo(mutableSetOf()) { ClassId(it) }
)
- val testClassBody = generateTest(classUnderTest, testClassName, testCases)
+ val testClassBody = generateTest(classIdUnderTest, testClassName, testSets)
if (printToStdOut) {
logger.info { testClassBody }
}
if (sarifReport != null) {
- generateReport(targetClassFqn, testCases, testClassBody)
+ generateReport(targetClassFqn, testSets, testClassBody)
}
saveToFile(testClassBody, output)
}
@@ -128,7 +137,7 @@ class GenerateTestsCommand :
}
}
- private fun generateReport(classFqn: String, testCases: List, testClassBody: String) = try {
+ private fun generateReport(classFqn: String, testSets: List, testClassBody: String) = try {
// reassignments for smart casts
val testsFilePath = output
val projectRootPath = projectRoot
@@ -143,9 +152,9 @@ class GenerateTestsCommand :
else -> {
val sourceFinding =
SourceFindingStrategyDefault(classFqn, sourceCodeFile, testsFilePath, projectRootPath)
- val report = SarifReport(testCases, testClassBody, sourceFinding).createReport()
+ val report = SarifReport(testSets, testClassBody, sourceFinding).createReport().toJson()
saveToFile(report, sarifReport)
- println("The report was saved to \"$sarifReport\". You can open it using the VS Code extension \"Sarif Viewer\".")
+ println("The report was saved to \"$sarifReport\".")
}
}
} catch (t: Throwable) {
diff --git a/utbot-core/build.gradle b/utbot-core/build.gradle
deleted file mode 100644
index 271a7a5651..0000000000
--- a/utbot-core/build.gradle
+++ /dev/null
@@ -1,16 +0,0 @@
-plugins {
- id "com.github.johnrengelman.shadow" version "6.1.0"
-}
-
-apply from: "${parent.projectDir}/gradle/include/jvm-project.gradle"
-
-dependencies {
- implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlin_logging_version
- implementation group: 'net.java.dev.jna', name: 'jna-platform', version: '5.5.0'
-}
-
-shadowJar {
- configurations = [project.configurations.compileClasspath]
- archiveClassifier.set('')
- minimize()
-}
\ No newline at end of file
diff --git a/utbot-core/build.gradle.kts b/utbot-core/build.gradle.kts
new file mode 100644
index 0000000000..faada50cce
--- /dev/null
+++ b/utbot-core/build.gradle.kts
@@ -0,0 +1,13 @@
+val kotlinLoggingVersion: String by rootProject
+val junit4Version: String by rootProject
+
+plugins {
+ id("com.github.johnrengelman.shadow") version "7.1.2"
+}
+
+dependencies {
+ implementation(group = "io.github.microutils", name = "kotlin-logging", version = kotlinLoggingVersion)
+ implementation(group = "net.java.dev.jna", name = "jna-platform", version = "5.5.0")
+
+ testImplementation(group = "junit", name = "junit", version = junit4Version)
+}
\ No newline at end of file
diff --git a/utbot-core/src/main/kotlin/org/utbot/common/AbstractSettings.kt b/utbot-core/src/main/kotlin/org/utbot/common/AbstractSettings.kt
new file mode 100644
index 0000000000..3c5e4bb78f
--- /dev/null
+++ b/utbot-core/src/main/kotlin/org/utbot/common/AbstractSettings.kt
@@ -0,0 +1,182 @@
+package org.utbot.common
+
+import java.io.FileInputStream
+import java.io.IOException
+import java.io.InputStream
+import java.util.*
+import kotlin.Comparator
+import mu.KLogger
+import org.utbot.common.PathUtil.toPath
+import kotlin.properties.PropertyDelegateProvider
+import kotlin.properties.ReadWriteProperty
+import kotlin.reflect.KProperty
+
+interface SettingsContainer {
+ fun settingFor(
+ defaultValue: T,
+ range : Triple>? = null,
+ converter: (String) -> T
+ ): PropertyDelegateProvider>
+
+ fun getInputStream() : InputStream? = null
+
+ // Returns true iff some properties have non-default values
+ fun isCustomized() = false
+}
+
+interface SettingsContainerFactory {
+ fun createSettingsContainer(
+ logger: KLogger,
+ defaultKeyForSettingsPath: String,
+ defaultSettingsPath: String? = null) : SettingsContainer
+}
+
+internal open class PropertiesSettingsContainer(
+ private val logger: KLogger,
+ val defaultKeyForSettingsPath: String,
+ val defaultSettingsPath: String? = null): SettingsContainer {
+ companion object: SettingsContainerFactory {
+ override fun createSettingsContainer(
+ logger: KLogger,
+ defaultKeyForSettingsPath: String,
+ defaultSettingsPath: String?
+ ): SettingsContainer = PropertiesSettingsContainer(logger, defaultKeyForSettingsPath, defaultSettingsPath)
+ }
+
+ private val properties = Properties().also { props ->
+ try {
+ getInputStream()?.use {
+ props.load(it)
+ }
+ } catch (e: IOException) {
+ logger.info(e) { e.message }
+ }
+ }
+
+ override fun getInputStream() : InputStream? {
+ val settingsPath = System.getProperty(defaultKeyForSettingsPath) ?: defaultSettingsPath
+ val settingsPathFile = settingsPath?.toPath()?.toFile()
+ return if (settingsPathFile?.exists() == true) FileInputStream(settingsPathFile) else null
+ }
+
+ private val settingsValues: MutableMap, Any?> = mutableMapOf()
+ private var customized: Boolean = false
+
+ inner class SettingDelegate(val property: KProperty<*>, val initializer: () -> T): ReadWriteProperty {
+ private var value = initializer()
+
+ init {
+ updateSettingValue()
+ }
+
+ override operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value
+
+ override operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
+ this.value = value
+ updateSettingValue()
+ }
+
+ private fun updateSettingValue() {
+ settingsValues[property] = value
+ }
+ }
+
+ override fun settingFor(
+ defaultValue: T,
+ range : Triple>?,
+ converter: (String) -> T
+ ): PropertyDelegateProvider> {
+ return PropertyDelegateProvider { _, property ->
+ SettingDelegate(property) {
+ try {
+ properties.getProperty(property.name)?.let {
+ var parsedValue = converter.invoke(it)
+ range?.let {
+ // Coerce parsed value into the specified range
+ parsedValue = maxOf(parsedValue, range.first, range.third)
+ parsedValue = minOf(parsedValue, range.second, range.third)
+ }
+ customized = customized or (parsedValue != defaultValue)
+ return@SettingDelegate parsedValue
+ }
+ defaultValue
+ } catch (e: Throwable) {
+ logger.warn("Cannot parse value for ${property.name}, default value [$defaultValue] will be used instead") { e }
+ defaultValue
+ }
+ }
+ }
+ }
+
+ override fun isCustomized(): Boolean {
+ return customized
+ }
+
+ override fun toString(): String =
+ settingsValues
+ .mapKeys { it.key.name }
+ .entries
+ .sortedBy { it.key }
+ .joinToString(separator = System.lineSeparator()) { "\t${it.key}=${it.value}" }
+}
+
+abstract class AbstractSettings(
+ logger: KLogger,
+ defaultKeyForSettingsPath: String,
+ defaultSettingsPath: String? = null) {
+ private val container: SettingsContainer = createSettingsContainer(logger, defaultKeyForSettingsPath, defaultSettingsPath)
+ init {
+ allSettings[defaultKeyForSettingsPath] = this
+ }
+ companion object : SettingsContainerFactory {
+ val allSettings = mutableMapOf()
+ private var factory: SettingsContainerFactory? = null
+ override fun createSettingsContainer(
+ logger: KLogger,
+ defaultKeyForSettingsPath: String,
+ defaultSettingsPath: String?
+ ): SettingsContainer {
+ return (factory ?: PropertiesSettingsContainer).createSettingsContainer(logger, defaultKeyForSettingsPath, defaultSettingsPath)
+ }
+
+ fun setupFactory(factory: SettingsContainerFactory) {
+ this.factory = factory
+ }
+ }
+
+ fun areCustomized(): Boolean = container.isCustomized()
+
+ protected fun getProperty(
+ defaultValue: T,
+ range : Triple>?,
+ converter: (String) -> T
+ ): PropertyDelegateProvider> where T: Comparable {
+ return container.settingFor(defaultValue, range, converter)
+ }
+
+ protected fun getProperty(
+ defaultValue: T,
+ converter: (String) -> T
+ ): PropertyDelegateProvider> {
+ return container.settingFor(defaultValue, null, converter)
+ }
+
+ protected fun getBooleanProperty(defaultValue: Boolean) = getProperty(defaultValue, converter = {
+ //Invalid values shouldn't be parsed as "false"
+ if (it.equals("true", true)) true
+ else if (it.equals("false", true)) false
+ else defaultValue
+ })
+ protected fun getIntProperty(defaultValue: Int) = getProperty(defaultValue, converter = String::toInt)
+ protected fun getIntProperty(defaultValue: Int, minValue: Int, maxValue: Int) = getProperty(defaultValue, Triple(minValue, maxValue, Comparator(Integer::compare)), String::toInt)
+ protected fun getLongProperty(defaultValue: Long) = getProperty(defaultValue, converter = String::toLong)
+ protected fun getLongProperty(defaultValue: Long, minValue: Long, maxValue: Long) = getProperty(defaultValue, Triple(minValue, maxValue, Comparator(Long::compareTo)), String::toLong)
+ protected fun getStringProperty(defaultValue: String) = getProperty(defaultValue) { it }
+ protected inline fun > getEnumProperty(defaultValue: T) =
+ getProperty(defaultValue) { enumValueOf(it) }
+ protected fun getListProperty(defaultValue: List) =
+ getProperty(defaultValue) { it.split(';') }
+ protected inline fun getListProperty(defaultValue: List, crossinline elementTransform: (String) -> T) =
+ getProperty(defaultValue) { it.split(';').map(elementTransform) }
+ override fun toString(): String = container.toString()
+}
\ No newline at end of file
diff --git a/utbot-core/src/main/kotlin/org/utbot/common/AnnotationUtil.kt b/utbot-core/src/main/kotlin/org/utbot/common/AnnotationUtil.kt
new file mode 100644
index 0000000000..e396e00d28
--- /dev/null
+++ b/utbot-core/src/main/kotlin/org/utbot/common/AnnotationUtil.kt
@@ -0,0 +1,33 @@
+package org.utbot.common
+
+import java.lang.reflect.InvocationHandler
+import java.lang.reflect.Proxy
+
+/**
+ * Assigns [newValue] to specified [property] of [annotation].
+ *
+ * NOTE! [annotation] instance is expected to be a [Proxy]
+ * using [sun.reflect.annotation.AnnotationInvocationHandler]
+ * making this function depend on JDK vendor and version.
+ *
+ * Example: `@ImportResource -> @ImportResource(value = "classpath:shark-config.xml")`
+ */
+fun patchAnnotation(
+ annotation: Annotation,
+ property: String,
+ newValue: Any?
+) {
+ val proxyClass = Proxy::class.java
+ val hField = proxyClass.getDeclaredField("h")
+ hField.isAccessible = true
+
+ val invocationHandler = hField[annotation] as InvocationHandler
+
+ val annotationInvocationHandlerClass = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler")
+ val memberValuesField = annotationInvocationHandlerClass.getDeclaredField("memberValues")
+ memberValuesField.isAccessible = true
+
+ @Suppress("UNCHECKED_CAST") // unavoidable because of reflection
+ val memberValues = memberValuesField[invocationHandler] as MutableMap
+ memberValues[property] = newValue
+}
diff --git a/utbot-core/src/main/kotlin/org/utbot/common/ClassLoaderUtil.kt b/utbot-core/src/main/kotlin/org/utbot/common/ClassLoaderUtil.kt
new file mode 100644
index 0000000000..ce7652a48a
--- /dev/null
+++ b/utbot-core/src/main/kotlin/org/utbot/common/ClassLoaderUtil.kt
@@ -0,0 +1,14 @@
+package org.utbot.common
+
+import java.net.URLClassLoader
+
+/**
+ * Checks that the class given by its binary name is on classpath of this classloader.
+ *
+ * Note: if the specified class is on classpath, `true` is returned even when
+ * superclass (or implemented interfaces) aren't on the classpath.
+ */
+fun URLClassLoader.hasOnClasspath(classBinaryName: String): Boolean {
+ val classFqn = classBinaryName.replace('.', '/').plus(".class")
+ return this.findResource(classFqn) != null
+}
\ No newline at end of file
diff --git a/utbot-core/src/main/kotlin/org/utbot/common/DynamicProperties.kt b/utbot-core/src/main/kotlin/org/utbot/common/DynamicProperties.kt
new file mode 100644
index 0000000000..666929bbbb
--- /dev/null
+++ b/utbot-core/src/main/kotlin/org/utbot/common/DynamicProperties.kt
@@ -0,0 +1,110 @@
+package org.utbot.common
+
+import java.util.*
+
+/**
+ * @param TOwner used purely to make type system enforce the use of properties with correct receiver,
+ * e.g. if property `NotEmptyTypeFlag` is defined for `FuzzedType` it can't be used on `CgContext`.
+ *
+ * **See also:** [this post](https://stackoverflow.com/a/58219723/10536125).
+ */
+interface DynamicProperty