From 1f1fa79a89ccf977d2cbd654e4b36573cb4b0431 Mon Sep 17 00:00:00 2001
From: Syphax Bouazzouni
Date: Thu, 2 Nov 2023 07:25:29 +0100
Subject: [PATCH] tmp
---
.../workflows/dependencies-security-audit.yml | 25 +
.github/workflows/js-lint.yml | 38 +
.github/workflows/lint-rubocop.yml | 48 +
.github/workflows/tests.yml | 51 +
Capfile | 8 +-
Dockerfile | 34 +-
Gemfile | 51 +-
Gemfile.lock | 76 +-
Rakefile | 4 +-
.../agent_search_input_component.rb | 3 +-
app/components/alerts_container_component.rb | 1 -
.../buttons/regular_button_component.rb | 86 +-
app/components/card_message_component.rb | 46 +-
app/components/chip_button_component.rb | 18 +-
app/components/chips_component.rb | 27 +-
.../circle_progress_bar_component.rb | 3 +-
app/components/collapsable_block_component.rb | 3 +-
app/components/concept_details_component.rb | 42 +-
app/components/date_time_field_component.rb | 4 +-
app/components/display/alert_component.rb | 67 +-
.../display/button_loader_component.rb | 30 +-
app/components/display/header_component.rb | 28 +-
app/components/display/image_component.rb | 47 +-
.../display/info_tooltip_component.rb | 19 +-
app/components/dropdown_button_component.rb | 1 -
.../dropdown_container_component.rb | 2 +-
.../dropdown_section_button_component.rb | 1 -
.../external_link_text_component.rb | 1 -
app/components/field_container_component.rb | 1 -
app/components/infinite_scroll_component.rb | 2 -
app/components/input/date_component.rb | 21 +-
app/components/input/email_component.rb | 15 +-
app/components/input/file_input_component.rb | 11 +-
app/components/input/input_field_component.rb | 68 +-
.../input/language_selector_component.rb | 38 +-
app/components/input/password_component.rb | 15 +-
app/components/input/select_component.rb | 35 +-
app/components/input/text_area_component.rb | 10 +-
app/components/input/text_input_component.rb | 19 +-
app/components/input/url_component.rb | 15 +-
app/components/label_link_component.rb | 1 -
app/components/language_field_component.rb | 8 +-
.../language_field_component.html.haml | 2 +-
app/components/layout/card_component.rb | 16 +-
.../layout/horizontal_list_component.rb | 21 +-
app/components/layout/list_component.rb | 23 +-
.../layout/progress_pages_component.rb | 13 +-
app/components/layout/reveal_component.rb | 30 +-
app/components/license_field_component.rb | 4 +-
app/components/link_field_component.rb | 3 -
app/components/link_text_component.rb | 1 -
.../nested_agent_search_input_component.rb | 6 +-
.../nested_form_inputs_component.rb | 1 -
app/components/notification_component.rb | 4 +-
.../ontology_browse_card_component.rb | 4 +-
.../ontology_search_input_component.rb | 1 -
app/components/pill_button_component.rb | 1 -
app/components/popup_link_text_component.rb | 2 -
app/components/rounded_button_component.rb | 19 +-
app/components/search_input_component.rb | 9 +-
app/components/select_input_component.rb | 8 +-
app/components/square_badge_component.rb | 5 +-
.../submission_metadata_component.rb | 50 +-
app/components/submission_status_component.rb | 21 +-
app/components/summary_section_component.rb | 2 +-
app/components/switch_input_component.rb | 6 +-
app/components/tab_item_component.rb | 3 -
app/components/table_cell_component.rb | 3 +-
app/components/table_component.rb | 5 +-
app/components/table_row_component.rb | 7 +-
app/components/tabs_container_component.rb | 1 -
app/components/text_area_field_component.rb | 6 +-
.../tree_infinite_scroll_component.rb | 2 +-
app/components/turbo_frame_component.rb | 4 +-
app/components/turbo_modal_component.rb | 1 -
app/controllers/about_controller.rb | 5 +-
.../admin/categories_controller.rb | 183 +-
app/controllers/admin/groups_controller.rb | 178 +-
app/controllers/admin/licenses_controller.rb | 42 +-
app/controllers/admin_controller.rb | 196 +-
app/controllers/agents_controller.rb | 36 +-
app/controllers/ajax_proxy_controller.rb | 61 +-
app/controllers/analytics_controller.rb | 42 +-
app/controllers/annotator_controller.rb | 187 +-
app/controllers/annotatorplus_controller.rb | 178 +-
app/controllers/application_controller.rb | 435 +-
app/controllers/collections_controller.rb | 10 +-
app/controllers/concepts_controller.rb | 117 +-
.../concerns/mapping_statistics.rb | 29 +-
app/controllers/concerns/ontology_updater.rb | 16 +-
app/controllers/concerns/submission_filter.rb | 33 +-
.../concerns/submission_updater.rb | 65 +-
app/controllers/errors_controller.rb | 4 +-
app/controllers/fair_score_controller.rb | 5 +-
app/controllers/history_controller.rb | 21 +-
app/controllers/home_controller.rb | 44 +-
app/controllers/instances_controller.rb | 17 +-
app/controllers/label_xl_controller.rb | 7 +-
app/controllers/landscape_controller.rb | 620 +-
app/controllers/language_controller.rb | 32 +-
app/controllers/login_controller.rb | 91 +-
app/controllers/mappings_controller.rb | 98 +-
.../ncbo_annotatorplus_controller.rb | 178 +-
app/controllers/notes_controller.rb | 74 +-
app/controllers/ontolobridge_controller.rb | 37 +-
app/controllers/ontologies_controller.rb | 170 +-
.../ontologies_metadata_curator_controller.rb | 54 +-
app/controllers/precache_controller.rb | 27 +-
app/controllers/projects_controller.rb | 46 +-
app/controllers/recommender_controller.rb | 9 +-
app/controllers/redirect_controller.rb | 17 +-
app/controllers/reviews_controller.rb | 68 +-
app/controllers/robots_controller.rb | 14 +-
app/controllers/schemes_controller.rb | 8 +-
app/controllers/search_controller.rb | 101 +-
app/controllers/submissions_controller.rb | 41 +-
app/controllers/subscriptions_controller.rb | 51 +-
app/controllers/users_controller.rb | 147 +-
.../virtual_appliance_controller.rb | 11 +-
app/controllers/visits_controller.rb | 8 +-
app/decorators/base_decorator.rb | 6 +-
app/decorators/note_decorator.rb | 30 +-
app/decorators/view_decorator.rb | 9 +-
app/helpers/about_helper.rb | 2 +
app/helpers/admin/licenses_helper.rb | 29 +-
app/helpers/admin_helper.rb | 2 +
app/helpers/agent_helper.rb | 24 +-
app/helpers/application_helper.rb | 351 +-
app/helpers/collections_helper.rb | 14 +-
app/helpers/components_helper.rb | 15 +-
app/helpers/concepts_helper.rb | 27 +-
app/helpers/error_helpers.rb | 16 +-
app/helpers/fair_score_helper.rb | 52 +-
app/helpers/home_helper.rb | 13 +-
app/helpers/inputs_helper.rb | 12 +-
app/helpers/instances_helper.rb | 33 +-
app/helpers/label_xl_helper.rb | 5 +-
app/helpers/landscape_helper.rb | 2 +
app/helpers/mappings_helper.rb | 107 +-
app/helpers/metadata_helper.rb | 34 +-
app/helpers/modal_helper.rb | 3 +-
app/helpers/multi_languages_helper.rb | 6 +-
app/helpers/notes_helper.rb | 65 +-
app/helpers/ontologies_helper.rb | 173 +-
app/helpers/ontology_metrics_helper.rb | 34 +-
app/helpers/reviews_helper.rb | 4 +-
app/helpers/schemes_helper.rb | 19 +-
app/helpers/submission_inputs_helper.rb | 78 +-
app/helpers/submissions_helper.rb | 104 +-
app/helpers/turbo_helper.rb | 17 +-
app/jobs/application_job.rb | 2 +
app/lib/kgcl/issue_content_generator.rb | 2 +-
app/mailers/application_mailer.rb | 3 +-
app/mailers/notifier.rb | 30 +-
app/mailers/subscribe_mailer.rb | 75 +-
app/models/analytics.rb | 2 +
app/models/application_record.rb | 4 +-
app/models/bpid_resolver.rb | 23 +-
app/models/history.rb | 4 +-
app/models/license.rb | 8 +-
app/models/mapping_page.rb | 2 +
app/models/ontology.rb | 4 +-
app/models/remote_file.rb | 32 +-
.../resource_index_result_paginatable.rb | 10 +-
app/models/virtual_appliance_user.rb | 2 +
app/services/application_service.rb | 4 +-
app/services/issue_creator_service.rb | 4 +-
app/services/license_key_decrypter.rb | 10 +-
app/validators/encrypted_key_validator.rb | 12 +-
.../virtual_appliance_id_validator.rb | 22 +-
app/views/projects/index.html.haml | 2 +-
bin/bundle | 2 +
bin/rails | 8 +-
bin/rake | 6 +-
bin/setup | 18 +-
bin/update | 2 +
bin/wait-for-it | 182 +
bin/yarn | 16 +-
config.ru | 4 +-
config/application.rb | 15 +-
config/bioportal_config_test.rb | 172 +
config/boot.rb | 6 +-
config/database.yml.sample | 3 +-
config/deploy.rb | 19 +-
config/deploy/appliance.rb | 18 +-
config/deploy/production.rb | 14 +-
config/deploy/staging.rb | 14 +-
config/environment.rb | 4 +-
config/environments/appliance.rb | 8 +-
config/environments/development.rb | 14 +-
config/environments/production.rb | 19 +-
config/environments/staging.rb | 9 +-
config/environments/test.rb | 10 +-
.../application_controller_renderer.rb | 1 +
config/initializers/assets.rb | 4 +-
config/initializers/backtrace_silencers.rb | 4 +-
config/initializers/cache_output.rb | 3 +-
.../initializers/content_security_policy.rb | 1 +
config/initializers/cookies_serializer.rb | 2 +
config/initializers/cube_reporter.rb | 22 +-
.../initializers/filter_parameter_logging.rb | 6 +-
config/initializers/haml.rb | 4 +-
config/initializers/inflections.rb | 1 +
config/initializers/mime_types.rb | 1 +
config/initializers/miniprofiler.rb | 2 +
config/initializers/monkeypatches.rb | 4 +-
.../new_framework_defaults_6_0.rb | 2 +
.../new_framework_defaults_6_1.rb | 1 +
.../new_framework_defaults_7_0.rb | 1 +
config/initializers/omniauth.rb | 7 +-
config/initializers/ontologies_api_client.rb | 2 +
config/initializers/open_uri_no_temp_files.rb | 11 +-
.../initializers/passenger_memcache_reset.rb | 26 +-
config/initializers/permissions_policy.rb | 1 +
config/initializers/recaptcha.rb | 2 +
config/initializers/session_store.rb | 2 +
config/initializers/sigtrap.rb | 4 +-
config/initializers/wrap_parameters.rb | 2 +
config/initializers/zeitwerk.rb | 8 +
config/puma.rb | 8 +-
config/routes.rb | 84 +-
config/spring.rb | 6 +-
...14000857_create_virtual_appliance_users.rb | 2 +
.../20120223203256_create_timeouts_table.rb | 2 +
db/migrate/20120719010735_create_analytics.rb | 2 +
...3_change_virtual_appliance_user_id_type.rb | 2 +
db/migrate/20140306012927_drop_old_tables.rb | 40 +-
...20150806211835_change_slice_column_name.rb | 2 +
db/migrate/20200220191815_create_licenses.rb | 2 +
.../20200921120918_create_ontologies.rb | 2 +
db/schema.rb | 66 +-
db/seeds.rb | 1 +
docker-compose.yml | 24 +-
lib/log.rb | 28 +-
lib/resolver/acronym_from_virtual.rb | 1070 +-
lib/resolver/virtual_from_acronym.rb | 1066 +-
lib/resolver/virtual_from_version.rb | 14288 ++++++++--------
lib/tasks/generate_component_previews.rake | 26 +-
package.json | 13 +-
public/dispatch.fcgi | 4 +-
public/dispatch.rb | 13 +-
script/about | 6 +-
script/breakpointer | 6 +-
script/console | 4 +-
script/dbconsole | 4 +-
script/destroy | 6 +-
script/generate | 6 +-
script/performance/benchmarker | 4 +-
script/performance/profiler | 4 +-
script/plugin | 6 +-
script/process/inspector | 4 +-
script/process/reaper | 4 +-
script/process/spawner | 4 +-
script/rails | 6 +-
script/runner | 6 +-
script/server | 4 +-
script/ssl_server | 83 +-
.../alerts_container_component_spec.rb | 2 +-
spec/components/turbo_frame_component_spec.rb | 2 +-
spec/components/turbo_modal_component_spec.rb | 2 +-
spec/mailers/subscribe_spec.rb | 32 +-
spec/models/license_spec.rb | 86 +-
spec/rails_helper.rb | 4 +-
spec/spec_helper.rb | 98 +-
.../buttons/chip_button_component_preview.rb | 18 +-
...logy_subscribe_button_component_preview.rb | 8 +-
.../buttons/pill_button_component_preview.rb | 10 +-
.../regular_button_component_preview.rb | 83 +-
.../rounded_button_component_preview.rb | 15 +-
.../concept_details_component_preview.rb | 31 +-
.../display/alert_component_preview.rb | 67 +-
.../circle_progress_bar_component_preview.rb | 13 +-
.../date_time_field_component_preview.rb | 16 +-
.../field_container_component_preview.rb | 15 +-
.../display/header_component_preview.rb | 13 +-
.../display/image_component_preview.rb | 8 +-
.../display/info_tooltip_component_preview.rb | 11 +-
.../language_field_component_preview.rb | 14 +-
.../license_field_component_preview.rb | 14 +-
.../display/link_field_component_preview.rb | 14 +-
.../display/link_text_component_preview.rb | 37 +-
.../text_area_field_component_preview.rb | 21 +-
.../previews/input/chips_component_preview.rb | 14 +-
.../input/input_field_component_preview.rb | 183 +-
.../nested_form_input_component_preview.rb | 27 +-
.../input/select_component_preview.rb | 45 +-
.../input/switch_input_component_preview.rb | 11 +-
.../previews/layout/card_component_preview.rb | 12 +-
.../layout/card_message_component_preview.rb | 31 +-
.../dropdown_container_component_preview.rb | 17 +-
.../previews/layout/list_component_preview.rb | 22 +-
.../progress_pages_component_preview.rb | 17 +-
.../summary_section_component_preview.rb | 27 +-
.../layout/table_component_preview.rb | 56 +-
.../tabs_container_component_preview.rb | 110 +-
.../layout/turbo_modal_component_preview.rb | 20 +-
.../previews/loader_component_preview.rb | 1 -
.../notification_component_preview.rb | 9 +-
.../application_controller_test.rb | 15 +
test/controllers/landscape_controller_test.rb | 6 +-
.../controllers/ontologies_controller_test.rb | 21 +
test/models/virtual_appliance_user_test.rb | 4 +-
test/test_helper.rb | 18 +-
yarn.lock | 1842 ++
304 files changed, 15086 insertions(+), 12314 deletions(-)
create mode 100644 .github/workflows/dependencies-security-audit.yml
create mode 100644 .github/workflows/js-lint.yml
create mode 100644 .github/workflows/lint-rubocop.yml
create mode 100644 .github/workflows/tests.yml
mode change 100644 => 100755 Rakefile
create mode 100755 bin/wait-for-it
create mode 100644 config/bioportal_config_test.rb
create mode 100644 config/initializers/zeitwerk.rb
create mode 100644 test/controllers/application_controller_test.rb
create mode 100644 test/controllers/ontologies_controller_test.rb
diff --git a/.github/workflows/dependencies-security-audit.yml b/.github/workflows/dependencies-security-audit.yml
new file mode 100644
index 0000000000..90489c65b8
--- /dev/null
+++ b/.github/workflows/dependencies-security-audit.yml
@@ -0,0 +1,25 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
+# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
+name: "Security audit dependencies"
+on:
+ push:
+ branches: [ master , development ]
+ pull_request:
+ branches: [ master , development]
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+ - name: Install Ruby and gems
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: 2.7.8
+ bundler-cache: true
+ - name: Security audit dependencies
+ run: bundle exec bundler-audit --update
\ No newline at end of file
diff --git a/.github/workflows/js-lint.yml b/.github/workflows/js-lint.yml
new file mode 100644
index 0000000000..b6fdab59d3
--- /dev/null
+++ b/.github/workflows/js-lint.yml
@@ -0,0 +1,38 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
+# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
+name: "Lint JS files using eslint"
+
+on:
+ push:
+ pull_request_target:
+ types: [ opened, reopened ]
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v1
+ with:
+ node-version: '14'
+
+ - name: Install dependencies
+ run: yarn install --frozen-lockfile
+
+ - name: Run ESLint and generate SARIF output
+ run: yarn eslint 'app/**/*.js' --format json --output-file eslint-output.json
+
+ - name: Convert ESLint output to SARIF
+ run: yarn sarif-convert -o eslint-output.sarif eslint-output.json
+
+ - name: Upload SARIF output
+ uses: github/codeql-action/upload-sarif@v1
+ with:
+ sarif_file: eslint-output.sarif
\ No newline at end of file
diff --git a/.github/workflows/lint-rubocop.yml b/.github/workflows/lint-rubocop.yml
new file mode 100644
index 0000000000..7cf318db03
--- /dev/null
+++ b/.github/workflows/lint-rubocop.yml
@@ -0,0 +1,48 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
+# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
+name: "Lint Ruby files using Rubocop"
+
+on:
+ push:
+ pull_request_target:
+ types: [ opened, reopened ]
+
+jobs:
+ rubocop:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ # If running on a self-hosted runner, check it meets the requirements
+ # listed at https://github.com/ruby/setup-ruby#using-self-hosted-runners
+ - name: Set up Ruby
+ uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
+ with:
+ ruby-version: 2.7.8
+
+ # This step is not necessary if you add the gem to your Gemfile
+ - name: Install Code Scanning integration
+ run: bundle add code-scanning-rubocop --version 0.3.0 --skip-install
+
+ - name: Install dependencies
+ run: bundle install
+
+ - name: Rubocop run
+ run: |
+ bash -c "
+ bundle exec rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
+ [[ $? -ne 2 ]]
+ "
+
+ - name: Upload Sarif output
+ uses: github/codeql-action/upload-sarif@v2
+ with:
+ sarif_file: rubocop.sarif
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000000..ec6dde7e74
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,51 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
+# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
+name: "Ruby on Rails CI"
+
+on:
+ push:
+ pull_request_target:
+ types: [ opened, reopened ]
+env:
+ API_URL: ${{ secrets.API_URL }}
+ API_KEY: ${{ secrets.API_KEY }}
+ BIOMIXER_URL: ${{ secrets.BIOMIXER_URL }}
+ FAIRNESS_URL: ${{ secrets.FAIRNESS_URL }}
+ ANNOTATOR_URL: ${{ secrets.ANNOTATOR_URL }}
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ services:
+ mysql:
+ image: mysql:latest
+ ports:
+ - "3306:3306"
+ env:
+ MYSQL_ROOT_PASSWORD: 'bp_user'
+ memcached:
+ image: memcached:1.6
+ ports:
+ - 11211:11211
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+ # Add or replace dependency steps here
+ - name: Install Ruby and gems
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: 2.7.8
+ bundler-cache: true
+ # Add or replace database setup steps here
+ - name: set up config file
+ run: cp config/database.yml.sample config/database.yml
+ - name: Set up database schema
+ run: RAILS_ENV=test bin/rails db:setup
+ - name: Set up yarn
+ run: yarn install
+ # Add or replace test runners here
+ - name: Run tests
+ run: RAILS_ENV=test bin/rails test -v
\ No newline at end of file
diff --git a/Capfile b/Capfile
index 8cbf6f87e4..1b52aa2baa 100644
--- a/Capfile
+++ b/Capfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Load DSL and Setup Up Stages
require 'capistrano/setup'
@@ -18,10 +20,10 @@ require 'capistrano/deploy'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
require 'capistrano/bundler'
-require "capistrano/scm/git"
+require 'capistrano/scm/git'
install_plugin Capistrano::SCM::Git
-#require 'capistrano/rails/assets'
-#require 'capistrano/rails/migrations'
+# require 'capistrano/rails/assets'
+# require 'capistrano/rails/migrations'
require 'capistrano/rails'
require 'capistrano/yarn'
require 'capistrano/locally'
diff --git a/Dockerfile b/Dockerfile
index 88f019fdb5..d5950edb14 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ruby:2.7.5-alpine AS app
+FROM ruby:2.7.8-alpine AS app
WORKDIR /app
@@ -17,34 +17,26 @@ RUN apk add --no-cache \
less \
&& addgroup --gid ${GID} ruby \
&& adduser -u ${UID} -G ruby -D ruby \
- && chown ruby:ruby -R /app \
- && mkdir /node_modules \
- && chown ruby:ruby -R /node_modules /app
+ && mkdir /node_modules
-USER ruby
-
-COPY --chown=ruby:ruby bin/ ./bin
-RUN chmod 0755 bin/*
+COPY --chown=ruby:ruby Gemfile* ./
+COPY --chown=ruby:ruby package.json *yarn* ./
-ARG RAILS_ENV="production"
+# Set ownership and permissions
+RUN chown -R ruby:ruby /app
-ENV RAILS_ENV="${RAILS_ENV}" \
- NODE_ENV="${NODE_ENV}" \
- PATH="${PATH}:/home/ruby/.local/bin:/node_modules/.bin" \
- USER="ruby" \
- BUNDLE_PATH=/usr/local/bundle
+USER ruby
-COPY --chown=ruby:ruby Gemfile* ./
+# Install dependencies
RUN bundle install --jobs "$(nproc)"
-RUN gem install rails
-
-
+RUN gem install rails
+RUN yarn install
RUN echo "--modules-folder /node_modules" > .yarnrc
-COPY --chown=ruby:ruby package.json *yarn* ./
-RUN yarn install
+# Copy application code
+COPY --chown=ruby:ruby . .
EXPOSE 3000
-CMD ["sh"]
\ No newline at end of file
+CMD ["bash"]
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index fd3d45f4bb..b51aff080a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -5,8 +5,8 @@ gem 'rails', '7.0.3'
gem 'jsbundling-rails'
-gem 'sassc-rails' #sass-rails replacent
-gem 'terser' #ugilifer replacent
+gem 'sassc-rails' # sass-rails replacent
+gem 'terser' # ugilifer replacent
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
@@ -18,11 +18,9 @@ gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'select2-rails'
-
# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
gem 'sprockets-rails'
-
# Use the Puma web server [https://github.com/puma/puma]
gem 'puma', '~> 5.0'
@@ -36,10 +34,10 @@ gem 'turbo-rails'
gem 'stimulus-rails'
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
-#gem "jbuilder"
+# gem "jbuilder"
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
-gem 'tzinfo-data', platforms: %i[ mingw mswin x64_mingw jruby ]
+gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
@@ -50,41 +48,42 @@ gem 'bootsnap', require: false
gem 'cube-ruby', require: 'cube'
gem 'dalli'
+gem 'flag-icons-rails', '~> 3.4'
gem 'flamegraph'
gem 'graphql-client'
gem 'haml', '~> 5.1'
gem 'i18n'
-gem 'rails-i18n', '~> 7.0.0'
gem 'iconv'
+gem 'inline_svg'
+gem 'iso-639', '~> 0.3.6'
+gem 'lookbook', '~> 1.5.5'
gem 'multi_json'
-gem 'mysql2', '0.5.3'
+gem 'mysql2'
gem 'oj'
+gem 'ontologies_api_client', git: 'https://github.com/ontoportal-lirmm/ontologies_api_ruby_client.git',
+ branch: 'development'
gem 'open_uri_redirections'
gem 'pry'
-gem 'psych', '< 4'
+gem 'psych'
gem 'rack-mini-profiler'
gem 'rails_autolink'
+gem 'rails-i18n', '~> 7.0.0'
gem 'rdoc'
gem 'recaptcha', '~> 5.9.0'
gem 'rest-client'
gem 'stackprof', require: false
gem 'thin'
-gem 'view_component', '~> 2.72'
gem 'turnout'
+gem 'view_component', '~> 2.72'
gem 'will_paginate', '~> 3.0'
-gem 'inline_svg'
-gem "lookbook", '~> 1.5.5'
-gem 'ontologies_api_client', git: 'https://github.com/ontoportal-lirmm/ontologies_api_ruby_client.git', branch: 'development'
-gem "flag-icons-rails", "~> 3.4"
-gem "iso-639", "~> 0.3.6"
# Multi-Provider Authentication
gem 'omniauth'
-gem "omniauth-rails_csrf_protection"
gem 'omniauth-github'
gem 'omniauth-google-oauth2'
-gem 'omniauth-orcid'
gem 'omniauth-keycloak'
+gem 'omniauth-orcid'
+gem 'omniauth-rails_csrf_protection'
group :staging, :production, :appliance do
# application monitoring
@@ -106,21 +105,22 @@ group :development do
gem 'ed25519', '>= 1.2', '< 2.0', require: false # https://github.com/miloserdow/capistrano-deploy/issues/42
gem 'html2haml'
gem 'listen'
- # static code analysis
- gem 'brakeman', require: false
- gem 'rubocop', require: false
# gem 'i18n-debug'
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
- gem 'debug', platforms: %i[ mri mingw x64_mingw ]
+ gem 'debug', platforms: %i[mri mingw x64_mingw]
# Use console on exceptions pages [https://github.com/rails/web-console]
- gem 'web-console'
- gem 'i18n-tasks'
gem 'deepl-rb'
+ gem 'i18n-tasks'
+ gem 'web-console'
end
group :test, :development do
+ gem 'brakeman'
gem 'rspec-rails'
+ gem 'rubocop'
+ gem 'rubocop-rails'
+ gem 'ruby_audit'
end
group :test do
@@ -130,7 +130,4 @@ group :test do
gem 'webdrivers'
end
-
-gem "net-ftp", "~> 0.2.0", require: false
-gem "net-http"
-
+gem 'net-ftp', '~> 0.2.0', require: false
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index e1035012ca..01f503b979 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -101,7 +101,7 @@ GEM
smart_properties
bindata (2.4.15)
bindex (0.8.1)
- bootsnap (1.16.0)
+ bootsnap (1.17.0)
msgpack (~> 1.2)
bootstrap (4.2.1)
autoprefixer-rails (>= 9.1.0)
@@ -109,6 +109,9 @@ GEM
sassc-rails (>= 2.0.0)
brakeman (5.4.1)
builder (3.2.4)
+ bundler-audit (0.9.1)
+ bundler (>= 1.2.0, < 3)
+ thor (~> 1.0)
capistrano (3.18.0)
airbrussh (>= 1.0.0)
i18n
@@ -156,7 +159,7 @@ GEM
erubi (1.12.0)
erubis (2.7.0)
eventmachine (1.2.7)
- excon (0.103.0)
+ excon (0.104.0)
execjs (2.9.1)
faraday (2.0.1)
faraday-net_http (~> 2.0)
@@ -169,13 +172,13 @@ GEM
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (2.1.0)
- ffi (1.16.1)
+ ffi (1.16.3)
flag-icons-rails (3.4.6.1)
sass-rails
flamegraph (0.9.5)
globalid (1.2.1)
activesupport (>= 6.1)
- graphql (2.1.3)
+ graphql (2.1.6)
racc (~> 1.4)
graphql-client (0.18.0)
activesupport (>= 3.0)
@@ -197,20 +200,21 @@ GEM
domain_name (~> 0.5)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
- i18n-tasks (1.0.12)
+ i18n-tasks (1.0.13)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
better_html (>= 1.0, < 3.0)
erubi
highline (>= 2.0.0)
i18n
- parser (>= 2.2.3.0)
+ parser (>= 3.2.2.1)
rails-i18n
rainbow (>= 2.2.2, < 4.0)
terminal-table (>= 1.5.1)
iconv (1.0.8)
- importmap-rails (1.2.1)
+ importmap-rails (1.2.3)
actionpack (>= 6.0.0)
+ activesupport (>= 6.0.0)
railties (>= 6.0.0)
inline_svg (1.9.0)
activesupport (>= 3.0)
@@ -274,13 +278,11 @@ GEM
multi_json (1.15.0)
multi_xml (0.6.0)
multipart-post (2.3.0)
- mysql2 (0.5.3)
+ mysql2 (0.5.5)
net-ftp (0.2.0)
net-protocol
time
- net-http (0.3.2)
- uri
- net-imap (0.4.1)
+ net-imap (0.4.3)
date
net-protocol
net-pop (0.1.2)
@@ -293,7 +295,8 @@ GEM
net-protocol
net-ssh (7.2.0)
netrc (0.11.0)
- newrelic_rpm (9.5.0)
+ newrelic_rpm (9.6.0)
+ base64
nio4r (2.5.9)
nokogiri (1.15.4-x86_64-darwin)
racc (~> 1.4)
@@ -341,11 +344,12 @@ GEM
pry (0.14.2)
coderay (~> 1.1)
method_source (~> 1.0)
- psych (3.3.4)
+ psych (5.1.1.1)
+ stringio
public_suffix (5.0.3)
puma (5.6.7)
nio4r (~> 2.0)
- racc (1.7.1)
+ racc (1.7.2)
rack (2.2.8)
rack-accept (0.4.5)
rack (>= 0.4)
@@ -391,16 +395,17 @@ GEM
thor (~> 1.0)
zeitwerk (~> 2.5)
rainbow (3.1.1)
- rake (13.0.6)
+ rake (13.1.0)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
- rdoc (6.3.3)
+ rdoc (6.5.0)
+ psych (>= 4.0.0)
recaptcha (5.9.0)
json
redcarpet (3.6.0)
- regexp_parser (2.8.1)
- reline (0.3.8)
+ regexp_parser (2.8.2)
+ reline (0.3.9)
io-console (~> 0.5)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
@@ -408,7 +413,7 @@ GEM
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rexml (3.2.6)
- rouge (4.1.3)
+ rouge (4.2.0)
rspec-core (3.12.2)
rspec-support (~> 3.12.0)
rspec-expectations (3.12.3)
@@ -426,8 +431,7 @@ GEM
rspec-mocks (~> 3.12)
rspec-support (~> 3.12)
rspec-support (3.12.1)
- rubocop (1.56.3)
- base64 (~> 0.1.1)
+ rubocop (1.57.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
@@ -438,10 +442,16 @@ GEM
rubocop-ast (>= 1.28.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
- rubocop-ast (1.29.0)
+ rubocop-ast (1.30.0)
parser (>= 3.2.1.0)
+ rubocop-rails (2.22.1)
+ activesupport (>= 4.2.0)
+ rack (>= 1.1)
+ rubocop (>= 1.33.0, < 2.0)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
+ ruby_audit (2.2.0)
+ bundler-audit (~> 0.9.0)
ruby_dig (0.0.2)
ruby_parser (3.20.3)
sexp_processor (~> 4.16)
@@ -480,16 +490,17 @@ GEM
stackprof (0.2.25)
stimulus-rails (1.3.0)
railties (>= 6.0.0)
- temple (0.10.2)
+ stringio (3.0.8)
+ temple (0.10.3)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
- terser (1.1.18)
+ terser (1.1.19)
execjs (>= 0.3.0, < 3)
thin (1.8.2)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
- thor (1.2.2)
+ thor (1.3.0)
tilt (2.3.0)
time (0.2.2)
date
@@ -509,7 +520,6 @@ GEM
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.5.0)
- uri (0.12.2)
version_gem (1.1.3)
view_component (2.82.0)
activesupport (>= 5.2.0, < 8.0)
@@ -532,12 +542,11 @@ GEM
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.34)
- zeitwerk (2.6.11)
+ zeitwerk (2.6.12)
PLATFORMS
- x86_64-darwin-21
+ x86_64-darwin-23
x86_64-linux
- x86_64-linux-musl
DEPENDENCIES
bcrypt_pbkdf (>= 1.0, < 2.0)
@@ -574,9 +583,8 @@ DEPENDENCIES
listen
lookbook (~> 1.5.5)
multi_json
- mysql2 (= 0.5.3)
+ mysql2
net-ftp (~> 0.2.0)
- net-http
newrelic_rpm
oj
omniauth
@@ -588,7 +596,7 @@ DEPENDENCIES
ontologies_api_client!
open_uri_redirections
pry
- psych (< 4)
+ psych
puma (~> 5.0)
rack-mini-profiler
rails (= 7.0.3)
@@ -599,6 +607,8 @@ DEPENDENCIES
rest-client
rspec-rails
rubocop
+ rubocop-rails
+ ruby_audit
sassc-rails
select2-rails
selenium-webdriver
@@ -616,4 +626,4 @@ DEPENDENCIES
will_paginate (~> 3.0)
BUNDLED WITH
- 2.4.12
+ 2.4.21
diff --git a/Rakefile b/Rakefile
old mode 100644
new mode 100755
index 59ea504776..78cd2cb4f9
--- a/Rakefile
+++ b/Rakefile
@@ -1,7 +1,9 @@
#!/usr/bin/env rake
+# frozen_string_literal: true
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
-require File.expand_path('../config/application', __FILE__)
+require File.expand_path('config/application', __dir__)
BioportalWebUi::Application.load_tasks
diff --git a/app/components/agent_search_input_component.rb b/app/components/agent_search_input_component.rb
index 3bebfa5655..a9e4ce63ab 100644
--- a/app/components/agent_search_input_component.rb
+++ b/app/components/agent_search_input_component.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
class AgentSearchInputComponent < ViewComponent::Base
-
- def initialize(id:, agent_type: nil, name_prefix: nil, parent_id: , edit_on_modal: false)
+ def initialize(id:, parent_id:, agent_type: nil, name_prefix: nil, edit_on_modal: false)
super
@id = id
@agent_type = agent_type
diff --git a/app/components/alerts_container_component.rb b/app/components/alerts_container_component.rb
index 43681a9e02..ca602af644 100644
--- a/app/components/alerts_container_component.rb
+++ b/app/components/alerts_container_component.rb
@@ -5,5 +5,4 @@ class AlertsContainerComponent < ViewComponent::Base
def initialize(id:)
@id = id
end
-
end
diff --git a/app/components/buttons/regular_button_component.rb b/app/components/buttons/regular_button_component.rb
index 1e994e8039..e422d0cf8a 100644
--- a/app/components/buttons/regular_button_component.rb
+++ b/app/components/buttons/regular_button_component.rb
@@ -1,49 +1,57 @@
-class Buttons::RegularButtonComponent < ViewComponent::Base
- renders_one :icon_left
- renders_one :icon_right
+# frozen_string_literal: true
- def initialize(id: , value:, variant: "primary", color: "normal", href: "", size: "normal", state: "animate", type: 'button')
- @id = id
- @value = value
- @variant = variant
- @color = color
- @href = href
- @size = size
- @state = state
- @type = type
- end
+module Buttons
+ class RegularButtonComponent < ViewComponent::Base
+ renders_one :icon_left
+ renders_one :icon_right
- def button_label
- hide_icon_left = icon_left == nil ? "hide" : " "
- hide_icon_right = icon_right == nil ? "hide" : " "
- content_tag(:span, icon_left, class: "#{@variant}-button-icon left-button-icon #{hide_icon_left}") + content_tag(:div, @value) + content_tag(:span, icon_right, class: "#{@variant}-button-icon right-button-icon #{hide_icon_right}")
- end
+ def initialize(id:, value:, variant: 'primary', color: 'normal', href: '', size: 'normal', state: 'animate',
+ type: 'button')
+ @id = id
+ @value = value
+ @variant = variant
+ @color = color
+ @href = href
+ @size = size
+ @state = state
+ @type = type
+ end
- def button_elem
- slim_class = @size == "slim" ? "slim " : " "
- danger_class = @color == "danger" ? "danger-button " : " "
- warning_class = @color == "warning" ? "warning-button " : " "
- disabled_class = @state == "disabled" ? "disabled-button " : " "
- class_style = "#{@variant}-button regular-button " + danger_class + warning_class + disabled_class + slim_class
- on_click_event = load_animation? ? "displayAnimation(this, '#{@id}-loading-animation')" : ''
+ def button_label
+ hide_icon_left = icon_left.nil? ? 'hide' : ' '
+ hide_icon_right = icon_right.nil? ? 'hide' : ' '
+ content_tag(:span, icon_left,
+ class: "#{@variant}-button-icon left-button-icon #{hide_icon_left}") + content_tag(:div,
+ @value) + content_tag(
+ :span, icon_right, class: "#{@variant}-button-icon right-button-icon #{hide_icon_right}"
+ )
+ end
- if link?
- link_to(@href, class: class_style, onclick: on_click_event, id: @id) do
- button_label
- end
- else
- button_tag(type: @type, class: class_style, onclick: on_click_event, id: @id) do
- button_label
+ def button_elem
+ slim_class = @size == 'slim' ? 'slim ' : ' '
+ danger_class = @color == 'danger' ? 'danger-button ' : ' '
+ warning_class = @color == 'warning' ? 'warning-button ' : ' '
+ disabled_class = @state == 'disabled' ? 'disabled-button ' : ' '
+ class_style = "#{@variant}-button regular-button " + danger_class + warning_class + disabled_class + slim_class
+ on_click_event = load_animation? ? "displayAnimation(this, '#{@id}-loading-animation')" : ''
+
+ if link?
+ link_to(@href, class: class_style, onclick: on_click_event, id: @id) do
+ button_label
+ end
+ else
+ button_tag(type: @type, class: class_style, onclick: on_click_event, id: @id) do
+ button_label
+ end
end
end
- end
- def link?
- @href && !@href.empty?
- end
+ def link?
+ @href && !@href.empty?
+ end
- def load_animation?
- @state == "animate"
+ def load_animation?
+ @state == 'animate'
+ end
end
-
end
diff --git a/app/components/card_message_component.rb b/app/components/card_message_component.rb
index d0f15d0622..76b9dc401a 100644
--- a/app/components/card_message_component.rb
+++ b/app/components/card_message_component.rb
@@ -1,28 +1,30 @@
+# frozen_string_literal: true
+
class CardMessageComponent < ViewComponent::Base
- def initialize(title: nil ,message:, button_text: nil, button_link: "/" ,type:)
- @title = title
- @message = message
- @button_text = button_text
- @type = type
- @button_link = button_link
- end
+ def initialize(message:, type:, title: nil, button_text: nil, button_link: '/')
+ @title = title
+ @message = message
+ @button_text = button_text
+ @type = type
+ @button_link = button_link
+ end
- def no_title?
- @title.nil?
- end
+ def no_title?
+ @title.nil?
+ end
- def no_button?
- @button_text.nil?
- end
+ def no_button?
+ @button_text.nil?
+ end
- def icon
- case @type
- when "success"
- "green-check.svg"
- when "failure"
- "red-warning.svg"
- when "warning"
- "orange-warning.svg"
- end
+ def icon
+ case @type
+ when 'success'
+ 'green-check.svg'
+ when 'failure'
+ 'red-warning.svg'
+ when 'warning'
+ 'orange-warning.svg'
end
+ end
end
diff --git a/app/components/chip_button_component.rb b/app/components/chip_button_component.rb
index f503dca5aa..2205daafe4 100644
--- a/app/components/chip_button_component.rb
+++ b/app/components/chip_button_component.rb
@@ -1,9 +1,11 @@
+# frozen_string_literal: true
+
class ChipButtonComponent < ViewComponent::Base
- def initialize(url: nil, text: nil, type: "static", disabled: false, **html_options)
- @url = url
- @text = text
- @type = type
- @disabled = disabled
- @html_options = html_options.merge({href: @url})
- end
-end
\ No newline at end of file
+ def initialize(url: nil, text: nil, type: 'static', disabled: false, **html_options)
+ @url = url
+ @text = text
+ @type = type
+ @disabled = disabled
+ @html_options = html_options.merge({ href: @url })
+ end
+end
diff --git a/app/components/chips_component.rb b/app/components/chips_component.rb
index 0e9628bec9..1dfb2a0227 100644
--- a/app/components/chips_component.rb
+++ b/app/components/chips_component.rb
@@ -1,15 +1,16 @@
-class ChipsComponent < ViewComponent::Base
+# frozen_string_literal: true
- renders_one :count
- def initialize(id:nil, name:, label: nil, value:, checked: false)
- @id = id || name
- @name = name
- @value = value
- @checked = checked
- @label = label || @value
- end
+class ChipsComponent < ViewComponent::Base
+ renders_one :count
+ def initialize(name:, value:, id: nil, label: nil, checked: false)
+ @id = id || name
+ @name = name
+ @value = value
+ @checked = checked
+ @label = label || @value
+ end
- def checked?
- @checked
- end
-end
\ No newline at end of file
+ def checked?
+ @checked
+ end
+end
diff --git a/app/components/circle_progress_bar_component.rb b/app/components/circle_progress_bar_component.rb
index e3e746b605..d7a7e03e67 100644
--- a/app/components/circle_progress_bar_component.rb
+++ b/app/components/circle_progress_bar_component.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
class CircleProgressBarComponent < ViewComponent::Base
-
- def initialize(count: , max: )
+ def initialize(count:, max:)
super
@count = count
@max = max
diff --git a/app/components/collapsable_block_component.rb b/app/components/collapsable_block_component.rb
index 7941f2d960..b1bb6a80a2 100644
--- a/app/components/collapsable_block_component.rb
+++ b/app/components/collapsable_block_component.rb
@@ -3,7 +3,6 @@
class CollapsableBlockComponent < ViewComponent::Base
renders_one :header
-
def initialize(id: '', parent_id: '', collapsed: true, title: '')
super
@id = id
@@ -17,6 +16,6 @@ def collapsed?
end
def collapsed_class
- collapsed? ? 'collapsed' : 'show'
+ collapsed? ? 'collapsed' : 'show'
end
end
diff --git a/app/components/concept_details_component.rb b/app/components/concept_details_component.rb
index 87c6d3572d..52ef2da853 100644
--- a/app/components/concept_details_component.rb
+++ b/app/components/concept_details_component.rb
@@ -29,7 +29,6 @@ def add_sections(keys, &block)
table_row.create(*row)
end
end
-
end
def row_hash_properties(properties_set, ontology_acronym, &block)
@@ -43,12 +42,10 @@ def row_hash_properties(properties_set, ontology_acronym, &block)
ajax_links = values.map do |v|
if block_given?
block.call(v)
+ elsif v.is_a?(String)
+ get_link_for_cls_ajax(v, ontology_acronym, '_blank')
else
- if v.is_a?(String)
- get_link_for_cls_ajax(v, ontology_acronym, '_blank')
- else
- display_in_multiple_languages([v].to_h)
- end
+ display_in_multiple_languages([v].to_h)
end
end
@@ -111,37 +108,41 @@ def concept_properties2hash(properties)
next if properties[key].nil? # ignore :context and :links when nil.
# Shorten the key into a simple label
- k = key.to_s if key.kind_of?(Symbol)
+ k = key.to_s if key.is_a?(Symbol)
k ||= key
label = key
- if k.start_with?("http")
- label = LinkedData::Client::HTTP.get("/ontologies/#{@ontology.acronym}/properties/#{CGI.escape(k)}/label").label rescue ""
+ if k.start_with?('http')
+ label = begin
+ LinkedData::Client::HTTP.get("/ontologies/#{@ontology.acronym}/properties/#{CGI.escape(k)}/label").label
+ rescue StandardError
+ ''
+ end
if label.nil? || label.empty?
k = k.gsub(/.*#/, '') # greedy regex replace everything up to last '#'
- k = k.gsub(/.*\//, '') # greedy regex replace everything up to last '/'
+ k = k.gsub(%r{.*/}, '') # greedy regex replace everything up to last '/'
# That might take care of nearly everything to be shortened.
label = k
end
end
begin
# Try to simplify the property values, when they are a struct.
- if properties[key].is_a?(OpenStruct)
- values = language_hash(properties[key])
- else
- values = properties[key].map { |v| v.string }
- end
- rescue
+ values = if properties[key].is_a?(OpenStruct)
+ language_hash(properties[key])
+ else
+ properties[key].map(&:string)
+ end
+ rescue StandardError
# Each value is probably a simple datatype already.
values = properties[key]
end
- data = { :key => key, :values => values }
+ data = { key: key, values: values }
properties_data[label] = data
end
- return properties_data
+ properties_data
end
def exclude_relation?(relation_to_check, ontology = nil)
- excluded_relations = ["type", "rdf:type", "[R]", "SuperClass", "InstanceCount"]
+ excluded_relations = ['type', 'rdf:type', '[R]', 'SuperClass', 'InstanceCount']
# Show or hide property based on the property and ontology settings
if ontology
@@ -155,7 +156,6 @@ def exclude_relation?(relation_to_check, ontology = nil)
excluded_relations.each do |relation|
return true if relation_to_check.include?(relation)
end
- return false
+ false
end
-
end
diff --git a/app/components/date_time_field_component.rb b/app/components/date_time_field_component.rb
index 35ec91b38d..657ac84aa0 100644
--- a/app/components/date_time_field_component.rb
+++ b/app/components/date_time_field_component.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
class DateTimeFieldComponent < ViewComponent::Base
-
- def initialize(value: , format: :monthfull_day_year)
+ def initialize(value:, format: :monthfull_day_year)
super
@value = value
@format = format
@@ -11,5 +10,4 @@ def initialize(value: , format: :monthfull_day_year)
def call
l(Date.parse(@value), format: @format.to_sym) if @value
end
-
end
diff --git a/app/components/display/alert_component.rb b/app/components/display/alert_component.rb
index c381f2a37e..f528819b67 100644
--- a/app/components/display/alert_component.rb
+++ b/app/components/display/alert_component.rb
@@ -1,47 +1,48 @@
-class Display::AlertComponent < ViewComponent::Base
- def initialize(message: nil, closable: true, type: "info", auto_close_delay: nil)
- @message = message
- @closable = closable
- @type = type
- @auto_close_delay = auto_close_delay
+# frozen_string_literal: true
+
+module Display
+ class AlertComponent < ViewComponent::Base
+ def initialize(message: nil, closable: true, type: 'info', auto_close_delay: nil)
+ @message = message
+ @closable = closable
+ @type = type
+ @auto_close_delay = auto_close_delay
end
def closable?
- @closable
+ @closable
end
- def message
- @message
- end
+ attr_reader :message
def alert_type_class
- case @type
- when "info"
- "alert-info-type"
- when "warning"
- "alert-warning-type"
- when "danger"
- "alert-danger-type"
- when "success"
- "alert-success-type"
- end
+ case @type
+ when 'info'
+ 'alert-info-type'
+ when 'warning'
+ 'alert-warning-type'
+ when 'danger'
+ 'alert-danger-type'
+ when 'success'
+ 'alert-success-type'
+ end
end
def alert_icon
- case @type
- when "info"
- "info.svg"
- when "warning"
- "warning.svg"
- when "danger"
- "danger.svg"
- when "success"
- "success.svg"
- end
+ case @type
+ when 'info'
+ 'info.svg'
+ when 'warning'
+ 'warning.svg'
+ when 'danger'
+ 'danger.svg'
+ when 'success'
+ 'success.svg'
+ end
end
def auto_close?
- !@auto_close_delay.nil?
+ !@auto_close_delay.nil?
end
-
-end
\ No newline at end of file
+ end
+end
diff --git a/app/components/display/button_loader_component.rb b/app/components/display/button_loader_component.rb
index 202cd4cf9d..ec9dab61c8 100644
--- a/app/components/display/button_loader_component.rb
+++ b/app/components/display/button_loader_component.rb
@@ -1,22 +1,22 @@
# frozen_string_literal: true
-class Display::ButtonLoaderComponent < ViewComponent::Base
-
- def initialize(id: nil, slim: false, color: 'normal')
- @slim = slim
- @color = color
- @id = id
- end
-
+module Display
+ class ButtonLoaderComponent < ViewComponent::Base
+ def initialize(id: nil, slim: false, color: 'normal')
+ @slim = slim
+ @color = color
+ @id = id
+ end
- def call
- slim_class = @slim ? "slim " : ""
- danger_class = @color == "danger" ? "danger-button " : ""
- warning_class = @color == "warning" ? "warning-button " : ""
+ def call
+ slim_class = @slim ? 'slim ' : ''
+ danger_class = @color == 'danger' ? 'danger-button ' : ''
+ warning_class = @color == 'warning' ? 'warning-button ' : ''
- content_tag(:div, class: "animation-container #{danger_class} #{warning_class} #{slim_class}", id: @id) do
- content_tag(:div, class: "lds-ellipsis") do
- 4.times.map { content_tag(:div) }.join.html_safe
+ content_tag(:div, class: "animation-container #{danger_class} #{warning_class} #{slim_class}", id: @id) do
+ content_tag(:div, class: 'lds-ellipsis') do
+ 4.times.map { content_tag(:div) }.join.html_safe
+ end
end
end
end
diff --git a/app/components/display/header_component.rb b/app/components/display/header_component.rb
index b814f55fc1..7aa8b08809 100644
--- a/app/components/display/header_component.rb
+++ b/app/components/display/header_component.rb
@@ -1,23 +1,21 @@
# frozen_string_literal: true
-class Display::HeaderComponent < ViewComponent::Base
+module Display
+ class HeaderComponent < ViewComponent::Base
+ renders_one :text
- renders_one :text
-
- def initialize(text: nil, tooltip: nil)
- super
- @text = text
- @info = tooltip
- end
+ def initialize(text: nil, tooltip: nil)
+ super
+ @text = text
+ @info = tooltip
+ end
- def call
- content_tag(:div, class: 'header-component') do
- out = content_tag(:p, text || @text)
- if @info && !@info.empty?
- out = out + render(Display::InfoTooltipComponent.new(text: @info))
+ def call
+ content_tag(:div, class: 'header-component') do
+ out = content_tag(:p, text || @text)
+ out += render(Display::InfoTooltipComponent.new(text: @info)) if @info && !@info.empty?
+ out
end
- out
end
end
-
end
diff --git a/app/components/display/image_component.rb b/app/components/display/image_component.rb
index 36bcb10fe7..8015598c4a 100644
--- a/app/components/display/image_component.rb
+++ b/app/components/display/image_component.rb
@@ -1,34 +1,35 @@
# frozen_string_literal: true
-class Display::ImageComponent < ViewComponent::Base
- include ModalHelper
+module Display
+ class ImageComponent < ViewComponent::Base
+ include ModalHelper
- def initialize(src: , title: '', enable_zoom: true)
- super
- @src = src
- @title = title
- @enable_zoom = enable_zoom
- end
+ def initialize(src:, title: '', enable_zoom: true)
+ super
+ @src = src
+ @title = title
+ @enable_zoom = enable_zoom
+ end
- def call
- content_tag(:div, class: 'image-container ') do
- depiction_with_modal(@src)
+ def call
+ content_tag(:div, class: 'image-container ') do
+ depiction_with_modal(@src)
+ end
end
- end
- def depiction_with_modal(depiction_url)
- img_tag = image_tag(depiction_url, class: 'image-content')
- loop_icon_tag = content_tag(:span , image_tag('icons/loop.svg'), class: 'loop_icon')
- modal_url = "/ajax/images/show?url=#{depiction_url}"
- modal_options = { data: { show_modal_title_value: @title, show_modal_size_value: 'modal-xl' } }
+ def depiction_with_modal(depiction_url)
+ img_tag = image_tag(depiction_url, class: 'image-content')
+ loop_icon_tag = content_tag(:span, image_tag('icons/loop.svg'), class: 'loop_icon')
+ modal_url = "/ajax/images/show?url=#{depiction_url}"
+ modal_options = { data: { show_modal_title_value: @title, show_modal_size_value: 'modal-xl' } }
- if @enable_zoom
- link_to_modal(nil, modal_url, modal_options) do
- loop_icon_tag + img_tag
+ if @enable_zoom
+ link_to_modal(nil, modal_url, modal_options) do
+ loop_icon_tag + img_tag
+ end
+ else
+ img_tag
end
- else
- img_tag
end
-
end
end
diff --git a/app/components/display/info_tooltip_component.rb b/app/components/display/info_tooltip_component.rb
index 824ae908e9..af77f2f610 100644
--- a/app/components/display/info_tooltip_component.rb
+++ b/app/components/display/info_tooltip_component.rb
@@ -1,14 +1,15 @@
# frozen_string_literal: true
-class Display::InfoTooltipComponent < ViewComponent::Base
+module Display
+ class InfoTooltipComponent < ViewComponent::Base
+ def initialize(text: nil, icon: 'info.svg')
+ super
+ @text = text
+ @icon = icon
+ end
- def initialize(text: nil , icon: "info.svg")
- super
- @text = text
- @icon = icon
+ def call
+ image_tag("icons/#{@icon}", data: { controller: 'tooltip', 'tooltip-interactive-value': 'true' }, title: @text)
+ end
end
- def call
- image_tag("icons/#{@icon}", data:{controller:'tooltip', 'tooltip-interactive-value': 'true'}, title: @text)
- end
-
end
diff --git a/app/components/dropdown_button_component.rb b/app/components/dropdown_button_component.rb
index 08c97795cc..a091fa27ea 100644
--- a/app/components/dropdown_button_component.rb
+++ b/app/components/dropdown_button_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class DropdownButtonComponent < ViewComponent::Base
-
renders_one :header
renders_many :sections, DropdownSectionButtonComponent
diff --git a/app/components/dropdown_container_component.rb b/app/components/dropdown_container_component.rb
index 3d785f85e8..3d727bf789 100644
--- a/app/components/dropdown_container_component.rb
+++ b/app/components/dropdown_container_component.rb
@@ -2,7 +2,7 @@
class DropdownContainerComponent < ViewComponent::Base
renders_one :empty_state
- def initialize(title:, id:, tooltip:nil)
+ def initialize(title:, id:, tooltip: nil)
super
@title = title
@id = id
diff --git a/app/components/dropdown_section_button_component.rb b/app/components/dropdown_section_button_component.rb
index c46074f758..56a8d6fcda 100644
--- a/app/components/dropdown_section_button_component.rb
+++ b/app/components/dropdown_section_button_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class DropdownSectionButtonComponent < ViewComponent::Base
-
renders_one :header
renders_many :items
diff --git a/app/components/external_link_text_component.rb b/app/components/external_link_text_component.rb
index 05bed2cfbb..28e18b47f8 100644
--- a/app/components/external_link_text_component.rb
+++ b/app/components/external_link_text_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class ExternalLinkTextComponent < LinkTextComponent
-
def initialize(text:)
super(text: text, icon: 'icons/external-link.svg')
end
diff --git a/app/components/field_container_component.rb b/app/components/field_container_component.rb
index d45e42e0ea..7fff131f63 100644
--- a/app/components/field_container_component.rb
+++ b/app/components/field_container_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class FieldContainerComponent < ViewComponent::Base
-
renders_one :label
def initialize(label: nil, value: nil)
super
diff --git a/app/components/infinite_scroll_component.rb b/app/components/infinite_scroll_component.rb
index ecbfa3a88d..426b4c8071 100644
--- a/app/components/infinite_scroll_component.rb
+++ b/app/components/infinite_scroll_component.rb
@@ -14,7 +14,5 @@ def initialize(id:, collection:, next_url:, current_page:, next_page:)
@next_url = next_url
@current_page = current_page
@next_page = next_page
-
end
-
end
diff --git a/app/components/input/date_component.rb b/app/components/input/date_component.rb
index 6d26ad4c20..fd03790806 100644
--- a/app/components/input/date_component.rb
+++ b/app/components/input/date_component.rb
@@ -1,14 +1,19 @@
# frozen_string_literal: true
-class Input::DateComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: Date.today, placeholder: '', error_message: '', helper_text: '', id: nil, max_date: nil)
- data_flat_picker = { controller: "flatpickr", flatpickr_date_format: "Y-m-d", flatpickr_alt_input: "true", flatpickr_alt_format: "F j, Y"}
- data_flat_picker[:flatpickr_max_date] = max_date if max_date
+module Input
+ class DateComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: Date.today, placeholder: '', error_message: '', helper_text: '', id: nil,
+ max_date: nil)
+ data_flat_picker = { controller: 'flatpickr', flatpickr_date_format: 'Y-m-d', flatpickr_alt_input: 'true',
+ flatpickr_alt_format: 'F j, Y' }
+ data_flat_picker[:flatpickr_max_date] = max_date if max_date
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text, data: data_flat_picker, id: id)
- end
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text, data: data_flat_picker, id: id)
+ end
- def call
- render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder, error_message: @error_message, helper_text: @helper_text, data: @data, type: 'date', id: @id)
+ def call
+ render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
+ error_message: @error_message, helper_text: @helper_text, data: @data, type: 'date', id: @id)
+ end
end
end
diff --git a/app/components/input/email_component.rb b/app/components/input/email_component.rb
index 8d68ba3bc7..ba88f55a19 100644
--- a/app/components/input/email_component.rb
+++ b/app/components/input/email_component.rb
@@ -1,11 +1,14 @@
# frozen_string_literal: true
-class Input::EmailComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: nil, placeholder: '', error_message: '', helper_text: '')
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
+module Input
+ class EmailComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: nil, placeholder: '', error_message: '', helper_text: '')
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
+ end
- def call
- render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder, error_message: @error_message, helper_text: @helper_text, type: "email")
+ def call
+ render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
+ error_message: @error_message, helper_text: @helper_text, type: 'email')
+ end
end
end
diff --git a/app/components/input/file_input_component.rb b/app/components/input/file_input_component.rb
index 41de28bce3..639585e6b5 100644
--- a/app/components/input/file_input_component.rb
+++ b/app/components/input/file_input_component.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
-class Input::FileInputComponent < ViewComponent::Base
- def initialize(name:, html_options: '')
- @name = name
- @html_options = html_options
+module Input
+ class FileInputComponent < ViewComponent::Base
+ def initialize(name:, html_options: '')
+ @name = name
+ @html_options = html_options
+ end
end
-
end
diff --git a/app/components/input/input_field_component.rb b/app/components/input/input_field_component.rb
index bed61a95fd..eae9ac73f6 100644
--- a/app/components/input/input_field_component.rb
+++ b/app/components/input/input_field_component.rb
@@ -1,33 +1,35 @@
-class Input::InputFieldComponent < ViewComponent::Base
- def initialize(label: "" , name:, value: '', type: 'text', placeholder: "", error_message: "", helper_text: "", disabled: false, data: nil, id: '')
- @label = label
- @name = name
- @placeholder = placeholder
- @error_message = error_message
- @helper_text = helper_text
- @value = value
- @type = type
- @disabled = disabled
- @id = id
- @data = data
- end
-
-
- def error_style
- "border-color: var(--error-color);" if error?
- end
-
- def error?
- !@error_message&.empty?
- end
-
- def help?
- !@helper_text&.empty?
- end
-
- def label?
- !@label&.empty?
- end
-end
-
-
+# frozen_string_literal: true
+
+module Input
+ class InputFieldComponent < ViewComponent::Base
+ def initialize(name:, label: '', value: '', type: 'text', placeholder: '', error_message: '', helper_text: '',
+ disabled: false, data: nil, id: '')
+ @label = label
+ @name = name
+ @placeholder = placeholder
+ @error_message = error_message
+ @helper_text = helper_text
+ @value = value
+ @type = type
+ @disabled = disabled
+ @id = id
+ @data = data
+ end
+
+ def error_style
+ 'border-color: var(--error-color);' if error?
+ end
+
+ def error?
+ !@error_message&.empty?
+ end
+
+ def help?
+ !@helper_text&.empty?
+ end
+
+ def label?
+ !@label&.empty?
+ end
+ end
+end
diff --git a/app/components/input/language_selector_component.rb b/app/components/input/language_selector_component.rb
index 3a7ec435c3..f7f2be8ac5 100644
--- a/app/components/input/language_selector_component.rb
+++ b/app/components/input/language_selector_component.rb
@@ -1,26 +1,28 @@
# frozen_string_literal: true
-class Input::LanguageSelectorComponent < ViewComponent::Base
-
- def initialize(languages:, selected: nil, id: '', name: '' )
- super
- @languages = languages
- @id = id
- @name = languages
- @selected = selected
- end
+module Input
+ class LanguageSelectorComponent < ViewComponent::Base
+ def initialize(languages:, selected: nil, id: '', name: '')
+ super
+ @languages = languages
+ @id = id
+ @name = languages
+ @selected = selected
+ end
- def languages_options
- values = [['All languages', 'all']]
+ def languages_options
+ values = [['All languages', 'all']]
- @languages.each do |key, label|
- option = "#{render(LanguageFieldComponent.new(value: key.to_s.downcase, label: label))}
"
- values += [[option, key.to_s.downcase]]
+ @languages.each do |key, label|
+ option = "#{render(LanguageFieldComponent.new(value: key.to_s.downcase, label: label))}
"
+ values += [[option, key.to_s.downcase]]
+ end
+ values
end
- values
- end
- def call
- render SelectInputComponent.new(id: @id, name: @name, values: languages_options, selected: @selected, placeholder: 'Select a language')
+ def call
+ render SelectInputComponent.new(id: @id, name: @name, values: languages_options, selected: @selected,
+ placeholder: 'Select a language')
+ end
end
end
diff --git a/app/components/input/password_component.rb b/app/components/input/password_component.rb
index 435692a5b5..3b612ad29e 100644
--- a/app/components/input/password_component.rb
+++ b/app/components/input/password_component.rb
@@ -1,11 +1,14 @@
# frozen_string_literal: true
-class Input::PasswordComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: nil, placeholder: '', error_message: '', helper_text: '')
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
+module Input
+ class PasswordComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: nil, placeholder: '', error_message: '', helper_text: '')
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
+ end
- def call
- render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder, error_message: @error_message, helper_text: @helper_text, type: "password")
+ def call
+ render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
+ error_message: @error_message, helper_text: @helper_text, type: 'password')
+ end
end
end
diff --git a/app/components/input/select_component.rb b/app/components/input/select_component.rb
index 5e08a37056..13875c375f 100644
--- a/app/components/input/select_component.rb
+++ b/app/components/input/select_component.rb
@@ -1,22 +1,25 @@
# frozen_string_literal: true
-class Input::SelectComponent < Input::InputFieldComponent
-
- def initialize(id: nil, label: '', name:, value: [], selected: '', placeholder: '', error_message: '', helper_text: '', multiple: false, open_to_add_values: false, data: {}, tooltip: nil)
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message,
- helper_text: helper_text, data: data)
- @values = value
- @selected = selected
- @open_to_add_values = open_to_add_values
- @multiple = multiple
- @id = id
- end
+module Input
+ class SelectComponent < Input::InputFieldComponent
+ def initialize(name:, id: nil, label: '', value: [], selected: '', placeholder: '', error_message: '',
+ helper_text: '', multiple: false, open_to_add_values: false, data: {}, tooltip: nil)
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message,
+ helper_text: helper_text, data: data)
+ @values = value
+ @selected = selected
+ @open_to_add_values = open_to_add_values
+ @multiple = multiple
+ @id = id
+ end
- def call
- render Input::InputFieldComponent.new(name: @name, error_message: @error_message, helper_text: @helper_text, label: @label) do
- render SelectInputComponent.new(id: @id, name: @name, values: @values, selected: @selected,
- placeholder: @placeholder,
- multiple: @multiple, open_to_add_values: @open_to_add_values, data: @data)
+ def call
+ render Input::InputFieldComponent.new(name: @name, error_message: @error_message, helper_text: @helper_text,
+ label: @label) do
+ render SelectInputComponent.new(id: @id, name: @name, values: @values, selected: @selected,
+ placeholder: @placeholder,
+ multiple: @multiple, open_to_add_values: @open_to_add_values, data: @data)
+ end
end
end
end
diff --git a/app/components/input/text_area_component.rb b/app/components/input/text_area_component.rb
index 940a8b9352..c950b274be 100644
--- a/app/components/input/text_area_component.rb
+++ b/app/components/input/text_area_component.rb
@@ -1,8 +1,10 @@
# frozen_string_literal: true
-class Input::TextAreaComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: nil, placeholder: '', error_message: '', helper_text: '', rows: "5")
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- @rows = rows
+module Input
+ class TextAreaComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: nil, placeholder: '', error_message: '', helper_text: '', rows: '5')
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
+ @rows = rows
+ end
end
end
diff --git a/app/components/input/text_input_component.rb b/app/components/input/text_input_component.rb
index aad3006da9..09f72c42e8 100644
--- a/app/components/input/text_input_component.rb
+++ b/app/components/input/text_input_component.rb
@@ -1,13 +1,16 @@
# frozen_string_literal: true
-class Input::TextInputComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: nil, placeholder: '', error_message: '', helper_text: '', disabled: false, id: '', data: {})
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text, disabled: disabled, id: id)
- end
+module Input
+ class TextInputComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: nil, placeholder: '', error_message: '', helper_text: '', disabled: false,
+ id: '', data: {})
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text, disabled: disabled, id: id)
+ end
- def call
- render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
- error_message: @error_message, helper_text: @helper_text,
- type: @type, disabled: @disabled)
+ def call
+ render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
+ error_message: @error_message, helper_text: @helper_text,
+ type: @type, disabled: @disabled)
+ end
end
end
diff --git a/app/components/input/url_component.rb b/app/components/input/url_component.rb
index 01db0eb682..8d342124f3 100644
--- a/app/components/input/url_component.rb
+++ b/app/components/input/url_component.rb
@@ -1,11 +1,14 @@
# frozen_string_literal: true
-class Input::UrlComponent < Input::InputFieldComponent
- def initialize(label: '', name:, value: nil, placeholder: '', error_message: '', helper_text: '')
- super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
+module Input
+ class UrlComponent < Input::InputFieldComponent
+ def initialize(name:, label: '', value: nil, placeholder: '', error_message: '', helper_text: '')
+ super(label: label, name: name, value: value, placeholder: placeholder, error_message: error_message, helper_text: helper_text)
+ end
- def call
- render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder, error_message: @error_message, helper_text: @helper_text, type: "url")
+ def call
+ render Input::InputFieldComponent.new(label: @label, name: @name, value: @value, placeholder: @placeholder,
+ error_message: @error_message, helper_text: @helper_text, type: 'url')
+ end
end
end
diff --git a/app/components/label_link_component.rb b/app/components/label_link_component.rb
index 3d8ecee988..9343e4d745 100644
--- a/app/components/label_link_component.rb
+++ b/app/components/label_link_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class LabelLinkComponent < ViewComponent::Base
-
def initialize(id:, text:, icon: 'popup-link')
@id = id
@text = text
diff --git a/app/components/language_field_component.rb b/app/components/language_field_component.rb
index f4080d0980..08834c595d 100644
--- a/app/components/language_field_component.rb
+++ b/app/components/language_field_component.rb
@@ -1,14 +1,14 @@
# frozen_string_literal: true
+
require 'iso-639'
class LanguageFieldComponent < ViewComponent::Base
-
include FlagIconsRails::Rails::ViewHelpers
def initialize(value:, label: nil)
super
@value = value
- @lang_code = ISO_639.find(value.split('/').last)&.alpha2 || nil
+ @lang_code = value&.is_a?(String) ? ISO_639.find(value.split('/').last)&.alpha2 : nil
@label = label
end
@@ -16,4 +16,8 @@ def lang_code
@lang_code = 'gb' if @lang_code.eql?('en')
@lang_code
end
+
+ def value
+ @value&.is_a?(String) ? @value.to_s.split('/').last : 'NO-LANG'
+ end
end
diff --git a/app/components/language_field_component/language_field_component.html.haml b/app/components/language_field_component/language_field_component.html.haml
index e5ebf47b32..8530fae3d4 100644
--- a/app/components/language_field_component/language_field_component.html.haml
+++ b/app/components/language_field_component/language_field_component.html.haml
@@ -5,4 +5,4 @@
%div.ml-1
= @label
- else
- = render ChipButtonComponent.new(text: @value ? @value.split('/').last : 'NO-LANG')
\ No newline at end of file
+ = render ChipButtonComponent.new(text: value)
\ No newline at end of file
diff --git a/app/components/layout/card_component.rb b/app/components/layout/card_component.rb
index ceebc820c0..7e160ffe77 100644
--- a/app/components/layout/card_component.rb
+++ b/app/components/layout/card_component.rb
@@ -1,13 +1,15 @@
# frozen_string_literal: true
-class Layout::CardComponent < ViewComponent::Base
- renders_one :header, Display::HeaderComponent
+module Layout
+ class CardComponent < ViewComponent::Base
+ renders_one :header, Display::HeaderComponent
- def call
- content_tag(:div, class: 'summary-card') do
- out = ''
- out = header if header?
- raw(out.to_s + content)
+ def call
+ content_tag(:div, class: 'summary-card') do
+ out = ''
+ out = header if header?
+ raw(out.to_s + content)
+ end
end
end
end
diff --git a/app/components/layout/horizontal_list_component.rb b/app/components/layout/horizontal_list_component.rb
index aed504b7af..ab5340a439 100644
--- a/app/components/layout/horizontal_list_component.rb
+++ b/app/components/layout/horizontal_list_component.rb
@@ -1,18 +1,19 @@
# frozen_string_literal: true
-class Layout::HorizontalListComponent < ViewComponent::Base
- renders_many :elements
+module Layout
+ class HorizontalListComponent < ViewComponent::Base
+ renders_many :elements
- def call
- return if elements.empty?
+ def call
+ return if elements.empty?
- content_tag(:div, class: 'd-flex flex-wrap') do
- out = ''
- elements.each do |element|
- out = out + content_tag(:div, element, class: 'mr-1 mb-1 text-truncate overflow-hidden')
+ content_tag(:div, class: 'd-flex flex-wrap') do
+ out = ''
+ elements.each do |element|
+ out += content_tag(:div, element, class: 'mr-1 mb-1 text-truncate overflow-hidden')
+ end
+ raw out
end
- raw out
end
end
-
end
diff --git a/app/components/layout/list_component.rb b/app/components/layout/list_component.rb
index edf75b865d..37653d297b 100644
--- a/app/components/layout/list_component.rb
+++ b/app/components/layout/list_component.rb
@@ -1,20 +1,21 @@
# frozen_string_literal: true
-class Layout::ListComponent < ViewComponent::Base
+module Layout
+ class ListComponent < ViewComponent::Base
+ renders_many :rows
- renders_many :rows
+ def call
+ return if rows.map(&:to_s).reject(&:empty?).empty?
- def call
- return if rows.map(&:to_s).reject(&:empty?).empty?
+ content_tag(:div, style: 'padding: 0px 20px 20px 20px;') do
+ out = ''
+ rows.each do |row|
+ next if row.nil? || row.to_s.empty?
- content_tag(:div, style: 'padding: 0px 20px 20px 20px;') do
- out = ""
- rows.each do |row|
- next if row.nil? || row.to_s.empty?
- out = out + content_tag(:div, row.to_s, class: 'mb-1')
+ out += content_tag(:div, row.to_s, class: 'mb-1')
+ end
+ out.html_safe
end
- out.html_safe
end
end
-
end
diff --git a/app/components/layout/progress_pages_component.rb b/app/components/layout/progress_pages_component.rb
index 1680e4e494..bafa12be4f 100644
--- a/app/components/layout/progress_pages_component.rb
+++ b/app/components/layout/progress_pages_component.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-class Layout::ProgressPagesComponent < ViewComponent::Base
-
- renders_many :pages
- def initialize(pages_title: [])
- super
- @pages_title = pages_title
+module Layout
+ class ProgressPagesComponent < ViewComponent::Base
+ renders_many :pages
+ def initialize(pages_title: [])
+ super
+ @pages_title = pages_title
+ end
end
end
diff --git a/app/components/layout/reveal_component.rb b/app/components/layout/reveal_component.rb
index f6211ffed7..42b444cbc1 100644
--- a/app/components/layout/reveal_component.rb
+++ b/app/components/layout/reveal_component.rb
@@ -1,20 +1,22 @@
# frozen_string_literal: true
-class Layout::RevealComponent < ViewComponent::Base
- renders_one :button
+module Layout
+ class RevealComponent < ViewComponent::Base
+ renders_one :button
- def initialize(init_show: false, show_condition: nil,hidden_class: 'd-none')
- @hidden_class = hidden_class
- @init_show = init_show
- @show_condition = show_condition
- end
+ def initialize(init_show: false, show_condition: nil, hidden_class: 'd-none')
+ @hidden_class = hidden_class
+ @init_show = init_show
+ @show_condition = show_condition
+ end
- def container_data
- out = {
- controller: 'reveal-component',
- 'reveal-component-hidden-class': @hidden_class
- }
- out['reveal-component-condition-value'] = @show_condition if @show_condition
- out
+ def container_data
+ out = {
+ controller: 'reveal-component',
+ 'reveal-component-hidden-class': @hidden_class
+ }
+ out['reveal-component-condition-value'] = @show_condition if @show_condition
+ out
+ end
end
end
diff --git a/app/components/license_field_component.rb b/app/components/license_field_component.rb
index 6baf0f86fa..5b108b5395 100644
--- a/app/components/license_field_component.rb
+++ b/app/components/license_field_component.rb
@@ -1,10 +1,8 @@
# frozen_string_literal: true
class LicenseFieldComponent < ViewComponent::Base
-
- def initialize(value: )
+ def initialize(value:)
super
@value = value
end
-
end
diff --git a/app/components/link_field_component.rb b/app/components/link_field_component.rb
index 211851b715..0608a45e48 100644
--- a/app/components/link_field_component.rb
+++ b/app/components/link_field_component.rb
@@ -1,16 +1,13 @@
# frozen_string_literal: true
class LinkFieldComponent < ViewComponent::Base
-
def initialize(value:, raw: false)
super
@value = value
@raw = raw
end
-
def internal_link?
@value.to_s.include?(URI.parse($REST_URL).hostname) || @value.to_s.include?($UI_HOSTNAME)
end
-
end
diff --git a/app/components/link_text_component.rb b/app/components/link_text_component.rb
index ffd3b8b089..25efbab8ec 100644
--- a/app/components/link_text_component.rb
+++ b/app/components/link_text_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class LinkTextComponent < ViewComponent::Base
-
def initialize(text:, icon: nil)
@text = text
@icon = icon
diff --git a/app/components/nested_agent_search_input_component.rb b/app/components/nested_agent_search_input_component.rb
index 98cbbd4893..9d10de62da 100644
--- a/app/components/nested_agent_search_input_component.rb
+++ b/app/components/nested_agent_search_input_component.rb
@@ -1,10 +1,10 @@
# frozen_string_literal: true
class NestedAgentSearchInputComponent < ViewComponent::Base
+ include AgentHelper
+ include Turbo::FramesHelper
- include Turbo::FramesHelper, AgentHelper
-
- def initialize(label: nil, agents:, agent_type:, name_prefix:, edit_on_modal: false, parent_id: nil)
+ def initialize(agents:, agent_type:, name_prefix:, label: nil, edit_on_modal: false, parent_id: nil)
super
@agents = agents
@agent_type = agent_type
diff --git a/app/components/nested_form_inputs_component.rb b/app/components/nested_form_inputs_component.rb
index f538185805..d064607023 100644
--- a/app/components/nested_form_inputs_component.rb
+++ b/app/components/nested_form_inputs_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class NestedFormInputsComponent < ViewComponent::Base
-
renders_one :template
renders_one :header
renders_many :rows
diff --git a/app/components/notification_component.rb b/app/components/notification_component.rb
index 49f82354a3..7c2e9e944f 100644
--- a/app/components/notification_component.rb
+++ b/app/components/notification_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class NotificationComponent < ViewComponent::Base
-
def initialize(title:, comment: '', type: 'success', auto_remove: true)
super
@title = title
@@ -31,9 +30,8 @@ def notification_class
end
private
+
def svg_icon(name)
inline_svg_tag("icons/#{name}.svg", class: notification_type_class)
end
-
-
end
diff --git a/app/components/ontology_browse_card_component.rb b/app/components/ontology_browse_card_component.rb
index 84251d7f0d..f21536fbcc 100644
--- a/app/components/ontology_browse_card_component.rb
+++ b/app/components/ontology_browse_card_component.rb
@@ -8,7 +8,5 @@ def initialize(ontology: nil)
@ontology = ontology
end
- def ontology
- @ontology
- end
+ attr_reader :ontology
end
diff --git a/app/components/ontology_search_input_component.rb b/app/components/ontology_search_input_component.rb
index 2bbecab9d4..68eeb32edb 100644
--- a/app/components/ontology_search_input_component.rb
+++ b/app/components/ontology_search_input_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class OntologySearchInputComponent < ViewComponent::Base
-
def initialize(name: 'search', placeholder: t('ontologies.ontology_search_prompt'), scroll_down: true)
@name = name
@placeholder = placeholder
diff --git a/app/components/pill_button_component.rb b/app/components/pill_button_component.rb
index 5371bee439..4b51ee0ec0 100644
--- a/app/components/pill_button_component.rb
+++ b/app/components/pill_button_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class PillButtonComponent < ViewComponent::Base
-
def initialize(text: nil)
super
@text = text
diff --git a/app/components/popup_link_text_component.rb b/app/components/popup_link_text_component.rb
index d6dbc41e4d..d269e926ff 100644
--- a/app/components/popup_link_text_component.rb
+++ b/app/components/popup_link_text_component.rb
@@ -1,9 +1,7 @@
# frozen_string_literal: true
class PopupLinkTextComponent < LinkTextComponent
-
def initialize(text:)
super(text: text, icon: 'icons/popup-link.svg')
end
-
end
diff --git a/app/components/rounded_button_component.rb b/app/components/rounded_button_component.rb
index b2a0ce49c6..76f5ab08ab 100644
--- a/app/components/rounded_button_component.rb
+++ b/app/components/rounded_button_component.rb
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
class RoundedButtonComponent < ViewComponent::Base
- def initialize(icon: "json.svg", link: "#", size: "small", target: '', title: '')
+ def initialize(icon: 'json.svg', link: '#', size: 'small', target: '', title: '')
@icon = icon
@link = link
@size = size
@@ -9,13 +11,12 @@ def initialize(icon: "json.svg", link: "#", size: "small", target: '', title: ''
def size
case @size
- when "small"
- ["32px", "1", "16px"]
- when "medium"
- ["45px", "1", "23px"]
- when "big"
- ["100px", "2.5", "50px"]
+ when 'small'
+ %w[32px 1 16px]
+ when 'medium'
+ %w[45px 1 23px]
+ when 'big'
+ ['100px', '2.5', '50px']
end
end
-
-end
\ No newline at end of file
+end
diff --git a/app/components/search_input_component.rb b/app/components/search_input_component.rb
index 97b5c8b78d..ee8ff03128 100644
--- a/app/components/search_input_component.rb
+++ b/app/components/search_input_component.rb
@@ -1,14 +1,10 @@
# frozen_string_literal: true
class SearchInputComponent < ViewComponent::Base
-
renders_one :template
- def initialize(name: '', placeholder: '', actions_links: {},
+ def initialize(ajax_url:, item_base_url:, id_key:, name: '', placeholder: '', actions_links: {},
scroll_down: true, use_cache: true,
- ajax_url:,
- item_base_url:,
- id_key:,
links_target: '_top')
super
@name = name
@@ -21,9 +17,10 @@ def initialize(name: '', placeholder: '', actions_links: {},
@id_key = id_key
@links_target = links_target
end
+
def action_link_info(value)
if value.is_a?(Hash)
- [value[:link] , value[:target]]
+ [value[:link], value[:target]]
else
[value, '_top']
end
diff --git a/app/components/select_input_component.rb b/app/components/select_input_component.rb
index 6aee690253..d359a0baae 100644
--- a/app/components/select_input_component.rb
+++ b/app/components/select_input_component.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
class SelectInputComponent < ViewComponent::Base
-
- def initialize(id:, name:, values:, selected: nil, multiple: false, open_to_add_values: false, data: {}, placeholder: '')
+ def initialize(id:, name:, values:, selected: nil, multiple: false, open_to_add_values: false, data: {},
+ placeholder: '')
super
@id = id || ''
@name = name
@@ -15,7 +15,8 @@ def initialize(id:, name:, values:, selected: nil, multiple: false, open_to_add_
end
def call
- select_input_tag(@id, @name, @values, @selected, multiple: @multiple, open_to_add_values: @open_to_add_values, placeholder: @placeholder)
+ select_input_tag(@id, @name, @values, @selected, multiple: @multiple, open_to_add_values: @open_to_add_values,
+ placeholder: @placeholder)
end
private
@@ -38,6 +39,5 @@ def select_input_tag(id, name, values, selected, options = {})
data: data
}
select_tag(name, options_for_select(values, selected), select_html_options)
-
end
end
diff --git a/app/components/square_badge_component.rb b/app/components/square_badge_component.rb
index 9d85a8c34f..65ac08a7a1 100644
--- a/app/components/square_badge_component.rb
+++ b/app/components/square_badge_component.rb
@@ -1,12 +1,12 @@
# frozen_string_literal: true
class SquareBadgeComponent < ViewComponent::Base
-
- def initialize(label: , count: ,link: nil)
+ def initialize(label:, count:, link: nil)
@label = label
@count = count
@link = link
end
+
def call
return if @count.to_i.zero?
@@ -15,5 +15,4 @@ def call
concat(content_tag(:p, @label, class: 'browse-card-text'))
end
end
-
end
diff --git a/app/components/submission_metadata_component.rb b/app/components/submission_metadata_component.rb
index 69c23f9bdf..f48e1d6008 100644
--- a/app/components/submission_metadata_component.rb
+++ b/app/components/submission_metadata_component.rb
@@ -1,9 +1,12 @@
# frozen_string_literal: true
class SubmissionMetadataComponent < ViewComponent::Base
- include ApplicationHelper, MetadataHelper,OntologiesHelper, AgentHelper
+ include AgentHelper
+ include OntologiesHelper
+ include MetadataHelper
+ include ApplicationHelper
- def initialize(submission: , submission_metadata:)
+ def initialize(submission:, submission_metadata:)
super
@submission = submission
@@ -11,42 +14,39 @@ def initialize(submission: , submission_metadata:)
metadata_list = {}
# Get extracted metadata and put them in a hash with their label, if one, as value
@json_metadata.each do |metadata|
- metadata_list[metadata["attribute"]] = metadata["label"]
+ metadata_list[metadata['attribute']] = metadata['label']
end
@metadata_list = metadata_list.sort
end
def display_attributes(metadata)
- if Array(@submission.send(metadata)).empty?
- out = 'N/A'
- else
- out = Array(@submission.send(metadata)).map do |value|
- content_tag(:div, class: 'm-1 f32') do
- display_attribute(metadata, value)
- end
- end.join
- end
+ out = if Array(@submission.send(metadata)).empty?
+ 'N/A'
+ else
+ Array(@submission.send(metadata)).map do |value|
+ content_tag(:div, class: 'm-1 f32') do
+ display_attribute(metadata, value)
+ end
+ end.join
+ end
out.html_safe
end
+
def attribute_help_text(attr)
- if !attr["namespace"].nil?
- help_text = "#{attr["namespace"]}:#{attr["attribute"]} "
- else
- help_text = "bioportal:#{attr["attribute"]} "
- end
+ help_text = if !attr['namespace'].nil?
+ "#{attr['namespace']}:#{attr['attribute']} "
+ else
+ "bioportal:#{attr['attribute']} "
+ end
- if (attr["metadataMappings"] != nil)
- help_text += " (#{attr["metadataMappings"].join(", ")})"
- end
+ help_text += " (#{attr['metadataMappings'].join(', ')})" unless attr['metadataMappings'].nil?
- if (!attr["enforce"].nil? && attr["enforce"].include?("uri"))
- help_text += " This metadata should be an URI "
+ if !attr['enforce'].nil? && attr['enforce'].include?('uri')
+ help_text += ' This metadata should be an URI '
end
- if (attr["helpText"] != nil)
- help_text += " #{attr["helpText"]}"
- end
+ help_text += " #{attr['helpText']}" unless attr['helpText'].nil?
help_text.html_safe
end
end
diff --git a/app/components/submission_status_component.rb b/app/components/submission_status_component.rb
index eb33b10bec..1d12012449 100644
--- a/app/components/submission_status_component.rb
+++ b/app/components/submission_status_component.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class SubmissionStatusComponent < ViewComponent::Base
include OntologiesHelper
@@ -7,23 +9,22 @@ def initialize(submission, latest)
end
def submission_version
- @submission.version.to_s if @submission.version.present?
+ @submission.version.to_s if @submission.version.present?
end
def submission_link
- if @submission.version.present?
- if @submission.ontology.summaryOnly || !@latest
- submission_version
- else
- link_to submission_version, ontology_path(@submission.ontology.acronym)
- end
+ return unless @submission.version.present?
+
+ if @submission.ontology.summaryOnly || !@latest
+ submission_version
+ else
+ link_to submission_version, ontology_path(@submission.ontology.acronym)
end
end
def submission_status
return unless @submission.submissionStatus.present?
- statuses = submission_status2string(@submission)
- end
+ submission_status2string(@submission)
+ end
end
-
\ No newline at end of file
diff --git a/app/components/summary_section_component.rb b/app/components/summary_section_component.rb
index 0ca33932f6..ea26a08cf1 100644
--- a/app/components/summary_section_component.rb
+++ b/app/components/summary_section_component.rb
@@ -3,7 +3,7 @@
class SummarySectionComponent < ViewComponent::Base
renders_many :action_links
- def initialize(title: , link: nil, link_title: nil, show_card: true)
+ def initialize(title:, link: nil, link_title: nil, show_card: true)
super
@title = title
@link = link
diff --git a/app/components/switch_input_component.rb b/app/components/switch_input_component.rb
index 3b7f677817..83346a2f0a 100644
--- a/app/components/switch_input_component.rb
+++ b/app/components/switch_input_component.rb
@@ -1,9 +1,7 @@
# frozen_string_literal: true
class SwitchInputComponent < ViewComponent::Base
-
-
- def initialize(id:, name: , label: '', value: '', checked: false, boolean_switch: false)
+ def initialize(id:, name:, label: '', value: '', checked: false, boolean_switch: false)
super
@id = id
@name = name
@@ -22,6 +20,6 @@ def check_box_name
end
def check_box_id
- @boolean_switch ? @id +"_checkbox" :@id
+ @boolean_switch ? "#{@id}_checkbox" : @id
end
end
diff --git a/app/components/tab_item_component.rb b/app/components/tab_item_component.rb
index b6612bb5be..4e5f39590f 100644
--- a/app/components/tab_item_component.rb
+++ b/app/components/tab_item_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class TabItemComponent < ViewComponent::Base
-
include ActionView::Helpers::UrlHelper
def initialize(id: nil, title: nil, path: nil, page_name: '', selected: false)
@@ -25,7 +24,6 @@ def target_id
"#{item_id}_content"
end
-
def id
@title || @id
end
@@ -47,5 +45,4 @@ def call
end
end
end
-
end
diff --git a/app/components/table_cell_component.rb b/app/components/table_cell_component.rb
index 2e459cb32a..7ea9c43317 100644
--- a/app/components/table_cell_component.rb
+++ b/app/components/table_cell_component.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
class TableCellComponent < ViewComponent::Base
-
- def initialize(width: nil, colspan: nil,type: 'td')
+ def initialize(width: nil, colspan: nil, type: 'td')
super
@width = width
@type = type
diff --git a/app/components/table_component.rb b/app/components/table_component.rb
index 9670464db6..af4f1cfdfc 100644
--- a/app/components/table_component.rb
+++ b/app/components/table_component.rb
@@ -1,11 +1,10 @@
# frozen_string_literal: true
class TableComponent < ViewComponent::Base
-
renders_one :header, TableRowComponent
renders_many :rows, TableRowComponent
- def initialize(id: '', stripped: true, borderless: false, layout_fixed: false )
+ def initialize(id: '', stripped: true, borderless: false, layout_fixed: false)
super
@id = id
@stripped = stripped
@@ -26,6 +25,6 @@ def layout_fixed_class
end
def add_row(*array, &block)
- self.row.create(*array, &block)
+ row.create(*array, &block)
end
end
diff --git a/app/components/table_row_component.rb b/app/components/table_row_component.rb
index 68620a05c3..31f640fce8 100644
--- a/app/components/table_row_component.rb
+++ b/app/components/table_row_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class TableRowComponent < ViewComponent::Base
-
renders_many :cells, TableCellComponent
def initialize(id: '', class_css: '')
@@ -13,16 +12,16 @@ def initialize(id: '', class_css: '')
def create(*array, &block)
array.each do |key_value|
key, value = key_value.to_a.first
- self.cell(type: key) { value&.to_s }
+ cell(type: key) { value&.to_s }
end
block.call(self) if block_given?
end
def th(width: nil, colspan: nil, &block)
- self.cell(type: 'th', width: width, colspan: colspan, &block)
+ cell(type: 'th', width: width, colspan: colspan, &block)
end
def td(width: nil, colspan: nil, &block)
- self.cell(type: 'td', width: width, colspan: colspan, &block)
+ cell(type: 'td', width: width, colspan: colspan, &block)
end
end
diff --git a/app/components/tabs_container_component.rb b/app/components/tabs_container_component.rb
index bb9ecaa21c..1b1eb7ed42 100644
--- a/app/components/tabs_container_component.rb
+++ b/app/components/tabs_container_component.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class TabsContainerComponent < ViewComponent::Base
-
renders_many :items, TabItemComponent
renders_many :item_contents
renders_one :pinned_right
diff --git a/app/components/text_area_field_component.rb b/app/components/text_area_field_component.rb
index 5da424e33f..36aa9b7a08 100644
--- a/app/components/text_area_field_component.rb
+++ b/app/components/text_area_field_component.rb
@@ -1,12 +1,10 @@
# frozen_string_literal: true
class TextAreaFieldComponent < ViewComponent::Base
-
- def initialize(value: , see_more_text:'See more...' , see_less_text: 'See less...')
+ def initialize(value:, see_more_text: 'See more...', see_less_text: 'See less...')
super
@value = value
@see_more_text = see_more_text
@see_less_text = see_less_text
end
-
-end
\ No newline at end of file
+end
diff --git a/app/components/tree_infinite_scroll_component.rb b/app/components/tree_infinite_scroll_component.rb
index 4d751bf17b..07666cee9d 100644
--- a/app/components/tree_infinite_scroll_component.rb
+++ b/app/components/tree_infinite_scroll_component.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
class TreeInfiniteScrollComponent < ViewComponent::Base
-
attr_reader :collection
+
renders_one :error
def initialize(id:, collection:, next_url:, current_page:, next_page:, auto_click: false)
diff --git a/app/components/turbo_frame_component.rb b/app/components/turbo_frame_component.rb
index d25322e154..3190f9aadb 100644
--- a/app/components/turbo_frame_component.rb
+++ b/app/components/turbo_frame_component.rb
@@ -30,9 +30,7 @@ def turbo_frame_html_options
@html_options[:class] += " #{out[:class]}"
end
- if @src && !@src.empty?
- @html_options[:src] = @src
- end
+ @html_options[:src] = @src if @src && !@src.empty?
@html_options
end
diff --git a/app/components/turbo_modal_component.rb b/app/components/turbo_modal_component.rb
index 3cb4af7782..cf8624bd9f 100644
--- a/app/components/turbo_modal_component.rb
+++ b/app/components/turbo_modal_component.rb
@@ -10,5 +10,4 @@ def initialize(id: '', title: '', size: 'modal-lg', show: false)
@size = size
@show = show
end
-
end
diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb
index 4b9b5e8366..36fa1938d7 100644
--- a/app/controllers/about_controller.rb
+++ b/app/controllers/about_controller.rb
@@ -1,5 +1,6 @@
+# frozen_string_literal: true
+
class AboutController < ApplicationController
layout 'ontology'
- def index
- end
+ def index; end
end
diff --git a/app/controllers/admin/categories_controller.rb b/app/controllers/admin/categories_controller.rb
index 8d52212bb1..8784974f38 100644
--- a/app/controllers/admin/categories_controller.rb
+++ b/app/controllers/admin/categories_controller.rb
@@ -1,111 +1,120 @@
-class Admin::CategoriesController < ApplicationController
- include SubmissionUpdater
+# frozen_string_literal: true
- layout :determine_layout
- before_action :unescape_id, only: [:edit, :show, :update, :destroy]
- before_action :authorize_admin
+module Admin
+ class CategoriesController < ApplicationController
+ include SubmissionUpdater
- CATEGORIES_URL = "#{LinkedData::Client.settings.rest_url}/categories"
- ATTRIBUTE_TO_INCLUDE = 'name,acronym,created,description,parentCategory,ontologies'
+ layout :determine_layout
+ before_action :unescape_id, only: %i[edit show update destroy]
+ before_action :authorize_admin
- def index
- response = _categories
- render :json => response
- end
-
- def new
- @category = LinkedData::Client::Models::Category.new
+ CATEGORIES_URL = "#{LinkedData::Client.settings.rest_url}/categories"
+ ATTRIBUTE_TO_INCLUDE = 'name,acronym,created,description,parentCategory,ontologies'
- respond_to do |format|
- format.html { render "new", :layout => false }
+ def index
+ response = _categories
+ render json: response
end
- end
- def edit
- @category = LinkedData::Client::Models::Category.find_by_acronym(params[:id], include:'name,acronym,created,description,parentCategory,ontologies' ).first
- @ontologies_category = LinkedData::Client::Models::Ontology.all(include: 'acronym').map {|o|[o.acronym, o.id] }
- respond_to do |format|
- format.html { render "edit", :layout => false }
- end
- end
+ def new
+ @category = LinkedData::Client::Models::Category.new
- def create
- response = { errors: '', success: '' }
- start = Time.now
- begin
- category = LinkedData::Client::Models::Category.new(values: category_params)
- category_saved = category.save
- if response_error?(category_saved)
- response[:errors] = response_errors(category_saved)
- else
- response[:success] = "category successfully created in #{Time.now - start}s"
+ respond_to do |format|
+ format.html { render 'new', layout: false }
end
- rescue Exception => e
- response[:errors] = "Problem creating the category - #{e.message}"
end
- render json: response, status: (response[:errors] == '' ? :created : :internal_server_error)
- end
+ def edit
+ @category = LinkedData::Client::Models::Category.find_by_acronym(params[:id],
+ include: 'name,acronym,created,description,parentCategory,ontologies').first
+ @ontologies_category = LinkedData::Client::Models::Ontology.all(include: 'acronym').map { |o| [o.acronym, o.id] }
+ respond_to do |format|
+ format.html { render 'edit', layout: false }
+ end
+ end
- def update
- response = { errors: '', success: ''}
- start = Time.now
- begin
- category = LinkedData::Client::Models::Category.find_by_acronym(params[:id], include: ATTRIBUTE_TO_INCLUDE ).first
- add_ontologies_to_object(category_params[:ontologies],category) if (category_params[:ontologies].present? && category_params[:ontologies].size > 0 && category_params[:ontologies].first != '')
- delete_ontologies_from_object(category_params[:ontologies],category.ontologies,category)
- category.update_from_params(category_params)
- category_update = category.update
- if response_error?(category_update)
- response[:errors] = response_errors(category_update)
- else
- response[:success] = "category successfully updated in #{Time.now - start}s"
+ def create
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ category = LinkedData::Client::Models::Category.new(values: category_params)
+ category_saved = category.save
+ if response_error?(category_saved)
+ response[:errors] = response_errors(category_saved)
+ else
+ response[:success] = "category successfully created in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem creating the category - #{e.message}"
end
- rescue Exception => e
- response[:errors] = "Problem updating the category - #{e.message}"
+ render json: response, status: (response[:errors] == '' ? :created : :internal_server_error)
end
- render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
- end
- def destroy
- response = { errors: '', success: ''}
- start = Time.now
- begin
- category = LinkedData::Client::Models::Category.find_by_acronym(params[:id]).first
- error_response = category.delete
-
- if response_error?(error_response)
- response[:errors] = response_errors(error_response)
- else
- response[:success] = "category successfully deleted in #{Time.now - start}s"
+ def update
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ category = LinkedData::Client::Models::Category.find_by_acronym(params[:id],
+ include: ATTRIBUTE_TO_INCLUDE).first
+ if category_params[:ontologies].present? && category_params[:ontologies].size.positive? && category_params[:ontologies].first != ''
+ add_ontologies_to_object(category_params[:ontologies],
+ category)
+ end
+ delete_ontologies_from_object(category_params[:ontologies], category.ontologies, category)
+ category.update_from_params(category_params)
+ category_update = category.update
+ if response_error?(category_update)
+ response[:errors] = response_errors(category_update)
+ else
+ response[:success] = "category successfully updated in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem updating the category - #{e.message}"
end
- rescue Exception => e
- response[:errors] = "Problem deleting the category - #{e.message}"
+ render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
end
- render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
- end
- private
+ def destroy
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ category = LinkedData::Client::Models::Category.find_by_acronym(params[:id]).first
+ error_response = category.delete
+
+ if response_error?(error_response)
+ response[:errors] = response_errors(error_response)
+ else
+ response[:success] = "category successfully deleted in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem deleting the category - #{e.message}"
+ end
+ render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
+ end
- def unescape_id
- params[:id] = CGI.unescape(params[:id])
- end
+ private
- def category_params
- params.require(:category).permit(:acronym, :name, :description, :parentCategory, {ontologies:[]}).to_h
- end
+ def unescape_id
+ params[:id] = CGI.unescape(params[:id])
+ end
- def _categories
- response = { categories: Hash.new, errors: '', success: '' }
- start = Time.now
- begin
- response[:categories] = JSON.parse(LinkedData::Client::HTTP.get(CATEGORIES_URL, { include: ATTRIBUTE_TO_INCLUDE }, raw: true))
+ def category_params
+ params.require(:category).permit(:acronym, :name, :description, :parentCategory, { ontologies: [] }).to_h
+ end
- response[:success] = "categories successfully retrieved in #{Time.now - start}s"
- LOG.add :debug, "Categories - retrieved #{response[:categories].length} groups in #{Time.now - start}s"
- rescue Exception => e
- response[:errors] = "Problem retrieving categories - #{e.message}"
+ def _categories
+ response = { categories: {}, errors: '', success: '' }
+ start = Time.now
+ begin
+ response[:categories] =
+ JSON.parse(LinkedData::Client::HTTP.get(CATEGORIES_URL, { include: ATTRIBUTE_TO_INCLUDE }, raw: true))
+
+ response[:success] = "categories successfully retrieved in #{Time.now - start}s"
+ LOG.add :debug, "Categories - retrieved #{response[:categories].length} groups in #{Time.now - start}s"
+ rescue Exception => e
+ response[:errors] = "Problem retrieving categories - #{e.message}"
+ end
+ response
end
- response
end
end
diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb
index 3df27d2e02..207608b310 100644
--- a/app/controllers/admin/groups_controller.rb
+++ b/app/controllers/admin/groups_controller.rb
@@ -1,111 +1,117 @@
-class Admin::GroupsController < ApplicationController
- include SubmissionUpdater
+# frozen_string_literal: true
- layout :determine_layout
- before_action :unescape_id, only: [:edit, :show, :update, :destroy]
- before_action :authorize_admin
+module Admin
+ class GroupsController < ApplicationController
+ include SubmissionUpdater
- GROUPS_URL = "#{LinkedData::Client.settings.rest_url}/groups"
+ layout :determine_layout
+ before_action :unescape_id, only: %i[edit show update destroy]
+ before_action :authorize_admin
- def index
- response = _groups
- render :json => response
- end
-
- def new
- @group = LinkedData::Client::Models::Group.new
+ GROUPS_URL = "#{LinkedData::Client.settings.rest_url}/groups"
- respond_to do |format|
- format.html { render "new", :layout => false }
+ def index
+ response = _groups
+ render json: response
end
- end
- def edit
- @group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
- @acronyms = @group.ontologies.map { |url| url.match(/\/([^\/]+)$/)[1] }
- @ontologies_group = LinkedData::Client::Models::Ontology.all(include: 'acronym').map {|o|[o.acronym, o.id] }
- respond_to do |format|
- format.html { render "edit", :layout => false }
+ def new
+ @group = LinkedData::Client::Models::Group.new
+
+ respond_to do |format|
+ format.html { render 'new', layout: false }
+ end
end
- end
- def create
- response = { errors: '', success: '' }
- start = Time.now
- begin
- group = LinkedData::Client::Models::Group.new(values: group_params)
- group_saved = group.save
- if response_error?(group_saved)
- response[:errors] = response_errors(group_saved)
- else
- response[:success] = "group successfully created in #{Time.now - start}s"
+ def edit
+ @group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
+ @acronyms = @group.ontologies.map { |url| url.match(%r{/([^/]+)$})[1] }
+ @ontologies_group = LinkedData::Client::Models::Ontology.all(include: 'acronym').map { |o| [o.acronym, o.id] }
+ respond_to do |format|
+ format.html { render 'edit', layout: false }
end
- rescue Exception => e
- response[:errors] = "Problem creating the group - #{e.message}"
end
- render json: response, status: (response[:errors] == '' ? :created : :internal_server_error)
- end
+ def create
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ group = LinkedData::Client::Models::Group.new(values: group_params)
+ group_saved = group.save
+ if response_error?(group_saved)
+ response[:errors] = response_errors(group_saved)
+ else
+ response[:success] = "group successfully created in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem creating the group - #{e.message}"
+ end
+ render json: response, status: (response[:errors] == '' ? :created : :internal_server_error)
+ end
- def update
- response = { errors: '', success: ''}
- start = Time.now
- begin
- group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
- add_ontologies_to_object(group_params[:ontologies],group) if (group_params[:ontologies].present? && group_params[:ontologies].size > 0 && group_params[:ontologies].first != '')
- delete_ontologies_from_object(group_params[:ontologies],group.ontologies,group)
- group.update_from_params(group_params)
- group_updated = group.update
- if response_error?(group_updated)
- response[:errors] = response_errors(group_updated)
- else
- response[:success] = "group successfully updated in #{Time.now - start}s"
+ def update
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
+ if group_params[:ontologies].present? && group_params[:ontologies].size.positive? && group_params[:ontologies].first != ''
+ add_ontologies_to_object(group_params[:ontologies],
+ group)
+ end
+ delete_ontologies_from_object(group_params[:ontologies], group.ontologies, group)
+ group.update_from_params(group_params)
+ group_updated = group.update
+ if response_error?(group_updated)
+ response[:errors] = response_errors(group_updated)
+ else
+ response[:success] = "group successfully updated in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem updating the group - #{e.message}"
end
- rescue Exception => e
- response[:errors] = "Problem updating the group - #{e.message}"
+ render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
end
- render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
- end
- def destroy
- response = { errors: '', success: ''}
- start = Time.now
- begin
- group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
- error_response = group.delete
-
- if response_error?(error_response)
- response[:errors] = response_errors(error_response)
- else
- response[:success] = "group successfully deleted in #{Time.now - start}s"
+ def destroy
+ response = { errors: '', success: '' }
+ start = Time.now
+ begin
+ group = LinkedData::Client::Models::Group.find_by_acronym(params[:id]).first
+ error_response = group.delete
+
+ if response_error?(error_response)
+ response[:errors] = response_errors(error_response)
+ else
+ response[:success] = "group successfully deleted in #{Time.now - start}s"
+ end
+ rescue Exception => e
+ response[:errors] = "Problem deleting the group - #{e.message}"
end
- rescue Exception => e
- response[:errors] = "Problem deleting the group - #{e.message}"
+ render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
end
- render json: response, status: (response[:errors] == '' ? :ok : :internal_server_error)
- end
- private
+ private
- def unescape_id
- params[:id] = CGI.unescape(params[:id])
- end
+ def unescape_id
+ params[:id] = CGI.unescape(params[:id])
+ end
- def group_params
- params.require(:group).permit(:acronym, :name, :description, {ontologies:[]}).to_h()
- end
+ def group_params
+ params.require(:group).permit(:acronym, :name, :description, { ontologies: [] }).to_h
+ end
- def _groups
- response = { groups: Hash.new, errors: '', success: '' }
- start = Time.now
- begin
- response[:groups] = JSON.parse(LinkedData::Client::HTTP.get(GROUPS_URL, { include: 'all' }, raw: true))
+ def _groups
+ response = { groups: {}, errors: '', success: '' }
+ start = Time.now
+ begin
+ response[:groups] = JSON.parse(LinkedData::Client::HTTP.get(GROUPS_URL, { include: 'all' }, raw: true))
- response[:success] = "groups successfully retrieved in #{Time.now - start}s"
- LOG.add :debug, "Groups - retrieved #{response[:groups].length} groups in #{Time.now - start}s"
- rescue Exception => e
- response[:errors] = "Problem retrieving groups - #{e.message}"
+ response[:success] = "groups successfully retrieved in #{Time.now - start}s"
+ LOG.add :debug, "Groups - retrieved #{response[:groups].length} groups in #{Time.now - start}s"
+ rescue Exception => e
+ response[:errors] = "Problem retrieving groups - #{e.message}"
+ end
+ response
end
- response
end
end
diff --git a/app/controllers/admin/licenses_controller.rb b/app/controllers/admin/licenses_controller.rb
index 75cfbbdfa7..5f2b81a89a 100644
--- a/app/controllers/admin/licenses_controller.rb
+++ b/app/controllers/admin/licenses_controller.rb
@@ -1,30 +1,32 @@
-class Admin::LicensesController < ApplicationController
+# frozen_string_literal: true
- def index
- @licenses = License.current_license
- respond_to :js
- end
+module Admin
+ class LicensesController < ApplicationController
+ def index
+ @licenses = License.current_license
+ respond_to :js
+ end
- def new
- @license = License.new
- end
+ def new
+ @license = License.new
+ end
- def create
- @license = License.new(license_params)
+ def create
+ @license = License.new(license_params)
- respond_to do |format|
- if @license.save
- format.js { flash.now[:notice] = t(".success") }
- else
- format.js { render :new }
+ respond_to do |format|
+ if @license.save
+ format.js { flash.now[:notice] = t('.success') }
+ else
+ format.js { render :new }
+ end
end
end
- end
- private
+ private
- def license_params
- params.require(:license).permit(:encrypted_key)
+ def license_params
+ params.require(:license).permit(:encrypted_key)
+ end
end
-
end
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 90af90d254..68b4a8f3b0 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -1,175 +1,168 @@
+# frozen_string_literal: true
+
class AdminController < ApplicationController
include TurboHelper
layout :determine_layout
before_action :cache_setup
- DEBUG_BLACKLIST = [:"$,", :$ADDITIONAL_ONTOLOGY_DETAILS, :$rdebug_state,
- :$PROGRAM_NAME, :$LOADED_FEATURES, :$KCODE, :$-i, :$rails_rake_task, :$$, :$gems_build_rake_task,
- :$daemons_stop_proc, :$VERBOSE, :$DAEMONS_ARGV, :$daemons_sigterm,
- :$DEBUG_BEFORE, :$stdout, :$-0, :$-l, :$-I, :$DEBUG, :$',
- :$gems_rake_task, :$_, :$CODERAY_DEBUG, :$-F, :$", :$0, :$=, :$FILENAME, :$?,
- :$!, :$rdebug_in_irb, :$-K, :$TESTING, :$fileutils_rb_have_lchmod,
- :$EMAIL_EXCEPTIONS, :$binding, :$-v, :$>, :$SAFE, :$/,
- :$fileutils_rb_have_lchown, :$-p, :$-W, :$:, :$__dbg_interface,
- :$stderr, :$\, :$&, :$<, :$debug, :$;, :$~, :$-a,
- :$DEBUG_RDOC, :$CGI_ENV, :$LOAD_PATH, :$-d, :$*, :$., :$-w, :$+,
- :$@, :$`, :$stdin, :$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9]
+ DEBUG_BLACKLIST = [:$,, :$ADDITIONAL_ONTOLOGY_DETAILS, :$rdebug_state, :$PROGRAM_NAME, :$LOADED_FEATURES, :$KCODE,
+ :$-i, :$rails_rake_task, :$$, :$gems_build_rake_task, :$daemons_stop_proc, :$VERBOSE, :$DAEMONS_ARGV, :$daemons_sigterm, :$DEBUG_BEFORE, :$stdout, :$-0, :$-l, :$-I, :$DEBUG, :$', :$gems_rake_task, :$_, :$CODERAY_DEBUG, :$-F, :$", :$0, :$=, :$FILENAME, :$?, :$!, :$rdebug_in_irb, :$-K, :$TESTING, :$fileutils_rb_have_lchmod, :$EMAIL_EXCEPTIONS, :$binding, :$-v, :$>, :$SAFE, :$/, :$fileutils_rb_have_lchown, :$-p, :$-W, :$:, :$__dbg_interface, :$stderr, :'$ $&', :$<, :$debug, :$;, :$~, :$-a, :$DEBUG_RDOC, :$CGI_ENV, :$LOAD_PATH, :$-d, :$*, :$., :$-w, :$+, :$@, :$`, :$stdin, :$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9].freeze
ADMIN_URL = "#{LinkedData::Client.settings.rest_url}/admin/"
ONTOLOGIES_URL = "#{ADMIN_URL}ontologies_report"
USERS_URL = "#{LinkedData::Client.settings.rest_url}/users"
- ONTOLOGY_URL = lambda { |acronym| "#{ADMIN_URL}ontologies/#{acronym}" }
- PARSE_LOG_URL = lambda { |acronym| "#{ONTOLOGY_URL.call(acronym)}/log" }
- REPORT_NEVER_GENERATED = "NEVER GENERATED"
+ ONTOLOGY_URL = ->(acronym) { "#{ADMIN_URL}ontologies/#{acronym}" }
+ PARSE_LOG_URL = ->(acronym) { "#{ONTOLOGY_URL.call(acronym)}/log" }
+ REPORT_NEVER_GENERATED = 'NEVER GENERATED'
def index
@users = LinkedData::Client::Models::User.all
if session[:user].nil? || !session[:user].admin?
- redirect_to :controller => 'login', :action => 'index', :redirect => '/admin'
+ redirect_to controller: 'login', action: 'index', redirect: '/admin'
else
- render action: "index"
+ render action: 'index'
end
end
def update_info
- response = {update_info: Hash.new, errors: '', success: '', notices: ''}
+ response = { update_info: {}, errors: '', success: '', notices: '' }
json = LinkedData::Client::HTTP.get("#{ADMIN_URL}update_info", params, raw: true)
begin
update_info = JSON.parse(json)
- if update_info["error"]
- response[:errors] = update_info["error"]
+ if update_info['error']
+ response[:errors] = update_info['error']
else
response[:update_info] = update_info
- response[:notices] = update_info["notes"] if update_info["notes"]
- response[:success] = "Update info successfully retrieved"
+ response[:notices] = update_info['notes'] if update_info['notes']
+ response[:success] = 'Update info successfully retrieved'
end
rescue Exception => e
response[:errors] = "Problem retrieving update info - #{e.message}"
end
- render :json => response
+ render json: response
end
def update_check_enabled
enabled = LinkedData::Client::HTTP.get("#{ADMIN_URL}update_check_enabled", {}, raw: false)
- render :json => enabled
+ render json: enabled
end
def submissions
@submissions = nil
- @acronym = params["acronym"]
- @ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params["acronym"]).first
+ @acronym = params['acronym']
+ @ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params['acronym']).first
begin
submissions = @ontology.explore.submissions
- @submissions = submissions.sort {|a,b| b.submissionId <=> a.submissionId }
- rescue
+ @submissions = submissions.sort { |a, b| b.submissionId <=> a.submissionId }
+ rescue StandardError
@submissions = []
end
- render :partial => "layouts/ontology_report_submissions"
+ render partial: 'layouts/ontology_report_submissions'
end
def parse_log
- @acronym = params["acronym"]
- @parse_log = LinkedData::Client::HTTP.get(PARSE_LOG_URL.call(params["acronym"]), {}, raw: false)
+ @acronym = params['acronym']
+ @parse_log = LinkedData::Client::HTTP.get(PARSE_LOG_URL.call(params['acronym']), {}, raw: false)
ontologies_report = _ontologies_report
- ontology = ontologies_report[:ontologies][params["acronym"].to_sym]
+ ontology = ontologies_report[:ontologies][params['acronym'].to_sym]
@log_file_path = ''
if ontology
full_log_file_path = ontology[:logFilePath]
- @log_file_path = /#{params["acronym"]}\/\d+\/[-a-zA-Z0-9_]+\.log$/.match(full_log_file_path)
+ @log_file_path = %r{#{params['acronym']}/\d+/[-a-zA-Z0-9_]+\.log$}.match(full_log_file_path)
else
- @parse_log = "No record exists for ontology #{params["acronym"]}"
- @log_file_path = "None"
+ @parse_log = "No record exists for ontology #{params['acronym']}"
+ @log_file_path = 'None'
end
- render action: "parse_log"
+ render action: 'parse_log'
end
def clearcache
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
if @cache.respond_to?(:flush_all)
begin
@cache.flush_all
- response[:success] = "UI cache successfully flushed"
+ response[:success] = 'UI cache successfully flushed'
rescue Exception => e
response[:errors] = "Problem flushing the UI cache - #{e.class}: #{e.message}"
end
else
response[:errors] = "The UI cache does not respond to the 'flush_all' command"
end
- render :json => response
+ render json: response
end
def resetcache
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
if @cache.respond_to?(:reset)
begin
@cache.reset
- response[:success] = "UI cache connection successfully reset"
+ response[:success] = 'UI cache connection successfully reset'
rescue Exception => e
response[:errors] = "Problem resetting the UI cache connection - #{e.message}"
end
else
response[:errors] = "The UI cache does not respond to the 'reset' command"
end
- render :json => response
+ render json: response
end
def clear_goo_cache
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
begin
- response_raw = LinkedData::Client::HTTP.post("#{ADMIN_URL}clear_goo_cache", params, raw: true)
- response[:success] = "Goo cache successfully flushed"
+ LinkedData::Client::HTTP.post("#{ADMIN_URL}clear_goo_cache", params, raw: true)
+ response[:success] = 'Goo cache successfully flushed'
rescue Exception => e
response[:errors] = "Problem flushing the Goo cache - #{e.class}: #{e.message}"
end
- render :json => response
+ render json: response
end
def clear_http_cache
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
begin
- response_raw = LinkedData::Client::HTTP.post("#{ADMIN_URL}clear_http_cache", params, raw: true)
- response[:success] = "HTTP cache successfully flushed"
+ LinkedData::Client::HTTP.post("#{ADMIN_URL}clear_http_cache", params, raw: true)
+ response[:success] = 'HTTP cache successfully flushed'
rescue Exception => e
response[:errors] = "Problem flushing the HTTP cache - #{e.class}: #{e.message}"
end
- render :json => response
+ render json: response
end
def ontologies_report
response = _ontologies_report
- render :json => response
+ render json: response
end
def refresh_ontologies_report
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
begin
response_raw = LinkedData::Client::HTTP.post(ONTOLOGIES_URL, params, raw: true)
- response_json = JSON.parse(response_raw, :symbolize_names => true)
+ response_json = JSON.parse(response_raw, symbolize_names: true)
if response_json[:errors]
_process_errors(response_json[:errors], response, true)
else
response = response_json
- if params["ontologies"].nil? || params["ontologies"].empty?
- response[:success] = "Refresh of ontologies report started successfully";
+ if params['ontologies'].nil? || params['ontologies'].empty?
+ response[:success] = 'Refresh of ontologies report started successfully'
else
- ontologies = params["ontologies"].split(",").map {|o| o.strip}
- response[:success] = "Refresh of report for ontologies: #{ontologies.join(", ")} started successfully";
+ ontologies = params['ontologies'].split(',').map(&:strip)
+ response[:success] = "Refresh of report for ontologies: #{ontologies.join(', ')} started successfully"
end
end
rescue Exception => e
response[:errors] = "Problem refreshing report - #{e.class}: #{e.message}"
# puts "#{e.class}: #{e.message}\n#{e.backtrace.join("\n\t")}"
end
- render :json => response
+ render json: response
end
def process_ontologies
@@ -182,9 +175,9 @@ def delete_ontologies
def delete_submission
response = { errors: '', success: '' }
- submission_id = params["id"]
+ submission_id = params['id']
begin
- ont = params["acronym"]
+ ont = params['acronym']
ontology = LinkedData::Client::Models::Ontology.find_by_acronym(ont).first
if ontology
@@ -196,57 +189,56 @@ def delete_submission
errors = response_errors(error_response)
_process_errors(errors, response, true)
else
- response[:success] << "Submission #{params["id"]} for ontology #{ont} was deleted successfully"
+ response[:success] << "Submission #{params['id']} for ontology #{ont} was deleted successfully"
end
else
- response[:errors] << "Submission #{params["id"]} for ontology #{ont} was not found in the system"
+ response[:errors] << "Submission #{params['id']} for ontology #{ont} was not found in the system"
end
else
response[:errors] << "Ontology #{ont} was not found in the system"
end
rescue Exception => e
- response[:errors] << "Problem deleting submission #{params["id"]} for ontology #{ont} - #{e.class}: #{e.message}"
+ response[:errors] << "Problem deleting submission #{params['id']} for ontology #{ont} - #{e.class}: #{e.message}"
end
if params[:turbo_stream]
if response[:errors].empty?
- render_turbo_stream( alert_success { response[:success] }, remove('submission_' + submission_id.to_s))
+ render_turbo_stream(alert_success { response[:success] }, remove("submission_#{submission_id}"))
else
- render_turbo_stream alert_error { response[:errors] }
+ render_turbo_stream(alert_error { response[:errors] })
end
else
- render :json => response
+ render json: response
end
-
end
def users
response = _users
- render :json => response
+ render json: response
end
-
private
def cache_setup
- @cache = Rails.cache.instance_variable_get("@data")
+ @cache = Rails.cache.instance_variable_get('@data')
end
def _ontologies_report
- response = {ontologies: Hash.new, report_date_generated: REPORT_NEVER_GENERATED, errors: '', success: ''}
+ response = { ontologies: {}, report_date_generated: REPORT_NEVER_GENERATED, errors: '', success: '' }
start = Time.now
begin
ontologies_data = LinkedData::Client::HTTP.get(ONTOLOGIES_URL, {}, raw: true)
- ontologies_data_parsed = JSON.parse(ontologies_data, :symbolize_names => true)
+ ontologies_data_parsed = JSON.parse(ontologies_data, symbolize_names: true)
if ontologies_data_parsed[:errors]
_process_errors(ontologies_data_parsed[:errors], response, true)
else
response.merge!(ontologies_data_parsed)
response[:success] = "Report successfully regenerated on #{ontologies_data_parsed[:report_date_generated]}"
- LOG.add :debug, "Ontologies Report - retrieved #{response[:ontologies].length} ontologies in #{Time.now - start}s"
+ LOG.add :debug,
+ "Ontologies Report - retrieved #{response[:ontologies].length} ontologies in #{Time.now - start}s"
end
rescue Exception => e
response[:errors] = "Problem retrieving ontologies report - #{e.message}"
@@ -254,25 +246,24 @@ def _ontologies_report
response
end
- def _process_errors(errors, response, remove_trailing_comma=true)
+ def _process_errors(errors, response, remove_trailing_comma = true)
if errors.is_a?(Hash)
errors.each do |_, v|
- if v.kind_of?(Array)
- response[:errors] << v.join(", ")
- response[:errors] << ", "
+ if v.is_a?(Array)
+ response[:errors] << v.join(', ')
+ response[:errors] << ', '
else
response[:errors] << "#{v}, "
end
end
- elsif errors.kind_of?(Array)
- errors.each {|err| response[:errors] << "#{err}, "}
+ elsif errors.is_a?(Array)
+ errors.each { |err| response[:errors] << "#{err}, " }
end
response[:errors] = response[:errors][0...-2] if remove_trailing_comma
end
- def _delete_ontology(ontology, params)
- error_response = ontology.delete
- error_response
+ def _delete_ontology(ontology, _params)
+ ontology.delete
end
def _process_ontology(ontology, params)
@@ -280,50 +271,47 @@ def _process_ontology(ontology, params)
end
def _process_ontologies(success_keyword, error_keyword, process_proc)
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
- if params["ontologies"].nil? || params["ontologies"].empty?
- response[:errors] = "No ontologies parameter passed. Syntax: ?ontologies=ONT1,ONT2,...,ONTN"
+ if params['ontologies'].nil? || params['ontologies'].empty?
+ response[:errors] = 'No ontologies parameter passed. Syntax: ?ontologies=ONT1,ONT2,...,ONTN'
else
- ontologies = params["ontologies"].split(",").map {|o| o.strip}
+ ontologies = params['ontologies'].split(',').map(&:strip)
ontologies.each do |ont|
- begin
- ontology = LinkedData::Client::Models::Ontology.find_by_acronym(ont).first
-
- if ontology
- error_response = self.send(process_proc, ontology, params)
- if response_error?(error_response)
- errors = response_errors(error_response) # see application_controller::response_errors
- _process_errors(errors, response, false)
- else
- response[:success] << "Ontology #{ont} #{success_keyword} successfully, "
- end
+ ontology = LinkedData::Client::Models::Ontology.find_by_acronym(ont).first
+
+ if ontology
+ error_response = send(process_proc, ontology, params)
+ if response_error?(error_response)
+ errors = response_errors(error_response) # see application_controller::response_errors
+ _process_errors(errors, response, false)
else
- response[:errors] << "Ontology #{ont} was not found in the system, "
+ response[:success] << "Ontology #{ont} #{success_keyword} successfully, "
end
- rescue Exception => e
- response[:errors] << "Problem #{error_keyword} ontology #{ont} - #{e.class}: #{e.message}, "
+ else
+ response[:errors] << "Ontology #{ont} was not found in the system, "
end
+ rescue Exception => e
+ response[:errors] << "Problem #{error_keyword} ontology #{ont} - #{e.class}: #{e.message}, "
end
response[:success] = response[:success][0...-2] unless response[:success].empty?
response[:errors] = response[:errors][0...-2] unless response[:errors].empty?
end
- render :json => response
+ render json: response
end
def _users
- response = {users: Hash.new , errors: '', success: ''}
+ response = { users: {}, errors: '', success: '' }
start = Time.now
begin
- response[:users] = JSON.parse(LinkedData::Client::HTTP.get(USERS_URL, {include: 'all'}, raw: true))
+ response[:users] = JSON.parse(LinkedData::Client::HTTP.get(USERS_URL, { include: 'all' }, raw: true))
response[:success] = "users successfully retrieved in #{Time.now - start}s"
- LOG.add :debug, "Users - retrieved #{response[:users].length} users in #{Time.now - start}s"
+ LOG.add :debug, "Users - retrieved #{response[:users].length} users in #{Time.now - start}s"
rescue Exception => e
response[:errors] = "Problem retrieving users - #{e.message}"
end
response
end
-
end
diff --git a/app/controllers/agents_controller.rb b/app/controllers/agents_controller.rb
index 9029a989fd..f0dd4811e7 100644
--- a/app/controllers/agents_controller.rb
+++ b/app/controllers/agents_controller.rb
@@ -1,6 +1,9 @@
+# frozen_string_literal: true
+
class AgentsController < ApplicationController
- include TurboHelper, AgentHelper
- before_action :authorize_and_redirect, :only => [:edit, :update, :create, :new]
+ include AgentHelper
+ include TurboHelper
+ before_action :authorize_and_redirect, only: %i[edit update create new]
def index
@agents = LinkedData::Client::Models::Agent.all
@@ -56,7 +59,10 @@ def create
streams << prepend('agents_table_content', partial: 'agents/show_line', locals: { agent: new_agent })
- streams << replace_agent_form(new_agent, frame_id: params[:id], parent_id: parent_id, name_prefix: name_prefix) if params[:parent_id]
+ if params[:parent_id]
+ streams << replace_agent_form(new_agent, frame_id: params[:id], parent_id: parent_id,
+ name_prefix: name_prefix)
+ end
render_turbo_stream(*streams)
end
@@ -80,8 +86,7 @@ def update
table_line_id = agent_table_line_id(agent_id(agent))
streams = [alert_success(id: alert_id) { success_message },
- replace(table_line_id, partial: 'agents/show_line', locals: { agent: agent })
- ]
+ replace(table_line_id, partial: 'agents/show_line', locals: { agent: agent })]
streams << replace_agent_form(agent, parent_id: parent_id) if params[:parent_id]
@@ -120,17 +125,15 @@ def destroy
end
format.html { render json: { success: success_text, error: error } }
end
-
end
private
- def replace_agent_form(agent, frame_id: nil, parent_id:, partial: 'agents/agent_show', name_prefix: '')
-
+ def replace_agent_form(agent, parent_id:, frame_id: nil, partial: 'agents/agent_show', name_prefix: '')
frame_id = frame_id ? agent_id_frame_id(frame_id, parent_id) : agent_frame_id(agent, parent_id)
replace(frame_id, partial: partial,
- locals: { agent: agent, name_prefix: name_prefix, parent_id: parent_id, edit_on_modal: false })
+ locals: { agent: agent, name_prefix: name_prefix, parent_id: parent_id, edit_on_modal: false })
end
def save_agent(params)
@@ -142,7 +145,10 @@ def save_agent(params)
def update_agent(id = params[:id], params)
agent = LinkedData::Client::Models::Agent.find("#{REST_URI}/Agents/#{id}")
- params[:creator] = session[:user].id if (agent.creator.nil? || agent.creator.empty?) && (params[:creator] || '').empty?
+ if (agent.creator.nil? || agent.creator.empty?) && (params[:creator] || '').empty?
+ params[:creator] =
+ session[:user].id
+ end
res = agent.update(values: params)
[res, agent.update_from_params(params)]
@@ -150,9 +156,8 @@ def update_agent(id = params[:id], params)
def agent_params
p = params.permit(:agentType, :name, :email, :acronym, :homepage, :creator,
- { identifiers: [:notation, :schemaAgency, :creator] },
- { affiliations: [:id, :agentType, :name, :homepage, :acronym, :creator, { identifiers: [:notation, :schemaAgency, :creator] }] }
- )
+ { identifiers: %i[notation schemaAgency creator] },
+ { affiliations: [:id, :agentType, :name, :homepage, :acronym, :creator, { identifiers: %i[notation schemaAgency creator] }] })
p = p.to_h
p.transform_values do |v|
if v.is_a? Hash
@@ -166,7 +171,10 @@ def agent_params
p[:identifiers] = (p[:identifiers] || {}).values
p[:affiliations] = (p[:affiliations] || {}).values
p[:affiliations].each do |affiliation|
- affiliation[:identifiers] = affiliation[:identifiers].values if affiliation.is_a?(Hash) && affiliation[:identifiers]
+ if affiliation.is_a?(Hash) && affiliation[:identifiers]
+ affiliation[:identifiers] =
+ affiliation[:identifiers].values
+ end
end
p
end
diff --git a/app/controllers/ajax_proxy_controller.rb b/app/controllers/ajax_proxy_controller.rb
index d1feda69af..403523a86d 100644
--- a/app/controllers/ajax_proxy_controller.rb
+++ b/app/controllers/ajax_proxy_controller.rb
@@ -1,17 +1,15 @@
+# frozen_string_literal: true
+
require 'open-uri'
require 'net/http'
require 'uri'
require 'cgi'
class AjaxProxyController < ApplicationController
-
-
def get
-
page = open(params[:url])
- content = page.read
- render :text => content
-
+ content = page.read
+ render text: content
end
def jsonp
@@ -27,23 +25,24 @@ def jsonp
url = URI.parse($LEGACY_REST_URL + params[:path])
url.port = $REST_PORT.to_i
- full_path = (url.query.blank?) ? url.path : "#{url.path}?#{url.query}"
- full_path = full_path.include?("?") ? full_path + "&apikey=#{params[:apikey]}&userapikey=#{params[:userapikey]}" : full_path + "?apikey=#{params[:apikey]}&userapikey=#{params[:userapikey]}"
+ full_path = url.query.blank? ? url.path : "#{url.path}?#{url.query}"
+ full_path = full_path.include?('?') ? full_path + "&apikey=#{params[:apikey]}&userapikey=#{params[:userapikey]}" : full_path + "?apikey=#{params[:apikey]}&userapikey=#{params[:userapikey]}"
http = Net::HTTP.new(url.host, url.port)
- headers = { "Accept" => "application/json" }
+ headers = { 'Accept' => 'application/json' }
res = http.get(full_path, headers)
- response = res.code.to_i >= 400 ? { :status => res.code.to_i, :body => res.body }.to_json : res.body
- render_json response, {:status => 200}
+ response = res.code.to_i >= 400 ? { status: res.code.to_i, body: res.body }.to_json : res.body
+ render_json response, { status: 200 }
end
def json_class
concept_not_found if params[:conceptid].nil? || params[:conceptid].empty?
params[:ontology] ||= params[:ontologyid]
- if params[:ontologyid].to_i > 0
- params_cleanup_new_api()
- stop_words = ["controller", "action", "ontologyid"]
- redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}", :status => :moved_permanently
+ if params[:ontologyid].to_i.positive?
+ params_cleanup_new_api
+ stop_words = %w[controller action ontologyid]
+ redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}",
+ status: :moved_permanently
return
end
@@ -56,7 +55,6 @@ def json_class
render_json @concept.to_json
end
-
def json_ontology
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
ontology_not_found(params[:ontology]) if @ontology.nil?
@@ -65,25 +63,24 @@ def json_ontology
end
def loading_spinner
- render :partial => "loading_spinner"
+ render partial: 'loading_spinner'
end
private
- def render_json(json, options={})
- callback, variable = params[:callback], params[:variable]
- response = begin
- if callback && variable
- "var #{variable} = #{json};\n#{callback}(#{variable});"
- elsif variable
- "var #{variable} = #{json};"
- elsif callback
- "#{callback}(#{json});"
- else
- json
- end
- end
- render({plain: response, content_type: "application/json"}.merge(options))
+ def render_json(json, options = {})
+ callback = params[:callback]
+ variable = params[:variable]
+ response = if callback && variable
+ "var #{variable} = #{json};\n#{callback}(#{variable});"
+ elsif variable
+ "var #{variable} = #{json};"
+ elsif callback
+ "#{callback}(#{json});"
+ else
+ json
+ end
+
+ render({ plain: response, content_type: 'application/json' }.merge(options))
end
-
end
diff --git a/app/controllers/analytics_controller.rb b/app/controllers/analytics_controller.rb
index ccb9af6ca8..f2faf3616d 100644
--- a/app/controllers/analytics_controller.rb
+++ b/app/controllers/analytics_controller.rb
@@ -1,7 +1,8 @@
+# frozen_string_literal: true
+
require 'csv'
class AnalyticsController < ApplicationController
-
def track
entry = Analytics.new
entry.segment = params[:segment]
@@ -15,52 +16,53 @@ def track
end
def search_result_clicked
- clicks = Analytics.where(:segment => "search", :action => "result_clicked").all
- rows = [["query", "position_clicked", "ontology_clicked", "higher_rated_ontologies", "additional_result", "exact_match", "concept_id", "time", "user", "bp_slice", "ip_address"]]
+ clicks = Analytics.where(segment: 'search', action: 'result_clicked').all
+ rows = [%w[query position_clicked ontology_clicked higher_rated_ontologies additional_result
+ exact_match concept_id time user bp_slice ip_address]]
clicks.each do |click|
next if click.params.empty?
+
rows << [
- click.params["query"].delete("\t"),
- click.params["position"],
- click.params["ontology_clicked"],
- click.params["higher_ontologies"].nil? ? "" : click.params["higher_ontologies"].join(";"),
- click.params["additional_result"],
- click.params["exact_match"],
- click.params["concept_id"],
+ click.params['query'].delete("\t"),
+ click.params['position'],
+ click.params['ontology_clicked'],
+ click.params['higher_ontologies'].nil? ? '' : click.params['higher_ontologies'].join(';'),
+ click.params['additional_result'],
+ click.params['exact_match'],
+ click.params['concept_id'],
click.created_at,
click.user,
click.bp_slice,
click.ip
]
end
- respond_with_csv_file(rows, "search_result_clicked")
+ respond_with_csv_file(rows, 'search_result_clicked')
end
def user_intention_surveys
- surveys = Analytics.where(:segment => "users", :action => "intention_survey").all
- rows = [["page", "response", "email", "time", "user", "bp_slice", "ip_address"]]
+ surveys = Analytics.where(segment: 'users', action: 'intention_survey').all
+ rows = [%w[page response email time user bp_slice ip_address]]
surveys.each do |survey|
rows << [
- survey.params["page"],
- survey.params["intention_response"],
- survey.params["contest_email"],
+ survey.params['page'],
+ survey.params['intention_response'],
+ survey.params['contest_email'],
survey.created_at,
survey.user,
survey.bp_slice,
survey.ip
]
end
- respond_with_csv_file(rows, "user_intention_survey")
+ respond_with_csv_file(rows, 'user_intention_survey')
end
private
- def respond_with_csv_file(rows, filename = "output")
+ def respond_with_csv_file(rows, filename = 'output')
output = ''
rows.each do |row|
output << row.to_csv.force_encoding('UTF-8')
end
- send_data output, :type => 'text/csv', :disposition => "attachment; filename=#{filename}.csv"
+ send_data output, type: 'text/csv', disposition: "attachment; filename=#{filename}.csv"
end
-
end
diff --git a/app/controllers/annotator_controller.rb b/app/controllers/annotator_controller.rb
index ae05a3a317..d6de7aef0c 100644
--- a/app/controllers/annotator_controller.rb
+++ b/app/controllers/annotator_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'json'
require 'cgi'
@@ -5,7 +7,7 @@ class AnnotatorController < ApplicationController
layout :determine_layout
# REST_URI is defined in application_controller.rb
- #ANNOTATOR_URI = REST_URI + "/annotator"
+ # ANNOTATOR_URI = REST_URI + "/annotator"
ANNOTATOR_URI = $ANNOTATOR_URL
def index
@@ -13,97 +15,102 @@ def index
@semantic_groups_for_select = []
@semantic_types ||= get_semantic_types
@sem_type_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
- @semantic_groups ||= {"ACTI" => "Activities & Behaviors", "ANAT" => "Anatomy", "CHEM" => "Chemicals & Drugs","CONC" => "Concepts & Ideas","DEVI" => "Devices", "DISO" => "Disorders", "GENE" => "Genes & Molecular Sequences", "GEOG" => "Geographic Areas", "LIVB" => "Living Beings","OBJC" => "Objects", "OCCU" => "Occupations", "ORGA" => "Organizations", "PHEN" => "Phenomena", "PHYS" => "Physiology","PROC" => "Procedures"}
+ @semantic_groups ||= { 'ACTI' => 'Activities & Behaviors', 'ANAT' => 'Anatomy', 'CHEM' => 'Chemicals & Drugs',
+ 'CONC' => 'Concepts & Ideas', 'DEVI' => 'Devices', 'DISO' => 'Disorders', 'GENE' => 'Genes & Molecular Sequences', 'GEOG' => 'Geographic Areas', 'LIVB' => 'Living Beings', 'OBJC' => 'Objects', 'OCCU' => 'Occupations', 'ORGA' => 'Organizations', 'PHEN' => 'Phenomena', 'PHYS' => 'Physiology', 'PROC' => 'Procedures' }
@semantic_types.each_pair do |code, label|
@semantic_types_for_select << ["#{label} (#{code})", code]
end
@semantic_groups.each_pair do |group, label|
- @semantic_groups_for_select << ["#{label} (#{group})", group]
- end
- @semantic_types_for_select.sort! {|a,b| a[0] <=> b[0]}
- @semantic_groups_for_select.sort! {|a,b| a[0] <=> b[0]}
- if !$MULTIPLE_RECOGNIZERS.nil? && $MULTIPLE_RECOGNIZERS == true
- # Get recognizers from ontologies_api only if asked
- @recognizers = parse_json(REST_URI + "/annotator/recognizers")
- else
- @recognizers = []
+ @semantic_groups_for_select << ["#{label} (#{group})", group]
end
+ @semantic_types_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @semantic_groups_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @recognizers = if !$MULTIPLE_RECOGNIZERS.nil? && $MULTIPLE_RECOGNIZERS == true
+ # Get recognizers from ontologies_api only if asked
+ parse_json("#{REST_URI}/annotator/recognizers")
+ else
+ []
+ end
@annotator_ontologies = LinkedData::Client::Models::Ontology.all
@text = params[:text]
end
-
def create
params[:mappings] ||= []
params[:max_level] ||= 0
params[:ontologies] ||= []
params[:semantic_types] ||= []
params[:semantic_groups] ||= []
- text_to_annotate = params[:text].strip.gsub("\r\n", " ").gsub("\n", " ")
-
- options = { :ontologies => params[:ontologies],
- :class_hierarchy_max_level => params[:class_hierarchy_max_level].to_i,
- :expand_class_hierarchy => params[:class_hierarchy_max_level].to_i > 0,
- :semantic_types => params[:semantic_types],
- :semantic_groups => params[:semantic_groups],
- :expand_mappings => params[:expand_mappings],
- :longest_only => params[:longest_only],
- :exclude_numbers => params[:exclude_numbers] ||= "false", # service default is false
- :whole_word_only => params[:whole_word_only] ||= "true", # service default is true
- :exclude_synonyms => params[:exclude_synonyms] ||= "false", # service default is false
- :fast_context => params[:fast_context] ||= "false", # service default is false
- :score => params[:score],
- :score_threshold => params[:score_threshold] ||=-1,
- :confidence_threshold => params[:confidence_threshold] ||=-1,
- :lemmatize => params[:lemmatize] ||= "false",
- :ncbo_slice => params[:ncbo_slice] || ''
- }
+ text_to_annotate = params[:text].strip.gsub("\r\n", ' ').gsub("\n", ' ')
+
+ options = { ontologies: params[:ontologies],
+ class_hierarchy_max_level: params[:class_hierarchy_max_level].to_i,
+ expand_class_hierarchy: params[:class_hierarchy_max_level].to_i.positive?,
+ semantic_types: params[:semantic_types],
+ semantic_groups: params[:semantic_groups],
+ expand_mappings: params[:expand_mappings],
+ longest_only: params[:longest_only],
+ exclude_numbers: params[:exclude_numbers] ||= 'false', # service default is false
+ whole_word_only: params[:whole_word_only] ||= 'true', # service default is true
+ exclude_synonyms: params[:exclude_synonyms] ||= 'false', # service default is false
+ fast_context: params[:fast_context] ||= 'false', # service default is false
+ score: params[:score],
+ score_threshold: params[:score_threshold] ||= -1,
+ confidence_threshold: params[:confidence_threshold] ||= -1,
+ lemmatize: params[:lemmatize] ||= 'false',
+ ncbo_slice: params[:ncbo_slice] || '' }
start = Time.now
query = ANNOTATOR_URI
- query += "?text=" + CGI.escape(text_to_annotate)
- #query += "&apikey=" + annotator_apikey
- #query += "&include=prefLabel"
+ query += "?text=#{CGI.escape(text_to_annotate)}"
+ # query += "&apikey=" + annotator_apikey
+ # query += "&include=prefLabel"
# Include= prefLabel causes an internal error when retrieving mappings
- query += "&expand_class_hierarchy=true" if options[:class_hierarchy_max_level] > 0
- query += "&class_hierarchy_max_level=" + options[:class_hierarchy_max_level].to_s if options[:class_hierarchy_max_level] > 0
- query += "&score=" + options[:score] unless options[:score] == ""
- query += "&score_threshold=" + options[:score_threshold] unless options[:score] == "" or options[:score_threshold]==-1
- query += "&confidence_threshold=" + options[:confidence_threshold] unless options[:score] == "" or options[:confidence_threshold]==-1
- query += "&fast_context=" + options[:fast_context] unless options[:fast_context].empty?
- query += "&ontologies=" + CGI.escape(options[:ontologies].join(',')) unless options[:ontologies].empty?
- query += "&semantic_types=" + options[:semantic_types].join(',') unless options[:semantic_types].empty?
- query += "&semantic_groups=" + options[:semantic_groups].join(',') unless options[:semantic_groups].empty?
- query += "&expand_mappings=" + options[:expand_mappings].to_s unless options[:expand_mappings].empty?
+ query += '&expand_class_hierarchy=true' if (options[:class_hierarchy_max_level]).positive?
+ if (options[:class_hierarchy_max_level]).positive?
+ query += "&class_hierarchy_max_level=#{options[:class_hierarchy_max_level]}"
+ end
+ query += "&score=#{options[:score]}" unless options[:score] == ''
+ unless (options[:score] == '') || (options[:score_threshold] == -1)
+ query += "&score_threshold=#{options[:score_threshold]}"
+ end
+ unless (options[:score] == '') || (options[:confidence_threshold] == -1)
+ query += "&confidence_threshold=#{options[:confidence_threshold]}"
+ end
+ query += "&fast_context=#{options[:fast_context]}" unless options[:fast_context].empty?
+ query += "&ontologies=#{CGI.escape(options[:ontologies].join(','))}" unless options[:ontologies].empty?
+ query += "&semantic_types=#{options[:semantic_types].join(',')}" unless options[:semantic_types].empty?
+ query += "&semantic_groups=#{options[:semantic_groups].join(',')}" unless options[:semantic_groups].empty?
+ query += "&expand_mappings=#{options[:expand_mappings]}" unless options[:expand_mappings].empty?
query += "&longest_only=#{options[:longest_only]}"
query += "&recognizer=#{params[:recognizer]}"
- query += "&exclude_numbers=" + options[:exclude_numbers].to_s unless options[:exclude_numbers].empty?
- query += "&lemmatize=" + options[:lemmatize].to_s unless options[:lemmatize].empty?
- query += "&whole_word_only=" + options[:whole_word_only].to_s unless options[:whole_word_only].empty?
- query += "&exclude_synonyms=" + options[:exclude_synonyms].to_s unless options[:exclude_synonyms].empty?
- query += "&ncbo_slice=" + options[:ncbo_slice].to_s unless options[:ncbo_slice].empty?
-
+ query += "&exclude_numbers=#{options[:exclude_numbers]}" unless options[:exclude_numbers].empty?
+ query += "&lemmatize=#{options[:lemmatize]}" unless options[:lemmatize].empty?
+ query += "&whole_word_only=#{options[:whole_word_only]}" unless options[:whole_word_only].empty?
+ query += "&exclude_synonyms=#{options[:exclude_synonyms]}" unless options[:exclude_synonyms].empty?
+ query += "&ncbo_slice=#{options[:ncbo_slice]}" unless options[:ncbo_slice].empty?
+
annotations = parse_json(query) # See application_controller.rb
- #annotations = LinkedData::Client::HTTP.get(query)
+ # annotations = LinkedData::Client::HTTP.get(query)
LOG.add :debug, "Query: #{query}"
LOG.add :debug, "Retrieved #{annotations.length} annotations: #{Time.now - start}s"
- if annotations.empty? || params[:raw] == "true"
+ if annotations.empty? || params[:raw] == 'true'
# TODO: if params contains select ontologies and/or semantic types, only return those selected.
response = {
- annotations: annotations,
- ontologies: get_simplified_ontologies_hash, # application_controller
- semantic_types: get_semantic_types # application_controller
+ annotations: annotations,
+ ontologies: get_simplified_ontologies_hash, # application_controller
+ semantic_types: get_semantic_types # application_controller
}
else
massage_annotated_classes(annotations, options)
response = {
- annotations: annotations,
- ontologies: {}, # ontology data are in annotations already.
- semantic_types: {} # semantic types are in annotations already.
+ annotations: annotations,
+ ontologies: {}, # ontology data are in annotations already.
+ semantic_types: {} # semantic types are in annotations already.
}
end
- render :json => response
+ render json: response
end
private
@@ -112,16 +119,16 @@ def get_semantic_types
semantic_types = {}
sty_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
return semantic_types if sty_ont.nil?
+
# The first 500 items should be more than sufficient to get all semantic types.
- sty_classes = sty_ont.explore.classes({'pagesize'=>500, include: 'prefLabel'})
+ sty_classes = sty_ont.explore.classes({ 'pagesize' => 500, include: 'prefLabel' })
sty_classes.collection.each do |cls|
- code = cls.id.split("/").last
- semantic_types[ code ] = cls.prefLabel
+ code = cls.id.split('/').last
+ semantic_types[code] = cls.prefLabel
end
semantic_types
end
-
def massage_annotated_classes(annotations, options)
# Get the class details required for display, assume this is necessary
# for every element of the annotations array because the API returns a set.
@@ -131,13 +138,13 @@ def massage_annotated_classes(annotations, options)
class_details = get_annotated_classes(annotations, semantic_types)
simplify_annotated_classes(annotations, class_details)
# repeat the simplification for any annotation hierarchy or mappings.
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- simplify_annotated_classes(a['hierarchy'], class_details) if not a['hierarchy'].empty?
+ simplify_annotated_classes(a['hierarchy'], class_details) unless a['hierarchy'].empty?
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- simplify_annotated_classes(a['mappings'], class_details) if not a['mappings'].empty?
+ simplify_annotated_classes(a['mappings'], class_details) unless a['mappings'].empty?
end
LOG.add :debug, "Completed massage for annotated classes: #{Time.now - start}s"
end
@@ -160,57 +167,57 @@ def simplify_annotated_classes(annotations, class_details)
end
def get_annotated_class_hash(a)
- return {
- :class => a['annotatedClass']['@id'],
- :ontology => a['annotatedClass']['links']['ontology']
+ {
+ class: a['annotatedClass']['@id'],
+ ontology: a['annotatedClass']['links']['ontology']
}
end
- def get_annotated_classes(annotations, semantic_types=[])
+ def get_annotated_classes(annotations, semantic_types = [])
# Use batch service to get class prefLabels
class_list = []
- annotations.each {|a| class_list << get_annotated_class_hash(a) }
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ annotations.each { |a| class_list << get_annotated_class_hash(a) }
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- a['hierarchy'].each {|h| class_list << get_annotated_class_hash(h) }
+ a['hierarchy'].each { |h| class_list << get_annotated_class_hash(h) }
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- a['mappings'].each {|m| class_list << get_annotated_class_hash(m) }
+ a['mappings'].each { |m| class_list << get_annotated_class_hash(m) }
end
classes_simple = {}
return classes_simple if class_list.empty?
+
# remove duplicates
class_set = class_list.to_set # get unique class:ontology set
class_list = class_set.to_a # collection requires a list in batch call
# make the batch call
properties = 'prefLabel'
- properties = 'prefLabel,semanticType' if not semantic_types.empty?
- call_params = {'http://www.w3.org/2002/07/owl#Class'=>{'collection'=>class_list, 'include'=>properties}}
+ properties = 'prefLabel,semanticType' unless semantic_types.empty?
+ call_params = { 'http://www.w3.org/2002/07/owl#Class' => { 'collection' => class_list, 'include' => properties } }
classes_json = get_batch_results(call_params)
# Simplify the response data for the UI
@ontologies_hash ||= get_simplified_ontologies_hash # application_controller
classes_data = JSON.parse(classes_json)
- classes_data["http://www.w3.org/2002/07/owl#Class"].each do |cls|
+ classes_data['http://www.w3.org/2002/07/owl#Class'].each do |cls|
c = simplify_class_model(cls)
- ont_details = @ontologies_hash[ c[:ontology] ]
+ ont_details = @ontologies_hash[c[:ontology]]
next if ont_details.nil? # NO DISPLAY FOR ANNOTATIONS ON ANY CLASS OUTSIDE THE BIOPORTAL ONTOLOGY SET.
+
c[:ontology] = ont_details
- unless semantic_types.empty? || cls['semanticType'].nil?
- @semantic_types ||= get_semantic_types # application_controller
+ if semantic_types.empty? || cls['semanticType'].nil?
+ c[:semantic_types] = []
+ else
+ @semantic_types ||= get_semantic_types # application_controller
# Extract the semantic type descriptions that are requested.
semanticTypeURI = 'http://bioportal.bioontology.org/ontologies/umls/sty/'
- semanticCodes = cls['semanticType'].map {|t| t.sub( semanticTypeURI, '') }
- requestedCodes = semanticCodes.map {|code| (semantic_types.include? code and code) || nil }.compact
- requestedDescriptions = requestedCodes.map {|code| @semantic_types[code] }.compact
+ semanticCodes = cls['semanticType'].map { |t| t.sub(semanticTypeURI, '') }
+ requestedCodes = semanticCodes.map { |code| (semantic_types.include? code and code) || nil }.compact
+ requestedDescriptions = requestedCodes.map { |code| @semantic_types[code] }.compact
c[:semantic_types] = requestedDescriptions
- else
- c[:semantic_types] = []
end
classes_simple[c[:id]] = c
end
- return classes_simple
+ classes_simple
end
-
end
-
diff --git a/app/controllers/annotatorplus_controller.rb b/app/controllers/annotatorplus_controller.rb
index abf8f02fd4..9a1184aca9 100644
--- a/app/controllers/annotatorplus_controller.rb
+++ b/app/controllers/annotatorplus_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'json'
require 'cgi'
@@ -5,101 +7,105 @@ class AnnotatorplusController < ApplicationController
layout :determine_layout
# REST_URI is defined in application_controller.rb
- ANNOTATOR_URI = PROXY_URI + "/annotatorplus/"
+ ANNOTATOR_URI = "#{PROXY_URI}/annotatorplus/"
def index
@semantic_types_for_select = []
@semantic_types ||= get_semantic_types
@sem_type_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
- @semantic_groups ||= {"ACTI" => "Activities & Behaviors", "ANAT" => "Anatomy", "CHEM" => "Chemicals & Drugs","CONC" => "Concepts & Ideas",
- "DEVI" => "Devices", "DISO" => "Disorders", "GENE" => "Genes & Molecular Sequences", "GEOG" => "Geographic Areas", "LIVB" => "Living Beings",
- "OBJC" => "Objects", "OCCU" => "Occupations", "ORGA" => "Organizations", "PHEN" => "Phenomena", "PHYS" => "Physiology","PROC" => "Procedures"}
+ @semantic_groups ||= { 'ACTI' => 'Activities & Behaviors', 'ANAT' => 'Anatomy', 'CHEM' => 'Chemicals & Drugs', 'CONC' => 'Concepts & Ideas',
+ 'DEVI' => 'Devices', 'DISO' => 'Disorders', 'GENE' => 'Genes & Molecular Sequences', 'GEOG' => 'Geographic Areas', 'LIVB' => 'Living Beings',
+ 'OBJC' => 'Objects', 'OCCU' => 'Occupations', 'ORGA' => 'Organizations', 'PHEN' => 'Phenomena', 'PHYS' => 'Physiology', 'PROC' => 'Procedures' }
@semantic_groups_for_select = []
@semantic_types.each_pair do |code, label|
@semantic_types_for_select << ["#{label} (#{code})", code]
end
- @semantic_groups.each_pair do |group, label|
+ @semantic_groups.each_pair do |group, label|
@semantic_groups_for_select << ["#{label} (#{group})", group]
end
- @semantic_types_for_select.sort! {|a,b| a[0] <=> b[0]}
- @semantic_groups_for_select.sort! {|a,b| a[0] <=> b[0]}
- @recognizers = parse_json(REST_URI + "/annotator/recognizers")
+ @semantic_types_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @semantic_groups_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @recognizers = parse_json("#{REST_URI}/annotator/recognizers")
@annotator_ontologies = LinkedData::Client::Models::Ontology.all
@annotator_ontologies.sort_by! { |ont| ont.name.strip.downcase }
end
-
def create
params[:mappings] ||= []
params[:max_level] ||= 0
params[:ontologies] ||= []
params[:semantic_types] ||= []
params[:semantic_groups] ||= []
- text_to_annotate = params[:text].strip.gsub("\r\n", " ").gsub("\n", " ")
-
- options = { :ontologies => params[:ontologies],
- :class_hierarchy_max_level => params[:class_hierarchy_max_level].to_i,
- :expand_class_hierarchy => params[:class_hierarchy_max_level].to_i > 0,
- :semantic_types => params[:semantic_types],
- :semantic_groups => params[:semantic_groups],
- :mappings => params[:mappings],
- :longest_only => params[:longest_only],
- :exclude_numbers => params[:exclude_numbers] ||= "false", # service default is false
- :whole_word_only => (params[:whole_word_only] == "true") ? "false" : "true", # service default is true
- :exclude_synonyms => params[:exclude_synonyms] ||= "false", # service default is false
- :negation => params[:negation] ||= "false", # service default is false
- :experiencer => params[:experiencer] ||= "false", # service default is false
- :temporality => params[:temporality] ||= "false", # service default is false
- :score => params[:score],
- :score_threshold => params[:score_threshold] ||=-1,
- :confidence_threshold => params[:confidence_threshold] ||=-1,
- :ncbo_slice => params[:ncbo_slice] || ''
- }
+ text_to_annotate = params[:text].strip.gsub("\r\n", ' ').gsub("\n", ' ')
+
+ options = { ontologies: params[:ontologies],
+ class_hierarchy_max_level: params[:class_hierarchy_max_level].to_i,
+ expand_class_hierarchy: params[:class_hierarchy_max_level].to_i.positive?,
+ semantic_types: params[:semantic_types],
+ semantic_groups: params[:semantic_groups],
+ mappings: params[:mappings],
+ longest_only: params[:longest_only],
+ exclude_numbers: params[:exclude_numbers] ||= 'false', # service default is false
+ whole_word_only: params[:whole_word_only] == 'true' ? 'false' : 'true', # service default is true
+ exclude_synonyms: params[:exclude_synonyms] ||= 'false', # service default is false
+ negation: params[:negation] ||= 'false', # service default is false
+ experiencer: params[:experiencer] ||= 'false', # service default is false
+ temporality: params[:temporality] ||= 'false', # service default is false
+ score: params[:score],
+ score_threshold: params[:score_threshold] ||= -1,
+ confidence_threshold: params[:confidence_threshold] ||= -1,
+ ncbo_slice: params[:ncbo_slice] || '' }
start = Time.now
query = ANNOTATOR_URI
- query += "?text=" + CGI.escape(text_to_annotate)
- query += "&include=prefLabel"
- query += "&expand_class_hierarchy=true" if options[:class_hierarchy_max_level] > 0
- query += "&class_hierarchy_max_level=" + options[:class_hierarchy_max_level].to_s if options[:class_hierarchy_max_level] > 0
- query += "&score=" + options[:score] unless options[:score] == ""
- query += "&score_threshold=" + options[:score_threshold] unless options[:score] == "" or options[:score_threshold]==-1
- query += "&confidence_threshold=" + options[:confidence_threshold] unless options[:score] == "" or options[:confidence_threshold]==-1
- query += "&negation=" + options[:negation] unless options[:negation].empty?
- query += "&experiencer=" + options[:experiencer] unless options[:experiencer].empty?
- query += "&temporality=" + options[:temporality] unless options[:temporality].empty?
- query += "&ontologies=" + CGI.escape(options[:ontologies].join(',')) unless options[:ontologies].empty?
- query += "&semantic_types=" + options[:semantic_types].join(',') unless options[:semantic_types].empty?
- query += "&semantic_groups=" + options[:semantic_groups].join(',') unless options[:semantic_groups].empty?
- query += "&mappings=" + options[:mappings].join(',') unless options[:mappings].empty?
+ query += "?text=#{CGI.escape(text_to_annotate)}"
+ query += '&include=prefLabel'
+ query += '&expand_class_hierarchy=true' if (options[:class_hierarchy_max_level]).positive?
+ if (options[:class_hierarchy_max_level]).positive?
+ query += "&class_hierarchy_max_level=#{options[:class_hierarchy_max_level]}"
+ end
+ query += "&score=#{options[:score]}" unless options[:score] == ''
+ unless (options[:score] == '') || (options[:score_threshold] == -1)
+ query += "&score_threshold=#{options[:score_threshold]}"
+ end
+ unless (options[:score] == '') || (options[:confidence_threshold] == -1)
+ query += "&confidence_threshold=#{options[:confidence_threshold]}"
+ end
+ query += "&negation=#{options[:negation]}" unless options[:negation].empty?
+ query += "&experiencer=#{options[:experiencer]}" unless options[:experiencer].empty?
+ query += "&temporality=#{options[:temporality]}" unless options[:temporality].empty?
+ query += "&ontologies=#{CGI.escape(options[:ontologies].join(','))}" unless options[:ontologies].empty?
+ query += "&semantic_types=#{options[:semantic_types].join(',')}" unless options[:semantic_types].empty?
+ query += "&semantic_groups=#{options[:semantic_groups].join(',')}" unless options[:semantic_groups].empty?
+ query += "&mappings=#{options[:mappings].join(',')}" unless options[:mappings].empty?
query += "&longest_only=#{options[:longest_only]}"
query += "&recognizer=#{params[:recognizer]}"
- query += "&exclude_numbers=" + options[:exclude_numbers].to_s unless options[:exclude_numbers].empty?
- query += "&whole_word_only=" + options[:whole_word_only].to_s unless options[:whole_word_only].empty?
- query += "&exclude_synonyms=" + options[:exclude_synonyms].to_s unless options[:exclude_synonyms].empty?
- query += "&ncbo_slice=" + options[:ncbo_slice].to_s unless options[:ncbo_slice].empty?
+ query += "&exclude_numbers=#{options[:exclude_numbers]}" unless options[:exclude_numbers].empty?
+ query += "&whole_word_only=#{options[:whole_word_only]}" unless options[:whole_word_only].empty?
+ query += "&exclude_synonyms=#{options[:exclude_synonyms]}" unless options[:exclude_synonyms].empty?
+ query += "&ncbo_slice=#{options[:ncbo_slice]}" unless options[:ncbo_slice].empty?
annotations = parse_json(query) # See application_controller.rb
- #annotations = LinkedData::Client::HTTP.get(query)
+ # annotations = LinkedData::Client::HTTP.get(query)
LOG.add :debug, "Retrieved #{annotations.length} annotations: #{Time.now - start}s"
- if annotations.empty? || params[:raw] == "true"
+ if annotations.empty? || params[:raw] == 'true'
# TODO: if params contains select ontologies and/or semantic types, only return those selected.
response = {
- annotations: annotations,
- ontologies: get_simplified_ontologies_hash, # application_controller
- semantic_types: get_semantic_types # application_controller
+ annotations: annotations,
+ ontologies: get_simplified_ontologies_hash, # application_controller
+ semantic_types: get_semantic_types # application_controller
}
else
massage_annotated_classes(annotations, options)
response = {
- annotations: annotations,
- ontologies: {}, # ontology data are in annotations already.
- semantic_types: {} # semantic types are in annotations already.
+ annotations: annotations,
+ ontologies: {}, # ontology data are in annotations already.
+ semantic_types: {} # semantic types are in annotations already.
}
end
- render :json => response
+ render json: response
end
private
@@ -108,11 +114,12 @@ def get_semantic_types
semantic_types = {}
sty_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
return semantic_types if sty_ont.nil?
+
# The first 500 items should be more than sufficient to get all semantic types.
- sty_classes = sty_ont.explore.classes({'pagesize'=>500, include: 'prefLabel'})
+ sty_classes = sty_ont.explore.classes({ 'pagesize' => 500, include: 'prefLabel' })
sty_classes.collection.each do |cls|
- code = cls.id.split("/").last
- semantic_types[ code ] = cls.prefLabel
+ code = cls.id.split('/').last
+ semantic_types[code] = cls.prefLabel
end
semantic_types
end
@@ -126,13 +133,13 @@ def massage_annotated_classes(annotations, options)
class_details = get_annotated_classes(annotations, semantic_types)
simplify_annotated_classes(annotations, class_details)
# repeat the simplification for any annotation hierarchy or mappings.
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- simplify_annotated_classes(a['hierarchy'], class_details) if not a['hierarchy'].empty?
+ simplify_annotated_classes(a['hierarchy'], class_details) unless a['hierarchy'].empty?
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- simplify_annotated_classes(a['mappings'], class_details) if not a['mappings'].empty?
+ simplify_annotated_classes(a['mappings'], class_details) unless a['mappings'].empty?
end
LOG.add :debug, "Completed massage for annotated classes: #{Time.now - start}s"
end
@@ -155,56 +162,57 @@ def simplify_annotated_classes(annotations, class_details)
end
def get_annotated_class_hash(a)
- return {
- :class => a['annotatedClass']['@id'],
- :ontology => a['annotatedClass']['links']['ontology']
+ {
+ class: a['annotatedClass']['@id'],
+ ontology: a['annotatedClass']['links']['ontology']
}
end
- def get_annotated_classes(annotations, semantic_types=[])
+ def get_annotated_classes(annotations, semantic_types = [])
# Use batch service to get class prefLabels
class_list = []
- annotations.each {|a| class_list << get_annotated_class_hash(a) }
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ annotations.each { |a| class_list << get_annotated_class_hash(a) }
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- a['hierarchy'].each {|h| class_list << get_annotated_class_hash(h) }
+ a['hierarchy'].each { |h| class_list << get_annotated_class_hash(h) }
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- a['mappings'].each {|m| class_list << get_annotated_class_hash(m) }
+ a['mappings'].each { |m| class_list << get_annotated_class_hash(m) }
end
classes_simple = {}
return classes_simple if class_list.empty?
+
# remove duplicates
class_set = class_list.to_set # get unique class:ontology set
class_list = class_set.to_a # collection requires a list in batch call
# make the batch call
properties = 'prefLabel'
- properties = 'prefLabel,semanticType' if not semantic_types.empty?
- call_params = {'http://www.w3.org/2002/07/owl#Class'=>{'collection'=>class_list, 'include'=>properties}}
+ properties = 'prefLabel,semanticType' unless semantic_types.empty?
+ call_params = { 'http://www.w3.org/2002/07/owl#Class' => { 'collection' => class_list, 'include' => properties } }
classes_json = get_batch_results(call_params)
# Simplify the response data for the UI
@ontologies_hash ||= get_simplified_ontologies_hash # application_controller
classes_data = JSON.parse(classes_json)
- classes_data["http://www.w3.org/2002/07/owl#Class"].each do |cls|
+ classes_data['http://www.w3.org/2002/07/owl#Class'].each do |cls|
c = simplify_class_model(cls)
- ont_details = @ontologies_hash[ c[:ontology] ]
+ ont_details = @ontologies_hash[c[:ontology]]
next if ont_details.nil? # NO DISPLAY FOR ANNOTATIONS ON ANY CLASS OUTSIDE THE BIOPORTAL ONTOLOGY SET.
+
c[:ontology] = ont_details
- unless semantic_types.empty? || cls['semanticType'].nil?
- @semantic_types ||= get_semantic_types # application_controller
+ if semantic_types.empty? || cls['semanticType'].nil?
+ c[:semantic_types] = []
+ else
+ @semantic_types ||= get_semantic_types # application_controller
# Extract the semantic type descriptions that are requested.
semanticTypeURI = 'http://bioportal.bioontology.org/ontologies/umls/sty/'
- semanticCodes = cls['semanticType'].map {|t| t.sub( semanticTypeURI, '') }
- requestedCodes = semanticCodes.map {|code| (semantic_types.include? code and code) || nil }.compact
- requestedDescriptions = requestedCodes.map {|code| @semantic_types[code] }.compact
+ semanticCodes = cls['semanticType'].map { |t| t.sub(semanticTypeURI, '') }
+ requestedCodes = semanticCodes.map { |code| (semantic_types.include? code and code) || nil }.compact
+ requestedDescriptions = requestedCodes.map { |code| @semantic_types[code] }.compact
c[:semantic_types] = requestedDescriptions
- else
- c[:semantic_types] = []
end
classes_simple[c[:id]] = c
end
- return classes_simple
+ classes_simple
end
-
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1c3bc48a0b..22c6f4c9da 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'uri'
require 'open-uri'
require 'net/http'
@@ -13,18 +15,17 @@
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
-
before_action :set_locale
# Sets the locale based on the locale cookie or the value returned by detect_locale.
- def set_locale
+ def set_locale
I18n.locale = cookies[:locale] || detect_locale
cookies.permanent[:locale] = I18n.locale if cookies[:locale].nil?
logger.debug "* Locale set to '#{I18n.locale}'"
end
# Returns detedted locale based on the Accept-Language header of the request or the default locale if none is found.
- def detect_locale
+ def detect_locale
languages = request.headers['Accept-Language']&.split(',')
supported_languages = I18n.available_locales
@@ -32,10 +33,9 @@ def detect_locale
language_code = language.split(/[-;]/).first.downcase.to_sym
return language_code if supported_languages.include?(language_code)
end
-
- return I18n.default_locale
+
+ I18n.default_locale
end
-
helper :all # include all helpers, all the time
helper_method :bp_config_json, :current_license, :using_captcha?
@@ -44,7 +44,7 @@ def detect_locale
REST_URI = $REST_URL
API_KEY = $API_KEY
PROXY_URI = $PROXY_URL
- REST_URI_BATCH = REST_URI + '/batch'
+ REST_URI_BATCH = "#{REST_URI}/batch"
# Rails.cache expiration
EXPIRY_RI_STATS = 60 * 60 * 24 # 24:00 hours
@@ -53,42 +53,39 @@ def detect_locale
EXPIRY_RECENT_MAPPINGS = 60 * 60 # 1:00 hours
EXPIRY_ONTOLOGY_SIMPLIFIED = 60 * 1 # 0:01 minute
-
- $DATA_CATALOG_VALUES = {"fairsharing.org/" => "FAIRsharing",
- "aber-owl.net" => "AberOWL",
- "vest.agrisemantics.org" => "VEST Registry",
- "bioportal.bioontology.org" => "BioPortal",
- "ontobee.org" => "Ontobee",
- "obofoundry.org" => "The OBO Foundry",
- "ebi.ac.uk/ols" => "EBI Ontology Lookup"}
-
- RESOLVE_NAMESPACE = {:omv => "http://omv.ontoware.org/2005/05/ontology#", :skos => "http://www.w3.org/2004/02/skos/core#", :owl => "http://www.w3.org/2002/07/owl#",
- :rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#", :rdfs => "http://www.w3.org/2000/01/rdf-schema#", :metadata => "http://data.bioontology.org/metadata/",
- :metadata_def => "http://data.bioontology.org/metadata/def/", :dc => "http://purl.org/dc/elements/1.1/", :xsd => "http://www.w3.org/2001/XMLSchema#",
- :oboinowl_gen => "http://www.geneontology.org/formats/oboInOwl#", :obo_purl => "http://purl.obolibrary.org/obo/",
- :umls => "http://bioportal.bioontology.org/ontologies/umls/", :door => "http://kannel.open.ac.uk/ontology#", :dct => "http://purl.org/dc/terms/",
- :void => "http://rdfs.org/ns/void#", :foaf => "http://xmlns.com/foaf/0.1/", :vann => "http://purl.org/vocab/vann/", :adms => "http://www.w3.org/ns/adms#",
- :voaf => "http://purl.org/vocommons/voaf#", :dcat => "http://www.w3.org/ns/dcat#", :mod => "http://www.isibang.ac.in/ns/mod#", :prov => "http://www.w3.org/ns/prov#",
- :cc => "http://creativecommons.org/ns#", :schema => "http://schema.org/", :doap => "http://usefulinc.com/ns/doap#", :bibo => "http://purl.org/ontology/bibo/",
- :wdrs => "http://www.w3.org/2007/05/powder-s#", :cito => "http://purl.org/spar/cito/", :pav => "http://purl.org/pav/", :nkos => "http://w3id.org/nkos/nkostype#",
- :oboInOwl => "http://www.geneontology.org/formats/oboInOwl#", :idot => "http://identifiers.org/idot/", :sd => "http://www.w3.org/ns/sparql-service-description#",
- :cclicense => "http://creativecommons.org/licenses/"}
+ $DATA_CATALOG_VALUES = { 'fairsharing.org/' => 'FAIRsharing',
+ 'aber-owl.net' => 'AberOWL',
+ 'vest.agrisemantics.org' => 'VEST Registry',
+ 'bioportal.bioontology.org' => 'BioPortal',
+ 'ontobee.org' => 'Ontobee',
+ 'obofoundry.org' => 'The OBO Foundry',
+ 'ebi.ac.uk/ols' => 'EBI Ontology Lookup' }
+
+ RESOLVE_NAMESPACE = { omv: 'http://omv.ontoware.org/2005/05/ontology#', skos: 'http://www.w3.org/2004/02/skos/core#', owl: 'http://www.w3.org/2002/07/owl#',
+ rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs: 'http://www.w3.org/2000/01/rdf-schema#', metadata: 'http://data.bioontology.org/metadata/',
+ metadata_def: 'http://data.bioontology.org/metadata/def/', dc: 'http://purl.org/dc/elements/1.1/', xsd: 'http://www.w3.org/2001/XMLSchema#',
+ oboinowl_gen: 'http://www.geneontology.org/formats/oboInOwl#', obo_purl: 'http://purl.obolibrary.org/obo/',
+ umls: 'http://bioportal.bioontology.org/ontologies/umls/', door: 'http://kannel.open.ac.uk/ontology#', dct: 'http://purl.org/dc/terms/',
+ void: 'http://rdfs.org/ns/void#', foaf: 'http://xmlns.com/foaf/0.1/', vann: 'http://purl.org/vocab/vann/', adms: 'http://www.w3.org/ns/adms#',
+ voaf: 'http://purl.org/vocommons/voaf#', dcat: 'http://www.w3.org/ns/dcat#', mod: 'http://www.isibang.ac.in/ns/mod#', prov: 'http://www.w3.org/ns/prov#',
+ cc: 'http://creativecommons.org/ns#', schema: 'http://schema.org/', doap: 'http://usefulinc.com/ns/doap#', bibo: 'http://purl.org/ontology/bibo/',
+ wdrs: 'http://www.w3.org/2007/05/powder-s#', cito: 'http://purl.org/spar/cito/', pav: 'http://purl.org/pav/', nkos: 'http://w3id.org/nkos/nkostype#',
+ oboInOwl: 'http://www.geneontology.org/formats/oboInOwl#', idot: 'http://identifiers.org/idot/', sd: 'http://www.w3.org/ns/sparql-service-description#',
+ cclicense: 'http://creativecommons.org/licenses/' }.freeze
$trial_license_initialized = false
- if !$EMAIL_EXCEPTIONS.nil? && $EMAIL_EXCEPTIONS == true
- include ExceptionNotifiable
- end
+ include ExceptionNotifiable if !$EMAIL_EXCEPTIONS.nil? && $EMAIL_EXCEPTIONS == true
# See ActionController::RequestForgeryProtection for details
protect_from_forgery
- before_action :set_global_thread_values, :domain_ontology_set, :authorize_miniprofiler, :clean_empty_strings_from_params_arrays, :init_trial_license
-
+ before_action :set_global_thread_values, :domain_ontology_set, :authorize_miniprofiler,
+ :clean_empty_strings_from_params_arrays, :init_trial_license
def show_image_modal
url = params[:url]
- render turbo_stream: helpers.prepend('application_modal_content') { helpers.image_tag(url, style:'width: 100%') }
+ render turbo_stream: helpers.prepend('application_modal_content') { helpers.image_tag(url, style: 'width: 100%') }
end
def set_global_thread_values
@@ -98,27 +95,27 @@ def set_global_thread_values
def clean_empty_strings_from_params_arrays(params = nil)
params ||= params()
- params.keys.each do |k|
+ params.each_key do |k|
clean_empty_strings_from_params_arrays(params[k]) if params[k].is_a?(Hash)
- params[k] = params[k].select {|e| !e.eql?("")} if params[k].is_a?(Array)
+ params[k] = params[k].reject { |e| e.eql?('') } if params[k].is_a?(Array)
end
end
def domain_ontology_set
- @subdomain_filter = { :active => false, :name => "", :acronym => "" }
+ @subdomain_filter = { active: false, name: '', acronym: '' }
if !$ENABLE_SLICES.nil? && $ENABLE_SLICES == true
host = request.host
- host_parts = host.split(".")
+ host_parts = host.split('.')
subdomain = host_parts[0].downcase
slices = LinkedData::Client::Models::Slice.all
- slices_acronyms = slices.map {|s| s.acronym}
+ slices_acronyms = slices.map(&:acronym)
# Set custom ontologies if we're on a subdomain that has them
# Else, make sure user ontologies are set appropriately
- if slices_acronyms && slices_acronyms.include?(subdomain)
- slice = slices.select {|s| s.acronym.eql?(subdomain)}.first
+ if slices_acronyms&.include?(subdomain)
+ slice = slices.select { |s| s.acronym.eql?(subdomain) }.first
@subdomain_filter[:active] = true
@subdomain_filter[:name] = slice.name
@subdomain_filter[:acronym] = slice.acronym
@@ -128,11 +125,6 @@ def domain_ontology_set
Thread.current[:slice] = @subdomain_filter
end
- def anonymous_user
- user = DataAccess.getUser($ANONYMOUS_USER)
- user ||= User.new({"id" => 0})
- end
-
def ontology_not_found(ontology_acronym)
not_found("Ontology #{ontology_acronym} not found")
end
@@ -143,25 +135,23 @@ def concept_not_found(concept_id)
def not_found(message = '')
if request.xhr?
- render plain: message || "Error: load failed"
+ render plain: message || 'Error: load failed'
return
end
- raise ActiveRecord::RecordNotFound.new(message || 'Not Found')
+ raise ActiveRecord::RecordNotFound, message || 'Not Found'
end
- NOTIFICATION_TYPES = { :notes => "CREATE_NOTE_NOTIFICATION", :all => "ALL_NOTIFICATION" }
+ NOTIFICATION_TYPES = { notes: 'CREATE_NOTE_NOTIFICATION', all: 'ALL_NOTIFICATION' }.freeze
- def to_param(name) # Paramaterizes URLs without encoding
- unless name.nil?
- name.to_s.gsub(' ',"_")
- end
+ # Paramaterizes URLs without encoding
+ def to_param(name)
+ name&.to_s&.gsub(' ', '_')
end
- def undo_param(name) #Undo Paramaterization
- unless name.nil?
- name.to_s.gsub('_'," ")
- end
+ # Undo Paramaterization
+ def undo_param(name)
+ name&.to_s&.gsub('_', ' ')
end
def bp_config_json
@@ -169,23 +159,26 @@ def bp_config_json
# config/bioportal_config.rb
# config/initializers/ontologies_api_client.rb
config = {
- org: $ORG,
- org_url: $ORG_URL,
- site: $SITE,
- org_site: $ORG_SITE,
- ui_url: $UI_URL,
- apikey: LinkedData::Client.settings.apikey,
- userapikey: get_apikey,
- rest_url: LinkedData::Client.settings.rest_url,
- proxy_url: $PROXY_URL,
- biomixer_url: $BIOMIXER_URL,
- annotator_url: $ANNOTATOR_URL,
- ncbo_annotator_url: $NCBO_ANNOTATOR_URL,
- ncbo_apikey: $NCBO_API_KEY,
- interportal_hash: $INTERPORTAL_HASH,
- resolve_namespace: RESOLVE_NAMESPACE
+ org: $ORG,
+ org_url: $ORG_URL,
+ site: $SITE,
+ org_site: $ORG_SITE,
+ ui_url: $UI_URL,
+ apikey: LinkedData::Client.settings.apikey,
+ userapikey: get_apikey,
+ rest_url: LinkedData::Client.settings.rest_url,
+ proxy_url: $PROXY_URL,
+ biomixer_url: $BIOMIXER_URL,
+ annotator_url: $ANNOTATOR_URL,
+ ncbo_annotator_url: $NCBO_ANNOTATOR_URL,
+ ncbo_apikey: $NCBO_API_KEY,
+ interportal_hash: $INTERPORTAL_HASH,
+ resolve_namespace: RESOLVE_NAMESPACE
}
- config[:ncbo_slice] = @subdomain_filter[:acronym] if (@subdomain_filter[:active] && !@subdomain_filter[:acronym].empty?)
+ if @subdomain_filter[:active] && !@subdomain_filter[:acronym].empty?
+ config[:ncbo_slice] =
+ @subdomain_filter[:acronym]
+ end
config.to_json
end
@@ -193,13 +186,12 @@ def remote_file_exists?(url)
begin
url = URI.parse(url)
- if url.kind_of?(URI::FTP)
- check = check_ftp_file(url)
- else
- check = check_http_file(url)
- end
-
- rescue
+ check = if url.is_a?(URI::FTP)
+ check_ftp_file(url)
+ else
+ check_http_file(url)
+ end
+ rescue StandardError
return false
end
@@ -219,12 +211,12 @@ def check_ftp_file(uri)
ftp = Net::FTP.new(uri.host, uri.user, uri.password)
ftp.login
begin
- file_exists = ftp.size(uri.path) > 0
- rescue
+ file_exists = ftp.size(uri.path).positive?
+ rescue StandardError
# Check using another method
- path = uri.path.split("/")
+ path = uri.path.split('/')
filename = path.pop
- path = path.join("/")
+ path = path.join('/')
ftp.chdir(path)
files = ftp.dir
# Dumb check, just see if the filename is somewhere in the list
@@ -246,9 +238,10 @@ def parse_response_body(response)
def response_errors(error_response)
error_struct = parse_response_body(error_response)
- errors = {error: "There was an error, please try again"}
+ errors = { error: 'There was an error, please try again' }
return errors unless error_struct
return errors unless error_struct.respond_to?(:errors)
+
errors = {}
error_struct.errors.each do |error|
if error.is_a?(OpenStruct) || error.is_a?(Struct)
@@ -264,7 +257,7 @@ def response_success?(response)
return true if response.nil?
if response.respond_to?(:status) && response.status
- response.status.to_i < 400
+ response.status.to_i < 400
else
!(response.respond_to?(:errors) && response.errors)
end
@@ -277,31 +270,35 @@ def response_error?(response)
def struct_to_hash(struct)
hash = {}
struct.members.each do |attr|
- next if [:links, :context].include?(attr)
- if struct[attr].is_a?(Struct) || struct[attr].is_a?(OpenStruct)
- hash[attr] = struct_to_hash(struct[attr])
- else
- hash[attr] = struct[attr]
- end
+ next if %i[links context].include?(attr)
+
+ hash[attr] = if struct[attr].is_a?(Struct) || struct[attr].is_a?(OpenStruct)
+ struct_to_hash(struct[attr])
+ else
+ struct[attr]
+ end
end
hash
end
- def redirect_to_browse # Redirect to the browse Ontologies page
- redirect_to "/ontologies"
+ # Redirect to the browse Ontologies page
+ def redirect_to_browse
+ redirect_to '/ontologies'
end
- def redirect_to_home # Redirect to Home Page
- redirect_to "/"
+ # Redirect to Home Page
+ def redirect_to_home
+ redirect_to '/'
end
- def redirect_to_history # Redirects to the correct tab through the history system
+ # Redirects to the correct tab through the history system
+ def redirect_to_history
if session[:redirect].nil?
redirect_to_home
else
tab = find_tab(session[:redirect][:ontology])
- session[:redirect]=nil
- redirect_to uri_url(:ontology=>tab.ontology_id,:conceptid=>tab.concept)
+ session[:redirect] = nil
+ redirect_to uri_url(ontology: tab.ontology_id, conceptid: tab.concept)
end
end
@@ -310,43 +307,43 @@ def redirect_new_api(class_view = false)
params[:ontology] = params[:ontology].nil? ? params[:ontologyid] : params[:ontology]
# Error checking
if params[:ontology].nil? || params[:id] && params[:ontology].nil?
- @error = "Please provide an ontology id or concept id with an ontology id."
+ @error = 'Please provide an ontology id or concept id with an ontology id.'
return
end
acronym = BpidResolver.id_to_acronym(params[:ontology])
ontology_not_found(params[:ontology]) unless acronym
if class_view
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(acronym).first
- concept = get_class(params).first.to_s
- redirect_to "/ontologies/#{acronym}?p=classes#{params_string_for_redirect(params, prefix: "&")}", :status => :moved_permanently
+ get_class(params).first.to_s
+ redirect_to "/ontologies/#{acronym}?p=classes#{params_string_for_redirect(params, prefix: '&')}",
+ status: :moved_permanently
else
- redirect_to "/ontologies/#{acronym}#{params_string_for_redirect(params)}", :status => :moved_permanently
+ redirect_to "/ontologies/#{acronym}#{params_string_for_redirect(params)}", status: :moved_permanently
end
end
def params_cleanup_new_api
params = @_params
- if params[:ontology] && params[:ontology].to_i > 0
- params[:ontology] = BpidResolver.id_to_acronym(params[:ontology])
- end
+ params[:ontology] = BpidResolver.id_to_acronym(params[:ontology]) if params[:ontology]&.to_i&.positive?
params
end
def params_string_for_redirect(params, options = {})
- prefix = options[:prefix] || "?"
- stop_words = options[:stop_words] || ["ontology", "controller", "action", "id", "acronym"]
+ prefix = options[:prefix] || '?'
+ stop_words = options[:stop_words] || %w[ontology controller action id acronym]
params_array = []
- params.each do |key,value|
+ params.each do |key, value|
next if stop_words.include?(key.to_s) || value.nil? || value.empty?
+
params_array << "#{key}=#{CGI.escape(value)}"
end
- params_array.empty? ? "" : "#{prefix}#{params_array.join('&')}"
+ params_array.empty? ? '' : "#{prefix}#{params_array.join('&')}"
end
# rack-mini-profiler authorization
def authorize_miniprofiler
- if params[:enable_profiler] && params[:enable_profiler].eql?("true") && session[:user] && session[:user].admin?
+ if params[:enable_profiler].eql?('true') && session[:user] && session[:user].admin?
Rack::MiniProfiler.authorize_request
else
Rack::MiniProfiler.deauthorize_request
@@ -355,88 +352,83 @@ def authorize_miniprofiler
# Verifies if user is logged in
def authorize_and_redirect
- unless session[:user]
- redirect_to_home
- end
+ return if session[:user]
+
+ redirect_to_home
end
# Verifies that a user owns an object
- def authorize_owner(id=nil)
- if id.nil?
- id = params[:id].to_i
- end
+ def authorize_owner(id = nil)
+ id = params[:id].to_i if id.nil?
- id.map! {|i| i.to_i} if id.kind_of?(Array)
+ id.map!(&:to_i) if id.is_a?(Array)
if session[:user].nil?
redirect_to_home
- else
- if id.kind_of?(Array)
- redirect_to_home if !session[:user].admin? && !id.include?(session[:user].id.to_i)
- else
- redirect_to_home if !session[:user].admin? && !session[:user].id.to_i.eql?(id)
- end
+ elsif id.is_a?(Array)
+ redirect_to_home if !session[:user].admin? && !id.include?(session[:user].id.to_i)
+ elsif !session[:user].admin? && !session[:user].id.to_i.eql?(id)
+ redirect_to_home
end
end
def authorize_admin
- admin = session[:user] && session[:user].admin?
+ admin = session[:user]&.admin?
redirect_to_home unless admin
end
def current_user_admin?
- session[:user] && session[:user].admin?
+ session[:user]&.admin?
end
def ontology_restricted?(acronym)
restrict_downloads = $NOT_DOWNLOADABLE
restrict_downloads.include? acronym
end
+
# updates the 'history' tab with the current selected concept
def update_tab(ontology, concept)
array = session[:ontologies] || []
found = false
- for item in array
+ array.each do |item|
if item.ontology_id.eql?(ontology.id)
- item.concept=concept
- found=true
+ item.concept = concept
+ found = true
end
end
- unless found
- array << History.new(ontology.id, ontology.name, ontology.acronym, concept)
- end
+ array << History.new(ontology.id, ontology.name, ontology.acronym, concept) unless found
- session[:ontologies]=array
+ session[:ontologies] = array
end
# Removes a 'history' tab
def remove_tab(ontology_id)
array = session[:ontologies]
array.delete(find_tab(ontology_id))
- session[:ontologies]=array
+ session[:ontologies] = array
end
# Returns a specific 'history' tab
def find_tab(ontology_id)
array = session[:ontologies]
- for item in array
- if item.ontology_id.eql?(ontology_id)
- return item
- end
+ array.each do |item|
+ return item if item.ontology_id.eql?(ontology_id)
end
- return nil
+ nil
end
def check_delete_mapping_permission(mappings)
# ensure mappings is an Array of mappings (some calls may provide only a single mapping instance)
mappings = [mappings] if mappings.instance_of? LinkedData::Client::Models::Mapping
- return false if mappings.all? {|m| m.id.to_s.empty?}
+ return false if mappings.all? { |m| m.id.to_s.empty? }
+
delete_mapping_permission = false
if session[:user]
delete_mapping_permission = session[:user].admin?
mappings.each do |mapping|
break if delete_mapping_permission
+
delete_mapping_permission = mapping.creator == session[:user].id
end
end
@@ -448,28 +440,26 @@ def using_captcha?
end
def get_class(params)
-
lang = request_lang
-
+
if @ontology.flat?
ignore_concept_param = params[:conceptid].nil? ||
- params[:conceptid].empty? ||
- params[:conceptid].eql?("root") ||
- params[:conceptid].eql?("bp_fake_root")
+ params[:conceptid].empty? ||
+ params[:conceptid].eql?('root') ||
+ params[:conceptid].eql?('bp_fake_root')
if ignore_concept_param
# Don't display any classes in the tree
@concept = LinkedData::Client::Models::Class.new
- @concept.prefLabel = "Please search for a class using the Jump To field above"
+ @concept.prefLabel = 'Please search for a class using the Jump To field above'
@concept.obsolete = false
- @concept.id = "bp_fake_root"
+ @concept.id = 'bp_fake_root'
@concept.properties = {}
- @concept.children = []
else
# Display only the requested class in the tree
- @concept = @ontology.explore.single_class({full: true, lang: lang }, params[:conceptid])
- @concept.children = []
+ @concept = @ontology.explore.single_class({ full: true, lang: lang }, params[:conceptid])
end
+ @concept.children = []
@root = LinkedData::Client::Models::Class.new
@root.children = [@concept]
@@ -478,21 +468,21 @@ def get_class(params)
# not ignoring 'bp_fake_root' here
include = 'prefLabel,hasChildren,obsolete'
ignore_concept_param = params[:conceptid].nil? ||
- params[:conceptid].empty? ||
- params[:conceptid].eql?("root")
+ params[:conceptid].empty? ||
+ params[:conceptid].eql?('root')
if ignore_concept_param
# get the top level nodes for the root
# TODO_REV: Support views? Replace old view call: @ontology.top_level_classes(view)
- @roots = @ontology.explore.roots(concept_schemes: params[:concept_schemes])
+ @roots = @ontology.explore.roots(concept_schemes: params[:concept_schemes])
if @roots.nil? || @roots.empty?
LOG.add :debug, "Missing @roots for #{@ontology.acronym}"
classes = @ontology.explore.classes.collection
@concept = classes.first.explore.self(full: true) if classes.first
return
end
-
+
@root = LinkedData::Client::Models::Class.new(read_only: true)
- @root.children = @roots.sort{|x,y| (x.prefLabel || "").downcase <=> (y.prefLabel || "").downcase}
+ @root.children = @roots.sort { |x, y| (x.prefLabel || '').downcase <=> (y.prefLabel || '').downcase }
# get the initial concept to display
root_child = @root.children.first
@@ -505,7 +495,7 @@ def get_class(params)
end
else
# if the id is coming from a param, use that to get concept
- @concept = @ontology.explore.single_class({full: true, lang: lang}, params[:conceptid])
+ @concept = @ontology.explore.single_class({ full: true, lang: lang }, params[:conceptid])
if @concept.nil? || @concept.errors
LOG.add :debug, "Missing class #{@ontology.acronym} / #{params[:conceptid]}"
not_found("Missing class #{@ontology.acronym} / #{params[:conceptid]}")
@@ -520,40 +510,39 @@ def get_class(params)
@concept = @ontology.explore.classes.collection.first.explore.self(full: true)
return
end
- if @roots.any? {|c| c.id == @concept.id}
- rootNode = @roots
- else
- rootNode = [@concept]
- end
+ rootNode = if @roots.any? { |c| c.id == @concept.id }
+ @roots
+ else
+ [@concept]
+ end
end
@root = LinkedData::Client::Models::Class.new(read_only: true)
- @root.children = rootNode.sort{|x,y| (x.prefLabel || "").downcase <=> (y.prefLabel || "").downcase}
+ @root.children = rootNode.sort { |x, y| (x.prefLabel || '').downcase <=> (y.prefLabel || '').downcase }
end
end
@concept
end
-
def get_ontology_submission_ready(ontology)
# Get the latest 'ready' submission
- submission = ontology.explore.latest_submission({:include_status => 'ready'})
+ submission = ontology.explore.latest_submission({ include_status: 'ready' })
# Fallback to the latest submission, even if it's not ready.
submission = ontology.explore.latest_submission if submission.nil?
- return submission
+ submission
end
- def get_simplified_ontologies_hash()
+ def get_simplified_ontologies_hash
# Note the simplify_ontology_model will cache individual ontology data.
simple_ontologies = {}
begin
- ontology_models = LinkedData::Client::Models::Ontology.all({:include_views => true})
- ontology_models.each {|o| simple_ontologies[o.id] = simplify_ontology_model(o) }
+ ontology_models = LinkedData::Client::Models::Ontology.all({ include_views: true })
+ ontology_models.each { |o| simple_ontologies[o.id] = simplify_ontology_model(o) }
rescue Exception => e
LOG.add :error, e.message
return nil
end
- return simple_ontologies
+ simple_ontologies
end
def get_ontology_details(ont_uri)
@@ -565,7 +554,7 @@ def get_ontology_details(ont_uri)
LOG.add :error, e.message
return nil
end
- return ont
+ ont
end
def simplify_classes(classes)
@@ -573,7 +562,7 @@ def simplify_classes(classes)
# It takes a list of class objects (hashes or models) and the
# data structure returned is a hash of class hashes, which will
# contain details for the ontology they belong to. For example:
- #{
+ # {
# "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C12439" => {
# :id => "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C12439",
# :ui => "http://ncbo-stg-app-12.stanford.edu/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C12439",
@@ -587,29 +576,29 @@ def simplify_classes(classes)
# :ui => "http://ncbo-stg-app-12.stanford.edu/ontologies/NCIT"
# },
# },
- #}
+ # }
@ontologies_hash ||= get_simplified_ontologies_hash
classes_hash = {}
classes.each do |cls|
c = simplify_class_model(cls)
- c[:ontology] = @ontologies_hash[ c[:ontology] ]
+ c[:ontology] = @ontologies_hash[c[:ontology]]
classes_hash[c[:id]] = c
end
- return classes_hash
+ classes_hash
end
def simplify_class_model(cls_model)
# Simplify the class required required by the UI.
# No modification of the class ontology here, see simplify_classes.
# Default simple class model
- cls = { :id => nil, :ontology => nil, :prefLabel => nil, :uri => nil, :ui => nil, :obsolete => false }
+ cls = { id: nil, ontology: nil, prefLabel: nil, uri: nil, ui: nil, obsolete: false }
begin
if cls_model.instance_of? Hash
cls = {
- :id => cls_model['@id'],
- :ui => cls_model['links']['ui'],
- :uri => cls_model['links']['self'], # different from id
- :ontology => cls_model['links']['ontology']
+ id: cls_model['@id'],
+ ui: cls_model['links']['ui'],
+ uri: cls_model['links']['self'], # different from id
+ ontology: cls_model['links']['ontology']
}
# Try to carry through a prefLabel and the obsolete attribute, if they exist.
cls[:prefLabel] = cls_model['prefLabel']
@@ -618,10 +607,10 @@ def simplify_class_model(cls_model)
# try to work with a struct object or a LinkedData::Client::Models::Class
# if not a struct, then: cls_model.instance_of? LinkedData::Client::Models::Class
cls = {
- :id => cls_model.id,
- :ui => cls_model.links['ui'],
- :uri => cls_model.links['self'], # different from id
- :ontology => cls_model.links['ontology'],
+ id: cls_model.id,
+ ui: cls_model.links['ui'],
+ uri: cls_model.links['self'], # different from id
+ ontology: cls_model.links['ontology']
}
# Try to carry through a prefLabel and the obsolete attribute, if they exist.
cls[:prefLabel] = cls_model.prefLabel if cls_model.respond_to?('prefLabel')
@@ -631,7 +620,7 @@ def simplify_class_model(cls_model)
LOG.add :error, e.message
LOG.add :error, "Failure to simplify class: #{cls}"
end
- return cls
+ cls
end
def simplify_ontology_model(ont_model)
@@ -643,6 +632,7 @@ def simplify_ontology_model(ont_model)
end
ont = Rails.cache.read(id)
return ont unless ont.nil?
+
# No cache or it has expired
LOG.add :debug, "No cache or expired cache for ontology: #{id}"
ont = {}
@@ -662,50 +652,47 @@ def simplify_ontology_model(ont_model)
# Only cache a complete representation of a simplified ontology
if ont[:id].nil? || ont[:uri].nil? || ont[:acronym].nil? || ont[:name].nil? || ont[:ui].nil?
raise "Incomplete simple ontology: #{id}, #{ont}"
- else
- Rails.cache.write(ont[:id], ont, expires_in: EXPIRY_ONTOLOGY_SIMPLIFIED)
end
- return ont
+
+ Rails.cache.write(ont[:id], ont, expires_in: EXPIRY_ONTOLOGY_SIMPLIFIED)
+
+ ont
end
- def get_apikey()
+ def get_apikey
apikey = API_KEY
- if session[:user]
- apikey = session[:user].apikey
- end
- return apikey
+ apikey = session[:user].apikey if session[:user]
+ apikey
end
def parse_json(uri)
uri = URI.parse(uri)
begin
- response = open(uri, "Authorization" => "apikey token=#{get_apikey}").read
- rescue Exception => error
+ response = open(uri, 'Authorization' => "apikey token=#{get_apikey}").read
+ rescue Exception => e
@retries ||= 0
- if @retries < 1 # retry once only
- @retries += 1
- retry
- else
- raise error
- end
+ raise e unless @retries < 1 # retry once only
+
+ @retries += 1
+ retry
end
JSON.parse(response)
end
-
def get_batch_results(params)
begin
- response = RestClient.post REST_URI_BATCH, params.to_json, :content_type => :json, :accept => :json, :authorization => "apikey token=#{get_apikey}"
- rescue Exception => error
+ response = RestClient.post REST_URI_BATCH, params.to_json, content_type: :json, accept: :json,
+ authorization: "apikey token=#{get_apikey}"
+ rescue Exception => e
@retries ||= 0
- if @retries < 1 # retry once only
+ if @retries < 1 # retry once only
@retries += 1
retry
else
LOG.add :error, "\nERROR: batch POST, uri: #{REST_URI_BATCH}"
LOG.add :error, "\nERROR: batch POST, params: #{params.to_json}"
- LOG.add :error, "\nERROR: batch POST, error response: #{error.response}"
- raise error
+ LOG.add :error, "\nERROR: batch POST, error response: #{e.response}"
+ raise e
end
end
response
@@ -716,17 +703,17 @@ def get_batch_results(params)
# Each class in the list maps to all other classes in the list.
def get_recent_mappings
recent_mappings = {
- :mappings => [],
- :classes => {}
+ mappings: [],
+ classes: {}
}
begin
recent_url = "#{REST_URI}/mappings/recent/"
cached_mappings_key = recent_url
cached_mappings = Rails.cache.read(cached_mappings_key)
- return cached_mappings unless (cached_mappings.nil? || cached_mappings.empty?)
+ return cached_mappings unless cached_mappings.nil? || cached_mappings.empty?
+
# No cache or it has expired
- class_details = {}
- mappings = LinkedData::Client::HTTP.get(recent_url, {size: 20, display: "prefLabel"})
+ mappings = LinkedData::Client::HTTP.get(recent_url, { size: 20, display: 'prefLabel' })
recent_mappings[:mappings] = mappings
unless mappings.nil? || mappings.empty?
# Only cache a successful retrieval
@@ -736,12 +723,12 @@ def get_recent_mappings
LOG.add :error, e.message
# leave recent mappings empty.
end
- return recent_mappings
+ recent_mappings
end
def total_mapping_count
total_count = 0
-
+
begin
stats = LinkedData::Client::HTTP.get("#{REST_URI}/mappings/statistics/ontologies")
unless stats.blank?
@@ -750,11 +737,11 @@ def total_mapping_count
stats.transform_values!(&:to_i)
total_count = stats.values.sum
end
- rescue
+ rescue StandardError
LOG.add :error, e.message
end
-
- return total_count
+
+ total_count
end
def determine_layout
@@ -770,24 +757,26 @@ def current_license
end
def init_trial_license
- unless $trial_license_initialized
- unless License.where(encrypted_key: 'trial').exists?
- License.create(encrypted_key: 'trial', created_at: Time.current)
- end
- $trial_license_initialized = true
+ return if $trial_license_initialized
+
+ unless License.where(encrypted_key: 'trial').exists?
+ License.create(encrypted_key: 'trial', created_at: Time.current)
end
+ $trial_license_initialized = true
end
-
+
# Get the submission metadata from the REST API.
def submission_metadata
- @metadata ||= JSON.parse(Net::HTTP.get(URI.parse("#{REST_URI}/submission_metadata?apikey=#{API_KEY}")))
+ @submission_metadata ||= JSON.parse(Net::HTTP.get(URI.parse("#{REST_URI}/submission_metadata?apikey=#{API_KEY}")))
end
helper_method :submission_metadata
def request_lang
helpers.request_lang
end
+
private
+
def not_found_record(exception)
@error_message = exception.message
render 'errors/not_found', status: 404
diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb
index ad125dd170..3253bb063c 100644
--- a/app/controllers/collections_controller.rb
+++ b/app/controllers/collections_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CollectionsController < ApplicationController
include CollectionsHelper
def show
@@ -6,9 +8,9 @@ def show
def show_label
collection_label = ''
- collection = get_request_collection
- collection_label = collection['prefLabel'] if collection
- collection_label = params[:id] if collection_label.nil? || collection_label.empty?
+ collection = get_request_collection
+ collection_label = collection['prefLabel'] if collection
+ collection_label = params[:id] if collection_label.nil? || collection_label.empty?
render LabelLinkComponent.inline(params[:id], helpers.main_language_label(collection_label))
end
@@ -18,7 +20,7 @@ def show_members
@collection = get_request_collection
page = params[:page] || '1'
@auto_click = page.to_s.eql?('1')
- @page = @collection.explore.members({page: page, language: request_lang})
+ @page = @collection.explore.members({ page: page, language: request_lang })
@concepts = @page.collection
if @ontology.nil?
ontology_not_found params[:ontology]
diff --git a/app/controllers/concepts_controller.rb b/app/controllers/concepts_controller.rb
index 52d23a8bb4..d70ca7b293 100644
--- a/app/controllers/concepts_controller.rb
+++ b/app/controllers/concepts_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'cgi'
class ConceptsController < ApplicationController
@@ -6,10 +8,10 @@ class ConceptsController < ApplicationController
layout 'ontology'
def show_concept
- params[:id] = params[:id] ? params[:id] : params[:conceptid]
+ params[:id] = params[:id] || params[:conceptid]
if params[:id].nil? || params[:id].empty?
- render :text => "Error: You must provide a valid concept id"
+ render text: 'Error: You must provide a valid concept id'
return
end
@@ -19,20 +21,20 @@ def show_concept
@submission = get_ontology_submission_ready(@ontology)
@ob_instructions = helpers.ontolobridge_instructions_template(@ontology)
- @concept = @ontology.explore.single_class({full: true, language: request_lang}, params[:id])
+ @concept = @ontology.explore.single_class({ full: true, language: request_lang }, params[:id])
@instances_concept_id = @concept.id
concept_not_found(params[:id]) if @concept.nil?
gather_details
- render :partial => 'show'
+ render partial: 'show'
end
def show
# Handle multiple methods of passing concept ids
- params[:id] = params[:id] ? params[:id] : params[:conceptid]
+ params[:id] = params[:id] || params[:conceptid]
if params[:id].nil? || params[:id].empty?
- render :text => "Error: You must provide a valid concept id"
+ render text: 'Error: You must provide a valid concept id'
return
end
@@ -41,31 +43,31 @@ def show
@ob_instructions = helpers.ontolobridge_instructions_template(@ontology)
if request.xhr?
- display = params[:callback].eql?('load') ? {full: true} : {display: "prefLabel"}
+ display = params[:callback].eql?('load') ? { full: true } : { display: 'prefLabel' }
@concept = @ontology.explore.single_class(display, params[:id])
concept_not_found(params[:id]) if @concept.nil?
@schemes = params[:concept_schemes]&.split(',')
- show_ajax_request # process an ajax call
else
# Get the latest 'ready' submission, or fallback to any latest submission
# TODO: change the logic here if the fallback will crash the visualization
- @submission = get_ontology_submission_ready(@ontology) # application_controller
+ @submission = get_ontology_submission_ready(@ontology) # application_controller
- @concept = @ontology.explore.single_class({full: true}, params[:id])
+ @concept = @ontology.explore.single_class({ full: true }, params[:id])
concept_not_found(params[:id]) if @concept.nil?
@schemes = params[:concept_schemes].split(',')
- show_ajax_request # process a full call
end
+ show_ajax_request
end
def show_label
- cls_id = params[:concept] || params[:id] # cls_id should be a full URI
- ont_id = params[:ontology] # ont_id could be a full URI or an acronym
-
- if ont_id.to_i > 0
- params_cleanup_new_api()
- stop_words = ["controller", "action"]
- redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}", :status => :moved_permanently
+ cls_id = params[:concept] || params[:id] # cls_id should be a full URI
+ ont_id = params[:ontology] # ont_id could be a full URI or an acronym
+
+ if ont_id.to_i.positive?
+ params_cleanup_new_api
+ stop_words = %w[controller action]
+ redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}",
+ status: :moved_permanently
return
end
@@ -73,29 +75,31 @@ def show_label
end
def show_definition
- if params[:ontology].to_i > 0
- params_cleanup_new_api()
- stop_words = ["controller", "action"]
- redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}", :status => :moved_permanently
+ if params[:ontology].to_i.positive?
+ params_cleanup_new_api
+ stop_words = %w[controller action]
+ redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}",
+ status: :moved_permanently
return
end
@ontology = LinkedData::Client::Models::Ontology.find(params[:ontology])
cls = @ontology.explore.single_class(params[:concept])
- render :text => cls.definition
+ render text: cls.definition
end
def show_tree
- if params[:ontology].to_i > 0
- params_cleanup_new_api()
- stop_words = ["controller", "action"]
- redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}", :status => :moved_permanently
+ if params[:ontology].to_i.positive?
+ params_cleanup_new_api
+ stop_words = %w[controller action]
+ redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}",
+ status: :moved_permanently
return
end
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
if @ontology.nil?
ontology_not_found(params[:ontology])
- else
- get_class(params) #application_controller
+ else
+ get_class(params) # application_controller
render partial: 'ontologies/treeview', locals: { autoCLick: params[:auto_click] || true }
end
end
@@ -110,8 +114,8 @@ def show_date_sorted_list
auto_click = page.to_s.eql?('1')
params = {
page: page,
- sortby:'modified,created',
- order:'desc,desc',
+ sortby: 'modified,created',
+ order: 'desc,desc',
display: 'prefLabel,modified,created',
language: request_lang
}
@@ -126,14 +130,14 @@ def show_date_sorted_list
render partial: 'concepts/date_sorted_list', locals: { auto_click: auto_click }
end
-
end
def property_tree
- if params[:ontology].to_i > 0
- params_cleanup_new_api()
- stop_words = ["controller", "action"]
- redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}", :status => :moved_permanently
+ if params[:ontology].to_i.positive?
+ params_cleanup_new_api
+ stop_words = %w[controller action]
+ redirect_to "#{request.path}#{params_string_for_redirect(params, stop_words: stop_words)}",
+ status: :moved_permanently
return
end
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
@@ -146,52 +150,53 @@ def property_tree
def details
concept_not_found('') if params[:conceptid].nil? || params[:conceptid].empty?
- if params[:ontology].to_i > 0
+ if params[:ontology].to_i.positive?
orig_id = params[:ontology]
- params_cleanup_new_api()
- options = {stop_words: ["controller", "action", "id"]}
- redirect_to "#{request.path.sub(orig_id, params[:ontology])}#{params_string_for_redirect(params, options)}", :status => :moved_permanently
+ params_cleanup_new_api
+ options = { stop_words: %w[controller action id] }
+ redirect_to "#{request.path.sub(orig_id, params[:ontology])}#{params_string_for_redirect(params, options)}",
+ status: :moved_permanently
return
end
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
ontology_not_found(params[:ontology]) if @ontology.nil?
- @concept = @ontology.explore.single_class({full: true}, CGI.unescape(params[:conceptid]))
+ @concept = @ontology.explore.single_class({ full: true }, CGI.unescape(params[:conceptid]))
concept_not_found(CGI.unescape(params[:conceptid])) if @concept.nil?
- if params[:styled].eql?("true")
- render :partial => "details", :layout => "partial"
+ if params[:styled].eql?('true')
+ render partial: 'details', layout: 'partial'
else
- render :partial => "details"
+ render partial: 'details'
end
end
-
def biomixer
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
ontology_not_found(params[:ontology]) if @ontology.nil?
- @concept = @ontology.explore.single_class({full: true}, params[:conceptid])
+ @concept = @ontology.explore.single_class({ full: true }, params[:conceptid])
concept_not_found(params[:conceptid]) if @concept.nil?
@immediate_load = true
- render partial: "biomixer", layout: false
+ render partial: 'biomixer', layout: false
end
-# PRIVATE -----------------------------------------
-private
+ # PRIVATE -----------------------------------------
+ private
def show_ajax_request
case params[:callback]
when 'load' # Load pulls in all the details of a node
gather_details
- render :partial => 'load'
+ render partial: 'load'
when 'children' # Children is called only for drawing the tree
- @children = @concept.explore.children(pagesize: 750, concept_schemes: @schemes.join(','), language: request_lang, display: 'prefLabel,obsolete,hasChildren').collection || []
- @children.sort! { |x, y| (x.prefLabel || "").downcase <=> (y.prefLabel || "").downcase } unless @children.empty?
- render :partial => 'child_nodes'
+ @children = @concept.explore.children(pagesize: 750, concept_schemes: @schemes.join(','), language: request_lang,
+ display: 'prefLabel,obsolete,hasChildren').collection || []
+ @children.sort! { |x, y| (x.prefLabel || '').downcase <=> (y.prefLabel || '').downcase } unless @children.empty?
+ render partial: 'child_nodes'
end
end
@@ -203,18 +208,18 @@ def show_uri_request
def gather_details
@notes = @concept.explore.notes
- update_tab(@ontology, @concept.id) #updates the 'history' tab with the current node
+ update_tab(@ontology, @concept.id) # updates the 'history' tab with the current node
end
def build_tree
# find path to root
- rootNode = @concept.explore.tree(include: "prefLabel,hasChildren,obsolete,subClassOf")
+ rootNode = @concept.explore.tree(include: 'prefLabel,hasChildren,obsolete,subClassOf')
@root = LinkedData::Client::Models::Class.new(read_only: true)
@root.children = rootNode unless rootNode.nil?
end
def filter_concept_with_no_date(concepts)
- concepts.filter { |c| !concept_date(c).nil?}
+ concepts.filter { |c| !concept_date(c).nil? }
end
def concepts_to_years_months(concepts)
diff --git a/app/controllers/concerns/mapping_statistics.rb b/app/controllers/concerns/mapping_statistics.rb
index 6d70552e2a..9c272bfa47 100644
--- a/app/controllers/concerns/mapping_statistics.rb
+++ b/app/controllers/concerns/mapping_statistics.rb
@@ -3,15 +3,14 @@
module MappingStatistics
extend ActiveSupport::Concern
-
MAPPINGS_URL = "#{LinkedData::Client.settings.rest_url}/mappings"
MAPPING_STATISTICS_URL = "#{LinkedData::Client.settings.rest_url}/mappings/statistics/ontologies/"
MAPPING_STATISTICS_EXTERNAL = "#{LinkedData::Client.settings.rest_url}/mappings/statistics/external"
MAPPING_STATISTICS_INTERNAL = "#{LinkedData::Client.settings.rest_url}/mappings/statistics/interportal/"
- EXTERNAL_MAPPINGS_GRAPH = "http://data.bioontology.org/metadata/ExternalMappings"
- INTERPORTAL_MAPPINGS_GRAPH = "http://data.bioontology.org/metadata/InterportalMappings"
+ EXTERNAL_MAPPINGS_GRAPH = 'http://data.bioontology.org/metadata/ExternalMappings'
+ INTERPORTAL_MAPPINGS_GRAPH = 'http://data.bioontology.org/metadata/InterportalMappings'
def mapping_counts(source_acronym)
mapping_counts = []
@@ -25,17 +24,16 @@ def mapping_counts(source_acronym)
statistics = get_statistics source_acronym
statistics&.each_pair do |target_acronym, count|
if target_acronym.to_s == EXTERNAL_MAPPINGS_GRAPH
- ont = OpenStruct.new({:id => target_acronym.to_s, :name => "External Mappings"})
+ ont = OpenStruct.new({ id: target_acronym.to_s, name: 'External Mappings' })
elsif target_acronym.to_s.start_with?(INTERPORTAL_MAPPINGS_GRAPH)
- ont =OpenStruct.new( {:id => target_acronym.to_s, :name => "#{target_acronym.to_s.split("/")[-1].upcase} Interportal"})
+ ont = OpenStruct.new({ id: target_acronym.to_s,
+ name: "#{target_acronym.to_s.split('/')[-1].upcase} Interportal" })
else
ont = ontologies.find { |o| o.acronym.eql? target_acronym.to_s }
# Handle the case where statistics are still present for a deleted ontology
next if ont.nil? || ont.summaryOnly
end
-
-
mapping_counts << { target_ontology: ont, count: count }
end
@@ -43,18 +41,15 @@ def mapping_counts(source_acronym)
end
private
+
def get_statistics(source_acronym)
- ontology_label = source_acronym.split(":")
- if ontology_label[-1] == "external"
- counts = LinkedData::Client::HTTP.get(MAPPING_STATISTICS_EXTERNAL)
- elsif ontology_label[0] == "interportal"
- counts = LinkedData::Client::HTTP.get("#{MAPPING_STATISTICS_INTERNAL}#{ontology_label[-1]}")
+ ontology_label = source_acronym.split(':')
+ if ontology_label[-1] == 'external'
+ LinkedData::Client::HTTP.get(MAPPING_STATISTICS_EXTERNAL)
+ elsif ontology_label[0] == 'interportal'
+ LinkedData::Client::HTTP.get("#{MAPPING_STATISTICS_INTERNAL}#{ontology_label[-1]}")
else
- counts = LinkedData::Client::HTTP.get("#{MAPPING_STATISTICS_URL}#{source_acronym}")
+ LinkedData::Client::HTTP.get("#{MAPPING_STATISTICS_URL}#{source_acronym}")
end
- counts
end
-
-
-
end
diff --git a/app/controllers/concerns/ontology_updater.rb b/app/controllers/concerns/ontology_updater.rb
index a5faefefef..1876577181 100644
--- a/app/controllers/concerns/ontology_updater.rb
+++ b/app/controllers/concerns/ontology_updater.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module OntologyUpdater
extend ActiveSupport::Concern
include SubmissionUpdater
@@ -22,17 +24,18 @@ def ontology_params
p = params.require(:ontology).permit(:name, :acronym, { administeredBy: [] }, :viewingRestriction, { acl: [] },
{ hasDomain: [] }, :viewOf, :isView, :subscribe_notifications, { group: [] })
- p[:administeredBy].reject!(&:blank?) if p[:administeredBy]
+ p[:administeredBy]&.reject!(&:blank?)
# p[:acl].reject!(&:blank?)
- p[:hasDomain].reject!(&:blank?) if p[:hasDomain]
- p[:group].reject!(&:blank?) if p[:group]
+ p[:hasDomain]&.reject!(&:blank?)
+ p[:group]&.reject!(&:blank?)
p[:viewOf] = '' if p.key?(:viewOf) && !p.key?(:isView)
p.to_h
end
def show_new_errors(object, redirection = 'ontologies/new')
- # TODO optimize
- @ontologies = LinkedData::Client::Models::Ontology.all(include: 'acronym', include_views: true, display_links: false, display_context: false)
+ # TODO: optimize
+ @ontologies = LinkedData::Client::Models::Ontology.all(include: 'acronym', include_views: true,
+ display_links: false, display_context: false)
@categories = LinkedData::Client::Models::Category.all
@groups = LinkedData::Client::Models::Group.all(display_links: false, display_context: false)
@user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
@@ -61,7 +64,7 @@ def new_submission_hash(ontology)
submission_params = submission_params(params[:submission])
if @submission
- submission_params = submission_params(ActionController::Parameters.new(@submission.to_hash.delete_if do |k, v|
+ submission_params = submission_params(ActionController::Parameters.new(@submission.to_hash.delete_if do |_k, v|
v.nil? || v.respond_to?(:empty?) && v.empty?
end.merge(submission_params)))
end
@@ -78,6 +81,7 @@ def update_submission_hash(acronym)
end
private
+
def reset_agent_attributes
helpers.agent_attributes.each do |attr|
current_val = @submission[attr]
diff --git a/app/controllers/concerns/submission_filter.rb b/app/controllers/concerns/submission_filter.rb
index 19094449b4..d0d1de7b5c 100644
--- a/app/controllers/concerns/submission_filter.rb
+++ b/app/controllers/concerns/submission_filter.rb
@@ -1,9 +1,11 @@
+# frozen_string_literal: true
+
module SubmissionFilter
extend ActiveSupport::Concern
- BROWSE_ATTRIBUTES = ['ontology', 'submissionStatus', 'description', 'pullLocation', 'creationDate',
- 'contact', 'released', 'naturalLanguage', 'hasOntologyLanguage',
- 'hasFormalityLevel', 'isOfType', 'deprecated', 'status', 'metrics']
+ BROWSE_ATTRIBUTES = %w[ontology submissionStatus description pullLocation creationDate
+ contact released naturalLanguage hasOntologyLanguage
+ hasFormalityLevel isOfType deprecated status metrics].freeze
def init_filters(params)
@show_views = params[:show_views]&.eql?('true')
@@ -79,7 +81,6 @@ def filters_params(params, includes: BROWSE_ATTRIBUTES.join(','), page: 1, pages
@filters[:show_retired] = 'true'
end
-
filters_values_map.each do |filter, api_key|
next if params[filter].nil? || params[filter].empty?
@@ -145,7 +146,7 @@ def add_submission_attributes(ont_hash, sub)
end
def add_ontology_attributes(ont_hash, ont)
- return if ont.nil?
+ return if ont.nil?
ont_hash[:id] = ont.id
ont_hash[:type] = ont.viewOf.nil? ? 'ontology' : 'ontology_view'
@@ -173,12 +174,16 @@ def add_fair_score_metrics(ont_hash, ont)
end
def ontology_filters_init(categories, groups)
- @languages = submission_metadata.select { |x| x['@id']['naturalLanguage'] }.first['enforcedValues'].map do |id, name|
+ @languages = submission_metadata.select do |x|
+ x['@id']['naturalLanguage']
+ end.first['enforcedValues'].map do |id, name|
{ 'id' => id, 'name' => name, 'value' => id.split('/').last, 'acronym' => name }
end
- @formalityLevel = submission_metadata.select { |x| x['@id']['hasFormalityLevel'] }.first['enforcedValues'].map do |id, name|
- { 'id' => id, 'name' => name, 'acronym' => name.camelize(:lower), 'value' => name.delete(' ')}
+ @formalityLevel = submission_metadata.select do |x|
+ x['@id']['hasFormalityLevel']
+ end.first['enforcedValues'].map do |id, name|
+ { 'id' => id, 'name' => name, 'acronym' => name.camelize(:lower), 'value' => name.delete(' ') }
end
@isOfType = submission_metadata.select { |x| x['@id']['isOfType'] }.first['enforcedValues'].map do |id, name|
@@ -193,7 +198,7 @@ def ontology_filters_init(categories, groups)
['Sort by upload date', 'creationDate'],
['Sort by release date', 'released'],
['Sort by FAIR score', 'fair'],
- ['Sort by popularity', 'visits'],
+ ['Sort by popularity', 'visits']
]
init_filters(params)
@@ -213,13 +218,15 @@ def ontology_filters_init(categories, groups)
groups: object_filter(groups, :groups),
naturalLanguage: object_filter(@languages, :naturalLanguage),
hasFormalityLevel: object_filter(@formalityLevel, :hasFormalityLevel),
- isOfType: object_filter(@isOfType, :isOfType),
- #missingStatus: object_filter(@missingStatus, :missingStatus)
+ isOfType: object_filter(@isOfType, :isOfType)
+ # missingStatus: object_filter(@missingStatus, :missingStatus)
}
end
def check_id(name_value, objects, name_key)
- selected_category = objects.select { |x| x[name_key].parameterize.underscore.eql?(name_value.parameterize.underscore) }
+ selected_category = objects.select do |x|
+ x[name_key].parameterize.underscore.eql?(name_value.parameterize.underscore)
+ end
selected_category.first && selected_category.first['id']
end
@@ -243,7 +250,6 @@ def count_objects(ontologies)
@filters = ontology_filters_init(@categories, @groups)
object_names = @filters.keys
-
@filters.each do |filter, values|
objects = values.first
objects_count[filter] = objects.map { |v| [v['id'], 0] }.to_h
@@ -260,5 +266,4 @@ def count_objects(ontologies)
end
objects_count
end
-
end
diff --git a/app/controllers/concerns/submission_updater.rb b/app/controllers/concerns/submission_updater.rb
index b98a2fb441..2fd29aecbb 100644
--- a/app/controllers/concerns/submission_updater.rb
+++ b/app/controllers/concerns/submission_updater.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SubmissionUpdater
extend ActiveSupport::Concern
@@ -5,6 +7,7 @@ def submission_from_params(new_submission_hash)
convert_values_to_types(new_submission_hash)
LinkedData::Client::Models::OntologySubmission.new(values: submission_params(new_submission_hash))
end
+
def save_submission(new_submission_hash)
@submission = submission_from_params(new_submission_hash)
@@ -13,7 +16,6 @@ def save_submission(new_submission_hash)
end
def update_submission(new_submission_hash, submission_id)
-
convert_values_to_types(new_submission_hash)
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(new_submission_hash[:ontology]).first
@@ -31,11 +33,12 @@ def update_submission(new_submission_hash, submission_id)
[@submission, @submission.update(values: new_values, cache_refresh_all: false)]
end
- def add_ontologies_to_object(ontologies,object)
+ def add_ontologies_to_object(ontologies, object)
ontologies.each do |ont|
next if object.ontologies.include?(ont)
+
ontology = LinkedData::Client::Models::Ontology.find(ont)
- if object.type.match(/\/([^\/]+)$/)[1] == 'Group'
+ if object.type.match(%r{/([^/]+)$})[1] == 'Group'
ontology.group.push(object.id)
else
ontology.hasDomain.push(object.id)
@@ -44,12 +47,12 @@ def add_ontologies_to_object(ontologies,object)
end
end
- def delete_ontologies_from_object(new_ontologies,old_ontologies,object)
+ def delete_ontologies_from_object(new_ontologies, old_ontologies, object)
new_ontologies = [] if new_ontologies.nil?
ontologies = old_ontologies - new_ontologies
ontologies.each do |ont|
ontology = LinkedData::Client::Models::Ontology.find(ont)
- if object.type.match(/\/([^\/]+)$/)[1] == 'Group'
+ if object.type.match(%r{/([^/]+)$})[1] == 'Group'
ontology.group.delete(object.id)
else
ontology.hasDomain.delete(object.id)
@@ -67,30 +70,29 @@ def update_ontology_summary_only(is_remote = @submission.isRemote)
def convert_values_to_types(new_submission_hash)
unless new_submission_hash[:contact].nil?
- new_submission_hash[:contact] = new_submission_hash[:contact].values unless new_submission_hash[:contact].is_a?(Array)
+ unless new_submission_hash[:contact].is_a?(Array)
+ new_submission_hash[:contact] =
+ new_submission_hash[:contact].values
+ end
new_submission_hash[:contact].delete_if { |c| c[:name].empty? || c[:email].empty? }
end
# Convert metadata that needs to be integer to int
submission_metadata.map do |hash|
- if hash["enforce"].include?("integer")
- if !new_submission_hash[hash["attribute"]].nil? && !new_submission_hash[hash["attribute"]].eql?("")
- new_submission_hash[hash["attribute"].to_s.to_sym] = Integer(new_submission_hash[hash["attribute"].to_s.to_sym])
- end
- end
- if hash["enforce"].include?("boolean") && !new_submission_hash[hash["attribute"]].nil?
- if new_submission_hash[hash["attribute"]].eql?("true")
- new_submission_hash[hash["attribute"].to_s.to_sym] = true
- elsif new_submission_hash[hash["attribute"]].eql?("false")
- new_submission_hash[hash["attribute"].to_s.to_sym] = false
- else
- new_submission_hash[hash["attribute"].to_s.to_sym] = nil
- end
+ if hash['enforce'].include?('integer') && (!new_submission_hash[hash['attribute']].nil? && !new_submission_hash[hash['attribute']].eql?(''))
+ new_submission_hash[hash['attribute'].to_s.to_sym] =
+ Integer(new_submission_hash[hash['attribute'].to_s.to_sym])
end
+ next unless hash['enforce'].include?('boolean') && !new_submission_hash[hash['attribute']].nil?
+
+ new_submission_hash[hash['attribute'].to_s.to_sym] = if new_submission_hash[hash['attribute']].eql?('true')
+ true
+ elsif new_submission_hash[hash['attribute']].eql?('false')
+ false
+ end
end
end
-
def submission_params(params)
attributes = [
:ontology,
@@ -108,24 +110,23 @@ def submission_params(params)
:isRemote,
:pullLocation,
:filePath,
- { contact: [:name, :email] },
+ { contact: %i[name email] },
:homepage,
:documentation,
:publication
]
submission_metadata.each do |m|
+ m_attr = m['attribute'].to_sym
- m_attr = m["attribute"].to_sym
-
- attributes << if m["enforce"].include?("list")
- [{ m_attr => {} }, { m_attr => []}]
+ attributes << if m['enforce'].include?('list')
+ [{ m_attr => {} }, { m_attr => [] }]
else
m_attr
end
end
p = params.permit(attributes.uniq)
- p['pullLocation'] = '' if p['isRemote']&.eql?('3')
+ p['pullLocation'] = '' if p['isRemote'].eql?('3')
p = p.to_h.transform_values do |v|
if v.is_a? Hash
@@ -139,10 +140,14 @@ def submission_params(params)
submission_metadata.each do |m|
m_attr = m['attribute'].to_sym
- if p[m_attr] && m['enforce'].include?('list')
- p[m_attr] = Array(p[m_attr]) unless p[m_attr].is_a?(Array)
- p[m_attr] = p[m_attr].map { |x| x.is_a?(Hash) ? x.values.reject(&:empty?) : x.reject(&:empty?) }.flatten.uniq if m['enforce'].include?('Agent')
- end
+ next unless p[m_attr] && m['enforce'].include?('list')
+
+ p[m_attr] = Array(p[m_attr]) unless p[m_attr].is_a?(Array)
+ next unless m['enforce'].include?('Agent')
+
+ p[m_attr] = p[m_attr].map do |x|
+ x.is_a?(Hash) ? x.values.reject(&:empty?) : x.reject(&:empty?)
+ end.flatten.uniq
end
p
diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb
index b5ffb1eecc..f3263f33ad 100644
--- a/app/controllers/errors_controller.rb
+++ b/app/controllers/errors_controller.rb
@@ -1,5 +1,6 @@
-class ErrorsController < ApplicationController
+# frozen_string_literal: true
+class ErrorsController < ApplicationController
layout :determine_layout
def not_found
@@ -9,5 +10,4 @@ def not_found
def internal_server_error
render status: 500
end
-
end
diff --git a/app/controllers/fair_score_controller.rb b/app/controllers/fair_score_controller.rb
index 9564a5875e..36d2dc8dff 100644
--- a/app/controllers/fair_score_controller.rb
+++ b/app/controllers/fair_score_controller.rb
@@ -1,5 +1,6 @@
-class FairScoreController < ApplicationController
+# frozen_string_literal: true
+class FairScoreController < ApplicationController
helper FairScoreHelper
include FairScoreHelper
def details_html
@@ -31,4 +32,4 @@ def get_fair
raise StandardError, 'Error: load failed'
end
end
-end
\ No newline at end of file
+end
diff --git a/app/controllers/history_controller.rb b/app/controllers/history_controller.rb
index 687839df59..f47304b0f4 100644
--- a/app/controllers/history_controller.rb
+++ b/app/controllers/history_controller.rb
@@ -1,15 +1,16 @@
+# frozen_string_literal: true
+
class HistoryController < ApplicationController
-
- def remove # removes a 'history' tab
- remove_tab(undo_param(params[:ontology]))
- render :text =>"success"
+ # removes a 'history' tab
+ def remove
+ remove_tab(undo_param(params[:ontology]))
+ render text: 'success'
end
-
- def update # updates the 'history' tab to point to the new node
+
+ # updates the 'history' tab to point to the new node
+ def update
ontology = DataAccess.getOntology(params[:ontology])
- update_tab(ontology,params[:concept])
- render :text =>"success"
+ update_tab(ontology, params[:concept])
+ render text: 'success'
end
-
-
end
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index bf1bc3316a..2d957ab616 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -3,11 +3,10 @@
class HomeController < ApplicationController
layout :determine_layout
-
include FairScoreHelper
def index
- @analytics = helpers.ontologies_analytics
+ @analytics = helpers.ontologies_analytics
# Calculate BioPortal summary statistics
@ont_count = @analytics.keys.size
metrics = LinkedData::Client::Models::Metrics.all
@@ -25,18 +24,17 @@ def index
@upload_benefits = [
t('home.benefit1'),
t('home.benefit2'),
- t('home.benefit3'),
+ t('home.benefit3'),
t('home.benefit4'),
t('home.benefit5')
]
@anal_ont_names = []
@anal_ont_numbers = []
- @analytics.sort_by{|ont, count| -count}[0..4].each do |ont, count|
+ @analytics.sort_by { |_ont, count| -count }[0..4].each do |ont, count|
@anal_ont_names << ont
@anal_ont_numbers << count
end
-
end
def render_layout_partial
@@ -64,34 +62,22 @@ def feedback
end
@tags = []
- unless params[:bug].nil? || params[:bug].empty?
- @tags << "Bug"
- end
- unless params[:proposition].nil? || params[:proposition].empty?
- @tags << "Proposition"
- end
- unless params[:question].nil? || params[:question].empty?
- @tags << "Question"
- end
+ @tags << 'Bug' unless params[:bug].nil? || params[:bug].empty?
+ @tags << 'Proposition' unless params[:proposition].nil? || params[:proposition].empty?
+ @tags << 'Question' unless params[:question].nil? || params[:question].empty?
unless params[:ontology_submissions_request].nil? || params[:ontology_submissions_request].empty?
- @tags << "Ontology submissions request"
+ @tags << 'Ontology submissions request'
end
@errors = []
- if params[:name].nil? || params[:name].empty?
- @errors << 'Please include your name'
- end
- if params[:email].nil? || params[:email].length < 1 || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)
+ @errors << 'Please include your name' if params[:name].nil? || params[:name].empty?
+ if params[:email].nil? || params[:email].empty? || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)
@errors << 'Please include your email'
end
- if params[:comment].nil? || params[:comment].empty?
- @errors << 'Please include your comment'
- end
- if using_captcha? && !session[:user]
- unless verify_recaptcha
- @errors << 'Please fill in the proper text from the supplied image'
- end
+ @errors << 'Please include your comment' if params[:comment].nil? || params[:comment].empty?
+ if using_captcha? && !session[:user] && !verify_recaptcha
+ @errors << 'Please fill in the proper text from the supplied image'
end
unless @errors.empty?
@@ -129,7 +115,7 @@ def account
@user_ontologies = @user.customOntology
@user_ontologies ||= []
- onts = LinkedData::Client::Models::Ontology.all(include_views: true);
+ onts = LinkedData::Client::Models::Ontology.all(include_views: true)
@admin_ontologies = onts.select { |o| o.administeredBy.include? @user.id }
projects = LinkedData::Client::Models::Project.all
@@ -148,9 +134,9 @@ def validate_ontology_file
end
def annotator_recommender_form
- if params[:submit_button] == "annotator"
+ if params[:submit_button] == 'annotator'
redirect_to "/annotator?text=#{params[:text]}"
- elsif params[:submit_button] == "recommender"
+ elsif params[:submit_button] == 'recommender'
redirect_to "/recommender?text=#{params[:text]}"
end
end
diff --git a/app/controllers/instances_controller.rb b/app/controllers/instances_controller.rb
index 5d346ef3b0..f7ba67a44b 100644
--- a/app/controllers/instances_controller.rb
+++ b/app/controllers/instances_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class InstancesController < ApplicationController
include InstancesHelper
def index_by_ontology
@@ -12,7 +14,7 @@ def index_by_class
end
def show
- @instance = get_instance_details_json(params[:ontology_id], params[:instance_id], {include: 'all'})
+ @instance = get_instance_details_json(params[:ontology_id], params[:instance_id], { include: 'all' })
render partial: 'instances/instance_details'
end
@@ -22,9 +24,10 @@ def get_ontology(params)
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
ontology_not_found(params[:ontology]) if @ontology.nil?
end
+
# json render + adding next and prev pages links
def custom_render(instances)
- instances[:collection].map! { |i| add_labels_to_print(i, @ontology.acronym)}
+ instances[:collection].map! { |i| add_labels_to_print(i, @ontology.acronym) }
if (instances.respond_to? :links) && (!instances.respond_to? :errors)
instances.links = {
nextPage: get_page_link(instances.nextPage),
@@ -38,16 +41,16 @@ def custom_render(instances)
def get_page_link(page_number)
return nil if page_number.nil?
- if request.query_parameters.has_key?(:page)
+ if request.query_parameters.key?(:page)
request.original_url.gsub(/page=\d+/, "page=#{page_number}")
elsif request.query_parameters.empty?
- request.original_url + "?" + "page=#{page_number}"
+ "#{request.original_url}?page=#{page_number}"
else
- request.original_url + "&" + "page=#{page_number}"
+ "#{request.original_url}&page=#{page_number}"
end
end
def get_query_parameters
- request.query_parameters.slice(:include, :display, :page, :pagesize, :search , :sortby , :order) || {}
+ request.query_parameters.slice(:include, :display, :page, :pagesize, :search, :sortby, :order) || {}
end
-end
\ No newline at end of file
+end
diff --git a/app/controllers/label_xl_controller.rb b/app/controllers/label_xl_controller.rb
index d38fd870c6..c12821c8a4 100644
--- a/app/controllers/label_xl_controller.rb
+++ b/app/controllers/label_xl_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class LabelXlController < ApplicationController
include LabelXlHelper
@@ -16,8 +18,8 @@ def show_label
private
def get_request_label_xl
- params[:id] = params[:id] ? params[:id] : params[:label_xl_id]
- params[:ontology_id] = params[:ontology_id] ? params[:ontology_id] : params[:ontology]
+ params[:id] = params[:id] || params[:label_xl_id]
+ params[:ontology_id] = params[:ontology_id] || params[:ontology]
if params[:id].nil? || params[:id].empty?
render text: 'Error: You must provide a valid label_xl id'
return
@@ -26,5 +28,4 @@ def get_request_label_xl
@ontology_acronym = @ontology.acronym
get_label_xl(@ontology, params[:id])
end
-
end
diff --git a/app/controllers/landscape_controller.rb b/app/controllers/landscape_controller.rb
index c3f81dc9a8..89791b7de1 100644
--- a/app/controllers/landscape_controller.rb
+++ b/app/controllers/landscape_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'action_view'
include ActionView::Helpers::NumberHelper
@@ -7,21 +9,22 @@ class LandscapeController < ApplicationController
include FairScoreHelper
def index
- #@ontologies = LinkedData::Client::Models::Ontology.all(include_views: false)
- #@submissions = LinkedData::Client::Models::OntologySubmission.all(values: params[:submission])
+ # @ontologies = LinkedData::Client::Models::Ontology.all(include_views: false)
+ # @submissions = LinkedData::Client::Models::OntologySubmission.all(values: params[:submission])
# Array with color codes for the pie charts. iterate color_index to change color
- pie_colors_array = ["#2484c1", "#0c6197", "#4daa4b", "#90c469", "#daca61", "#e4a14b", "#e98125", "#cb2121", "#830909", "#923e99", "#ae83d5", "#bf273e", "#ce2aeb", "#bca44a", "#618d1b", "#1ee67b", "#b0ec44", "#a4a0c9", "#322849", "#86f71a", "#d1c87f", "#7d9058", "#44b9b0", "#7c37c0", "#cc9fb1", "#e65414", "#8b6834", "#248838"];
+ pie_colors_array = ['#2484c1', '#0c6197', '#4daa4b', '#90c469', '#daca61', '#e4a14b', '#e98125', '#cb2121',
+ '#830909', '#923e99', '#ae83d5', '#bf273e', '#ce2aeb', '#bca44a', '#618d1b', '#1ee67b', '#b0ec44', '#a4a0c9', '#322849', '#86f71a', '#d1c87f', '#7d9058', '#44b9b0', '#7c37c0', '#cc9fb1', '#e65414', '#8b6834', '#248838']
groups_count_hash = {}
domains_count_hash = {}
# A hash for counting ontologies in size ranges
size_slices_hash = {}
- size_slices_hash["< 100"] = 0
- size_slices_hash["< #{number_with_delimiter(1000, delimiter: " ")}"] = 0
- size_slices_hash["< #{number_with_delimiter(10000, delimiter: " ")}"] = 0
- size_slices_hash["< #{number_with_delimiter(100000, delimiter: " ")}"] = 0
- size_slices_hash["100k+"] = 0
+ size_slices_hash['< 100'] = 0
+ size_slices_hash["< #{number_with_delimiter(1000, delimiter: ' ')}"] = 0
+ size_slices_hash["< #{number_with_delimiter(10_000, delimiter: ' ')}"] = 0
+ size_slices_hash["< #{number_with_delimiter(100_000, delimiter: ' ')}"] = 0
+ size_slices_hash['100k+'] = 0
natural_language_hash = {}
licenseProperty_hash = {}
@@ -41,259 +44,255 @@ def index
ontology_relations_array = []
- ontologyFormatsCount = {"OWL" => 0, "SKOS" => 0, "UMLS" => 0, "OBO" => 0}
+ ontologyFormatsCount = { 'OWL' => 0, 'SKOS' => 0, 'UMLS' => 0, 'OBO' => 0 }
- @metrics_average = [{attr: "numberOfClasses", label: "Number of classes", array: []},
- {attr: "numberOfIndividuals", label: "Number of individuals", array: []},
- {attr: "numberOfProperties", label: "Number of properties", array: []},
- {attr: "maxDepth", label: "Max depth", array: []},
- {attr: "maxChildCount", label: "Max child count", array: []},
- {attr: "averageChildCount", label: "Average child count", array: []},
- {attr: "classesWithOneChild", label: "Classes with one child", array: []},
- {attr: "classesWithMoreThan25Children", label: "Classes with more than 25 children", array: []},
- {attr: "classesWithNoDefinition", label: "Classes with no definition ", array: []},
- {attr: "numberOfAxioms", label: "Number of axioms (triples)", array: []}]
+ @metrics_average = [{ attr: 'numberOfClasses', label: 'Number of classes', array: [] },
+ { attr: 'numberOfIndividuals', label: 'Number of individuals', array: [] },
+ { attr: 'numberOfProperties', label: 'Number of properties', array: [] },
+ { attr: 'maxDepth', label: 'Max depth', array: [] },
+ { attr: 'maxChildCount', label: 'Max child count', array: [] },
+ { attr: 'averageChildCount', label: 'Average child count', array: [] },
+ { attr: 'classesWithOneChild', label: 'Classes with one child', array: [] },
+ { attr: 'classesWithMoreThan25Children', label: 'Classes with more than 25 children',
+ array: [] },
+ { attr: 'classesWithNoDefinition', label: "Classes with no definition\t", array: [] },
+ { attr: 'numberOfAxioms', label: 'Number of axioms (triples)', array: [] }]
# Attributes to include. To avoid to get everything and make it faster
# They are also used to get the value of each property later in the controller
# TODO: define here the attributes you want to retrieve to create visualization
- sub_attributes = [:submissionId, :ontology, :group, :hasDomain, :hasOntologyLanguage, :naturalLanguage, :hasLicense,
- :hasFormalityLevel, :isOfType, :contact, :name, :email, :usedOntologyEngineeringTool]
+ sub_attributes = %i[submissionId ontology group hasDomain hasOntologyLanguage naturalLanguage hasLicense
+ hasFormalityLevel isOfType contact name email usedOntologyEngineeringTool]
- pref_properties_attributes = [:prefLabelProperty, :synonymProperty, :definitionProperty, :authorProperty]
+ pref_properties_attributes = %i[prefLabelProperty synonymProperty definitionProperty authorProperty]
# Be careful, if you add attributes to those lists you will need to add them when generating the JSON for the tag clouds
# org_count_json_cloud and people_count_json_cloud
- contributors_attr_list = [:hasContributor, :hasCreator, :curatedBy]
- org_attr_list = [:fundedBy, :endorsedBy, :publisher]
+ contributors_attr_list = %i[hasContributor hasCreator curatedBy]
+ org_attr_list = %i[fundedBy endorsedBy publisher]
- @relations_array = ["omv:useImports", "door:isAlignedTo", "door:ontologyRelatedTo", "omv:isBackwardCompatibleWith", "omv:isIncompatibleWith", "door:comesFromTheSameDomain", "door:similarTo",
- "door:explanationEvolution", "voaf:generalizes", "door:hasDisparateModelling", "dct:hasPart", "voaf:usedBy", "schema:workTranslation", "schema:translationOfWork"]
+ @relations_array = ['omv:useImports', 'door:isAlignedTo', 'door:ontologyRelatedTo', 'omv:isBackwardCompatibleWith', 'omv:isIncompatibleWith', 'door:comesFromTheSameDomain', 'door:similarTo',
+ 'door:explanationEvolution', 'voaf:generalizes', 'door:hasDisparateModelling', 'dct:hasPart', 'voaf:usedBy', 'schema:workTranslation', 'schema:translationOfWork']
# "omv:hasPriorVersion" has been removed from this list to generate
# We need prefixes to display them, we remove them to call them in the include
- relations_attributes = @relations_array.map {|r| r.to_s.split(":")[1]}
- metrics_attributes = @metrics_average.map {|m| m[:attr]}
+ relations_attributes = @relations_array.map { |r| r.to_s.split(':')[1] }
+ metrics_attributes = @metrics_average.map { |m| m[:attr] }
# Concat all attributes array and generate a string separated with comma for include param
all_attributes = sub_attributes.concat(contributors_attr_list).concat(org_attr_list)
- .concat(relations_attributes).concat(metrics_attributes).concat(pref_properties_attributes).join(",")
-
+ .concat(relations_attributes).concat(metrics_attributes).concat(pref_properties_attributes).join(',')
# Special treatment for includedInDataCatalog: arrays with a lot of different values, so it trigger the SPARQL default
# when we retrieve multiple attr with multiple values in the array, and make the request slower
- data_catalog_submissions = LinkedData::Client::Models::OntologySubmission.all(include_status: "any", include_views: true, display_links: false, display_context: false, include: "includedInDataCatalog")
+ data_catalog_submissions = LinkedData::Client::Models::OntologySubmission.all(include_status: 'any',
+ include_views: true, display_links: false, display_context: false, include: 'includedInDataCatalog')
dataCatalog_count_hash = {}
# Add our Portal to the dataCatalog list
dataCatalog_count_hash[$ORG_SITE] = data_catalog_submissions.length
# Set all data_catalog count to 0
- $DATA_CATALOG_VALUES.map {|uri,name| dataCatalog_count_hash[name] = 0}
+ $DATA_CATALOG_VALUES.map { |_uri, name| dataCatalog_count_hash[name] = 0 }
data_catalog_submissions.each do |catalog_sub|
catalog_sub.includedInDataCatalog.each do |data_catalog|
$DATA_CATALOG_VALUES.each do |uri, name|
- if data_catalog[uri]
- dataCatalog_count_hash[name] += 1
- end
+ dataCatalog_count_hash[name] += 1 if data_catalog[uri]
end
end
end
# Get all latest submissions with the needed attributes (this request can be slow)
- @submissions = LinkedData::Client::Models::OntologySubmission.all(include_status: "any", include_views: true, display_links: false, display_context: false, include: all_attributes)
+ @submissions = LinkedData::Client::Models::OntologySubmission.all(include_status: 'any', include_views: true,
+ display_links: false, display_context: false, include: all_attributes)
# Iterate ontologies to get the submissions with all metadata
@submissions.each do |sub|
ont = sub.ontology
- if !sub.nil?
- # Get hash of natural language use
- if !sub.naturalLanguage.nil? && !sub.naturalLanguage.empty?
- sub.naturalLanguage.each do |sub_lang|
- # replace lexvo URI by lexvo prefix
- prefixed_sub_lang = sub_lang
- if sub_lang.start_with?("http://lexvo.org/id/iso639-3/")
- prefixed_sub_lang = sub_lang.sub("http://lexvo.org/id/iso639-3/", "lexvo:")
- end
- # If lang already in hash then we increment the count of the lang in the hash
- if natural_language_hash.has_key?(prefixed_sub_lang.to_s)
- natural_language_hash[prefixed_sub_lang.to_s]["count"] = natural_language_hash[prefixed_sub_lang.to_s]["count"] + 1
- else
- natural_language_hash[prefixed_sub_lang.to_s] = {}
- natural_language_hash[prefixed_sub_lang.to_s]["count"] = 1
- natural_language_hash[prefixed_sub_lang.to_s]["uri"] = sub_lang
- end
+ next if sub.nil?
+
+ # Get hash of natural language use
+ if !sub.naturalLanguage.nil? && !sub.naturalLanguage.empty?
+ sub.naturalLanguage.each do |sub_lang|
+ next unless sub_lang.is_a?(String)
+
+ # replace lexvo URI by lexvo prefix
+ prefixed_sub_lang = sub_lang
+ if sub_lang.start_with?('http://lexvo.org/id/iso639-3/')
+ prefixed_sub_lang = sub_lang.sub('http://lexvo.org/id/iso639-3/', 'lexvo:')
+ end
+ # If lang already in hash then we increment the count of the lang in the hash
+ if natural_language_hash.key?(prefixed_sub_lang.to_s)
+ natural_language_hash[prefixed_sub_lang.to_s]['count'] =
+ natural_language_hash[prefixed_sub_lang.to_s]['count'] + 1
+ else
+ natural_language_hash[prefixed_sub_lang.to_s] = {}
+ natural_language_hash[prefixed_sub_lang.to_s]['count'] = 1
+ natural_language_hash[prefixed_sub_lang.to_s]['uri'] = sub_lang
end
end
+ end
- licenseProperty_hash = get_used_properties(sub.hasLicense, nil, licenseProperty_hash)
+ licenseProperty_hash = get_used_properties(sub.hasLicense, nil, licenseProperty_hash)
- formalityProperty_hash = get_used_properties(sub.hasFormalityLevel, nil, formalityProperty_hash)
+ formalityProperty_hash = get_used_properties(sub.hasFormalityLevel, nil, formalityProperty_hash)
- isOfTypeProperty_hash = get_used_properties(sub.isOfType, nil, isOfTypeProperty_hash)
+ isOfTypeProperty_hash = get_used_properties(sub.isOfType, nil, isOfTypeProperty_hash)
- # Get the prefLabelProperty used for OWL properties in a hash
- if sub.hasOntologyLanguage.eql?("OWL")
- prefLabelProperty_hash = get_used_properties(sub.prefLabelProperty, "http://www.w3.org/2004/02/skos/core#prefLabel", prefLabelProperty_hash)
+ # Get the prefLabelProperty used for OWL properties in a hash
+ if sub.hasOntologyLanguage.eql?('OWL')
+ prefLabelProperty_hash = get_used_properties(sub.prefLabelProperty,
+ 'http://www.w3.org/2004/02/skos/core#prefLabel', prefLabelProperty_hash)
- synonymProperty_hash = get_used_properties(sub.synonymProperty, "http://www.w3.org/2004/02/skos/core#altLabel", synonymProperty_hash)
+ synonymProperty_hash = get_used_properties(sub.synonymProperty,
+ 'http://www.w3.org/2004/02/skos/core#altLabel', synonymProperty_hash)
- definitionProperty_hash = get_used_properties(sub.definitionProperty, "http://www.w3.org/2004/02/skos/core#definition", definitionProperty_hash)
+ definitionProperty_hash = get_used_properties(sub.definitionProperty,
+ 'http://www.w3.org/2004/02/skos/core#definition', definitionProperty_hash)
- authorProperty_hash = get_used_properties(sub.authorProperty, "http://purl.org/dc/elements/1.1/creator", authorProperty_hash)
- end
-
- get_metrics_for_average(sub)
+ authorProperty_hash = get_used_properties(sub.authorProperty, 'http://purl.org/dc/elements/1.1/creator',
+ authorProperty_hash)
+ end
- # Count the number of classes (individuals for skos by ontologies) to get number of ontologies by slice of size
- if sub.hasOntologyLanguage.eql?("SKOS")
- ontology_size = sub.numberOfIndividuals
+ get_metrics_for_average(sub)
+
+ # Count the number of classes (individuals for skos by ontologies) to get number of ontologies by slice of size
+ ontology_size = if sub.hasOntologyLanguage.eql?('SKOS')
+ sub.numberOfIndividuals
+ else
+ sub.numberOfClasses
+ end
+ unless ontology_size.nil?
+ if ontology_size >= 100_000
+ size_slices_hash['100k+'] += 1
else
- ontology_size = sub.numberOfClasses
- end
- if (!ontology_size.nil?)
- if (ontology_size >= 100000)
- size_slices_hash["100k+"] += 1
- else
- [100, 1000, 10000, 100000].each do |slice_size|
- if (ontology_size < slice_size)
- size_slices_hash["< #{number_with_delimiter(slice_size, delimiter: " ")}"] += 1
- break;
- end
+ [100, 1000, 10_000, 100_000].each do |slice_size|
+ if ontology_size < slice_size
+ size_slices_hash["< #{number_with_delimiter(slice_size, delimiter: ' ')}"] += 1
+ break
end
end
end
+ end
- # Get number of ontologies for each format (for horizontal bar chart)
- ontologyFormatsCount[sub.hasOntologyLanguage] += 1
-
- # Count number of ontologies for each group (bar chart)
- ont.group.each do |group|
- group_acro = group.to_s.split("/")[-1]
- if groups_count_hash.has_key?(group_acro)
- groups_count_hash[group_acro] += 1
- else
- groups_count_hash[group_acro] = 1
- end
- end
+ # Get number of ontologies for each format (for horizontal bar chart)
+ ontologyFormatsCount[sub.hasOntologyLanguage] += 1
- # Count number of ontologies for each domain (bar chart)
- ont.hasDomain.each do |domain|
- domain_acro = domain.to_s.split("/")[-1]
- if domains_count_hash.has_key?(domain_acro)
- domains_count_hash[domain_acro] += 1
- else
- domains_count_hash[domain_acro] = 1
- end
+ # Count number of ontologies for each group (bar chart)
+ ont.group.each do |group|
+ group_acro = group.to_s.split('/')[-1]
+ if groups_count_hash.key?(group_acro)
+ groups_count_hash[group_acro] += 1
+ else
+ groups_count_hash[group_acro] = 1
end
+ end
- # Get the count for usedOntologyEngineeringTool (to create a tag cloud)
- if (engineering_tool_count.has_key?(sub.usedOntologyEngineeringTool))
- engineering_tool_count[sub.usedOntologyEngineeringTool] += 1
+ # Count number of ontologies for each domain (bar chart)
+ ont.hasDomain.each do |domain|
+ domain_acro = domain.to_s.split('/')[-1]
+ if domains_count_hash.key?(domain_acro)
+ domains_count_hash[domain_acro] += 1
else
- engineering_tool_count[sub.usedOntologyEngineeringTool] = 1
+ domains_count_hash[domain_acro] = 1
end
+ end
- # Get people that are mentioned as ontology actors (contact, contributors, creators, curator) to create a tag cloud
- # hasContributor hasCreator contact(explore,name) curatedBy
- contributors_attr_list.each do |contributor_attr|
- contributor_label = sub.send(contributor_attr.to_s).to_s
- if !contributor_label.nil?
- contributors_split = contributor_label.split(",")
- contributors_split.each do |contrib|
- if people_count_hash.has_key?(contrib)
- people_count_hash[contrib][contributor_attr] += 1
- else
- # Create the contributor entry in the Hash and create the attr entries that will be incremented
- people_count_hash[contrib] = {}
- people_count_hash[contrib][:contact] = 0
- contributors_attr_list.each do |create_contributor_attr|
- people_count_hash[contrib][create_contributor_attr] = 0
- end
- people_count_hash[contrib][contributor_attr] += 1
- end
+ # Get the count for usedOntologyEngineeringTool (to create a tag cloud)
+ if engineering_tool_count.key?(sub.usedOntologyEngineeringTool)
+ engineering_tool_count[sub.usedOntologyEngineeringTool] += 1
+ else
+ engineering_tool_count[sub.usedOntologyEngineeringTool] = 1
+ end
+
+ # Get people that are mentioned as ontology actors (contact, contributors, creators, curator) to create a tag cloud
+ # hasContributor hasCreator contact(explore,name) curatedBy
+ contributors_attr_list.each do |contributor_attr|
+ contributor_label = sub.send(contributor_attr.to_s).to_s
+ next if contributor_label.nil?
+
+ contributors_split = contributor_label.split(',')
+ contributors_split.each do |contrib|
+ unless people_count_hash.key?(contrib)
+ # Create the contributor entry in the Hash and create the attr entries that will be incremented
+ people_count_hash[contrib] = {}
+ people_count_hash[contrib][:contact] = 0
+ contributors_attr_list.each do |create_contributor_attr|
+ people_count_hash[contrib][create_contributor_attr] = 0
end
end
+ people_count_hash[contrib][contributor_attr] += 1
end
- sub.contact.each do |contact|
- contributor_label = contact.name
- if !contributor_label.nil?
- if people_count_hash.has_key?(contributor_label)
- people_count_hash[contributor_label][:contact] += 1
- else
- # Create the contrinutor entry in the Hash and create the attr entries that will be incremented
- people_count_hash[contributor_label] = {}
- people_count_hash[contributor_label][:contact] = 0
- contributors_attr_list.each do |create_contributor_attr|
- people_count_hash[contributor_label][create_contributor_attr] = 0
- end
- people_count_hash[contributor_label][:contact] += 1
- end
- people_count_emails[contributor_label] = contact.email if !contact.email.nil?
+ end
+ sub.contact.each do |contact|
+ contributor_label = contact.name
+ next if contributor_label.nil?
+
+ unless people_count_hash.key?(contributor_label)
+ # Create the contrinutor entry in the Hash and create the attr entries that will be incremented
+ people_count_hash[contributor_label] = {}
+ people_count_hash[contributor_label][:contact] = 0
+ contributors_attr_list.each do |create_contributor_attr|
+ people_count_hash[contributor_label][create_contributor_attr] = 0
end
end
+ people_count_hash[contributor_label][:contact] += 1
+ people_count_emails[contributor_label] = contact.email unless contact.email.nil?
+ end
- org_attr_list.each do |org_attr|
- # If the attribute object is not a list we make it a list of the single object we get
- orgs_list = sub.send(org_attr.to_s)
- if !orgs_list.kind_of?(Array)
- orgs_list = [orgs_list]
- end
+ org_attr_list.each do |org_attr|
+ # If the attribute object is not a list we make it a list of the single object we get
+ orgs_list = sub.send(org_attr.to_s)
+ orgs_list = [orgs_list] unless orgs_list.is_a?(Array)
+
+ orgs_list.each do |orgs_comma_list|
+ next unless !orgs_comma_list.nil? &&
+ (orgs_comma_split = orgs_comma_list.split(','))
+
+ orgs_comma_split.each do |org_str|
+ # TODO: handle badly formatted strings and URI
+ org_uri = nil
+ # Check if the organization is actually an URL
+ if org_str =~ /\A#{URI::DEFAULT_PARSER.make_regexp}\z/
+ org_uri = org_str
+ # Remove http, www and last / from URI
+ org_str = org_str.sub('http://', '').sub('https://', '').sub('www.', '')
+ org_str = org_str[0..-2] if org_str.last.eql?('/')
+
+ end
- orgs_list.each do |orgs_comma_list|
- if !orgs_comma_list.nil? &&
- orgs_comma_split = orgs_comma_list.split(",")
- orgs_comma_split.each do |org_str|
- # TODO: handle badly formatted strings and URI
- org_uri = nil
- # Check if the organization is actually an URL
- if org_str =~ /\A#{URI::regexp}\z/
- org_uri = org_str
- # Remove http, www and last / from URI
- org_str = org_str.sub("http://", "").sub("https://", "").sub("www.", "")
- org_str = org_str[0..-2] if org_str.last.eql?("/")
-
- end
-
- if org_count_hash.has_key?(org_str)
- org_count_hash[org_str][org_attr] += 1
- else
- # Create the contrinutor entry in the Hash and create the attr entries that will be incremented
- org_count_hash[org_str] = {}
- org_attr_list.each do |create_org_attr|
- org_count_hash[org_str][create_org_attr] = 0
- end
- org_count_hash[org_str][:uri] = org_uri if !org_uri.nil?
- org_count_hash[org_str][org_attr] += 1
- end
+ unless org_count_hash.key?(org_str)
+ # Create the contrinutor entry in the Hash and create the attr entries that will be incremented
+ org_count_hash[org_str] = {}
+ org_attr_list.each do |create_org_attr|
+ org_count_hash[org_str][create_org_attr] = 0
end
+ org_count_hash[org_str][:uri] = org_uri unless org_uri.nil?
end
+ org_count_hash[org_str][org_attr] += 1
end
end
+ end
- # Get ontology relations between each other (ex: STY isAlignedTo GO)
- @relations_array.each do |relation_attr|
- relation_values = sub.send(relation_attr.to_s.split(":")[1])
- if !relation_values.nil? && !relation_values.empty?
- if !relation_values.kind_of?(Array)
- relation_values = [relation_values]
- end
- relation_values.each do |relation_value|
- target_id = relation_value
- target_in_portal = false
- # if we find our portal URL in the ontology URL, then we just keep the ACRONYM to try to get the ontology.
- if relation_value.include?($UI_URL)
- relation_value = relation_value.split('/').last
- end
- # Use acronym to get ontology from the portal
- target_ont = LinkedData::Client::Models::Ontology.find_by_acronym(relation_value).first
- if target_ont
- target_id = target_ont.acronym
- target_in_portal = true
- end
- ontology_relations_array.push({source: ont.acronym, target: target_id, relation: relation_attr.to_s, targetInPortal: target_in_portal})
- end
+ # Get ontology relations between each other (ex: STY isAlignedTo GO)
+ @relations_array.each do |relation_attr|
+ relation_values = sub.send(relation_attr.to_s.split(':')[1])
+ next unless !relation_values.nil? && !relation_values.empty?
+
+ relation_values = [relation_values] unless relation_values.is_a?(Array)
+ relation_values.each do |relation_value|
+ target_id = relation_value
+ target_in_portal = false
+ # if we find our portal URL in the ontology URL, then we just keep the ACRONYM to try to get the ontology.
+ relation_value = relation_value.split('/').last if relation_value.include?($UI_URL)
+ # Use acronym to get ontology from the portal
+ target_ont = LinkedData::Client::Models::Ontology.find_by_acronym(relation_value).first
+ if target_ont
+ target_id = target_ont.acronym
+ target_in_portal = true
end
+ ontology_relations_array.push({ source: ont.acronym, target: target_id, relation: relation_attr.to_s,
+ targetInPortal: target_in_portal })
end
end
end
@@ -303,7 +302,6 @@ def index
metrics[:average] = (metrics[:array].sum / metrics[:array].size.to_f).round(2)
end
-
notes_people_count_hash = {}
notes_ontologies_count_hash = {}
@@ -311,7 +309,8 @@ def index
reviews = LinkedData::Client::Models::Review.all
reviews.each do |review|
notes_people_count_hash = notes_create_hash_entry(review.creator, :reviews, notes_people_count_hash)
- notes_ontologies_count_hash = notes_create_hash_entry(review.ontologyReviewed, :reviews, notes_ontologies_count_hash)
+ notes_ontologies_count_hash = notes_create_hash_entry(review.ontologyReviewed, :reviews,
+ notes_ontologies_count_hash)
end
projects = LinkedData::Client::Models::Project.all
@@ -336,47 +335,49 @@ def index
notes_ontologies_json_cloud = []
notes_people_json_cloud = []
- notes_people_count_hash.each do |people,hash_counts|
+ notes_people_count_hash.each do |people, hash_counts|
# Random color for each word in the cloud
- colour = "%06x" % (rand * 0xffffff)
+ colour = format('%06x', (rand * 0xffffff))
title_array = []
total_count = 0
- if hash_counts.has_key?(:projects)
+ if hash_counts.key?(:projects)
title_array.push("#{hash_counts[:projects]} projects")
total_count += hash_counts[:projects]
end
- if hash_counts.has_key?(:notes)
+ if hash_counts.key?(:notes)
title_array.push("#{hash_counts[:notes]} notes")
total_count += hash_counts[:notes]
end
- if hash_counts.has_key?(:reviews)
+ if hash_counts.key?(:reviews)
title_array.push("#{hash_counts[:reviews]} reviews")
total_count += hash_counts[:reviews]
end
- if total_count > 0
- notes_people_json_cloud.push({"text"=>people.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_array.join(", ")}, "link" => hash_counts[:uri]})
+ if total_count.positive?
+ notes_people_json_cloud.push({ 'text' => people.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_array.join(', ') }, 'link' => hash_counts[:uri] })
end
end
- notes_ontologies_count_hash.each do |onto,hash_counts|
+ notes_ontologies_count_hash.each do |onto, hash_counts|
# Random color for each word in the cloud
- colour = "%06x" % (rand * 0xffffff)
+ colour = format('%06x', (rand * 0xffffff))
title_array = []
total_count = 0
- if hash_counts.has_key?(:projects)
+ if hash_counts.key?(:projects)
title_array.push("#{hash_counts[:projects]} projects")
total_count += hash_counts[:projects]
end
- if hash_counts.has_key?(:notes)
+ if hash_counts.key?(:notes)
title_array.push("#{hash_counts[:notes]} notes")
total_count += hash_counts[:notes]
end
- if hash_counts.has_key?(:reviews)
+ if hash_counts.key?(:reviews)
title_array.push("#{hash_counts[:reviews]} reviews")
total_count += hash_counts[:reviews]
end
- if total_count > 0
- notes_ontologies_json_cloud.push({"text"=>onto.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_array.join(", ")}, "link" => hash_counts[:uri]})
+ if total_count.positive?
+ notes_ontologies_json_cloud.push({ 'text' => onto.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_array.join(', ') }, 'link' => hash_counts[:uri] })
end
end
@@ -391,157 +392,168 @@ def index
# Get the different people and organizations to generate a tag cloud
people_count_json_cloud = []
- people_count_hash.each do |people,hash_count|
+ people_count_hash.each do |people, hash_count|
# Random color for each word in the cloud
- colour = "%06x" % (rand * 0xffffff)
+ colour = format('%06x', (rand * 0xffffff))
title_array = []
total_count = 0
- if hash_count[:contact] > 0
+ if (hash_count[:contact]).positive?
title_array.push("#{hash_count[:contact]} as contact")
total_count += hash_count[:contact]
end
- if hash_count[:hasContributor] > 0
+ if (hash_count[:hasContributor]).positive?
title_array.push("#{hash_count[:hasContributor]} as contributor")
total_count += hash_count[:hasContributor]
end
- if hash_count[:hasCreator] > 0
+ if (hash_count[:hasCreator]).positive?
title_array.push("#{hash_count[:hasCreator]} as creator")
total_count += hash_count[:hasCreator]
end
- if hash_count[:curatedBy] > 0
+ if (hash_count[:curatedBy]).positive?
title_array.push("#{hash_count[:curatedBy]} as curator")
total_count += hash_count[:curatedBy]
end
- title_str = "Contributions: #{title_array.join(", ")}"
+ title_str = "Contributions: #{title_array.join(', ')}"
if total_count > 1
if people_count_emails[people.to_s].nil?
- people_count_json_cloud.push({"text"=>people.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_str}})
+ people_count_json_cloud.push({ 'text' => people.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_str } })
else
- people_count_json_cloud.push({"text"=>people.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_str}, "link" => "mailto:#{people_count_emails[people.to_s]}"})
+ people_count_json_cloud.push({ 'text' => people.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_str }, 'link' => "mailto:#{people_count_emails[people.to_s]}" })
end
end
end
org_count_json_cloud = []
- org_count_hash.each do |org,hash_count|
+ org_count_hash.each do |org, hash_count|
# Random color for each word in the cloud
- colour = "%06x" % (rand * 0xffffff)
+ colour = format('%06x', (rand * 0xffffff))
title_array = []
total_count = 0
- if hash_count[:publisher] > 0
+ if (hash_count[:publisher]).positive?
title_array.push("published #{hash_count[:publisher]} ontologies")
total_count += hash_count[:publisher]
end
- if hash_count[:fundedBy] > 0
+ if (hash_count[:fundedBy]).positive?
title_array.push("funded #{hash_count[:fundedBy]} ontologies")
total_count += hash_count[:fundedBy]
end
- if hash_count[:endorsedBy] > 0
+ if (hash_count[:endorsedBy]).positive?
title_array.push("endorsed #{hash_count[:endorsedBy]} ontologies")
total_count += hash_count[:endorsedBy]
end
- title_str = "Contributions: #{title_array.join(", ")}"
+ title_str = "Contributions: #{title_array.join(', ')}"
if total_count > 1
- if hash_count.has_key?(:uri)
- org_count_json_cloud.push({"text"=>org.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_str}, "link" => "#{hash_count[:uri]}"})
+ if hash_count.key?(:uri)
+ org_count_json_cloud.push({ 'text' => org.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_str }, 'link' => (hash_count[:uri]).to_s })
else
- org_count_json_cloud.push({"text"=>org.to_s,"weight"=>total_count, "html" => {style: "color: ##{colour};", title: title_str}})
+ org_count_json_cloud.push({ 'text' => org.to_s, 'weight' => total_count,
+ 'html' => { style: "color: ##{colour};", title: title_str } })
end
end
end
engineering_tool_cloud_json = []
- engineering_tool_count.each do |tool,count|
+ engineering_tool_count.each do |tool, count|
# Random color for each word in the cloud
- colour = "%06x" % (rand * 0xffffff)
- engineering_tool_cloud_json.push({"text"=>tool.to_s,"weight"=>count, "html" => {style: "color: ##{colour};", title: "Used to build #{count.to_s} ontologies."}})
+ colour = format('%06x', (rand * 0xffffff))
+ engineering_tool_cloud_json.push({ 'text' => tool.to_s, 'weight' => count,
+ 'html' => { style: "color: ##{colour};", title: "Used to build #{count} ontologies." } })
end
# Push the results in hash formatted for the Javascript lib that will be displaying it
color_index = 0
- natural_language_hash.each do |lang,count_hash|
- natural_language_json_pie.push({"label"=>lang.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ natural_language_hash.each do |lang, count_hash|
+ natural_language_json_pie.push({ 'label' => lang.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 1
end
color_index = 0
- licenseProperty_hash.each do |license,count_hash|
- licenseProperty_json_pie.push({"label"=>license.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ licenseProperty_hash.each do |license, count_hash|
+ licenseProperty_json_pie.push({ 'label' => license.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 1
end
formalityLevelCount = {}
- formalityProperty_hash.each do |formality_level,count_hash|
+ formalityProperty_hash.each do |formality_level, count_hash|
# Generate formalityLevel JSON used to get the bar charts
- formalityLevelCount[formality_level.to_s] = count_hash["count"]
+ formalityLevelCount[formality_level.to_s] = count_hash['count']
end
isOfTypeCount = {}
- isOfTypeProperty_hash.each do |isOfType,count_hash|
- isOfTypeCount[isOfType.to_s] = count_hash["count"]
+ isOfTypeProperty_hash.each do |isOfType, count_hash|
+ isOfTypeCount[isOfType.to_s] = count_hash['count']
end
color_index = 0
- prefLabelProperty_hash.each do |pref_label,count_hash|
- prefLabelProperty_json_pie.push({"label"=>pref_label.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ prefLabelProperty_hash.each do |pref_label, count_hash|
+ prefLabelProperty_json_pie.push({ 'label' => pref_label.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 2
end
color_index = 1
- synonymProperty_hash.each do |synonym,count_hash|
- synonymProperty_json_pie.push({"label"=>synonym.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ synonymProperty_hash.each do |synonym, count_hash|
+ synonymProperty_json_pie.push({ 'label' => synonym.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 2
end
color_index = 0
- definitionProperty_hash.each do |definition,count_hash|
- definitionProperty_json_pie.push({"label"=>definition.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ definitionProperty_hash.each do |definition, count_hash|
+ definitionProperty_json_pie.push({ 'label' => definition.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 2
end
color_index = 1
- authorProperty_hash.each do |author,count_hash|
- authorProperty_json_pie.push({"label"=>author.to_s,"value"=>count_hash["count"], "color"=>pie_colors_array[color_index], "uri"=>count_hash["uri"]})
+ authorProperty_hash.each do |author, count_hash|
+ authorProperty_json_pie.push({ 'label' => author.to_s, 'value' => count_hash['count'],
+ 'color' => pie_colors_array[color_index], 'uri' => count_hash['uri'] })
color_index += 2
end
# Format the ontologyFormatsCount hash as the JSON needed to generate the chart
ontologyFormatsChartJson = { labels: ontologyFormatsCount.keys,
- datasets: [{ label: "Number of ontologies using this format",
- data: ontologyFormatsCount.values,
- backgroundColor: pie_colors_array[3]}] }
+ datasets: [{ label: 'Number of ontologies using this format',
+ data: ontologyFormatsCount.values,
+ backgroundColor: pie_colors_array[3] }] }
isOfTypeChartJson = { labels: isOfTypeCount.keys,
- datasets: [{ label: "Number of ontologies of this ontology type",
- data: isOfTypeCount.values,
- backgroundColor: pie_colors_array[0]}] }
+ datasets: [{ label: 'Number of ontologies of this ontology type',
+ data: isOfTypeCount.values,
+ backgroundColor: pie_colors_array[0] }] }
formalityLevelChartJson = { labels: formalityLevelCount.keys,
- datasets: [{ label: "Number of ontologies of this formality level",
- data: formalityLevelCount.values,
- backgroundColor: pie_colors_array[2]}] }
+ datasets: [{ label: 'Number of ontologies of this formality level',
+ data: formalityLevelCount.values,
+ backgroundColor: pie_colors_array[2] }] }
dataCatalogChartJson = { labels: dataCatalog_count_hash.keys,
- datasets: [{ label: "Number of ontologies in this catalog", data: dataCatalog_count_hash.values,
- backgroundColor: pie_colors_array[5]}] }
+ datasets: [{ label: 'Number of ontologies in this catalog', data: dataCatalog_count_hash.values,
+ backgroundColor: pie_colors_array[5] }] }
# Format the groupOntologiesCount hash as the JSON needed to generate the chart
groupCountChartJson = { labels: groups_count_hash.keys,
- datasets: [{ label: "Number of ontologies", data: groups_count_hash.values,
- backgroundColor: pie_colors_array[3]}] }
+ datasets: [{ label: 'Number of ontologies', data: groups_count_hash.values,
+ backgroundColor: pie_colors_array[3] }] }
domainCountChartJson = { labels: domains_count_hash.keys,
- datasets: [{ label: "Number of ontologies", data: domains_count_hash.values,
- backgroundColor: pie_colors_array[4]}] }
+ datasets: [{ label: 'Number of ontologies', data: domains_count_hash.values,
+ backgroundColor: pie_colors_array[4] }] }
# Format the groupOntologiesCount hash as the JSON needed to generate the chart
sizeSlicesChartJson = { labels: size_slices_hash.keys,
- datasets: [{ label: "Number of ontologies with a class count in this range",
- data: size_slices_hash.values,
- backgroundColor: pie_colors_array[2]}] }
+ datasets: [{ label: 'Number of ontologies with a class count in this range',
+ data: size_slices_hash.values,
+ backgroundColor: pie_colors_array[2] }] }
# Also pass groups and hasDomain name to resolve it and better label of bar charts
- groups = LinkedData::Client::Models::Group.all(include: "acronym,name,description")
- domains = LinkedData::Client::Models::Category.all(include: "acronym,name,description")
+ groups = LinkedData::Client::Models::Group.all(include: 'acronym,name,description')
+ domains = LinkedData::Client::Models::Category.all(include: 'acronym,name,description')
groups_info_hash = {}
groups.each do |group|
@@ -550,7 +562,9 @@ def index
groups_info_hash[group.acronym][:name] = group.name
groups_info_hash[group.acronym][:description] = []
# Slice the description in 6 words string to avoid too long sentence in the bar chart tooltip in js
- group.description.split(" ").each_slice(6) {|slice| groups_info_hash[group.acronym][:description].push(slice.join(" ")) }
+ group.description.split(' ').each_slice(6) do |slice|
+ groups_info_hash[group.acronym][:description].push(slice.join(' '))
+ end
end
domains_info_hash = {}
@@ -560,61 +574,58 @@ def index
domains_info_hash[domain.acronym][:name] = domain.name
domains_info_hash[domain.acronym][:description] = []
# Slice the description in 6 words string to avoid too long sentence in the bar chart tooltip in js
- domain.description.split(" ").each_slice(6) {|slice| domains_info_hash[domain.acronym][:description].push(slice.join(" ")) }
+ domain.description.split(' ').each_slice(6) do |slice|
+ domains_info_hash[domain.acronym][:description].push(slice.join(' '))
+ end
end
@landscape_data = {
- people_count_json_cloud: people_count_json_cloud,
- org_count_json_cloud: org_count_json_cloud,
- engineering_tool_cloud_json: engineering_tool_cloud_json,
- notes_ontologies_json_cloud: notes_ontologies_json_cloud,
- notes_people_json_cloud: notes_people_json_cloud,
- natural_language_json_pie: natural_language_json_pie,
- licenseProperty_json_pie: licenseProperty_json_pie,
- ontology_relations_array: ontology_relations_array,
- prefLabelProperty_json_pie: prefLabelProperty_json_pie,
- synonymProperty_json_pie: synonymProperty_json_pie,
- definitionProperty_json_pie: definitionProperty_json_pie,
- authorProperty_json_pie: authorProperty_json_pie,
- ontologyFormatsChartJson: ontologyFormatsChartJson,
- isOfTypeChartJson: isOfTypeChartJson,
- formalityLevelChartJson: formalityLevelChartJson,
- dataCatalogChartJson: dataCatalogChartJson,
- groupCountChartJson: groupCountChartJson,
- groupsInfoHash: groups_info_hash,
- domainCountChartJson: domainCountChartJson,
- domainsInfoHash: domains_info_hash,
- sizeSlicesChartJson: sizeSlicesChartJson
+ people_count_json_cloud: people_count_json_cloud,
+ org_count_json_cloud: org_count_json_cloud,
+ engineering_tool_cloud_json: engineering_tool_cloud_json,
+ notes_ontologies_json_cloud: notes_ontologies_json_cloud,
+ notes_people_json_cloud: notes_people_json_cloud,
+ natural_language_json_pie: natural_language_json_pie,
+ licenseProperty_json_pie: licenseProperty_json_pie,
+ ontology_relations_array: ontology_relations_array,
+ prefLabelProperty_json_pie: prefLabelProperty_json_pie,
+ synonymProperty_json_pie: synonymProperty_json_pie,
+ definitionProperty_json_pie: definitionProperty_json_pie,
+ authorProperty_json_pie: authorProperty_json_pie,
+ ontologyFormatsChartJson: ontologyFormatsChartJson,
+ isOfTypeChartJson: isOfTypeChartJson,
+ formalityLevelChartJson: formalityLevelChartJson,
+ dataCatalogChartJson: dataCatalogChartJson,
+ groupCountChartJson: groupCountChartJson,
+ groupsInfoHash: groups_info_hash,
+ domainCountChartJson: domainCountChartJson,
+ domainsInfoHash: domains_info_hash,
+ sizeSlicesChartJson: sizeSlicesChartJson
}.to_json.html_safe
-
end
private
+
# For notes takes the hash and create the entry if not already existing
# To create hash like this: {"user1": {"reviews": 3, "notes": 4, "projects": 4}}
def notes_create_hash_entry(uri_id, notes_type, hash)
id = uri_id.split('/').last
- if !hash.has_key?(id)
- hash[id] = {uri: uri_id}
- end
- if !hash[id].has_key?(notes_type)
+ hash[id] = { uri: uri_id } unless hash.key?(id)
+ if !hash[id].key?(notes_type)
hash[id][notes_type] = 1
else
hash[id][notes_type] += 1
end
- return hash
+ hash
end
-
##
# Add metrics metadata from the param sub to the @metrics_average var to get the average for each metrics
def get_metrics_for_average(sub)
# Adding metrics to their arrays
@metrics_average.each do |metrics|
- if !sub.send(metrics[:attr]).nil?
- metrics[:array].push(sub.send(metrics[:attr]))
- end
+ metrics[:array].push(sub.send(metrics[:attr])) unless sub.send(metrics[:attr]).nil?
end
end
@@ -624,9 +635,8 @@ def get_metrics_for_average(sub)
def get_used_properties(attr_value, default_property, property_hash)
if attr_value.nil? || attr_value.empty?
# if property null then we increment the default value
- if default_property.nil?
- return property_hash
- end
+ return property_hash if default_property.nil?
+
attr_value = default_property
else
attr_value = attr_value.to_s
@@ -637,18 +647,18 @@ def get_used_properties(attr_value, default_property, property_hash)
RESOLVE_NAMESPACE.each do |prefix, namespace|
if attr_value.start_with?(namespace)
prefixed_attr_value = attr_value.sub(namespace, "#{prefix}:")
- break;
+ break
end
end
# If attribute value property already in hash then we increment the count of the property in the hash
- if property_hash.has_key?(prefixed_attr_value)
- property_hash[prefixed_attr_value]["count"] += 1
+ if property_hash.key?(prefixed_attr_value)
+ property_hash[prefixed_attr_value]['count'] += 1
else
property_hash[prefixed_attr_value] = {}
- property_hash[prefixed_attr_value]["count"] = 1
- property_hash[prefixed_attr_value]["uri"] = attr_value
+ property_hash[prefixed_attr_value]['count'] = 1
+ property_hash[prefixed_attr_value]['uri'] = attr_value
end
- return property_hash
+ property_hash
end
end
diff --git a/app/controllers/language_controller.rb b/app/controllers/language_controller.rb
index ed1ec7c79d..dde8656a15 100644
--- a/app/controllers/language_controller.rb
+++ b/app/controllers/language_controller.rb
@@ -1,21 +1,21 @@
-class LanguageController < ApplicationController
-
- # set locale to the language selected by the user
- def set_locale_language
- language = params[:language].strip.downcase.to_sym
- supported_languages = I18n.available_locales
+# frozen_string_literal: true
- if language
- if supported_languages.include?(language)
- cookies.permanent[:locale] = language
- else
- # in case we want to show a message if the language is not available
- flash.now[:notice] = "#{language} translation not available"
- logger.error flash.now[:notice]
- end
- end
+class LanguageController < ApplicationController
+ # set locale to the language selected by the user
+ def set_locale_language
+ language = params[:language].strip.downcase.to_sym
+ supported_languages = I18n.available_locales
- redirect_to request.referer || root_path
+ if language
+ if supported_languages.include?(language)
+ cookies.permanent[:locale] = language
+ else
+ # in case we want to show a message if the language is not available
+ flash.now[:notice] = "#{language} translation not available"
+ logger.error flash.now[:notice]
+ end
end
+ redirect_to request.referer || root_path
+ end
end
diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb
index aa50c31b9a..9cbc2b66e0 100755
--- a/app/controllers/login_controller.rb
+++ b/app/controllers/login_controller.rb
@@ -1,5 +1,6 @@
-class LoginController < ApplicationController
+# frozen_string_literal: true
+class LoginController < ApplicationController
layout :determine_layout
def index
@@ -7,7 +8,7 @@ def index
if params[:redirect]
# Get the original, encoded redirect
uri = URI.parse(request.url)
- orig_params = Hash[uri.query.split("&").map {|e| e.split("=",2)}].symbolize_keys
+ orig_params = Hash[uri.query.split('&').map { |e| e.split('=', 2) }].symbolize_keys
session[:redirect] = orig_params[:redirect]
else
session[:redirect] = request.referer
@@ -17,53 +18,48 @@ def index
# logs in a user
def create
@errors = validate(params[:user])
- if @errors.size < 1
+ if @errors.empty?
logged_in_user = LinkedData::Client::Models::User.authenticate(params[:user][:username], params[:user][:password])
if logged_in_user && !logged_in_user.errors
login(logged_in_user)
- redirect = "/"
-
- if session[:redirect]
- redirect = CGI.unescape(session[:redirect])
- end
+ redirect = '/'
+ redirect = CGI.unescape(session[:redirect]) if session[:redirect]
redirect_to redirect
else
- @errors << "Invalid account name/password combination"
- render :action => 'index'
+ @errors << 'Invalid account name/password combination'
+ render action: 'index'
end
else
- render :action => 'index'
+ render action: 'index'
end
end
-
def create_omniauth
auth_data = request.env['omniauth.auth']
auth_code = auth_data.credentials.token
token_provider = helpers.omniauth_token_provider(params[:provider])
- logged_in_user = LinkedData::Client::HTTP.post("#{LinkedData::Client.settings.rest_url}/users/authenticate", { access_token: auth_code , token_provider: token_provider})
+ logged_in_user = LinkedData::Client::HTTP.post("#{LinkedData::Client.settings.rest_url}/users/authenticate",
+ { access_token: auth_code, token_provider: token_provider })
if logged_in_user && !logged_in_user.errors
login(logged_in_user)
- redirect = "/"
+ redirect = '/'
- if session[:redirect]
- redirect = CGI.unescape(session[:redirect])
- end
+ redirect = CGI.unescape(session[:redirect]) if session[:redirect]
redirect_to redirect
else
- @errors = ["#{params[:provider]} authentication failed"]
- render :action => 'index'
+ @errors = ["#{params[:provider]} authentication failed"]
+ render action: 'index'
end
end
# Login as the provided username (only for admin users)
def login_as
- unless session[:user] && session[:user].admin?
- redirect_to "/"
+ unless session[:user]&.admin?
+ redirect_to '/'
return
end
@@ -76,8 +72,8 @@ def login_as
session[:user].apikey = session[:admin_user].apikey
end
- #redirect_to request.referer rescue redirect_to "/"
- redirect_to "/"
+ # redirect_to request.referer rescue redirect_to "/"
+ redirect_to '/'
end
# logs out a user
@@ -86,32 +82,30 @@ def destroy
old_user = session[:user]
session[:user] = session[:admin_user]
session.delete(:admin_user)
- flash[:success] = "Logged out #{old_user.username} , returned to #{session[:user].username} ".html_safe
+ flash[:success] =
+ "Logged out #{old_user.username} , returned to #{session[:user].username} ".html_safe
else
session[:user] = nil
- flash[:success] = "You have successfully logged out"
+ flash[:success] = 'You have successfully logged out'
end
- redirect_to request.referer || "/"
+ redirect_to request.referer || '/'
end
- def lost_password
- end
-
- def lost_password_success
- end
+ def lost_password; end
+ def lost_password_success; end
# Sends a new password to the user
def send_pass
username = params[:user][:account_name]
email = params[:user][:email]
- resp = LinkedData::Client::HTTP.post("/users/create_reset_password_token", {username: username, email: email})
+ resp = LinkedData::Client::HTTP.post('/users/create_reset_password_token', { username: username, email: email })
if resp.nil?
- redirect_to "/lost_pass_success"
+ redirect_to '/lost_pass_success'
else
- flash[:notice] = resp.errors.first + ". Please try again."
- redirect_to "/lost_pass"
+ flash[:notice] = "#{resp.errors.first}. Please try again."
+ redirect_to '/lost_pass'
end
end
@@ -119,14 +113,14 @@ def reset_password
username = params[:un]
email = params[:em]
token = params[:tk]
- @user = LinkedData::Client::HTTP.post("/users/reset_password", {username: username, email: email, token: token})
+ @user = LinkedData::Client::HTTP.post('/users/reset_password', { username: username, email: email, token: token })
if @user.is_a?(LinkedData::Client::Models::User)
@user.validate_password = true
login(@user)
- render "users/edit"
+ render 'users/edit'
else
- flash[:notice] = @user.errors.first + ". Please reset your password again."
- redirect_to "/lost_pass"
+ flash[:notice] = "#{@user.errors.first}. Please reset your password again."
+ redirect_to '/lost_pass'
end
end
@@ -134,24 +128,19 @@ def reset_password
def login(user)
return unless user
+
session[:user] = user
- custom_ontologies_text = session[:user].customOntology && !session[:user].customOntology.empty? ? "The display is now based on your Custom Ontology Set ." : ""
- notice = "Welcome " + user.username.to_s + " ! " + custom_ontologies_text
+ custom_ontologies_text = session[:user].customOntology && !session[:user].customOntology.empty? ? "The display is now based on your Custom Ontology Set ." : ''
+ notice = "Welcome #{user.username} ! #{custom_ontologies_text}"
flash[:success] = notice.html_safe
end
def validate(params)
- errors=[]
+ errors = []
- if params[:username].nil? || params[:username].length <1
- errors << "Please enter an account name"
- end
- if params[:password].nil? || params[:password].length <1
- errors << "Please enter a password"
- end
+ errors << 'Please enter an account name' if params[:username].nil? || params[:username].empty?
+ errors << 'Please enter a password' if params[:password].nil? || params[:password].empty?
- return errors
+ errors
end
-
-
end
diff --git a/app/controllers/mappings_controller.rb b/app/controllers/mappings_controller.rb
index b8baeda3a7..c5361be2fd 100644
--- a/app/controllers/mappings_controller.rb
+++ b/app/controllers/mappings_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'cgi'
class MappingsController < ApplicationController
@@ -7,15 +9,15 @@ class MappingsController < ApplicationController
include MappingsHelper
include TurboHelper
layout :determine_layout
- before_action :authorize_and_redirect, only: [:create, :new, :destroy]
+ before_action :authorize_and_redirect, only: %i[create new destroy]
- EXTERNAL_URL_PARAM_STR = "mappings:external"
- INTERPORTAL_URL_PARAM_STR = "interportal:"
+ EXTERNAL_URL_PARAM_STR = 'mappings:external'
+ INTERPORTAL_URL_PARAM_STR = 'interportal:'
INTERPORTAL_HASH = $INTERPORTAL_HASH ||= {}
def index
- ontology_list = LinkedData::Client::Models::Ontology.all.select { |o| !o.summaryOnly }
+ ontology_list = LinkedData::Client::Models::Ontology.all.reject(&:summaryOnly)
ontologies_mapping_count = LinkedData::Client::HTTP.get("#{MAPPINGS_URL}/statistics/ontologies")
ontologies_hash = {}
ontology_list.each do |ontology|
@@ -32,16 +34,24 @@ def index
# Adding external and interportal mappings to the dropdown list
if ontology_acronym.to_s == EXTERNAL_MAPPINGS_GRAPH
mapping_count = ontologies_mapping_count[ontology_acronym.to_s] || 0
- select_text = "External Mappings (#{number_with_delimiter(mapping_count, delimiter: ',')})" if mapping_count >= 0
+ if mapping_count >= 0
+ select_text = "External Mappings (#{number_with_delimiter(mapping_count,
+ delimiter: ',')})"
+ end
ontology_acronym = EXTERNAL_URL_PARAM_STR
elsif ontology_acronym.to_s.start_with?(INTERPORTAL_MAPPINGS_GRAPH)
mapping_count = ontologies_mapping_count[ontology_acronym.to_s] || 0
- select_text = "Interportal Mappings - #{ontology_acronym.to_s.split("/")[-1].upcase} (#{number_with_delimiter(mapping_count, delimiter: ',')})" if mapping_count >= 0
- ontology_acronym = INTERPORTAL_URL_PARAM_STR + ontology_acronym.to_s.split("/")[-1]
+ if mapping_count >= 0
+ select_text = "Interportal Mappings - #{ontology_acronym.to_s.split('/')[-1].upcase} (#{number_with_delimiter(
+ mapping_count, delimiter: ','
+ )})"
+ end
+ ontology_acronym = INTERPORTAL_URL_PARAM_STR + ontology_acronym.to_s.split('/')[-1]
else
ontology = ontologies_hash[ontology_acronym.to_s]
mapping_count = ontologies_mapping_count[ontology_acronym] || 0
- next unless ontology && mapping_count > 0
+ next unless ontology && mapping_count.positive?
+
select_text = "#{ontology.name} - #{ontology.acronym} (#{number_with_delimiter(mapping_count, delimiter: ',')})"
end
@options[select_text] = ontology_acronym
@@ -59,21 +69,21 @@ def count
def loader
@example_code = [{
- "classes": ["http://bioontology.org/ontologies/BiomedicalResourceOntology.owl#Image_Algorithm",
- "http://purl.org/incf/ontology/Computational_Neurosciences/cno_alpha.owl#cno_0000202"],
-
- "name": 'This is the mappings produced to test the bulk load',
- "source": 'https://w3id.org/semapv/LexicalMatching',
- "comment": 'mock data',
- "relation": [
- 'http://www.w3.org/2002/07/owl#subClassOf'
- ],
- "subject_source_id": 'http://bioontology.org/ontologies/BiomedicalResources.owl',
- "object_source_id": 'http://purl.org/incf/ontology/Computational_Neurosciences/cno_alpha.owl',
- "source_name": 'https://w3id.org/sssom/mapping/tests/data/basic.tsv',
- "source_contact_info": 'orcid:1234,orcid:5678',
- "date": '2020-05-30'
- }]
+ "classes": ['http://bioontology.org/ontologies/BiomedicalResourceOntology.owl#Image_Algorithm',
+ 'http://purl.org/incf/ontology/Computational_Neurosciences/cno_alpha.owl#cno_0000202'],
+
+ "name": 'This is the mappings produced to test the bulk load',
+ "source": 'https://w3id.org/semapv/LexicalMatching',
+ "comment": 'mock data',
+ "relation": [
+ 'http://www.w3.org/2002/07/owl#subClassOf'
+ ],
+ "subject_source_id": 'http://bioontology.org/ontologies/BiomedicalResources.owl',
+ "object_source_id": 'http://purl.org/incf/ontology/Computational_Neurosciences/cno_alpha.owl',
+ "source_name": 'https://w3id.org/sssom/mapping/tests/data/basic.tsv',
+ "source_contact_info": 'orcid:1234,orcid:5678',
+ "date": '2020-05-30'
+ }]
render partial: 'mappings/bulk_loader/loader'
end
@@ -99,7 +109,6 @@ def show
respond_to do |format|
format.html { render 'mappings/edit', layout: false }
end
-
end
def show_mappings
@@ -111,9 +120,9 @@ def show_mappings
if @ontology.nil?
ontology_acronym = params[:id]
if params[:id] == EXTERNAL_URL_PARAM_STR
- @ontology_name = "External Mappings"
+ @ontology_name = 'External Mappings'
elsif params[:id].start_with?(INTERPORTAL_URL_PARAM_STR)
- @ontology_name = params[:id].sub(":", " - ")
+ @ontology_name = params[:id].sub(':', ' - ')
end
else
ontology_acronym = @ontology.acronym
@@ -122,10 +131,10 @@ def show_mappings
if @target_ontology.nil?
if params[:target] == EXTERNAL_MAPPINGS_GRAPH
target_acronym = EXTERNAL_URL_PARAM_STR
- @target_ontology_name = "External Mappings"
+ @target_ontology_name = 'External Mappings'
elsif params[:target].start_with?(INTERPORTAL_MAPPINGS_GRAPH)
- target_acronym = "#{INTERPORTAL_URL_PARAM_STR}:#{params[:target].split("/")[-1]}"
- @target_ontology_name = "Interportal - #{params[:target].split("/")[-1].upcase}"
+ target_acronym = "#{INTERPORTAL_URL_PARAM_STR}:#{params[:target].split('/')[-1]}"
+ @target_ontology_name = "Interportal - #{params[:target].split('/')[-1].upcase}"
end
else
target_acronym = @target_ontology.acronym
@@ -134,7 +143,7 @@ def show_mappings
ontologies = [ontology_acronym, target_acronym]
- @mapping_pages = LinkedData::Client::HTTP.get("#{MAPPINGS_URL}", { page: page, ontologies: ontologies.join(',') })
+ @mapping_pages = LinkedData::Client::HTTP.get(MAPPINGS_URL.to_s, { page: page, ontologies: ontologies.join(',') })
@mappings = @mapping_pages.collection
@delete_mapping_permission = check_delete_mapping_permission(@mappings)
@@ -148,7 +157,8 @@ def show_mappings
total_results = @mapping_pages.pageCount * @mapping_pages.collection.length
# This converts the mappings into an object that can be used with the pagination plugin
- @page_results = WillPaginate::Collection.create(@mapping_pages.page, @mapping_pages.collection.length, total_results) do |pager|
+ @page_results = WillPaginate::Collection.create(@mapping_pages.page, @mapping_pages.collection.length,
+ total_results) do |pager|
pager.replace(@mapping_pages.collection)
end
@@ -163,10 +173,9 @@ def get_concept_table
@delete_mapping_permission = check_delete_mapping_permission(@mappings)
render turbo_stream: [
- replace('mapping_count') { "#{@mappings.size}" },
+ replace('mapping_count') { @mappings.size.to_s },
replace('concept_mappings', partial: 'mappings/concept_mappings')
]
-
end
def new
@@ -220,12 +229,12 @@ def update
else
render_turbo_stream(
alert_success { 'Mapping updated' },
- replace(@mapping.id.split('/').last, partial: 'show_line', locals: { map: request_mapping, concept: @concept })
+ replace(@mapping.id.split('/').last, partial: 'show_line',
+ locals: { map: request_mapping, concept: @concept })
)
end
end
end
-
end
def destroy
@@ -253,7 +262,6 @@ def destroy
end
format.html { render json: { success: success_text, error: error } }
end
-
end
private
@@ -294,13 +302,13 @@ def mapping_form(mapping: nil)
end
@mapping_relation_options = [
- ["Identical (skos:exactMatch)", "http://www.w3.org/2004/02/skos/core#exactMatch"],
- ["Similar (skos:closeMatch)", "http://www.w3.org/2004/02/skos/core#closeMatch"],
- ["Related (skos:relatedMatch)", "http://www.w3.org/2004/02/skos/core#relatedMatch"],
- ["Broader (skos:broadMatch)", "http://www.w3.org/2004/02/skos/core#broadMatch"],
- ["Narrower (skos:narrowMatch)", "http://www.w3.org/2004/02/skos/core#narrowMatch"],
- ["Translation (gold:translation)", "http://purl.org/linguistics/gold/translation"],
- ["Free Translation (gold:freeTranslation)", "http://purl.org/linguistics/gold/freeTranslation"]
+ ['Identical (skos:exactMatch)', 'http://www.w3.org/2004/02/skos/core#exactMatch'],
+ ['Similar (skos:closeMatch)', 'http://www.w3.org/2004/02/skos/core#closeMatch'],
+ ['Related (skos:relatedMatch)', 'http://www.w3.org/2004/02/skos/core#relatedMatch'],
+ ['Broader (skos:broadMatch)', 'http://www.w3.org/2004/02/skos/core#broadMatch'],
+ ['Narrower (skos:narrowMatch)', 'http://www.w3.org/2004/02/skos/core#narrowMatch'],
+ ['Translation (gold:translation)', 'http://purl.org/linguistics/gold/translation'],
+ ['Free Translation (gold:freeTranslation)', 'http://purl.org/linguistics/gold/freeTranslation']
]
@mapping_name = mapping.process&.name
@mapping_comment = mapping.process&.comment
@@ -341,9 +349,7 @@ def request_mapping
def valid_values?(values)
errors = []
- if values[:classes].reject(&:blank?).size != 2
- errors << 'Source and target concepts need to be specified'
- end
+ errors << 'Source and target concepts need to be specified' if values[:classes].reject(&:blank?).size != 2
errors
end
end
diff --git a/app/controllers/ncbo_annotatorplus_controller.rb b/app/controllers/ncbo_annotatorplus_controller.rb
index d6a418a304..0fcb9caeb4 100644
--- a/app/controllers/ncbo_annotatorplus_controller.rb
+++ b/app/controllers/ncbo_annotatorplus_controller.rb
@@ -1,6 +1,8 @@
+# frozen_string_literal: true
+
class NcboAnnotatorplusController < ApplicationController
layout :determine_layout
-
+
before_action :check_ncbo_annotatorplus_enabled
NCBO_ANNOTATOR_URI = $NCBO_ANNOTATOR_URL
@@ -11,91 +13,95 @@ def index
@semantic_groups_for_select = []
@semantic_types ||= get_semantic_types
@sem_type_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
- @semantic_groups ||= {"ACTI" => "Activities & Behaviors", "ANAT" => "Anatomy", "CHEM" => "Chemicals & Drugs","CONC" => "Concepts & Ideas",
- "DEVI" => "Devices", "DISO" => "Disorders", "GENE" => "Genes & Molecular Sequences", "GEOG" => "Geographic Areas", "LIVB" => "Living Beings",
- "OBJC" => "Objects", "OCCU" => "Occupations", "ORGA" => "Organizations", "PHEN" => "Phenomena", "PHYS" => "Physiology","PROC" => "Procedures"}
+ @semantic_groups ||= { 'ACTI' => 'Activities & Behaviors', 'ANAT' => 'Anatomy', 'CHEM' => 'Chemicals & Drugs', 'CONC' => 'Concepts & Ideas',
+ 'DEVI' => 'Devices', 'DISO' => 'Disorders', 'GENE' => 'Genes & Molecular Sequences', 'GEOG' => 'Geographic Areas', 'LIVB' => 'Living Beings',
+ 'OBJC' => 'Objects', 'OCCU' => 'Occupations', 'ORGA' => 'Organizations', 'PHEN' => 'Phenomena', 'PHYS' => 'Physiology', 'PROC' => 'Procedures' }
@semantic_types.each_pair do |code, label|
@semantic_types_for_select << ["#{label} (#{code})", code]
end
@semantic_groups.each_pair do |group, label|
@semantic_groups_for_select << ["#{label} (#{group})", group]
end
- @semantic_types_for_select.sort! {|a,b| a[0] <=> b[0]}
- @semantic_groups_for_select.sort! {|a,b| a[0] <=> b[0]}
- @recognizers = parse_json(REST_URI + "/annotator/recognizers")
+ @semantic_types_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @semantic_groups_for_select.sort! { |a, b| a[0] <=> b[0] }
+ @recognizers = parse_json("#{REST_URI}/annotator/recognizers")
@annotator_ontologies = LinkedData::Client::Models::Ontology.all
@ontologies_for_select = get_ontologies_for_select
end
-
def create
params[:mappings] ||= []
params[:max_level] ||= 0
params[:ontologies] ||= []
params[:semantic_types] ||= []
params[:semantic_groups] ||= []
- text_to_annotate = params[:text].strip.gsub("\r\n", " ").gsub("\n", " ")
-
- options = { :ontologies => params[:ontologies],
- :class_hierarchy_max_level => params[:class_hierarchy_max_level].to_i,
- :expand_class_hierarchy => params[:class_hierarchy_max_level].to_i > 0,
- :semantic_types => params[:semantic_types],
- :semantic_groups => params[:semantic_groups],
- :mappings => params[:mappings],
- :longest_only => params[:longest_only],
- :exclude_numbers => params[:exclude_numbers] ||= "false", # service default is false
- :whole_word_only => params[:whole_word_only] ||= "true", # service default is true
- :exclude_synonyms => params[:exclude_synonyms] ||= "false", # service default is false
- :fast_context => params[:fast_context] ||= "false", # service default is false
- :score => params[:score],
- :score_threshold => params[:score_threshold] ||=-1,
- :confidence_threshold => params[:confidence_threshold] ||=-1,
- :ncbo_slice => params[:ncbo_slice] || ''
- }
+ text_to_annotate = params[:text].strip.gsub("\r\n", ' ').gsub("\n", ' ')
+
+ options = { ontologies: params[:ontologies],
+ class_hierarchy_max_level: params[:class_hierarchy_max_level].to_i,
+ expand_class_hierarchy: params[:class_hierarchy_max_level].to_i.positive?,
+ semantic_types: params[:semantic_types],
+ semantic_groups: params[:semantic_groups],
+ mappings: params[:mappings],
+ longest_only: params[:longest_only],
+ exclude_numbers: params[:exclude_numbers] ||= 'false', # service default is false
+ whole_word_only: params[:whole_word_only] ||= 'true', # service default is true
+ exclude_synonyms: params[:exclude_synonyms] ||= 'false', # service default is false
+ fast_context: params[:fast_context] ||= 'false', # service default is false
+ score: params[:score],
+ score_threshold: params[:score_threshold] ||= -1,
+ confidence_threshold: params[:confidence_threshold] ||= -1,
+ ncbo_slice: params[:ncbo_slice] || '' }
start = Time.now
query = NCBO_ANNOTATOR_URI
- query += "?text=" + CGI.escape(text_to_annotate)
- query += "&apikey=" + NCBO_API_KEY
- query += "&include=prefLabel"
- query += "&expand_class_hierarchy=true" if options[:class_hierarchy_max_level] > 0
- query += "&class_hierarchy_max_level=" + options[:class_hierarchy_max_level].to_s if options[:class_hierarchy_max_level] > 0
- query += "&score=" + options[:score] unless options[:score] == ""
- query += "&score_threshold=" + options[:score_threshold] unless options[:score] == "" or options[:score_threshold]==-1
- query += "&confidence_threshold=" + options[:confidence_threshold] unless options[:score] == "" or options[:confidence_threshold]==-1
- query += "&fast_context=" + options[:fast_context] unless options[:fast_context].empty?
- query += "&ontologies=" + CGI.escape(options[:ontologies].join(',')) unless options[:ontologies].empty?
- query += "&semantic_types=" + options[:semantic_types].join(',') unless options[:semantic_types].empty?
- query += "&semantic_groups=" + options[:semantic_groups].join(',') unless options[:semantic_groups].empty?
- query += "&mappings=" + options[:mappings].join(',') unless options[:mappings].empty?
+ query += "?text=#{CGI.escape(text_to_annotate)}"
+ query += "&apikey=#{NCBO_API_KEY}"
+ query += '&include=prefLabel'
+ query += '&expand_class_hierarchy=true' if (options[:class_hierarchy_max_level]).positive?
+ if (options[:class_hierarchy_max_level]).positive?
+ query += "&class_hierarchy_max_level=#{options[:class_hierarchy_max_level]}"
+ end
+ query += "&score=#{options[:score]}" unless options[:score] == ''
+ unless (options[:score] == '') || (options[:score_threshold] == -1)
+ query += "&score_threshold=#{options[:score_threshold]}"
+ end
+ unless (options[:score] == '') || (options[:confidence_threshold] == -1)
+ query += "&confidence_threshold=#{options[:confidence_threshold]}"
+ end
+ query += "&fast_context=#{options[:fast_context]}" unless options[:fast_context].empty?
+ query += "&ontologies=#{CGI.escape(options[:ontologies].join(','))}" unless options[:ontologies].empty?
+ query += "&semantic_types=#{options[:semantic_types].join(',')}" unless options[:semantic_types].empty?
+ query += "&semantic_groups=#{options[:semantic_groups].join(',')}" unless options[:semantic_groups].empty?
+ query += "&mappings=#{options[:mappings].join(',')}" unless options[:mappings].empty?
query += "&longest_only=#{options[:longest_only]}"
query += "&recognizer=#{params[:recognizer]}"
- query += "&exclude_numbers=" + options[:exclude_numbers].to_s unless options[:exclude_numbers].empty?
- query += "&whole_word_only=" + options[:whole_word_only].to_s unless options[:whole_word_only].empty?
- query += "&exclude_synonyms=" + options[:exclude_synonyms].to_s unless options[:exclude_synonyms].empty?
- query += "&ncbo_slice=" + options[:ncbo_slice].to_s unless options[:ncbo_slice].empty?
+ query += "&exclude_numbers=#{options[:exclude_numbers]}" unless options[:exclude_numbers].empty?
+ query += "&whole_word_only=#{options[:whole_word_only]}" unless options[:whole_word_only].empty?
+ query += "&exclude_synonyms=#{options[:exclude_synonyms]}" unless options[:exclude_synonyms].empty?
+ query += "&ncbo_slice=#{options[:ncbo_slice]}" unless options[:ncbo_slice].empty?
annotations = parse_json(query) # See application_controller.rb
- #annotations = LinkedData::Client::HTTP.get(query)
+ # annotations = LinkedData::Client::HTTP.get(query)
LOG.add :debug, "Query: #{query}"
LOG.add :debug, "Retrieved #{annotations.length} annotations: #{Time.now - start}s"
- if annotations.empty? || params[:raw] == "true"
+ if annotations.empty? || params[:raw] == 'true'
# TODO: if params contains select ontologies and/or semantic types, only return those selected.
response = {
- annotations: annotations,
- ontologies: get_simplified_ontologies_hash, # application_controller
- semantic_types: get_semantic_types # application_controller
+ annotations: annotations,
+ ontologies: get_simplified_ontologies_hash, # application_controller
+ semantic_types: get_semantic_types # application_controller
}
else
massage_annotated_classes(annotations, options)
response = {
- annotations: annotations,
- ontologies: {}, # ontology data are in annotations already.
- semantic_types: {} # semantic types are in annotations already.
+ annotations: annotations,
+ ontologies: {}, # ontology data are in annotations already.
+ semantic_types: {} # semantic types are in annotations already.
}
end
- render :json => response
+ render json: response
end
private
@@ -104,11 +110,12 @@ def get_semantic_types
semantic_types = {}
sty_ont = LinkedData::Client::Models::Ontology.find_by_acronym('STY').first
return semantic_types if sty_ont.nil?
+
# The first 500 items should be more than sufficient to get all semantic types.
- sty_classes = sty_ont.explore.classes({'pagesize'=>500, include: 'prefLabel'})
+ sty_classes = sty_ont.explore.classes({ 'pagesize' => 500, include: 'prefLabel' })
sty_classes.collection.each do |cls|
- code = cls.id.split("/").last
- semantic_types[ code ] = cls.prefLabel
+ code = cls.id.split('/').last
+ semantic_types[code] = cls.prefLabel
end
semantic_types
end
@@ -122,13 +129,13 @@ def massage_annotated_classes(annotations, options)
class_details = get_annotated_classes(annotations, semantic_types)
simplify_annotated_classes(annotations, class_details)
# repeat the simplification for any annotation hierarchy or mappings.
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- simplify_annotated_classes(a['hierarchy'], class_details) if not a['hierarchy'].empty?
+ simplify_annotated_classes(a['hierarchy'], class_details) unless a['hierarchy'].empty?
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- simplify_annotated_classes(a['mappings'], class_details) if not a['mappings'].empty?
+ simplify_annotated_classes(a['mappings'], class_details) unless a['mappings'].empty?
end
LOG.add :debug, "Completed massage for annotated classes: #{Time.now - start}s"
end
@@ -151,56 +158,58 @@ def simplify_annotated_classes(annotations, class_details)
end
def get_annotated_class_hash(a)
- return {
- :class => a['annotatedClass']['@id'],
- :ontology => a['annotatedClass']['links']['ontology']
+ {
+ class: a['annotatedClass']['@id'],
+ ontology: a['annotatedClass']['links']['ontology']
}
end
- def get_annotated_classes(annotations, semantic_types=[])
+ def get_annotated_classes(annotations, semantic_types = [])
# Use batch service to get class prefLabels
class_list = []
- annotations.each {|a| class_list << get_annotated_class_hash(a) }
- hierarchy = annotations.map {|a| a if a.keys.include? 'hierarchy' }.compact
+ annotations.each { |a| class_list << get_annotated_class_hash(a) }
+ hierarchy = annotations.map { |a| a if a.keys.include? 'hierarchy' }.compact
hierarchy.each do |a|
- a['hierarchy'].each {|h| class_list << get_annotated_class_hash(h) }
+ a['hierarchy'].each { |h| class_list << get_annotated_class_hash(h) }
end
- mappings = annotations.map {|a| a if a.keys.include? 'mappings' }.compact
+ mappings = annotations.map { |a| a if a.keys.include? 'mappings' }.compact
mappings.each do |a|
- a['mappings'].each {|m| class_list << get_annotated_class_hash(m) }
+ a['mappings'].each { |m| class_list << get_annotated_class_hash(m) }
end
classes_simple = {}
return classes_simple if class_list.empty?
+
# remove duplicates
class_set = class_list.to_set # get unique class:ontology set
class_list = class_set.to_a # collection requires a list in batch call
# make the batch call
properties = 'prefLabel'
- properties = 'prefLabel,semanticType' if not semantic_types.empty?
- call_params = {'http://www.w3.org/2002/07/owl#Class'=>{'collection'=>class_list, 'include'=>properties}}
+ properties = 'prefLabel,semanticType' unless semantic_types.empty?
+ call_params = { 'http://www.w3.org/2002/07/owl#Class' => { 'collection' => class_list, 'include' => properties } }
classes_json = get_batch_results(call_params)
# Simplify the response data for the UI
@ontologies_hash ||= get_simplified_ontologies_hash # application_controller
classes_data = JSON.parse(classes_json)
- classes_data["http://www.w3.org/2002/07/owl#Class"].each do |cls|
+ classes_data['http://www.w3.org/2002/07/owl#Class'].each do |cls|
c = simplify_class_model(cls)
- ont_details = @ontologies_hash[ c[:ontology] ]
+ ont_details = @ontologies_hash[c[:ontology]]
next if ont_details.nil? # NO DISPLAY FOR ANNOTATIONS ON ANY CLASS OUTSIDE THE BIOPORTAL ONTOLOGY SET.
+
c[:ontology] = ont_details
- unless semantic_types.empty? || cls['semanticType'].nil?
- @semantic_types ||= get_semantic_types # application_controller
+ if semantic_types.empty? || cls['semanticType'].nil?
+ c[:semantic_types] = []
+ else
+ @semantic_types ||= get_semantic_types # application_controller
# Extract the semantic type descriptions that are requested.
semanticTypeURI = 'http://bioportal.bioontology.org/ontologies/umls/sty/'
- semanticCodes = cls['semanticType'].map {|t| t.sub( semanticTypeURI, '') }
- requestedCodes = semanticCodes.map {|code| (semantic_types.include? code and code) || nil }.compact
- requestedDescriptions = requestedCodes.map {|code| @semantic_types[code] }.compact
+ semanticCodes = cls['semanticType'].map { |t| t.sub(semanticTypeURI, '') }
+ requestedCodes = semanticCodes.map { |code| (semantic_types.include? code and code) || nil }.compact
+ requestedDescriptions = requestedCodes.map { |code| @semantic_types[code] }.compact
c[:semantic_types] = requestedDescriptions
- else
- c[:semantic_types] = []
end
classes_simple[c[:id]] = c
end
- return classes_simple
+ classes_simple
end
# Get the ontologies from NCBO to populate select onto for the Annotator plus
@@ -212,13 +221,12 @@ def get_ontologies_for_select
ontologies_array.push(["#{onto['name']} (#{onto['acronym']})", onto['acronym']])
end
- return ontologies_array
+ ontologies_array
end
-
+
protected
-
+
def check_ncbo_annotatorplus_enabled
- raise ActionController::RoutingError.new('Not Found') unless $NCBO_ANNOTATORPLUS_ENABLED == true
+ raise ActionController::RoutingError, 'Not Found' unless $NCBO_ANNOTATORPLUS_ENABLED == true
end
-
end
diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb
index b47208ac24..a466fe67cc 100644
--- a/app/controllers/notes_controller.rb
+++ b/app/controllers/notes_controller.rb
@@ -1,11 +1,13 @@
+# frozen_string_literal: true
+
class NotesController < ApplicationController
include TurboHelper
layout 'ontology'
NOTES_PROPOSAL_TYPES = {
- ProposalNewClass: "New Class Proposal",
- ProposalChangeHierarchy: "New Relationship Proposal",
- ProposalChangeProperty: "Change Property Value Proposal"
- }
+ ProposalNewClass: 'New Class Proposal',
+ ProposalChangeHierarchy: 'New Relationship Proposal',
+ ProposalChangeProperty: 'Change Property Value Proposal'
+ }.freeze
def show
id = clean_note_id(params[:id])
@@ -13,10 +15,10 @@ def show
@note = LinkedData::Client::Models::Note.get(id, include_threads: true)
@ontology = (@notes.explore.relatedOntology || []).first
- if request.xhr?
- render :partial => 'thread'
- return
- end
+ return unless request.xhr?
+
+ render partial: 'thread'
+ nil
end
def new_comment
@@ -33,8 +35,8 @@ def new_proposal
def new_reply
render 'notes/reply/new', locals: { frame_id: "#{params[:parent_id]}_new_reply",
- parent_id: params[:parent_id], type: 'reply',
- user_id: session[:user].id }
+ parent_id: params[:parent_id], type: 'reply',
+ user_id: session[:user].id }
end
def virtual_show
@@ -51,12 +53,12 @@ def virtual_show
elsif concept_id
@notes = @ontology.explore.single_class(concept_id).explore.notes
@note_link = "/notes/virtual/#{@ontology.ontologyId}/?noteid="
- render :partial => 'list', :layout => 'ontology'
+ render partial: 'list', layout: 'ontology'
return
else
@notes = @ontology.explore.notes
@note_link = "/notes/virtual/#{@ontology.ontologyId}/?noteid="
- render :partial => 'list', :layout => 'ontology'
+ render partial: 'list', layout: 'ontology'
return
end
@@ -66,30 +68,31 @@ def virtual_show
end
render 'notes/show', layout: false
- end
+ end
def create
- if params[:type].eql?("reply")
+ if params[:type].eql?('reply')
note = LinkedData::Client::Models::Reply.new(values: note_params)
new_note = note.save
success_message = ''
- locals = { note: new_note, parent_id: params[:parent]}
+ locals = { note: new_note, parent_id: params[:parent] }
partial = 'notes/reply/reply'
container_id = "#{params[:parent]}_thread_replay_container"
alerts_container_id = "#{params[:parent]}_reply"
else
if params[:proposal]
- cast_to_list = [:synonym, :definition, :newRelationshipType]
+ cast_to_list = %i[synonym definition newRelationshipType]
cast_to_list.each do |property|
params[:proposal][property] = params[:proposal][property].split(',') if params[:proposal][property]
end
- params[:subject] = "#{NOTES_PROPOSAL_TYPES[params[:proposal][:type].to_sym]}: #{params[:proposal][:reasonForChange]}"
+ params[:subject] =
+ "#{NOTES_PROPOSAL_TYPES[params[:proposal][:type].to_sym]}: #{params[:proposal][:reasonForChange]}"
end
- if params[:type].eql?("ontology")
+ if params[:type].eql?('ontology')
params[:relatedOntology] = [params.delete(:parent)]
- elsif params[:type].eql?("class")
+ elsif params[:type].eql?('class')
related_class = params.delete(:parent)
ontology_id = params.delete(:ontology_id)
params[:relatedClass] = [{ ontology: ontology_id, class: related_class }]
@@ -98,7 +101,7 @@ def create
note = LinkedData::Client::Models::Note.new(values: note_params)
new_note = note.save
- parent_type = params[:type].eql?("ontology") ? 'ontology' : 'class'
+ parent_type = params[:type].eql?('ontology') ? 'ontology' : 'class'
ontology_acronym = new_note.relatedOntology.first.split('/').last
success_message = 'New comment added successfully'
locals = { note: new_note, ontology_acronym: ontology_acronym, parent_type: parent_type }
@@ -107,14 +110,13 @@ def create
alerts_container_id = nil
end
-
if new_note.errors
render_turbo_stream alert_error(id: alerts_container_id) { response_errors(new_note).to_s }
else
streams = [prepend(container_id, partial: partial, locals: locals)]
- streams.unshift(alert_success { success_message }) unless params[:type].eql?("reply")
+ streams.unshift(alert_success { success_message }) unless params[:type].eql?('reply')
- render_turbo_stream *streams
+ render_turbo_stream(*streams)
end
end
@@ -138,46 +140,46 @@ def destroy
if response[:errors]
render_turbo_stream alert_error(id: alerts_container_id) { response[:errors].join(',').to_s }
else
- render_turbo_stream(alert_success(id: alerts_container_id) { response[:success] }, remove("#{note_id}_tr_#{parent_type}"))
+ render_turbo_stream(alert_success(id: alerts_container_id) do
+ response[:success]
+ end, remove("#{note_id}_tr_#{parent_type}"))
end
-
end
def archive
ontology = DataAccess.getLatestOntology(params[:ontology_virtual_id])
unless ontology.admin?(session[:user])
- render :json => nil.to_json, :status => 500
+ render json: nil.to_json, status: 500
return
end
@archive = DataAccess.archiveNote(params)
- unless @archive.nil?
- render :json => @archive.to_json
- end
+ return if @archive.nil?
+
+ render json: @archive.to_json
end
def show_concept_list
- params[:p] = "classes"
- params[:t] = "notes"
+ params[:p] = 'classes'
+ params[:t] = 'notes'
redirect_new_api
end
private
def note_params
- p = params.permit(:parent, :type, :subject, :body, :creator, { relatedClass:[:class, :ontology] }, { relatedOntology:[] },
- proposal: [:type, :reasonForChange, :classId, :label, { synonym:[] }, { definition:[] },
- :parent, :newTarget, :oldTarget, { newRelationshipType:[] }, :propertyId,
+ p = params.permit(:parent, :type, :subject, :body, :creator, { relatedClass: %i[class ontology] }, { relatedOntology: [] },
+ proposal: [:type, :reasonForChange, :classId, :label, { synonym: [] }, { definition: [] },
+ :parent, :newTarget, :oldTarget, { newRelationshipType: [] }, :propertyId,
:newValue, :oldValue])
p.to_h
end
# Fix noteid parameters with bad prefixes (some application servers, e.g., Apache, NGINX, mangle encoded slashes).
def clean_note_id(id)
- id = id.match(/\Ahttp:\/\w/) ? id.sub('http:/', 'http://') : id
+ id = id.match(%r{\Ahttp:/\w}) ? id.sub('http:/', 'http://') : id
CGI.unescape(id)
end
-
end
diff --git a/app/controllers/ontolobridge_controller.rb b/app/controllers/ontolobridge_controller.rb
index 476f3efa55..7e8cd4aa06 100644
--- a/app/controllers/ontolobridge_controller.rb
+++ b/app/controllers/ontolobridge_controller.rb
@@ -1,8 +1,9 @@
+# frozen_string_literal: true
+
require 'rest-client'
require 'multi_json'
class OntolobridgeController < ApplicationController
-
# POST /ontolobridge
# POST /ontolobridge.xml
def create
@@ -11,32 +12,31 @@ def create
def request_term
response = {}
- endpoint = "/RequestTerm"
+ endpoint = '/RequestTerm'
h_params = {}
- response_raw = nil
code = 200
begin
- params.delete("controller")
- params.delete("action")
- params.each { |k, v|
- if v === "on"
- h_params[k] = true
- else
- h_params[k] = v
- end
- }
-
- headers = {'Authorization' => $ONTOLOBRIDGE_AUTHENTICATION_TOKEN}
+ params.delete('controller')
+ params.delete('action')
+ params.each do |k, v|
+ h_params[k] = if v === 'on'
+ true
+ else
+ v
+ end
+ end
+
+ headers = { 'Authorization' => $ONTOLOBRIDGE_AUTHENTICATION_TOKEN }
response_raw = RestClient.post("#{$ONTOLOBRIDGE_BASE_URL}#{endpoint}", h_params, headers)
code = response_raw.code
response.merge!(MultiJson.load(response_raw))
rescue RestClient::BadRequest => e
code = 400
- response["error"] = e.message
+ response['error'] = e.message
rescue Exception => e
code = 500
- response["error"] = "Problem creating a new term #{endpoint}: #{e.class} - #{e.message}"
+ response['error'] = "Problem creating a new term #{endpoint}: #{e.class} - #{e.message}"
end
render json: [response, code], status: code
@@ -44,7 +44,7 @@ def request_term
def save_new_term_instructions
code = 200
- response = {error: '', success: ''}
+ response = { error: '', success: '' }
response[:success] = "New term request instructions for #{params['acronym']} saved"
ont_data = Ontology.find_by(acronym: params['acronym'])
ont_data ||= Ontology.new
@@ -53,12 +53,11 @@ def save_new_term_instructions
begin
ont_data.save
- rescue Exception => e
+ rescue Exception
code = 500
response[:error] = "Unable to save new term instructions for #{params['acronym']} due to a server error"
end
sleep(1)
render json: [response, code], status: code
end
-
end
diff --git a/app/controllers/ontologies_controller.rb b/app/controllers/ontologies_controller.rb
index 689235b337..326b85e322 100644
--- a/app/controllers/ontologies_controller.rb
+++ b/app/controllers/ontologies_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class OntologiesController < ApplicationController
include MappingsHelper
include FairScoreHelper
@@ -20,11 +22,12 @@ class OntologiesController < ApplicationController
layout 'ontology'
- before_action :authorize_and_redirect, :only => [:edit, :update, :create, :new]
+ before_action :authorize_and_redirect, only: %i[edit update create new]
before_action :submission_metadata, only: [:show]
- KNOWN_PAGES = Set.new(["terms", "classes", "mappings", "notes", "widgets", "summary", "properties", "instances", "schemes", "collections"])
- EXTERNAL_MAPPINGS_GRAPH = "http://data.bioontology.org/metadata/ExternalMappings"
- INTERPORTAL_MAPPINGS_GRAPH = "http://data.bioontology.org/metadata/InterportalMappings"
+ KNOWN_PAGES = Set.new(%w[terms classes mappings notes widgets summary properties instances
+ schemes collections])
+ EXTERNAL_MAPPINGS_GRAPH = 'http://data.bioontology.org/metadata/ExternalMappings'
+ INTERPORTAL_MAPPINGS_GRAPH = 'http://data.bioontology.org/metadata/InterportalMappings'
# GET /ontologies
def index
@@ -51,22 +54,24 @@ def ontologies_filter
count_streams = [
replace('ontologies_filter_count_request') do
- helpers.content_tag(:p, class: "browse-desc-text", style: "margin-bottom: 12px !important;") { "Showing #{@ontologies.size} of #{@analytics.keys.size}" }
+ helpers.content_tag(:p, class: 'browse-desc-text', style: 'margin-bottom: 12px !important;') {
+ "Showing #{@ontologies.size} of #{@analytics.keys.size}"
+ }
end
] + update_filters_counts
- streams =if params[:page].nil?
- [
- prepend('ontologies_list_container', partial: 'ontologies/browser/ontologies'),
- prepend('ontologies_list_container') {
- helpers.turbo_frame_tag("ontologies_filter_count_request") do
- helpers.browser_counter_loader
- end
- }
- ]
- else
- [replace("ontologies_list_view-page-1", partial: 'ontologies/browser/ontologies')]
- end
+ streams = if params[:page].nil?
+ [
+ prepend('ontologies_list_container', partial: 'ontologies/browser/ontologies'),
+ prepend('ontologies_list_container') do
+ helpers.turbo_frame_tag('ontologies_filter_count_request') do
+ helpers.browser_counter_loader
+ end
+ end
+ ]
+ else
+ [replace('ontologies_list_view-page-1', partial: 'ontologies/browser/ontologies')]
+ end
render turbo_stream: streams + count_streams
end
@@ -92,9 +97,7 @@ def classes
@current_purl = @concept.purl if $PURL_ENABLED
- unless @concept.nil? || @concept.id == 'bp_fake_root'
- @notes = @concept.explore.notes
- end
+ @notes = @concept.explore.notes unless @concept.nil? || @concept.id == 'bp_fake_root'
if request.xhr?
render 'ontologies/sections/visualize', layout: false
@@ -104,11 +107,9 @@ def classes
end
def properties
- if request.xhr?
- return render 'ontologies/sections/properties', layout: false
- else
- return render 'ontologies/sections/properties', layout: 'ontology_viewer'
- end
+ return render 'ontologies/sections/properties', layout: false if request.xhr?
+
+ render 'ontologies/sections/properties', layout: 'ontology_viewer'
end
def create
@@ -132,7 +133,9 @@ def create
def edit
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:id]).first
- redirect_to_home unless session[:user] && @ontology.administeredBy.include?(session[:user].id) || session[:user].admin?
+ unless session[:user] && @ontology.administeredBy.include?(session[:user].id) || session[:user].admin?
+ redirect_to_home
+ end
submission = @ontology.explore.latest_submission(include: 'submissionId')
if submission
@@ -155,7 +158,8 @@ def mappings
def new
@ontology = LinkedData::Client::Models::Ontology.new
@submission = LinkedData::Client::Models::OntologySubmission.new
- @ontologies = LinkedData::Client::Models::Ontology.all(include: 'acronym', include_views: true, display_links: false, display_context: false)
+ @ontologies = LinkedData::Client::Models::Ontology.all(include: 'acronym', include_views: true,
+ display_links: false, display_context: false)
@categories = LinkedData::Client::Models::Category.all
@groups = LinkedData::Client::Models::Group.all
@user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
@@ -210,7 +214,6 @@ def collections
# GET /ontologies/ACRONYM
# GET /ontologies/1.xml
def show
-
# Hack to make ontologyid and conceptid work in addition to id and ontology params
params[:id] = params[:id].nil? ? params[:ontologyid] : params[:id]
params[:ontology] = params[:ontology].nil? ? params[:id] : params[:ontology]
@@ -225,11 +228,12 @@ def show
else
params[:conceptid] = params.delete(:purl_conceptid)
end
- redirect_to "/ontologies/#{params[:acronym]}?p=classes#{params_string_for_redirect(params, prefix: "&")}", status: :moved_permanently
+ redirect_to "/ontologies/#{params[:acronym]}?p=classes#{params_string_for_redirect(params, prefix: '&')}",
+ status: :moved_permanently
return
end
- if params[:ontology].to_i > 0
+ if params[:ontology].to_i.positive?
acronym = BPIDResolver.id_to_acronym(params[:ontology])
if acronym
redirect_new_api
@@ -237,23 +241,27 @@ def show
end
end
- # Note: find_by_acronym includes ontology views
+ # NOTE: find_by_acronym includes ontology views
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology]).first
ontology_not_found(params[:ontology]) if @ontology.nil?
# Handle the case where an ontology is converted to summary only.
# See: https://github.com/ncbo/bioportal_web_ui/issues/133.
if @ontology.summaryOnly && params[:p].present?
- pages = KNOWN_PAGES - ['summary', 'notes']
+ pages = KNOWN_PAGES - %w[summary notes]
if pages.include?(params[:p])
redirect_to(ontology_path(params[:ontology]), status: :temporary_redirect) and return
end
end
- #@ob_instructions = helpers.ontolobridge_instructions_template(@ontology)
+ # @ob_instructions = helpers.ontolobridge_instructions_template(@ontology)
# Get the latest submission (not necessarily the latest 'ready' submission)
- @submission_latest = @ontology.explore.latest_submission(include: 'all') rescue @ontology.explore.latest_submission(include: '')
+ @submission_latest = begin
+ @ontology.explore.latest_submission(include: 'all')
+ rescue StandardError
+ @ontology.explore.latest_submission(include: '')
+ end
# Is the ontology downloadable?
@ont_restricted = ontology_restricted?(@ontology.acronym)
@@ -267,27 +275,26 @@ def show
params[:p] = 'classes'
redirect_to "/ontologies/#{params[:ontology]}#{params_string_for_redirect(params)}", status: :moved_permanently
when 'classes'
- self.classes #rescue self.summary
+ classes # rescue self.summary
when 'mappings'
- self.mappings #rescue self.summary
+ mappings # rescue self.summary
when 'notes'
- self.notes #rescue self.summary
+ notes # rescue self.summary
when 'widgets'
- self.widgets #rescue self.summary
+ widgets # rescue self.summary
when 'properties'
- self.properties #rescue self.summary
+ properties # rescue self.summary
when 'summary'
- self.summary
+ summary
when 'instances'
- self.instances
+ instances
when 'schemes'
- self.schemes
+ schemes
when 'collections'
- self.collections
+ collections
else
- self.summary
+ summary
end
-
end
def submit_success
@@ -297,9 +304,12 @@ def submit_success
# Main ontology description page (with metadata): /ontologies/ACRONYM
def summary
-
- @metrics = @ontology.explore.metrics rescue []
- #@reviews = @ontology.explore.reviews.sort {|a,b| b.created <=> a.created} || []
+ @metrics = begin
+ @ontology.explore.metrics
+ rescue StandardError
+ []
+ end
+ # @reviews = @ontology.explore.reviews.sort {|a,b| b.created <=> a.created} || []
@projects = @ontology.explore.projects.sort { |a, b| a.name.downcase <=> b.name.downcase } || []
@analytics = LinkedData::Client::HTTP.get(@ontology.links['analytics'])
@@ -311,19 +321,24 @@ def summary
@view_decorators = @views.map { |view| ViewDecorator.new(view, view_context) }
@ontology_relations_data = ontology_relations_data
- category_attributes = submission_metadata.group_by{|x| x['category']}.transform_values{|x| x.map{|attr| attr['attribute']} }
+ category_attributes = submission_metadata.group_by { |x| x['category'] }.transform_values do |x|
+ x.map do |attr|
+ attr['attribute']
+ end
+ end
@relations_array_display = @relations_array.map do |relation|
attr = relation.split(':').last
["#{helpers.attr_label(attr, attr_metadata: helpers.attr_metadata(attr), show_tooltip: false)}(#{relation})",
relation]
end
- @methodology_properties = properties_hash_values(category_attributes["methodology"])
- @agents_properties = properties_hash_values(category_attributes["persons and organizations"])
- @dates_properties = properties_hash_values(category_attributes["dates"])
- @links_properties = properties_hash_values(category_attributes["links"])
- @identifiers = properties_hash_values([:URI, :versionIRI, :identifier])
- @projects_properties = properties_hash_values(category_attributes["usage"])
- @ontology_icon_links = [%w[summary/download dataDump], %w[summary/homepage homepage], %w[summary/documentation documentation], %w[icons/github repository], %w[summary/sparql endpoint]]
+ @methodology_properties = properties_hash_values(category_attributes['methodology'])
+ @agents_properties = properties_hash_values(category_attributes['persons and organizations'])
+ @dates_properties = properties_hash_values(category_attributes['dates'])
+ @links_properties = properties_hash_values(category_attributes['links'])
+ @identifiers = properties_hash_values(%i[URI versionIRI identifier])
+ @projects_properties = properties_hash_values(category_attributes['usage'])
+ @ontology_icon_links = [%w[summary/download dataDump], %w[summary/homepage homepage],
+ %w[summary/documentation documentation], %w[icons/github repository], %w[summary/sparql endpoint]]
if request.xhr?
render partial: 'ontologies/sections/metadata', layout: false
else
@@ -331,7 +346,6 @@ def summary
end
end
-
def virtual
redirect_new_api
end
@@ -347,42 +361,38 @@ def widgets
render partial: 'ontologies/sections/widgets', layout: 'ontology_viewer'
end
end
-
def show_additional_metadata
@metadata = submission_metadata
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:id]).first
- @submission_latest = @ontology.explore.latest_submission(include: 'all', display_context: false, display_links: false)
+ @submission_latest = @ontology.explore.latest_submission(include: 'all', display_context: false,
+ display_links: false)
render partial: 'ontologies/sections/additional_metadata'
end
def show_licenses
-
@metadata = submission_metadata
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:id]).first
- @licenses= ["hasLicense","morePermissions","copyrightHolder"]
- @submission_latest = @ontology.explore.latest_submission(include: @licenses.join(","))
+ @licenses = %w[hasLicense morePermissions copyrightHolder]
+ @submission_latest = @ontology.explore.latest_submission(include: @licenses.join(','))
render partial: 'ontologies/sections/licenses'
end
- def ajax_ontologies
-
+ def ajax_ontologies
render json: LinkedData::Client::Models::Ontology.all(include_views: true,
display: 'acronym,name', display_links: false, display_context: false)
end
-
-
def metrics_evolution
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology_id]).first
key = params[:metrics_key]
ontology_not_found(params[:ontology_id]) if @ontology.nil?
# Retrieve submissions in descending submissionId order (should be reverse chronological order)
- @submissions = @ontology.explore.submissions({ include: "metrics" })
- .sort { |a, b| a.submissionId.to_i <=> b.submissionId.to_i }.reverse || []
+ @submissions = @ontology.explore.submissions({ include: 'metrics' })
+ .sort { |a, b| a.submissionId.to_i <=> b.submissionId.to_i }.reverse || []
- metrics = @submissions.map { |s| s.metrics }
+ metrics = @submissions.map(&:metrics)
data = {
key => metrics.map { |m| m.nil? ? 0 : m[key] }
@@ -392,18 +402,19 @@ def metrics_evolution
end
private
+
def get_views(ontology)
views = ontology.explore.views || []
- views.select!{ |view| view.access?(session[:user]) }
- views.sort{ |a,b| a.acronym.downcase <=> b.acronym.downcase }
+ views.select! { |view| view.access?(session[:user]) }
+ views.sort { |a, b| a.acronym.downcase <=> b.acronym.downcase }
end
def ontology_relations_data(sub = @submission_latest)
ontology_relations_array = []
- @relations_array = ["omv:useImports", "door:isAlignedTo", "door:ontologyRelatedTo", "omv:isBackwardCompatibleWith", "omv:isIncompatibleWith", "door:comesFromTheSameDomain", "door:similarTo",
- "door:explanationEvolution", "voaf:generalizes", "door:hasDisparateModelling", "dct:hasPart", "voaf:usedBy", "schema:workTranslation", "schema:translationOfWork"]
+ @relations_array = ['omv:useImports', 'door:isAlignedTo', 'door:ontologyRelatedTo', 'omv:isBackwardCompatibleWith', 'omv:isIncompatibleWith', 'door:comesFromTheSameDomain', 'door:similarTo',
+ 'door:explanationEvolution', 'voaf:generalizes', 'door:hasDisparateModelling', 'dct:hasPart', 'voaf:usedBy', 'schema:workTranslation', 'schema:translationOfWork']
- return if sub.nil?
+ return if sub.nil?
ont = sub.ontology
# Get ontology relations between each other (ex: STY isAlignedTo GO)
@@ -411,7 +422,7 @@ def ontology_relations_data(sub = @submission_latest)
relation_values = sub.send(relation_attr.to_s.split(':')[1])
next if relation_values.nil? || relation_values.empty?
- relation_values = [relation_values] unless relation_values.kind_of?(Array)
+ relation_values = [relation_values] unless relation_values.is_a?(Array)
relation_values.each do |relation_value|
next if relation_value.eql?(ont.acronym)
@@ -428,12 +439,14 @@ def ontology_relations_data(sub = @submission_latest)
target_in_portal = true
end
- ontology_relations_array.push({ source: ont.acronym, target: target_id, relation: relation_attr.to_s, targetInPortal: target_in_portal })
+ ontology_relations_array.push({ source: ont.acronym, target: target_id, relation: relation_attr.to_s,
+ targetInPortal: target_in_portal })
end
end
ontology_relations_array
end
+
def properties_hash_values(properties, sub = @submission_latest)
return {} if sub.nil?
@@ -444,8 +457,8 @@ def get_metrics_hash
metrics_hash = {}
# TODO: Metrics do not return for views on the backend, need to enable include_views param there
@metrics = LinkedData::Client::Models::Metrics.all(include_views: true)
- @metrics.each {|m| metrics_hash[m.links['ontology']] = m }
- return metrics_hash
+ @metrics.each { |m| metrics_hash[m.links['ontology']] = m }
+ metrics_hash
end
def determine_layout
@@ -456,5 +469,4 @@ def determine_layout
super
end
end
-
end
diff --git a/app/controllers/ontologies_metadata_curator_controller.rb b/app/controllers/ontologies_metadata_curator_controller.rb
index 5d25ab6a77..aad7dd1a5e 100644
--- a/app/controllers/ontologies_metadata_curator_controller.rb
+++ b/app/controllers/ontologies_metadata_curator_controller.rb
@@ -1,8 +1,12 @@
+# frozen_string_literal: true
+
class OntologiesMetadataCuratorController < ApplicationController
- include TurboHelper, SubmissionsHelper, ActionView::Helpers::FormHelper
+ include ActionView::Helpers::FormHelper
+ include SubmissionsHelper
+ include TurboHelper
include SubmissionUpdater
layout :determine_layout
- before_action :submission_metadata, only: [:result, :edit, :update, :show_metadata_by_ontology]
+ before_action :submission_metadata, only: %i[result edit update show_metadata_by_ontology]
def result
@ontologies_ids = params[:ontology] ? params[:ontology][:ontologyId] : []
@@ -21,34 +25,38 @@ def result
display_attribute = equivalent_properties(@metadata_sel) + %w[submissionId]
@ontologies.each do |ont|
- if @show_submissions
- submissions = ont.explore.submissions({ include: display_attribute.join(',') })
- else
- submissions = [ont.explore.latest_submission({ include: display_attribute.join(',') })]
- end
+ submissions = if @show_submissions
+ ont.explore.submissions({ include: display_attribute.join(',') })
+ else
+ [ont.explore.latest_submission({ include: display_attribute.join(',') })]
+ end
submissions.each { |sub| append_submission(ont, sub) }
end
respond_to do |format|
format.html { redirect_to admin_index_path }
- format.turbo_stream { render turbo_stream: [
- replace("selection_metadata_form", partial: "ontologies_metadata_curator/metadata_table"),
- replace('edit_metadata_btn') do
- "
- #{helpers.button_tag("Start bulk edit", onclick: 'showEditForm(event)', class: "btn btn-outline-primary mx-1 w-100")}
+ format.turbo_stream do
+ render turbo_stream: [
+ replace('selection_metadata_form', partial: 'ontologies_metadata_curator/metadata_table'),
+ replace('edit_metadata_btn') do
+ "
+ #{helpers.button_tag('Start bulk edit', onclick: 'showEditForm(event)',
+ class: 'btn btn-outline-primary mx-1 w-100')}
#{raw helpers.help_tooltip('To use the bulk edit select in the table submissions (the rows) and metadata properties (the columns) for which you want to edit')}
".html_safe
- end
- ]}
+ end
+ ]
+ end
end
end
def show_metadata_by_ontology
@acronym = params[:ontology]
- inline_save = params[:inline_save] && params[:inline_save].eql?('true')
+ inline_save = params[:inline_save]&.eql?('true')
display_submission_attributes(@acronym, params[:properties]&.split(','),
submissionId: params[:submission_id], inline_save: inline_save)
- render partial: 'submissions/form_content', locals: { id: params[:form_id] || '', acronym: @acronym, submissionId: params[:submission_id] }
+ render partial: 'submissions/form_content',
+ locals: { id: params[:form_id] || '', acronym: @acronym, submissionId: params[:submission_id] }
end
def show_metadata_value
@@ -63,9 +71,10 @@ def show_metadata_value
end
def edit
-
if params[:selected_acronyms].nil? || params[:selected_metadata].nil?
- render_turbo_stream alert_error(id: 'application_modal_content') {'Select in the table submissions (rows) and metadata properties (columns) to start the bulk edit'}
+ render_turbo_stream alert_error(id: 'application_modal_content') {
+ 'Select in the table submissions (rows) and metadata properties (columns) to start the bulk edit'
+ }
return
end
@@ -102,8 +111,11 @@ def update
else
streams = [alert_success { 'Submissions were successfully updated' }]
@submissions.each do |submission|
- submission.ontology = OpenStruct.new({acronym: submission.ontology})
- streams << replace("#{ontology_submission_id_label(submission.ontology.acronym, submission.submissionId)}_row", partial: 'ontologies_metadata_curator/metadata_table_row', locals: {submission: submission, attributes: @all_metadata })
+ submission.ontology = OpenStruct.new({ acronym: submission.ontology })
+ streams << replace(
+ "#{ontology_submission_id_label(submission.ontology.acronym,
+ submission.submissionId)}_row", partial: 'ontologies_metadata_curator/metadata_table_row', locals: { submission: submission, attributes: @all_metadata }
+ )
end
render_turbo_stream(*streams)
end
@@ -113,7 +125,6 @@ def update
private
-
def append_submission(ontology, submission)
sub = submission
return if sub.nil?
@@ -121,5 +132,4 @@ def append_submission(ontology, submission)
sub.ontology = ontology
@submissions << sub
end
-
end
diff --git a/app/controllers/precache_controller.rb b/app/controllers/precache_controller.rb
index 54f2290743..57500e792c 100644
--- a/app/controllers/precache_controller.rb
+++ b/app/controllers/precache_controller.rb
@@ -1,18 +1,18 @@
+# frozen_string_literal: true
+
require 'uri'
class PrecacheController < ApplicationController
-
- $UI_PORT = "80"
+ $UI_PORT = '80'
# $UI_PORT = "3000"
-
def self.precache_all(delete_cache = false)
if delete_cache
- p "Deleting general cache info"
- CACHE.delete("act_ont_list")
- CACHE.delete("ont_list")
- CACHE.delete("ontology_acronyms")
- CACHE.delete("classes_all_ontologies")
+ p 'Deleting general cache info'
+ CACHE.delete('act_ont_list')
+ CACHE.delete('ont_list')
+ CACHE.delete('ontology_acronyms')
+ CACHE.delete('classes_all_ontologies')
end
get_url("http://localhost:#{$UI_PORT}")
@@ -53,9 +53,7 @@ def self.precache_ontology_summary(delete_cache = false)
def self.precache_ontology_mappings(delete_cache = false)
ontologies = DataAccess.getOntologyList
ontologies.each do |ont|
- if delete_cache
- CACHE.delete("between_ontologies::map_count::#{ont.ontologyId}")
- end
+ CACHE.delete("between_ontologies::map_count::#{ont.ontologyId}") if delete_cache
get_url("http://localhost:#{$UI_PORT}/ontologies/#{ont.ontologyId}?p=mappings")
end
@@ -81,10 +79,10 @@ def self.get_url(url)
begin
timer = Time.now
- res = http.start { |con|
- path = uri.path.empty? ? "/" : uri.path
+ res = http.start do |con|
+ path = uri.path.empty? ? '/' : uri.path
con.get(path)
- }
+ end
p "Retrieved in #{(Time.now - timer).to_f.round(2)}s"
rescue Exception => e
p "Failed to get #{url}: #{e.message}"
@@ -92,5 +90,4 @@ def self.get_url(url)
res.body
end
-
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index eb9f35297b..364a4d65c4 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ProjectsController < ApplicationController
# GET /projects
# GET /projects.xml
@@ -7,13 +9,13 @@ class ProjectsController < ApplicationController
def index
@projects = LinkedData::Client::Models::Project.all
@projects.reject! { |p| p.name.nil? }
- @projects.sort! { |a,b| a.name.downcase <=> b.name.downcase }
+ @projects.sort! { |a, b| a.name.downcase <=> b.name.downcase }
@ontologies = LinkedData::Client::Models::Ontology.all(include_views: true)
- @ontologies_hash = Hash[@ontologies.map {|ont| [ont.id, ont]}]
+ @ontologies_hash = Hash[@ontologies.map { |ont| [ont.id, ont] }]
if request.xhr?
- render action: "index", layout: false
+ render action: 'index', layout: false
else
- render action: "index"
+ render action: 'index'
end
end
@@ -26,28 +28,26 @@ def show
redirect_to projects_path
return
end
-
+
@project = projects.first
@ontologies_used = []
onts_used = @project.ontologyUsed
onts_used.each do |ont_used|
ont = LinkedData::Client::Models::Ontology.find(ont_used)
- unless ont.nil?
- @ontologies_used << Hash["name", ont.name, "acronym", ont.acronym]
- end
+ @ontologies_used << Hash['name', ont.name, 'acronym', ont.acronym] unless ont.nil?
end
- @ontologies_used.sort_by!{ |o| o["name"].downcase }
+ @ontologies_used.sort_by! { |o| o['name'].downcase }
end
# GET /projects/new
# GET /projects/new.xml
def new
if session[:user].nil?
- redirect_to :controller => 'login', :action => 'index'
+ redirect_to controller: 'login', action: 'index'
else
@project = LinkedData::Client::Models::Project.new
- @user_select_list = LinkedData::Client::Models::User.all.map {|u| [u.username, u.id]}
- @user_select_list.sort! {|a,b| a[1].downcase <=> b[1].downcase}
+ @user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
+ @user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
end
end
@@ -60,8 +60,8 @@ def edit
return
end
@project = projects.first
- @user_select_list = LinkedData::Client::Models::User.all.map {|u| [u.username, u.id]}
- @user_select_list.sort! {|a,b| a[1].downcase <=> b[1].downcase}
+ @user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
+ @user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
@usedOntologies = @project.ontologyUsed || []
@ontologies = LinkedData::Client::Models::Ontology.all
end
@@ -76,7 +76,7 @@ def create
@project = LinkedData::Client::Models::Project.new(values: project_params)
@project_saved = @project.save
-
+
# Project successfully created.
if response_success?(@project_saved)
flash[:notice] = 'Project successfully created'
@@ -93,9 +93,9 @@ def create
end
@project = LinkedData::Client::Models::Project.new(values: project_params)
- @user_select_list = LinkedData::Client::Models::User.all.map {|u| [u.username, u.id]}
- @user_select_list.sort! {|a,b| a[1].downcase <=> b[1].downcase}
- render action: "new"
+ @user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
+ @user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
+ render action: 'new'
end
# PUT /projects/1
@@ -113,8 +113,8 @@ def update
end
@project = projects.first
@project.update_from_params(project_params)
- @user_select_list = LinkedData::Client::Models::User.all.map {|u| [u.username, u.id]}
- @user_select_list.sort! {|a,b| a[1].downcase <=> b[1].downcase}
+ @user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
+ @user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
@usedOntologies = @project.ontologyUsed || []
@ontologies = LinkedData::Client::Models::Ontology.all
error_response = @project.update
@@ -152,14 +152,13 @@ def destroy
format.xml { head :ok }
end
end
-
end
private
def project_params
- p = params.require(:project).permit(:name, :acronym, :institution, :contacts, { creator:[] }, :homePage,
- :description, { ontologyUsed:[] })
+ p = params.require(:project).permit(:name, :acronym, :institution, :contacts, { creator: [] }, :homePage,
+ :description, { ontologyUsed: [] })
p[:creator].reject!(&:blank?)
p[:ontologyUsed].reject!(&:blank?)
p.to_h
@@ -171,5 +170,4 @@ def flash_error(msg)
html << msg
html << ''.html_safe
end
-
end
diff --git a/app/controllers/recommender_controller.rb b/app/controllers/recommender_controller.rb
index 256fee3e49..0a9cc599d7 100644
--- a/app/controllers/recommender_controller.rb
+++ b/app/controllers/recommender_controller.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
class RecommenderController < ApplicationController
layout :determine_layout
# REST_URI is defined in application_controller.rb
- RECOMMENDER_URI = "/recommender"
+ RECOMMENDER_URI = '/recommender'
def index
@text = params[:text]
@@ -30,9 +32,9 @@ def index
# NOTE: this call (POST) works at a local environment but not in staging
def create
start = Time.now
- input = params[:input].strip.gsub("\r\n", " ").gsub("\n", " ")
+ input = params[:input].strip.gsub("\r\n", ' ').gsub("\n", ' ')
# Default values are set at the service level)
- form_data = Hash.new
+ form_data = {}
form_data['input'] = input
form_data['ontologies'] = params[:ontologies].join(',') unless params[:ontologies].nil?
form_data['input_type'] = params[:input_type] unless params[:input_type].nil?
@@ -46,5 +48,4 @@ def create
LOG.add :debug, "Retrieved #{recommendations.length} recommendations: #{Time.now - start}s"
render json: recommendations
end
-
end
diff --git a/app/controllers/redirect_controller.rb b/app/controllers/redirect_controller.rb
index c36d4c2f56..3dc29a954e 100644
--- a/app/controllers/redirect_controller.rb
+++ b/app/controllers/redirect_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'cgi'
# The redirect controller allows for routes-based redirects
@@ -6,21 +8,22 @@
class RedirectController < ApplicationController
def index
if params[:url] # We were provided with a url to redirect to
- params_string = ""
+ params_string = ''
# Trigger to switch the placeholders
first_param = true
# Loop through the given params, ignore ones we know about or are provided by default
params.each do |param, value|
- next if ["url", "action", "controller"].include?(param)
- seperator = first_param ? "?" : "&"
+ next if %w[url action controller].include?(param)
+
+ seperator = first_param ? '?' : '&'
first_param = false
- params_string += seperator + param + "=" + CGI.escape(value)
+ params_string += "#{seperator}#{param}=#{CGI.escape(value)}"
end
# Redirect with params intact
- redirect_to params[:url] + params_string, :status=>:moved_permanently
- return
+ redirect_to params[:url] + params_string, status: :moved_permanently
+ nil
else # Default redirect to the home page
- redirect_to "/", :status=>:moved_permanently
+ redirect_to '/', status: :moved_permanently
end
end
end
diff --git a/app/controllers/reviews_controller.rb b/app/controllers/reviews_controller.rb
index c36ef5b7b7..4173c48d7b 100644
--- a/app/controllers/reviews_controller.rb
+++ b/app/controllers/reviews_controller.rb
@@ -1,24 +1,26 @@
-class ReviewsController < ApplicationController
+# frozen_string_literal: true
+class ReviewsController < ApplicationController
layout 'ontology_viewer'
- RATING_TYPES = [
- :usabilityRating,
- :coverageRating,
- :qualityRating,
- :formalityRating,
- :correctnessRating,
- :documentationRating
+ RATING_TYPES = %i[
+ usabilityRating
+ coverageRating
+ qualityRating
+ formalityRating
+ correctnessRating
+ documentationRating
].freeze
def new
@rating_types = RATING_TYPES
@ontology = LinkedData::Client::Models::Ontology.find(params[:ontology])
- @review = LinkedData::Client::Models::Review.new(values: {ontologyReviewed: @ontology.id, creator: session[:user].id})
+ @review = LinkedData::Client::Models::Review.new(values: { ontologyReviewed: @ontology.id,
+ creator: session[:user].id })
- if request.xhr?
- render layout: false
- end
+ return unless request.xhr?
+
+ render layout: false
end
# GET /reviews/1/edit
@@ -26,9 +28,9 @@ def edit
@review = Review.find(params[:id])
@rating_types = RatingType.all
- if request.xhr?
- render layout: false
- end
+ return unless request.xhr?
+
+ render layout: false
end
def create
@@ -37,7 +39,7 @@ def create
@review_saved = @review.save
if response_error?(@review_saved)
@errors = response_errors(@review_saved)
- render :action => "new"
+ render action: 'new'
else
respond_to do |format|
format.html do
@@ -55,25 +57,25 @@ def create
# PUT /reviews/1.xml
def update
@review = Review.find(params[:id])
- ratings = Hash[*(@review.ratings.map{|rate| [rate.id.to_i, rate] }.flatten)]
- #puts ratings.inspect
- for rating_key in params.keys
- if rating_key.include?("star")
- #puts rating_key.split("_")[1].to_i
- ratings[rating_key.split("_")[1].to_i].value=params[rating_key].to_i
- ratings[rating_key.split("_")[1].to_i].save
- end
- end
- if @review.update_attributes(params[:review])
- @review.reload
- if request.xhr?
- render :action=>'show', :layout=>false
- else
- redirect_to reviews(:ontology=>review.ontology_id)
- end
+ ratings = Hash[*@review.ratings.map { |rate| [rate.id.to_i, rate] }.flatten]
+ # puts ratings.inspect
+ params.each_key do |rating_key|
+ next unless rating_key.include?('star')
+
+ # puts rating_key.split("_")[1].to_i
+ ratings[rating_key.split('_')[1].to_i].value = params[rating_key].to_i
+ ratings[rating_key.split('_')[1].to_i].save
+ end
+ if @review.update_attributes(params[:review])
+ @review.reload
+ if request.xhr?
+ render action: 'show', layout: false
else
- render :action => "edit"
+ redirect_to reviews(ontology: review.ontology_id)
end
+ else
+ render action: 'edit'
+ end
end
# DELETE /reviews/1
diff --git a/app/controllers/robots_controller.rb b/app/controllers/robots_controller.rb
index 342f6cf9c8..6095a7215b 100644
--- a/app/controllers/robots_controller.rb
+++ b/app/controllers/robots_controller.rb
@@ -1,14 +1,16 @@
+# frozen_string_literal: true
+
class RobotsController < ApplicationController
def index
# Slices (subdomains) should not be indexed
- if @subdomain_filter[:active]
- robots = <<-EOF.gsub(/^\s+/, "")
+ robots = if @subdomain_filter[:active]
+ <<-EOF.gsub(/^\s+/, '')
User-agent: *\n
Disallow: /
- EOF
- else
- robots = File.read(Rails.root + "config/robots/#{Rails.env}.txt")
- end
+ EOF
+ else
+ File.read(Rails.root + "config/robots/#{Rails.env}.txt")
+ end
render plain: robots
end
end
diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb
index 34956040ee..d9914dd26c 100644
--- a/app/controllers/schemes_controller.rb
+++ b/app/controllers/schemes_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class SchemesController < ApplicationController
include SchemesHelper
@@ -16,11 +18,11 @@ def show_label
private
def get_request_scheme
- params[:id] = params[:id] ? params[:id] : params[:scheme_id]
- params[:ontology_id] = params[:ontology_id] ? params[:ontology_id] : params[:ontology]
+ params[:id] = params[:id] || params[:scheme_id]
+ params[:ontology_id] = params[:ontology_id] || params[:ontology]
if params[:id].nil? || params[:id].empty?
- render :text => "Error: You must provide a valid scheme id"
+ render text: 'Error: You must provide a valid scheme id'
return
end
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology_id]).first
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index b5d0525832..35c6ce027b 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -1,47 +1,48 @@
+# frozen_string_literal: true
+
require 'uri'
class SearchController < ApplicationController
-
skip_before_action :verify_authenticity_token
layout :determine_layout
def index
@search_query = params[:query].nil? ? params[:q] : params[:query]
- @search_query ||= ""
+ @index ||= ''
end
def json_search
if params[:q].nil?
- render :text => "No search class provided"
+ render text: 'No search class provided'
return
end
check_params_query(params)
- check_params_ontologies(params) # Filter on ontology_id
+ check_params_ontologies(params) # Filter on ontology_id
search_page = LinkedData::Client::Models::Class.search(params[:q], params)
@results = search_page.collection
- response = ""
- obsolete_response = ""
- separator = (params[:separator].nil?) ? "~!~" : params[:separator]
- for result in @results
+ response = ''
+ obsolete_response = ''
+ separator = params[:separator].nil? ? '~!~' : params[:separator]
+ @results.each do |result|
# TODO_REV: Format the response with type information, target information
# record_type = format_record_type(result[:recordType], result[:obsolete])
- record_type = ""
+ record_type = ''
target_value = result.prefLabel
case params[:target]
- when "name"
- target_value = result.prefLabel
- when "shortid"
- target_value = result.id
- when "uri"
- target_value = result.id
+ when 'name'
+ target_value = result.prefLabel
+ when 'shortid'
+ target_value = result.id
+ when 'uri'
+ target_value = result.id
end
json = []
- json << "#{target_value}"
- json << " [obsolete]" if result.obsolete? # used by JS in ontologies/visualize to markup obsolete classes
+ json << target_value.to_s
+ json << ' [obsolete]' if result.obsolete? # used by JS in ontologies/visualize to markup obsolete classes
json << "|#{result.id}"
json << "|#{record_type}"
json << "|#{result.explore.ontology.acronym}"
@@ -50,14 +51,12 @@ def json_search
# This is nasty, but hard to workaround unless we rewrite everything (form_autocomplete, jump_to, crossdomain_autocomplete)
# to use JSON from the bottom up. To avoid this, we pass a tab separated column list
# Columns: synonym
- json << "|#{(result.synonym || []).join(";")}"
- if params[:id] && params[:id].split(",").length == 1
- json << "|#{CGI.escape((result.definition || []).join(". "))}#{separator}"
- else
+ json << "|#{(result.synonym || []).join(';')}"
+ unless params[:id] && params[:id].split(',').length == 1
json << "|#{result.explore.ontology.name}"
json << "|#{result.explore.ontology.acronym}"
- json << "|#{CGI.escape((result.definition || []).join(". "))}#{separator}"
end
+ json << "|#{CGI.escape((result.definition || []).join('. '))}#{separator}"
# Obsolete results go at the end
if result.obsolete?
@@ -70,54 +69,50 @@ def json_search
# Obsolete results merge
response << obsolete_response
- content_type = "text/html"
- if params[:response].eql?("json")
- response = response.gsub("\"","'")
+ content_type = 'text/html'
+ if params[:response].eql?('json')
+ response = response.gsub('"', "'")
response = "#{params[:callback]}({data:\"#{response}\"})"
- content_type = "application/javascript"
+ content_type = 'application/javascript'
end
render plain: response, content_type: content_type
end
-
private
def check_params_query(params)
params[:q] = params[:q].strip
- params[:q] = params[:q] + '*' unless params[:q].end_with?("*") # Add wildcard
+ params[:q] = "#{params[:q]}*" unless params[:q].end_with?('*') # Add wildcard
end
def check_params_ontologies(params)
params[:ontologies] ||= params[:id]
- if params[:ontologies]
- if params[:ontologies].include?(",")
- params[:ontologies] = params[:ontologies].split(",")
- else
- params[:ontologies] = [params[:ontologies]]
- end
- if params[:ontologies].first.to_i > 0
- params[:ontologies].map! {|o| BpidResolver.id_to_acronym(o)}
- end
- params[:ontologies] = params[:ontologies].join(",")
- end
+ return unless params[:ontologies]
+
+ params[:ontologies] = if params[:ontologies].include?(',')
+ params[:ontologies].split(',')
+ else
+ [params[:ontologies]]
+ end
+ params[:ontologies].map! { |o| BpidResolver.id_to_acronym(o) } if params[:ontologies].first.to_i.positive?
+ params[:ontologies] = params[:ontologies].join(',')
end
def format_record_type(record_type, obsolete = false)
- case record_type
- when "apreferredname"
- record_text = "Preferred Name"
- when "bconceptid"
- record_text = "Class ID"
- when "csynonym"
- record_text = "Synonym"
- when "dproperty"
- record_text = "Property"
- else
- record_text = ""
- end
- record_text = "Obsolete Class" if obsolete
+ record_text = case record_type
+ when 'apreferredname'
+ 'Preferred Name'
+ when 'bconceptid'
+ 'Class ID'
+ when 'csynonym'
+ 'Synonym'
+ when 'dproperty'
+ 'Property'
+ else
+ ''
+ end
+ record_text = 'Obsolete Class' if obsolete
record_text
end
-
end
diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb
index 55fd28d3e9..488adbc6c2 100644
--- a/app/controllers/submissions_controller.rb
+++ b/app/controllers/submissions_controller.rb
@@ -1,9 +1,12 @@
+# frozen_string_literal: true
+
class SubmissionsController < ApplicationController
- include SubmissionsHelper, SubmissionUpdater, OntologyUpdater
+ include OntologyUpdater
+ include SubmissionUpdater
+ include SubmissionsHelper
layout :determine_layout
- before_action :authorize_and_redirect, :only => [:edit, :update, :create, :new]
- before_action :submission_metadata, only: [:create, :edit, :new, :update, :index]
-
+ before_action :authorize_and_redirect, only: %i[edit update create new]
+ before_action :submission_metadata, only: %i[create edit new update index]
def index
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology_id]).first
@@ -13,11 +16,12 @@ def index
@ont_restricted = ontology_restricted?(@ontology.acronym)
# Retrieve submissions in descending submissionId order (should be reverse chronological order)
- @submissions = @ontology.explore.submissions({include: "submissionId,creationDate,released,modificationDate,submissionStatus,hasOntologyLanguage,version,diffFilePath,ontology"})
- .sort {|a,b| b.submissionId.to_i <=> a.submissionId.to_i } || []
+ @submissions = @ontology.explore.submissions({ include: 'submissionId,creationDate,released,modificationDate,submissionStatus,hasOntologyLanguage,version,diffFilePath,ontology' })
+ .sort do |a, b|
+ b.submissionId.to_i <=> a.submissionId.to_i
+ end || []
LOG.add :error, "No submissions for ontology: #{@ontology.id}" if @submissions.empty?
-
end
# When getting "Add submission" form to display
@@ -27,10 +31,10 @@ def new
@submission.id = nil
@categories = LinkedData::Client::Models::Category.all
@groups = LinkedData::Client::Models::Group.all
- @user_select_list = LinkedData::Client::Models::User.all.map {|u| [u.username, u.id]}
- @user_select_list.sort! {|a,b| a[1].downcase <=> b[1].downcase}
+ @user_select_list = LinkedData::Client::Models::User.all.map { |u| [u.username, u.id] }
+ @user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
@is_update_ontology = true
- render "ontologies/new"
+ render 'ontologies/new'
end
# Called when form to "Add submission" is submitted
@@ -57,23 +61,27 @@ def create
# Called when form to "Edit submission" is submitted
def edit_properties
display_submission_attributes params[:ontology_id], params[:properties]&.split(','), submissionId: params[:submission_id],
- inline_save: params[:inline_save]&.eql?('true')
+ inline_save: params[:inline_save]&.eql?('true')
attribute_template_output = render_to_string(inline: helpers.render_submission_inputs(params[:container_id] || 'metadata_by_ontology'))
render inline: attribute_template_output
-
end
def edit
@ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology_id]).first
ontology_not_found(params[:ontology_id]) unless @ontology
- category_attributes = submission_metadata.group_by{|x| x['category']}.transform_values{|x| x.map{|attr| attr['attribute']} }
- category_attributes = category_attributes.reject{|key| ['no'].include?(key.to_s)}
+ category_attributes = submission_metadata.group_by { |x| x['category'] }.transform_values do |x|
+ x.map do |attr|
+ attr['attribute']
+ end
+ end
+ category_attributes = category_attributes.reject { |key| ['no'].include?(key.to_s) }
category_attributes['general'] << %w[acronym name groups administeredBy categories]
category_attributes['licensing'] << 'viewingRestriction'
category_attributes['relations'] << 'viewOf'
- @categories_order = ['general', 'description', 'dates', 'licensing', 'persons and organizations', 'links', 'media', 'community', 'usage' ,'relations', 'content','methodology', 'object description properties']
+ @categories_order = ['general', 'description', 'dates', 'licensing', 'persons and organizations', 'links', 'media',
+ 'community', 'usage', 'relations', 'content', 'methodology', 'object description properties']
@category_attributes = category_attributes
end
@@ -110,8 +118,5 @@ def update
reset_agent_attributes
render_submission_attribute(params[:attribute])
end
-
end
-
-
end
diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb
index 54040a4158..e17dfc73ff 100644
--- a/app/controllers/subscriptions_controller.rb
+++ b/app/controllers/subscriptions_controller.rb
@@ -1,41 +1,41 @@
-class SubscriptionsController < ApplicationController
+# frozen_string_literal: true
+class SubscriptionsController < ApplicationController
def create
# Try to get the user linked data instance
user_id = params[:user_id]
u = LinkedData::Client::Models::User.find(user_id)
- raise Exception if u.nil?
+ raise StandardError if u.nil?
# Try to get the ontology linked data instance
ontology_id = params[:ontology_id]
- if ontology_id.start_with? 'http'
- ont = LinkedData::Client::Models::Ontology.find(ontology_id)
- else
- ont = LinkedData::Client::Models::Ontology.find_by_acronym(ontology_id).first
- end
- raise Exception if ont.nil?
+ ont = if ontology_id.start_with? 'http'
+ LinkedData::Client::Models::Ontology.find(ontology_id)
+ else
+ LinkedData::Client::Models::Ontology.find_by_acronym(ontology_id).first
+ end
+ raise StandardError if ont.nil?
# Is this request to add or remove a subscription?
- subscribed = params[:subbed] # string (not boolean)
- if subscribed.eql?("true")
+ subscribed = params[:subbed] # string (not boolean)
+ if subscribed.eql?('true')
# Already subscribed, so this request must be a delete
# Note that this routine removes ALL subscriptions for the ontology, regardless of type.
# Previous way to delete subscription: error when u.update if more than 1 subscription in the subscription array:
- #u.subscription.delete_if {|sub| sub[:ontology].split('/').last.eql?(ont.acronym) }
+ # u.subscription.delete_if {|sub| sub[:ontology].split('/').last.eql?(ont.acronym) }
# So here we re-generate a new subscription Array (instead of directly updating it, which causes error)
all_subs = []
u.subscription.each do |subs|
# Add all subscription to the array, but not the one to be deleted
- if !subs.ontology.split('/').last.eql?(ont.acronym)
- all_subs.push({ontology: subs.ontology, notification_type: subs.notification_type})
+ unless subs.ontology.split('/').last.eql?(ont.acronym)
+ all_subs.push({ ontology: subs.ontology, notification_type: subs.notification_type })
end
end
- u.subscription = all_subs
else
# Not subscribed yet, so this request must be for adding subscription
# Old way:
- #subscription = {ontology: ont.acronym, notification_type: "NOTES"} #NOTIFICATION_TYPES[:notes]}
- #u.subscription.push(subscription)
+ # subscription = {ontology: ont.acronym, notification_type: "NOTES"} #NOTIFICATION_TYPES[:notes]}
+ # u.subscription.push(subscription)
# This way was not working, updating subscription is failing when more than 1 subscription in the array
# And we were updating with different types of object in the subscription array : OpenStruct and hash
# So we are generating an array with only hash
@@ -43,17 +43,17 @@ def create
all_subs = []
u.subscription.each do |subs|
# add all existing subscriptions
- all_subs.push({ontology: subs.ontology, notification_type: subs.notification_type})
- if subs.ontology.split("/").last == ont.acronym && subs.notification_type == "NOTES"
+ all_subs.push({ ontology: subs.ontology, notification_type: subs.notification_type })
+ if subs.ontology.split('/').last == ont.acronym && subs.notification_type == 'NOTES'
# avoid to subscribe many times to the same ontology
already_subscribed = true
end
end
if already_subscribed == false
- all_subs.push({ontology: ont.acronym, notification_type: "NOTES"}) # the new subscription
+ all_subs.push({ ontology: ont.acronym, notification_type: 'NOTES' }) # the new subscription
end
- u.subscription = all_subs
end
+ u.subscription = all_subs
# Try to update the user instance and the session user.
begin
@@ -61,27 +61,26 @@ def create
if response_success?(error_response)
updated_sub = true
session[:user].subscription = u.subscription
- #session[:user] = u
+ # session[:user] = u
# NOTES:
# - Cannot update session[:user] as above. The session user object is special because it only
# gets set when someone logs in and the user object returned when authenticating is the
# only one that will contain the api key for security reasons. So we actually need to use
# the update_from_params method, can’t just set the object to the user linked data instance.
#
- #session[:user].update_from_params(params[:user])
+ # session[:user].update_from_params(params[:user])
# update_from_params first gets all attributes from the REST service for the object being updated,
# then sets the values provided in the params hash where the param keys match setter names on the
# object (in this case, for example, :subscription would set the @subscription value on the instance).
# That’s all it does, no saving or anything.
else
updated_sub = false
- #errors = response_errors(error_response)
+ # errors = response_errors(error_response)
end
- rescue
+ rescue StandardError
updated_sub = false
end
- render :json => { :updated_sub => updated_sub, :user_subscriptions => u.subscription }
+ render json: { updated_sub: updated_sub, user_subscriptions: u.subscription }
end
-
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 86d9a2e6ae..3801af9c77 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1,15 +1,15 @@
+# frozen_string_literal: true
+
class UsersController < ApplicationController
-
- before_action :unescape_id, only: [:edit, :show, :update]
- before_action :verify_owner, only: [:edit, :show, :subscribe, :un_subscribe]
- before_action :authorize_admin, only: [:index,:subscribe, :un_subscribe]
+ before_action :unescape_id, only: %i[edit show update]
+ before_action :verify_owner, only: %i[edit show subscribe un_subscribe]
+ before_action :authorize_admin, only: %i[index subscribe un_subscribe]
layout :determine_layout
-
# GET /users/1
# GET /users/1.xml
def show
- @user = if session[:user].admin? && params.has_key?(:id)
+ @user = if session[:user].admin? && params.key?(:id)
LinkedData::Client::Models::User.find_by_username(params[:id]).first
else
LinkedData::Client::Models::User.find(session[:user].id)
@@ -23,11 +23,11 @@ def show
@user_ontologies = @user.customOntology
## Copied from home controller , account action
- onts = LinkedData::Client::Models::Ontology.all;
- @admin_ontologies = onts.select {|o| o.administeredBy.include? @user.id }
+ onts = LinkedData::Client::Models::Ontology.all
+ @admin_ontologies = onts.select { |o| o.administeredBy.include? @user.id }
- projects = LinkedData::Client::Models::Project.all;
- @user_projects = projects.select {|p| p.creator.include? @user.id }
+ projects = LinkedData::Client::Models::Project.all
+ @user_projects = projects.select { |p| p.creator.include? @user.id }
end
# GET /users/new
@@ -40,9 +40,9 @@ def edit
@user = LinkedData::Client::Models::User.find(params[:id])
@user ||= LinkedData::Client::Models::User.find_by_username(params[:id]).first
- if (params[:password].eql?("true"))
- @user.validate_password = true
- end
+ return unless params[:password].eql?('true')
+
+ @user.validate_password = true
end
# POST /users
@@ -51,16 +51,20 @@ def create
@errors = validate(user_params)
@user = LinkedData::Client::Models::User.new(values: user_params)
- if @errors.size < 1
+ if @errors.empty?
@user_saved = @user.save
if response_error?(@user_saved)
@errors = response_errors(@user_saved)
# @errors = {acronym: "Username already exists, please use another"} if @user_saved.status == 409
- render action: "new"
+ render action: 'new'
else
# Attempt to register user to list
if params[:user][:register_mail_list]
- SubscribeMailer.register_for_announce_list(@user.email,@user.firstName,@user.lastName).deliver rescue nil
+ begin
+ SubscribeMailer.register_for_announce_list(@user.email, @user.firstName, @user.lastName).deliver
+ rescue StandardError
+ nil
+ end
end
flash[:notice] = 'Account was successfully created'
@@ -68,7 +72,7 @@ def create
redirect_to_browse
end
else
- render action: "new"
+ render action: 'new'
end
end
@@ -78,16 +82,14 @@ def update
@user = LinkedData::Client::Models::User.find(params[:id])
@user = LinkedData::Client::Models::User.find_by_username(params[:id]).first if @user.nil?
@errors = validate_update(user_params)
- if @errors.size < 1
+ if @errors.empty?
if params[:user][:password]
error_response = @user.update(values: { password: params[:user][:password] })
else
user_roles = @user.role
- if @user.admin? != (params[:user][:admin].to_i == 1)
- user_roles = update_role(@user)
- end
+ user_roles = update_role(@user) if @user.admin? != (params[:user][:admin].to_i == 1)
@user.update_from_params(user_params.merge!(role: user_roles))
error_response = @user.update
@@ -96,26 +98,24 @@ def update
if response_error?(error_response)
@errors = response_errors(error_response)
# @errors = {acronym: "Username already exists, please use another"} if error_response.status == 409
- render action: "edit"
+ render action: 'edit'
else
flash[:notice] = 'Account was successfully updated'
- if session[:user].username == @user.username
- session[:user].update_from_params(user_params)
- end
+ session[:user].update_from_params(user_params) if session[:user].username == @user.username
redirect_to user_path(@user.username)
end
else
- render action: "edit"
+ render action: 'edit'
end
end
# DELETE /users/1
def destroy
- response = {errors: '', success: ''}
+ response = { errors: '', success: '' }
@user = LinkedData::Client::Models::User.find(params[:id])
@user = LinkedData::Client::Models::User.find_by_username(params[:id]).first if @user.nil?
- if(session[:user].admin?)
+ if session[:user].admin?
@user.delete
response[:success] << 'User deleted successfully '
@@ -149,42 +149,40 @@ def custom_ontologies
redirect_to user_path(@user.username)
end
-
def subscribe
@user = LinkedData::Client::Models::User.find_by_username(params[:username]).first
- deliver "subscribe", SubscribeMailer.register_for_announce_list(@user.email,@user.firstName,@user.lastName)
+ deliver 'subscribe', SubscribeMailer.register_for_announce_list(@user.email, @user.firstName, @user.lastName)
end
def un_subscribe
- @email = params[:email]
- deliver "unsubscribe", SubscribeMailer.unregister_for_announce_list(@email)
+ @email = params[:email]
+ deliver 'unsubscribe', SubscribeMailer.unregister_for_announce_list(@email)
end
-
private
- def deliver(action,job)
+ def deliver(action, job)
begin
job.deliver
- to_or_from = action.eql?("subscribe") ? "to" : "from"
+ to_or_from = action.eql?('subscribe') ? 'to' : 'from'
flash[:success] = "You have successfully #{action} #{to_or_from} our user mailing list: #{$ANNOUNCE_LIST}"
- rescue => exception
- flash[:error] = "Something went wrong ..."
+ rescue StandardError
+ flash[:error] = 'Something went wrong ...'
end
redirect_to '/account'
end
def user_params
- params[:user]["orcidId"] = extract_id_from_url(params[:user]["orcidId"], 'orcid.org')
- params[:user]["githubId"] = extract_id_from_url(params[:user]["githubId"], 'github.com')
+ params[:user]['orcidId'] = extract_id_from_url(params[:user]['orcidId'], 'orcid.org')
+ params[:user]['githubId'] = extract_id_from_url(params[:user]['githubId'], 'github.com')
p = params.require(:user).permit(:firstName, :lastName, :username, :orcidId, :githubId, :email, :email_confirmation, :password,
:password_confirmation, :register_mail_list, :admin)
p.to_h
end
-
+
def extract_id_from_url(url, pattern)
- if url && url.include?(pattern)
- url.split('/').last
+ if url&.include?(pattern)
+ url.split('/').last
else
url
end
@@ -196,68 +194,58 @@ def unescape_id
def verify_owner
return if current_user_admin?
+
if session[:user].nil? || (!session[:user].id.eql?(params[:id]) && !session[:user].username.eql?(params[:id]))
redirect_to controller: 'login', action: 'index', redirect: "/accounts/#{params[:id]}"
end
end
def get_ontology_list(ont_hash)
- return "" if ont_hash.nil?
+ return '' if ont_hash.nil?
+
ontologies = []
ont_hash.each do |ont, checked|
ontologies << ont if checked.to_i == 1
end
- ontologies.join(";")
+ ontologies.join(';')
end
def validate(params)
errors = []
- if params[:email].nil? || params[:email].length < 1 || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i)
- errors << "Please enter an email address"
- end
- if params[:password].nil? || params[:password].length < 1
- errors << "Please enter a password"
+ if params[:email].nil? || params[:email].empty? || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i)
+ errors << 'Please enter an email address'
end
- if !params[:password].eql?(params[:password_confirmation])
- errors << "Your Password and Password Confirmation do not match"
- end
- if using_captcha?
- if !verify_recaptcha
- errors << "Please fill in the proper text from the supplied image"
- end
+ errors << 'Please enter a password' if params[:password].nil? || params[:password].empty?
+ unless params[:password].eql?(params[:password_confirmation])
+ errors << 'Your Password and Password Confirmation do not match'
end
- if ((!params[:orcidId].match(/^\d{4}+(-\d{4})+$/)) || (params[:orcidId].length != 19)) && !(params[:orcidId].nil? || params[:orcidId].length < 1)
- errors << "Please enter a valide orcid id"
+ errors << 'Please fill in the proper text from the supplied image' if using_captcha? && !verify_recaptcha
+ if (!params[:orcidId].match(/^\d{4}+(-\d{4})+$/) || (params[:orcidId].length != 19)) && !(params[:orcidId].nil? || params[:orcidId].empty?)
+ errors << 'Please enter a valide orcid id'
end
- if params[:username].nil? || params[:username].length < 1 || !params[:username].match(/^[a-zA-Z0-9]([._-](?![._-])|[a-zA-Z0-9]){3,18}[a-zA-Z0-9]$/)
- errors << "please enter a valid username"
+ if params[:username].nil? || params[:username].empty? || !params[:username].match(/^[a-zA-Z0-9]([._-](?![._-])|[a-zA-Z0-9]){3,18}[a-zA-Z0-9]$/)
+ errors << 'please enter a valid username'
end
- return errors
+ errors
end
def validate_update(params)
errors = []
- if params[:email].nil? || params[:email].length < 1 || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)
- errors << "Please enter a valid email adresse"
+ if params[:email].nil? || params[:email].empty? || !params[:email].match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)
+ errors << 'Please enter a valid email adresse'
end
- if params[:firstName].nil? || params[:firstName].length < 1
- errors << "First name field is required"
+ errors << 'First name field is required' if params[:firstName].nil? || params[:firstName].empty?
+ errors << 'Last name field is required' if params[:lastName].nil? || params[:lastName].empty?
+ errors << 'Last name field is required' if params[:username].nil? || params[:username].empty?
+ if params[:orcidId].present? && (!params[:orcidId].match(/^\d{4}-\d{4}-\d{4}-\d{4}$/) || (params[:orcidId].length != 19))
+ errors << 'Please enter a valide orcide id'
end
- if params[:lastName].nil? || params[:lastName].length < 1
- errors << "Last name field is required"
- end
- if params[:username].nil? || params[:username].length < 1
- errors << "Last name field is required"
- end
- if params[:orcidId].present? && ((!params[:orcidId].match(/^\d{4}-\d{4}-\d{4}-\d{4}$/)) || (params[:orcidId].length != 19))
- errors << "Please enter a valide orcide id"
- end
- if !params[:password].eql?(params[:password_confirmation])
- errors << "Your Password and Password Confirmation do not match"
+ unless params[:password].eql?(params[:password_confirmation])
+ errors << 'Your Password and Password Confirmation do not match'
end
- return errors
+ errors
end
def update_role(user)
@@ -266,13 +254,12 @@ def update_role(user)
if session[:user].admin?
user_roles = user_roles.dup
if user.admin?
- user_roles.map!{ |role| role == "ADMINISTRATOR" ? "LIBRARIAN" : role}
+ user_roles.map! { |role| role == 'ADMINISTRATOR' ? 'LIBRARIAN' : role }
else
- user_roles.map!{ |role| role == "LIBRARIAN" ? "ADMINISTRATOR" : role}
+ user_roles.map! { |role| role == 'LIBRARIAN' ? 'ADMINISTRATOR' : role }
end
end
user_roles
end
-
end
diff --git a/app/controllers/virtual_appliance_controller.rb b/app/controllers/virtual_appliance_controller.rb
index 5b3701711f..4b6144942c 100644
--- a/app/controllers/virtual_appliance_controller.rb
+++ b/app/controllers/virtual_appliance_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class VirtualApplianceController < ApplicationController
layout 'ontology'
before_action :require_login
@@ -8,9 +10,7 @@ def index
@virtual_appliance_user = VirtualApplianceUser.where(user_id: @user.id)
@virtual_appliance_access = false
- if !@virtual_appliance_user.nil? && !@virtual_appliance_user.empty? || @user.admin?
- @virtual_appliance_access = true
- end
+ @virtual_appliance_access = true if !@virtual_appliance_user.nil? && !@virtual_appliance_user.empty? || @user.admin?
@va_users = VirtualApplianceUser.order(:user_id)
end
@@ -19,7 +19,8 @@ def create
user = LinkedData::Client::Models::User.find_by_username(params[:appliance_user][:user_id]).first
if user.nil?
- flash[:error] = "Problem adding account #{params[:appliance_user][:user_id]} : account does not exist".html_safe
+ flash[:error] =
+ "Problem adding account #{params[:appliance_user][:user_id]} : account does not exist".html_safe
redirect_to action: 'index' and return
end
@@ -30,7 +31,7 @@ def create
@new_user.save
end
- redirect_to :action => 'index'
+ redirect_to action: 'index'
end
private
diff --git a/app/controllers/visits_controller.rb b/app/controllers/visits_controller.rb
index f6c5253325..2a1c9898de 100644
--- a/app/controllers/visits_controller.rb
+++ b/app/controllers/visits_controller.rb
@@ -1,12 +1,12 @@
-class VisitsController < ApplicationController
+# frozen_string_literal: true
+class VisitsController < ApplicationController
layout :determine_layout
def index
@ontologies_views = LinkedData::Client::Models::Ontology.all(include_views: true)
- @ontologies = @ontologies_views.select {|o| !o.viewOf}
- @ontologies_hash = Hash[@ontologies_views.map {|o| [o.acronym, o]}]
+ @ontologies = @ontologies_views.reject(&:viewOf)
+ @ontologies_hash = Hash[@ontologies_views.map { |o| [o.acronym, o] }]
@analytics = LinkedData::Client::Analytics.last_month
end
-
end
diff --git a/app/decorators/base_decorator.rb b/app/decorators/base_decorator.rb
index f67b514eb6..ca45bffbb9 100644
--- a/app/decorators/base_decorator.rb
+++ b/app/decorators/base_decorator.rb
@@ -1,5 +1,6 @@
-class BaseDecorator < SimpleDelegator
+# frozen_string_literal: true
+class BaseDecorator < SimpleDelegator
attr_reader :view_context
def initialize(object, view_context)
@@ -10,5 +11,4 @@ def initialize(object, view_context)
def self.wrap_collection(objects, view_context)
objects.map { |object| new(object, view_context) }
end
-
-end
\ No newline at end of file
+end
diff --git a/app/decorators/note_decorator.rb b/app/decorators/note_decorator.rb
index e91e05a88d..b020ced77e 100644
--- a/app/decorators/note_decorator.rb
+++ b/app/decorators/note_decorator.rb
@@ -1,36 +1,38 @@
+# frozen_string_literal: true
+
class NoteDecorator < BaseDecorator
- include ApplicationHelper, NotesHelper
+ include NotesHelper
+ include ApplicationHelper
def author
- view_context.content_tag(:span, get_username(creator), class: "note_author")
+ view_context.content_tag(:span, get_username(creator), class: 'note_author')
end
def body_content
- view_context.content_tag(:div, view_context.simple_format(body), class: "note_body") unless body.blank?
+ view_context.content_tag(:div, view_context.simple_format(body), class: 'note_body') unless body.blank?
end
def created_date
- view_context.time_ago_in_words(DateTime.parse(created)) + " ago"
+ "#{view_context.time_ago_in_words(DateTime.parse(created))} ago"
end
def proposal_content
- if proposal
- view_context.content_tag(:div, (proposal_html(self)).html_safe, class: "proposal")
- end
+ return unless proposal
+
+ view_context.content_tag(:div, proposal_html(self).html_safe, class: 'proposal')
end
def reply_link
- view_context.link_to("reply", "#reply", class: "reply_reply", data: { parent_id: "#{id}", parent_type: "reply" })
+ view_context.link_to('reply', '#reply', class: 'reply_reply', data: { parent_id: id.to_s, parent_type: 'reply' })
end
def status
- if archived
- view_context.content_tag(:span, "archived", class: "archived_note")
- end
+ return unless archived
+
+ view_context.content_tag(:span, 'archived', class: 'archived_note')
end
def title
- view_context.content_tag(:span, "#{subject}", class: "note_title")
+ view_context.content_tag(:span, subject.to_s, class: 'note_title')
end
-
-end
\ No newline at end of file
+end
diff --git a/app/decorators/view_decorator.rb b/app/decorators/view_decorator.rb
index 4693aea61b..81cd912a52 100644
--- a/app/decorators/view_decorator.rb
+++ b/app/decorators/view_decorator.rb
@@ -1,8 +1,11 @@
+# frozen_string_literal: true
+
class ViewDecorator
attr_reader :view, :view_context
def initialize(view, view_context)
- @view, @view_context = view, view_context
+ @view = view
+ @view_context = view_context
end
def linked_name
@@ -11,6 +14,6 @@ def linked_name
def description
latest_submission = view.explore.latest_submission
- latest_submission.nil? ? "No description provided" : latest_submission.description
+ latest_submission.nil? ? 'No description provided' : latest_submission.description
end
-end
\ No newline at end of file
+end
diff --git a/app/helpers/about_helper.rb b/app/helpers/about_helper.rb
index 68e69aee14..0f57a7b5e3 100644
--- a/app/helpers/about_helper.rb
+++ b/app/helpers/about_helper.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
module AboutHelper
end
diff --git a/app/helpers/admin/licenses_helper.rb b/app/helpers/admin/licenses_helper.rb
index 4d11f0b1f1..7e9c8a69e3 100644
--- a/app/helpers/admin/licenses_helper.rb
+++ b/app/helpers/admin/licenses_helper.rb
@@ -1,17 +1,20 @@
-module Admin::LicensesHelper
+# frozen_string_literal: true
- def license_notification(license)
- days = license.days_remaining
-
- if (days == 0)
- msg = (t(".license_expired") << " " << t(".license_contact")).html_safe
- notification = tag.div msg, class: "alert alert-danger mt-3", role: "alert"
- elsif license.is_trial?
- msg = (t(".license_trial", count: days) << " " << t(".license_obtain") << " " << t(".license_contact")).html_safe
- notification = tag.div msg, class: "alert alert-info mt-3", role: "alert"
+module Admin
+ module LicensesHelper
+ def license_notification(license)
+ days = license.days_remaining
+
+ if days.zero?
+ msg = (t('.license_expired') << ' ' << t('.license_contact')).html_safe
+ notification = tag.div msg, class: 'alert alert-danger mt-3', role: 'alert'
+ elsif license.is_trial?
+ msg = (t('.license_trial',
+ count: days) << ' ' << t('.license_obtain') << ' ' << t('.license_contact')).html_safe
+ notification = tag.div msg, class: 'alert alert-info mt-3', role: 'alert'
+ end
+
+ notification || ''
end
-
- notification ||= ""
end
-
end
diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb
index 7553a567df..f56600d5b7 100644
--- a/app/helpers/admin_helper.rb
+++ b/app/helpers/admin_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module AdminHelper
def selected_admin_section?(section_title)
current_section = params[:section] || 'site'
diff --git a/app/helpers/agent_helper.rb b/app/helpers/agent_helper.rb
index 39ee7aef4d..1b352ecc67 100644
--- a/app/helpers/agent_helper.rb
+++ b/app/helpers/agent_helper.rb
@@ -1,5 +1,6 @@
-module AgentHelper
+# frozen_string_literal: true
+module AgentHelper
def agent_id_alert_container_id(agent_id, parent_id)
"agents_alerts_#{agent_id_frame_id(agent_id, parent_id)}"
end
@@ -12,7 +13,7 @@ def agent_alert_container(agent, parent_id)
render_alerts_container(agent_alert_container_id(agent, parent_id))
end
- def agent_id_alert_container(agent_id, parent_id)
+ def agent_id_alert_container(_agent_id, parent_id)
render_alerts_container(agent_alert_container_id(agent, parent_id))
end
@@ -33,21 +34,24 @@ def agent_id_frame_id(agent_id, parent_id)
end
def agent_id(agent)
- return if agent.nil?
+ return if agent.nil?
agent_id = agent.is_a?(String) ? agent : agent.id
agent_id ? agent_id.split('/').last : ''
end
def link_to_agent_edit_modal(agent, parent_id = nil)
-
- link_to_modal(nil, edit_agent_path(agent_id(agent), parent_id: parent_id, show_affiliations: parent_id.nil? || parent_id.empty?), class: 'btn btn-sm btn-light', data: { show_modal_title_value: "Edit agent #{agent.id}" }) do
+ link_to_modal(nil,
+ edit_agent_path(agent_id(agent), parent_id: parent_id, show_affiliations: parent_id.nil? || parent_id.empty?), class: 'btn btn-sm btn-light', data: { show_modal_title_value: "Edit agent #{agent.id}" }) do
content_tag(:i, '', class: 'far fa-edit')
end
end
def link_to_agent_edit(agent, parent_id = nil)
- link_to(edit_agent_path(agent_id(agent), parent_id: parent_id, show_affiliations: parent_id.nil? || parent_id.empty?), class: 'btn btn-sm btn-light') do
+ link_to(
+ edit_agent_path(agent_id(agent), parent_id: parent_id,
+ show_affiliations: parent_id.nil? || parent_id.empty?), class: 'btn btn-sm btn-light'
+ ) do
content_tag(:i, '', class: 'far fa-edit')
end
end
@@ -62,16 +66,16 @@ def identifier_link(link, link_to: true)
else
link
end
-
end
def display_identifiers(identifiers, link: true)
schemes_urls = { ORCID: 'https://orcid.org/', ISNI: 'https://isni.org/', ROR: 'https://ror.org/', GRID: 'https://www.grid.ac/' }
Array(identifiers).map do |i|
- if i["schemaAgency"]
- schema_agency, notation = [i["schemaAgency"], i["notation"]]
+ if i['schemaAgency']
+ schema_agency = i['schemaAgency']
+ notation = i['notation']
else
- schema_agency, notation = (i["id"] || i["@id"]).split('Identifiers/').last.delete(' ').split(':')
+ schema_agency, notation = (i['id'] || i['@id']).split('Identifiers/').last.delete(' ').split(':')
end
value = "#{schemes_urls[schema_agency.to_sym]}#{notation}"
identifier_link(value, link_to: link)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0befcf29c3..f472c15d49 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Methods added to this helper will be available to all templates in the application.
require 'uri'
@@ -9,20 +11,20 @@ module ApplicationHelper
REST_URI = $REST_URL
API_KEY = $API_KEY
- include ModalHelper, MultiLanguagesHelper
-
- RESOLVE_NAMESPACE = {:omv => "http://omv.ontoware.org/2005/05/ontology#", :skos => "http://www.w3.org/2004/02/skos/core#", :owl => "http://www.w3.org/2002/07/owl#",
- :rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#", :rdfs => "http://www.w3.org/2000/01/rdf-schema#", :metadata => "http://data.bioontology.org/metadata/",
- :metadata_def => "http://data.bioontology.org/metadata/def/", :dc => "http://purl.org/dc/elements/1.1/", :xsd => "http://www.w3.org/2001/XMLSchema#",
- :oboinowl_gen => "http://www.geneontology.org/formats/oboInOwl#", :obo_purl => "http://purl.obolibrary.org/obo/",
- :umls => "http://bioportal.bioontology.org/ontologies/umls/", :door => "http://kannel.open.ac.uk/ontology#", :dct => "http://purl.org/dc/terms/",
- :void => "http://rdfs.org/ns/void#", :foaf => "http://xmlns.com/foaf/0.1/", :vann => "http://purl.org/vocab/vann/", :adms => "http://www.w3.org/ns/adms#",
- :voaf => "http://purl.org/vocommons/voaf#", :dcat => "http://www.w3.org/ns/dcat#", :mod => "http://www.isibang.ac.in/ns/mod#", :prov => "http://www.w3.org/ns/prov#",
- :cc => "http://creativecommons.org/ns#", :schema => "http://schema.org/", :doap => "http://usefulinc.com/ns/doap#", :bibo => "http://purl.org/ontology/bibo/",
- :wdrs => "http://www.w3.org/2007/05/powder-s#", :cito => "http://purl.org/spar/cito/", :pav => "http://purl.org/pav/", :nkos => "http://w3id.org/nkos/nkostype#",
- :oboInOwl => "http://www.geneontology.org/formats/oboInOwl#", :idot => "http://identifiers.org/idot/", :sd => "http://www.w3.org/ns/sparql-service-description#",
- :cclicense => "http://creativecommons.org/licenses/"}
-
+ include MultiLanguagesHelper
+ include ModalHelper
+
+ RESOLVE_NAMESPACE = { omv: 'http://omv.ontoware.org/2005/05/ontology#', skos: 'http://www.w3.org/2004/02/skos/core#', owl: 'http://www.w3.org/2002/07/owl#',
+ rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs: 'http://www.w3.org/2000/01/rdf-schema#', metadata: 'http://data.bioontology.org/metadata/',
+ metadata_def: 'http://data.bioontology.org/metadata/def/', dc: 'http://purl.org/dc/elements/1.1/', xsd: 'http://www.w3.org/2001/XMLSchema#',
+ oboinowl_gen: 'http://www.geneontology.org/formats/oboInOwl#', obo_purl: 'http://purl.obolibrary.org/obo/',
+ umls: 'http://bioportal.bioontology.org/ontologies/umls/', door: 'http://kannel.open.ac.uk/ontology#', dct: 'http://purl.org/dc/terms/',
+ void: 'http://rdfs.org/ns/void#', foaf: 'http://xmlns.com/foaf/0.1/', vann: 'http://purl.org/vocab/vann/', adms: 'http://www.w3.org/ns/adms#',
+ voaf: 'http://purl.org/vocommons/voaf#', dcat: 'http://www.w3.org/ns/dcat#', mod: 'http://www.isibang.ac.in/ns/mod#', prov: 'http://www.w3.org/ns/prov#',
+ cc: 'http://creativecommons.org/ns#', schema: 'http://schema.org/', doap: 'http://usefulinc.com/ns/doap#', bibo: 'http://purl.org/ontology/bibo/',
+ wdrs: 'http://www.w3.org/2007/05/powder-s#', cito: 'http://purl.org/spar/cito/', pav: 'http://purl.org/pav/', nkos: 'http://w3id.org/nkos/nkostype#',
+ oboInOwl: 'http://www.geneontology.org/formats/oboInOwl#', idot: 'http://identifiers.org/idot/', sd: 'http://www.w3.org/ns/sparql-service-description#',
+ cclicense: 'http://creativecommons.org/licenses/' }.freeze
def ontologies_analytics
LinkedData::Client::Analytics.all.to_h.map do |key, ontology_analytics|
@@ -33,11 +35,9 @@ def ontologies_analytics
end
def get_apikey
- unless session[:user].nil?
- return session[:user].apikey
- else
- return LinkedData::Client.settings.apikey
- end
+ return LinkedData::Client.settings.apikey if session[:user].nil?
+
+ session[:user].apikey
end
def omniauth_providers_info
@@ -45,7 +45,7 @@ def omniauth_providers_info
end
def omniauth_provider_info(strategy)
- omniauth_providers_info.select {|k,v| v[:strategy].eql?(strategy.to_sym) || k.eql?(strategy)}
+ omniauth_providers_info.select { |k, v| v[:strategy].eql?(strategy.to_sym) || k.eql?(strategy) }
end
def omniauth_token_provider(strategy)
@@ -53,17 +53,16 @@ def omniauth_token_provider(strategy)
end
def isOwner?(id)
- unless session[:user].nil?
- if session[:user].admin?
- return true
- elsif session[:user].id.eql?(id)
- return true
- else
- return false
- end
+ return if session[:user].nil?
+
+ if session[:user].admin?
+ true
+ elsif session[:user].id.eql?(id)
+ true
+ else
+ false
end
end
-
def encode_param(string)
CGI.escape(string)
@@ -78,23 +77,21 @@ def unescape(string)
end
def clean(string)
- string = string.gsub("\"",'\'')
- return string.gsub("\n",'')
+ string = string.gsub('"', '\'')
+ string.gsub("\n", '')
end
def clean_id(string)
- new_string = string.gsub(":","").gsub("-","_").gsub(".","_")
- return new_string
+ string.gsub(':', '').gsub('-', '_').gsub('.', '_')
end
def to_param(string)
- "#{encode_param(string.gsub(" ","_"))}"
+ encode_param(string.gsub(' ', '_')).to_s
end
def get_username(user_id)
user = LinkedData::Client::Models::User.find(user_id)
- username = user.nil? ? user_id : user.username
- username
+ user.nil? ? user_id : user.username
end
def current_user
@@ -102,52 +99,49 @@ def current_user
end
def current_user_admin?
- session[:user] && session[:user].admin?
+ session[:user]&.admin?
end
def remove_owl_notation(string)
# TODO_REV: No OWL notation, but should we modify the IRI?
return string
- unless string.nil?
- strings = string.split(":")
- if strings.size<2
- #return string.titleize
- return string
- else
- #return strings[1].titleize
- return strings[1]
- end
+ return if string.nil?
+
+ strings = string.split(':')
+ if strings.size < 2
+ # return string.titleize
+ string
+ else
+ # return strings[1].titleize
+ strings[1]
end
end
- def draw_note_tree(notes,key)
- output = ""
- draw_note_tree_leaves(notes,0,output,key)
- return output
+ def draw_note_tree(notes, key)
+ output = ''
+ draw_note_tree_leaves(notes, 0, output, key)
+ output
end
- def draw_note_tree_leaves(notes,level,output,key)
- for note in notes
- name="Anonymous"
- unless note.user.nil?
- name=note.user.username
- end
- headertext=""
- notetext=""
+ def draw_note_tree_leaves(notes, level, output, key)
+ notes.each do |note|
+ name = 'Anonymous'
+ name = note.user.username unless note.user.nil?
+ headertext = ''
+ notetext = ''
if note.note_type.eql?(5)
- headertext<< "'
+ elsif metric.is_a?(Hash)
counts = []
metric.each do |cls, count|
counts << "#{cls} (#{count})"
@@ -34,13 +35,12 @@ def format_metric_list(metrics, metric, title)
markup << "#{metric.length} "
markup << ""
markup << "
#{title} "
- markup << metric.join(" ")
- markup << "
"
+ markup << metric.join(' ')
+ markup << '
'
else
markup = metric.to_s
end
markup
end
-
end
diff --git a/app/helpers/reviews_helper.rb b/app/helpers/reviews_helper.rb
index bb859ee872..c6ade5b00d 100644
--- a/app/helpers/reviews_helper.rb
+++ b/app/helpers/reviews_helper.rb
@@ -1,6 +1,8 @@
+# frozen_string_literal: true
+
module ReviewsHelper
def organize_ratings(review)
- return [
+ [
{ name: :usability, value: review.usabilityRating.to_i },
{ name: :coverage, value: review.coverageRating.to_i },
{ name: :quality, value: review.qualityRating.to_i },
diff --git a/app/helpers/schemes_helper.rb b/app/helpers/schemes_helper.rb
index f9c67d1324..0396e7a61b 100644
--- a/app/helpers/schemes_helper.rb
+++ b/app/helpers/schemes_helper.rb
@@ -1,11 +1,10 @@
module SchemesHelper
-
def get_schemes(ontology)
ontology.explore.schemes(language: request_lang)
end
def get_scheme(ontology, scheme_uri)
- ontology.explore.schemes({ include: 'all', language: request_lang}, scheme_uri)
+ ontology.explore.schemes({ include: 'all', language: request_lang }, scheme_uri)
end
def get_scheme_label(scheme)
@@ -19,7 +18,6 @@ def get_scheme_label(scheme)
end
def get_schemes_labels(schemes, main_uri)
-
selected_label = nil
schemes_labels = []
schemes.each do |x|
@@ -29,7 +27,7 @@ def get_schemes_labels(schemes, main_uri)
label[1] = "#{label[1]} (main)" unless label[0].empty?
selected_label = { 'prefLabel' => label, '@id' => id }
else
- schemes_labels.append( { 'prefLabel' => label, '@id' => id })
+ schemes_labels.append({ 'prefLabel' => label, '@id' => id })
end
end
@@ -65,6 +63,7 @@ def no_main_scheme_alert
'no main scheme defined in the URI attribute'
end
end
+
def no_schemes_alert
render Display::AlertComponent.new do
"#{@ontology.acronym} does not contain schemes (skos:ConceptScheme)"
@@ -72,8 +71,8 @@ def no_schemes_alert
end
def schemes_data
- schemes_labels, main_scheme = get_schemes_labels(@schemes,@submission.URI)
- selected_scheme = @schemes.select{ |s| params[:concept_schemes]&.split(',')&.include?(s['@id']) }
+ schemes_labels, main_scheme = get_schemes_labels(@schemes, @submission.URI)
+ selected_scheme = @schemes.select { |s| params[:concept_schemes]&.split(',')&.include?(s['@id']) }
selected_scheme = selected_scheme.empty? ? [main_scheme] : selected_scheme
[schemes_labels, main_scheme, selected_scheme]
end
@@ -84,7 +83,7 @@ def tree_link_to_schemes(schemes_labels, main_scheme_label, selected_scheme_id)
sorted_labels(schemes_labels).each do |s|
next unless main_scheme_label.nil? || s['prefLabel'] != main_scheme_label['prefLabel']
- out << <<-EOS
+ out << <<-EOS
#{link_to_scheme(s, selected_scheme_id)}
@@ -92,11 +91,12 @@ def tree_link_to_schemes(schemes_labels, main_scheme_label, selected_scheme_id)
end
out
end
+
def link_to_scheme(scheme, selected_scheme_id)
pref_label_lang, pref_label_html = get_scheme_label(scheme)
- tooltip = pref_label_lang.to_s.eql?('@none') ? '' : "data-controller='tooltip' data-tooltip-position-value='right' title='#{pref_label_lang.upcase}'"
+ tooltip = pref_label_lang.to_s.eql?('@none') ? '' : "data-controller='tooltip' data-tooltip-position-value='right' title='#{pref_label_lang.upcase}'"
<<-EOS
-
@@ -105,4 +105,3 @@ def link_to_scheme(scheme, selected_scheme_id)
EOS
end
end
-
diff --git a/app/helpers/submission_inputs_helper.rb b/app/helpers/submission_inputs_helper.rb
index bdc113a75a..4b166b2dfb 100644
--- a/app/helpers/submission_inputs_helper.rb
+++ b/app/helpers/submission_inputs_helper.rb
@@ -1,9 +1,10 @@
-module SubmissionInputsHelper
+# frozen_string_literal: true
+module SubmissionInputsHelper
class SubmissionMetadataInput
include MetadataHelper
- def initialize(attribute_key:, attr_metadata: , submission: nil, label: nil)
+ def initialize(attribute_key:, attr_metadata:, submission: nil, label: nil)
@attribute_key = attribute_key
@attr_metadata = attr_metadata
@submission = submission
@@ -82,10 +83,8 @@ def attribute_input(attr_key, long_text: false, label: nil, show_tooltip: true,
value: attr.values)
end
end
-
end
-
def ontology_name_input(ontology = @ontology)
text_input(name: 'ontology[name]', value: ontology.name)
end
@@ -98,10 +97,11 @@ def ontology_acronym_input(ontology = @ontology, update: @is_update_ontology)
def ontology_administered_by_input(ontology = @ontology, users_list = @user_select_list)
unless users_list
- users_list = LinkedData::Client::Models::User.all(include: "username").map { |u| [u.username, u.id] }
+ users_list = LinkedData::Client::Models::User.all(include: 'username').map { |u| [u.username, u.id] }
users_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
end
- select_input(label: "Administrator", name: "ontology[administeredBy]", values: users_list, selected: ontology.administeredBy || session[:user].id, multiple: true)
+ select_input(label: 'Administrator', name: 'ontology[administeredBy]', values: users_list,
+ selected: ontology.administeredBy || session[:user].id, multiple: true)
end
def ontology_categories_input(ontology = @ontology, categories = @categories)
@@ -111,20 +111,24 @@ def ontology_categories_input(ontology = @ontology, categories = @categories)
content_tag(:div, class: 'upload-ontology-chips-container') do
hidden_field_tag('ontology[hasDomain][]') +
categories.map do |category|
- check_input(name: "ontology[hasDomain][]", id: category[:acronym], label: category[:acronym], value: category[:id], checked: ontology.hasDomain&.any? { |x| x.eql?(category[:id]) })
+ check_input(name: 'ontology[hasDomain][]', id: category[:acronym], label: category[:acronym], value: category[:id], checked: ontology.hasDomain&.any? do |x|
+ x.eql?(category[:id])
+ end)
end.join.html_safe
end
end
end
def ontology_groups_input(ontology = @ontology, groups = @groups)
- groups ||= LinkedData::Client::Models::Group.all(display_links: false, display_context: false)
+ groups ||= LinkedData::Client::Models::Group.all(display_links: false, display_context: false)
render Input::InputFieldComponent.new(name: '', label: 'Groups') do
content_tag(:div, class: 'upload-ontology-chips-container') do
hidden_field_tag('ontology[group][]') +
groups.map do |group|
- check_input(name: "ontology[group][]", id: group[:acronym], label: group[:acronym], value: group[:id], checked: ontology.group&.any? { |x| x.eql?(group[:id]) })
+ check_input(name: 'ontology[group][]', id: group[:acronym], label: group[:acronym], value: group[:id], checked: ontology.group&.any? do |x|
+ x.eql?(group[:id])
+ end)
end.join.html_safe
end
end
@@ -132,16 +136,20 @@ def ontology_groups_input(ontology = @ontology, groups = @groups)
def ontology_visibility_input(ontology = @ontology)
unless @user_select_list
- @user_select_list = LinkedData::Client::Models::User.all(include: "username").map { |u| [u.username, u.id] }
+ @user_select_list = LinkedData::Client::Models::User.all(include: 'username').map { |u| [u.username, u.id] }
@user_select_list.sort! { |a, b| a[1].downcase <=> b[1].downcase }
end
- render(Layout::RevealComponent.new(init_show: ontology.viewingRestriction&.eql?('private'), show_condition: 'private')) do |c|
+ render(Layout::RevealComponent.new(init_show: ontology.viewingRestriction&.eql?('private'),
+ show_condition: 'private')) do |c|
c.button do
- select_input(label: "Visibility", name: "ontology[viewingRestriction]", values: %w[public private], selected: ontology.viewingRestriction )
+ select_input(label: 'Visibility', name: 'ontology[viewingRestriction]', values: %w[public private],
+ selected: ontology.viewingRestriction)
end
content_tag(:div, class: 'upload-ontology-input-field-container') do
- select_input(label: "Add or remove accounts that are allowed to view classes in this ontology using the account name", name: "ontology[acl]", values: @user_select_list, selected: ontology.acl, multiple: true)
+ select_input(
+ label: 'Add or remove accounts that are allowed to view classes in this ontology using the account name', name: 'ontology[acl]', values: @user_select_list, selected: ontology.acl, multiple: true
+ )
end
end
end
@@ -150,12 +158,14 @@ def ontology_view_of_input(ontology = @ontology)
render Layout::RevealComponent.new(init_show: ontology.view?) do |c|
c.button do
content_tag(:span, class: 'd-flex') do
- switch_input(id: 'ontology_isView', name: 'ontology[isView]', label: 'Is a view of another ontology?', checked: ontology.view?)
+ switch_input(id: 'ontology_isView', name: 'ontology[isView]', label: 'Is a view of another ontology?',
+ checked: ontology.view?)
end
end
content_tag(:div) do
- render partial: "shared/ontology_picker_single", locals: {placeholder: "", field_name: "viewOf", selected: ontology.viewOf}
+ render partial: 'shared/ontology_picker_single',
+ locals: { placeholder: '', field_name: 'viewOf', selected: ontology.viewOf }
end
end
end
@@ -184,10 +194,12 @@ def contact_input(label: '', name: 'Contact', show_help: true)
c.row do
content_tag(:div, class: 'd-flex my-1') do
out = content_tag(:div, class: 'w-50 mr-2') do
- text_input(label: '', name: "submission[contact][#{i}][name]", value: contact['name'], error_message: '')
+ text_input(label: '', name: "submission[contact][#{i}][name]", value: contact['name'],
+ error_message: '')
end
out + content_tag(:div, class: 'w-50') do
- text_input(label: '', name: "submission[contact][#{i}][email]", value: contact['email'], error_message: '')
+ text_input(label: '', name: "submission[contact][#{i}][email]", value: contact['email'],
+ error_message: '')
end
end
end
@@ -221,8 +233,9 @@ def agent_type(attr)
end
def generate_integer_input(attr)
- # TODO to update to use a component
- number_field object_name, attr.metadata['attribute'].to_s.to_sym, value: @submission.send(attr.metadata['attribute']), class: 'metadataInput form-control'
+ # TODO: to update to use a component
+ number_field object_name, attr.metadata['attribute'].to_s.to_sym,
+ value: @submission.send(attr.metadata['attribute']), class: 'metadataInput form-control'
end
def generate_agent_input(attr)
@@ -233,7 +246,6 @@ def generate_agent_input(attr)
name_prefix: attr.name,
parent_id: '')
end
-
end
def generate_date_input(attr, max_date: nil)
@@ -268,7 +280,7 @@ def generate_list_field_input(attr, name, label, values, &block)
label
end
c.template do
- block.call('', "#{name}[NEW_RECORD]", attr.metadata['attribute'].to_s + '_' + @ontology.acronym)
+ block.call('', "#{name}[NEW_RECORD]", "#{attr.metadata['attribute']}_#{@ontology.acronym}")
end
c.empty_state do
@@ -277,12 +289,12 @@ def generate_list_field_input(attr, name, label, values, &block)
Array(values).each_with_index do |metadata_val, i|
c.row do
- block.call(metadata_val, "#{name}[#{i}]", "submission_#{attr.metadata['attribute'].to_s}" + '_' + @ontology.acronym)
+ block.call(metadata_val, "#{name}[#{i}]",
+ "submission_#{attr.metadata['attribute']}_#{@ontology.acronym}")
end
end
end
end
-
end
def generate_url_input(attr)
@@ -290,7 +302,7 @@ def generate_url_input(attr)
values = attr.values
name = attr.name
if attr.type?('list')
- generate_list_field_input(attr, name, label, values) do |value, row_name, id|
+ generate_list_field_input(attr, name, label, values) do |value, row_name, _id|
url_input(label: '', name: row_name, value: value)
end
else
@@ -302,7 +314,7 @@ def generate_list_text_input(attr)
label = attr_header_label(attr)
values = attr.values || ['']
name = attr.name
- generate_list_field_input(attr, name, label, values) do |value, row_name, id|
+ generate_list_field_input(attr, name, label, values) do |value, row_name, _id|
text_input(label: '', name: row_name, value: value)
end
end
@@ -312,7 +324,8 @@ def generate_boolean_input(attr)
value = value.to_s unless value.nil?
name = attr.name
content_tag(:div, class: 'd-flex') do
- switch_input(id: name, name: name, label: attr_header_label(attr), checked: value.eql?('true'), value: value, boolean_switch: true)
+ switch_input(id: name, name: name, label: attr_header_label(attr), checked: value.eql?('true'), value: value,
+ boolean_switch: true)
end
end
@@ -328,7 +341,7 @@ def selected_values(attr, enforced_values)
metadata_values = attr.values
select_values = enforced_values
- if metadata_values.kind_of?(Array)
+ if metadata_values.is_a?(Array)
metadata_values.map do |metadata|
select_values << metadata unless select_values.flatten.include?(metadata)
end
@@ -338,8 +351,6 @@ def selected_values(attr, enforced_values)
[metadata_values, select_values]
end
- private
-
def attr_header_label(attr, label = nil, show_tooltip: true)
label ||= attr.label
return '' if label.nil? || label.empty?
@@ -347,7 +358,7 @@ def attr_header_label(attr, label = nil, show_tooltip: true)
content_tag(:div) do
tooltip_span = render(Display::InfoTooltipComponent.new(text: attribute_help_text(attr)))
html = content_tag(:span, label)
- html += content_tag(:span, '*', class: "text-danger") if attr.required?
+ html += content_tag(:span, '*', class: 'text-danger') if attr.required?
html += content_tag(:span, tooltip_span, class: 'ml-1') if show_tooltip
html
end
@@ -366,11 +377,12 @@ def attribute_help_text(attr)
render SummarySectionComponent.new(title: title, show_card: false) do
help_text = ''
unless attr['metadataMappings'].nil?
- help_text += render(FieldContainerComponent.new(label: 'Equivalents', value: attr['metadataMappings'].join(', ')))
+ help_text += render(FieldContainerComponent.new(label: 'Equivalents',
+ value: attr['metadataMappings'].join(', ')))
end
unless attr['enforce'].nil? || attr['enforce'].empty?
- help_text += render(FieldContainerComponent.new(label: 'Validators', value: attr['enforce'].map do |x|
+ help_text += render(FieldContainerComponent.new(label: 'Validators', value: attr['enforce'].map do |x|
content_tag(:span, x.humanize, class: 'badge badge-primary mx-1')
end.join.html_safe))
end
@@ -382,4 +394,4 @@ def attribute_help_text(attr)
help_text
end
end
-end
\ No newline at end of file
+end
diff --git a/app/helpers/submissions_helper.rb b/app/helpers/submissions_helper.rb
index 10f1dd8228..859432a373 100644
--- a/app/helpers/submissions_helper.rb
+++ b/app/helpers/submissions_helper.rb
@@ -1,15 +1,16 @@
+# frozen_string_literal: true
+
module SubmissionsHelper
def metadata_help_link
content_tag(:div, class: 'edit-ontology-desc') do
html = content_tag(:span, 'To understand the ontologies metadata:')
html += content_tag(:span, style: 'width: 10px; height: 10px') do
- link_to(render(ExternalLinkTextComponent.new(text: 'see the Wiki')), "https://github.com/agroportal/documentation/wiki/Ontology-metadata")
+ link_to(render(ExternalLinkTextComponent.new(text: 'see the Wiki')), 'https://github.com/agroportal/documentation/wiki/Ontology-metadata')
end
html.html_safe
end
end
-
def ontology_submission_id_label(acronym, submission_id)
[acronym, submission_id].join('#')
end
@@ -24,7 +25,8 @@ def ontology_and_submission_id(value)
end
def render_submission_attribute(attribute, submission = @submission, ontology = @ontology)
- render partial: 'ontologies_metadata_curator/attribute_inline_editable', locals: { attribute: attribute, submission: submission, ontology: ontology }
+ render partial: 'ontologies_metadata_curator/attribute_inline_editable',
+ locals: { attribute: attribute, submission: submission, ontology: ontology }
end
def attribute_input_frame_id(acronym, submission_id, attribute)
@@ -33,11 +35,11 @@ def attribute_input_frame_id(acronym, submission_id, attribute)
def edit_submission_property_link(acronym, submission_id, attribute, container_id = nil, &block)
link = "/ontologies/#{acronym}/submissions/#{submission_id}/edit_properties?properties=#{attribute}&inline_save=true"
- if container_id
- link += "&container_id=#{container_id}"
- else
- link += "&container_id=#{attribute_input_frame_id(acronym, submission_id, attribute)}"
- end
+ link += if container_id
+ "&container_id=#{container_id}"
+ else
+ "&container_id=#{attribute_input_frame_id(acronym, submission_id, attribute)}"
+ end
link_to link, data: { turbo: true }, class: 'btn btn-sm btn-light' do
capture(&block)
end
@@ -48,17 +50,17 @@ def display_submission_attributes(acronym, attributes, submissionId: nil, inline
@selected_attributes = attributes
@inline_save = inline_save
- if @selected_attributes && !@selected_attributes.empty?
- display_properties = (equivalent_properties(@selected_attributes) + [:ontology, :submissionId]).join(',')
- else
- display_properties = 'all'
- end
+ display_properties = if @selected_attributes && !@selected_attributes.empty?
+ (equivalent_properties(@selected_attributes) + %i[ontology submissionId]).join(',')
+ else
+ 'all'
+ end
- if submissionId
- @submission = @ontology.explore.submissions({ display: display_properties }, submissionId)
- else
- @submission = @ontology.explore.latest_submission({ display: display_properties })
- end
+ @submission = if submissionId
+ @ontology.explore.submissions({ display: display_properties }, submissionId)
+ else
+ @ontology.explore.latest_submission({ display: display_properties })
+ end
end
def inline_save?
@@ -75,20 +77,21 @@ def selected_attribute?(attr)
def save_button
content_tag :div do
button_tag({ data: { controller: 'tooltip' }, title: 'Save', class: 'btn btn-sm btn-light mx-1' }) do
- content_tag(:i, "", class: 'fas fa-check')
+ content_tag(:i, '', class: 'fas fa-check')
end
end
-
end
- def cancel_link(acronym: @ontology.acronym, submission_id: @submission.submissionId, attribute:)
+ def cancel_link(attribute:, acronym: @ontology.acronym, submission_id: @submission.submissionId)
"/ontologies_metadata_curator/#{acronym}/submissions/#{submission_id}/attributes/#{attribute}"
end
def cancel_button(href)
content_tag :div do
- link_to(href, { data: { turbo: true, controller: 'tooltip', turbo_frame: '_self' }, title: 'Cancel', class: 'btn btn-sm btn-light mx-1' }) do
- content_tag(:i, "", class: 'fas fa-times')
+ link_to(href,
+ { data: { turbo: true, controller: 'tooltip', turbo_frame: '_self' }, title: 'Cancel',
+ class: 'btn btn-sm btn-light mx-1' }) do
+ content_tag(:i, '', class: 'fas fa-times')
end
end
end
@@ -119,7 +122,8 @@ def sections
end
def format_equivalent
- %w[hasOntologyLanguage prefLabelProperty synonymProperty definitionProperty authorProperty obsoleteProperty obsoleteParent]
+ %w[hasOntologyLanguage prefLabelProperty synonymProperty definitionProperty authorProperty obsoleteProperty
+ obsoleteParent]
end
def location_equivalent
@@ -160,49 +164,33 @@ def submission_editable_properties
end
end
-
-
def attribute_infos(attr_label)
- submission_metadata.select{ |attr_hash| attr_hash["attribute"].to_s.eql?(attr_label) }.first
+ submission_metadata.select { |attr_hash| attr_hash['attribute'].to_s.eql?(attr_label) }.first
end
- def object_name(acronym = @ontology.acronym, submissionId = @submission.submissionId)
+ def object_name(_acronym = @ontology.acronym, _submissionId = @submission.submissionId)
# TO REMOVE or Update
'submission'
end
def agent_attributes
- submission_metadata.select { |x| x["enforce"].include?('Agent') }.map { |x| x["attribute"] }
+ submission_metadata.select { |x| x['enforce'].include?('Agent') }.map { |x| x['attribute'] }
end
def render_submission_inputs(frame_id)
- output = ""
-
- if selected_attribute?('acronym')
- output += ontology_acronym_input(update: true)
- end
+ output = ''
- if selected_attribute?('name')
- output += ontology_name_input
- end
+ output += ontology_acronym_input(update: true) if selected_attribute?('acronym')
+ output += ontology_name_input if selected_attribute?('name')
- if selected_attribute?('hasOntologyLanguage')
- output += render partial: 'submissions/submission_format_form'
- end
+ output += render partial: 'submissions/submission_format_form' if selected_attribute?('hasOntologyLanguage')
- if selected_attribute?('categories')
- output += ontology_categories_input
- end
-
- if selected_attribute?('groups')
- output += ontology_groups_input
- end
+ output += ontology_categories_input if selected_attribute?('categories')
+ output += ontology_groups_input if selected_attribute?('groups')
- if selected_attribute?('administeredBy')
- output += ontology_administered_by_input
- end
+ output += ontology_administered_by_input if selected_attribute?('administeredBy')
if selected_attribute?('location')
output += attribute_form_group_container('location') do
@@ -212,7 +200,7 @@ def render_submission_inputs(frame_id)
if selected_attribute?('contact')
output += attribute_form_group_container('contact') do
- @submission.contact = [] unless @submission.contact && @submission.contact.size > 0
+ @submission.contact = [] unless @submission.contact&.size&.positive?
contact_input(label: 'Contacts', name: '')
end
end
@@ -223,7 +211,6 @@ def render_submission_inputs(frame_id)
end
end
-
if selected_attribute?('viewOf')
output += attribute_form_group_container('viewOf') do
ontology_view_of_input
@@ -235,27 +222,26 @@ def render_submission_inputs(frame_id)
if selected_attribute?('abstract')
output += attribute_form_group_container('abstract') do
- raw attribute_input('abstract',long_text: true, label: label)
+ raw attribute_input('abstract', long_text: true, label: label)
end
end
if selected_attribute?('description')
output += attribute_form_group_container('description') do
- raw attribute_input('description',long_text: true, label: label)
+ raw attribute_input('description', long_text: true, label: label)
end
end
- submission_metadata.reject { |attr| reject_metadata.include?(attr['attribute']) || !selected_attribute?(attr['attribute']) }.each do |attr|
+ submission_metadata.reject do |attr|
+ reject_metadata.include?(attr['attribute']) || !selected_attribute?(attr['attribute'])
+ end.each do |attr|
output += attribute_form_group_container(attr['attribute']) do
raw attribute_input(attr['attribute'], label: label)
end
end
-
-
-
render TurboFrameComponent.new(id: frame_id) do
output.html_safe
end
end
-end
\ No newline at end of file
+end
diff --git a/app/helpers/turbo_helper.rb b/app/helpers/turbo_helper.rb
index c1b0303b46..b80ef1f03b 100644
--- a/app/helpers/turbo_helper.rb
+++ b/app/helpers/turbo_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module TurboHelper
def frame_id(id, suffix)
"#{id}_#{suffix}"
@@ -8,20 +10,23 @@ def alerts_container_id(id = nil)
end
def alert(id: nil, type: 'success', &block)
- turbo_stream.prepend(id ||alerts_container_id) do
+ turbo_stream.prepend(id || alerts_container_id) do
Display::AlertComponent.new(type: type).render_in(view_context, &block)
end
end
def alert_error(id: nil, &block)
- alert(id: id, type:'danger', &block)
+ alert(id: id, type: 'danger', &block)
end
+
def alert_success(id: nil, &block)
- alert(id: id, type:'success', &block)
+ alert(id: id, type: 'success', &block)
end
+
def prepend(id, options = {}, &block)
turbo_stream.prepend(id, options, &block)
end
+
def replace(id, options = {}, &block)
turbo_stream.replace(id, options, &block)
end
@@ -29,13 +34,13 @@ def replace(id, options = {}, &block)
def remove(id)
turbo_stream.remove(id)
end
+
def render_turbo_stream(*streams)
render turbo_stream: streams
end
def render_alerts_container(controller_class = nil)
id = controller_class.is_a?(String) ? controller_class : alerts_container_id(controller_class&.controller_name)
- render AlertsContainerComponent.new(id: id)
+ render AlertsContainerComponent.new(id: id)
end
-
-end
\ No newline at end of file
+end
diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb
index a009ace51c..d92ffddcb5 100644
--- a/app/jobs/application_job.rb
+++ b/app/jobs/application_job.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
class ApplicationJob < ActiveJob::Base
end
diff --git a/app/lib/kgcl/issue_content_generator.rb b/app/lib/kgcl/issue_content_generator.rb
index dce34fb35e..1ae5244ebb 100644
--- a/app/lib/kgcl/issue_content_generator.rb
+++ b/app/lib/kgcl/issue_content_generator.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-Dir[Rails.root.join('app', 'lib', 'kgcl', 'renderers', '*.rb')].sort.each { |file| require file }
+Dir[Rails.root.join('app', 'lib', 'kgcl', 'renderers', '*.rb')].sort.each { |file| require_relative file }
module KGCL
module IssueContentGenerator
diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb
index f2961e12cd..5c719f00ad 100644
--- a/app/mailers/application_mailer.rb
+++ b/app/mailers/application_mailer.rb
@@ -1,5 +1,6 @@
+# frozen_string_literal: true
+
class ApplicationMailer < ActionMailer::Base
default from: 'noreply@lirmm.com'
# layout 'mailer'
end
-
diff --git a/app/mailers/notifier.rb b/app/mailers/notifier.rb
index 7d517cf8f1..3bf842f60a 100644
--- a/app/mailers/notifier.rb
+++ b/app/mailers/notifier.rb
@@ -1,27 +1,28 @@
-class Notifier < ApplicationMailer
+# frozen_string_literal: true
+class Notifier < ApplicationMailer
def lost_password(user, password)
# Email header info MUST be added here
recipients user.email
- from "#{$SUPPORT_EMAIL}"
+ from $SUPPORT_EMAIL.to_s
subject "[#{$ORG_SITE}] Password Reset"
# Email body substitutions go here
- body :user => user, :password => password
+ body user: user, password: password
end
def error(error)
recipients $ERROR_EMAIL
- from "#{$ADMIN_EMAIL}"
- subject "Exception Mailer"
- body :exception_message => error.message, :trace => error.backtrace
+ from $ADMIN_EMAIL.to_s
+ subject 'Exception Mailer'
+ body exception_message: error.message, trace: error.backtrace
end
def endlessloop(node)
recipients $ERROR_EMAIL
- from "#{$ADMIN_EMAIL}"
- subject "Exception Mailer"
- body :node => node.inspect
+ from $ADMIN_EMAIL.to_s
+ subject 'Exception Mailer'
+ body node: node.inspect
end
def feedback(name, email, comment, location, tags)
@@ -31,13 +32,10 @@ def feedback(name, email, comment, location, tags)
@location = location
@tags = tags
- mail(:to => "#{$SUPPORT_EMAIL}, #{email}",
- :from => "#{$SUPPORT_EMAIL}",
- :subject => "[#{$SITE}] Feedback from #{name}")
- end
-
- def signup(user)
-
+ mail(to: "#{$SUPPORT_EMAIL}, #{email}",
+ from: $SUPPORT_EMAIL.to_s,
+ subject: "[#{$SITE}] Feedback from #{name}")
end
+ def signup(user); end
end
diff --git a/app/mailers/subscribe_mailer.rb b/app/mailers/subscribe_mailer.rb
index c80a4538eb..bf510f30fb 100644
--- a/app/mailers/subscribe_mailer.rb
+++ b/app/mailers/subscribe_mailer.rb
@@ -1,42 +1,45 @@
+# frozen_string_literal: true
+
class SubscribeMailer < ApplicationMailer
-
- def register_for_announce_list(email,firstName,lastName)
- if subscription_configs_valid?
- if $ANNOUNCE_LIST_SERVICE.upcase.eql? "SYMPA"
- mail(
- :to => $ANNOUNCE_SERVICE_HOST,
- :from => email,
- :subject => "subscribe #{$ANNOUNCE_LIST} #{firstName} #{lastName}")
- end
-
- mail(
- :to => $SUPPORT_EMAIL,
- :from => email,
- :subject => "#{email} has been subscribe to our user mailing list #{$ANNOUNCE_LIST}")
- end
- end
-
- def unregister_for_announce_list(email)
- if subscription_configs_valid?
- if $ANNOUNCE_LIST_SERVICE.upcase.eql? "SYMPA"
- mail(
- :to => $ANNOUNCE_SERVICE_HOST,
- :from => email,
- :subject => "unsubscribe #{$ANNOUNCE_LIST}")
- end
-
- mail(
- :to => $SUPPORT_EMAIL,
- :from => email,
- :subject => "#{email} has been unsubscribe from our user mailing list #{$ANNOUNCE_LIST}")
- end
+ def register_for_announce_list(email, firstName, lastName)
+ return unless subscription_configs_valid?
+
+ if $ANNOUNCE_LIST_SERVICE.upcase.eql? 'SYMPA'
+ mail(
+ to: $ANNOUNCE_SERVICE_HOST,
+ from: email,
+ subject: "subscribe #{$ANNOUNCE_LIST} #{firstName} #{lastName}"
+ )
end
-
- private
+ mail(
+ to: $SUPPORT_EMAIL,
+ from: email,
+ subject: "#{email} has been subscribe to our user mailing list #{$ANNOUNCE_LIST}"
+ )
+ end
+
+ def unregister_for_announce_list(email)
+ return unless subscription_configs_valid?
- def subscription_configs_valid?
- $ANNOUNCE_SERVICE_HOST.present? && $ANNOUNCE_LIST_SERVICE.present? && $ANNOUNCE_LIST.present?
+ if $ANNOUNCE_LIST_SERVICE.upcase.eql? 'SYMPA'
+ mail(
+ to: $ANNOUNCE_SERVICE_HOST,
+ from: email,
+ subject: "unsubscribe #{$ANNOUNCE_LIST}"
+ )
end
-
+
+ mail(
+ to: $SUPPORT_EMAIL,
+ from: email,
+ subject: "#{email} has been unsubscribe from our user mailing list #{$ANNOUNCE_LIST}"
+ )
+ end
+
+ private
+
+ def subscription_configs_valid?
+ $ANNOUNCE_SERVICE_HOST.present? && $ANNOUNCE_LIST_SERVICE.present? && $ANNOUNCE_LIST.present?
+ end
end
diff --git a/app/models/analytics.rb b/app/models/analytics.rb
index 9493888906..1be4c25047 100644
--- a/app/models/analytics.rb
+++ b/app/models/analytics.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class Analytics < ApplicationRecord
serialize :params
end
diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index 71a1a03cc9..71fbba5b32 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
-end
\ No newline at end of file
+end
diff --git a/app/models/bpid_resolver.rb b/app/models/bpid_resolver.rb
index 3f345b39f1..037247781d 100644
--- a/app/models/bpid_resolver.rb
+++ b/app/models/bpid_resolver.rb
@@ -1,28 +1,28 @@
+# frozen_string_literal: true
+
require 'cgi'
require 'ostruct'
require 'json'
require 'open-uri'
class BpidResolver
- require Rails.root + 'lib/resolver/acronym_from_virtual'
- require Rails.root + 'lib/resolver/virtual_from_acronym'
- require Rails.root + 'lib/resolver/virtual_from_version'
+ require "#{Rails.root}/lib/resolver/acronym_from_virtual"
+ require "#{Rails.root}/lib/resolver/virtual_from_acronym"
+ require "#{Rails.root}/lib/resolver/virtual_from_version"
def self.id_to_acronym(id)
- acronym = self.acronym_from_virtual_id(id)
- acronym = self.acronym_from_version_id(id) unless acronym
+ acronym = acronym_from_virtual_id(id)
+ acronym ||= acronym_from_version_id(id)
acronym
end
def self.acronym_to_virtual_id(acronym)
- self.virtual_id_from_acronym(acronym)
+ virtual_id_from_acronym(acronym)
end
- private
-
def self.acronym_from_id(id)
- acronym = self.acronym_from_virtual_id(id)
- acronym = self.acronym_from_version_id(id) unless acronym
+ acronym = acronym_from_virtual_id(id)
+ acronym ||= acronym_from_version_id(id)
acronym
end
@@ -42,5 +42,4 @@ def self.virtual_id_from_version_id(version_id)
def self.virtual_id_from_acronym(acronym)
VIRTUAL_FROM_ACRONYM["old:virtual_from_acronym:#{acronym}"]
end
-
-end
\ No newline at end of file
+end
diff --git a/app/models/history.rb b/app/models/history.rb
index 56aac8792d..ed337aab03 100644
--- a/app/models/history.rb
+++ b/app/models/history.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class History
attr_accessor :ontology_id, :ontology_name, :ontology_acronym, :concept
@@ -7,4 +9,4 @@ def initialize(ontology_id, ontology_name, ontology_acronym, concept)
self.ontology_acronym = ontology_acronym
self.concept = concept
end
-end
\ No newline at end of file
+end
diff --git a/app/models/license.rb b/app/models/license.rb
index fffdb7b321..aed90154d7 100644
--- a/app/models/license.rb
+++ b/app/models/license.rb
@@ -1,5 +1,6 @@
-class License < ApplicationRecord
+# frozen_string_literal: true
+class License < ApplicationRecord
attr_reader :appliance_id, :organization, :expiry_date
validates :encrypted_key, presence: true, encrypted_key: true, virtual_appliance_id: true
@@ -14,7 +15,7 @@ def is_trial?
end
def days_remaining
- (@expiry_date < Date.current) ? 0 : (@expiry_date - Date.current).to_i
+ @expiry_date < Date.current ? 0 : (@expiry_date - Date.current).to_i
end
private
@@ -28,7 +29,6 @@ def decrypt
@appliance_id = license_data[0]
@organization = license_data[1]
@expiry_date = Date.parse(license_data[2])
- end
+ end
end
-
end
diff --git a/app/models/mapping_page.rb b/app/models/mapping_page.rb
index 11966172f7..aee1483347 100644
--- a/app/models/mapping_page.rb
+++ b/app/models/mapping_page.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class MappingPage < Array
attr_accessor :page, :pageCount, :collection
end
diff --git a/app/models/ontology.rb b/app/models/ontology.rb
index 04662e1288..9d58713e4d 100644
--- a/app/models/ontology.rb
+++ b/app/models/ontology.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
class Ontology < ApplicationRecord
-end
\ No newline at end of file
+end
diff --git a/app/models/remote_file.rb b/app/models/remote_file.rb
index e668987a9d..b7e9c70b83 100644
--- a/app/models/remote_file.rb
+++ b/app/models/remote_file.rb
@@ -1,32 +1,30 @@
+# frozen_string_literal: true
+
require 'open-uri'
require 'digest/sha1'
-
+
class RemoteFile < ::Tempfile
-
- def initialize(path, name = nil, tmpdir = Dir::tmpdir)
+ def initialize(path, name = nil, tmpdir = Dir.tmpdir)
@original_filename = name.nil? ? File.basename(path) : name
@remote_path = path
-
+
super Digest::SHA1.hexdigest(path), tmpdir
fetch
end
-
+
def fetch
string_io = OpenURI.send(:open, @remote_path)
- self.write string_io.read
- self.rewind
+ write string_io.read
+ rewind
self
end
-
- def original_filename
- @original_filename
- end
-
+
+ attr_reader :original_filename
+
def content_type
- mime = `file --mime -br #{self.path}`.strip
- mime = mime.gsub(/^.*: */,"")
- mime = mime.gsub(/;.*$/,"")
- mime = mime.gsub(/,.*$/,"")
- mime
+ mime = `file --mime -br #{path}`.strip
+ mime = mime.gsub(/^.*: */, '')
+ mime = mime.gsub(/;.*$/, '')
+ mime.gsub(/,.*$/, '')
end
end
diff --git a/app/models/resource_index_result_paginatable.rb b/app/models/resource_index_result_paginatable.rb
index 4e9c06b8c5..a7f0977719 100644
--- a/app/models/resource_index_result_paginatable.rb
+++ b/app/models/resource_index_result_paginatable.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ResourceIndexResultPaginatable < WillPaginate::Collection
attr_accessor :totalResults, :offset, :limit, :acronym
@@ -11,10 +13,10 @@ def initialize(hash)
# Fill out attributes needed by will_paginate
@current_page = hash.page
- @per_page = self.limit
- self.total_entries = self.totalResults
+ @per_page = limit
+ self.total_entries = totalResults
# Put the array elements in place
- self.replace(hash.collection)
+ replace(hash.collection)
end
-end
\ No newline at end of file
+end
diff --git a/app/models/virtual_appliance_user.rb b/app/models/virtual_appliance_user.rb
index 6624753d01..d9c75403fe 100644
--- a/app/models/virtual_appliance_user.rb
+++ b/app/models/virtual_appliance_user.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class VirtualApplianceUser < ApplicationRecord
self.implicit_order_column = 'user_id'
end
diff --git a/app/services/application_service.rb b/app/services/application_service.rb
index 618af8a239..44262b0ea0 100644
--- a/app/services/application_service.rb
+++ b/app/services/application_service.rb
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
class ApplicationService
def self.call(*args, &block)
new(*args, &block).call
end
-end
\ No newline at end of file
+end
diff --git a/app/services/issue_creator_service.rb b/app/services/issue_creator_service.rb
index 19d81ce475..fda0d5c0db 100644
--- a/app/services/issue_creator_service.rb
+++ b/app/services/issue_creator_service.rb
@@ -3,7 +3,6 @@
class IssueCreatorService < ApplicationService
class QueryError < StandardError; end
-
def initialize(params)
@title = params[:content][:title]
@body = params[:content][:body]
@@ -11,7 +10,6 @@ def initialize(params)
end
def call
-
findRepoQuery = GitHub::Client.parse <<-'GRAPHQL'
query ($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
@@ -36,7 +34,7 @@ def call
}
}
}
- GRAPHQL
+ GRAPHQL
data = query(findRepoQuery, variables: { owner: repo_owner, name: repo_name })
data = query(createIssueMutation, variables: { repositoryId: data.repository.id, title: @title, body: @body })
data.to_h.dig('createIssue', 'issue')
diff --git a/app/services/license_key_decrypter.rb b/app/services/license_key_decrypter.rb
index 54369fcabb..ea1703bcb0 100644
--- a/app/services/license_key_decrypter.rb
+++ b/app/services/license_key_decrypter.rb
@@ -1,19 +1,19 @@
-class LicenseKeyDecrypter < ApplicationService
+# frozen_string_literal: true
+class LicenseKeyDecrypter < ApplicationService
def initialize(license_key)
@license_key = license_key
end
def call
- encrypted_key, encrypted_data = @license_key.split('|').map{ |a| Base64.decode64(a) }
+ encrypted_key, encrypted_data = @license_key.split('|').map { |a| Base64.decode64(a) }
public_key_file = Rails.root.join('config', 'keys', 'public.pem')
public_key = OpenSSL::PKey::RSA.new(File.read(public_key_file))
- cipher = OpenSSL::Cipher::AES256.new(:CBC)
+ cipher = OpenSSL::Cipher.new('aes-256-cbc')
cipher.decrypt
cipher.key = public_key.public_decrypt(encrypted_key)
cipher.update(encrypted_data) + cipher.final
end
-
-end
\ No newline at end of file
+end
diff --git a/app/validators/encrypted_key_validator.rb b/app/validators/encrypted_key_validator.rb
index e19ab707ee..52742bce27 100644
--- a/app/validators/encrypted_key_validator.rb
+++ b/app/validators/encrypted_key_validator.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# EncryptedKeyValidator
#
# Custom validator for encrypted license keys
@@ -8,13 +10,12 @@
#
class EncryptedKeyValidator < ActiveModel::EachValidator
-
def validate_each(record, attribute, value)
return if record.is_trial?
- unless valid_encrypted_key?(value)
- record.errors.add(attribute, :invalid_license_key)
- end
+ return if valid_encrypted_key?(value)
+
+ record.errors.add(attribute, :invalid_license_key)
end
private
@@ -24,5 +25,4 @@ def valid_encrypted_key?(value)
rescue OpenSSL::Cipher::CipherError, OpenSSL::PKey::RSAError
false
end
-
-end
\ No newline at end of file
+end
diff --git a/app/validators/virtual_appliance_id_validator.rb b/app/validators/virtual_appliance_id_validator.rb
index 6bb5f300b1..51a86ce207 100644
--- a/app/validators/virtual_appliance_id_validator.rb
+++ b/app/validators/virtual_appliance_id_validator.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
# VirtualApplianceIdValidator
#
-# Custom validator for virtual appliance IDs. The virtual appliance ID in a
-# license key must match the ID of the virtual appliance against which a
+# Custom validator for virtual appliance IDs. The virtual appliance ID in a
+# license key must match the ID of the virtual appliance against which a
# license is submitted.
#
# class License < ApplicationRecord
@@ -10,21 +12,20 @@
#
class VirtualApplianceIdValidator < ActiveModel::EachValidator
-
def validate_each(record, attribute, value)
return if record.is_trial?
response = JSON.parse(
- LinkedData::Client::HTTP.get(LinkedData::Client.settings.rest_url + "/admin/update_info", {}, raw: true)
+ LinkedData::Client::HTTP.get("#{LinkedData::Client.settings.rest_url}/admin/update_info", {}, raw: true)
)
- if response["error"]
+ if response['error']
record.errors.add(attribute, :no_appliance_id_for_comparison)
return false
end
-
- unless valid_virtual_appliance_id?(value, response["appliance_id"])
- record.errors.add(attribute, :appliance_id_mismatch)
- end
+
+ return if valid_virtual_appliance_id?(value, response['appliance_id'])
+
+ record.errors.add(attribute, :appliance_id_mismatch)
end
private
@@ -36,5 +37,4 @@ def valid_virtual_appliance_id?(value, appliance_id)
rescue OpenSSL::Cipher::CipherError, OpenSSL::PKey::RSAError
false
end
-
-end
\ No newline at end of file
+end
diff --git a/app/views/projects/index.html.haml b/app/views/projects/index.html.haml
index e17084d21d..1aaf9aed37 100644
--- a/app/views/projects/index.html.haml
+++ b/app/views/projects/index.html.haml
@@ -5,7 +5,7 @@
%h1.tab_header= t("projects.self")
%p.tab_description
= t("projects.index.intro", site: "#{$SITE}")
- = link_to(help_path(anchor: "Projects_Tab"), id: "projects-help", aria: {label: t("projects.view_projects_help")}) do
+ = link_to("#{Rails.configuration.settings.links[:help]}#Projects_Tab", id: "projects-help", aria: {label: t("projects.view_projects_help")}) do
%i.fas.fa-question-circle.fa-lg{aria: {hidden: "true"}, style: "margin-left: .25em"}
%div{:style => "padding:10px;"}
diff --git a/bin/bundle b/bin/bundle
index f19acf5b5c..2dbb71769e 100755
--- a/bin/bundle
+++ b/bin/bundle
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
load Gem.bin_path('bundler', 'bundle')
diff --git a/bin/rails b/bin/rails
index efc0377492..a31728ab97 100755
--- a/bin/rails
+++ b/bin/rails
@@ -1,4 +1,6 @@
#!/usr/bin/env ruby
-APP_PATH = File.expand_path("../config/application", __dir__)
-require_relative "../config/boot"
-require "rails/commands"
+# frozen_string_literal: true
+
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/bin/rake b/bin/rake
index 4fbf10b960..c199955006 100755
--- a/bin/rake
+++ b/bin/rake
@@ -1,4 +1,6 @@
#!/usr/bin/env ruby
-require_relative "../config/boot"
-require "rake"
+# frozen_string_literal: true
+
+require_relative '../config/boot'
+require 'rake'
Rake.application.run
diff --git a/bin/setup b/bin/setup
index ec47b79b3b..516b651e39 100755
--- a/bin/setup
+++ b/bin/setup
@@ -1,8 +1,10 @@
#!/usr/bin/env ruby
-require "fileutils"
+# frozen_string_literal: true
+
+require 'fileutils'
# path to your application root.
-APP_ROOT = File.expand_path("..", __dir__)
+APP_ROOT = File.expand_path('..', __dir__)
def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==")
@@ -13,9 +15,9 @@ FileUtils.chdir APP_ROOT do
# This script is idempotent, so that you can run it at any time and get an expectable outcome.
# Add necessary setup steps to this file.
- puts "== Installing dependencies =="
- system! "gem install bundler --conservative"
- system("bundle check") || system!("bundle install")
+ puts '== Installing dependencies =='
+ system! 'gem install bundler --conservative'
+ system('bundle check') || system!('bundle install')
# puts "\n== Copying sample files =="
# unless File.exist?("config/database.yml")
@@ -23,11 +25,11 @@ FileUtils.chdir APP_ROOT do
# end
puts "\n== Preparing database =="
- system! "bin/rails db:prepare"
+ system! 'bin/rails db:prepare'
puts "\n== Removing old logs and tempfiles =="
- system! "bin/rails log:clear tmp:clear"
+ system! 'bin/rails log:clear tmp:clear'
puts "\n== Restarting application server =="
- system! "bin/rails restart"
+ system! 'bin/rails restart'
end
diff --git a/bin/update b/bin/update
index 58bfaed518..313c74b38b 100755
--- a/bin/update
+++ b/bin/update
@@ -1,4 +1,6 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
require 'fileutils'
include FileUtils
diff --git a/bin/wait-for-it b/bin/wait-for-it
new file mode 100755
index 0000000000..7888ed4326
--- /dev/null
+++ b/bin/wait-for-it
@@ -0,0 +1,182 @@
+#!/usr/bin/env sh
+# Use this script to test if a given TCP host/port are available
+
+WAITFORIT_cmdname=${0##*/}
+
+echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
+
+usage()
+{
+ cat << USAGE >&2
+Usage:
+ $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
+ -h HOST | --host=HOST Host or IP under test
+ -p PORT | --port=PORT TCP port under test
+ Alternatively, you specify the host and port as host:port
+ -s | --strict Only execute subcommand if the test succeeds
+ -q | --quiet Don't output any status messages
+ -t TIMEOUT | --timeout=TIMEOUT
+ Timeout in seconds, zero for no timeout
+ -- COMMAND ARGS Execute command with args after the test finishes
+USAGE
+ exit 1
+}
+
+wait_for()
+{
+ if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
+ echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
+ else
+ echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
+ fi
+ WAITFORIT_start_ts=$(date +%s)
+ while :
+ do
+ if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
+ nc -z $WAITFORIT_HOST $WAITFORIT_PORT
+ WAITFORIT_result=$?
+ else
+ (echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
+ WAITFORIT_result=$?
+ fi
+ if [[ $WAITFORIT_result -eq 0 ]]; then
+ WAITFORIT_end_ts=$(date +%s)
+ echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
+ break
+ fi
+ sleep 1
+ done
+ return $WAITFORIT_result
+}
+
+wait_for_wrapper()
+{
+ # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
+ if [[ $WAITFORIT_QUIET -eq 1 ]]; then
+ timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
+ else
+ timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
+ fi
+ WAITFORIT_PID=$!
+ trap "kill -INT -$WAITFORIT_PID" INT
+ wait $WAITFORIT_PID
+ WAITFORIT_RESULT=$?
+ if [[ $WAITFORIT_RESULT -ne 0 ]]; then
+ echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
+ fi
+ return $WAITFORIT_RESULT
+}
+
+# process arguments
+while [[ $# -gt 0 ]]
+do
+ case "$1" in
+ *:* )
+ WAITFORIT_hostport=(${1//:/ })
+ WAITFORIT_HOST=${WAITFORIT_hostport[0]}
+ WAITFORIT_PORT=${WAITFORIT_hostport[1]}
+ shift 1
+ ;;
+ --child)
+ WAITFORIT_CHILD=1
+ shift 1
+ ;;
+ -q | --quiet)
+ WAITFORIT_QUIET=1
+ shift 1
+ ;;
+ -s | --strict)
+ WAITFORIT_STRICT=1
+ shift 1
+ ;;
+ -h)
+ WAITFORIT_HOST="$2"
+ if [[ $WAITFORIT_HOST == "" ]]; then break; fi
+ shift 2
+ ;;
+ --host=*)
+ WAITFORIT_HOST="${1#*=}"
+ shift 1
+ ;;
+ -p)
+ WAITFORIT_PORT="$2"
+ if [[ $WAITFORIT_PORT == "" ]]; then break; fi
+ shift 2
+ ;;
+ --port=*)
+ WAITFORIT_PORT="${1#*=}"
+ shift 1
+ ;;
+ -t)
+ WAITFORIT_TIMEOUT="$2"
+ if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
+ shift 2
+ ;;
+ --timeout=*)
+ WAITFORIT_TIMEOUT="${1#*=}"
+ shift 1
+ ;;
+ --)
+ shift
+ WAITFORIT_CLI=("$@")
+ break
+ ;;
+ --help)
+ usage
+ ;;
+ *)
+ echoerr "Unknown argument: $1"
+ usage
+ ;;
+ esac
+done
+
+if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
+ echoerr "Error: you need to provide a host and port to test."
+ usage
+fi
+
+WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
+WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
+WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
+WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
+
+# Check to see if timeout is from busybox?
+WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
+WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
+
+WAITFORIT_BUSYTIMEFLAG=""
+if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
+ WAITFORIT_ISBUSY=1
+ # Check if busybox timeout uses -t flag
+ # (recent Alpine versions don't support -t anymore)
+ if timeout &>/dev/stdout | grep -q -e '-t '; then
+ WAITFORIT_BUSYTIMEFLAG="-t"
+ fi
+else
+ WAITFORIT_ISBUSY=0
+fi
+
+if [[ $WAITFORIT_CHILD -gt 0 ]]; then
+ wait_for
+ WAITFORIT_RESULT=$?
+ exit $WAITFORIT_RESULT
+else
+ if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
+ wait_for_wrapper
+ WAITFORIT_RESULT=$?
+ else
+ wait_for
+ WAITFORIT_RESULT=$?
+ fi
+fi
+
+if [[ $WAITFORIT_CLI != "" ]]; then
+ if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
+ echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
+ exit $WAITFORIT_RESULT
+ fi
+ exec "${WAITFORIT_CLI[@]}"
+else
+ exit $WAITFORIT_RESULT
+fi
diff --git a/bin/yarn b/bin/yarn
index 9fab2c3507..9da8e5c570 100755
--- a/bin/yarn
+++ b/bin/yarn
@@ -1,17 +1,19 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
APP_ROOT = File.expand_path('..', __dir__)
Dir.chdir(APP_ROOT) do
- yarn = ENV["PATH"].split(File::PATH_SEPARATOR).
- select { |dir| File.expand_path(dir) != __dir__ }.
- product(["yarn", "yarn.cmd", "yarn.ps1"]).
- map { |dir, file| File.expand_path(file, dir) }.
- find { |file| File.executable?(file) }
+ yarn = ENV['PATH'].split(File::PATH_SEPARATOR)
+ .reject { |dir| File.expand_path(dir) == __dir__ }
+ .product(['yarn', 'yarn.cmd', 'yarn.ps1'])
+ .map { |dir, file| File.expand_path(file, dir) }
+ .find { |file| File.executable?(file) }
if yarn
exec yarn, *ARGV
else
- $stderr.puts "Yarn executable was not detected in the system."
- $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
+ warn 'Yarn executable was not detected in the system.'
+ warn 'Download Yarn at https://yarnpkg.com/en/docs/install'
exit 1
end
end
diff --git a/config.ru b/config.ru
index a8f6e4abd6..3c189ca528 100644
--- a/config.ru
+++ b/config.ru
@@ -1,6 +1,8 @@
+# frozen_string_literal: true
+
# This file is used by Rack-based servers to start the application.
-require_relative "config/environment"
+require_relative 'config/environment'
run BioportalWebUi::Application
Rails.application.load_server
diff --git a/config/application.rb b/config/application.rb
index 1213596fa4..eba0fdc731 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,6 +1,8 @@
-require_relative "boot"
+# frozen_string_literal: true
-require "rails/all"
+require_relative 'boot'
+
+require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
@@ -12,21 +14,18 @@ class Application < Rails::Application
config.load_defaults 7.0
# permitted locales available for the application
- config.i18n.available_locales = [:en, :fr, :it, :de]
+ config.i18n.available_locales = %i[en fr it de]
config.i18n.default_locale = :en
-
# Configuration for the application, engines, and railties goes here.
#
# These settings can be overridden in specific environments using the files
# in config/environments, which are processed later.
#
# config.time_zone = "Central Time (US & Canada)"
- config.exceptions_app = self.routes
-
+ config.exceptions_app = routes
config.autoload_paths += %W[#{config.root}/app/lib/kgcl]
-
config.settings = config_for :settings
# Initialize configuration for KGCL change request functionality.
config.change_request = config_for :change_request
@@ -34,6 +33,6 @@ class Application < Rails::Application
config.generators.template_engine = :haml
# Set the default layout to app/views/layouts/component_preview.html.erb
- config.view_component.default_preview_layout = "component_preview"
+ config.view_component.default_preview_layout = 'component_preview'
end
end
diff --git a/config/bioportal_config_test.rb b/config/bioportal_config_test.rb
new file mode 100644
index 0000000000..c76174deb8
--- /dev/null
+++ b/config/bioportal_config_test.rb
@@ -0,0 +1,172 @@
+# frozen_string_literal: true
+
+$SITE = 'Testportal'
+$UI_HOSTNAME = 'localhost'
+$UI_URL = "http://#{$UI_HOSTNAME}:3000"
+
+$API_KEY = ENV['API_KEY']
+$REST_URL = ENV['API_URL']
+$BIOMIXER_URL = ENV['BIOMIXER_URL']
+$ANNOTATOR_URL = $PROXY_URL = ENV['ANNOTATOR_URL']
+$FAIRNESS_URL = ENV['ANNOTATOR_URL']
+
+# config/initializers/omniauth_providers.rb
+$OMNIAUTH_PROVIDERS = {
+ github: {
+ client_id: 'id',
+ client_secret: 'secret',
+ icon: 'icons/github.svg'
+ },
+ google: {
+ strategy: :google_oauth2,
+ client_id: 'id',
+ client_secret: 'secret',
+ icon: 'icons/google.svg'
+ },
+ orcid: {
+ client_id: 'YOUR_ORCID_CLIENT_ID',
+ client_secret: 'YOUR_ORCID_CLIENT_SECRET',
+ icon: 'icons/orcid.svg'
+ },
+ keycloak: {
+ strategy: :keycloak_openid,
+ client_id: 'YOUR_KEYCLOAK_CLIENT_ID',
+ client_secret: 'YOUR_KEYCLOAK_CLIENT_SECRET',
+ client_options: { site: 'KEYCLOAK_SITE', realm: 'KEYCLOAK_REALM' },
+ name: 'keycloak',
+ icon: 'icons/keycloak.svg'
+ }
+}.freeze
+
+$INTERPORTAL_HASH = {}
+
+# If your BioPortal installation includes Fairness score set this to true
+$FAIRNESS_DISABLED = false
+
+# Pairing a name with an array of ontology virtual ids will allow you to filter ontologies based on a subdomain.
+# If your main UI is hosted at example.org and you add custom.example.org pointing to the same Rails installation
+# you could filter the ontologies visible at custom.example.org by adding this to the hash: "custom" => { :name => "Custom Slice", :ontologies => [1032, 1054, 1099] }
+# Any number of slices can be added. Groups are added automatically using the group acronym as the subdomain.
+$ENABLE_SLICES = true
+$ONTOLOGY_SLICES = {}
+
+# Cube metrics reporting
+$ENABLE_CUBE = false
+
+$NOT_DOWNLOADABLE = {}
+# Enable client request caching
+$CLIENT_REQUEST_CACHING = true
+
+# If you don't use Airbrake you can have exceptions emailed to the $ERROR_EMAIL address by setting this to 'true'
+$EMAIL_EXCEPTIONS = false
+
+# Announcements mailman mailing list REQUEST address, EX: list-request@lists.example.org
+# NOTE: You must use the REQUEST address for the mailing list. ONLY WORKS WITH MAILMAN LISTS.
+$ANNOUNCE_LIST ||= 'appliance-users-request@localhost'
+
+# Email addresses used for sending notifications (errors, feedback, support)
+$SUPPORT_EMAIL ||= 'support@localhost'
+$ADMIN_EMAIL ||= 'admin@localhost'
+$ERROR_EMAIL ||= 'errors@localhost'
+
+# Custom BioPortal logging
+require 'log'
+$REMOTE_LOGGING = false
+
+##
+# Custom Ontology Details
+# Custom details can be added on a per ontology basis using a key/value pair as columns of the details table
+#
+# Example:
+# $ADDITIONAL_ONTOLOGY_DETAILS = { 1000 => { "Additional Detail" => "Text to be shown in the right-hand column." } }
+##
+$ADDITIONAL_ONTOLOGY_DETAILS = {}
+
+# Site notice appears on all pages and remains closed indefinitely. Stored below as a hash with a unique key and a
+# EX: $SITE_NOTICE = { :unique_key => 'Put your message here (can include html if you use
+$SITE_NOTICE = {}
+################################
+## AUTO-GENERATED DO NOT MODIFY
+#################################
+
+# Full string for site, EX: "NCBO BioPortal"
+$ORG_SITE = $ORG.nil? || $ORG.empty? ? $SITE : "#{$ORG} #{$SITE}"
+
+$HOME_PAGE_LOGOS = {
+ supported_by: [
+ {
+ img_src: 'logos/supports/numev.png',
+ url: 'http://www.lirmm.fr/numev',
+ target: '_blank'
+ },
+ {
+ img_src: 'logos/supports/anr.png',
+ url: 'https://anr.fr/en',
+ target: '_blank'
+ },
+ {
+ img_src: 'logos/supports/eu.png',
+ url: 'https://commission.europa.eu/research-and-innovation_en',
+ target: '_blank'
+ }
+ ],
+ with_the_collaboration_of: [
+ {
+ img_src: 'logos/collaboration/d2kab.png',
+ url: 'http://d2kab.mystrikingly.com',
+ target: '_blank'
+ },
+ {
+ img_src: 'logos/collaboration/lirmm.png',
+ url: 'http://www.lirmm.fr',
+ target: '_blank'
+ },
+ {
+ img_src: 'logos/collaboration/inrae.png',
+ url: 'https://www.inrae.fr/enm',
+ target: '_blank'
+ },
+ {
+ img_src: 'logos/collaboration/stanford.png',
+ url: 'https://www.stanford.edu',
+ target: '_blank'
+ }
+ ]
+}
+
+$FOOTER_LINKS = {
+ social: [
+ { logo: 'social/people.svg', link: 'https://github.com/orgs/agroportal/people' },
+ { logo: 'social/github.svg', link: 'https://github.com/agroportal' },
+ { logo: 'social/twitter.svg', link: 'https://twitter.com/lagroportal' }
+ ],
+ sections: {
+ products: {
+ ontoportal: 'https://ontoportal.org/',
+ release_notes: 'https://doc.jonquetlab.lirmm.fr/share/e6158eda-c109-4385-852c-51a42de9a412/doc/release-notes-btKjZk5tU2',
+ api: 'https://data.agroportal.lirmm.fr/',
+ sparql: 'https://sparql.agroportal.lirmm.fr/test/'
+ },
+ support: {
+ contact_us: 'https://agroportal.lirmm.fr/feedback',
+ wiki: 'https://www.bioontology.org/wiki/',
+ documentation: 'https://ontoportal.github.io/documentation/'
+ },
+ agreements: {
+ terms: '',
+ privacy_policy: '',
+ cite_us: '',
+ acknowledgments: ''
+ },
+ about: {
+ about_us: 'https://github.com/agroportal/project-management',
+ projects: 'https://d2kab.mystrikingly.com/',
+ team: 'https://github.com/orgs/agroportal/people'
+ }
+ }
+}
+
+$UI_THEME = :stageportal
+if File.exist?('config/bioportal_config_development_testportal.lirmm.fr.rb')
+ require_relative 'bioportal_config_development_testportal.lirmm.fr' # local credentials
+end
diff --git a/config/boot.rb b/config/boot.rb
index 340e433cb6..cac5b8f4d2 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,4 +1,6 @@
-ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+# frozen_string_literal: true
-require "bundler/setup" # Set up gems listed in the Gemfile.
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
require 'bootsnap/setup'
diff --git a/config/database.yml.sample b/config/database.yml.sample
index c92d72df20..463e3ebea9 100644
--- a/config/database.yml.sample
+++ b/config/database.yml.sample
@@ -12,10 +12,9 @@
default: &default
adapter: mysql2
encoding: utf8mb4
- pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: bp_user
- host: db
+ host: 127.0.0.1
development:
<<: *default
diff --git a/config/deploy.rb b/config/deploy.rb
index 1fe0d99900..9b103d7038 100644
--- a/config/deploy.rb
+++ b/config/deploy.rb
@@ -1,5 +1,7 @@
-set :author, "ontoportal-lirmm"
-set :application, "bioportal_web_ui"
+# frozen_string_literal: true
+
+set :author, 'ontoportal-lirmm'
+set :application, 'bioportal_web_ui'
set :repo_url, "https://github.com/#{fetch(:author)}/#{fetch(:application)}.git"
@@ -33,7 +35,7 @@
# Default value for linked_dirs is []
# set :linked_dirs, %w{bin log tmp/pids tmp/cache public/system public/assets config/locales}
-set :linked_dirs, %w{log tmp/pids tmp/cache public/system public/assets}
+set :linked_dirs, %w[log tmp/pids tmp/cache public/system public/assets]
# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
@@ -44,7 +46,7 @@
set :bundle_config, { deployment: true }
# Defaults to [:web]
-set :assets_roles, [:web, :app]
+set :assets_roles, %i[web app]
set :keep_assets, 3
# If you want to restart using `touch tmp/restart.txt`, add this to your config/deploy.rb:
@@ -55,10 +57,10 @@
# If you don't set `:passenger_restart_with_touch`, capistrano-passenger will check what version of passenger you are running
# and use `passenger-config restart-app` if it is available in that version.
-desc "Check if agent forwarding is working"
+desc 'Check if agent forwarding is working'
task :forwarding do
on roles(:all) do |h|
- if test("env | grep SSH_AUTH_SOCK")
+ if test('env | grep SSH_AUTH_SOCK')
info "Agent forwarding is up to #{h}"
else
error "Agent forwarding is NOT up to #{h}"
@@ -70,7 +72,7 @@
desc 'display remote system env vars'
task :show_remote_env do
on roles(:all) do
- remote_env = capture("env")
+ remote_env = capture('env')
puts remote_env
end
end
@@ -80,7 +82,7 @@
# or get config from local directory if LOCAL_CONFIG_PATH env var is set
task :get_config do
if defined?(PRIVATE_CONFIG_REPO)
- TMP_CONFIG_PATH = "/tmp/#{SecureRandom.hex(15)}".freeze
+ TMP_CONFIG_PATH = "/tmp/#{SecureRandom.hex(15)}"
on roles(:app) do
execute "git clone -q #{PRIVATE_CONFIG_REPO} #{TMP_CONFIG_PATH}"
execute "rsync -a #{TMP_CONFIG_PATH}/#{fetch(:application)}/ #{release_path}/"
@@ -101,7 +103,6 @@
end
end
-
after :publishing, :restart
after :restart, :clear_cache do
diff --git a/config/deploy/appliance.rb b/config/deploy/appliance.rb
index 7b965a0fcd..f8169f6b0c 100644
--- a/config/deploy/appliance.rb
+++ b/config/deploy/appliance.rb
@@ -1,12 +1,14 @@
+# frozen_string_literal: true
+
# Simple Role Syntax
# ==================
# Supports bulk-adding hosts to roles, the primary
# server in each group is considered to be the first
# unless any hosts have the primary property set.
# Don't declare `role :all`, it's a meta role
-#role :app, %w{deploy@example.com}
-#role :web, %w{deploy@example.com}
-#role :db, %w{deploy@example.com}
+# role :app, %w{deploy@example.com}
+# role :web, %w{deploy@example.com}
+# role :db, %w{deploy@example.com}
# Extended Server Syntax
# ======================
@@ -14,7 +16,7 @@
# definition into the server list. The second argument
# something that quacks like a hash can be used to set
# extended properties on the server.
-server 'localhost', roles: %w{app db}
+server 'localhost', roles: %w[app db]
# you can set custom ssh options
# it's possible to pass any option but you need to keep in mind that net/ssh understand limited list of options
@@ -40,14 +42,14 @@
#
BRANCH = ENV.include?('BRANCH') ? ENV['BRANCH'] : 'master'
-set :branch, "#{BRANCH}"
+set :branch, BRANCH.to_s
set :deploy_to, "/srv/ontoportal/#{fetch(:application)}"
# install gems into a common direcotry shared across ui, api and ncbo_cron to reduce disk usage
set :bundle_path, '/srv/ontoportal/.bundle'
-#private git repo for configuraiton
-#PRIVATE_CONFIG_REPO = ENV.include?('PRIVATE_CONFIG_REPO') ? ENV['PRIVATE_CONFIG_REPO'] : 'git@github.com:your_org/private-config-repo.git'
+# private git repo for configuraiton
+# PRIVATE_CONFIG_REPO = ENV.include?('PRIVATE_CONFIG_REPO') ? ENV['PRIVATE_CONFIG_REPO'] : 'git@github.com:your_org/private-config-repo.git'
-#location of configuration files
+# location of configuration files
LOCAL_CONFIG_PATH = ENV.include?('LOCAL_CONFIG_PATH') ? ENV['LOCAL_CONFIG_PATH'] : '/srv/ontoportal/virtual_appliance/appliance_config'
diff --git a/config/deploy/production.rb b/config/deploy/production.rb
index 78022105df..57e5e5b41f 100644
--- a/config/deploy/production.rb
+++ b/config/deploy/production.rb
@@ -1,11 +1,13 @@
+# frozen_string_literal: true
+
# Simple Role Syntax
# ==================
# Supports bulk-adding hosts to roles, the primary
# server in each group is considered to be the first
# unless any hosts have the primary property set.
# Don't declare `role :all`, it's a meta role
-role :app, %w{ui1.prd.ontoportal.org ui2.prd.ontoportal.org}
-role :db, %w{ui1.prd.ontoportal.org} # sufficient to run db:migrate only on one system
+role :app, %w[ui1.prd.ontoportal.org ui2.prd.ontoportal.org]
+role :db, %w[ui1.prd.ontoportal.org] # sufficient to run db:migrate only on one system
# Extended Server Syntax
# ======================
@@ -13,7 +15,7 @@
# definition into the server list. The second argument
# something that quacks like a hash can be used to set
# extended properties on the server.
-#server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
+# server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
set :log_level, :error
# you can set custom ssh options
# it's possible to pass any option but you need to keep in mind that net/ssh understand limited list of options
@@ -39,11 +41,11 @@
set :ssh_options, {
user: 'deployer',
forward_agent: 'true',
- keys: %w(config/deploy_id_rsa),
- auth_methods: %w(publickey),
+ keys: %w[config/deploy_id_rsa],
+ auth_methods: %w[publickey],
# use ssh proxy if UI servers are on a private network
proxy: Net::SSH::Proxy::Command.new('ssh deployer@sshproxy.ontoportal.org -W %h:%p')
}
-#private git repo for configuraiton
+# private git repo for configuraiton
PRIVATE_CONFIG_REPO = ENV.include?('PRIVATE_CONFIG_REPO') ? ENV['PRIVATE_CONFIG_REPO'] : 'git@github.com:author/private_config_repo.git'
diff --git a/config/deploy/staging.rb b/config/deploy/staging.rb
index 2ad6dc6cd6..9a9b13906e 100644
--- a/config/deploy/staging.rb
+++ b/config/deploy/staging.rb
@@ -1,11 +1,13 @@
+# frozen_string_literal: true
+
# Simple Role Syntax
# ==================
# Supports bulk-adding hosts to roles, the primary
# server in each group is considered to be the first
# unless any hosts have the primary property set.
# Don't declare `role :all`, it's a meta role
-role :app, %w{stageportal.lirmm.fr}
-role :db, %w{stageportal.lirmm.fr} # sufficient to run db:migrate only on one system
+role :app, %w[stageportal.lirmm.fr]
+role :db, %w[stageportal.lirmm.fr] # sufficient to run db:migrate only on one system
# Extended Server Syntax
# ======================
@@ -13,7 +15,7 @@
# definition into the server list. The second argument
# something that quacks like a hash can be used to set
# extended properties on the server.
-#server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
+# server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
set :log_level, :error
# you can set custom ssh options
# it's possible to pass any option but you need to keep in mind that net/ssh understand limited list of options
@@ -39,11 +41,11 @@
set :ssh_options, {
user: 'deploy',
forward_agent: 'true',
- keys: %w(config/deploy_id_rsa),
- auth_methods: %w(publickey),
+ keys: %w[config/deploy_id_rsa],
+ auth_methods: %w[publickey]
# use ssh proxy if UI servers are on a private network
# proxy: Net::SSH::Proxy::Command.new('ssh deployer@sshproxy.ontoportal.org -W %h:%p')
}
-#private git repo for configuraiton
+# private git repo for configuraiton
PRIVATE_CONFIG_REPO = ENV.include?('PRIVATE_CONFIG_REPO') ? ENV['PRIVATE_CONFIG_REPO'] : 'git@github.com:author/private_config_repo.git'
diff --git a/config/environment.rb b/config/environment.rb
index cac5315775..d5abe55806 100755
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
# Load the Rails application.
-require_relative "application"
+require_relative 'application'
# Initialize the Rails application.
Rails.application.initialize!
diff --git a/config/environments/appliance.rb b/config/environments/appliance.rb
index ec5f5e79f9..8eb7c6b594 100644
--- a/config/environments/appliance.rb
+++ b/config/environments/appliance.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
BioportalWebUi::Application.configure do
# Settings specified here will take precedence over those in config/application.rb.
@@ -78,15 +80,15 @@
require Rails.root.join('config', "bioportal_config_#{Rails.env}.rb")
# Use a different cache store in the appliance.
- config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211", { :namespace => 'bioportal_web_ui', :expires_in => 1.day }
-
+ config.cache_store = :mem_cache_store, ENV['MEMCACHE_SERVERS'] || 'localhost:11211',
+ { namespace: 'bioportal_web_ui', expires_in: 1.day }
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Add custom data attributes to sanitize allowed list
- config.action_view.sanitized_allowed_attributes = ['id', 'class', 'style', 'data-cls', 'data-ont']
+ config.action_view.sanitized_allowed_attributes = %w[id class style data-cls data-ont]
config.view_component.show_previews = true
# TODO: Fix this?
# enable json logging format. Useful for logstash
diff --git a/config/environments/development.rb b/config/environments/development.rb
index b595b87cd8..cac6782afb 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -1,4 +1,6 @@
-require "active_support/core_ext/integer/time"
+# frozen_string_literal: true
+
+require 'active_support/core_ext/integer/time'
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
@@ -19,13 +21,13 @@
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
- if Rails.root.join("tmp/caching-dev.txt").exist?
+ if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.action_controller.enable_fragment_cache_logging = true
config.cache_store = :memory_store
config.public_file_server.headers = {
- "Cache-Control" => "public, max-age=#{2.days.to_i}"
+ 'Cache-Control' => "public, max-age=#{2.days.to_i}"
}
else
config.action_controller.perform_caching = false
@@ -63,10 +65,10 @@
config.cache_store = ActiveSupport::Cache::MemCacheStore.new('cache:11211', namespace: 'BioPortal')
# Silence cache output
- config.cache_store.logger = Logger.new("/dev/null") if config.cache_store.respond_to?(:logger)
+ config.cache_store.logger = Logger.new('/dev/null') if config.cache_store.respond_to?(:logger)
# Add custom data attributes to sanitize allowed list
- config.action_view.sanitized_allowed_attributes = ['id', 'class', 'style', 'data-cls', 'data-ont']
+ config.action_view.sanitized_allowed_attributes = %w[id class style data-cls data-ont]
config.view_component.generate.sidecar = true
config.file_watcher = ActiveSupport::FileUpdateChecker
@@ -82,4 +84,4 @@
# Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true
-end
\ No newline at end of file
+end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 3eea9fbc87..d963486b26 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,4 +1,6 @@
-require "active_support/core_ext/integer/time"
+# frozen_string_literal: true
+
+require 'active_support/core_ext/integer/time'
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
@@ -22,7 +24,7 @@
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
- config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Compress JavaScripts
config.assets.js_compressor = :terser
@@ -56,7 +58,7 @@
config.log_level = :info
# Prepend all log lines with the following tags.
- config.log_tags = [ :request_id ]
+ config.log_tags = [:request_id]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
@@ -93,15 +95,16 @@
# Include the BioPortal-specific configuration options
require Rails.root.join('config', "bioportal_config_#{Rails.env}.rb")
-
+
# Use a different cache store in production.
- config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211", { namespace: 'bioportal_web_ui', expires_in: 1.day }
+ config.cache_store = :mem_cache_store, ENV['MEMCACHE_SERVERS'] || 'localhost:11211',
+ { namespace: 'bioportal_web_ui', expires_in: 1.day }
# Add custom data attributes to sanitize allowed list
- config.action_view.sanitized_allowed_attributes = ['id', 'class', 'style', 'data-cls', 'data-ont']
+ config.action_view.sanitized_allowed_attributes = %w[id class style data-cls data-ont]
- if ENV["RAILS_LOG_TO_STDOUT"].present?
- logger = ActiveSupport::Logger.new(STDOUT)
+ if ENV['RAILS_LOG_TO_STDOUT'].present?
+ logger = ActiveSupport::Logger.new($stdout)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
diff --git a/config/environments/staging.rb b/config/environments/staging.rb
index c24addeaf1..d0fcbec7b0 100644
--- a/config/environments/staging.rb
+++ b/config/environments/staging.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
BioportalWebUi::Application.configure do
# Settings specified here will take precedence over those in config/application.rb.
@@ -78,15 +80,16 @@
require Rails.root.join('config', "bioportal_config_#{Rails.env}.rb")
# Use a different cache store in staging.
- config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211", { namespace: 'bioportal_web_ui', expires_in: 1.day }
+ config.cache_store = :mem_cache_store, ENV['MEMCACHE_SERVERS'] || 'localhost:11211',
+ { namespace: 'bioportal_web_ui', expires_in: 1.day }
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Add custom data attributes to sanitize allowed list
- config.action_view.sanitized_allowed_attributes = ['id', 'class', 'style', 'data-cls', 'data-ont']
+ config.action_view.sanitized_allowed_attributes = %w[id class style data-cls data-ont]
# Include BioPortal-specific configuration options
- require Rails.root.join('config', "bioportal_config_staging.rb")
+ require Rails.root.join('config', 'bioportal_config_staging.rb')
end
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 4448d0e8fb..d35b8d0f72 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,4 +1,6 @@
-require "active_support/core_ext/integer/time"
+# frozen_string_literal: true
+
+require 'active_support/core_ext/integer/time'
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
@@ -14,18 +16,18 @@
# Eager loading loads your whole application. When running a single test locally,
# this probably isn't necessary. It's a good idea to do in a continuous integration
# system, or in some way before deploying your code.
- config.eager_load = ENV["CI"].present?
+ config.eager_load = ENV['CI'].present?
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
- "Cache-Control" => "public, max-age=#{1.hour.to_i}"
+ 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
}
# Show full error reports and disable caching.
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
- config.cache_store = :null_store
+ config.cache_store = ActiveSupport::Cache::MemCacheStore.new('localhost:11211', namespace: 'BioPortal')
# Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false
diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb
index 89d2efab2b..f4556db399 100644
--- a/config/initializers/application_controller_renderer.rb
+++ b/config/initializers/application_controller_renderer.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# ActiveSupport::Reloader.to_prepare do
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 15e0202651..e6986f5c1e 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
-Rails.application.config.assets.version = "1.0"
+Rails.application.config.assets.version = '1.0'
# Add additional assets to the asset load path.
Rails.application.config.assets.paths << Rails.root.join('node_modules')
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
index 33699c3091..d43cc1d2fe 100644
--- a/config/initializers/backtrace_silencers.rb
+++ b/config/initializers/backtrace_silencers.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
@@ -5,4 +7,4 @@
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
-Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
+Rails.backtrace_cleaner.remove_silencers! if ENV['BACKTRACE']
diff --git a/config/initializers/cache_output.rb b/config/initializers/cache_output.rb
index 3f1335b177..8a7218e3c3 100644
--- a/config/initializers/cache_output.rb
+++ b/config/initializers/cache_output.rb
@@ -1,2 +1,3 @@
-Rails.cache.silence!
+# frozen_string_literal: true
+Rails.cache.silence!
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 54f47cf15f..691cfa11a6 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Define an application-wide content security policy.
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
index 5a6a32d371..ee8dff9c99 100644
--- a/config/initializers/cookies_serializer.rb
+++ b/config/initializers/cookies_serializer.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Specify a serializer for the signed and encrypted cookie jars.
diff --git a/config/initializers/cube_reporter.rb b/config/initializers/cube_reporter.rb
index 136f509dd5..315828989b 100644
--- a/config/initializers/cube_reporter.rb
+++ b/config/initializers/cube_reporter.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'cube'
##
@@ -5,9 +7,8 @@
# A cube server is required. See http://square.github.io/cube/ for more info.
module Rack
class CubeReporter
-
def initialize(app = nil, options = {})
- host = options[:cube_host] || "localhost"
+ host = options[:cube_host] || 'localhost'
port = options[:cube_port] || 1180
@app = app
@cube = ::Cube::Client.new(host, port)
@@ -17,27 +18,26 @@ def call(env)
start = Time.now
data = @app.call(env)
finish = Time.now
- user = env["rack.session"] ? env["rack.session"][:user] : nil
+ user = env['rack.session'] ? env['rack.session'][:user] : nil
apikey = user.apikey if user
username = user.username if user
req_data = {
- duration_ms: ((finish - start)*1000).ceil,
- path: env["REQUEST_PATH"],
+ duration_ms: ((finish - start) * 1000).ceil,
+ path: env['REQUEST_PATH'],
status: data[0],
user: {
apikey: apikey,
username: username,
- ip: env["REMOTE_ADDR"],
- user_agent: env["HTTP_USER_AGENT"]
+ ip: env['REMOTE_ADDR'],
+ user_agent: env['HTTP_USER_AGENT']
}
}
- @cube.send "ui_request", DateTime.now, req_data
+ @cube.send 'ui_request', DateTime.now, req_data
data
end
-
end
end
if global_variables.include?(:$ENABLE_CUBE) && $ENABLE_CUBE == true
- Rails.configuration.middleware.use(::Rack::CubeReporter, {cube_host: $CUBE_HOST, cube_port: $CUBE_PORT})
-end
\ No newline at end of file
+ Rails.configuration.middleware.use(::Rack::CubeReporter, { cube_host: $CUBE_HOST, cube_port: $CUBE_PORT })
+end
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index adc6568ce8..3df77c5bee 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Configure parameters to be filtered from the log file. Use this to limit dissemination of
# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
# notations and behaviors.
-Rails.application.config.filter_parameters += [
- :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+Rails.application.config.filter_parameters += %i[
+ passw secret token _key crypt salt certificate otp ssn
]
diff --git a/config/initializers/haml.rb b/config/initializers/haml.rb
index bdcbd0c87d..8c4a797a01 100644
--- a/config/initializers/haml.rb
+++ b/config/initializers/haml.rb
@@ -1 +1,3 @@
-Haml::Template.options[:format] = :xhtml
\ No newline at end of file
+# frozen_string_literal: true
+
+Haml::Template.options[:format] = :xhtml
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index 3860f659ea..6c78420e71 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
index dc1899682b..6e1d16f027 100644
--- a/config/initializers/mime_types.rb
+++ b/config/initializers/mime_types.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
diff --git a/config/initializers/miniprofiler.rb b/config/initializers/miniprofiler.rb
index 05194cebbe..9d43c82ec4 100644
--- a/config/initializers/miniprofiler.rb
+++ b/config/initializers/miniprofiler.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
Rack::MiniProfiler.config.authorization_mode = :allow_authorized
Rack::MiniProfiler.config.position = 'right'
diff --git a/config/initializers/monkeypatches.rb b/config/initializers/monkeypatches.rb
index e917a47cc2..7cd0c8195c 100644
--- a/config/initializers/monkeypatches.rb
+++ b/config/initializers/monkeypatches.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Mixin for UTF-8 supported substring
class String
def utf8_slice(index, size = 1)
@@ -6,7 +8,7 @@ def utf8_slice(index, size = 1)
def utf8_slice!(index, size = 1)
str = self[/.{#{index}}(.{#{size}})/, 1]
- self[/.{#{index}}(.{#{size}})/, 1] = ""
+ self[/.{#{index}}(.{#{size}})/, 1] = ''
str
end
end
diff --git a/config/initializers/new_framework_defaults_6_0.rb b/config/initializers/new_framework_defaults_6_0.rb
index 8c069c5f45..829ebeed93 100644
--- a/config/initializers/new_framework_defaults_6_0.rb
+++ b/config/initializers/new_framework_defaults_6_0.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.0 upgrade.
diff --git a/config/initializers/new_framework_defaults_6_1.rb b/config/initializers/new_framework_defaults_6_1.rb
index 9526b835ab..0b4ce02317 100644
--- a/config/initializers/new_framework_defaults_6_1.rb
+++ b/config/initializers/new_framework_defaults_6_1.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.1 upgrade.
diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb
index a579326e20..9cf319f0a5 100644
--- a/config/initializers/new_framework_defaults_7_0.rb
+++ b/config/initializers/new_framework_defaults_7_0.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.0 framework defaults upgrade.
diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb
index af53788f9c..d1923e1675 100644
--- a/config/initializers/omniauth.rb
+++ b/config/initializers/omniauth.rb
@@ -1,5 +1,8 @@
+# frozen_string_literal: true
+
Rails.application.config.middleware.use OmniAuth::Builder do
$OMNIAUTH_PROVIDERS.each do |provider, config|
- provider config[:strategy] || provider, config[:client_id], config[:client_secret], client_options: {}.merge(config[:client_options].to_h)
+ provider config[:strategy] || provider, config[:client_id], config[:client_secret],
+ client_options: {}.merge(config[:client_options].to_h)
end
-end
\ No newline at end of file
+end
diff --git a/config/initializers/ontologies_api_client.rb b/config/initializers/ontologies_api_client.rb
index ca8f07e9eb..bcef2b067f 100644
--- a/config/initializers/ontologies_api_client.rb
+++ b/config/initializers/ontologies_api_client.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# ontologies_api_client init (default config works for the UI)
require 'ontologies_api_client'
LinkedData::Client.config do |config|
diff --git a/config/initializers/open_uri_no_temp_files.rb b/config/initializers/open_uri_no_temp_files.rb
index 461dc2bcbd..4424ffb76f 100644
--- a/config/initializers/open_uri_no_temp_files.rb
+++ b/config/initializers/open_uri_no_temp_files.rb
@@ -1,5 +1,6 @@
- # Don't allow downloaded files to be created as tempfiles. Force storage in memory using StringIO.
- require 'open-uri'
- OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
- OpenURI::Buffer.const_set 'StringMax', 104857600
-
\ No newline at end of file
+# frozen_string_literal: true
+
+# Don't allow downloaded files to be created as tempfiles. Force storage in memory using StringIO.
+require 'open-uri'
+OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
+OpenURI::Buffer.const_set 'StringMax', 104_857_600
diff --git a/config/initializers/passenger_memcache_reset.rb b/config/initializers/passenger_memcache_reset.rb
index a69516ce23..ec3ad05334 100644
--- a/config/initializers/passenger_memcache_reset.rb
+++ b/config/initializers/passenger_memcache_reset.rb
@@ -1,12 +1,14 @@
- begin
- PhusionPassenger.on_event(:starting_worker_process) do |forked|
- if forked
- # We're in smart spawning mode, so...
- # Close duplicated memcached connections - they will open themselves
- cache = Rails.cache.instance_variable_get("@data")
- cache.reset if cache && cache.respond_to?(:reset)
- end
- end
- rescue NameError
- # In case you're not running under Passenger (i.e. devmode with mongrel)
- end
\ No newline at end of file
+# frozen_string_literal: true
+
+begin
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
+ if forked
+ # We're in smart spawning mode, so...
+ # Close duplicated memcached connections - they will open themselves
+ cache = Rails.cache.instance_variable_get('@data')
+ cache.reset if cache.respond_to?(:reset)
+ end
+ end
+rescue NameError
+ # In case you're not running under Passenger (i.e. devmode with mongrel)
+end
diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb
index 00f64d71b0..50bcf4eade 100644
--- a/config/initializers/permissions_policy.rb
+++ b/config/initializers/permissions_policy.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Define an application-wide HTTP permissions policy. For further
# information see https://developers.google.com/web/updates/2018/06/feature-policy
#
diff --git a/config/initializers/recaptcha.rb b/config/initializers/recaptcha.rb
index ae2bcc95cf..f847577c1b 100644
--- a/config/initializers/recaptcha.rb
+++ b/config/initializers/recaptcha.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
if ENV['USE_RECAPTCHA'].present? && ENV['USE_RECAPTCHA'] == 'true'
Recaptcha.configure do |config|
config.site_key = Rails.application.credentials.recaptcha[:site_key]
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index 1a4686867d..af5bbb34ee 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# BioportalWebUi::Application.config.session_store :cookie_store, key: '_bioportal_web_ui_session'
diff --git a/config/initializers/sigtrap.rb b/config/initializers/sigtrap.rb
index 70f601e846..755080a620 100644
--- a/config/initializers/sigtrap.rb
+++ b/config/initializers/sigtrap.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
# Run `kill -TTIN {pid}` to get backtraces for a running process
trap 'TTIN' do
Thread.list.each do |thread|
puts "Thread TID-#{thread.object_id.to_s(36)}"
- puts thread.backtrace.join("n")
+ puts thread.backtrace.join('n')
end
end
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb
index bbfc3961bf..2f3c0db471 100644
--- a/config/initializers/wrap_parameters.rb
+++ b/config/initializers/wrap_parameters.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# This file contains settings for ActionController::ParamsWrapper which
diff --git a/config/initializers/zeitwerk.rb b/config/initializers/zeitwerk.rb
new file mode 100644
index 0000000000..edc750f48a
--- /dev/null
+++ b/config/initializers/zeitwerk.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+Rails.autoloaders.each do |autoloader|
+ autoloader.inflector = Zeitwerk::Inflector.new
+ autoloader.inflector.inflect(
+ 'kgcl' => 'KGCL'
+ )
+end
diff --git a/config/puma.rb b/config/puma.rb
index 1e19380dcb..ea3ca621c5 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -1,19 +1,21 @@
+# frozen_string_literal: true
+
# Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers: a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
#
-threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+threads_count = ENV.fetch('RAILS_MAX_THREADS', 5)
threads threads_count, threads_count
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
-port ENV.fetch("PORT") { 3000 }
+port ENV.fetch('PORT', 3000)
# Specifies the `environment` that Puma will run in.
#
-environment ENV.fetch("RAILS_ENV") { "development" }
+environment ENV.fetch('RAILS_ENV', 'development')
# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked webserver processes. If using threads and workers together
diff --git a/config/routes.rb b/config/routes.rb
index 8e706eba1d..7d0e84c679 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,5 +1,6 @@
-Rails.application.routes.draw do
+# frozen_string_literal: true
+Rails.application.routes.draw do
root to: 'home#index'
get 'auth/:provider/callback', to: 'login#create_omniauth'
@@ -16,16 +17,16 @@
post :save_new_term_instructions, on: :collection
end
- resources :projects, constraints: { id: /[^\/]+/ }
+ resources :projects, constraints: { id: %r{[^/]+} }
- resources :users, path: :accounts, constraints: { id: /[\d\w\.\-\%\+ ]+/ }
+ resources :users, path: :accounts, constraints: { id: /[\d\w.\-%+ ]+/ }
resources :reviews
get '/users/subscribe/:username', to: 'users#subscribe'
get '/users/un-subscribe/:email', to: 'users#un_subscribe'
- get '/mappings/loader' , to: 'mappings#loader'
+ get '/mappings/loader', to: 'mappings#loader'
post '/mappings/loader', to: 'mappings#loader_process'
get 'mappings/count/:id', to: 'mappings#count', constraints: { id: /.+/ }
get 'mappings/show_mappings', to: 'mappings#show_mappings'
@@ -42,11 +43,11 @@
get 'ontologies/:ontology_id/concepts', to: 'concepts#show_concept'
resources :ontologies do
- resources :submissions do
+ resources :submissions do
get 'edit_properties'
- end
+ end
- get 'instances/:instance_id', to: 'instances#show', constraints: { instance_id: /[^\/?]+/ }
+ get 'instances/:instance_id', to: 'instances#show', constraints: { instance_id: %r{[^/?]+} }
get 'schemes/show_scheme', to: 'schemes#show'
get 'collections/show'
get 'metrics_evolution'
@@ -57,9 +58,9 @@
resources :admin, only: [:index]
namespace :admin do
- resources :licenses, only: [:index, :create, :new]
- resources :groups, only: [:index, :create, :new, :edit, :update, :destroy]
- resources :categories, only: [:index, :create, :new, :edit, :update, :destroy]
+ resources :licenses, only: %i[index create new]
+ resources :groups, only: %i[index create new edit update destroy]
+ resources :categories, only: %i[index create new edit update destroy]
end
resources :subscriptions
@@ -82,47 +83,48 @@
post '/result', to: 'ontologies_metadata_curator#result'
post '/edit', to: 'ontologies_metadata_curator#edit'
put '/update', to: 'ontologies_metadata_curator#update'
- get '/:ontology/submissions/:submission_id/attributes/:attribute', to: 'ontologies_metadata_curator#show_metadata_value'
+ get '/:ontology/submissions/:submission_id/attributes/:attribute',
+ to: 'ontologies_metadata_curator#show_metadata_value'
get '/:ontology/submissions/:submission_id', to: 'ontologies_metadata_curator#show_metadata_by_ontology'
end
-
+
get '' => 'home#index'
# Top-level pages
- match '/feedback', to: 'home#feedback', via: [:get, :post]
+ match '/feedback', to: 'home#feedback', via: %i[get post]
get '/account' => 'home#account'
get '/site_config' => 'home#site_config'
get '/validate_ontology_file' => 'home#validate_ontology_file_show'
post '/annotator_recommender_form' => 'home#annotator_recommender_form'
- match '/validate_ontology_file' => 'home#validate_ontology_file', via: [:get, :post]
+ match '/validate_ontology_file' => 'home#validate_ontology_file', via: %i[get post]
get '/layout_partial/:partial' => 'home#render_layout_partial'
match '/visits', to: 'visits#index', via: :get
# Error pages
- match "/404", to: "errors#not_found", via: :all
- match "/500", to: "errors#internal_server_error", via: :all
+ match '/404', to: 'errors#not_found', via: :all
+ match '/500', to: 'errors#internal_server_error', via: :all
# Analytics
- match 'analytics', to: 'analytics#track', via: [:post]
-
+ match 'analytics', to: 'analytics#track', via: [:post]
+
# Robots.txt
get '/robots.txt' => 'robots#index'
# Ontologies
- get '/ontologies/view/edit/:id' => 'ontologies#edit_view', :constraints => { id: /[^\/?]+/ }
+ get '/ontologies/view/edit/:id' => 'ontologies#edit_view', :constraints => { id: %r{[^/?]+} }
get '/ontologies/view/new/:id' => 'ontologies#new_view'
-
+
get '/ontologies/virtual/:ontology' => 'ontologies#virtual', :as => :ontology_virtual
get '/ontologies/success/:id' => 'ontologies#submit_success'
- match '/ontologies/:acronym' => 'ontologies#update', via: [:get, :post]
- match '/ontologies/:acronym/submissions/:id' => 'submissions#update', via: [:get, :post]
+ match '/ontologies/:acronym' => 'ontologies#update', via: %i[get post]
+ match '/ontologies/:acronym/submissions/:id' => 'submissions#update', via: %i[get post]
get '/ontologies/:ontology_id/submissions/new' => 'submissions#new', :ontology_id => /.+/
match '/ontologies/:ontology_id/submissions' => 'submissions#create', :ontology_id => /.+/, via: [:post]
match '/ontologies/:ontology_id/submissions' => 'submissions#index', :ontology_id => /.+/, via: [:get]
- get '/ontologies/:acronym/classes/:purl_conceptid', to: 'ontologies#show', constraints: { purl_conceptid: /[^\/]+/ }
- get '/ontologies/:acronym/: f', to: 'ontologies#show', constraints: { purl_conceptid: /[^\/]+/ }
- match '/ontologies/:acronym/submissions/:id/edit_metadata' => 'submissions#edit_metadata', via: [:get, :post]
- get '/ontologies_filter', to: 'ontologies#ontologies_filter'
+ get '/ontologies/:acronym/classes/:purl_conceptid', to: 'ontologies#show', constraints: { purl_conceptid: %r{[^/]+} }
+ get '/ontologies/:acronym/: f', to: 'ontologies#show', constraints: { purl_conceptid: %r{[^/]+} }
+ match '/ontologies/:acronym/submissions/:id/edit_metadata' => 'submissions#edit_metadata', via: %i[get post]
+ get '/ontologies_filter', to: 'ontologies#ontologies_filter'
# Analytics
get '/analytics/:action' => 'analytics#(?-mix:search_result_clicked|user_intention_surveys)'
@@ -133,7 +135,7 @@
# Ajax
get '/ajax/' => 'ajax_proxy#get', :as => :ajax
- get '/ajax_concepts/:ontology/' => 'concepts#show', :constraints => { id: /[^\/?]+/ }
+ get '/ajax_concepts/:ontology/' => 'concepts#show', :constraints => { id: %r{[^/?]+} }
get '/ajax/class_details' => 'concepts#details'
get '/ajax/mappings/get_concept_table' => 'mappings#get_concept_table'
get '/ajax/json_ontology' => 'ajax_proxy#json_ontology'
@@ -148,19 +150,20 @@
get '/ajax/classes/list' => 'collections#show_members'
get '/ajax/classes/date_sorted_list' => 'concepts#show_date_sorted_list'
get '/ajax/properties/tree' => 'concepts#property_tree'
- get 'ajax/schemes/label', to: "schemes#show_label"
- get 'ajax/collections/label', to: "collections#show_label"
- get 'ajax/label_xl/label', to: "label_xl#show_label"
- get 'ajax/label_xl', to: "label_xl#show"
+ get 'ajax/schemes/label', to: 'schemes#show_label'
+ get 'ajax/collections/label', to: 'collections#show_label'
+ get 'ajax/label_xl/label', to: 'label_xl#show_label'
+ get 'ajax/label_xl', to: 'label_xl#show'
get '/ajax/biomixer' => 'concepts#biomixer'
get '/ajax/fair_score/html' => 'fair_score#details_html'
get '/ajax/submission/show_additional_metadata/:id' => 'ontologies#show_additional_metadata'
get '/ajax/submission/show_licenses/:id' => 'ontologies#show_licenses'
get '/ajax/fair_score/json' => 'fair_score#details_json'
get '/ajax/:ontology/instances' => 'instances#index_by_ontology'
- get '/ajax/:ontology/classes/:conceptid/instances' => 'instances#index_by_class', :constraints => { conceptid: /[^\/?]+/ }
- get '/ajax/ontologies' , to:"ontologies#ajax_ontologies"
- get '/ajax/agents' , to:"agents#ajax_agents"
+ get '/ajax/:ontology/classes/:conceptid/instances' => 'instances#index_by_class',
+ :constraints => { conceptid: %r{[^/?]+} }
+ get '/ajax/ontologies', to: 'ontologies#ajax_ontologies'
+ get '/ajax/agents', to: 'agents#ajax_agents'
get '/ajax/images/show' => 'application#show_image_modal'
# User
get '/logout' => 'login#destroy', :as => :logout
@@ -168,7 +171,7 @@
get '/lost_pass_success' => 'login#lost_password_success'
get '/reset_password' => 'login#reset_password'
post '/accounts/:id/custom_ontologies' => 'users#custom_ontologies', :as => :custom_ontologies
- get '/login_as/:login_as' => 'login#login_as' , constraints: { login_as: /[\d\w\.\-\%\+ ]+/ }
+ get '/login_as/:login_as' => 'login#login_as', constraints: { login_as: /[\d\w.\-%+ ]+/ }
post '/login/send_pass', to: 'login#send_pass'
# History
@@ -216,12 +219,13 @@
get '/ajax/json_term' => 'redirect#index', :url => '/ajax/json_class'
# Visualize
- get '/visualize/:ontology' => 'ontologies#visualize', :as => :visualize, :constraints => { ontology: /[^\/?]+/ }
- get '/visualize/:ontology/:conceptid' => 'ontologies#visualize', :as => :uri, :constraints => { ontology: /[^\/?]+/, conceptid: /[^\/?]+/ }
- get '/visualize' => 'ontologies#visualize', :as => :visualize_concept, :constraints => { ontology: /[^\/?]+/, id: /[^\/?]+/, ontologyid: /[^\/?]+/, conceptid: /[^\/?]+/ }
+ get '/visualize/:ontology' => 'ontologies#visualize', :as => :visualize, :constraints => { ontology: %r{[^/?]+} }
+ get '/visualize/:ontology/:conceptid' => 'ontologies#visualize', :as => :uri,
+ :constraints => { ontology: %r{[^/?]+}, conceptid: %r{[^/?]+} }
+ get '/visualize' => 'ontologies#visualize', :as => :visualize_concept,
+ :constraints => { ontology: %r{[^/?]+}, id: %r{[^/?]+}, ontologyid: %r{[^/?]+}, conceptid: %r{[^/?]+} }
get '/exhibit/:ontology/:id' => 'concepts#exhibit'
- mount Lookbook::Engine, at: "/lookbook"
-
+ mount Lookbook::Engine, at: '/lookbook'
end
diff --git a/config/spring.rb b/config/spring.rb
index c9119b40c0..c5933e491b 100644
--- a/config/spring.rb
+++ b/config/spring.rb
@@ -1,6 +1,8 @@
-%w(
+# frozen_string_literal: true
+
+%w[
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
-).each { |path| Spring.watch(path) }
+].each { |path| Spring.watch(path) }
diff --git a/db/migrate/20120114000857_create_virtual_appliance_users.rb b/db/migrate/20120114000857_create_virtual_appliance_users.rb
index 06f8e1aaf0..d929ec2fb3 100644
--- a/db/migrate/20120114000857_create_virtual_appliance_users.rb
+++ b/db/migrate/20120114000857_create_virtual_appliance_users.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateVirtualApplianceUsers < ActiveRecord::Migration[4.2]
def self.up
create_table :virtual_appliance_users do |t|
diff --git a/db/migrate/20120223203256_create_timeouts_table.rb b/db/migrate/20120223203256_create_timeouts_table.rb
index 22dfbb3e66..894027c6e7 100644
--- a/db/migrate/20120223203256_create_timeouts_table.rb
+++ b/db/migrate/20120223203256_create_timeouts_table.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateTimeoutsTable < ActiveRecord::Migration[4.2]
def self.up
create_table :timeouts do |t|
diff --git a/db/migrate/20120719010735_create_analytics.rb b/db/migrate/20120719010735_create_analytics.rb
index 0a026e6c67..0d9842c3aa 100644
--- a/db/migrate/20120719010735_create_analytics.rb
+++ b/db/migrate/20120719010735_create_analytics.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateAnalytics < ActiveRecord::Migration[4.2]
def self.up
create_table :analytics do |t|
diff --git a/db/migrate/20130930214323_change_virtual_appliance_user_id_type.rb b/db/migrate/20130930214323_change_virtual_appliance_user_id_type.rb
index cce4c2955c..43b5c5813c 100644
--- a/db/migrate/20130930214323_change_virtual_appliance_user_id_type.rb
+++ b/db/migrate/20130930214323_change_virtual_appliance_user_id_type.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ChangeVirtualApplianceUserIdType < ActiveRecord::Migration[4.2]
def self.up
change_column :virtual_appliance_users, :user_id, :string
diff --git a/db/migrate/20140306012927_drop_old_tables.rb b/db/migrate/20140306012927_drop_old_tables.rb
index 692613e4f0..a2c5188936 100644
--- a/db/migrate/20140306012927_drop_old_tables.rb
+++ b/db/migrate/20140306012927_drop_old_tables.rb
@@ -1,25 +1,29 @@
+# frozen_string_literal: true
+
class DropOldTables < ActiveRecord::Migration[4.2]
def self.up
- old_tables = [
- :custom_ontologies,
- :event_items,
- :groups,
- :mapping_import_errors,
- :mappings,
- :margin_notes,
- :notes,
- :notes_indices,
- :projects,
- :rating_types,
- :ratings,
- :reviews,
- :surveys,
- :users,
- :uses,
- :widget_logs
+ old_tables = %i[
+ custom_ontologies
+ event_items
+ groups
+ mapping_import_errors
+ mappings
+ margin_notes
+ notes
+ notes_indices
+ projects
+ rating_types
+ ratings
+ reviews
+ surveys
+ users
+ uses
+ widget_logs
]
old_tables.each do |table|
- drop_table table rescue next
+ drop_table table
+ rescue StandardError
+ next
end
end
diff --git a/db/migrate/20150806211835_change_slice_column_name.rb b/db/migrate/20150806211835_change_slice_column_name.rb
index 65447a6aa6..202755118d 100644
--- a/db/migrate/20150806211835_change_slice_column_name.rb
+++ b/db/migrate/20150806211835_change_slice_column_name.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ChangeSliceColumnName < ActiveRecord::Migration[4.2]
def change
rename_column :analytics, :slice, :bp_slice
diff --git a/db/migrate/20200220191815_create_licenses.rb b/db/migrate/20200220191815_create_licenses.rb
index 82d29bdf0f..fec50092fd 100644
--- a/db/migrate/20200220191815_create_licenses.rb
+++ b/db/migrate/20200220191815_create_licenses.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateLicenses < ActiveRecord::Migration[5.1]
def change
create_table :licenses do |t|
diff --git a/db/migrate/20200921120918_create_ontologies.rb b/db/migrate/20200921120918_create_ontologies.rb
index d372192308..80409405a6 100644
--- a/db/migrate/20200921120918_create_ontologies.rb
+++ b/db/migrate/20200921120918_create_ontologies.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateOntologies < ActiveRecord::Migration[5.1]
def change
create_table :ontologies do |t|
diff --git a/db/schema.rb b/db/schema.rb
index 22dc2b318a..d315a8b976 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
@@ -10,45 +12,45 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.0].define(version: 2020_09_21_120918) do
- create_table "analytics", id: :integer, charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
- t.string "segment"
- t.string "action"
- t.string "bp_slice"
- t.string "ip"
- t.integer "user"
- t.text "params"
- t.datetime "created_at", precision: nil
- t.datetime "updated_at", precision: nil
+ActiveRecord::Schema[7.0].define(version: 20_200_921_120_918) do
+ create_table 'analytics', id: :integer, charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t|
+ t.string 'segment'
+ t.string 'action'
+ t.string 'bp_slice'
+ t.string 'ip'
+ t.integer 'user'
+ t.text 'params'
+ t.datetime 'created_at', precision: nil
+ t.datetime 'updated_at', precision: nil
end
- create_table "licenses", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
- t.text "encrypted_key"
- t.datetime "created_at", precision: nil, null: false
- t.datetime "updated_at", precision: nil, null: false
+ create_table 'licenses', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t|
+ t.text 'encrypted_key'
+ t.datetime 'created_at', precision: nil, null: false
+ t.datetime 'updated_at', precision: nil, null: false
end
- create_table "ontologies", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
- t.string "acronym", null: false
- t.text "new_term_instructions"
- t.text "custom_message"
- t.datetime "created_at", precision: nil, null: false
- t.datetime "updated_at", precision: nil, null: false
- t.index ["acronym"], name: "index_ontologies_on_acronym", unique: true
+ create_table 'ontologies', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t|
+ t.string 'acronym', null: false
+ t.text 'new_term_instructions'
+ t.text 'custom_message'
+ t.datetime 'created_at', precision: nil, null: false
+ t.datetime 'updated_at', precision: nil, null: false
+ t.index ['acronym'], name: 'index_ontologies_on_acronym', unique: true
end
- create_table "timeouts", id: :integer, charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
- t.string "path"
- t.integer "ontology_id"
- t.text "concept_id"
- t.text "params"
- t.timestamp "created"
+ create_table 'timeouts', id: :integer, charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t|
+ t.string 'path'
+ t.integer 'ontology_id'
+ t.text 'concept_id'
+ t.text 'params'
+ t.timestamp 'created'
end
- create_table "virtual_appliance_users", id: :integer, charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
- t.string "user_id"
- t.datetime "created_at", precision: nil
- t.datetime "updated_at", precision: nil
+ create_table 'virtual_appliance_users', id: :integer, charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci',
+ force: :cascade do |t|
+ t.string 'user_id'
+ t.datetime 'created_at', precision: nil
+ t.datetime 'updated_at', precision: nil
end
-
end
diff --git a/db/seeds.rb b/db/seeds.rb
index 4edb1e857e..c8774b7376 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
diff --git a/docker-compose.yml b/docker-compose.yml
index 38be0278fb..f8f8ecd249 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -18,7 +18,7 @@ x-app: &default-app
tty: true
volumes:
- "${DOCKER_WEB_VOLUME}"
- - bundle:/usr/local/bundle
+ - bundle:/usr/local/bundle
- node:/node_modules
services:
@@ -26,7 +26,7 @@ services:
environment:
MYSQL_ROOT_PASSWORD: 'bp_user'
image: "mysql:latest"
- profiles: ["db"]
+ profiles: [ "cache-db", "db", "web", "test" ]
ports:
- "3306:3306"
volumes:
@@ -38,14 +38,28 @@ services:
cpus: "${DOCKER_REDIS_CPUS:-0}"
memory: "${DOCKER_REDIS_MEMORY:-0}"
image: "memcached:1.6.17-bullseye"
- profiles: ["cache"]
+ profiles: [ "cache-db", "cache", "web", "test" ]
- web:
+ yarn:
<<: *default-app
ports:
- "${DOCKER_WEB_PORT_FORWARD:-127.0.0.1:3000}:${PORT:-3000}"
- profiles: ["web"]
+ profiles: [ "web" ]
command: "yarn build --watch"
+
+ web:
+ <<: *default-app
+ environment:
+ API_URL: ${API_URL}
+ API_KEY: ${API_KEY}
+ BIOMIXER_URL: ${BIOMIXER_URL}
+ FAIRNESS_URL: ${FAIRNESS_URL}
+ ANNOTATOR_URL: ${ANNOTATOR_URL}
+ BUNDLE_PATH: /usr/local/bundle
+ ports:
+ - "${DOCKER_WEB_PORT_FORWARD:-127.0.0.1:3000}:${PORT:-3000}"
+ profiles: [ "test" ]
+ command: RAILS_ENV=test bin/rails s
volumes:
db-v:
bundle:
diff --git a/lib/log.rb b/lib/log.rb
index 00c815d600..34d4f6bc8e 100644
--- a/lib/log.rb
+++ b/lib/log.rb
@@ -1,7 +1,8 @@
+# frozen_string_literal: true
+
require 'rest_client'
class LOG
-
# Log using local or remote methods
# Local: provide the log level as a symbol (:debug, :info, :error, etc)
# Remote: provide the request and a parameter hash
@@ -13,25 +14,29 @@ class LOG
# :concept_name
def self.add(level, message, request = nil, remote_params = nil)
if request
- if !$REMOTE_LOGGING.nil? && $REMOTE_LOGGING
- remote(level, message, request, remote_params)
- end
+ remote(level, message, request, remote_params) if !$REMOTE_LOGGING.nil? && $REMOTE_LOGGING
else
local(level, message)
end
end
- private
-
- def self.remote(level, event, request, params)
+ def self.remote(_level, event, request, params)
params = {} if params.nil?
params = convert_params(params) unless params.empty?
- log = RestClient::Resource.new $LEGACY_REST_URL + "/log", :timeout => 30
+ log = RestClient::Resource.new "#{$LEGACY_REST_URL}/log", timeout: 30
session = request.session
- params[:user] = session[:user].username rescue ""
- params[:userid] = session[:user].id rescue ""
+ params[:user] = begin
+ session[:user].username
+ rescue StandardError
+ ''
+ end
+ params[:userid] = begin
+ session[:user].id
+ rescue StandardError
+ ''
+ end
params[:ipaddress] = request.remote_ip
params[:sessionid] = request.session_options[:id]
params[:eventtype] = event
@@ -41,7 +46,7 @@ def self.remote(level, event, request, params)
begin
ms = Benchmark.ms { log.post(params) }
LOG.add :debug, "Logging action remotely (#{ms}ms)"
- rescue Exception=>e
+ rescue Exception => e
LOG.add :debug, "Remote logging failed: #{e.message}"
end
end
@@ -65,5 +70,4 @@ def self.local(level, message)
p "#{level} || #{message}"
end
end
-
end
diff --git a/lib/resolver/acronym_from_virtual.rb b/lib/resolver/acronym_from_virtual.rb
index 5e753e84e3..21ecaae633 100644
--- a/lib/resolver/acronym_from_virtual.rb
+++ b/lib/resolver/acronym_from_virtual.rb
@@ -1,535 +1,537 @@
+# frozen_string_literal: true
+
BpidResolver::ACRONYM_FROM_VIRTUAL = {
- "old:acronym_from_virtual:3013" => "DIAGONT",
- "old:acronym_from_virtual:3245" => "SuicidO",
- "old:acronym_from_virtual:1247" => "GEOSPECIES",
- "old:acronym_from_virtual:1054" => "AMINO-ACID",
- "old:acronym_from_virtual:2012" => "goslim_pir",
- "old:acronym_from_virtual:3015" => "PMR",
- "old:acronym_from_virtual:3212" => "GLYCOPROT",
- "old:acronym_from_virtual:3271" => "BSAO",
- "old:acronym_from_virtual:2099" => "GWAS_EFO_SKOS",
- "old:acronym_from_virtual:1062" => "PR",
- "old:acronym_from_virtual:3004" => "NATPRO",
- "old:acronym_from_virtual:1584" => "MMO",
- "old:acronym_from_virtual:1046" => "SBO",
- "old:acronym_from_virtual:1545" => "CO-WHEAT",
- "old:acronym_from_virtual:1016" => "FB-DV",
- "old:acronym_from_virtual:1059" => "CPRO",
- "old:acronym_from_virtual:3238" => "PDO",
- "old:acronym_from_virtual:1576" => "FDA-MEDDEVICE",
- "old:acronym_from_virtual:1114" => "BILA",
- "old:acronym_from_virtual:1055" => "GALEN",
- "old:acronym_from_virtual:1158" => "CBO",
- "old:acronym_from_virtual:3151" => "GEXO",
- "old:acronym_from_virtual:2109" => "ooevv-vaccine",
- "old:acronym_from_virtual:1488" => "JERM",
- "old:acronym_from_virtual:3234" => "BOF",
- "old:acronym_from_virtual:3047" => "DEMOGRAPH",
- "old:acronym_from_virtual:1613" => "BDO",
- "old:acronym_from_virtual:1142" => "EP",
- "old:acronym_from_virtual:3127" => "IMMDIS",
- "old:acronym_from_virtual:1461" => "TMO",
- "old:acronym_from_virtual:3146" => "CMS",
- "old:acronym_from_virtual:1125" => "HP",
- "old:acronym_from_virtual:2033" => "iceci-instrument_object_substance",
- "old:acronym_from_virtual:1033" => "NMR",
- "old:acronym_from_virtual:1666" => "MFOEM",
- "old:acronym_from_virtual:1615" => "CHEMBIO",
- "old:acronym_from_virtual:3184" => "ZIP3",
- "old:acronym_from_virtual:3150" => "BRIDG",
- "old:acronym_from_virtual:2054" => "NCBI_NMOsp_1_0_0",
- "old:acronym_from_virtual:1370" => "ATO",
- "old:acronym_from_virtual:3268" => "ERNO",
- "old:acronym_from_virtual:3261" => "STNFRDRXDEMO",
- "old:acronym_from_virtual:2032" => "iceci-details_for_place_of_occurrence",
- "old:acronym_from_virtual:1402" => "NIFCELL",
- "old:acronym_from_virtual:1427" => "RCD",
- "old:acronym_from_virtual:1565" => "OMRSE",
- "old:acronym_from_virtual:1517" => "EHDAA2",
- "old:acronym_from_virtual:1347" => "MEDLINEPLUS",
- "old:acronym_from_virtual:3243" => "NHSQI2009",
- "old:acronym_from_virtual:1640" => "PEDTERM",
- "old:acronym_from_virtual:1354" => "WHO-ART",
- "old:acronym_from_virtual:1095" => "XAO",
- "old:acronym_from_virtual:1661" => "UCSFXPLANT",
- "old:acronym_from_virtual:3174" => "IDODEN",
- "old:acronym_from_virtual:1146" => "ECG",
- "old:acronym_from_virtual:1065" => "TADS",
- "old:acronym_from_virtual:3028" => "SOY",
- "old:acronym_from_virtual:1100" => "OGI",
- "old:acronym_from_virtual:2086" => "SMD_NPLSM_BRST",
- "old:acronym_from_virtual:1136" => "EFO",
- "old:acronym_from_virtual:1050" => "ZEA",
- "old:acronym_from_virtual:3124" => "VSO",
- "old:acronym_from_virtual:2085" => "SMD_NPLSM",
- "old:acronym_from_virtual:1047" => "GRO-CPD",
- "old:acronym_from_virtual:1540" => "DDI",
- "old:acronym_from_virtual:2007" => "goslim_generic_1_770",
- "old:acronym_from_virtual:3155" => "ONTOKBCF",
- "old:acronym_from_virtual:2045" => "ICF-d5",
- "old:acronym_from_virtual:1350" => "LOINC",
- "old:acronym_from_virtual:1099" => "ATMO",
- "old:acronym_from_virtual:3231" => "GLYCANONT",
- "old:acronym_from_virtual:3131" => "PROVO",
- "old:acronym_from_virtual:1123" => "OBI",
- "old:acronym_from_virtual:2035" => "iceci-mechanism",
- "old:acronym_from_virtual:1420" => "MSHSPA_1",
- "old:acronym_from_virtual:1304" => "BCGO",
- "old:acronym_from_virtual:1042" => "OBOREL",
- "old:acronym_from_virtual:1049" => "WB-LS",
- "old:acronym_from_virtual:1328" => "HOM",
- "old:acronym_from_virtual:1575" => "EXO",
- "old:acronym_from_virtual:3077" => "ONTODM-KDD",
- "old:acronym_from_virtual:2108" => "ooevv-tractTrace",
- "old:acronym_from_virtual:3191" => "MPO",
- "old:acronym_from_virtual:1349" => "PDQ",
- "old:acronym_from_virtual:3239" => "CSSO",
- "old:acronym_from_virtual:2038" => "iceci-details_for_activity",
- "old:acronym_from_virtual:1522" => "BP",
- "old:acronym_from_virtual:1587" => "PO",
- "old:acronym_from_virtual:1116" => "BHO",
- "old:acronym_from_virtual:3038" => "HOM-TEST",
- "old:acronym_from_virtual:1001" => "GRO-CPGA",
- "old:acronym_from_virtual:2025" => "NIF-RTH",
- "old:acronym_from_virtual:1537" => "IDOBRU",
- "old:acronym_from_virtual:1009" => "DOID",
- "old:acronym_from_virtual:3178" => "CANONT",
- "old:acronym_from_virtual:2036" => "iceci-place_of_occurrence",
- "old:acronym_from_virtual:1112" => "UO",
- "old:acronym_from_virtual:3153" => "NTDO",
- "old:acronym_from_virtual:1010" => "EMAP",
- "old:acronym_from_virtual:1541" => "MCCL",
- "old:acronym_from_virtual:1067" => "WB-PHENOTYPE",
- "old:acronym_from_virtual:1560" => "COGPO",
- "old:acronym_from_virtual:1697" => "UCSFORTHO",
- "old:acronym_from_virtual:1260" => "RID",
- "old:acronym_from_virtual:1091" => "SPD",
- "old:acronym_from_virtual:2103" => "ICPCFRE",
- "old:acronym_from_virtual:1069" => "ENVO",
- "old:acronym_from_virtual:1686" => "NEOMARK4",
- "old:acronym_from_virtual:1527" => "VANDF",
- "old:acronym_from_virtual:1057" => "RADLEX",
- "old:acronym_from_virtual:3258" => "OBR-Scolio",
- "old:acronym_from_virtual:1500" => "RNAO",
- "old:acronym_from_virtual:3042" => "TEO",
- "old:acronym_from_virtual:2114" => "citation",
- "old:acronym_from_virtual:2003" => "BiositemapIM",
- "old:acronym_from_virtual:2029" => "iceci-countermeasures",
- "old:acronym_from_virtual:3264" => "WH",
- "old:acronym_from_virtual:1144" => "DC-CL",
- "old:acronym_from_virtual:1418" => "TOK",
- "old:acronym_from_virtual:1497" => "PMA",
- "old:acronym_from_virtual:2093" => "OBI_IEDB_view",
- "old:acronym_from_virtual:3252" => "SSE",
- "old:acronym_from_virtual:1183" => "LIPRO",
- "old:acronym_from_virtual:1423" => "RXNORM",
- "old:acronym_from_virtual:1026" => "MAO",
- "old:acronym_from_virtual:1555" => "VSAO",
- "old:acronym_from_virtual:3031" => "QUDT",
- "old:acronym_from_virtual:3223" => "GCO",
- "old:acronym_from_virtual:1172" => "VO",
- "old:acronym_from_virtual:1068" => "SAO",
- "old:acronym_from_virtual:1410" => "KISAO",
- "old:acronym_from_virtual:1520" => "LSM",
- "old:acronym_from_virtual:2050" => "ICF-d810-d839",
- "old:acronym_from_virtual:3021" => "ATC",
- "old:acronym_from_virtual:1063" => "CARO",
- "old:acronym_from_virtual:1530" => "ADW",
- "old:acronym_from_virtual:2120" => "provenance",
- "old:acronym_from_virtual:3017" => "GCC",
- "old:acronym_from_virtual:2056" => "NCBI_NMOsp_1_2_2",
- "old:acronym_from_virtual:3206" => "HCPCS-HIMC",
- "old:acronym_from_virtual:1104" => "BRO",
- "old:acronym_from_virtual:1092" => "IDO",
- "old:acronym_from_virtual:1413" => "SWO",
- "old:acronym_from_virtual:3032" => "EPICMEDS",
- "old:acronym_from_virtual:1456" => "MSHFRE",
- "old:acronym_from_virtual:1077" => "MIRO",
- "old:acronym_from_virtual:1051" => "ZFA",
- "old:acronym_from_virtual:2055" => "NCBI_NMOsp_1_2_1",
- "old:acronym_from_virtual:3090" => "ONTOMA",
- "old:acronym_from_virtual:3104" => "USSOC",
- "old:acronym_from_virtual:1573" => "TM-MER",
- "old:acronym_from_virtual:3092" => "CLINIC",
- "old:acronym_from_virtual:1616" => "PHYLONT",
- "old:acronym_from_virtual:2023" => "NCBITaxonOWL",
- "old:acronym_from_virtual:1656" => "PHENOMEBLAST",
- "old:acronym_from_virtual:3219" => "MSTDE",
- "old:acronym_from_virtual:1025" => "MP",
- "old:acronym_from_virtual:1670" => "ICDO3",
- "old:acronym_from_virtual:1089" => "BIRNLEX",
- "old:acronym_from_virtual:3215" => "MIXS",
- "old:acronym_from_virtual:1532" => "SIO",
- "old:acronym_from_virtual:2105" => "SNMD_BDY",
- "old:acronym_from_virtual:3022" => "BIOMODELS",
- "old:acronym_from_virtual:2053" => "ICF-d840-d859%2Fd860-d879",
- "old:acronym_from_virtual:3262" => "BCTEO",
- "old:acronym_from_virtual:1168" => "Amino_Acid-zh_CN",
- "old:acronym_from_virtual:1550" => "PHARE",
- "old:acronym_from_virtual:1398" => "LDA",
- "old:acronym_from_virtual:1428" => "NIC",
- "old:acronym_from_virtual:1567" => "PVONTO",
- "old:acronym_from_virtual:3211" => "TEST-PROD",
- "old:acronym_from_virtual:2124" => "ICD9CM-PROC",
- "old:acronym_from_virtual:3255" => "CHMO",
- "old:acronym_from_virtual:3204" => "PORO",
- "old:acronym_from_virtual:1043" => "REX",
- "old:acronym_from_virtual:1689" => "FYPO",
- "old:acronym_from_virtual:3008" => "CARELEX",
- "old:acronym_from_virtual:1570" => "TM-CONST",
- "old:acronym_from_virtual:2070" => "obi-fged",
- "old:acronym_from_virtual:2002" => "BRO-AreaOfResearch",
- "old:acronym_from_virtual:2020" => "SNOMEDCT-ANAT",
- "old:acronym_from_virtual:2092" => "envo_153",
- "old:acronym_from_virtual:3045" => "ICD9CM-KM",
- "old:acronym_from_virtual:3108" => "CCONT",
- "old:acronym_from_virtual:1438" => "MCBCC",
- "old:acronym_from_virtual:1348" => "OMIM",
- "old:acronym_from_virtual:1515" => "INO",
- "old:acronym_from_virtual:3176" => "XEO",
- "old:acronym_from_virtual:2009" => "goslim_plant",
- "old:acronym_from_virtual:2078" => "H1_NMOABA",
- "old:acronym_from_virtual:3183" => "IFAR",
- "old:acronym_from_virtual:2046" => "ICF-d6",
- "old:acronym_from_virtual:3186" => "I2B2-LOINC",
- "old:acronym_from_virtual:3265" => "BNO",
- "old:acronym_from_virtual:2110" => "DTVPrecision",
- "old:acronym_from_virtual:1581" => "HLTHINDCTRS",
- "old:acronym_from_virtual:3220" => "MSTDE-FRE",
- "old:acronym_from_virtual:3009" => "MEO",
- "old:acronym_from_virtual:1694" => "CPT-KM",
- "old:acronym_from_virtual:1052" => "PRO-ONT",
- "old:acronym_from_virtual:1290" => "ABA-AMB",
- "old:acronym_from_virtual:3000" => "MIXSCV",
- "old:acronym_from_virtual:1038" => "PSDS",
- "old:acronym_from_virtual:1023" => "FBbi",
- "old:acronym_from_virtual:1060" => "CTONT",
- "old:acronym_from_virtual:1249" => "SBRO",
- "old:acronym_from_virtual:1152" => "MAT",
- "old:acronym_from_virtual:2101" => "test1",
- "old:acronym_from_virtual:1083" => "NPO",
- "old:acronym_from_virtual:1013" => "EVOC",
- "old:acronym_from_virtual:1407" => "TEDDY",
- "old:acronym_from_virtual:2113" => "bibliographic",
- "old:acronym_from_virtual:2030" => "iceci-descriptor_for_intent",
- "old:acronym_from_virtual:2084" => "OGMD_OWL",
- "old:acronym_from_virtual:1053" => "FMA",
- "old:acronym_from_virtual:1422" => "MEDDRA",
- "old:acronym_from_virtual:2010" => "goslim_candida",
- "old:acronym_from_virtual:3273" => "HRDO",
- "old:acronym_from_virtual:3152" => "REXO",
- "old:acronym_from_virtual:3222" => "RSA",
- "old:acronym_from_virtual:3207" => "ATOL",
- "old:acronym_from_virtual:1498" => "EDAM",
- "old:acronym_from_virtual:1109" => "SO",
- "old:acronym_from_virtual:1224" => "SYMP",
- "old:acronym_from_virtual:3253" => "OntoVIP",
- "old:acronym_from_virtual:1237" => "SITBAC",
- "old:acronym_from_virtual:2042" => "ICF-d2",
- "old:acronym_from_virtual:3263" => "OntoBioUSP",
- "old:acronym_from_virtual:1649" => "OSHPD",
- "old:acronym_from_virtual:3247" => "EDDA",
- "old:acronym_from_virtual:1671" => "QIBO",
- "old:acronym_from_virtual:1585" => "XCO",
- "old:acronym_from_virtual:1006" => "CL",
- "old:acronym_from_virtual:1424" => "NDDF",
- "old:acronym_from_virtual:3114" => "RPO",
- "old:acronym_from_virtual:1426" => "MDDB",
- "old:acronym_from_virtual:3169" => "GLYCO",
- "old:acronym_from_virtual:2065" => "obi-device",
- "old:acronym_from_virtual:1192" => "CPTAC",
- "old:acronym_from_virtual:1032" => "NCIT",
- "old:acronym_from_virtual:2067" => "RCJI",
- "old:acronym_from_virtual:1017" => "FB-CV",
- "old:acronym_from_virtual:2014" => "goslim_yeast",
- "old:acronym_from_virtual:3251" => "ADO",
- "old:acronym_from_virtual:1081" => "TTO",
- "old:acronym_from_virtual:3162" => "RETO",
- "old:acronym_from_virtual:1362" => "HAO",
- "old:acronym_from_virtual:3240" => "RNPRIO",
- "old:acronym_from_virtual:3272" => "CARD",
- "old:acronym_from_virtual:3217" => "CABRO",
- "old:acronym_from_virtual:2069" => "H1_NMOABA_1_0",
- "old:acronym_from_virtual:3208" => "IDQA",
- "old:acronym_from_virtual:3228" => "ELIG",
- "old:acronym_from_virtual:1651" => "SDO",
- "old:acronym_from_virtual:3126" => "NIFSUBCELL",
- "old:acronym_from_virtual:3157" => "GENETRIAL",
- "old:acronym_from_virtual:1070" => "GO",
- "old:acronym_from_virtual:2088" => "SNMD_BC",
- "old:acronym_from_virtual:1414" => "OGMS",
- "old:acronym_from_virtual:1516" => "ICD10",
- "old:acronym_from_virtual:1429" => "ICPC2P",
- "old:acronym_from_virtual:3241" => "UDEF",
- "old:acronym_from_virtual:2034" => "iceci-intent",
- "old:acronym_from_virtual:2074" => "H1_NMOABA_2_0",
- "old:acronym_from_virtual:1024" => "LHN",
- "old:acronym_from_virtual:3003" => "CNO",
- "old:acronym_from_virtual:2083" => "H1_NMOABA_4_1",
- "old:acronym_from_virtual:1039" => "PROPREO",
- "old:acronym_from_virtual:1638" => "ONTODM-CORE",
- "old:acronym_from_virtual:2008" => "goslim_goa",
- "old:acronym_from_virtual:3250" => "ONL-MR-DA",
- "old:acronym_from_virtual:3136" => "NHDS",
- "old:acronym_from_virtual:1393" => "IAO",
- "old:acronym_from_virtual:1332" => "BFO",
- "old:acronym_from_virtual:3203" => "HINO",
- "old:acronym_from_virtual:2122" => "SciRes",
- "old:acronym_from_virtual:2013" => "goslim_pombe",
- "old:acronym_from_virtual:1627" => "HOMERUN",
- "old:acronym_from_virtual:2117" => "event",
- "old:acronym_from_virtual:1190" => "OPL",
- "old:acronym_from_virtual:3002" => "MF",
- "old:acronym_from_virtual:1417" => "FLU",
- "old:acronym_from_virtual:1314" => "CLO",
- "old:acronym_from_virtual:1101" => "ICD9CM",
- "old:acronym_from_virtual:3029" => "SPTO",
- "old:acronym_from_virtual:1381" => "NIFDYS",
- "old:acronym_from_virtual:1440" => "GFO-BIO",
- "old:acronym_from_virtual:1344" => "ICPC",
- "old:acronym_from_virtual:1351" => "MESH",
- "old:acronym_from_virtual:1094" => "PTRANS",
- "old:acronym_from_virtual:1115" => "YPO",
- "old:acronym_from_virtual:2126" => "CPT-mod",
- "old:acronym_from_virtual:1621" => "NBO",
- "old:acronym_from_virtual:3007" => "UCSFICU",
- "old:acronym_from_virtual:2041" => "ICF-d1",
- "old:acronym_from_virtual:2080" => "H1_NMOABA_4_0",
- "old:acronym_from_virtual:1501" => "NEOMARK3",
- "old:acronym_from_virtual:3158" => "SWEET",
- "old:acronym_from_virtual:1335" => "PEO",
- "old:acronym_from_virtual:1571" => "TM-OTHER-FACTORS",
- "old:acronym_from_virtual:1061" => "SOPHARM",
- "old:acronym_from_virtual:1411" => "ICF",
- "old:acronym_from_virtual:1394" => "SSO",
- "old:acronym_from_virtual:2018" => "SNOMEDCT-CF",
- "old:acronym_from_virtual:1676" => "RCTONT",
- "old:acronym_from_virtual:1086" => "OGDI",
- "old:acronym_from_virtual:1699" => "VIVO",
- "old:acronym_from_virtual:2079" => "ECGT",
- "old:acronym_from_virtual:2082" => "H3_HIPSeptotemporalAxis",
- "old:acronym_from_virtual:1321" => "NEMO",
- "old:acronym_from_virtual:3267" => "DCO",
- "old:acronym_from_virtual:2001" => "BRO-Activity",
- "old:acronym_from_virtual:2072" => "NCBI_NMOsp_1_4_0",
- "old:acronym_from_virtual:1343" => "HL7",
- "old:acronym_from_virtual:1630" => "UCSFEPIC",
- "old:acronym_from_virtual:2119" => "foaf",
- "old:acronym_from_virtual:3094" => "DWC-TEST",
- "old:acronym_from_virtual:3201" => "BCO",
- "old:acronym_from_virtual:1105" => "MS",
- "old:acronym_from_virtual:3199" => "UCSFICD910CM",
- "old:acronym_from_virtual:1085" => "OGMD",
- "old:acronym_from_virtual:1494" => "TMA",
- "old:acronym_from_virtual:1484" => "ICECI",
- "old:acronym_from_virtual:3259" => "InterNano",
- "old:acronym_from_virtual:1444" => "CHEMINF",
- "old:acronym_from_virtual:2048" => "ICF-d8",
- "old:acronym_from_virtual:2051" => "ICF-d840-d859",
- "old:acronym_from_virtual:3226" => "SBOL",
- "old:acronym_from_virtual:2063" => "UCare_Demographics",
- "old:acronym_from_virtual:1134" => "BT",
- "old:acronym_from_virtual:1430" => "AI-RHEUM",
- "old:acronym_from_virtual:1528" => "HUGO",
- "old:acronym_from_virtual:3025" => "CTX",
- "old:acronym_from_virtual:1131" => "MO",
- "old:acronym_from_virtual:1404" => "UBERON",
- "old:acronym_from_virtual:3194" => "PHENOSCAPE-EXT",
- "old:acronym_from_virtual:1526" => "CRISP",
- "old:acronym_from_virtual:2116" => "dcterms",
- "old:acronym_from_virtual:3233" => "CHD",
- "old:acronym_from_virtual:2058" => "SNOMEDCT-MAS",
- "old:acronym_from_virtual:3270" => "suicideo",
- "old:acronym_from_virtual:1037" => "PTO",
- "old:acronym_from_virtual:3269" => "BICSO",
- "old:acronym_from_virtual:1110" => "TAO",
- "old:acronym_from_virtual:1011" => "IEV",
- "old:acronym_from_virtual:1341" => "COSTART",
- "old:acronym_from_virtual:2019" => "SNOMEDCT-TF",
- "old:acronym_from_virtual:3043" => "MEDABBS",
- "old:acronym_from_virtual:2091" => "NDF-RT",
- "old:acronym_from_virtual:1583" => "CMO",
- "old:acronym_from_virtual:1539" => "NIGO",
- "old:acronym_from_virtual:3016" => "ERO",
- "old:acronym_from_virtual:2031" => "iceci-details_for_mechanism",
- "old:acronym_from_virtual:1507" => "CCO",
- "old:acronym_from_virtual:1076" => "OCRE",
- "old:acronym_from_virtual:1078" => "BSPO",
- "old:acronym_from_virtual:3218" => "TRON",
- "old:acronym_from_virtual:1135" => "pseudo",
- "old:acronym_from_virtual:1544" => "CO",
- "old:acronym_from_virtual:3246" => "ONL-MSA",
- "old:acronym_from_virtual:2017" => "BRO-Chinese",
- "old:acronym_from_virtual:1439" => "GFO",
- "old:acronym_from_virtual:1015" => "FB-BT",
- "old:acronym_from_virtual:1041" => "PSIMOD",
- "old:acronym_from_virtual:3232" => "SNMI",
- "old:acronym_from_virtual:1064" => "FB-SP",
- "old:acronym_from_virtual:1655" => "PHARMGKB",
- "old:acronym_from_virtual:2111" => "documentStatus",
- "old:acronym_from_virtual:1014" => "FIX",
- "old:acronym_from_virtual:1521" => "NEUMORE",
- "old:acronym_from_virtual:3181" => "ONTOPNEUMO",
- "old:acronym_from_virtual:2040" => "SNOMEDCT-CORE",
- "old:acronym_from_virtual:1632" => "WSIO",
- "old:acronym_from_virtual:2127" => "NIAID-GSC-BRC",
- "old:acronym_from_virtual:1639" => "EPILONT",
- "old:acronym_from_virtual:3205" => "ICD0",
- "old:acronym_from_virtual:3236" => "VTO",
- "old:acronym_from_virtual:2047" => "ICF-d7",
- "old:acronym_from_virtual:1489" => "OAE",
- "old:acronym_from_virtual:2115" => "dcelements",
- "old:acronym_from_virtual:1588" => "ONTODT",
- "old:acronym_from_virtual:3242" => "NHSQI",
- "old:acronym_from_virtual:3197" => "HIMC-CPT",
- "old:acronym_from_virtual:1027" => "MFO",
- "old:acronym_from_virtual:1311" => "IDOMAL",
- "old:acronym_from_virtual:3224" => "UCSFI9I10CMPCS",
- "old:acronym_from_virtual:1149" => "DERMLEX",
- "old:acronym_from_virtual:1012" => "ECO",
- "old:acronym_from_virtual:2026" => "NCIt-Activity",
- "old:acronym_from_virtual:1035" => "PW",
- "old:acronym_from_virtual:1108" => "PAE",
- "old:acronym_from_virtual:2138" => "Radlex3.9.1",
- "old:acronym_from_virtual:2136" => "DILIo",
- "old:acronym_from_virtual:1572" => "TM-SIGNS-AND-SYMPTS",
- "old:acronym_from_virtual:3230" => "EPSO",
- "old:acronym_from_virtual:1510" => "CPTH",
- "old:acronym_from_virtual:2052" => "ICF-d860-d879",
- "old:acronym_from_virtual:1107" => "PATO",
- "old:acronym_from_virtual:1005" => "BTO",
- "old:acronym_from_virtual:1580" => "AERO",
- "old:acronym_from_virtual:3159" => "VARIO",
- "old:acronym_from_virtual:2062" => "HOM-UCSF_UCareDispostion",
- "old:acronym_from_virtual:1574" => "VHOG",
- "old:acronym_from_virtual:1031" => "MPATH",
- "old:acronym_from_virtual:1529" => "HCPCS",
- "old:acronym_from_virtual:3058" => "DWC",
- "old:acronym_from_virtual:1569" => "HPIO",
- "old:acronym_from_virtual:2100" => "HSDB_OCRe",
- "old:acronym_from_virtual:1491" => "IMGT-ONTOLOGY",
- "old:acronym_from_virtual:2125" => "HCPCS-mod",
- "old:acronym_from_virtual:3120" => "PCO",
- "old:acronym_from_virtual:1019" => "FAO",
- "old:acronym_from_virtual:2043" => "ICF-d3",
- "old:acronym_from_virtual:2049" => "ICF-d9",
- "old:acronym_from_virtual:3139" => "MIRNAO",
- "old:acronym_from_virtual:1352" => "NDFRT",
- "old:acronym_from_virtual:1044" => "SEP",
- "old:acronym_from_virtual:1130" => "ACGT-MO",
- "old:acronym_from_virtual:3214" => "OGSF",
- "old:acronym_from_virtual:3179" => "GENE-CDS",
- "old:acronym_from_virtual:1425" => "ICD10PCS",
- "old:acronym_from_virtual:1090" => "AAO",
- "old:acronym_from_virtual:1030" => "TGMA",
- "old:acronym_from_virtual:1007" => "CHEBI",
- "old:acronym_from_virtual:1087" => "OGR",
- "old:acronym_from_virtual:3019" => "RH-MESH",
- "old:acronym_from_virtual:2037" => "iceci-substance_use",
- "old:acronym_from_virtual:3137" => "ONSTR",
- "old:acronym_from_virtual:3216" => "BAO-GPCR",
- "old:acronym_from_virtual:2064" => "LOINC",
- "old:acronym_from_virtual:3198" => "SEMPHYSKB-HUMAN",
- "old:acronym_from_virtual:1586" => "OntoOrpha",
- "old:acronym_from_virtual:3192" => "MCCV",
- "old:acronym_from_virtual:2104" => "MDRFRE",
- "old:acronym_from_virtual:3078" => "PHENX",
- "old:acronym_from_virtual:3020" => "CPO",
- "old:acronym_from_virtual:1148" => "BP-METADATA",
- "old:acronym_from_virtual:1021" => "EHDAA",
- "old:acronym_from_virtual:3221" => "DERMO",
- "old:acronym_from_virtual:3012" => "NONRCTO",
- "old:acronym_from_virtual:1222" => "APO",
- "old:acronym_from_virtual:1126" => "FHHO",
- "old:acronym_from_virtual:1552" => "REPO",
- "old:acronym_from_virtual:2066" => "RXNORM",
- "old:acronym_from_virtual:3200" => "ZIP5",
- "old:acronym_from_virtual:3249" => "ONL-DP",
- "old:acronym_from_virtual:3190" => "PATHLEX",
- "old:acronym_from_virtual:1672" => "DIKB",
- "old:acronym_from_virtual:3210" => "TRAK",
- "old:acronym_from_virtual:3266" => "OBI_BCGO",
- "old:acronym_from_virtual:3244" => "SEDI",
- "old:acronym_from_virtual:1369" => "PHYFIELD",
- "old:acronym_from_virtual:3189" => "TOP-MENELAS",
- "old:acronym_from_virtual:2106" => "ICF-NoCodeLabel",
- "old:acronym_from_virtual:2112" => "geopolitical",
- "old:acronym_from_virtual:2121" => "skos",
- "old:acronym_from_virtual:1257" => "MEGO",
- "old:acronym_from_virtual:1397" => "GAZ",
- "old:acronym_from_virtual:3062" => "I2B2-PATVISDIM",
- "old:acronym_from_virtual:1568" => "AEO",
- "old:acronym_from_virtual:2022" => "BRO-Resource",
- "old:acronym_from_virtual:1650" => "UNITSONT",
- "old:acronym_from_virtual:3119" => "OBIWS",
- "old:acronym_from_virtual:1578" => "ELIXHAUSER",
- "old:acronym_from_virtual:1082" => "GRO",
- "old:acronym_from_virtual:1490" => "PLATSTG",
- "old:acronym_from_virtual:2006" => "FMA-SUBSET",
- "old:acronym_from_virtual:1122" => "SPO",
- "old:acronym_from_virtual:1504" => "CPT",
- "old:acronym_from_virtual:1128" => "CDAO",
- "old:acronym_from_virtual:1533" => "BAO",
- "old:acronym_from_virtual:3237" => "VBCV",
- "old:acronym_from_virtual:3209" => "OPE",
- "old:acronym_from_virtual:1000" => "MA",
- "old:acronym_from_virtual:2015" => "SOFA",
- "old:acronym_from_virtual:2000" => "BRO-Core",
- "old:acronym_from_virtual:1416" => "SCTSPA",
- "old:acronym_from_virtual:2073" => "ECGF",
- "old:acronym_from_virtual:2021" => "SNOMEDCT-ORG",
- "old:acronym_from_virtual:1506" => "GO-EXT",
- "old:acronym_from_virtual:1401" => "ICNP",
- "old:acronym_from_virtual:2059" => "HOM-ICD9",
- "old:acronym_from_virtual:1696" => "SYN",
- "old:acronym_from_virtual:1058" => "SNPO",
- "old:acronym_from_virtual:3195" => "ICD09",
- "old:acronym_from_virtual:2027" => "3.0_OWL",
- "old:acronym_from_virtual:1582" => "CAO",
- "old:acronym_from_virtual:1048" => "WB-BT",
- "old:acronym_from_virtual:1415" => "CTCAE",
- "old:acronym_from_virtual:1523" => "OBOE-SBC",
- "old:acronym_from_virtual:3185" => "GPI",
- "old:acronym_from_virtual:2004" => "NeuroFMA",
- "old:acronym_from_virtual:1022" => "EHDA",
- "old:acronym_from_virtual:1419" => "TAXRANK",
- "old:acronym_from_virtual:2024" => "RadLex_OWL",
- "old:acronym_from_virtual:2139" => "PROV",
- "old:acronym_from_virtual:3274" => "MSV",
- "old:acronym_from_virtual:1509" => "ICPS",
- "old:acronym_from_virtual:1626" => "EMO",
- "old:acronym_from_virtual:1036" => "PECO",
- "old:acronym_from_virtual:1614" => "IXNO",
- "old:acronym_from_virtual:3030" => "CANCO",
- "old:acronym_from_virtual:2118" => "FaBiO",
- "old:acronym_from_virtual:1487" => "ICD11-BODYSYSTEM",
- "old:acronym_from_virtual:1665" => "SHR",
- "old:acronym_from_virtual:1084" => "NIFSTD",
- "old:acronym_from_virtual:2057" => "SNOMED-Ethnic-Group",
- "old:acronym_from_virtual:1141" => "OPB",
- "old:acronym_from_virtual:3227" => "OVAE",
- "old:acronym_from_virtual:1029" => "IMR",
- "old:acronym_from_virtual:1353" => "SNOMEDCT",
- "old:acronym_from_virtual:2102" => "WHOFRE",
- "old:acronym_from_virtual:1132" => "NCBITAXON",
- "old:acronym_from_virtual:2028" => "iceci-activity",
- "old:acronym_from_virtual:1538" => "ROLEO",
- "old:acronym_from_virtual:2044" => "ICF-d4",
- "old:acronym_from_virtual:1088" => "MHC",
- "old:acronym_from_virtual:3167" => "GLOB",
- "old:acronym_from_virtual:2081" => "H2_HIPClassicRegions",
- "old:acronym_from_virtual:3147" => "CLIN-EVAL",
- "old:acronym_from_virtual:3006" => "OOEVV",
- "old:acronym_from_virtual:3180" => "MEDO",
- "old:acronym_from_virtual:1505" => "OMIT",
- "old:acronym_from_virtual:1553" => "ICD10CM",
- "old:acronym_from_virtual:2107" => "BIOA3v",
- "old:acronym_from_virtual:3046" => "MDCDRG",
- "old:acronym_from_virtual:1633" => "COGAT",
- "old:acronym_from_virtual:1659" => "VT",
- "old:acronym_from_virtual:1040" => "PPIO",
- "old:acronym_from_virtual:3129" => "CONSENT-ONT",
- "old:acronym_from_virtual:1008" => "DDANAT",
- "old:acronym_from_virtual:1020" => "HC",
- "old:acronym_from_virtual:1150" => "RS"
-}
\ No newline at end of file
+ 'old:acronym_from_virtual:3013' => 'DIAGONT',
+ 'old:acronym_from_virtual:3245' => 'SuicidO',
+ 'old:acronym_from_virtual:1247' => 'GEOSPECIES',
+ 'old:acronym_from_virtual:1054' => 'AMINO-ACID',
+ 'old:acronym_from_virtual:2012' => 'goslim_pir',
+ 'old:acronym_from_virtual:3015' => 'PMR',
+ 'old:acronym_from_virtual:3212' => 'GLYCOPROT',
+ 'old:acronym_from_virtual:3271' => 'BSAO',
+ 'old:acronym_from_virtual:2099' => 'GWAS_EFO_SKOS',
+ 'old:acronym_from_virtual:1062' => 'PR',
+ 'old:acronym_from_virtual:3004' => 'NATPRO',
+ 'old:acronym_from_virtual:1584' => 'MMO',
+ 'old:acronym_from_virtual:1046' => 'SBO',
+ 'old:acronym_from_virtual:1545' => 'CO-WHEAT',
+ 'old:acronym_from_virtual:1016' => 'FB-DV',
+ 'old:acronym_from_virtual:1059' => 'CPRO',
+ 'old:acronym_from_virtual:3238' => 'PDO',
+ 'old:acronym_from_virtual:1576' => 'FDA-MEDDEVICE',
+ 'old:acronym_from_virtual:1114' => 'BILA',
+ 'old:acronym_from_virtual:1055' => 'GALEN',
+ 'old:acronym_from_virtual:1158' => 'CBO',
+ 'old:acronym_from_virtual:3151' => 'GEXO',
+ 'old:acronym_from_virtual:2109' => 'ooevv-vaccine',
+ 'old:acronym_from_virtual:1488' => 'JERM',
+ 'old:acronym_from_virtual:3234' => 'BOF',
+ 'old:acronym_from_virtual:3047' => 'DEMOGRAPH',
+ 'old:acronym_from_virtual:1613' => 'BDO',
+ 'old:acronym_from_virtual:1142' => 'EP',
+ 'old:acronym_from_virtual:3127' => 'IMMDIS',
+ 'old:acronym_from_virtual:1461' => 'TMO',
+ 'old:acronym_from_virtual:3146' => 'CMS',
+ 'old:acronym_from_virtual:1125' => 'HP',
+ 'old:acronym_from_virtual:2033' => 'iceci-instrument_object_substance',
+ 'old:acronym_from_virtual:1033' => 'NMR',
+ 'old:acronym_from_virtual:1666' => 'MFOEM',
+ 'old:acronym_from_virtual:1615' => 'CHEMBIO',
+ 'old:acronym_from_virtual:3184' => 'ZIP3',
+ 'old:acronym_from_virtual:3150' => 'BRIDG',
+ 'old:acronym_from_virtual:2054' => 'NCBI_NMOsp_1_0_0',
+ 'old:acronym_from_virtual:1370' => 'ATO',
+ 'old:acronym_from_virtual:3268' => 'ERNO',
+ 'old:acronym_from_virtual:3261' => 'STNFRDRXDEMO',
+ 'old:acronym_from_virtual:2032' => 'iceci-details_for_place_of_occurrence',
+ 'old:acronym_from_virtual:1402' => 'NIFCELL',
+ 'old:acronym_from_virtual:1427' => 'RCD',
+ 'old:acronym_from_virtual:1565' => 'OMRSE',
+ 'old:acronym_from_virtual:1517' => 'EHDAA2',
+ 'old:acronym_from_virtual:1347' => 'MEDLINEPLUS',
+ 'old:acronym_from_virtual:3243' => 'NHSQI2009',
+ 'old:acronym_from_virtual:1640' => 'PEDTERM',
+ 'old:acronym_from_virtual:1354' => 'WHO-ART',
+ 'old:acronym_from_virtual:1095' => 'XAO',
+ 'old:acronym_from_virtual:1661' => 'UCSFXPLANT',
+ 'old:acronym_from_virtual:3174' => 'IDODEN',
+ 'old:acronym_from_virtual:1146' => 'ECG',
+ 'old:acronym_from_virtual:1065' => 'TADS',
+ 'old:acronym_from_virtual:3028' => 'SOY',
+ 'old:acronym_from_virtual:1100' => 'OGI',
+ 'old:acronym_from_virtual:2086' => 'SMD_NPLSM_BRST',
+ 'old:acronym_from_virtual:1136' => 'EFO',
+ 'old:acronym_from_virtual:1050' => 'ZEA',
+ 'old:acronym_from_virtual:3124' => 'VSO',
+ 'old:acronym_from_virtual:2085' => 'SMD_NPLSM',
+ 'old:acronym_from_virtual:1047' => 'GRO-CPD',
+ 'old:acronym_from_virtual:1540' => 'DDI',
+ 'old:acronym_from_virtual:2007' => 'goslim_generic_1_770',
+ 'old:acronym_from_virtual:3155' => 'ONTOKBCF',
+ 'old:acronym_from_virtual:2045' => 'ICF-d5',
+ 'old:acronym_from_virtual:1350' => 'LOINC',
+ 'old:acronym_from_virtual:1099' => 'ATMO',
+ 'old:acronym_from_virtual:3231' => 'GLYCANONT',
+ 'old:acronym_from_virtual:3131' => 'PROVO',
+ 'old:acronym_from_virtual:1123' => 'OBI',
+ 'old:acronym_from_virtual:2035' => 'iceci-mechanism',
+ 'old:acronym_from_virtual:1420' => 'MSHSPA_1',
+ 'old:acronym_from_virtual:1304' => 'BCGO',
+ 'old:acronym_from_virtual:1042' => 'OBOREL',
+ 'old:acronym_from_virtual:1049' => 'WB-LS',
+ 'old:acronym_from_virtual:1328' => 'HOM',
+ 'old:acronym_from_virtual:1575' => 'EXO',
+ 'old:acronym_from_virtual:3077' => 'ONTODM-KDD',
+ 'old:acronym_from_virtual:2108' => 'ooevv-tractTrace',
+ 'old:acronym_from_virtual:3191' => 'MPO',
+ 'old:acronym_from_virtual:1349' => 'PDQ',
+ 'old:acronym_from_virtual:3239' => 'CSSO',
+ 'old:acronym_from_virtual:2038' => 'iceci-details_for_activity',
+ 'old:acronym_from_virtual:1522' => 'BP',
+ 'old:acronym_from_virtual:1587' => 'PO',
+ 'old:acronym_from_virtual:1116' => 'BHO',
+ 'old:acronym_from_virtual:3038' => 'HOM-TEST',
+ 'old:acronym_from_virtual:1001' => 'GRO-CPGA',
+ 'old:acronym_from_virtual:2025' => 'NIF-RTH',
+ 'old:acronym_from_virtual:1537' => 'IDOBRU',
+ 'old:acronym_from_virtual:1009' => 'DOID',
+ 'old:acronym_from_virtual:3178' => 'CANONT',
+ 'old:acronym_from_virtual:2036' => 'iceci-place_of_occurrence',
+ 'old:acronym_from_virtual:1112' => 'UO',
+ 'old:acronym_from_virtual:3153' => 'NTDO',
+ 'old:acronym_from_virtual:1010' => 'EMAP',
+ 'old:acronym_from_virtual:1541' => 'MCCL',
+ 'old:acronym_from_virtual:1067' => 'WB-PHENOTYPE',
+ 'old:acronym_from_virtual:1560' => 'COGPO',
+ 'old:acronym_from_virtual:1697' => 'UCSFORTHO',
+ 'old:acronym_from_virtual:1260' => 'RID',
+ 'old:acronym_from_virtual:1091' => 'SPD',
+ 'old:acronym_from_virtual:2103' => 'ICPCFRE',
+ 'old:acronym_from_virtual:1069' => 'ENVO',
+ 'old:acronym_from_virtual:1686' => 'NEOMARK4',
+ 'old:acronym_from_virtual:1527' => 'VANDF',
+ 'old:acronym_from_virtual:1057' => 'RADLEX',
+ 'old:acronym_from_virtual:3258' => 'OBR-Scolio',
+ 'old:acronym_from_virtual:1500' => 'RNAO',
+ 'old:acronym_from_virtual:3042' => 'TEO',
+ 'old:acronym_from_virtual:2114' => 'citation',
+ 'old:acronym_from_virtual:2003' => 'BiositemapIM',
+ 'old:acronym_from_virtual:2029' => 'iceci-countermeasures',
+ 'old:acronym_from_virtual:3264' => 'WH',
+ 'old:acronym_from_virtual:1144' => 'DC-CL',
+ 'old:acronym_from_virtual:1418' => 'TOK',
+ 'old:acronym_from_virtual:1497' => 'PMA',
+ 'old:acronym_from_virtual:2093' => 'OBI_IEDB_view',
+ 'old:acronym_from_virtual:3252' => 'SSE',
+ 'old:acronym_from_virtual:1183' => 'LIPRO',
+ 'old:acronym_from_virtual:1423' => 'RXNORM',
+ 'old:acronym_from_virtual:1026' => 'MAO',
+ 'old:acronym_from_virtual:1555' => 'VSAO',
+ 'old:acronym_from_virtual:3031' => 'QUDT',
+ 'old:acronym_from_virtual:3223' => 'GCO',
+ 'old:acronym_from_virtual:1172' => 'VO',
+ 'old:acronym_from_virtual:1068' => 'SAO',
+ 'old:acronym_from_virtual:1410' => 'KISAO',
+ 'old:acronym_from_virtual:1520' => 'LSM',
+ 'old:acronym_from_virtual:2050' => 'ICF-d810-d839',
+ 'old:acronym_from_virtual:3021' => 'ATC',
+ 'old:acronym_from_virtual:1063' => 'CARO',
+ 'old:acronym_from_virtual:1530' => 'ADW',
+ 'old:acronym_from_virtual:2120' => 'provenance',
+ 'old:acronym_from_virtual:3017' => 'GCC',
+ 'old:acronym_from_virtual:2056' => 'NCBI_NMOsp_1_2_2',
+ 'old:acronym_from_virtual:3206' => 'HCPCS-HIMC',
+ 'old:acronym_from_virtual:1104' => 'BRO',
+ 'old:acronym_from_virtual:1092' => 'IDO',
+ 'old:acronym_from_virtual:1413' => 'SWO',
+ 'old:acronym_from_virtual:3032' => 'EPICMEDS',
+ 'old:acronym_from_virtual:1456' => 'MSHFRE',
+ 'old:acronym_from_virtual:1077' => 'MIRO',
+ 'old:acronym_from_virtual:1051' => 'ZFA',
+ 'old:acronym_from_virtual:2055' => 'NCBI_NMOsp_1_2_1',
+ 'old:acronym_from_virtual:3090' => 'ONTOMA',
+ 'old:acronym_from_virtual:3104' => 'USSOC',
+ 'old:acronym_from_virtual:1573' => 'TM-MER',
+ 'old:acronym_from_virtual:3092' => 'CLINIC',
+ 'old:acronym_from_virtual:1616' => 'PHYLONT',
+ 'old:acronym_from_virtual:2023' => 'NCBITaxonOWL',
+ 'old:acronym_from_virtual:1656' => 'PHENOMEBLAST',
+ 'old:acronym_from_virtual:3219' => 'MSTDE',
+ 'old:acronym_from_virtual:1025' => 'MP',
+ 'old:acronym_from_virtual:1670' => 'ICDO3',
+ 'old:acronym_from_virtual:1089' => 'BIRNLEX',
+ 'old:acronym_from_virtual:3215' => 'MIXS',
+ 'old:acronym_from_virtual:1532' => 'SIO',
+ 'old:acronym_from_virtual:2105' => 'SNMD_BDY',
+ 'old:acronym_from_virtual:3022' => 'BIOMODELS',
+ 'old:acronym_from_virtual:2053' => 'ICF-d840-d859%2Fd860-d879',
+ 'old:acronym_from_virtual:3262' => 'BCTEO',
+ 'old:acronym_from_virtual:1168' => 'Amino_Acid-zh_CN',
+ 'old:acronym_from_virtual:1550' => 'PHARE',
+ 'old:acronym_from_virtual:1398' => 'LDA',
+ 'old:acronym_from_virtual:1428' => 'NIC',
+ 'old:acronym_from_virtual:1567' => 'PVONTO',
+ 'old:acronym_from_virtual:3211' => 'TEST-PROD',
+ 'old:acronym_from_virtual:2124' => 'ICD9CM-PROC',
+ 'old:acronym_from_virtual:3255' => 'CHMO',
+ 'old:acronym_from_virtual:3204' => 'PORO',
+ 'old:acronym_from_virtual:1043' => 'REX',
+ 'old:acronym_from_virtual:1689' => 'FYPO',
+ 'old:acronym_from_virtual:3008' => 'CARELEX',
+ 'old:acronym_from_virtual:1570' => 'TM-CONST',
+ 'old:acronym_from_virtual:2070' => 'obi-fged',
+ 'old:acronym_from_virtual:2002' => 'BRO-AreaOfResearch',
+ 'old:acronym_from_virtual:2020' => 'SNOMEDCT-ANAT',
+ 'old:acronym_from_virtual:2092' => 'envo_153',
+ 'old:acronym_from_virtual:3045' => 'ICD9CM-KM',
+ 'old:acronym_from_virtual:3108' => 'CCONT',
+ 'old:acronym_from_virtual:1438' => 'MCBCC',
+ 'old:acronym_from_virtual:1348' => 'OMIM',
+ 'old:acronym_from_virtual:1515' => 'INO',
+ 'old:acronym_from_virtual:3176' => 'XEO',
+ 'old:acronym_from_virtual:2009' => 'goslim_plant',
+ 'old:acronym_from_virtual:2078' => 'H1_NMOABA',
+ 'old:acronym_from_virtual:3183' => 'IFAR',
+ 'old:acronym_from_virtual:2046' => 'ICF-d6',
+ 'old:acronym_from_virtual:3186' => 'I2B2-LOINC',
+ 'old:acronym_from_virtual:3265' => 'BNO',
+ 'old:acronym_from_virtual:2110' => 'DTVPrecision',
+ 'old:acronym_from_virtual:1581' => 'HLTHINDCTRS',
+ 'old:acronym_from_virtual:3220' => 'MSTDE-FRE',
+ 'old:acronym_from_virtual:3009' => 'MEO',
+ 'old:acronym_from_virtual:1694' => 'CPT-KM',
+ 'old:acronym_from_virtual:1052' => 'PRO-ONT',
+ 'old:acronym_from_virtual:1290' => 'ABA-AMB',
+ 'old:acronym_from_virtual:3000' => 'MIXSCV',
+ 'old:acronym_from_virtual:1038' => 'PSDS',
+ 'old:acronym_from_virtual:1023' => 'FBbi',
+ 'old:acronym_from_virtual:1060' => 'CTONT',
+ 'old:acronym_from_virtual:1249' => 'SBRO',
+ 'old:acronym_from_virtual:1152' => 'MAT',
+ 'old:acronym_from_virtual:2101' => 'test1',
+ 'old:acronym_from_virtual:1083' => 'NPO',
+ 'old:acronym_from_virtual:1013' => 'EVOC',
+ 'old:acronym_from_virtual:1407' => 'TEDDY',
+ 'old:acronym_from_virtual:2113' => 'bibliographic',
+ 'old:acronym_from_virtual:2030' => 'iceci-descriptor_for_intent',
+ 'old:acronym_from_virtual:2084' => 'OGMD_OWL',
+ 'old:acronym_from_virtual:1053' => 'FMA',
+ 'old:acronym_from_virtual:1422' => 'MEDDRA',
+ 'old:acronym_from_virtual:2010' => 'goslim_candida',
+ 'old:acronym_from_virtual:3273' => 'HRDO',
+ 'old:acronym_from_virtual:3152' => 'REXO',
+ 'old:acronym_from_virtual:3222' => 'RSA',
+ 'old:acronym_from_virtual:3207' => 'ATOL',
+ 'old:acronym_from_virtual:1498' => 'EDAM',
+ 'old:acronym_from_virtual:1109' => 'SO',
+ 'old:acronym_from_virtual:1224' => 'SYMP',
+ 'old:acronym_from_virtual:3253' => 'OntoVIP',
+ 'old:acronym_from_virtual:1237' => 'SITBAC',
+ 'old:acronym_from_virtual:2042' => 'ICF-d2',
+ 'old:acronym_from_virtual:3263' => 'OntoBioUSP',
+ 'old:acronym_from_virtual:1649' => 'OSHPD',
+ 'old:acronym_from_virtual:3247' => 'EDDA',
+ 'old:acronym_from_virtual:1671' => 'QIBO',
+ 'old:acronym_from_virtual:1585' => 'XCO',
+ 'old:acronym_from_virtual:1006' => 'CL',
+ 'old:acronym_from_virtual:1424' => 'NDDF',
+ 'old:acronym_from_virtual:3114' => 'RPO',
+ 'old:acronym_from_virtual:1426' => 'MDDB',
+ 'old:acronym_from_virtual:3169' => 'GLYCO',
+ 'old:acronym_from_virtual:2065' => 'obi-device',
+ 'old:acronym_from_virtual:1192' => 'CPTAC',
+ 'old:acronym_from_virtual:1032' => 'NCIT',
+ 'old:acronym_from_virtual:2067' => 'RCJI',
+ 'old:acronym_from_virtual:1017' => 'FB-CV',
+ 'old:acronym_from_virtual:2014' => 'goslim_yeast',
+ 'old:acronym_from_virtual:3251' => 'ADO',
+ 'old:acronym_from_virtual:1081' => 'TTO',
+ 'old:acronym_from_virtual:3162' => 'RETO',
+ 'old:acronym_from_virtual:1362' => 'HAO',
+ 'old:acronym_from_virtual:3240' => 'RNPRIO',
+ 'old:acronym_from_virtual:3272' => 'CARD',
+ 'old:acronym_from_virtual:3217' => 'CABRO',
+ 'old:acronym_from_virtual:2069' => 'H1_NMOABA_1_0',
+ 'old:acronym_from_virtual:3208' => 'IDQA',
+ 'old:acronym_from_virtual:3228' => 'ELIG',
+ 'old:acronym_from_virtual:1651' => 'SDO',
+ 'old:acronym_from_virtual:3126' => 'NIFSUBCELL',
+ 'old:acronym_from_virtual:3157' => 'GENETRIAL',
+ 'old:acronym_from_virtual:1070' => 'GO',
+ 'old:acronym_from_virtual:2088' => 'SNMD_BC',
+ 'old:acronym_from_virtual:1414' => 'OGMS',
+ 'old:acronym_from_virtual:1516' => 'ICD10',
+ 'old:acronym_from_virtual:1429' => 'ICPC2P',
+ 'old:acronym_from_virtual:3241' => 'UDEF',
+ 'old:acronym_from_virtual:2034' => 'iceci-intent',
+ 'old:acronym_from_virtual:2074' => 'H1_NMOABA_2_0',
+ 'old:acronym_from_virtual:1024' => 'LHN',
+ 'old:acronym_from_virtual:3003' => 'CNO',
+ 'old:acronym_from_virtual:2083' => 'H1_NMOABA_4_1',
+ 'old:acronym_from_virtual:1039' => 'PROPREO',
+ 'old:acronym_from_virtual:1638' => 'ONTODM-CORE',
+ 'old:acronym_from_virtual:2008' => 'goslim_goa',
+ 'old:acronym_from_virtual:3250' => 'ONL-MR-DA',
+ 'old:acronym_from_virtual:3136' => 'NHDS',
+ 'old:acronym_from_virtual:1393' => 'IAO',
+ 'old:acronym_from_virtual:1332' => 'BFO',
+ 'old:acronym_from_virtual:3203' => 'HINO',
+ 'old:acronym_from_virtual:2122' => 'SciRes',
+ 'old:acronym_from_virtual:2013' => 'goslim_pombe',
+ 'old:acronym_from_virtual:1627' => 'HOMERUN',
+ 'old:acronym_from_virtual:2117' => 'event',
+ 'old:acronym_from_virtual:1190' => 'OPL',
+ 'old:acronym_from_virtual:3002' => 'MF',
+ 'old:acronym_from_virtual:1417' => 'FLU',
+ 'old:acronym_from_virtual:1314' => 'CLO',
+ 'old:acronym_from_virtual:1101' => 'ICD9CM',
+ 'old:acronym_from_virtual:3029' => 'SPTO',
+ 'old:acronym_from_virtual:1381' => 'NIFDYS',
+ 'old:acronym_from_virtual:1440' => 'GFO-BIO',
+ 'old:acronym_from_virtual:1344' => 'ICPC',
+ 'old:acronym_from_virtual:1351' => 'MESH',
+ 'old:acronym_from_virtual:1094' => 'PTRANS',
+ 'old:acronym_from_virtual:1115' => 'YPO',
+ 'old:acronym_from_virtual:2126' => 'CPT-mod',
+ 'old:acronym_from_virtual:1621' => 'NBO',
+ 'old:acronym_from_virtual:3007' => 'UCSFICU',
+ 'old:acronym_from_virtual:2041' => 'ICF-d1',
+ 'old:acronym_from_virtual:2080' => 'H1_NMOABA_4_0',
+ 'old:acronym_from_virtual:1501' => 'NEOMARK3',
+ 'old:acronym_from_virtual:3158' => 'SWEET',
+ 'old:acronym_from_virtual:1335' => 'PEO',
+ 'old:acronym_from_virtual:1571' => 'TM-OTHER-FACTORS',
+ 'old:acronym_from_virtual:1061' => 'SOPHARM',
+ 'old:acronym_from_virtual:1411' => 'ICF',
+ 'old:acronym_from_virtual:1394' => 'SSO',
+ 'old:acronym_from_virtual:2018' => 'SNOMEDCT-CF',
+ 'old:acronym_from_virtual:1676' => 'RCTONT',
+ 'old:acronym_from_virtual:1086' => 'OGDI',
+ 'old:acronym_from_virtual:1699' => 'VIVO',
+ 'old:acronym_from_virtual:2079' => 'ECGT',
+ 'old:acronym_from_virtual:2082' => 'H3_HIPSeptotemporalAxis',
+ 'old:acronym_from_virtual:1321' => 'NEMO',
+ 'old:acronym_from_virtual:3267' => 'DCO',
+ 'old:acronym_from_virtual:2001' => 'BRO-Activity',
+ 'old:acronym_from_virtual:2072' => 'NCBI_NMOsp_1_4_0',
+ 'old:acronym_from_virtual:1343' => 'HL7',
+ 'old:acronym_from_virtual:1630' => 'UCSFEPIC',
+ 'old:acronym_from_virtual:2119' => 'foaf',
+ 'old:acronym_from_virtual:3094' => 'DWC-TEST',
+ 'old:acronym_from_virtual:3201' => 'BCO',
+ 'old:acronym_from_virtual:1105' => 'MS',
+ 'old:acronym_from_virtual:3199' => 'UCSFICD910CM',
+ 'old:acronym_from_virtual:1085' => 'OGMD',
+ 'old:acronym_from_virtual:1494' => 'TMA',
+ 'old:acronym_from_virtual:1484' => 'ICECI',
+ 'old:acronym_from_virtual:3259' => 'InterNano',
+ 'old:acronym_from_virtual:1444' => 'CHEMINF',
+ 'old:acronym_from_virtual:2048' => 'ICF-d8',
+ 'old:acronym_from_virtual:2051' => 'ICF-d840-d859',
+ 'old:acronym_from_virtual:3226' => 'SBOL',
+ 'old:acronym_from_virtual:2063' => 'UCare_Demographics',
+ 'old:acronym_from_virtual:1134' => 'BT',
+ 'old:acronym_from_virtual:1430' => 'AI-RHEUM',
+ 'old:acronym_from_virtual:1528' => 'HUGO',
+ 'old:acronym_from_virtual:3025' => 'CTX',
+ 'old:acronym_from_virtual:1131' => 'MO',
+ 'old:acronym_from_virtual:1404' => 'UBERON',
+ 'old:acronym_from_virtual:3194' => 'PHENOSCAPE-EXT',
+ 'old:acronym_from_virtual:1526' => 'CRISP',
+ 'old:acronym_from_virtual:2116' => 'dcterms',
+ 'old:acronym_from_virtual:3233' => 'CHD',
+ 'old:acronym_from_virtual:2058' => 'SNOMEDCT-MAS',
+ 'old:acronym_from_virtual:3270' => 'suicideo',
+ 'old:acronym_from_virtual:1037' => 'PTO',
+ 'old:acronym_from_virtual:3269' => 'BICSO',
+ 'old:acronym_from_virtual:1110' => 'TAO',
+ 'old:acronym_from_virtual:1011' => 'IEV',
+ 'old:acronym_from_virtual:1341' => 'COSTART',
+ 'old:acronym_from_virtual:2019' => 'SNOMEDCT-TF',
+ 'old:acronym_from_virtual:3043' => 'MEDABBS',
+ 'old:acronym_from_virtual:2091' => 'NDF-RT',
+ 'old:acronym_from_virtual:1583' => 'CMO',
+ 'old:acronym_from_virtual:1539' => 'NIGO',
+ 'old:acronym_from_virtual:3016' => 'ERO',
+ 'old:acronym_from_virtual:2031' => 'iceci-details_for_mechanism',
+ 'old:acronym_from_virtual:1507' => 'CCO',
+ 'old:acronym_from_virtual:1076' => 'OCRE',
+ 'old:acronym_from_virtual:1078' => 'BSPO',
+ 'old:acronym_from_virtual:3218' => 'TRON',
+ 'old:acronym_from_virtual:1135' => 'pseudo',
+ 'old:acronym_from_virtual:1544' => 'CO',
+ 'old:acronym_from_virtual:3246' => 'ONL-MSA',
+ 'old:acronym_from_virtual:2017' => 'BRO-Chinese',
+ 'old:acronym_from_virtual:1439' => 'GFO',
+ 'old:acronym_from_virtual:1015' => 'FB-BT',
+ 'old:acronym_from_virtual:1041' => 'PSIMOD',
+ 'old:acronym_from_virtual:3232' => 'SNMI',
+ 'old:acronym_from_virtual:1064' => 'FB-SP',
+ 'old:acronym_from_virtual:1655' => 'PHARMGKB',
+ 'old:acronym_from_virtual:2111' => 'documentStatus',
+ 'old:acronym_from_virtual:1014' => 'FIX',
+ 'old:acronym_from_virtual:1521' => 'NEUMORE',
+ 'old:acronym_from_virtual:3181' => 'ONTOPNEUMO',
+ 'old:acronym_from_virtual:2040' => 'SNOMEDCT-CORE',
+ 'old:acronym_from_virtual:1632' => 'WSIO',
+ 'old:acronym_from_virtual:2127' => 'NIAID-GSC-BRC',
+ 'old:acronym_from_virtual:1639' => 'EPILONT',
+ 'old:acronym_from_virtual:3205' => 'ICD0',
+ 'old:acronym_from_virtual:3236' => 'VTO',
+ 'old:acronym_from_virtual:2047' => 'ICF-d7',
+ 'old:acronym_from_virtual:1489' => 'OAE',
+ 'old:acronym_from_virtual:2115' => 'dcelements',
+ 'old:acronym_from_virtual:1588' => 'ONTODT',
+ 'old:acronym_from_virtual:3242' => 'NHSQI',
+ 'old:acronym_from_virtual:3197' => 'HIMC-CPT',
+ 'old:acronym_from_virtual:1027' => 'MFO',
+ 'old:acronym_from_virtual:1311' => 'IDOMAL',
+ 'old:acronym_from_virtual:3224' => 'UCSFI9I10CMPCS',
+ 'old:acronym_from_virtual:1149' => 'DERMLEX',
+ 'old:acronym_from_virtual:1012' => 'ECO',
+ 'old:acronym_from_virtual:2026' => 'NCIt-Activity',
+ 'old:acronym_from_virtual:1035' => 'PW',
+ 'old:acronym_from_virtual:1108' => 'PAE',
+ 'old:acronym_from_virtual:2138' => 'Radlex3.9.1',
+ 'old:acronym_from_virtual:2136' => 'DILIo',
+ 'old:acronym_from_virtual:1572' => 'TM-SIGNS-AND-SYMPTS',
+ 'old:acronym_from_virtual:3230' => 'EPSO',
+ 'old:acronym_from_virtual:1510' => 'CPTH',
+ 'old:acronym_from_virtual:2052' => 'ICF-d860-d879',
+ 'old:acronym_from_virtual:1107' => 'PATO',
+ 'old:acronym_from_virtual:1005' => 'BTO',
+ 'old:acronym_from_virtual:1580' => 'AERO',
+ 'old:acronym_from_virtual:3159' => 'VARIO',
+ 'old:acronym_from_virtual:2062' => 'HOM-UCSF_UCareDispostion',
+ 'old:acronym_from_virtual:1574' => 'VHOG',
+ 'old:acronym_from_virtual:1031' => 'MPATH',
+ 'old:acronym_from_virtual:1529' => 'HCPCS',
+ 'old:acronym_from_virtual:3058' => 'DWC',
+ 'old:acronym_from_virtual:1569' => 'HPIO',
+ 'old:acronym_from_virtual:2100' => 'HSDB_OCRe',
+ 'old:acronym_from_virtual:1491' => 'IMGT-ONTOLOGY',
+ 'old:acronym_from_virtual:2125' => 'HCPCS-mod',
+ 'old:acronym_from_virtual:3120' => 'PCO',
+ 'old:acronym_from_virtual:1019' => 'FAO',
+ 'old:acronym_from_virtual:2043' => 'ICF-d3',
+ 'old:acronym_from_virtual:2049' => 'ICF-d9',
+ 'old:acronym_from_virtual:3139' => 'MIRNAO',
+ 'old:acronym_from_virtual:1352' => 'NDFRT',
+ 'old:acronym_from_virtual:1044' => 'SEP',
+ 'old:acronym_from_virtual:1130' => 'ACGT-MO',
+ 'old:acronym_from_virtual:3214' => 'OGSF',
+ 'old:acronym_from_virtual:3179' => 'GENE-CDS',
+ 'old:acronym_from_virtual:1425' => 'ICD10PCS',
+ 'old:acronym_from_virtual:1090' => 'AAO',
+ 'old:acronym_from_virtual:1030' => 'TGMA',
+ 'old:acronym_from_virtual:1007' => 'CHEBI',
+ 'old:acronym_from_virtual:1087' => 'OGR',
+ 'old:acronym_from_virtual:3019' => 'RH-MESH',
+ 'old:acronym_from_virtual:2037' => 'iceci-substance_use',
+ 'old:acronym_from_virtual:3137' => 'ONSTR',
+ 'old:acronym_from_virtual:3216' => 'BAO-GPCR',
+ 'old:acronym_from_virtual:2064' => 'LOINC',
+ 'old:acronym_from_virtual:3198' => 'SEMPHYSKB-HUMAN',
+ 'old:acronym_from_virtual:1586' => 'OntoOrpha',
+ 'old:acronym_from_virtual:3192' => 'MCCV',
+ 'old:acronym_from_virtual:2104' => 'MDRFRE',
+ 'old:acronym_from_virtual:3078' => 'PHENX',
+ 'old:acronym_from_virtual:3020' => 'CPO',
+ 'old:acronym_from_virtual:1148' => 'BP-METADATA',
+ 'old:acronym_from_virtual:1021' => 'EHDAA',
+ 'old:acronym_from_virtual:3221' => 'DERMO',
+ 'old:acronym_from_virtual:3012' => 'NONRCTO',
+ 'old:acronym_from_virtual:1222' => 'APO',
+ 'old:acronym_from_virtual:1126' => 'FHHO',
+ 'old:acronym_from_virtual:1552' => 'REPO',
+ 'old:acronym_from_virtual:2066' => 'RXNORM',
+ 'old:acronym_from_virtual:3200' => 'ZIP5',
+ 'old:acronym_from_virtual:3249' => 'ONL-DP',
+ 'old:acronym_from_virtual:3190' => 'PATHLEX',
+ 'old:acronym_from_virtual:1672' => 'DIKB',
+ 'old:acronym_from_virtual:3210' => 'TRAK',
+ 'old:acronym_from_virtual:3266' => 'OBI_BCGO',
+ 'old:acronym_from_virtual:3244' => 'SEDI',
+ 'old:acronym_from_virtual:1369' => 'PHYFIELD',
+ 'old:acronym_from_virtual:3189' => 'TOP-MENELAS',
+ 'old:acronym_from_virtual:2106' => 'ICF-NoCodeLabel',
+ 'old:acronym_from_virtual:2112' => 'geopolitical',
+ 'old:acronym_from_virtual:2121' => 'skos',
+ 'old:acronym_from_virtual:1257' => 'MEGO',
+ 'old:acronym_from_virtual:1397' => 'GAZ',
+ 'old:acronym_from_virtual:3062' => 'I2B2-PATVISDIM',
+ 'old:acronym_from_virtual:1568' => 'AEO',
+ 'old:acronym_from_virtual:2022' => 'BRO-Resource',
+ 'old:acronym_from_virtual:1650' => 'UNITSONT',
+ 'old:acronym_from_virtual:3119' => 'OBIWS',
+ 'old:acronym_from_virtual:1578' => 'ELIXHAUSER',
+ 'old:acronym_from_virtual:1082' => 'GRO',
+ 'old:acronym_from_virtual:1490' => 'PLATSTG',
+ 'old:acronym_from_virtual:2006' => 'FMA-SUBSET',
+ 'old:acronym_from_virtual:1122' => 'SPO',
+ 'old:acronym_from_virtual:1504' => 'CPT',
+ 'old:acronym_from_virtual:1128' => 'CDAO',
+ 'old:acronym_from_virtual:1533' => 'BAO',
+ 'old:acronym_from_virtual:3237' => 'VBCV',
+ 'old:acronym_from_virtual:3209' => 'OPE',
+ 'old:acronym_from_virtual:1000' => 'MA',
+ 'old:acronym_from_virtual:2015' => 'SOFA',
+ 'old:acronym_from_virtual:2000' => 'BRO-Core',
+ 'old:acronym_from_virtual:1416' => 'SCTSPA',
+ 'old:acronym_from_virtual:2073' => 'ECGF',
+ 'old:acronym_from_virtual:2021' => 'SNOMEDCT-ORG',
+ 'old:acronym_from_virtual:1506' => 'GO-EXT',
+ 'old:acronym_from_virtual:1401' => 'ICNP',
+ 'old:acronym_from_virtual:2059' => 'HOM-ICD9',
+ 'old:acronym_from_virtual:1696' => 'SYN',
+ 'old:acronym_from_virtual:1058' => 'SNPO',
+ 'old:acronym_from_virtual:3195' => 'ICD09',
+ 'old:acronym_from_virtual:2027' => '3.0_OWL',
+ 'old:acronym_from_virtual:1582' => 'CAO',
+ 'old:acronym_from_virtual:1048' => 'WB-BT',
+ 'old:acronym_from_virtual:1415' => 'CTCAE',
+ 'old:acronym_from_virtual:1523' => 'OBOE-SBC',
+ 'old:acronym_from_virtual:3185' => 'GPI',
+ 'old:acronym_from_virtual:2004' => 'NeuroFMA',
+ 'old:acronym_from_virtual:1022' => 'EHDA',
+ 'old:acronym_from_virtual:1419' => 'TAXRANK',
+ 'old:acronym_from_virtual:2024' => 'RadLex_OWL',
+ 'old:acronym_from_virtual:2139' => 'PROV',
+ 'old:acronym_from_virtual:3274' => 'MSV',
+ 'old:acronym_from_virtual:1509' => 'ICPS',
+ 'old:acronym_from_virtual:1626' => 'EMO',
+ 'old:acronym_from_virtual:1036' => 'PECO',
+ 'old:acronym_from_virtual:1614' => 'IXNO',
+ 'old:acronym_from_virtual:3030' => 'CANCO',
+ 'old:acronym_from_virtual:2118' => 'FaBiO',
+ 'old:acronym_from_virtual:1487' => 'ICD11-BODYSYSTEM',
+ 'old:acronym_from_virtual:1665' => 'SHR',
+ 'old:acronym_from_virtual:1084' => 'NIFSTD',
+ 'old:acronym_from_virtual:2057' => 'SNOMED-Ethnic-Group',
+ 'old:acronym_from_virtual:1141' => 'OPB',
+ 'old:acronym_from_virtual:3227' => 'OVAE',
+ 'old:acronym_from_virtual:1029' => 'IMR',
+ 'old:acronym_from_virtual:1353' => 'SNOMEDCT',
+ 'old:acronym_from_virtual:2102' => 'WHOFRE',
+ 'old:acronym_from_virtual:1132' => 'NCBITAXON',
+ 'old:acronym_from_virtual:2028' => 'iceci-activity',
+ 'old:acronym_from_virtual:1538' => 'ROLEO',
+ 'old:acronym_from_virtual:2044' => 'ICF-d4',
+ 'old:acronym_from_virtual:1088' => 'MHC',
+ 'old:acronym_from_virtual:3167' => 'GLOB',
+ 'old:acronym_from_virtual:2081' => 'H2_HIPClassicRegions',
+ 'old:acronym_from_virtual:3147' => 'CLIN-EVAL',
+ 'old:acronym_from_virtual:3006' => 'OOEVV',
+ 'old:acronym_from_virtual:3180' => 'MEDO',
+ 'old:acronym_from_virtual:1505' => 'OMIT',
+ 'old:acronym_from_virtual:1553' => 'ICD10CM',
+ 'old:acronym_from_virtual:2107' => 'BIOA3v',
+ 'old:acronym_from_virtual:3046' => 'MDCDRG',
+ 'old:acronym_from_virtual:1633' => 'COGAT',
+ 'old:acronym_from_virtual:1659' => 'VT',
+ 'old:acronym_from_virtual:1040' => 'PPIO',
+ 'old:acronym_from_virtual:3129' => 'CONSENT-ONT',
+ 'old:acronym_from_virtual:1008' => 'DDANAT',
+ 'old:acronym_from_virtual:1020' => 'HC',
+ 'old:acronym_from_virtual:1150' => 'RS'
+}.freeze
diff --git a/lib/resolver/virtual_from_acronym.rb b/lib/resolver/virtual_from_acronym.rb
index fed4f1607d..aeab6e520b 100644
--- a/lib/resolver/virtual_from_acronym.rb
+++ b/lib/resolver/virtual_from_acronym.rb
@@ -1,533 +1,535 @@
+# frozen_string_literal: true
+
BpidResolver::VIRTUAL_FROM_ACRONYM = {
- "JERM" => 1488,
- "OGSF" => 3214,
- "NATPRO" => 3004,
- "citation" => 2114,
- "ATC" => 3021,
- "SNMD_BC" => 2088,
- "WHO-ART" => 1354,
- "ICD9CM-PROC" => 2124,
- "OGR" => 1087,
- "BAO" => 1533,
- "ATMO" => 1099,
- "goslim_candida" => 2010,
- "CHEBI" => 1007,
- "SNPO" => 1058,
- "provenance" => 2120,
- "WHOFRE" => 2102,
- "EMAP" => 1010,
- "CPT-mod" => 2126,
- "CTONT" => 1060,
- "BICSO" => 3269,
- "NMR" => 1033,
- "NPO" => 1083,
- "NEOMARK4" => 1686,
- "BRO" => 1104,
- "TMA" => 1494,
- "GLYCANONT" => 3231,
- "ICF-d5" => 2045,
- "GLOB" => 3167,
- "SNOMED-Ethnic-Group" => 2057,
- "SBRO" => 1249,
- "YPO" => 1115,
- "PO" => 1587,
- "CPT" => 1504,
- "EXO" => 1575,
- "geopolitical" => 2112,
- "NIC" => 1428,
- "CCONT" => 3108,
- "CLIN-EVAL" => 3147,
- "MMO" => 1584,
- "AMINO-ACID" => 1054,
- "OBOREL" => 1042,
- "IDOBRU" => 1537,
- "ICF-d860-d879" => 2052,
- "BP-METADATA" => 1148,
- "QUDT" => 3031,
- "HOM-UCSF_UCareDispostion" => 2062,
- "MSTDE-FRE" => 3220,
- "SNOMEDCT-ORG" => 2021,
- "NCBI_NMOsp_1_4_0" => 2072,
- "HP" => 1125,
- "BTO" => 1005,
- "UO" => 1112,
- "SWEET" => 3158,
- "OGMD" => 1085,
- "VSAO" => 1555,
- "ICF-d6" => 2046,
- "RPO" => 3114,
- "ECO" => 1012,
- "HCPCS" => 1529,
- "MIRO" => 1077,
- "BSAO" => 3271,
- "BiositemapIM" => 2003,
- "ooevv-vaccine" => 2109,
- "COGPO" => 1560,
- "CMS" => 3146,
- "CCO" => 1507,
- "NHDS" => 3136,
- "pseudo" => 1135,
- "TGMA" => 1030,
- "RID" => 1260,
- "TM-SIGNS-AND-SYMPTS" => 1572,
- "HAO" => 1362,
- "VIVO" => 1699,
- "EPSO" => 3230,
- "OntoBioUSP" => 3263,
- "suicideo" => 3270,
- "SDO" => 1651,
- "ABA-AMB" => 1290,
- "HPIO" => 1569,
- "AAO" => 1090,
- "MCCL" => 1541,
- "HOM-TEST" => 3038,
- "HIMC-CPT" => 3197,
- "ACGT-MO" => 1130,
- "REX" => 1043,
- "TM-MER" => 1573,
- "PHENOSCAPE-EXT" => 3194,
- "IEV" => 1011,
- "EHDA" => 1022,
- "FBbi" => 1023,
- "CHEMBIO" => 1615,
- "ICD10" => 1516,
- "ROLEO" => 1538,
- "GFO" => 1439,
- "MF" => 3002,
- "IMMDIS" => 3127,
- "dcelements" => 2115,
- "ADW" => 1530,
- "BOF" => 3234,
- "iceci-countermeasures" => 2029,
- "GALEN" => 1055,
- "PAE" => 1108,
- "OBI" => 1123,
- "HOM" => 1328,
- "HOMERUN" => 1627,
- "CABRO" => 3217,
- "ICD9CM" => 1101,
- "SNOMEDCT-MAS" => 2058,
- "ICF" => 1411,
- "WH" => 3264,
- "CHMO" => 3255,
- "H1_NMOABA_1_0" => 2069,
- "BSPO" => 1078,
- "MDRFRE" => 2104,
- "ICF-NoCodeLabel" => 2106,
- "GRO" => 1082,
- "NCIT" => 1032,
- "UCSFICD910CM" => 3199,
- "ADO" => 3251,
- "BDO" => 1613,
- "NeuroFMA" => 2004,
- "MCBCC" => 1438,
- "ICD09" => 3195,
- "ICF-d840-d859%2Fd860-d879" => 2053,
- "RCTONT" => 1676,
- "ERNO" => 3268,
- "ONTODM-KDD" => 3077,
- "IXNO" => 1614,
- "ICNP" => 1401,
- "KISAO" => 1410,
- "EDDA" => 3247,
- "GFO-BIO" => 1440,
- "FaBiO" => 2118,
- "UCare_Demographics" => 2063,
- "OGMS" => 1414,
- "Radlex3.9.1" => 2138,
- "MEO" => 3009,
- "SPTO" => 3029,
- "CHEMINF" => 1444,
- "CANONT" => 3178,
- "HC" => 1020,
- "PPIO" => 1040,
- "H1_NMOABA" => 2078,
- "EHDAA" => 1021,
- "VSO" => 3124,
- "NIGO" => 1539,
- "SPO" => 1122,
- "VTO" => 3236,
- "MP" => 1025,
- "GCC" => 3017,
- "BILA" => 1114,
- "iceci-descriptor_for_intent" => 2030,
- "obi-device" => 2065,
- "CL" => 1006,
- "RH-MESH" => 3019,
- "ICD10CM" => 1553,
- "BRIDG" => 3150,
- "UCSFI9I10CMPCS" => 3224,
- "MIXS" => 3215,
- "SNOMEDCT-CF" => 2018,
- "FMA-SUBSET" => 2006,
- "PTO" => 1037,
- "CMO" => 1583,
- "FB-SP" => 1064,
- "EP" => 1142,
- "SIO" => 1532,
- "InterNano" => 3259,
- "ICF-d1" => 2041,
- "REPO" => 1552,
- "PHARE" => 1550,
- "UNITSONT" => 1650,
- "REXO" => 3152,
- "DOID" => 1009,
- "ICDO3" => 1670,
- "DIAGONT" => 3013,
- "I2B2-PATVISDIM" => 3062,
- "NCBI_NMOsp_1_2_1" => 2055,
- "MDDB" => 1426,
- "PROV" => 2139,
- "ICF-d810-d839" => 2050,
- "FLU" => 1417,
- "DC-CL" => 1144,
- "LIPRO" => 1183,
- "UCSFICU" => 3007,
- "SNOMEDCT-CORE" => 2040,
- "NCIt-Activity" => 2026,
- "CARO" => 1063,
- "CPT-KM" => 1694,
- "MFO" => 1027,
- "GRO-CPGA" => 1001,
- "RETO" => 3162,
- "PATHLEX" => 3190,
- "GEOSPECIES" => 1247,
- "OAE" => 1489,
- "EMO" => 1626,
- "MPO" => 3191,
- "OMIM" => 1348,
- "CTX" => 3025,
- "FAO" => 1019,
- "goslim_plant" => 2009,
- "NIFSTD" => 1084,
- "iceci-substance_use" => 2037,
- "BIOA3v" => 2107,
- "QIBO" => 1671,
- "iceci-details_for_activity" => 2038,
- "BCTEO" => 3262,
- "CANCO" => 3030,
- "PDQ" => 1349,
- "NDDF" => 1424,
- "VO" => 1172,
- "H1_NMOABA_4_1" => 2083,
- "iceci-intent" => 2034,
- "IAO" => 1393,
- "RS" => 1150,
- "ONL-DP" => 3249,
- "SciRes" => 2122,
- "CARD" => 3272,
- "goslim_generic_1_770" => 2007,
- "EVOC" => 1013,
- "MSHSPA_1" => 1420,
- "SNOMEDCT-TF" => 2019,
- "MAT" => 1152,
- "GRO-CPD" => 1047,
- "GLYCO" => 3169,
- "UCSFORTHO" => 1697,
- "PCO" => 3120,
- "CRISP" => 1526,
- "IDODEN" => 3174,
- "iceci-details_for_place_of_occurrence" => 2032,
- "ICD0" => 3205,
- "PVONTO" => 1567,
- "GEXO" => 3151,
- "DIKB" => 1672,
- "FB-CV" => 1017,
- "SBO" => 1046,
- "PEO" => 1335,
- "Amino_Acid-zh_CN" => 1168,
- "RNAO" => 1500,
- "PHYLONT" => 1616,
- "GO-EXT" => 1506,
- "ICF-d9" => 2049,
- "ONL-MSA" => 3246,
- "NIFSUBCELL" => 3126,
- "PR" => 1062,
- "CAO" => 1582,
- "VBCV" => 3237,
- "ICD9CM-KM" => 3045,
- "FIX" => 1014,
- "ICECI" => 1484,
- "NEUMORE" => 1521,
- "WSIO" => 1632,
- "goslim_goa" => 2008,
- "ICF-d3" => 2043,
- "MDCDRG" => 3046,
- "DWC-TEST" => 3094,
- "BT" => 1134,
- "H3_HIPSeptotemporalAxis" => 2082,
- "MSV" => 3274,
- "DILIo" => 2136,
- "ICF-d840-d859" => 2051,
- "MCCV" => 3192,
- "HL7" => 1343,
- "XCO" => 1585,
- "ICF-d7" => 2047,
- "ZIP5" => 3200,
- "SSO" => 1394,
- "RXNORM" => 2066,
- "DERMO" => 3221,
- "obi-fged" => 2070,
- "RadLex_OWL" => 2024,
- "H1_NMOABA_2_0" => 2074,
- "MEDDRA" => 1422,
- "BRO-Resource" => 2022,
- "TMO" => 1461,
- "LHN" => 1024,
- "PROPREO" => 1039,
- "CO-WHEAT" => 1545,
- "CARELEX" => 3008,
- "NDFRT" => 1352,
- "iceci-instrument_object_substance" => 2033,
- "PRO-ONT" => 1052,
- "TADS" => 1065,
- "HLTHINDCTRS" => 1581,
- "WB-PHENOTYPE" => 1067,
- "OGDI" => 1086,
- "TEO" => 3042,
- "PHYFIELD" => 1369,
- "NEMO" => 1321,
- "CBO" => 1158,
- "CPO" => 3020,
- "SNOMEDCT" => 1353,
- "DWC" => 3058,
- "foaf" => 2119,
- "LDA" => 1398,
- "HUGO" => 1528,
- "AI-RHEUM" => 1430,
- "MHC" => 1088,
- "XAO" => 1095,
- "UDEF" => 3241,
- "ICF-d8" => 2048,
- "H1_NMOABA_4_0" => 2080,
- "test1" => 2101,
- "TM-CONST" => 1570,
- "FB-DV" => 1016,
- "PORO" => 3204,
- "TTO" => 1081,
- "ECGF" => 2073,
- "EHDAA2" => 1517,
- "BCGO" => 1304,
- "DERMLEX" => 1149,
- "CO" => 1544,
- "ICPCFRE" => 2103,
- "TOP-MENELAS" => 3189,
- "SMD_NPLSM_BRST" => 2086,
- "OntoOrpha" => 1586,
- "GAZ" => 1397,
- "ELIXHAUSER" => 1578,
- "CPTAC" => 1192,
- "ONTOKBCF" => 3155,
- "TAO" => 1110,
- "UCSFXPLANT" => 1661,
- "OBI_BCGO" => 3266,
- "MEGO" => 1257,
- "VARIO" => 3159,
- "VT" => 1659,
- "SYMP" => 1224,
- "BRO-Activity" => 2001,
- "SOY" => 3028,
- "FHHO" => 1126,
- "OPL" => 1190,
- "iceci-mechanism" => 2035,
- "IFAR" => 3183,
- "NHSQI" => 3242,
- "LOINC" => 2064,
- "IDO" => 1092,
- "OBIWS" => 3119,
- "EFO" => 1136,
- "ONTODT" => 1588,
- "ONTOMA" => 3090,
- "ICD10PCS" => 1425,
- "SEDI" => 3244,
- "RSA" => 3222,
- "GENETRIAL" => 3157,
- "SCTSPA" => 1416,
- "iceci-details_for_mechanism" => 2031,
- "SAO" => 1068,
- "NIFDYS" => 1381,
- "ENVO" => 1069,
- "INO" => 1515,
- "MA" => 1000,
- "MFOEM" => 1666,
- "BRO-Chinese" => 2017,
- "NCBITAXON" => 1132,
- "HCPCS-mod" => 2125,
- "dcterms" => 2116,
- "I2B2-LOINC" => 3186,
- "EPICMEDS" => 3032,
- "BRO-Core" => 2000,
- "CDAO" => 1128,
- "ICF-d4" => 2044,
- "TEST-PROD" => 3211,
- "BAO-GPCR" => 3216,
- "ooevv-tractTrace" => 2108,
- "PATO" => 1107,
- "OBOE-SBC" => 1523,
- "BP" => 1522,
- "OCRE" => 1076,
- "skos" => 2121,
- "MIXSCV" => 3000,
- "SPD" => 1091,
- "BHO" => 1116,
- "STNFRDRXDEMO" => 3261,
- "FB-BT" => 1015,
- "NCBI_NMOsp_1_2_2" => 2056,
- "WB-LS" => 1049,
- "SNOMEDCT-ANAT" => 2020,
- "TRAK" => 3210,
- "IDOMAL" => 1311,
- "SMD_NPLSM" => 2085,
- "goslim_pombe" => 2013,
- "SSE" => 3252,
- "CONSENT-ONT" => 3129,
- "BCO" => 3201,
- "RCD" => 1427,
- "AEO" => 1568,
- "TAXRANK" => 1419,
- "PHENX" => 3078,
- "goslim_pir" => 2012,
- "MO" => 1131,
- "PSDS" => 1038,
- "ONTODM-CORE" => 1638,
- "CHD" => 3233,
- "PHARMGKB" => 1655,
- "NIF-RTH" => 2025,
- "OPB" => 1141,
- "MSHFRE" => 1456,
- "ZEA" => 1050,
- "MEDLINEPLUS" => 1347,
- "SO" => 1109,
- "OBI_IEDB_view" => 2093,
- "PSIMOD" => 1041,
- "GPI" => 3185,
- "IMGT-ONTOLOGY" => 1491,
- "ONL-MR-DA" => 3250,
- "SHR" => 1665,
- "NHSQI2009" => 3243,
- "FDA-MEDDEVICE" => 1576,
- "OVAE" => 3227,
- "NDF-RT" => 2091,
- "CPRO" => 1059,
- "CSSO" => 3239,
- "event" => 2117,
- "CLO" => 1314,
- "ECG" => 1146,
- "PMR" => 3015,
- "IDQA" => 3208,
- "OntoVIP" => 3253,
- "ZFA" => 1051,
- "HCPCS-HIMC" => 3206,
- "OSHPD" => 1649,
- "ICF-d2" => 2042,
- "BIOMODELS" => 3022,
- "PHENOMEBLAST" => 1656,
- "OMIT" => 1505,
- "SITBAC" => 1237,
- "NIAID-GSC-BRC" => 2127,
- "SNMI" => 3232,
- "SOPHARM" => 1061,
- "BNO" => 3265,
- "DTVPrecision" => 2110,
- "VANDF" => 1527,
- "OOEVV" => 3006,
- "HSDB_OCRe" => 2100,
- "LSM" => 1520,
- "BRO-AreaOfResearch" => 2002,
- "WB-BT" => 1048,
- "H2_HIPClassicRegions" => 2081,
- "ERO" => 3016,
- "EDAM" => 1498,
- "HRDO" => 3273,
- "OPE" => 3209,
- "IMR" => 1029,
- "SYN" => 1696,
- "NONRCTO" => 3012,
- "GCO" => 3223,
- "RCJI" => 2067,
- "GO" => 1070,
- "OMRSE" => 1565,
- "ONSTR" => 3137,
- "SNMD_BDY" => 2105,
- "BIRNLEX" => 1089,
- "APO" => 1222,
- "DDANAT" => 1008,
- "ONTOPNEUMO" => 3181,
- "NIFCELL" => 1402,
- "SOFA" => 2015,
- "ATO" => 1370,
- "CLINIC" => 3092,
- "PROVO" => 3131,
- "NTDO" => 3153,
- "RADLEX" => 1057,
- "FYPO" => 1689,
- "MAO" => 1026,
- "MS" => 1105,
- "VHOG" => 1574,
- "PDO" => 3238,
- "DDI" => 1540,
- "PECO" => 1036,
- "MESH" => 1351,
- "COGAT" => 1633,
- "CPTH" => 1510,
- "MIRNAO" => 3139,
- "goslim_yeast" => 2014,
- "iceci-place_of_occurrence" => 2036,
- "DCO" => 3267,
- "FMA" => 1053,
- "MPATH" => 1031,
- "PTRANS" => 1094,
- "ECGT" => 2079,
- "bibliographic" => 2113,
- "ATOL" => 3207,
- "ELIG" => 3228,
- "OGI" => 1100,
- "USSOC" => 3104,
- "GLYCOPROT" => 3212,
- "AERO" => 1580,
- "TEDDY" => 1407,
- "HINO" => 3203,
- "GENE-CDS" => 3179,
- "TRON" => 3218,
- "OBR-Scolio" => 3258,
- "ZIP3" => 3184,
- "OGMD_OWL" => 2084,
- "ICPC2P" => 1429,
- "SEP" => 1044,
- "PW" => 1035,
- "SBOL" => 3226,
- "envo_153" => 2092,
- "TOK" => 1418,
- "COSTART" => 1341,
- "ICPS" => 1509,
- "UBERON" => 1404,
- "NCBI_NMOsp_1_0_0" => 2054,
- "PMA" => 1497,
- "MEDABBS" => 3043,
- "EPILONT" => 1639,
- "NCBITaxonOWL" => 2023,
- "BFO" => 1332,
- "SEMPHYSKB-HUMAN" => 3198,
- "ICD11-BODYSYSTEM" => 1487,
- "MEDO" => 3180,
- "CTCAE" => 1415,
- "XEO" => 3176,
- "NEOMARK3" => 1501,
- "SWO" => 1413,
- "SuicidO" => 3245,
- "GWAS_EFO_SKOS" => 2099,
- "documentStatus" => 2111,
- "ICPC" => 1344,
- "PEDTERM" => 1640,
- "HOM-ICD9" => 2059,
- "iceci-activity" => 2028,
- "UCSFEPIC" => 1630,
- "CNO" => 3003,
- "PLATSTG" => 1490,
- "3.0_OWL" => 2027,
- "DEMOGRAPH" => 3047,
- "TM-OTHER-FACTORS" => 1571,
- "RNPRIO" => 3240,
- "MSTDE" => 3219,
- "NBO" => 1621
-}
\ No newline at end of file
+ 'JERM' => 1488,
+ 'OGSF' => 3214,
+ 'NATPRO' => 3004,
+ 'citation' => 2114,
+ 'ATC' => 3021,
+ 'SNMD_BC' => 2088,
+ 'WHO-ART' => 1354,
+ 'ICD9CM-PROC' => 2124,
+ 'OGR' => 1087,
+ 'BAO' => 1533,
+ 'ATMO' => 1099,
+ 'goslim_candida' => 2010,
+ 'CHEBI' => 1007,
+ 'SNPO' => 1058,
+ 'provenance' => 2120,
+ 'WHOFRE' => 2102,
+ 'EMAP' => 1010,
+ 'CPT-mod' => 2126,
+ 'CTONT' => 1060,
+ 'BICSO' => 3269,
+ 'NMR' => 1033,
+ 'NPO' => 1083,
+ 'NEOMARK4' => 1686,
+ 'BRO' => 1104,
+ 'TMA' => 1494,
+ 'GLYCANONT' => 3231,
+ 'ICF-d5' => 2045,
+ 'GLOB' => 3167,
+ 'SNOMED-Ethnic-Group' => 2057,
+ 'SBRO' => 1249,
+ 'YPO' => 1115,
+ 'PO' => 1587,
+ 'CPT' => 1504,
+ 'EXO' => 1575,
+ 'geopolitical' => 2112,
+ 'NIC' => 1428,
+ 'CCONT' => 3108,
+ 'CLIN-EVAL' => 3147,
+ 'MMO' => 1584,
+ 'AMINO-ACID' => 1054,
+ 'OBOREL' => 1042,
+ 'IDOBRU' => 1537,
+ 'ICF-d860-d879' => 2052,
+ 'BP-METADATA' => 1148,
+ 'QUDT' => 3031,
+ 'HOM-UCSF_UCareDispostion' => 2062,
+ 'MSTDE-FRE' => 3220,
+ 'SNOMEDCT-ORG' => 2021,
+ 'NCBI_NMOsp_1_4_0' => 2072,
+ 'HP' => 1125,
+ 'BTO' => 1005,
+ 'UO' => 1112,
+ 'SWEET' => 3158,
+ 'OGMD' => 1085,
+ 'VSAO' => 1555,
+ 'ICF-d6' => 2046,
+ 'RPO' => 3114,
+ 'ECO' => 1012,
+ 'HCPCS' => 1529,
+ 'MIRO' => 1077,
+ 'BSAO' => 3271,
+ 'BiositemapIM' => 2003,
+ 'ooevv-vaccine' => 2109,
+ 'COGPO' => 1560,
+ 'CMS' => 3146,
+ 'CCO' => 1507,
+ 'NHDS' => 3136,
+ 'pseudo' => 1135,
+ 'TGMA' => 1030,
+ 'RID' => 1260,
+ 'TM-SIGNS-AND-SYMPTS' => 1572,
+ 'HAO' => 1362,
+ 'VIVO' => 1699,
+ 'EPSO' => 3230,
+ 'OntoBioUSP' => 3263,
+ 'suicideo' => 3270,
+ 'SDO' => 1651,
+ 'ABA-AMB' => 1290,
+ 'HPIO' => 1569,
+ 'AAO' => 1090,
+ 'MCCL' => 1541,
+ 'HOM-TEST' => 3038,
+ 'HIMC-CPT' => 3197,
+ 'ACGT-MO' => 1130,
+ 'REX' => 1043,
+ 'TM-MER' => 1573,
+ 'PHENOSCAPE-EXT' => 3194,
+ 'IEV' => 1011,
+ 'EHDA' => 1022,
+ 'FBbi' => 1023,
+ 'CHEMBIO' => 1615,
+ 'ICD10' => 1516,
+ 'ROLEO' => 1538,
+ 'GFO' => 1439,
+ 'MF' => 3002,
+ 'IMMDIS' => 3127,
+ 'dcelements' => 2115,
+ 'ADW' => 1530,
+ 'BOF' => 3234,
+ 'iceci-countermeasures' => 2029,
+ 'GALEN' => 1055,
+ 'PAE' => 1108,
+ 'OBI' => 1123,
+ 'HOM' => 1328,
+ 'HOMERUN' => 1627,
+ 'CABRO' => 3217,
+ 'ICD9CM' => 1101,
+ 'SNOMEDCT-MAS' => 2058,
+ 'ICF' => 1411,
+ 'WH' => 3264,
+ 'CHMO' => 3255,
+ 'H1_NMOABA_1_0' => 2069,
+ 'BSPO' => 1078,
+ 'MDRFRE' => 2104,
+ 'ICF-NoCodeLabel' => 2106,
+ 'GRO' => 1082,
+ 'NCIT' => 1032,
+ 'UCSFICD910CM' => 3199,
+ 'ADO' => 3251,
+ 'BDO' => 1613,
+ 'NeuroFMA' => 2004,
+ 'MCBCC' => 1438,
+ 'ICD09' => 3195,
+ 'ICF-d840-d859%2Fd860-d879' => 2053,
+ 'RCTONT' => 1676,
+ 'ERNO' => 3268,
+ 'ONTODM-KDD' => 3077,
+ 'IXNO' => 1614,
+ 'ICNP' => 1401,
+ 'KISAO' => 1410,
+ 'EDDA' => 3247,
+ 'GFO-BIO' => 1440,
+ 'FaBiO' => 2118,
+ 'UCare_Demographics' => 2063,
+ 'OGMS' => 1414,
+ 'Radlex3.9.1' => 2138,
+ 'MEO' => 3009,
+ 'SPTO' => 3029,
+ 'CHEMINF' => 1444,
+ 'CANONT' => 3178,
+ 'HC' => 1020,
+ 'PPIO' => 1040,
+ 'H1_NMOABA' => 2078,
+ 'EHDAA' => 1021,
+ 'VSO' => 3124,
+ 'NIGO' => 1539,
+ 'SPO' => 1122,
+ 'VTO' => 3236,
+ 'MP' => 1025,
+ 'GCC' => 3017,
+ 'BILA' => 1114,
+ 'iceci-descriptor_for_intent' => 2030,
+ 'obi-device' => 2065,
+ 'CL' => 1006,
+ 'RH-MESH' => 3019,
+ 'ICD10CM' => 1553,
+ 'BRIDG' => 3150,
+ 'UCSFI9I10CMPCS' => 3224,
+ 'MIXS' => 3215,
+ 'SNOMEDCT-CF' => 2018,
+ 'FMA-SUBSET' => 2006,
+ 'PTO' => 1037,
+ 'CMO' => 1583,
+ 'FB-SP' => 1064,
+ 'EP' => 1142,
+ 'SIO' => 1532,
+ 'InterNano' => 3259,
+ 'ICF-d1' => 2041,
+ 'REPO' => 1552,
+ 'PHARE' => 1550,
+ 'UNITSONT' => 1650,
+ 'REXO' => 3152,
+ 'DOID' => 1009,
+ 'ICDO3' => 1670,
+ 'DIAGONT' => 3013,
+ 'I2B2-PATVISDIM' => 3062,
+ 'NCBI_NMOsp_1_2_1' => 2055,
+ 'MDDB' => 1426,
+ 'PROV' => 2139,
+ 'ICF-d810-d839' => 2050,
+ 'FLU' => 1417,
+ 'DC-CL' => 1144,
+ 'LIPRO' => 1183,
+ 'UCSFICU' => 3007,
+ 'SNOMEDCT-CORE' => 2040,
+ 'NCIt-Activity' => 2026,
+ 'CARO' => 1063,
+ 'CPT-KM' => 1694,
+ 'MFO' => 1027,
+ 'GRO-CPGA' => 1001,
+ 'RETO' => 3162,
+ 'PATHLEX' => 3190,
+ 'GEOSPECIES' => 1247,
+ 'OAE' => 1489,
+ 'EMO' => 1626,
+ 'MPO' => 3191,
+ 'OMIM' => 1348,
+ 'CTX' => 3025,
+ 'FAO' => 1019,
+ 'goslim_plant' => 2009,
+ 'NIFSTD' => 1084,
+ 'iceci-substance_use' => 2037,
+ 'BIOA3v' => 2107,
+ 'QIBO' => 1671,
+ 'iceci-details_for_activity' => 2038,
+ 'BCTEO' => 3262,
+ 'CANCO' => 3030,
+ 'PDQ' => 1349,
+ 'NDDF' => 1424,
+ 'VO' => 1172,
+ 'H1_NMOABA_4_1' => 2083,
+ 'iceci-intent' => 2034,
+ 'IAO' => 1393,
+ 'RS' => 1150,
+ 'ONL-DP' => 3249,
+ 'SciRes' => 2122,
+ 'CARD' => 3272,
+ 'goslim_generic_1_770' => 2007,
+ 'EVOC' => 1013,
+ 'MSHSPA_1' => 1420,
+ 'SNOMEDCT-TF' => 2019,
+ 'MAT' => 1152,
+ 'GRO-CPD' => 1047,
+ 'GLYCO' => 3169,
+ 'UCSFORTHO' => 1697,
+ 'PCO' => 3120,
+ 'CRISP' => 1526,
+ 'IDODEN' => 3174,
+ 'iceci-details_for_place_of_occurrence' => 2032,
+ 'ICD0' => 3205,
+ 'PVONTO' => 1567,
+ 'GEXO' => 3151,
+ 'DIKB' => 1672,
+ 'FB-CV' => 1017,
+ 'SBO' => 1046,
+ 'PEO' => 1335,
+ 'Amino_Acid-zh_CN' => 1168,
+ 'RNAO' => 1500,
+ 'PHYLONT' => 1616,
+ 'GO-EXT' => 1506,
+ 'ICF-d9' => 2049,
+ 'ONL-MSA' => 3246,
+ 'NIFSUBCELL' => 3126,
+ 'PR' => 1062,
+ 'CAO' => 1582,
+ 'VBCV' => 3237,
+ 'ICD9CM-KM' => 3045,
+ 'FIX' => 1014,
+ 'ICECI' => 1484,
+ 'NEUMORE' => 1521,
+ 'WSIO' => 1632,
+ 'goslim_goa' => 2008,
+ 'ICF-d3' => 2043,
+ 'MDCDRG' => 3046,
+ 'DWC-TEST' => 3094,
+ 'BT' => 1134,
+ 'H3_HIPSeptotemporalAxis' => 2082,
+ 'MSV' => 3274,
+ 'DILIo' => 2136,
+ 'ICF-d840-d859' => 2051,
+ 'MCCV' => 3192,
+ 'HL7' => 1343,
+ 'XCO' => 1585,
+ 'ICF-d7' => 2047,
+ 'ZIP5' => 3200,
+ 'SSO' => 1394,
+ 'RXNORM' => 2066,
+ 'DERMO' => 3221,
+ 'obi-fged' => 2070,
+ 'RadLex_OWL' => 2024,
+ 'H1_NMOABA_2_0' => 2074,
+ 'MEDDRA' => 1422,
+ 'BRO-Resource' => 2022,
+ 'TMO' => 1461,
+ 'LHN' => 1024,
+ 'PROPREO' => 1039,
+ 'CO-WHEAT' => 1545,
+ 'CARELEX' => 3008,
+ 'NDFRT' => 1352,
+ 'iceci-instrument_object_substance' => 2033,
+ 'PRO-ONT' => 1052,
+ 'TADS' => 1065,
+ 'HLTHINDCTRS' => 1581,
+ 'WB-PHENOTYPE' => 1067,
+ 'OGDI' => 1086,
+ 'TEO' => 3042,
+ 'PHYFIELD' => 1369,
+ 'NEMO' => 1321,
+ 'CBO' => 1158,
+ 'CPO' => 3020,
+ 'SNOMEDCT' => 1353,
+ 'DWC' => 3058,
+ 'foaf' => 2119,
+ 'LDA' => 1398,
+ 'HUGO' => 1528,
+ 'AI-RHEUM' => 1430,
+ 'MHC' => 1088,
+ 'XAO' => 1095,
+ 'UDEF' => 3241,
+ 'ICF-d8' => 2048,
+ 'H1_NMOABA_4_0' => 2080,
+ 'test1' => 2101,
+ 'TM-CONST' => 1570,
+ 'FB-DV' => 1016,
+ 'PORO' => 3204,
+ 'TTO' => 1081,
+ 'ECGF' => 2073,
+ 'EHDAA2' => 1517,
+ 'BCGO' => 1304,
+ 'DERMLEX' => 1149,
+ 'CO' => 1544,
+ 'ICPCFRE' => 2103,
+ 'TOP-MENELAS' => 3189,
+ 'SMD_NPLSM_BRST' => 2086,
+ 'OntoOrpha' => 1586,
+ 'GAZ' => 1397,
+ 'ELIXHAUSER' => 1578,
+ 'CPTAC' => 1192,
+ 'ONTOKBCF' => 3155,
+ 'TAO' => 1110,
+ 'UCSFXPLANT' => 1661,
+ 'OBI_BCGO' => 3266,
+ 'MEGO' => 1257,
+ 'VARIO' => 3159,
+ 'VT' => 1659,
+ 'SYMP' => 1224,
+ 'BRO-Activity' => 2001,
+ 'SOY' => 3028,
+ 'FHHO' => 1126,
+ 'OPL' => 1190,
+ 'iceci-mechanism' => 2035,
+ 'IFAR' => 3183,
+ 'NHSQI' => 3242,
+ 'LOINC' => 2064,
+ 'IDO' => 1092,
+ 'OBIWS' => 3119,
+ 'EFO' => 1136,
+ 'ONTODT' => 1588,
+ 'ONTOMA' => 3090,
+ 'ICD10PCS' => 1425,
+ 'SEDI' => 3244,
+ 'RSA' => 3222,
+ 'GENETRIAL' => 3157,
+ 'SCTSPA' => 1416,
+ 'iceci-details_for_mechanism' => 2031,
+ 'SAO' => 1068,
+ 'NIFDYS' => 1381,
+ 'ENVO' => 1069,
+ 'INO' => 1515,
+ 'MA' => 1000,
+ 'MFOEM' => 1666,
+ 'BRO-Chinese' => 2017,
+ 'NCBITAXON' => 1132,
+ 'HCPCS-mod' => 2125,
+ 'dcterms' => 2116,
+ 'I2B2-LOINC' => 3186,
+ 'EPICMEDS' => 3032,
+ 'BRO-Core' => 2000,
+ 'CDAO' => 1128,
+ 'ICF-d4' => 2044,
+ 'TEST-PROD' => 3211,
+ 'BAO-GPCR' => 3216,
+ 'ooevv-tractTrace' => 2108,
+ 'PATO' => 1107,
+ 'OBOE-SBC' => 1523,
+ 'BP' => 1522,
+ 'OCRE' => 1076,
+ 'skos' => 2121,
+ 'MIXSCV' => 3000,
+ 'SPD' => 1091,
+ 'BHO' => 1116,
+ 'STNFRDRXDEMO' => 3261,
+ 'FB-BT' => 1015,
+ 'NCBI_NMOsp_1_2_2' => 2056,
+ 'WB-LS' => 1049,
+ 'SNOMEDCT-ANAT' => 2020,
+ 'TRAK' => 3210,
+ 'IDOMAL' => 1311,
+ 'SMD_NPLSM' => 2085,
+ 'goslim_pombe' => 2013,
+ 'SSE' => 3252,
+ 'CONSENT-ONT' => 3129,
+ 'BCO' => 3201,
+ 'RCD' => 1427,
+ 'AEO' => 1568,
+ 'TAXRANK' => 1419,
+ 'PHENX' => 3078,
+ 'goslim_pir' => 2012,
+ 'MO' => 1131,
+ 'PSDS' => 1038,
+ 'ONTODM-CORE' => 1638,
+ 'CHD' => 3233,
+ 'PHARMGKB' => 1655,
+ 'NIF-RTH' => 2025,
+ 'OPB' => 1141,
+ 'MSHFRE' => 1456,
+ 'ZEA' => 1050,
+ 'MEDLINEPLUS' => 1347,
+ 'SO' => 1109,
+ 'OBI_IEDB_view' => 2093,
+ 'PSIMOD' => 1041,
+ 'GPI' => 3185,
+ 'IMGT-ONTOLOGY' => 1491,
+ 'ONL-MR-DA' => 3250,
+ 'SHR' => 1665,
+ 'NHSQI2009' => 3243,
+ 'FDA-MEDDEVICE' => 1576,
+ 'OVAE' => 3227,
+ 'NDF-RT' => 2091,
+ 'CPRO' => 1059,
+ 'CSSO' => 3239,
+ 'event' => 2117,
+ 'CLO' => 1314,
+ 'ECG' => 1146,
+ 'PMR' => 3015,
+ 'IDQA' => 3208,
+ 'OntoVIP' => 3253,
+ 'ZFA' => 1051,
+ 'HCPCS-HIMC' => 3206,
+ 'OSHPD' => 1649,
+ 'ICF-d2' => 2042,
+ 'BIOMODELS' => 3022,
+ 'PHENOMEBLAST' => 1656,
+ 'OMIT' => 1505,
+ 'SITBAC' => 1237,
+ 'NIAID-GSC-BRC' => 2127,
+ 'SNMI' => 3232,
+ 'SOPHARM' => 1061,
+ 'BNO' => 3265,
+ 'DTVPrecision' => 2110,
+ 'VANDF' => 1527,
+ 'OOEVV' => 3006,
+ 'HSDB_OCRe' => 2100,
+ 'LSM' => 1520,
+ 'BRO-AreaOfResearch' => 2002,
+ 'WB-BT' => 1048,
+ 'H2_HIPClassicRegions' => 2081,
+ 'ERO' => 3016,
+ 'EDAM' => 1498,
+ 'HRDO' => 3273,
+ 'OPE' => 3209,
+ 'IMR' => 1029,
+ 'SYN' => 1696,
+ 'NONRCTO' => 3012,
+ 'GCO' => 3223,
+ 'RCJI' => 2067,
+ 'GO' => 1070,
+ 'OMRSE' => 1565,
+ 'ONSTR' => 3137,
+ 'SNMD_BDY' => 2105,
+ 'BIRNLEX' => 1089,
+ 'APO' => 1222,
+ 'DDANAT' => 1008,
+ 'ONTOPNEUMO' => 3181,
+ 'NIFCELL' => 1402,
+ 'SOFA' => 2015,
+ 'ATO' => 1370,
+ 'CLINIC' => 3092,
+ 'PROVO' => 3131,
+ 'NTDO' => 3153,
+ 'RADLEX' => 1057,
+ 'FYPO' => 1689,
+ 'MAO' => 1026,
+ 'MS' => 1105,
+ 'VHOG' => 1574,
+ 'PDO' => 3238,
+ 'DDI' => 1540,
+ 'PECO' => 1036,
+ 'MESH' => 1351,
+ 'COGAT' => 1633,
+ 'CPTH' => 1510,
+ 'MIRNAO' => 3139,
+ 'goslim_yeast' => 2014,
+ 'iceci-place_of_occurrence' => 2036,
+ 'DCO' => 3267,
+ 'FMA' => 1053,
+ 'MPATH' => 1031,
+ 'PTRANS' => 1094,
+ 'ECGT' => 2079,
+ 'bibliographic' => 2113,
+ 'ATOL' => 3207,
+ 'ELIG' => 3228,
+ 'OGI' => 1100,
+ 'USSOC' => 3104,
+ 'GLYCOPROT' => 3212,
+ 'AERO' => 1580,
+ 'TEDDY' => 1407,
+ 'HINO' => 3203,
+ 'GENE-CDS' => 3179,
+ 'TRON' => 3218,
+ 'OBR-Scolio' => 3258,
+ 'ZIP3' => 3184,
+ 'OGMD_OWL' => 2084,
+ 'ICPC2P' => 1429,
+ 'SEP' => 1044,
+ 'PW' => 1035,
+ 'SBOL' => 3226,
+ 'envo_153' => 2092,
+ 'TOK' => 1418,
+ 'COSTART' => 1341,
+ 'ICPS' => 1509,
+ 'UBERON' => 1404,
+ 'NCBI_NMOsp_1_0_0' => 2054,
+ 'PMA' => 1497,
+ 'MEDABBS' => 3043,
+ 'EPILONT' => 1639,
+ 'NCBITaxonOWL' => 2023,
+ 'BFO' => 1332,
+ 'SEMPHYSKB-HUMAN' => 3198,
+ 'ICD11-BODYSYSTEM' => 1487,
+ 'MEDO' => 3180,
+ 'CTCAE' => 1415,
+ 'XEO' => 3176,
+ 'NEOMARK3' => 1501,
+ 'SWO' => 1413,
+ 'SuicidO' => 3245,
+ 'GWAS_EFO_SKOS' => 2099,
+ 'documentStatus' => 2111,
+ 'ICPC' => 1344,
+ 'PEDTERM' => 1640,
+ 'HOM-ICD9' => 2059,
+ 'iceci-activity' => 2028,
+ 'UCSFEPIC' => 1630,
+ 'CNO' => 3003,
+ 'PLATSTG' => 1490,
+ '3.0_OWL' => 2027,
+ 'DEMOGRAPH' => 3047,
+ 'TM-OTHER-FACTORS' => 1571,
+ 'RNPRIO' => 3240,
+ 'MSTDE' => 3219,
+ 'NBO' => 1621
+}.freeze
diff --git a/lib/resolver/virtual_from_version.rb b/lib/resolver/virtual_from_version.rb
index 9e40cad015..4be9af5039 100644
--- a/lib/resolver/virtual_from_version.rb
+++ b/lib/resolver/virtual_from_version.rb
@@ -1,7144 +1,7146 @@
+# frozen_string_literal: true
+
BpidResolver::VIRTUAL_FROM_VERSION = {
- "old:virtual_from_version:40876" => 1048,
- "old:virtual_from_version:44059" => 1125,
- "old:virtual_from_version:46266" => 1172,
- "old:virtual_from_version:44870" => 1077,
- "old:virtual_from_version:40446" => 1009,
- "old:virtual_from_version:42230" => 1083,
- "old:virtual_from_version:44261" => 1070,
- "old:virtual_from_version:44863" => 1009,
- "old:virtual_from_version:44231" => 1107,
- "old:virtual_from_version:47370" => 1077,
- "old:virtual_from_version:49429" => 1580,
- "old:virtual_from_version:42156" => 1037,
- "old:virtual_from_version:44222" => 1009,
- "old:virtual_from_version:42381" => 1070,
- "old:virtual_from_version:50050" => 3131,
- "old:virtual_from_version:47704" => 1689,
- "old:virtual_from_version:40625" => 1070,
- "old:virtual_from_version:40934" => 1070,
- "old:virtual_from_version:43002" => 2018,
- "old:virtual_from_version:40941" => 1070,
- "old:virtual_from_version:39314" => 1125,
- "old:virtual_from_version:46950" => 1070,
- "old:virtual_from_version:46093" => 1649,
- "old:virtual_from_version:49425" => 1025,
- "old:virtual_from_version:42731" => 1077,
- "old:virtual_from_version:47095" => 1077,
- "old:virtual_from_version:49684" => 1125,
- "old:virtual_from_version:49229" => 1689,
- "old:virtual_from_version:47012" => 3016,
- "old:virtual_from_version:45228" => 1414,
- "old:virtual_from_version:45287" => 1517,
- "old:virtual_from_version:45569" => 1136,
- "old:virtual_from_version:42525" => 1017,
- "old:virtual_from_version:38363" => 1081,
- "old:virtual_from_version:40404" => 1354,
- "old:virtual_from_version:47677" => 1689,
- "old:virtual_from_version:47916" => 1081,
- "old:virtual_from_version:42239" => 1077,
- "old:virtual_from_version:46908" => 1070,
- "old:virtual_from_version:50341" => 3131,
- "old:virtual_from_version:44232" => 1070,
- "old:virtual_from_version:44622" => 1009,
- "old:virtual_from_version:40556" => 1067,
- "old:virtual_from_version:46102" => 1070,
- "old:virtual_from_version:49057" => 1077,
- "old:virtual_from_version:45091" => 1025,
- "old:virtual_from_version:44599" => 1141,
- "old:virtual_from_version:39208" => 1148,
- "old:virtual_from_version:44055" => 1077,
- "old:virtual_from_version:39055" => 1110,
- "old:virtual_from_version:44779" => 1545,
- "old:virtual_from_version:43073" => 2072,
- "old:virtual_from_version:45955" => 1105,
- "old:virtual_from_version:46215" => 1070,
- "old:virtual_from_version:46917" => 1109,
- "old:virtual_from_version:50608" => 1136,
- "old:virtual_from_version:29952" => 1078,
- "old:virtual_from_version:42084" => 1070,
- "old:virtual_from_version:45919" => 1035,
- "old:virtual_from_version:40589" => 1077,
- "old:virtual_from_version:44604" => 1009,
- "old:virtual_from_version:50267" => 3131,
- "old:virtual_from_version:50174" => 1172,
- "old:virtual_from_version:40681" => 1081,
- "old:virtual_from_version:44915" => 1077,
- "old:virtual_from_version:42810" => 1500,
- "old:virtual_from_version:46938" => 3009,
- "old:virtual_from_version:42177" => 1172,
- "old:virtual_from_version:40398" => 1348,
- "old:virtual_from_version:49002" => 1070,
- "old:virtual_from_version:45570" => 1070,
- "old:virtual_from_version:42980" => 1009,
- "old:virtual_from_version:42557" => 1037,
- "old:virtual_from_version:42070" => 1107,
- "old:virtual_from_version:40634" => 1070,
- "old:virtual_from_version:40441" => 1083,
- "old:virtual_from_version:39905" => 1081,
- "old:virtual_from_version:45020" => 1070,
- "old:virtual_from_version:47294" => 1077,
- "old:virtual_from_version:44738" => 1070,
- "old:virtual_from_version:49659" => 3155,
- "old:virtual_from_version:44158" => 1107,
- "old:virtual_from_version:44939" => 1125,
- "old:virtual_from_version:47658" => 1070,
- "old:virtual_from_version:38751" => 1112,
- "old:virtual_from_version:50316" => 1311,
- "old:virtual_from_version:45554" => 1172,
- "old:virtual_from_version:46320" => 1115,
- "old:virtual_from_version:46790" => 1077,
- "old:virtual_from_version:45799" => 1067,
- "old:virtual_from_version:49263" => 1532,
- "old:virtual_from_version:45033" => 1016,
- "old:virtual_from_version:45005" => 1006,
- "old:virtual_from_version:47430" => 1077,
- "old:virtual_from_version:42607" => 1070,
- "old:virtual_from_version:44878" => 1125,
- "old:virtual_from_version:46763" => 1062,
- "old:virtual_from_version:44050" => 1125,
- "old:virtual_from_version:50616" => 1025,
- "old:virtual_from_version:50308" => 1224,
- "old:virtual_from_version:45330" => 1588,
- "old:virtual_from_version:45783" => 1007,
- "old:virtual_from_version:42948" => 1148,
- "old:virtual_from_version:42159" => 1077,
- "old:virtual_from_version:39932" => 1110,
- "old:virtual_from_version:42828" => 1078,
- "old:virtual_from_version:39175" => 1146,
- "old:virtual_from_version:47474" => 1070,
- "old:virtual_from_version:44796" => 1077,
- "old:virtual_from_version:45353" => 1107,
- "old:virtual_from_version:42081" => 1009,
- "old:virtual_from_version:45491" => 1009,
- "old:virtual_from_version:44302" => 1013,
- "old:virtual_from_version:40848" => 1407,
- "old:virtual_from_version:45954" => 1070,
- "old:virtual_from_version:50612" => 1689,
- "old:virtual_from_version:38407" => 1104,
- "old:virtual_from_version:48010" => 2110,
- "old:virtual_from_version:39483" => 1007,
- "old:virtual_from_version:41000" => 2012,
- "old:virtual_from_version:46948" => 1659,
- "old:virtual_from_version:44362" => 1063,
- "old:virtual_from_version:45446" => 1125,
- "old:virtual_from_version:42256" => 1009,
- "old:virtual_from_version:47113" => 3020,
- "old:virtual_from_version:42442" => 1009,
- "old:virtual_from_version:46735" => 1689,
- "old:virtual_from_version:43021" => 2046,
- "old:virtual_from_version:49586" => 1067,
- "old:virtual_from_version:44579" => 1070,
- "old:virtual_from_version:40892" => 1108,
- "old:virtual_from_version:44692" => 1109,
- "old:virtual_from_version:50607" => 1070,
- "old:virtual_from_version:50177" => 1070,
- "old:virtual_from_version:38801" => 1131,
- "old:virtual_from_version:39897" => 1183,
- "old:virtual_from_version:45015" => 1125,
- "old:virtual_from_version:47406" => 1125,
- "old:virtual_from_version:46305" => 1070,
- "old:virtual_from_version:45506" => 1584,
- "old:virtual_from_version:39737" => 1025,
- "old:virtual_from_version:47427" => 1136,
- "old:virtual_from_version:43086" => 2083,
- "old:virtual_from_version:42914" => 1009,
- "old:virtual_from_version:45928" => 1070,
- "old:virtual_from_version:44656" => 1025,
- "old:virtual_from_version:44637" => 1070,
- "old:virtual_from_version:49610" => 1659,
- "old:virtual_from_version:50200" => 1311,
- "old:virtual_from_version:47516" => 1070,
- "old:virtual_from_version:49208" => 1404,
- "old:virtual_from_version:50668" => 3208,
- "old:virtual_from_version:42598" => 1070,
- "old:virtual_from_version:49324" => 1070,
- "old:virtual_from_version:47473" => 1616,
- "old:virtual_from_version:49225" => 1125,
- "old:virtual_from_version:50763" => 1417,
- "old:virtual_from_version:45121" => 1077,
- "old:virtual_from_version:49776" => 3194,
- "old:virtual_from_version:49217" => 1070,
- "old:virtual_from_version:46356" => 1670,
- "old:virtual_from_version:50726" => 3266,
- "old:virtual_from_version:46452" => 1105,
- "old:virtual_from_version:49589" => 1077,
- "old:virtual_from_version:45476" => 1105,
- "old:virtual_from_version:49352" => 1136,
- "old:virtual_from_version:40828" => 1006,
- "old:virtual_from_version:40651" => 1397,
- "old:virtual_from_version:38793" => 1062,
- "old:virtual_from_version:46893" => 1070,
- "old:virtual_from_version:50209" => 1070,
- "old:virtual_from_version:40645" => 1128,
- "old:virtual_from_version:42563" => 1109,
- "old:virtual_from_version:49413" => 1070,
- "old:virtual_from_version:42408" => 1311,
- "old:virtual_from_version:45296" => 1062,
- "old:virtual_from_version:46543" => 1125,
- "old:virtual_from_version:41017" => 2026,
- "old:virtual_from_version:47043" => 1077,
- "old:virtual_from_version:50353" => 1125,
- "old:virtual_from_version:50721" => 1150,
- "old:virtual_from_version:44922" => 1555,
- "old:virtual_from_version:44822" => 1550,
- "old:virtual_from_version:46901" => 1077,
- "old:virtual_from_version:49205" => 1070,
- "old:virtual_from_version:45289" => 1110,
- "old:virtual_from_version:49676" => 1404,
- "old:virtual_from_version:47640" => 1125,
- "old:virtual_from_version:49390" => 1070,
- "old:virtual_from_version:50534" => 1314,
- "old:virtual_from_version:45730" => 1048,
- "old:virtual_from_version:46420" => 1136,
- "old:virtual_from_version:40902" => 1048,
- "old:virtual_from_version:44030" => 1077,
- "old:virtual_from_version:49732" => 1489,
- "old:virtual_from_version:46240" => 1070,
- "old:virtual_from_version:50700" => 3259,
- "old:virtual_from_version:42470" => 1404,
- "old:virtual_from_version:47364" => 1077,
- "old:virtual_from_version:46495" => 1580,
- "old:virtual_from_version:47445" => 1381,
- "old:virtual_from_version:46823" => 3000,
- "old:virtual_from_version:40512" => 1077,
- "old:virtual_from_version:49158" => 1077,
- "old:virtual_from_version:49930" => 1632,
- "old:virtual_from_version:40552" => 1091,
- "old:virtual_from_version:43036" => 2035,
- "old:virtual_from_version:50499" => 3259,
- "old:virtual_from_version:40778" => 1107,
- "old:virtual_from_version:49503" => 1107,
- "old:virtual_from_version:45553" => 1348,
- "old:virtual_from_version:42806" => 1009,
- "old:virtual_from_version:45109" => 1489,
- "old:virtual_from_version:44247" => 1070,
- "old:virtual_from_version:45377" => 1362,
- "old:virtual_from_version:47983" => 3126,
- "old:virtual_from_version:49979" => 1062,
- "old:virtual_from_version:47162" => 3030,
- "old:virtual_from_version:44217" => 1224,
- "old:virtual_from_version:45925" => 1025,
- "old:virtual_from_version:46708" => 1070,
- "old:virtual_from_version:47490" => 1070,
- "old:virtual_from_version:42876" => 1070,
- "old:virtual_from_version:49178" => 1077,
- "old:virtual_from_version:39149" => 1123,
- "old:virtual_from_version:44564" => 1037,
- "old:virtual_from_version:42252" => 1077,
- "old:virtual_from_version:49696" => 1158,
- "old:virtual_from_version:40797" => 1051,
- "old:virtual_from_version:40811" => 1077,
- "old:virtual_from_version:47730" => 1077,
- "old:virtual_from_version:42231" => 1172,
- "old:virtual_from_version:49064" => 1689,
- "old:virtual_from_version:42493" => 1025,
- "old:virtual_from_version:47153" => 1125,
- "old:virtual_from_version:49233" => 1077,
- "old:virtual_from_version:44129" => 1070,
- "old:virtual_from_version:48039" => 2136,
- "old:virtual_from_version:44101" => 1077,
- "old:virtual_from_version:49504" => 1105,
- "old:virtual_from_version:44725" => 1070,
- "old:virtual_from_version:49102" => 1649,
- "old:virtual_from_version:49138" => 1070,
- "old:virtual_from_version:44140" => 1077,
- "old:virtual_from_version:40745" => 1081,
- "old:virtual_from_version:46622" => 1136,
- "old:virtual_from_version:46415" => 1070,
- "old:virtual_from_version:50290" => 3223,
- "old:virtual_from_version:45423" => 1136,
- "old:virtual_from_version:40576" => 1070,
- "old:virtual_from_version:49455" => 3008,
- "old:virtual_from_version:45272" => 1069,
- "old:virtual_from_version:45866" => 1125,
- "old:virtual_from_version:49024" => 1125,
- "old:virtual_from_version:44190" => 1077,
- "old:virtual_from_version:39281" => 1105,
- "old:virtual_from_version:47997" => 1077,
- "old:virtual_from_version:40244" => 1311,
- "old:virtual_from_version:44403" => 1009,
- "old:virtual_from_version:47733" => 1070,
- "old:virtual_from_version:47817" => 3094,
- "old:virtual_from_version:49682" => 1651,
- "old:virtual_from_version:49897" => 1070,
- "old:virtual_from_version:45686" => 1027,
- "old:virtual_from_version:50084" => 1070,
- "old:virtual_from_version:39995" => 2010,
- "old:virtual_from_version:48018" => 2118,
- "old:virtual_from_version:42385" => 1037,
- "old:virtual_from_version:50070" => 1172,
- "old:virtual_from_version:44770" => 1544,
- "old:virtual_from_version:50310" => 1009,
- "old:virtual_from_version:40733" => 1009,
- "old:virtual_from_version:42743" => 1321,
- "old:virtual_from_version:46092" => 1649,
- "old:virtual_from_version:43044" => 2001,
- "old:virtual_from_version:50478" => 3234,
- "old:virtual_from_version:44888" => 1025,
- "old:virtual_from_version:40995" => 1125,
- "old:virtual_from_version:39517" => 1125,
- "old:virtual_from_version:42313" => 1025,
- "old:virtual_from_version:45694" => 1070,
- "old:virtual_from_version:40843" => 1109,
- "old:virtual_from_version:49219" => 1128,
- "old:virtual_from_version:42701" => 1009,
- "old:virtual_from_version:42002" => 1007,
- "old:virtual_from_version:47863" => 1583,
- "old:virtual_from_version:50681" => 1584,
- "old:virtual_from_version:49818" => 3200,
- "old:virtual_from_version:42512" => 1081,
- "old:virtual_from_version:42486" => 1077,
- "old:virtual_from_version:50244" => 1067,
- "old:virtual_from_version:42832" => 1037,
- "old:virtual_from_version:42953" => 1037,
- "old:virtual_from_version:40717" => 1070,
- "old:virtual_from_version:50219" => 1065,
- "old:virtual_from_version:49957" => 1489,
- "old:virtual_from_version:45404" => 1011,
- "old:virtual_from_version:44969" => 1063,
- "old:virtual_from_version:42383" => 1025,
- "old:virtual_from_version:44108" => 1517,
- "old:virtual_from_version:44987" => 1027,
- "old:virtual_from_version:45574" => 1136,
- "old:virtual_from_version:40216" => 1094,
- "old:virtual_from_version:47914" => 1125,
- "old:virtual_from_version:46211" => 1661,
- "old:virtual_from_version:44768" => 1077,
- "old:virtual_from_version:40919" => 1009,
- "old:virtual_from_version:45131" => 1125,
- "old:virtual_from_version:50128" => 3131,
- "old:virtual_from_version:42448" => 1125,
- "old:virtual_from_version:42608" => 1009,
- "old:virtual_from_version:46720" => 1070,
- "old:virtual_from_version:42986" => 1009,
- "old:virtual_from_version:47312" => 1109,
- "old:virtual_from_version:49920" => 3186,
- "old:virtual_from_version:47475" => 1037,
- "old:virtual_from_version:38675" => 1006,
- "old:virtual_from_version:50482" => 1491,
- "old:virtual_from_version:42922" => 1025,
- "old:virtual_from_version:47962" => 1067,
- "old:virtual_from_version:49131" => 3002,
- "old:virtual_from_version:49541" => 1532,
- "old:virtual_from_version:47915" => 1037,
- "old:virtual_from_version:49551" => 1689,
- "old:virtual_from_version:42250" => 1009,
- "old:virtual_from_version:45542" => 1532,
- "old:virtual_from_version:50451" => 1172,
- "old:virtual_from_version:42368" => 1070,
- "old:virtual_from_version:46428" => 1070,
- "old:virtual_from_version:49445" => 1105,
- "old:virtual_from_version:44355" => 1172,
- "old:virtual_from_version:45896" => 1125,
- "old:virtual_from_version:44543" => 1037,
- "old:virtual_from_version:42372" => 1404,
- "old:virtual_from_version:44616" => 1077,
- "old:virtual_from_version:49270" => 1077,
- "old:virtual_from_version:47858" => 1037,
- "old:virtual_from_version:44531" => 1533,
- "old:virtual_from_version:42080" => 1070,
- "old:virtual_from_version:46889" => 1125,
- "old:virtual_from_version:49243" => 3158,
- "old:virtual_from_version:50638" => 1105,
- "old:virtual_from_version:45243" => 1078,
- "old:virtual_from_version:44525" => 1070,
- "old:virtual_from_version:49966" => 1070,
- "old:virtual_from_version:42319" => 1077,
- "old:virtual_from_version:40984" => 1415,
- "old:virtual_from_version:42482" => 1067,
- "old:virtual_from_version:44694" => 1538,
- "old:virtual_from_version:47671" => 1077,
- "old:virtual_from_version:47865" => 1585,
- "old:virtual_from_version:47675" => 1077,
- "old:virtual_from_version:46492" => 1686,
- "old:virtual_from_version:46218" => 1070,
- "old:virtual_from_version:44483" => 1037,
- "old:virtual_from_version:49045" => 1404,
- "old:virtual_from_version:49244" => 1070,
- "old:virtual_from_version:45036" => 1019,
- "old:virtual_from_version:42693" => 1032,
- "old:virtual_from_version:49958" => 3131,
- "old:virtual_from_version:46097" => 1077,
- "old:virtual_from_version:37419" => 1038,
- "old:virtual_from_version:49709" => 1086,
- "old:virtual_from_version:42386" => 1404,
- "old:virtual_from_version:47690" => 1070,
- "old:virtual_from_version:40740" => 1222,
- "old:virtual_from_version:46986" => 3008,
- "old:virtual_from_version:47001" => 1125,
- "old:virtual_from_version:38955" => 1006,
- "old:virtual_from_version:46660" => 1070,
- "old:virtual_from_version:42676" => 1037,
- "old:virtual_from_version:44618" => 1109,
- "old:virtual_from_version:39242" => 1035,
- "old:virtual_from_version:47297" => 1616,
- "old:virtual_from_version:46832" => 1048,
- "old:virtual_from_version:44764" => 1009,
- "old:virtual_from_version:40259" => 1067,
- "old:virtual_from_version:42169" => 1037,
- "old:virtual_from_version:42686" => 1070,
- "old:virtual_from_version:46268" => 1517,
- "old:virtual_from_version:45899" => 1125,
- "old:virtual_from_version:46592" => 1070,
- "old:virtual_from_version:50075" => 1172,
- "old:virtual_from_version:40973" => 1070,
- "old:virtual_from_version:38378" => 1009,
- "old:virtual_from_version:42012" => 1077,
- "old:virtual_from_version:50049" => 1689,
- "old:virtual_from_version:47752" => 1077,
- "old:virtual_from_version:50637" => 1128,
- "old:virtual_from_version:40617" => 1070,
- "old:virtual_from_version:49810" => 1006,
- "old:virtual_from_version:38662" => 1404,
- "old:virtual_from_version:49394" => 1070,
- "old:virtual_from_version:40719" => 1081,
- "old:virtual_from_version:42920" => 1048,
- "old:virtual_from_version:40542" => 1077,
- "old:virtual_from_version:49234" => 1532,
- "old:virtual_from_version:45216" => 1571,
- "old:virtual_from_version:45478" => 1077,
- "old:virtual_from_version:47044" => 3017,
- "old:virtual_from_version:49347" => 1404,
- "old:virtual_from_version:42006" => 1037,
- "old:virtual_from_version:47959" => 1649,
- "old:virtual_from_version:39103" => 1144,
- "old:virtual_from_version:42234" => 1077,
- "old:virtual_from_version:46537" => 1070,
- "old:virtual_from_version:50424" => 3131,
- "old:virtual_from_version:49670" => 1689,
- "old:virtual_from_version:44665" => 1037,
- "old:virtual_from_version:49189" => 1404,
- "old:virtual_from_version:42650" => 1484,
- "old:virtual_from_version:40718" => 1077,
- "old:virtual_from_version:47953" => 1107,
- "old:virtual_from_version:40430" => 1009,
- "old:virtual_from_version:49076" => 1083,
- "old:virtual_from_version:50373" => 1032,
- "old:virtual_from_version:50379" => 1689,
- "old:virtual_from_version:45401" => 1136,
- "old:virtual_from_version:42933" => 1070,
- "old:virtual_from_version:49129" => 1585,
- "old:virtual_from_version:44001" => 1070,
- "old:virtual_from_version:50446" => 3189,
- "old:virtual_from_version:45486" => 1136,
- "old:virtual_from_version:45763" => 1077,
- "old:virtual_from_version:40702" => 1081,
- "old:virtual_from_version:40613" => 1109,
- "old:virtual_from_version:50030" => 3131,
- "old:virtual_from_version:46243" => 1009,
- "old:virtual_from_version:38918" => 1077,
- "old:virtual_from_version:13305" => 1063,
- "old:virtual_from_version:49044" => 1077,
- "old:virtual_from_version:46970" => 1077,
- "old:virtual_from_version:39902" => 1125,
- "old:virtual_from_version:46923" => 1109,
- "old:virtual_from_version:49701" => 1037,
- "old:virtual_from_version:46338" => 1110,
- "old:virtual_from_version:42136" => 1070,
- "old:virtual_from_version:45242" => 1065,
- "old:virtual_from_version:39604" => 1109,
- "old:virtual_from_version:45677" => 1125,
- "old:virtual_from_version:47778" => 1037,
- "old:virtual_from_version:46733" => 1077,
- "old:virtual_from_version:47564" => 1537,
- "old:virtual_from_version:44379" => 1022,
- "old:virtual_from_version:49943" => 1150,
- "old:virtual_from_version:44021" => 1037,
- "old:virtual_from_version:49015" => 1070,
- "old:virtual_from_version:47694" => 1070,
- "old:virtual_from_version:47091" => 1070,
- "old:virtual_from_version:13426" => 1067,
- "old:virtual_from_version:47439" => 1621,
- "old:virtual_from_version:46784" => 1070,
- "old:virtual_from_version:44631" => 1136,
- "old:virtual_from_version:46801" => 1659,
- "old:virtual_from_version:44477" => 1070,
- "old:virtual_from_version:50551" => 1125,
- "old:virtual_from_version:45425" => 1070,
- "old:virtual_from_version:40305" => 1112,
- "old:virtual_from_version:45770" => 1012,
- "old:virtual_from_version:40734" => 1016,
- "old:virtual_from_version:47017" => 1112,
- "old:virtual_from_version:50352" => 1070,
- "old:virtual_from_version:44313" => 1037,
- "old:virtual_from_version:42338" => 1404,
- "old:virtual_from_version:42017" => 1009,
- "old:virtual_from_version:49878" => 1314,
- "old:virtual_from_version:50083" => 3222,
- "old:virtual_from_version:50508" => 1035,
- "old:virtual_from_version:49644" => 3186,
- "old:virtual_from_version:44451" => 1530,
- "old:virtual_from_version:40706" => 1077,
- "old:virtual_from_version:45010" => 1150,
- "old:virtual_from_version:44457" => 1107,
- "old:virtual_from_version:46905" => 1070,
- "old:virtual_from_version:47785" => 1070,
- "old:virtual_from_version:46321" => 1077,
- "old:virtual_from_version:44852" => 1048,
- "old:virtual_from_version:44508" => 1321,
- "old:virtual_from_version:45055" => 1065,
- "old:virtual_from_version:39997" => 1035,
- "old:virtual_from_version:42029" => 1222,
- "old:virtual_from_version:42663" => 1009,
- "old:virtual_from_version:46657" => 1077,
- "old:virtual_from_version:46896" => 1353,
- "old:virtual_from_version:42507" => 1077,
- "old:virtual_from_version:45259" => 1048,
- "old:virtual_from_version:42188" => 1172,
- "old:virtual_from_version:48019" => 2119,
- "old:virtual_from_version:42209" => 1025,
- "old:virtual_from_version:46880" => 1397,
- "old:virtual_from_version:50465" => 1070,
- "old:virtual_from_version:49739" => 1583,
- "old:virtual_from_version:45371" => 1314,
- "old:virtual_from_version:46171" => 1537,
- "old:virtual_from_version:46810" => 1067,
- "old:virtual_from_version:45059" => 1067,
- "old:virtual_from_version:50217" => 3227,
- "old:virtual_from_version:39354" => 1115,
- "old:virtual_from_version:49157" => 1070,
- "old:virtual_from_version:44322" => 1125,
- "old:virtual_from_version:42746" => 1077,
- "old:virtual_from_version:45687" => 1615,
- "old:virtual_from_version:50597" => 1070,
- "old:virtual_from_version:42479" => 1025,
- "old:virtual_from_version:49339" => 3136,
- "old:virtual_from_version:46926" => 1070,
- "old:virtual_from_version:42605" => 1484,
- "old:virtual_from_version:42105" => 1077,
- "old:virtual_from_version:49476" => 1070,
- "old:virtual_from_version:40692" => 1016,
- "old:virtual_from_version:49496" => 1507,
- "old:virtual_from_version:47003" => 1077,
- "old:virtual_from_version:45792" => 1023,
- "old:virtual_from_version:50453" => 1150,
- "old:virtual_from_version:44890" => 1000,
- "old:virtual_from_version:47232" => 1109,
- "old:virtual_from_version:46702" => 1009,
- "old:virtual_from_version:44378" => 1517,
- "old:virtual_from_version:42582" => 1172,
- "old:virtual_from_version:46247" => 1077,
- "old:virtual_from_version:45161" => 1009,
- "old:virtual_from_version:42262" => 1077,
- "old:virtual_from_version:44521" => 1067,
- "old:virtual_from_version:44338" => 1070,
- "old:virtual_from_version:49802" => 3191,
- "old:virtual_from_version:47624" => 1084,
- "old:virtual_from_version:42423" => 1070,
- "old:virtual_from_version:46511" => 1125,
- "old:virtual_from_version:46817" => 1070,
- "old:virtual_from_version:44284" => 1067,
- "old:virtual_from_version:30037" => 1036,
- "old:virtual_from_version:50325" => 3237,
- "old:virtual_from_version:47149" => 3022,
- "old:virtual_from_version:47900" => 1583,
- "old:virtual_from_version:46573" => 1077,
- "old:virtual_from_version:50411" => 3131,
- "old:virtual_from_version:46419" => 1070,
- "old:virtual_from_version:38247" => 1025,
- "old:virtual_from_version:44690" => 1077,
- "old:virtual_from_version:42644" => 1062,
- "old:virtual_from_version:38625" => 1125,
- "old:virtual_from_version:46666" => 1077,
- "old:virtual_from_version:40397" => 1347,
- "old:virtual_from_version:39628" => 1012,
- "old:virtual_from_version:46331" => 1107,
- "old:virtual_from_version:40963" => 1077,
- "old:virtual_from_version:46809" => 1070,
- "old:virtual_from_version:44106" => 1070,
- "old:virtual_from_version:42186" => 1062,
- "old:virtual_from_version:49856" => 3131,
- "old:virtual_from_version:47556" => 3062,
- "old:virtual_from_version:45382" => 1404,
- "old:virtual_from_version:46890" => 1067,
- "old:virtual_from_version:45818" => 1009,
- "old:virtual_from_version:50045" => 3131,
- "old:virtual_from_version:50016" => 1100,
- "old:virtual_from_version:45003" => 1012,
- "old:virtual_from_version:43053" => 2055,
- "old:virtual_from_version:45459" => 1109,
- "old:virtual_from_version:42689" => 1037,
- "old:virtual_from_version:49478" => 1580,
- "old:virtual_from_version:42476" => 1070,
- "old:virtual_from_version:45717" => 1070,
- "old:virtual_from_version:42211" => 1037,
- "old:virtual_from_version:44840" => 1009,
- "old:virtual_from_version:50601" => 1417,
- "old:virtual_from_version:45468" => 1009,
- "old:virtual_from_version:42473" => 1105,
- "old:virtual_from_version:46330" => 1070,
- "old:virtual_from_version:47960" => 1070,
- "old:virtual_from_version:38682" => 1404,
- "old:virtual_from_version:49560" => 1025,
- "old:virtual_from_version:46582" => 1125,
- "old:virtual_from_version:42101" => 1070,
- "old:virtual_from_version:46508" => 1583,
- "old:virtual_from_version:46610" => 1172,
- "old:virtual_from_version:50553" => 1070,
- "old:virtual_from_version:47056" => 1077,
- "old:virtual_from_version:46687" => 1172,
- "old:virtual_from_version:47258" => 1587,
- "old:virtual_from_version:50617" => 1417,
- "old:virtual_from_version:47701" => 1125,
- "old:virtual_from_version:40096" => 1067,
- "old:virtual_from_version:46861" => 1070,
- "old:virtual_from_version:42391" => 1025,
- "old:virtual_from_version:44186" => 1107,
- "old:virtual_from_version:49218" => 1077,
- "old:virtual_from_version:40624" => 1067,
- "old:virtual_from_version:42114" => 1070,
- "old:virtual_from_version:47530" => 1404,
- "old:virtual_from_version:49835" => 3131,
- "old:virtual_from_version:47094" => 1009,
- "old:virtual_from_version:40877" => 1070,
- "old:virtual_from_version:45934" => 1077,
- "old:virtual_from_version:44926" => 1067,
- "old:virtual_from_version:45884" => 1077,
- "old:virtual_from_version:38833" => 1109,
- "old:virtual_from_version:49462" => 1580,
- "old:virtual_from_version:42016" => 1070,
- "old:virtual_from_version:46153" => 1404,
- "old:virtual_from_version:40608" => 1381,
- "old:virtual_from_version:49882" => 1069,
- "old:virtual_from_version:44212" => 1026,
- "old:virtual_from_version:40110" => 1009,
- "old:virtual_from_version:40910" => 1037,
- "old:virtual_from_version:49798" => 1100,
- "old:virtual_from_version:42634" => 1037,
- "old:virtual_from_version:45477" => 1025,
- "old:virtual_from_version:49238" => 1615,
- "old:virtual_from_version:49924" => 3186,
- "old:virtual_from_version:44275" => 1110,
- "old:virtual_from_version:42167" => 1417,
- "old:virtual_from_version:49515" => 1105,
- "old:virtual_from_version:47662" => 1077,
- "old:virtual_from_version:50581" => 1031,
- "old:virtual_from_version:40855" => 1070,
- "old:virtual_from_version:44965" => 1007,
- "old:virtual_from_version:42138" => 1009,
- "old:virtual_from_version:43005" => 2030,
- "old:virtual_from_version:45342" => 1172,
- "old:virtual_from_version:49003" => 1077,
- "old:virtual_from_version:50733" => 1006,
- "old:virtual_from_version:42751" => 1009,
- "old:virtual_from_version:46607" => 1537,
- "old:virtual_from_version:44929" => 1070,
- "old:virtual_from_version:49228" => 1404,
- "old:virtual_from_version:44805" => 1172,
- "old:virtual_from_version:44781" => 1077,
- "old:virtual_from_version:50350" => 3131,
- "old:virtual_from_version:49785" => 1689,
- "old:virtual_from_version:42584" => 1008,
- "old:virtual_from_version:38347" => 1013,
- "old:virtual_from_version:46738" => 1025,
- "old:virtual_from_version:41009" => 2020,
- "old:virtual_from_version:45082" => 1528,
- "old:virtual_from_version:50154" => 1070,
- "old:virtual_from_version:50409" => 1585,
- "old:virtual_from_version:45754" => 1125,
- "old:virtual_from_version:45605" => 1110,
- "old:virtual_from_version:49414" => 1109,
- "old:virtual_from_version:47100" => 1689,
- "old:virtual_from_version:49460" => 1172,
- "old:virtual_from_version:44760" => 1009,
- "old:virtual_from_version:49576" => 1533,
- "old:virtual_from_version:50735" => 1417,
- "old:virtual_from_version:44062" => 1077,
- "old:virtual_from_version:40403" => 1353,
- "old:virtual_from_version:45031" => 1012,
- "old:virtual_from_version:47695" => 1109,
- "old:virtual_from_version:47329" => 1077,
- "old:virtual_from_version:47799" => 1321,
- "old:virtual_from_version:40978" => 1048,
- "old:virtual_from_version:40386" => 1110,
- "old:virtual_from_version:46445" => 1105,
- "old:virtual_from_version:49566" => 1381,
- "old:virtual_from_version:44024" => 1077,
- "old:virtual_from_version:49174" => 1404,
- "old:virtual_from_version:42202" => 1077,
- "old:virtual_from_version:42278" => 1077,
- "old:virtual_from_version:49935" => 1070,
- "old:virtual_from_version:46041" => 1488,
- "old:virtual_from_version:45482" => 1125,
- "old:virtual_from_version:46822" => 1509,
- "old:virtual_from_version:43016" => 2041,
- "old:virtual_from_version:42179" => 1107,
- "old:virtual_from_version:44800" => 1321,
- "old:virtual_from_version:42912" => 1035,
- "old:virtual_from_version:42567" => 1025,
- "old:virtual_from_version:45237" => 1172,
- "old:virtual_from_version:50415" => 1037,
- "old:virtual_from_version:50166" => 1404,
- "old:virtual_from_version:50280" => 1107,
- "old:virtual_from_version:45539" => 1025,
- "old:virtual_from_version:49232" => 1105,
- "old:virtual_from_version:47961" => 1109,
- "old:virtual_from_version:46426" => 1077,
- "old:virtual_from_version:40942" => 1077,
- "old:virtual_from_version:47731" => 1565,
- "old:virtual_from_version:46634" => 1070,
- "old:virtual_from_version:49603" => 1172,
- "old:virtual_from_version:50535" => 1084,
- "old:virtual_from_version:46804" => 1125,
- "old:virtual_from_version:42759" => 1070,
- "old:virtual_from_version:45057" => 1048,
- "old:virtual_from_version:3905 " => 1052,
- "old:virtual_from_version:44082" => 1070,
- "old:virtual_from_version:38434" => 1114,
- "old:virtual_from_version:46551" => 1172,
- "old:virtual_from_version:40688" => 1076,
- "old:virtual_from_version:45789" => 1070,
- "old:virtual_from_version:46773" => 1077,
- "old:virtual_from_version:43023" => 2048,
- "old:virtual_from_version:44375" => 1019,
- "old:virtual_from_version:46176" => 1537,
- "old:virtual_from_version:45391" => 1051,
- "old:virtual_from_version:42481" => 1037,
- "old:virtual_from_version:47405" => 1070,
- "old:virtual_from_version:50289" => 3222,
- "old:virtual_from_version:45854" => 1517,
- "old:virtual_from_version:45640" => 1136,
- "old:virtual_from_version:49470" => 1136,
- "old:virtual_from_version:44224" => 1037,
- "old:virtual_from_version:44973" => 1030,
- "old:virtual_from_version:50755" => 1070,
- "old:virtual_from_version:44242" => 1037,
- "old:virtual_from_version:46196" => 1070,
- "old:virtual_from_version:44941" => 1005,
- "old:virtual_from_version:47075" => 3008,
- "old:virtual_from_version:45218" => 1573,
- "old:virtual_from_version:50116" => 3191,
- "old:virtual_from_version:46170" => 1077,
- "old:virtual_from_version:47692" => 1025,
- "old:virtual_from_version:46450" => 1048,
- "old:virtual_from_version:50444" => 3245,
- "old:virtual_from_version:40722" => 1009,
- "old:virtual_from_version:50518" => 1311,
- "old:virtual_from_version:49472" => 1009,
- "old:virtual_from_version:49142" => 1077,
- "old:virtual_from_version:46337" => 1070,
- "old:virtual_from_version:44426" => 1065,
- "old:virtual_from_version:49139" => 1077,
- "old:virtual_from_version:45784" => 1029,
- "old:virtual_from_version:50662" => 1407,
- "old:virtual_from_version:45873" => 1009,
- "old:virtual_from_version:49572" => 1158,
- "old:virtual_from_version:47869" => 1141,
- "old:virtual_from_version:50357" => 1125,
- "old:virtual_from_version:49172" => 1172,
- "old:virtual_from_version:47644" => 1584,
- "old:virtual_from_version:50108" => 1158,
- "old:virtual_from_version:42436" => 1025,
- "old:virtual_from_version:46267" => 1077,
- "old:virtual_from_version:31197" => 1037,
- "old:virtual_from_version:46587" => 1006,
- "old:virtual_from_version:49712" => 1107,
- "old:virtual_from_version:42387" => 1172,
- "old:virtual_from_version:42596" => 1067,
- "old:virtual_from_version:45828" => 1125,
- "old:virtual_from_version:44111" => 1037,
- "old:virtual_from_version:40492" => 1037,
- "old:virtual_from_version:42534" => 1109,
- "old:virtual_from_version:42875" => 1146,
- "old:virtual_from_version:47319" => 1659,
- "old:virtual_from_version:42166" => 1009,
- "old:virtual_from_version:43091" => 2070,
- "old:virtual_from_version:50031" => 1007,
- "old:virtual_from_version:44134" => 1107,
- "old:virtual_from_version:46824" => 1070,
- "old:virtual_from_version:40761" => 1077,
- "old:virtual_from_version:46269" => 1574,
- "old:virtual_from_version:46919" => 1009,
- "old:virtual_from_version:46844" => 1172,
- "old:virtual_from_version:49180" => 1584,
- "old:virtual_from_version:49288" => 3151,
- "old:virtual_from_version:47396" => 1037,
- "old:virtual_from_version:46997" => 1626,
- "old:virtual_from_version:42641" => 1025,
- "old:virtual_from_version:45217" => 1572,
- "old:virtual_from_version:47722" => 1077,
- "old:virtual_from_version:50368" => 1689,
- "old:virtual_from_version:50486" => 3234,
- "old:virtual_from_version:40575" => 1109,
- "old:virtual_from_version:46847" => 1125,
- "old:virtual_from_version:47586" => 1125,
- "old:virtual_from_version:42182" => 1125,
- "old:virtual_from_version:46981" => 1077,
- "old:virtual_from_version:42355" => 1051,
- "old:virtual_from_version:49893" => 3131,
- "old:virtual_from_version:49341" => 1070,
- "old:virtual_from_version:42903" => 1077,
- "old:virtual_from_version:42991" => 1037,
- "old:virtual_from_version:45573" => 1172,
- "old:virtual_from_version:50591" => 1070,
- "old:virtual_from_version:42977" => 1109,
- "old:virtual_from_version:42817" => 1037,
- "old:virtual_from_version:42158" => 1070,
- "old:virtual_from_version:45450" => 1009,
- "old:virtual_from_version:44643" => 1070,
- "old:virtual_from_version:50429" => 1076,
- "old:virtual_from_version:38535" => 1070,
- "old:virtual_from_version:47888" => 1070,
- "old:virtual_from_version:38885" => 1136,
- "old:virtual_from_version:50195" => 1070,
- "old:virtual_from_version:46185" => 1070,
- "old:virtual_from_version:45872" => 1067,
- "old:virtual_from_version:46026" => 1077,
- "old:virtual_from_version:50635" => 3269,
- "old:virtual_from_version:49824" => 3120,
- "old:virtual_from_version:42329" => 1051,
- "old:virtual_from_version:47081" => 1585,
- "old:virtual_from_version:45705" => 1077,
- "old:virtual_from_version:47456" => 1321,
- "old:virtual_from_version:38841" => 1094,
- "old:virtual_from_version:49917" => 3131,
- "old:virtual_from_version:46427" => 1537,
- "old:virtual_from_version:50603" => 1587,
- "old:virtual_from_version:47438" => 1381,
- "old:virtual_from_version:50511" => 3247,
- "old:virtual_from_version:40286" => 1172,
- "old:virtual_from_version:42670" => 1037,
- "old:virtual_from_version:42074" => 1110,
- "old:virtual_from_version:38442" => 1404,
- "old:virtual_from_version:44452" => 1527,
- "old:virtual_from_version:40566" => 1070,
- "old:virtual_from_version:49773" => 3197,
- "old:virtual_from_version:50546" => 3201,
- "old:virtual_from_version:45043" => 1027,
- "old:virtual_from_version:42709" => 1009,
- "old:virtual_from_version:39312" => 1070,
- "old:virtual_from_version:46924" => 1077,
- "old:virtual_from_version:42766" => 1107,
- "old:virtual_from_version:50731" => 1070,
- "old:virtual_from_version:46669" => 1077,
- "old:virtual_from_version:45231" => 1576,
- "old:virtual_from_version:35686" => 1101,
- "old:virtual_from_version:44592" => 1107,
- "old:virtual_from_version:47811" => 3094,
- "old:virtual_from_version:46112" => 1077,
- "old:virtual_from_version:49312" => 1150,
- "old:virtual_from_version:49645" => 3183,
- "old:virtual_from_version:44887" => 1009,
- "old:virtual_from_version:49501" => 1125,
- "old:virtual_from_version:49466" => 1009,
- "old:virtual_from_version:42671" => 1488,
- "old:virtual_from_version:50717" => 1105,
- "old:virtual_from_version:40883" => 1067,
- "old:virtual_from_version:13410" => 1065,
- "old:virtual_from_version:50401" => 3227,
- "old:virtual_from_version:49753" => 3194,
- "old:virtual_from_version:46564" => 1077,
- "old:virtual_from_version:39371" => 1144,
- "old:virtual_from_version:49173" => 1077,
- "old:virtual_from_version:46433" => 1025,
- "old:virtual_from_version:44250" => 1025,
- "old:virtual_from_version:50131" => 1172,
- "old:virtual_from_version:46236" => 1574,
- "old:virtual_from_version:44433" => 1070,
- "old:virtual_from_version:44368" => 1010,
- "old:virtual_from_version:47562" => 1077,
- "old:virtual_from_version:46114" => 1461,
- "old:virtual_from_version:44092" => 1067,
- "old:virtual_from_version:42895" => 1109,
- "old:virtual_from_version:46221" => 1070,
- "old:virtual_from_version:49179" => 1583,
- "old:virtual_from_version:44563" => 1077,
- "old:virtual_from_version:49404" => 1105,
- "old:virtual_from_version:42837" => 1497,
- "old:virtual_from_version:46831" => 1110,
- "old:virtual_from_version:40703" => 1070,
- "old:virtual_from_version:50701" => 3272,
- "old:virtual_from_version:50575" => 1125,
- "old:virtual_from_version:44638" => 1009,
- "old:virtual_from_version:50665" => 1555,
- "old:virtual_from_version:42976" => 1037,
- "old:virtual_from_version:49436" => 1580,
- "old:virtual_from_version:42034" => 1112,
- "old:virtual_from_version:44046" => 1009,
- "old:virtual_from_version:47611" => 1070,
- "old:virtual_from_version:49622" => 1532,
- "old:virtual_from_version:50365" => 3240,
- "old:virtual_from_version:44419" => 1077,
- "old:virtual_from_version:47150" => 3028,
- "old:virtual_from_version:50670" => 3208,
- "old:virtual_from_version:49323" => 3136,
- "old:virtual_from_version:45612" => 1172,
- "old:virtual_from_version:46843" => 1067,
- "old:virtual_from_version:47661" => 1109,
- "old:virtual_from_version:44091" => 1109,
- "old:virtual_from_version:44947" => 1094,
- "old:virtual_from_version:50541" => 1580,
- "old:virtual_from_version:46914" => 3007,
- "old:virtual_from_version:50530" => 1125,
- "old:virtual_from_version:40886" => 1070,
- "old:virtual_from_version:50322" => 1311,
- "old:virtual_from_version:42457" => 1035,
- "old:virtual_from_version:42220" => 1077,
- "old:virtual_from_version:44096" => 1077,
- "old:virtual_from_version:46524" => 1107,
- "old:virtual_from_version:50006" => 3131,
- "old:virtual_from_version:45883" => 1009,
- "old:virtual_from_version:42362" => 1070,
- "old:virtual_from_version:42892" => 1025,
- "old:virtual_from_version:42472" => 1048,
- "old:virtual_from_version:45393" => 1404,
- "old:virtual_from_version:43054" => 2056,
- "old:virtual_from_version:49850" => 1172,
- "old:virtual_from_version:44191" => 1037,
- "old:virtual_from_version:42764" => 1494,
- "old:virtual_from_version:47029" => 3008,
- "old:virtual_from_version:46367" => 1444,
- "old:virtual_from_version:42295" => 1427,
- "old:virtual_from_version:46562" => 1125,
- "old:virtual_from_version:46530" => 1091,
- "old:virtual_from_version:50507" => 3261,
- "old:virtual_from_version:45441" => 1062,
- "old:virtual_from_version:44318" => 1520,
- "old:virtual_from_version:46195" => 1630,
- "old:virtual_from_version:50604" => 1689,
- "old:virtual_from_version:44358" => 1125,
- "old:virtual_from_version:47306" => 3042,
- "old:virtual_from_version:44494" => 1070,
- "old:virtual_from_version:45544" => 1076,
- "old:virtual_from_version:45718" => 1007,
- "old:virtual_from_version:47455" => 3043,
- "old:virtual_from_version:49635" => 3139,
- "old:virtual_from_version:40711" => 1025,
- "old:virtual_from_version:45463" => 1404,
- "old:virtual_from_version:45903" => 1632,
- "old:virtual_from_version:50118" => 1070,
- "old:virtual_from_version:45700" => 1019,
- "old:virtual_from_version:43062" => 2063,
- "old:virtual_from_version:46279" => 1077,
- "old:virtual_from_version:49274" => 1077,
- "old:virtual_from_version:40791" => 1370,
- "old:virtual_from_version:49787" => 3194,
- "old:virtual_from_version:40861" => 1070,
- "old:virtual_from_version:42439" => 1037,
- "old:virtual_from_version:50129" => 3224,
- "old:virtual_from_version:47592" => 1077,
- "old:virtual_from_version:42974" => 1025,
- "old:virtual_from_version:46160" => 1659,
- "old:virtual_from_version:50073" => 3221,
- "old:virtual_from_version:49050" => 1689,
- "old:virtual_from_version:42651" => 1487,
- "old:virtual_from_version:46525" => 1048,
- "old:virtual_from_version:44502" => 1009,
- "old:virtual_from_version:42798" => 1110,
- "old:virtual_from_version:47126" => 1444,
- "old:virtual_from_version:45006" => 1077,
- "old:virtual_from_version:40287" => 1107,
- "old:virtual_from_version:39235" => 1061,
- "old:virtual_from_version:44894" => 1125,
- "old:virtual_from_version:42297" => 1429,
- "old:virtual_from_version:10003" => 2002,
- "old:virtual_from_version:49201" => 1070,
- "old:virtual_from_version:47092" => 1125,
- "old:virtual_from_version:49574" => 1158,
- "old:virtual_from_version:46109" => 1077,
- "old:virtual_from_version:47127" => 1585,
- "old:virtual_from_version:42384" => 1077,
- "old:virtual_from_version:43050" => 2020,
- "old:virtual_from_version:45881" => 1630,
- "old:virtual_from_version:40642" => 1393,
- "old:virtual_from_version:47241" => 1109,
- "old:virtual_from_version:46072" => 1077,
- "old:virtual_from_version:45037" => 1115,
- "old:virtual_from_version:39709" => 1110,
- "old:virtual_from_version:44463" => 1048,
- "old:virtual_from_version:42455" => 1114,
- "old:virtual_from_version:45134" => 1009,
- "old:virtual_from_version:38631" => 1126,
- "old:virtual_from_version:47464" => 3008,
- "old:virtual_from_version:47909" => 3006,
- "old:virtual_from_version:50146" => 3058,
- "old:virtual_from_version:47104" => 1077,
- "old:virtual_from_version:50655" => 1555,
- "old:virtual_from_version:49717" => 1006,
- "old:virtual_from_version:49206" => 1136,
- "old:virtual_from_version:50724" => 1666,
- "old:virtual_from_version:45551" => 1077,
- "old:virtual_from_version:49735" => 3194,
- "old:virtual_from_version:47177" => 1638,
- "old:virtual_from_version:46910" => 1077,
- "old:virtual_from_version:44314" => 1062,
- "old:virtual_from_version:46025" => 1067,
- "old:virtual_from_version:46745" => 1070,
- "old:virtual_from_version:50215" => 3131,
- "old:virtual_from_version:46103" => 1077,
- "old:virtual_from_version:42463" => 1009,
- "old:virtual_from_version:42053" => 1110,
- "old:virtual_from_version:46770" => 1070,
- "old:virtual_from_version:39952" => 1107,
- "old:virtual_from_version:49726" => 1404,
- "old:virtual_from_version:42204" => 1070,
- "old:virtual_from_version:49883" => 1444,
- "old:virtual_from_version:50305" => 1067,
- "old:virtual_from_version:47892" => 1699,
- "old:virtual_from_version:45631" => 1136,
- "old:virtual_from_version:50547" => 3227,
- "old:virtual_from_version:42496" => 1067,
- "old:virtual_from_version:49299" => 3008,
- "old:virtual_from_version:42279" => 1037,
- "old:virtual_from_version:47842" => 3094,
- "old:virtual_from_version:40568" => 1077,
- "old:virtual_from_version:49289" => 3146,
- "old:virtual_from_version:47896" => 1125,
- "old:virtual_from_version:50550" => 3259,
- "old:virtual_from_version:50460" => 1580,
- "old:virtual_from_version:44487" => 1007,
- "old:virtual_from_version:45087" => 1565,
- "old:virtual_from_version:42394" => 1067,
- "old:virtual_from_version:50019" => 3131,
- "old:virtual_from_version:44702" => 1037,
- "old:virtual_from_version:49536" => 1105,
- "old:virtual_from_version:45514" => 1077,
- "old:virtual_from_version:44437" => 1109,
- "old:virtual_from_version:38857" => 1404,
- "old:virtual_from_version:42923" => 1077,
- "old:virtual_from_version:40989" => 1037,
- "old:virtual_from_version:42161" => 1057,
- "old:virtual_from_version:47539" => 1077,
- "old:virtual_from_version:49654" => 1489,
- "old:virtual_from_version:47596" => 1125,
- "old:virtual_from_version:46931" => 1105,
- "old:virtual_from_version:39706" => 1077,
- "old:virtual_from_version:39537" => 1172,
- "old:virtual_from_version:46425" => 1112,
- "old:virtual_from_version:49981" => 1314,
- "old:virtual_from_version:46697" => 1077,
- "old:virtual_from_version:45834" => 1621,
- "old:virtual_from_version:39274" => 1107,
- "old:virtual_from_version:49642" => 1069,
- "old:virtual_from_version:44689" => 1025,
- "old:virtual_from_version:47382" => 1125,
- "old:virtual_from_version:46095" => 1136,
- "old:virtual_from_version:46216" => 1077,
- "old:virtual_from_version:47039" => 1070,
- "old:virtual_from_version:46677" => 1070,
- "old:virtual_from_version:42834" => 1418,
- "old:virtual_from_version:49618" => 3184,
- "old:virtual_from_version:49806" => 3131,
- "old:virtual_from_version:40514" => 1048,
- "old:virtual_from_version:47059" => 1065,
- "old:virtual_from_version:45086" => 1077,
- "old:virtual_from_version:45885" => 1070,
- "old:virtual_from_version:46848" => 1067,
- "old:virtual_from_version:49122" => 1105,
- "old:virtual_from_version:46819" => 1077,
- "old:virtual_from_version:29531" => 1083,
- "old:virtual_from_version:45380" => 1009,
- "old:virtual_from_version:40737" => 1081,
- "old:virtual_from_version:47276" => 1689,
- "old:virtual_from_version:45931" => 1070,
- "old:virtual_from_version:44559" => 1037,
- "old:virtual_from_version:45796" => 1027,
- "old:virtual_from_version:43018" => 2043,
- "old:virtual_from_version:42868" => 1067,
- "old:virtual_from_version:42283" => 1425,
- "old:virtual_from_version:46256" => 1077,
- "old:virtual_from_version:44073" => 1107,
- "old:virtual_from_version:44860" => 1553,
- "old:virtual_from_version:47489" => 1077,
- "old:virtual_from_version:44042" => 1037,
- "old:virtual_from_version:47957" => 1689,
- "old:virtual_from_version:46803" => 1070,
- "old:virtual_from_version:38996" => 1078,
- "old:virtual_from_version:47054" => 1015,
- "old:virtual_from_version:50055" => 1006,
- "old:virtual_from_version:42210" => 1077,
- "old:virtual_from_version:42784" => 1037,
- "old:virtual_from_version:42898" => 1077,
- "old:virtual_from_version:47537" => 1109,
- "old:virtual_from_version:45577" => 1404,
- "old:virtual_from_version:44098" => 1067,
- "old:virtual_from_version:47616" => 1537,
- "old:virtual_from_version:42866" => 1037,
- "old:virtual_from_version:42245" => 1077,
- "old:virtual_from_version:42772" => 1077,
- "old:virtual_from_version:44716" => 1076,
- "old:virtual_from_version:44745" => 1006,
- "old:virtual_from_version:44540" => 1009,
- "old:virtual_from_version:46932" => 1077,
- "old:virtual_from_version:43047" => 2003,
- "old:virtual_from_version:47806" => 1105,
- "old:virtual_from_version:47014" => 1070,
- "old:virtual_from_version:50007" => 3215,
- "old:virtual_from_version:46501" => 1537,
- "old:virtual_from_version:47225" => 1689,
- "old:virtual_from_version:49895" => 1069,
- "old:virtual_from_version:42377" => 1037,
- "old:virtual_from_version:47236" => 1109,
- "old:virtual_from_version:45090" => 1517,
- "old:virtual_from_version:46627" => 1077,
- "old:virtual_from_version:49615" => 1404,
- "old:virtual_from_version:46148" => 1070,
- "old:virtual_from_version:44567" => 1009,
- "old:virtual_from_version:44203" => 1067,
- "old:virtual_from_version:44273" => 1077,
- "old:virtual_from_version:42978" => 1067,
- "old:virtual_from_version:47510" => 1077,
- "old:virtual_from_version:45029" => 1010,
- "old:virtual_from_version:44627" => 1077,
- "old:virtual_from_version:44083" => 1009,
- "old:virtual_from_version:45547" => 1070,
- "old:virtual_from_version:45103" => 1077,
- "old:virtual_from_version:44548" => 1037,
- "old:virtual_from_version:47214" => 1172,
- "old:virtual_from_version:42155" => 1077,
- "old:virtual_from_version:40488" => 1037,
- "old:virtual_from_version:46464" => 1362,
- "old:virtual_from_version:38949" => 1070,
- "old:virtual_from_version:49816" => 1057,
- "old:virtual_from_version:46717" => 1697,
- "old:virtual_from_version:46238" => 1659,
- "old:virtual_from_version:47545" => 1070,
- "old:virtual_from_version:47114" => 3020,
- "old:virtual_from_version:45591" => 1136,
- "old:virtual_from_version:40525" => 1077,
- "old:virtual_from_version:42025" => 1109,
- "old:virtual_from_version:50010" => 1012,
- "old:virtual_from_version:42771" => 1025,
- "old:virtual_from_version:42807" => 1025,
- "old:virtual_from_version:40794" => 1069,
- "old:virtual_from_version:46423" => 1070,
- "old:virtual_from_version:38417" => 1077,
- "old:virtual_from_version:42183" => 1077,
- "old:virtual_from_version:39575" => 1110,
- "old:virtual_from_version:45923" => 1048,
- "old:virtual_from_version:50459" => 1532,
- "old:virtual_from_version:50056" => 3131,
- "old:virtual_from_version:49906" => 3078,
- "old:virtual_from_version:50001" => 1689,
- "old:virtual_from_version:39148" => 1077,
- "old:virtual_from_version:49459" => 1062,
- "old:virtual_from_version:44809" => 1070,
- "old:virtual_from_version:42792" => 1070,
- "old:virtual_from_version:45656" => 1076,
- "old:virtual_from_version:49926" => 3209,
- "old:virtual_from_version:46310" => 1025,
- "old:virtual_from_version:42879" => 1009,
- "old:virtual_from_version:42840" => 1009,
- "old:virtual_from_version:44722" => 1067,
- "old:virtual_from_version:50420" => 1037,
- "old:virtual_from_version:47403" => 1697,
- "old:virtual_from_version:46789" => 1125,
- "old:virtual_from_version:50042" => 1009,
- "old:virtual_from_version:40945" => 1009,
- "old:virtual_from_version:42462" => 1007,
- "old:virtual_from_version:50372" => 3008,
- "old:virtual_from_version:46198" => 1404,
- "old:virtual_from_version:46384" => 1402,
- "old:virtual_from_version:42995" => 1070,
- "old:virtual_from_version:47067" => 1070,
- "old:virtual_from_version:47132" => 1125,
- "old:virtual_from_version:40483" => 1369,
- "old:virtual_from_version:40844" => 1410,
- "old:virtual_from_version:40823" => 1067,
- "old:virtual_from_version:42593" => 1077,
- "old:virtual_from_version:47703" => 1077,
- "old:virtual_from_version:49161" => 1077,
- "old:virtual_from_version:39903" => 1077,
- "old:virtual_from_version:46715" => 1077,
- "old:virtual_from_version:46639" => 1070,
- "old:virtual_from_version:45495" => 1136,
- "old:virtual_from_version:40196" => 1007,
- "old:virtual_from_version:47333" => 1077,
- "old:virtual_from_version:42905" => 1109,
- "old:virtual_from_version:44440" => 1070,
- "old:virtual_from_version:44441" => 1009,
- "old:virtual_from_version:47933" => 1077,
- "old:virtual_from_version:42779" => 1077,
- "old:virtual_from_version:49938" => 1125,
- "old:virtual_from_version:46840" => 1025,
- "old:virtual_from_version:44741" => 1070,
- "old:virtual_from_version:44784" => 1025,
- "old:virtual_from_version:14391" => 1068,
- "old:virtual_from_version:42067" => 1025,
- "old:virtual_from_version:47363" => 1025,
- "old:virtual_from_version:45636" => 1172,
- "old:virtual_from_version:49166" => 1125,
- "old:virtual_from_version:45323" => 1110,
- "old:virtual_from_version:47829" => 1037,
- "old:virtual_from_version:46754" => 1070,
- "old:virtual_from_version:47776" => 1070,
- "old:virtual_from_version:45782" => 1587,
- "old:virtual_from_version:50178" => 1172,
- "old:virtual_from_version:44309" => 1009,
- "old:virtual_from_version:39885" => 1136,
- "old:virtual_from_version:50272" => 3131,
- "old:virtual_from_version:42356" => 1070,
- "old:virtual_from_version:45617" => 1172,
- "old:virtual_from_version:44568" => 1517,
- "old:virtual_from_version:46212" => 1070,
- "old:virtual_from_version:46289" => 1107,
- "old:virtual_from_version:40862" => 1077,
- "old:virtual_from_version:47506" => 1070,
- "old:virtual_from_version:46462" => 1125,
- "old:virtual_from_version:45084" => 1070,
- "old:virtual_from_version:39476" => 1081,
- "old:virtual_from_version:46352" => 1190,
- "old:virtual_from_version:50268" => 1488,
- "old:virtual_from_version:47242" => 1077,
- "old:virtual_from_version:45442" => 1150,
- "old:virtual_from_version:44724" => 1539,
- "old:virtual_from_version:47281" => 1172,
- "old:virtual_from_version:40594" => 1070,
- "old:virtual_from_version:46941" => 1125,
- "old:virtual_from_version:46411" => 1070,
- "old:virtual_from_version:46086" => 1017,
- "old:virtual_from_version:44647" => 1077,
- "old:virtual_from_version:50307" => 3131,
- "old:virtual_from_version:44787" => 1057,
- "old:virtual_from_version:42208" => 1070,
- "old:virtual_from_version:13404" => 1047,
- "old:virtual_from_version:50026" => 1125,
- "old:virtual_from_version:44856" => 1070,
- "old:virtual_from_version:44171" => 1070,
- "old:virtual_from_version:49974" => 3120,
- "old:virtual_from_version:44124" => 1107,
- "old:virtual_from_version:50738" => 1689,
- "old:virtual_from_version:42870" => 1025,
- "old:virtual_from_version:46446" => 1537,
- "old:virtual_from_version:40478" => 1070,
- "old:virtual_from_version:42413" => 1037,
- "old:virtual_from_version:50680" => 1583,
- "old:virtual_from_version:49439" => 1070,
- "old:virtual_from_version:50467" => 3009,
- "old:virtual_from_version:44337" => 1081,
- "old:virtual_from_version:42853" => 1504,
- "old:virtual_from_version:49291" => 1649,
- "old:virtual_from_version:45812" => 1574,
- "old:virtual_from_version:45565" => 1404,
- "old:virtual_from_version:46515" => 1070,
- "old:virtual_from_version:49499" => 3078,
- "old:virtual_from_version:46085" => 1070,
- "old:virtual_from_version:42196" => 1070,
- "old:virtual_from_version:45534" => 1489,
- "old:virtual_from_version:44029" => 1070,
- "old:virtual_from_version:44087" => 1009,
- "old:virtual_from_version:45034" => 1064,
- "old:virtual_from_version:50048" => 1444,
- "old:virtual_from_version:46992" => 1025,
- "old:virtual_from_version:45042" => 1025,
- "old:virtual_from_version:47243" => 1070,
- "old:virtual_from_version:49453" => 1444,
- "old:virtual_from_version:40536" => 1070,
- "old:virtual_from_version:45045" => 1077,
- "old:virtual_from_version:45395" => 1112,
- "old:virtual_from_version:42367" => 1413,
- "old:virtual_from_version:46424" => 1125,
- "old:virtual_from_version:40966" => 1048,
- "old:virtual_from_version:42777" => 1070,
- "old:virtual_from_version:49380" => 1077,
- "old:virtual_from_version:46476" => 1009,
- "old:virtual_from_version:46636" => 1067,
- "old:virtual_from_version:38617" => 1123,
- "old:virtual_from_version:44744" => 1070,
- "old:virtual_from_version:40749" => 1077,
- "old:virtual_from_version:47630" => 1109,
- "old:virtual_from_version:40738" => 1048,
- "old:virtual_from_version:47169" => 3031,
- "old:virtual_from_version:46549" => 1125,
- "old:virtual_from_version:45594" => 1009,
- "old:virtual_from_version:40969" => 1009,
- "old:virtual_from_version:49099" => 3136,
- "old:virtual_from_version:38342" => 1006,
- "old:virtual_from_version:44857" => 1077,
- "old:virtual_from_version:49693" => 1078,
- "old:virtual_from_version:44581" => 1009,
- "old:virtual_from_version:44905" => 1555,
- "old:virtual_from_version:44574" => 1070,
- "old:virtual_from_version:39605" => 1067,
- "old:virtual_from_version:44590" => 1037,
- "old:virtual_from_version:45317" => 1125,
- "old:virtual_from_version:50686" => 3259,
- "old:virtual_from_version:49236" => 1070,
- "old:virtual_from_version:42732" => 1037,
- "old:virtual_from_version:44370" => 1012,
- "old:virtual_from_version:42831" => 1077,
- "old:virtual_from_version:49220" => 1314,
- "old:virtual_from_version:47988" => 1009,
- "old:virtual_from_version:50061" => 1019,
- "old:virtual_from_version:42712" => 1311,
- "old:virtual_from_version:50279" => 3131,
- "old:virtual_from_version:46838" => 1172,
- "old:virtual_from_version:49626" => 1158,
- "old:virtual_from_version:44535" => 1077,
- "old:virtual_from_version:47951" => 3124,
- "old:virtual_from_version:40394" => 1136,
- "old:virtual_from_version:40294" => 1321,
- "old:virtual_from_version:45505" => 1580,
- "old:virtual_from_version:45953" => 1108,
- "old:virtual_from_version:50253" => 1489,
- "old:virtual_from_version:40691" => 1009,
- "old:virtual_from_version:50587" => 1417,
- "old:virtual_from_version:45007" => 1031,
- "old:virtual_from_version:50269" => 1078,
- "old:virtual_from_version:47293" => 1105,
- "old:virtual_from_version:40292" => 1048,
- "old:virtual_from_version:45460" => 1067,
- "old:virtual_from_version:42020" => 1037,
- "old:virtual_from_version:49903" => 1404,
- "old:virtual_from_version:46390" => 1172,
- "old:virtual_from_version:46277" => 1070,
- "old:virtual_from_version:46181" => 1537,
- "old:virtual_from_version:49117" => 1037,
- "old:virtual_from_version:42698" => 1037,
- "old:virtual_from_version:42228" => 1419,
- "old:virtual_from_version:44539" => 1070,
- "old:virtual_from_version:50421" => 1314,
- "old:virtual_from_version:42416" => 1070,
- "old:virtual_from_version:46252" => 1665,
- "old:virtual_from_version:40830" => 1077,
- "old:virtual_from_version:46316" => 1613,
- "old:virtual_from_version:46033" => 1410,
- "old:virtual_from_version:49241" => 1532,
- "old:virtual_from_version:45827" => 1362,
- "old:virtual_from_version:47257" => 1517,
- "old:virtual_from_version:46913" => 3007,
- "old:virtual_from_version:47080" => 1584,
- "old:virtual_from_version:47270" => 1037,
- "old:virtual_from_version:50167" => 1413,
- "old:virtual_from_version:44189" => 1025,
- "old:virtual_from_version:44899" => 1123,
- "old:virtual_from_version:42804" => 1070,
- "old:virtual_from_version:44917" => 1070,
- "old:virtual_from_version:46281" => 1077,
- "old:virtual_from_version:49348" => 3139,
- "old:virtual_from_version:44799" => 1321,
- "old:virtual_from_version:45305" => 1125,
- "old:virtual_from_version:44661" => 1077,
- "old:virtual_from_version:50754" => 3186,
- "old:virtual_from_version:44434" => 1009,
- "old:virtual_from_version:50104" => 1222,
- "old:virtual_from_version:49544" => 1404,
- "old:virtual_from_version:47037" => 1689,
- "old:virtual_from_version:50657" => 1009,
- "old:virtual_from_version:45859" => 1077,
- "old:virtual_from_version:49766" => 1077,
- "old:virtual_from_version:49147" => 1532,
- "old:virtual_from_version:40746" => 1070,
- "old:virtual_from_version:47217" => 1689,
- "old:virtual_from_version:50539" => 1404,
- "old:virtual_from_version:49751" => 1006,
- "old:virtual_from_version:42588" => 1062,
- "old:virtual_from_version:49984" => 1070,
- "old:virtual_from_version:47034" => 1555,
- "old:virtual_from_version:40895" => 1110,
- "old:virtual_from_version:46584" => 1689,
- "old:virtual_from_version:48027" => 2025,
- "old:virtual_from_version:33505" => 1081,
- "old:virtual_from_version:40922" => 1037,
- "old:virtual_from_version:47917" => 1109,
- "old:virtual_from_version:41007" => 2018,
- "old:virtual_from_version:40253" => 1110,
- "old:virtual_from_version:38358" => 1040,
- "old:virtual_from_version:45258" => 1081,
- "old:virtual_from_version:47985" => 1125,
- "old:virtual_from_version:44552" => 1107,
- "old:virtual_from_version:45053" => 1110,
- "old:virtual_from_version:40804" => 1025,
- "old:virtual_from_version:44765" => 1015,
- "old:virtual_from_version:49072" => 1083,
- "old:virtual_from_version:44891" => 1070,
- "old:virtual_from_version:48014" => 2114,
- "old:virtual_from_version:13342" => 1064,
- "old:virtual_from_version:47890" => 1109,
- "old:virtual_from_version:46206" => 1633,
- "old:virtual_from_version:46655" => 1007,
- "old:virtual_from_version:49467" => 1689,
- "old:virtual_from_version:38436" => 1006,
- "old:virtual_from_version:45548" => 1109,
- "old:virtual_from_version:42867" => 1109,
- "old:virtual_from_version:40179" => 1015,
- "old:virtual_from_version:47245" => 1037,
- "old:virtual_from_version:50306" => 1404,
- "old:virtual_from_version:47264" => 1689,
- "old:virtual_from_version:46556" => 1125,
- "old:virtual_from_version:40238" => 1144,
- "old:virtual_from_version:47262" => 1009,
- "old:virtual_from_version:47302" => 1580,
- "old:virtual_from_version:47320" => 1070,
- "old:virtual_from_version:46098" => 1649,
- "old:virtual_from_version:47552" => 1105,
- "old:virtual_from_version:47078" => 1077,
- "old:virtual_from_version:46594" => 1172,
- "old:virtual_from_version:38800" => 1110,
- "old:virtual_from_version:39510" => 1070,
- "old:virtual_from_version:47206" => 1109,
- "old:virtual_from_version:44207" => 1107,
- "old:virtual_from_version:44323" => 1070,
- "old:virtual_from_version:42688" => 1077,
- "old:virtual_from_version:49755" => 1070,
- "old:virtual_from_version:46930" => 1051,
- "old:virtual_from_version:42603" => 1105,
- "old:virtual_from_version:45735" => 1077,
- "old:virtual_from_version:46081" => 1415,
- "old:virtual_from_version:46001" => 1649,
- "old:virtual_from_version:47151" => 1007,
- "old:virtual_from_version:45266" => 1027,
- "old:virtual_from_version:47674" => 1109,
- "old:virtual_from_version:40563" => 1077,
- "old:virtual_from_version:46179" => 1077,
- "old:virtual_from_version:45318" => 1009,
- "old:virtual_from_version:44547" => 1077,
- "old:virtual_from_version:46410" => 1676,
- "old:virtual_from_version:44352" => 1037,
- "old:virtual_from_version:40739" => 1084,
- "old:virtual_from_version:40531" => 1077,
- "old:virtual_from_version:46978" => 1037,
- "old:virtual_from_version:46347" => 1555,
- "old:virtual_from_version:50523" => 1016,
- "old:virtual_from_version:42946" => 1037,
- "old:virtual_from_version:45137" => 1057,
- "old:virtual_from_version:47634" => 1585,
- "old:virtual_from_version:49687" => 1009,
- "old:virtual_from_version:50071" => 3131,
- "old:virtual_from_version:40473" => 1037,
- "old:virtual_from_version:47348" => 1109,
- "old:virtual_from_version:49834" => 3120,
- "old:virtual_from_version:44005" => 1500,
- "old:virtual_from_version:42041" => 1172,
- "old:virtual_from_version:46645" => 1537,
- "old:virtual_from_version:49235" => 1689,
- "old:virtual_from_version:49114" => 1070,
- "old:virtual_from_version:42872" => 1037,
- "old:virtual_from_version:49435" => 1555,
- "old:virtual_from_version:46865" => 3004,
- "old:virtual_from_version:42277" => 1069,
- "old:virtual_from_version:46595" => 1077,
- "old:virtual_from_version:45096" => 1517,
- "old:virtual_from_version:49227" => 1077,
- "old:virtual_from_version:42065" => 1048,
- "old:virtual_from_version:49690" => 1489,
- "old:virtual_from_version:39531" => 1069,
- "old:virtual_from_version:49149" => 1007,
- "old:virtual_from_version:49779" => 1404,
- "old:virtual_from_version:46326" => 1062,
- "old:virtual_from_version:44963" => 1065,
- "old:virtual_from_version:49945" => 1025,
- "old:virtual_from_version:50032" => 1070,
- "old:virtual_from_version:46137" => 1077,
- "old:virtual_from_version:50679" => 1417,
- "old:virtual_from_version:46011" => 1109,
- "old:virtual_from_version:47446" => 1621,
- "old:virtual_from_version:44371" => 1015,
- "old:virtual_from_version:49276" => 1616,
- "old:virtual_from_version:46030" => 1062,
- "old:virtual_from_version:47885" => 1077,
- "old:virtual_from_version:47542" => 1109,
- "old:virtual_from_version:45430" => 1009,
- "old:virtual_from_version:45795" => 1109,
- "old:virtual_from_version:49119" => 1109,
- "old:virtual_from_version:40721" => 1070,
- "old:virtual_from_version:46389" => 1112,
- "old:virtual_from_version:47557" => 1070,
- "old:virtual_from_version:43015" => 2040,
- "old:virtual_from_version:45047" => 1036,
- "old:virtual_from_version:40783" => 1048,
- "old:virtual_from_version:47927" => 1659,
- "old:virtual_from_version:49332" => 1077,
- "old:virtual_from_version:46219" => 1077,
- "old:virtual_from_version:40921" => 1077,
- "old:virtual_from_version:47851" => 1583,
- "old:virtual_from_version:45916" => 1109,
- "old:virtual_from_version:40521" => 1105,
- "old:virtual_from_version:45897" => 1077,
- "old:virtual_from_version:43046" => 2000,
- "old:virtual_from_version:47597" => 1109,
- "old:virtual_from_version:45481" => 1070,
- "old:virtual_from_version:46065" => 1070,
- "old:virtual_from_version:42193" => 1070,
- "old:virtual_from_version:42594" => 1037,
- "old:virtual_from_version:40889" => 1025,
- "old:virtual_from_version:42715" => 1009,
- "old:virtual_from_version:46039" => 1410,
- "old:virtual_from_version:50255" => 3131,
- "old:virtual_from_version:49030" => 1649,
- "old:virtual_from_version:50586" => 1032,
- "old:virtual_from_version:40914" => 1077,
- "old:virtual_from_version:44163" => 1110,
- "old:virtual_from_version:46303" => 1425,
- "old:virtual_from_version:44558" => 1077,
- "old:virtual_from_version:45910" => 1404,
- "old:virtual_from_version:42625" => 1037,
- "old:virtual_from_version:47478" => 1077,
- "old:virtual_from_version:50127" => 1689,
- "old:virtual_from_version:50627" => 1407,
- "old:virtual_from_version:44039" => 1009,
- "old:virtual_from_version:46500" => 1136,
- "old:virtual_from_version:46399" => 1077,
- "old:virtual_from_version:47030" => 1070,
- "old:virtual_from_version:44359" => 1000,
- "old:virtual_from_version:47461" => 1444,
- "old:virtual_from_version:50567" => 1125,
- "old:virtual_from_version:46656" => 1070,
- "old:virtual_from_version:50231" => 1005,
- "old:virtual_from_version:45428" => 1109,
- "old:virtual_from_version:49027" => 3131,
- "old:virtual_from_version:47440" => 1070,
- "old:virtual_from_version:50393" => 3131,
- "old:virtual_from_version:38348" => 1014,
- "old:virtual_from_version:45370" => 1407,
- "old:virtual_from_version:46983" => 1584,
- "old:virtual_from_version:40806" => 1136,
- "old:virtual_from_version:50218" => 3008,
- "old:virtual_from_version:40009" => 1192,
- "old:virtual_from_version:47598" => 1077,
- "old:virtual_from_version:47479" => 1381,
- "old:virtual_from_version:50275" => 3231,
- "old:virtual_from_version:43084" => 2081,
- "old:virtual_from_version:49204" => 1077,
- "old:virtual_from_version:46449" => 1532,
- "old:virtual_from_version:44704" => 1540,
- "old:virtual_from_version:49896" => 3131,
- "old:virtual_from_version:47899" => 1077,
- "old:virtual_from_version:40897" => 1070,
- "old:virtual_from_version:46873" => 1410,
- "old:virtual_from_version:44605" => 1025,
- "old:virtual_from_version:46361" => 1070,
- "old:virtual_from_version:43049" => 2019,
- "old:virtual_from_version:45579" => 1172,
- "old:virtual_from_version:42123" => 1172,
- "old:virtual_from_version:47032" => 1172,
- "old:virtual_from_version:45951" => 1533,
- "old:virtual_from_version:44876" => 1067,
- "old:virtual_from_version:45327" => 1125,
- "old:virtual_from_version:40808" => 1007,
- "old:virtual_from_version:46406" => 1025,
- "old:virtual_from_version:47277" => 1125,
- "old:virtual_from_version:46313" => 1537,
- "old:virtual_from_version:49995" => 1404,
- "old:virtual_from_version:46519" => 1025,
- "old:virtual_from_version:42232" => 1070,
- "old:virtual_from_version:42610" => 1037,
- "old:virtual_from_version:50722" => 1084,
- "old:virtual_from_version:49046" => 1583,
- "old:virtual_from_version:46614" => 1070,
- "old:virtual_from_version:42981" => 1077,
- "old:virtual_from_version:40713" => 1048,
- "old:virtual_from_version:47536" => 1125,
- "old:virtual_from_version:40881" => 1110,
- "old:virtual_from_version:45026" => 1007,
- "old:virtual_from_version:44344" => 1081,
- "old:virtual_from_version:50703" => 1172,
- "old:virtual_from_version:42819" => 1501,
- "old:virtual_from_version:49259" => 1404,
- "old:virtual_from_version:45310" => 1580,
- "old:virtual_from_version:45152" => 1107,
- "old:virtual_from_version:44771" => 1070,
- "old:virtual_from_version:45645" => 1077,
- "old:virtual_from_version:47284" => 3009,
- "old:virtual_from_version:46191" => 1070,
- "old:virtual_from_version:50538" => 1402,
- "old:virtual_from_version:36622" => 1008,
- "old:virtual_from_version:42137" => 1007,
- "old:virtual_from_version:47991" => 1070,
- "old:virtual_from_version:44823" => 1349,
- "old:virtual_from_version:42124" => 1070,
- "old:virtual_from_version:42669" => 1077,
- "old:virtual_from_version:47683" => 1136,
- "old:virtual_from_version:49989" => 1100,
- "old:virtual_from_version:44749" => 1224,
- "old:virtual_from_version:49902" => 1070,
- "old:virtual_from_version:49821" => 1444,
- "old:virtual_from_version:49309" => 1077,
- "old:virtual_from_version:39532" => 1015,
- "old:virtual_from_version:46864" => 1076,
- "old:virtual_from_version:50040" => 3159,
- "old:virtual_from_version:49171" => 1125,
- "old:virtual_from_version:50149" => 1125,
- "old:virtual_from_version:38702" => 1062,
- "old:virtual_from_version:46307" => 1067,
- "old:virtual_from_version:45556" => 1070,
- "old:virtual_from_version:42475" => 1000,
- "old:virtual_from_version:42992" => 1110,
- "old:virtual_from_version:46688" => 1077,
- "old:virtual_from_version:45376" => 1314,
- "old:virtual_from_version:42855" => 1070,
- "old:virtual_from_version:47038" => 3008,
- "old:virtual_from_version:44642" => 1125,
- "old:virtual_from_version:42180" => 1070,
- "old:virtual_from_version:46928" => 1070,
- "old:virtual_from_version:44839" => 1488,
- "old:virtual_from_version:45081" => 1555,
- "old:virtual_from_version:45572" => 1077,
- "old:virtual_from_version:40787" => 1067,
- "old:virtual_from_version:42351" => 1125,
- "old:virtual_from_version:50176" => 3131,
- "old:virtual_from_version:40454" => 1404,
- "old:virtual_from_version:47255" => 1001,
- "old:virtual_from_version:46724" => 1517,
- "old:virtual_from_version:50278" => 1444,
- "old:virtual_from_version:45582" => 1077,
- "old:virtual_from_version:45307" => 1565,
- "old:virtual_from_version:47636" => 1488,
- "old:virtual_from_version:40931" => 1070,
- "old:virtual_from_version:44114" => 1125,
- "old:virtual_from_version:47570" => 1105,
- "old:virtual_from_version:46396" => 1070,
- "old:virtual_from_version:42692" => 1048,
- "old:virtual_from_version:49591" => 1444,
- "old:virtual_from_version:45269" => 1090,
- "old:virtual_from_version:42592" => 1009,
- "old:virtual_from_version:47508" => 1109,
- "old:virtual_from_version:40515" => 1067,
- "old:virtual_from_version:40276" => 1115,
- "old:virtual_from_version:42968" => 1037,
- "old:virtual_from_version:46833" => 1015,
- "old:virtual_from_version:40728" => 1025,
- "old:virtual_from_version:42934" => 1009,
- "old:virtual_from_version:40493" => 1404,
- "old:virtual_from_version:45000" => 1008,
- "old:virtual_from_version:45914" => 1077,
- "old:virtual_from_version:46857" => 1070,
- "old:virtual_from_version:46967" => 1134,
- "old:virtual_from_version:47928" => 1070,
- "old:virtual_from_version:50439" => 3243,
- "old:virtual_from_version:44527" => 1025,
- "old:virtual_from_version:45245" => 1049,
- "old:virtual_from_version:46275" => 1077,
- "old:virtual_from_version:49786" => 3131,
- "old:virtual_from_version:47457" => 1070,
- "old:virtual_from_version:39579" => 1086,
- "old:virtual_from_version:44235" => 1110,
- "old:virtual_from_version:40753" => 1070,
- "old:virtual_from_version:39728" => 1048,
- "old:virtual_from_version:46681" => 1125,
- "old:virtual_from_version:42576" => 1070,
- "old:virtual_from_version:49982" => 1689,
- "old:virtual_from_version:44818" => 1070,
- "old:virtual_from_version:45302" => 1414,
- "old:virtual_from_version:42290" => 1115,
- "old:virtual_from_version:42160" => 1037,
- "old:virtual_from_version:49836" => 3194,
- "old:virtual_from_version:49653" => 1314,
- "old:virtual_from_version:50468" => 3246,
- "old:virtual_from_version:40993" => 1070,
- "old:virtual_from_version:50137" => 1540,
- "old:virtual_from_version:40654" => 1083,
- "old:virtual_from_version:47120" => 1070,
- "old:virtual_from_version:42214" => 1025,
- "old:virtual_from_version:43007" => 2032,
- "old:virtual_from_version:42645" => 1109,
- "old:virtual_from_version:49070" => 1404,
- "old:virtual_from_version:50356" => 3131,
- "old:virtual_from_version:50765" => 1070,
- "old:virtual_from_version:49293" => 1051,
- "old:virtual_from_version:50519" => 1311,
- "old:virtual_from_version:50466" => 1172,
- "old:virtual_from_version:45816" => 1125,
- "old:virtual_from_version:40833" => 1070,
- "old:virtual_from_version:49492" => 1125,
- "old:virtual_from_version:45429" => 1067,
- "old:virtual_from_version:50702" => 1070,
- "old:virtual_from_version:40348" => 1095,
- "old:virtual_from_version:46301" => 1613,
- "old:virtual_from_version:50464" => 3204,
- "old:virtual_from_version:44514" => 1070,
- "old:virtual_from_version:46837" => 1070,
- "old:virtual_from_version:42865" => 1077,
- "old:virtual_from_version:42707" => 1037,
- "old:virtual_from_version:45493" => 1580,
- "old:virtual_from_version:50192" => 3028,
- "old:virtual_from_version:50653" => 1419,
- "old:virtual_from_version:46727" => 1584,
- "old:virtual_from_version:44461" => 1077,
- "old:virtual_from_version:50282" => 3131,
- "old:virtual_from_version:44259" => 1172,
- "old:virtual_from_version:45625" => 1136,
- "old:virtual_from_version:47673" => 1070,
- "old:virtual_from_version:45963" => 1461,
- "old:virtual_from_version:49019" => 1035,
- "old:virtual_from_version:45297" => 1125,
- "old:virtual_from_version:44065" => 1077,
- "old:virtual_from_version:42705" => 1070,
- "old:virtual_from_version:45046" => 1031,
- "old:virtual_from_version:46746" => 1077,
- "old:virtual_from_version:47911" => 1314,
- "old:virtual_from_version:45061" => 1051,
- "old:virtual_from_version:40097" => 1083,
- "old:virtual_from_version:46942" => 1107,
- "old:virtual_from_version:49667" => 1070,
- "old:virtual_from_version:40540" => 1067,
- "old:virtual_from_version:44664" => 1077,
- "old:virtual_from_version:44669" => 1077,
- "old:virtual_from_version:50561" => 3259,
- "old:virtual_from_version:10001" => 2000,
- "old:virtual_from_version:46101" => 1077,
- "old:virtual_from_version:40648" => 1128,
- "old:virtual_from_version:46124" => 1555,
- "old:virtual_from_version:4513 " => 1053,
- "old:virtual_from_version:44297" => 1070,
- "old:virtual_from_version:50183" => 1069,
- "old:virtual_from_version:45335" => 1125,
- "old:virtual_from_version:47857" => 1070,
- "old:virtual_from_version:42042" => 1172,
- "old:virtual_from_version:42541" => 1070,
- "old:virtual_from_version:45984" => 1613,
- "old:virtual_from_version:44285" => 1070,
- "old:virtual_from_version:49538" => 1413,
- "old:virtual_from_version:47141" => 1583,
- "old:virtual_from_version:46222" => 1077,
- "old:virtual_from_version:49954" => 3131,
- "old:virtual_from_version:44365" => 1144,
- "old:virtual_from_version:46842" => 1070,
- "old:virtual_from_version:45835" => 1146,
- "old:virtual_from_version:42597" => 1172,
- "old:virtual_from_version:50248" => 1489,
- "old:virtual_from_version:46254" => 1070,
- "old:virtual_from_version:50123" => 3184,
- "old:virtual_from_version:49585" => 1107,
- "old:virtual_from_version:44964" => 1078,
- "old:virtual_from_version:49473" => 1580,
- "old:virtual_from_version:47881" => 1689,
- "old:virtual_from_version:40705" => 1025,
- "old:virtual_from_version:46513" => 1659,
- "old:virtual_from_version:44084" => 1515,
- "old:virtual_from_version:46617" => 1081,
- "old:virtual_from_version:42744" => 1070,
- "old:virtual_from_version:40133" => 1290,
- "old:virtual_from_version:50018" => 1006,
- "old:virtual_from_version:45108" => 1077,
- "old:virtual_from_version:42859" => 1067,
- "old:virtual_from_version:50222" => 1404,
- "old:virtual_from_version:47646" => 1689,
- "old:virtual_from_version:42921" => 1070,
- "old:virtual_from_version:45355" => 1084,
- "old:virtual_from_version:47332" => 1109,
- "old:virtual_from_version:48025" => 2126,
- "old:virtual_from_version:49768" => 3131,
- "old:virtual_from_version:44013" => 1037,
- "old:virtual_from_version:49146" => 1070,
- "old:virtual_from_version:40834" => 1077,
- "old:virtual_from_version:40726" => 1401,
- "old:virtual_from_version:46362" => 1109,
- "old:virtual_from_version:45981" => 1321,
- "old:virtual_from_version:46539" => 1568,
- "old:virtual_from_version:47878" => 1009,
- "old:virtual_from_version:45343" => 1009,
- "old:virtual_from_version:44489" => 1077,
- "old:virtual_from_version:49148" => 3150,
- "old:virtual_from_version:49940" => 1048,
- "old:virtual_from_version:47213" => 1109,
- "old:virtual_from_version:46947" => 1583,
- "old:virtual_from_version:50180" => 1489,
- "old:virtual_from_version:47854" => 1150,
- "old:virtual_from_version:43064" => 2065,
- "old:virtual_from_version:42404" => 1107,
- "old:virtual_from_version:45102" => 1070,
- "old:virtual_from_version:39295" => 1025,
- "old:virtual_from_version:50085" => 1125,
- "old:virtual_from_version:50210" => 1404,
- "old:virtual_from_version:49303" => 1413,
- "old:virtual_from_version:45668" => 1027,
- "old:virtual_from_version:44933" => 1172,
- "old:virtual_from_version:45153" => 1009,
- "old:virtual_from_version:44278" => 1009,
- "old:virtual_from_version:46870" => 1404,
- "old:virtual_from_version:44289" => 1037,
- "old:virtual_from_version:44473" => 1009,
- "old:virtual_from_version:46897" => 1076,
- "old:virtual_from_version:50139" => 1070,
- "old:virtual_from_version:42255" => 1070,
- "old:virtual_from_version:49613" => 1070,
- "old:virtual_from_version:42999" => 1136,
- "old:virtual_from_version:44479" => 1037,
- "old:virtual_from_version:49396" => 1505,
- "old:virtual_from_version:47732" => 1689,
- "old:virtual_from_version:46373" => 1583,
- "old:virtual_from_version:47411" => 1321,
- "old:virtual_from_version:49932" => 3197,
- "old:virtual_from_version:47554" => 3016,
- "old:virtual_from_version:50742" => 1070,
- "old:virtual_from_version:46886" => 1105,
- "old:virtual_from_version:45681" => 1042,
- "old:virtual_from_version:42700" => 1070,
- "old:virtual_from_version:47978" => 1125,
- "old:virtual_from_version:49640" => 1107,
- "old:virtual_from_version:42241" => 1067,
- "old:virtual_from_version:44112" => 1109,
- "old:virtual_from_version:49918" => 3206,
- "old:virtual_from_version:50410" => 1689,
- "old:virtual_from_version:50015" => 3217,
- "old:virtual_from_version:39544" => 1190,
- "old:virtual_from_version:42294" => 1110,
- "old:virtual_from_version:47816" => 3094,
- "old:virtual_from_version:44238" => 1125,
- "old:virtual_from_version:45499" => 1109,
- "old:virtual_from_version:42839" => 1070,
- "old:virtual_from_version:42848" => 1070,
- "old:virtual_from_version:44682" => 1025,
- "old:virtual_from_version:49287" => 1689,
- "old:virtual_from_version:47426" => 1070,
- "old:virtual_from_version:49770" => 1404,
- "old:virtual_from_version:50656" => 3259,
- "old:virtual_from_version:45936" => 1070,
- "old:virtual_from_version:42699" => 1067,
- "old:virtual_from_version:44588" => 1070,
- "old:virtual_from_version:46825" => 1107,
- "old:virtual_from_version:43017" => 2042,
- "old:virtual_from_version:50532" => 1067,
- "old:virtual_from_version:45329" => 1404,
- "old:virtual_from_version:46496" => 1125,
- "old:virtual_from_version:48000" => 2101,
- "old:virtual_from_version:42762" => 1037,
- "old:virtual_from_version:46802" => 1123,
- "old:virtual_from_version:40990" => 1110,
- "old:virtual_from_version:44651" => 1025,
- "old:virtual_from_version:49542" => 1105,
- "old:virtual_from_version:42127" => 1037,
- "old:virtual_from_version:42259" => 1037,
- "old:virtual_from_version:46577" => 1070,
- "old:virtual_from_version:47307" => 1616,
- "old:virtual_from_version:40759" => 1070,
- "old:virtual_from_version:47802" => 1037,
- "old:virtual_from_version:47024" => 1070,
- "old:virtual_from_version:49056" => 1070,
- "old:virtual_from_version:42309" => 1077,
- "old:virtual_from_version:42706" => 1077,
- "old:virtual_from_version:42058" => 1037,
- "old:virtual_from_version:45922" => 1070,
- "old:virtual_from_version:50223" => 1583,
- "old:virtual_from_version:44662" => 1037,
- "old:virtual_from_version:49127" => 1583,
- "old:virtual_from_version:44756" => 1109,
- "old:virtual_from_version:44701" => 1077,
- "old:virtual_from_version:44562" => 1023,
- "old:virtual_from_version:47831" => 1048,
- "old:virtual_from_version:47787" => 1109,
- "old:virtual_from_version:44610" => 1537,
- "old:virtual_from_version:45360" => 1583,
- "old:virtual_from_version:47723" => 1404,
- "old:virtual_from_version:44766" => 1077,
- "old:virtual_from_version:50521" => 1016,
- "old:virtual_from_version:38483" => 1030,
- "old:virtual_from_version:45911" => 1070,
- "old:virtual_from_version:50294" => 1321,
- "old:virtual_from_version:46988" => 1136,
- "old:virtual_from_version:49345" => 1105,
- "old:virtual_from_version:50080" => 1125,
- "old:virtual_from_version:40644" => 1032,
- "old:virtual_from_version:40853" => 1037,
- "old:virtual_from_version:40826" => 1070,
- "old:virtual_from_version:49167" => 1077,
- "old:virtual_from_version:45072" => 1067,
- "old:virtual_from_version:42131" => 1070,
- "old:virtual_from_version:50323" => 3237,
- "old:virtual_from_version:50555" => 1580,
- "old:virtual_from_version:44459" => 1070,
- "old:virtual_from_version:44412" => 1115,
- "old:virtual_from_version:40094" => 1062,
- "old:virtual_from_version:50449" => 1037,
- "old:virtual_from_version:46630" => 1070,
- "old:virtual_from_version:44094" => 1009,
- "old:virtual_from_version:38379" => 1025,
- "old:virtual_from_version:46205" => 1092,
- "old:virtual_from_version:40866" => 1070,
- "old:virtual_from_version:45039" => 1517,
- "old:virtual_from_version:42629" => 1136,
- "old:virtual_from_version:38018" => 1095,
- "old:virtual_from_version:44422" => 1037,
- "old:virtual_from_version:40820" => 1070,
- "old:virtual_from_version:49010" => 1172,
- "old:virtual_from_version:45805" => 1006,
- "old:virtual_from_version:45050" => 1042,
- "old:virtual_from_version:45868" => 1517,
- "old:virtual_from_version:44308" => 1070,
- "old:virtual_from_version:49482" => 3151,
- "old:virtual_from_version:44079" => 1172,
- "old:virtual_from_version:45588" => 1616,
- "old:virtual_from_version:47845" => 1132,
- "old:virtual_from_version:45800" => 1112,
- "old:virtual_from_version:50382" => 1070,
- "old:virtual_from_version:40572" => 1070,
- "old:virtual_from_version:44395" => 1222,
- "old:virtual_from_version:42189" => 1070,
- "old:virtual_from_version:46728" => 1585,
- "old:virtual_from_version:44120" => 1062,
- "old:virtual_from_version:48026" => 2127,
- "old:virtual_from_version:44076" => 1025,
- "old:virtual_from_version:42620" => 1077,
- "old:virtual_from_version:38961" => 1025,
- "old:virtual_from_version:38790" => 1025,
- "old:virtual_from_version:46344" => 1067,
- "old:virtual_from_version:50155" => 1125,
- "old:virtual_from_version:47077" => 1125,
- "old:virtual_from_version:40730" => 1402,
- "old:virtual_from_version:42730" => 1009,
- "old:virtual_from_version:46006" => 1070,
- "old:virtual_from_version:46203" => 1070,
- "old:virtual_from_version:45627" => 1107,
- "old:virtual_from_version:44041" => 1077,
- "old:virtual_from_version:46182" => 1537,
- "old:virtual_from_version:46585" => 1070,
- "old:virtual_from_version:42206" => 1037,
- "old:virtual_from_version:44782" => 1172,
- "old:virtual_from_version:44445" => 1025,
- "old:virtual_from_version:50287" => 1532,
- "old:virtual_from_version:42813" => 1070,
- "old:virtual_from_version:49177" => 1070,
- "old:virtual_from_version:45253" => 1023,
- "old:virtual_from_version:42631" => 1009,
- "old:virtual_from_version:46405" => 1070,
- "old:virtual_from_version:47558" => 1125,
- "old:virtual_from_version:42490" => 1070,
- "old:virtual_from_version:46233" => 1070,
- "old:virtual_from_version:47859" => 1109,
- "old:virtual_from_version:40693" => 1125,
- "old:virtual_from_version:49418" => 3029,
- "old:virtual_from_version:42888" => 1037,
- "old:virtual_from_version:46879" => 1077,
- "old:virtual_from_version:49176" => 1062,
- "old:virtual_from_version:46829" => 1397,
- "old:virtual_from_version:46756" => 1070,
- "old:virtual_from_version:39508" => 1040,
- "old:virtual_from_version:42094" => 1070,
- "old:virtual_from_version:45052" => 1109,
- "old:virtual_from_version:47729" => 1067,
- "old:virtual_from_version:39547" => 1192,
- "old:virtual_from_version:46224" => 1070,
- "old:virtual_from_version:45552" => 1614,
- "old:virtual_from_version:40695" => 1077,
- "old:virtual_from_version:44536" => 1037,
- "old:virtual_from_version:47919" => 1009,
- "old:virtual_from_version:38765" => 1107,
- "old:virtual_from_version:50619" => 1070,
- "old:virtual_from_version:47834" => 1009,
- "old:virtual_from_version:44407" => 1015,
- "old:virtual_from_version:47093" => 1172,
- "old:virtual_from_version:39509" => 1044,
- "old:virtual_from_version:45793" => 1051,
- "old:virtual_from_version:42656" => 1070,
- "old:virtual_from_version:42112" => 1077,
- "old:virtual_from_version:50134" => 1070,
- "old:virtual_from_version:45306" => 1404,
- "old:virtual_from_version:46202" => 1062,
- "old:virtual_from_version:39311" => 1107,
- "old:virtual_from_version:44008" => 1070,
- "old:virtual_from_version:49068" => 1070,
- "old:virtual_from_version:44386" => 1043,
- "old:virtual_from_version:44453" => 1528,
- "old:virtual_from_version:40933" => 1037,
- "old:virtual_from_version:49830" => 1015,
- "old:virtual_from_version:46043" => 1649,
- "old:virtual_from_version:50481" => 3255,
- "old:virtual_from_version:46710" => 1070,
- "old:virtual_from_version:50343" => 3131,
- "old:virtual_from_version:44435" => 1077,
- "old:virtual_from_version:47998" => 1070,
- "old:virtual_from_version:47402" => 3047,
- "old:virtual_from_version:47064" => 3003,
- "old:virtual_from_version:50182" => 1070,
- "old:virtual_from_version:45815" => 1070,
- "old:virtual_from_version:50563" => 1125,
- "old:virtual_from_version:42464" => 1125,
- "old:virtual_from_version:42359" => 1077,
- "old:virtual_from_version:50494" => 3226,
- "old:virtual_from_version:47418" => 3008,
- "old:virtual_from_version:40558" => 1025,
- "old:virtual_from_version:42773" => 1037,
- "old:virtual_from_version:50483" => 3247,
- "old:virtual_from_version:45142" => 1125,
- "old:virtual_from_version:50675" => 3192,
- "old:virtual_from_version:45118" => 1070,
- "old:virtual_from_version:44066" => 1037,
- "old:virtual_from_version:44972" => 1110,
- "old:virtual_from_version:46155" => 1070,
- "old:virtual_from_version:44606" => 1077,
- "old:virtual_from_version:45878" => 1630,
- "old:virtual_from_version:40955" => 1109,
- "old:virtual_from_version:49530" => 1489,
- "old:virtual_from_version:44299" => 1077,
- "old:virtual_from_version:47090" => 1321,
- "old:virtual_from_version:45263" => 1224,
- "old:virtual_from_version:40825" => 1077,
- "old:virtual_from_version:43019" => 2044,
- "old:virtual_from_version:49814" => 3194,
- "old:virtual_from_version:38415" => 1069,
- "old:virtual_from_version:47207" => 1009,
- "old:virtual_from_version:49757" => 1585,
- "old:virtual_from_version:44791" => 1025,
- "old:virtual_from_version:44943" => 1517,
- "old:virtual_from_version:44132" => 1037,
- "old:virtual_from_version:44228" => 1037,
- "old:virtual_from_version:45961" => 1025,
- "old:virtual_from_version:49130" => 1689,
- "old:virtual_from_version:49752" => 1689,
- "old:virtual_from_version:47031" => 1125,
- "old:virtual_from_version:40468" => 1067,
- "old:virtual_from_version:39965" => 1095,
- "old:virtual_from_version:42555" => 1025,
- "old:virtual_from_version:46343" => 1109,
- "old:virtual_from_version:44255" => 1105,
- "old:virtual_from_version:49376" => 1077,
- "old:virtual_from_version:42904" => 1037,
- "old:virtual_from_version:46019" => 1404,
- "old:virtual_from_version:46658" => 1461,
- "old:virtual_from_version:42794" => 1115,
- "old:virtual_from_version:42327" => 1077,
- "old:virtual_from_version:39284" => 1007,
- "old:virtual_from_version:38978" => 1107,
- "old:virtual_from_version:45337" => 1125,
- "old:virtual_from_version:47976" => 1062,
- "old:virtual_from_version:40434" => 1109,
- "old:virtual_from_version:38570" => 1095,
- "old:virtual_from_version:47680" => 1659,
- "old:virtual_from_version:49543" => 1009,
- "old:virtual_from_version:44958" => 1560,
- "old:virtual_from_version:44139" => 1070,
- "old:virtual_from_version:47442" => 1109,
- "old:virtual_from_version:50644" => 1148,
- "old:virtual_from_version:47836" => 1404,
- "old:virtual_from_version:46054" => 1651,
- "old:virtual_from_version:46348" => 1671,
- "old:virtual_from_version:46079" => 1150,
- "old:virtual_from_version:49281" => 1659,
- "old:virtual_from_version:44325" => 1009,
- "old:virtual_from_version:42858" => 1037,
- "old:virtual_from_version:36542" => 1069,
- "old:virtual_from_version:47361" => 1107,
- "old:virtual_from_version:48017" => 2117,
- "old:virtual_from_version:45069" => 1125,
- "old:virtual_from_version:38545" => 1115,
- "old:virtual_from_version:45449" => 1222,
- "old:virtual_from_version:49053" => 3094,
- "old:virtual_from_version:45240" => 1062,
- "old:virtual_from_version:40709" => 1070,
- "old:virtual_from_version:44792" => 1077,
- "old:virtual_from_version:43004" => 2029,
- "old:virtual_from_version:42606" => 1172,
- "old:virtual_from_version:42835" => 1501,
- "old:virtual_from_version:50142" => 3131,
- "old:virtual_from_version:47235" => 1070,
- "old:virtual_from_version:40533" => 1070,
- "old:virtual_from_version:42871" => 1077,
- "old:virtual_from_version:49340" => 3167,
- "old:virtual_from_version:46853" => 3002,
- "old:virtual_from_version:46624" => 1051,
- "old:virtual_from_version:38990" => 1141,
- "old:virtual_from_version:47672" => 3078,
- "old:virtual_from_version:40164" => 1048,
- "old:virtual_from_version:42055" => 1070,
- "old:virtual_from_version:50554" => 1125,
- "old:virtual_from_version:47709" => 1070,
- "old:virtual_from_version:49411" => 1532,
- "old:virtual_from_version:46437" => 1077,
- "old:virtual_from_version:50544" => 3016,
- "old:virtual_from_version:13356" => 1022,
- "old:virtual_from_version:47073" => 3008,
- "old:virtual_from_version:45855" => 1070,
- "old:virtual_from_version:45136" => 1001,
- "old:virtual_from_version:45882" => 1070,
- "old:virtual_from_version:50235" => 1689,
- "old:virtual_from_version:45230" => 1569,
- "old:virtual_from_version:45518" => 1070,
- "old:virtual_from_version:49965" => 3211,
- "old:virtual_from_version:40838" => 1107,
- "old:virtual_from_version:46739" => 1077,
- "old:virtual_from_version:45414" => 1009,
- "old:virtual_from_version:49373" => 3167,
- "old:virtual_from_version:44406" => 1012,
- "old:virtual_from_version:44674" => 1077,
- "old:virtual_from_version:47310" => 1125,
- "old:virtual_from_version:42187" => 1109,
- "old:virtual_from_version:44239" => 1070,
- "old:virtual_from_version:47534" => 1077,
- "old:virtual_from_version:47589" => 1070,
- "old:virtual_from_version:50277" => 1659,
- "old:virtual_from_version:45144" => 1125,
- "old:virtual_from_version:45653" => 1067,
- "old:virtual_from_version:46729" => 1697,
- "old:virtual_from_version:44733" => 1077,
- "old:virtual_from_version:47500" => 1077,
- "old:virtual_from_version:44829" => 1011,
- "old:virtual_from_version:40947" => 1037,
- "old:virtual_from_version:50186" => 1037,
- "old:virtual_from_version:46456" => 1444,
- "old:virtual_from_version:42703" => 1037,
- "old:virtual_from_version:46966" => 1077,
- "old:virtual_from_version:40916" => 1110,
- "old:virtual_from_version:44668" => 1070,
- "old:virtual_from_version:49873" => 1070,
- "old:virtual_from_version:47253" => 1067,
- "old:virtual_from_version:50531" => 1048,
- "old:virtual_from_version:49607" => 1404,
- "old:virtual_from_version:39009" => 1083,
- "old:virtual_from_version:42118" => 1136,
- "old:virtual_from_version:42291" => 1025,
- "old:virtual_from_version:42389" => 1070,
- "old:virtual_from_version:42406" => 1077,
- "old:virtual_from_version:44971" => 1064,
- "old:virtual_from_version:46309" => 1009,
- "old:virtual_from_version:49254" => 1689,
- "old:virtual_from_version:46664" => 1077,
- "old:virtual_from_version:50512" => 1583,
- "old:virtual_from_version:46100" => 1070,
- "old:virtual_from_version:49073" => 1666,
- "old:virtual_from_version:44586" => 1077,
- "old:virtual_from_version:46466" => 1404,
- "old:virtual_from_version:42028" => 1037,
- "old:virtual_from_version:47221" => 1070,
- "old:virtual_from_version:42317" => 1413,
- "old:virtual_from_version:44587" => 1037,
- "old:virtual_from_version:44759" => 1006,
- "old:virtual_from_version:44714" => 1037,
- "old:virtual_from_version:40754" => 1077,
- "old:virtual_from_version:46568" => 1070,
- "old:virtual_from_version:46329" => 1077,
- "old:virtual_from_version:46899" => 1070,
- "old:virtual_from_version:47417" => 1689,
- "old:virtual_from_version:49867" => 3131,
- "old:virtual_from_version:49091" => 3139,
- "old:virtual_from_version:42197" => 1077,
- "old:virtual_from_version:46475" => 1105,
- "old:virtual_from_version:46902" => 1404,
- "old:virtual_from_version:46965" => 1125,
- "old:virtual_from_version:39716" => 1083,
- "old:virtual_from_version:45223" => 1576,
- "old:virtual_from_version:49797" => 1070,
- "old:virtual_from_version:47850" => 1532,
- "old:virtual_from_version:45575" => 1070,
- "old:virtual_from_version:47822" => 3094,
- "old:virtual_from_version:47226" => 1070,
- "old:virtual_from_version:45250" => 1110,
- "old:virtual_from_version:50337" => 3131,
- "old:virtual_from_version:46618" => 1172,
- "old:virtual_from_version:42958" => 1009,
- "old:virtual_from_version:50629" => 1419,
- "old:virtual_from_version:47711" => 1109,
- "old:virtual_from_version:42090" => 1070,
- "old:virtual_from_version:44413" => 1021,
- "old:virtual_from_version:44393" => 1000,
- "old:virtual_from_version:46314" => 1665,
- "old:virtual_from_version:49800" => 1107,
- "old:virtual_from_version:50524" => 1033,
- "old:virtual_from_version:40799" => 1070,
- "old:virtual_from_version:46207" => 1070,
- "old:virtual_from_version:40929" => 1037,
- "old:virtual_from_version:49528" => 1362,
- "old:virtual_from_version:39596" => 1000,
- "old:virtual_from_version:46921" => 1621,
- "old:virtual_from_version:45013" => 1136,
- "old:virtual_from_version:46906" => 1077,
- "old:virtual_from_version:46116" => 1353,
- "old:virtual_from_version:46245" => 1574,
- "old:virtual_from_version:40652" => 1398,
- "old:virtual_from_version:47123" => 1172,
- "old:virtual_from_version:38847" => 1112,
- "old:virtual_from_version:46168" => 1070,
- "old:virtual_from_version:40859" => 1037,
- "old:virtual_from_version:47759" => 1037,
- "old:virtual_from_version:47420" => 1070,
- "old:virtual_from_version:49841" => 1517,
- "old:virtual_from_version:40399" => 1349,
- "old:virtual_from_version:46877" => 1125,
- "old:virtual_from_version:49430" => 3029,
- "old:virtual_from_version:50395" => 3214,
- "old:virtual_from_version:49033" => 3046,
- "old:virtual_from_version:46571" => 1498,
- "old:virtual_from_version:49402" => 1070,
- "old:virtual_from_version:42318" => 1070,
- "old:virtual_from_version:45432" => 1077,
- "old:virtual_from_version:44869" => 1009,
- "old:virtual_from_version:46542" => 1077,
- "old:virtual_from_version:49186" => 1404,
- "old:virtual_from_version:40846" => 1077,
- "old:virtual_from_version:49929" => 3209,
- "old:virtual_from_version:49999" => 1070,
- "old:virtual_from_version:44873" => 1070,
- "old:virtual_from_version:46736" => 1070,
- "old:virtual_from_version:39933" => 1247,
- "old:virtual_from_version:49226" => 1314,
- "old:virtual_from_version:47204" => 1070,
- "old:virtual_from_version:40925" => 1067,
- "old:virtual_from_version:44993" => 1069,
- "old:virtual_from_version:41008" => 2019,
- "old:virtual_from_version:47719" => 1321,
- "old:virtual_from_version:47766" => 3078,
- "old:virtual_from_version:47553" => 1077,
- "old:virtual_from_version:44693" => 1048,
- "old:virtual_from_version:42504" => 1012,
- "old:virtual_from_version:40750" => 1109,
- "old:virtual_from_version:49116" => 1051,
- "old:virtual_from_version:47198" => 1125,
- "old:virtual_from_version:47168" => 1444,
- "old:virtual_from_version:45079" => 1402,
- "old:virtual_from_version:47282" => 1397,
- "old:virtual_from_version:47358" => 3045,
- "old:virtual_from_version:49546" => 1125,
- "old:virtual_from_version:46606" => 1404,
- "old:virtual_from_version:44035" => 1037,
- "old:virtual_from_version:49108" => 3136,
- "old:virtual_from_version:44404" => 1010,
- "old:virtual_from_version:50400" => 3131,
- "old:virtual_from_version:44381" => 1027,
- "old:virtual_from_version:45387" => 1362,
- "old:virtual_from_version:44424" => 1043,
- "old:virtual_from_version:47447" => 1057,
- "old:virtual_from_version:47157" => 1583,
- "old:virtual_from_version:45851" => 1109,
- "old:virtual_from_version:44507" => 1053,
- "old:virtual_from_version:42096" => 1037,
- "old:virtual_from_version:49298" => 3136,
- "old:virtual_from_version:46053" => 1077,
- "old:virtual_from_version:44524" => 1136,
- "old:virtual_from_version:45576" => 1077,
- "old:virtual_from_version:49032" => 1649,
- "old:virtual_from_version:40655" => 1083,
- "old:virtual_from_version:45080" => 1110,
- "old:virtual_from_version:40786" => 1077,
- "old:virtual_from_version:45819" => 1077,
- "old:virtual_from_version:50355" => 1689,
- "old:virtual_from_version:44659" => 1070,
- "old:virtual_from_version:49629" => 3184,
- "old:virtual_from_version:40952" => 1009,
- "old:virtual_from_version:42323" => 1112,
- "old:virtual_from_version:44798" => 1067,
- "old:virtual_from_version:45009" => 1517,
- "old:virtual_from_version:47042" => 1172,
- "old:virtual_from_version:45530" => 1009,
- "old:virtual_from_version:47191" => 1070,
- "old:virtual_from_version:45366" => 1125,
- "old:virtual_from_version:44513" => 1107,
- "old:virtual_from_version:45536" => 1136,
- "old:virtual_from_version:40657" => 1125,
- "old:virtual_from_version:46264" => 1070,
- "old:virtual_from_version:46909" => 1095,
- "old:virtual_from_version:50047" => 1105,
- "old:virtual_from_version:46175" => 1532,
- "old:virtual_from_version:42483" => 1104,
- "old:virtual_from_version:40511" => 1070,
- "old:virtual_from_version:44482" => 1077,
- "old:virtual_from_version:50432" => 1057,
- "old:virtual_from_version:50455" => 1025,
- "old:virtual_from_version:42591" => 1070,
- "old:virtual_from_version:49511" => 3180,
- "old:virtual_from_version:50260" => 3131,
- "old:virtual_from_version:45739" => 1070,
- "old:virtual_from_version:38375" => 1070,
- "old:virtual_from_version:38835" => 1051,
- "old:virtual_from_version:42547" => 1070,
- "old:virtual_from_version:49588" => 1105,
- "old:virtual_from_version:45644" => 1009,
- "old:virtual_from_version:47770" => 1070,
- "old:virtual_from_version:47399" => 1077,
- "old:virtual_from_version:49976" => 3209,
- "old:virtual_from_version:46638" => 1404,
- "old:virtual_from_version:42967" => 1077,
- "old:virtual_from_version:45351" => 1362,
- "old:virtual_from_version:38538" => 1077,
- "old:virtual_from_version:45288" => 1568,
- "old:virtual_from_version:45308" => 1125,
- "old:virtual_from_version:49447" => 1580,
- "old:virtual_from_version:41002" => 2014,
- "old:virtual_from_version:42357" => 1009,
- "old:virtual_from_version:42023" => 1077,
- "old:virtual_from_version:49885" => 3131,
- "old:virtual_from_version:45856" => 1125,
- "old:virtual_from_version:42296" => 1428,
- "old:virtual_from_version:45268" => 1015,
- "old:virtual_from_version:42337" => 1037,
- "old:virtual_from_version:49121" => 1112,
- "old:virtual_from_version:49928" => 3009,
- "old:virtual_from_version:46113" => 1404,
- "old:virtual_from_version:46878" => 1025,
- "old:virtual_from_version:50251" => 3186,
- "old:virtual_from_version:47124" => 1025,
- "old:virtual_from_version:46038" => 1077,
- "old:virtual_from_version:47651" => 1077,
- "old:virtual_from_version:39578" => 1100,
- "old:virtual_from_version:43026" => 2051,
- "old:virtual_from_version:50624" => 1110,
- "old:virtual_from_version:50590" => 3267,
- "old:virtual_from_version:47441" => 1125,
- "old:virtual_from_version:40882" => 1048,
- "old:virtual_from_version:40872" => 1019,
- "old:virtual_from_version:47807" => 1077,
- "old:virtual_from_version:47111" => 3017,
- "old:virtual_from_version:50472" => 3249,
- "old:virtual_from_version:50674" => 3270,
- "old:virtual_from_version:47025" => 1172,
- "old:virtual_from_version:49446" => 1444,
- "old:virtual_from_version:44121" => 1110,
- "old:virtual_from_version:50503" => 3174,
- "old:virtual_from_version:42477" => 1444,
- "old:virtual_from_version:42509" => 1062,
- "old:virtual_from_version:45641" => 1070,
- "old:virtual_from_version:50398" => 1069,
- "old:virtual_from_version:42274" => 1222,
- "old:virtual_from_version:45533" => 1613,
- "old:virtual_from_version:47973" => 1689,
- "old:virtual_from_version:47528" => 1109,
- "old:virtual_from_version:45311" => 1583,
- "old:virtual_from_version:47359" => 1070,
- "old:virtual_from_version:43066" => 2067,
- "old:virtual_from_version:49400" => 1025,
- "old:virtual_from_version:50387" => 1070,
- "old:virtual_from_version:50473" => 3250,
- "old:virtual_from_version:49112" => 3146,
- "old:virtual_from_version:49648" => 1489,
- "old:virtual_from_version:40477" => 1083,
- "old:virtual_from_version:45993" => 1076,
- "old:virtual_from_version:44341" => 1077,
- "old:virtual_from_version:46916" => 1136,
- "old:virtual_from_version:45239" => 1016,
- "old:virtual_from_version:47492" => 1025,
- "old:virtual_from_version:34143" => 1051,
- "old:virtual_from_version:39771" => 1088,
- "old:virtual_from_version:42222" => 1413,
- "old:virtual_from_version:45731" => 1125,
- "old:virtual_from_version:39704" => 1019,
- "old:virtual_from_version:49961" => 1580,
- "old:virtual_from_version:44130" => 1009,
- "old:virtual_from_version:46591" => 1077,
- "old:virtual_from_version:50377" => 1125,
- "old:virtual_from_version:42737" => 1108,
- "old:virtual_from_version:46132" => 1109,
- "old:virtual_from_version:42331" => 1032,
- "old:virtual_from_version:45861" => 1125,
- "old:virtual_from_version:50557" => 3259,
- "old:virtual_from_version:42983" => 1507,
- "old:virtual_from_version:42502" => 1091,
- "old:virtual_from_version:46888" => 1070,
- "old:virtual_from_version:44788" => 1125,
- "old:virtual_from_version:40998" => 1109,
- "old:virtual_from_version:40689" => 1107,
- "old:virtual_from_version:44601" => 1107,
- "old:virtual_from_version:45628" => 1067,
- "old:virtual_from_version:46730" => 1070,
- "old:virtual_from_version:47524" => 1410,
- "old:virtual_from_version:39935" => 1025,
- "old:virtual_from_version:47749" => 1125,
- "old:virtual_from_version:47487" => 1109,
- "old:virtual_from_version:44133" => 1062,
- "old:virtual_from_version:46335" => 1670,
- "old:virtual_from_version:49668" => 1136,
- "old:virtual_from_version:50643" => 3259,
- "old:virtual_from_version:39941" => 1009,
- "old:virtual_from_version:42602" => 1037,
- "old:virtual_from_version:45019" => 1107,
- "old:virtual_from_version:46834" => 1172,
- "old:virtual_from_version:40948" => 1048,
- "old:virtual_from_version:50347" => 1125,
- "old:virtual_from_version:38339" => 1107,
- "old:virtual_from_version:45559" => 1107,
- "old:virtual_from_version:42345" => 1037,
- "old:virtual_from_version:46250" => 1070,
- "old:virtual_from_version:44361" => 1222,
- "old:virtual_from_version:45147" => 1125,
- "old:virtual_from_version:44630" => 1172,
- "old:virtual_from_version:49710" => 1084,
- "old:virtual_from_version:45304" => 1580,
- "old:virtual_from_version:46535" => 1070,
- "old:virtual_from_version:45978" => 1533,
- "old:virtual_from_version:40911" => 1110,
- "old:virtual_from_version:49156" => 1077,
- "old:virtual_from_version:44074" => 1070,
- "old:virtual_from_version:44396" => 1070,
- "old:virtual_from_version:49403" => 1689,
- "old:virtual_from_version:45532" => 1085,
- "old:virtual_from_version:44162" => 1037,
- "old:virtual_from_version:44850" => 1077,
- "old:virtual_from_version:40857" => 1025,
- "old:virtual_from_version:49784" => 1070,
- "old:virtual_from_version:49689" => 1404,
- "old:virtual_from_version:50297" => 3234,
- "old:virtual_from_version:44728" => 1077,
- "old:virtual_from_version:47414" => 1037,
- "old:virtual_from_version:42115" => 1077,
- "old:virtual_from_version:45619" => 1070,
- "old:virtual_from_version:45722" => 1107,
- "old:virtual_from_version:46631" => 1077,
- "old:virtual_from_version:42568" => 1077,
- "old:virtual_from_version:42249" => 1070,
- "old:virtual_from_version:49047" => 1584,
- "old:virtual_from_version:42361" => 1000,
- "old:virtual_from_version:47765" => 3078,
- "old:virtual_from_version:40725" => 1048,
- "old:virtual_from_version:45097" => 1077,
- "old:virtual_from_version:42611" => 1172,
- "old:virtual_from_version:45396" => 1009,
- "old:virtual_from_version:49410" => 1404,
- "old:virtual_from_version:40870" => 1070,
- "old:virtual_from_version:45808" => 1397,
- "old:virtual_from_version:47525" => 1070,
- "old:virtual_from_version:42073" => 1037,
- "old:virtual_from_version:50193" => 3131,
- "old:virtual_from_version:47398" => 1172,
- "old:virtual_from_version:44942" => 1014,
- "old:virtual_from_version:49992" => 1666,
- "old:virtual_from_version:46548" => 1070,
- "old:virtual_from_version:44645" => 1517,
- "old:virtual_from_version:49761" => 1672,
- "old:virtual_from_version:44147" => 1037,
- "old:virtual_from_version:46131" => 1070,
- "old:virtual_from_version:50296" => 3131,
- "old:virtual_from_version:40273" => 1222,
- "old:virtual_from_version:44414" => 1517,
- "old:virtual_from_version:36625" => 1012,
- "old:virtual_from_version:49971" => 3209,
- "old:virtual_from_version:46023" => 1580,
- "old:virtual_from_version:50270" => 1070,
- "old:virtual_from_version:47625" => 1077,
- "old:virtual_from_version:44698" => 1077,
- "old:virtual_from_version:44697" => 1025,
- "old:virtual_from_version:46554" => 1555,
- "old:virtual_from_version:44382" => 1030,
- "old:virtual_from_version:45261" => 1109,
- "old:virtual_from_version:50157" => 1580,
- "old:virtual_from_version:49759" => 1689,
- "old:virtual_from_version:42646" => 1112,
- "old:virtual_from_version:46882" => 1070,
- "old:virtual_from_version:44085" => 1107,
- "old:virtual_from_version:46308" => 1172,
- "old:virtual_from_version:42059" => 1112,
- "old:virtual_from_version:49107" => 3147,
- "old:virtual_from_version:47584" => 1007,
- "old:virtual_from_version:40813" => 1107,
- "old:virtual_from_version:44652" => 1077,
- "old:virtual_from_version:42374" => 1107,
- "old:virtual_from_version:42412" => 1077,
- "old:virtual_from_version:50394" => 3159,
- "old:virtual_from_version:42370" => 1077,
- "old:virtual_from_version:40606" => 1077,
- "old:virtual_from_version:45324" => 1125,
- "old:virtual_from_version:46872" => 1410,
- "old:virtual_from_version:47470" => 1402,
- "old:virtual_from_version:44976" => 1021,
- "old:virtual_from_version:40520" => 1109,
- "old:virtual_from_version:39234" => 1150,
- "old:virtual_from_version:42780" => 1037,
- "old:virtual_from_version:45092" => 1077,
- "old:virtual_from_version:46117" => 1070,
- "old:virtual_from_version:45767" => 1035,
- "old:virtual_from_version:45456" => 1070,
- "old:virtual_from_version:40912" => 1067,
- "old:virtual_from_version:47925" => 3008,
- "old:virtual_from_version:50505" => 1311,
- "old:virtual_from_version:46772" => 1070,
- "old:virtual_from_version:47380" => 3008,
- "old:virtual_from_version:46333" => 1077,
- "old:virtual_from_version:44017" => 1125,
- "old:virtual_from_version:46226" => 1070,
- "old:virtual_from_version:46232" => 1615,
- "old:virtual_from_version:45737" => 1555,
- "old:virtual_from_version:44775" => 1423,
- "old:virtual_from_version:46029" => 1649,
- "old:virtual_from_version:43000" => 2000,
- "old:virtual_from_version:46712" => 1070,
- "old:virtual_from_version:49997" => 3214,
- "old:virtual_from_version:50257" => 1070,
- "old:virtual_from_version:44240" => 1009,
- "old:virtual_from_version:44009" => 1009,
- "old:virtual_from_version:40368" => 1009,
- "old:virtual_from_version:46273" => 1030,
- "old:virtual_from_version:40595" => 1077,
- "old:virtual_from_version:45756" => 1077,
- "old:virtual_from_version:45651" => 1125,
- "old:virtual_from_version:49022" => 1689,
- "old:virtual_from_version:49305" => 1584,
- "old:virtual_from_version:45496" => 1007,
- "old:virtual_from_version:42154" => 1070,
- "old:virtual_from_version:50212" => 3131,
- "old:virtual_from_version:46869" => 1077,
- "old:virtual_from_version:44614" => 1017,
- "old:virtual_from_version:44526" => 1009,
- "old:virtual_from_version:47665" => 1077,
- "old:virtual_from_version:42379" => 1311,
- "old:virtual_from_version:44584" => 1070,
- "old:virtual_from_version:45695" => 1027,
- "old:virtual_from_version:42478" => 1009,
- "old:virtual_from_version:44636" => 1136,
- "old:virtual_from_version:44180" => 1321,
- "old:virtual_from_version:42246" => 1037,
- "old:virtual_from_version:44910" => 1077,
- "old:virtual_from_version:44468" => 1009,
- "old:virtual_from_version:40901" => 1037,
- "old:virtual_from_version:42516" => 1172,
- "old:virtual_from_version:45567" => 1614,
- "old:virtual_from_version:42445" => 1067,
- "old:virtual_from_version:46684" => 1659,
- "old:virtual_from_version:50237" => 1035,
- "old:virtual_from_version:45753" => 1070,
- "old:virtual_from_version:45523" => 1136,
- "old:virtual_from_version:46714" => 1172,
- "old:virtual_from_version:45595" => 1077,
- "old:virtual_from_version:42691" => 1109,
- "old:virtual_from_version:44663" => 1070,
- "old:virtual_from_version:47566" => 1588,
- "old:virtual_from_version:49632" => 1070,
- "old:virtual_from_version:40600" => 1048,
- "old:virtual_from_version:42815" => 1025,
- "old:virtual_from_version:40509" => 1110,
- "old:virtual_from_version:40444" => 1105,
- "old:virtual_from_version:47323" => 1172,
- "old:virtual_from_version:44321" => 1172,
- "old:virtual_from_version:47220" => 1050,
- "old:virtual_from_version:47005" => 1125,
- "old:virtual_from_version:42796" => 1077,
- "old:virtual_from_version:42951" => 1025,
- "old:virtual_from_version:42102" => 1077,
- "old:virtual_from_version:42864" => 1009,
- "old:virtual_from_version:42330" => 1141,
- "old:virtual_from_version:46875" => 1613,
- "old:virtual_from_version:47139" => 1172,
- "old:virtual_from_version:49891" => 1489,
- "old:virtual_from_version:44555" => 1037,
- "old:virtual_from_version:44327" => 1025,
- "old:virtual_from_version:46709" => 1077,
- "old:virtual_from_version:46012" => 1090,
- "old:virtual_from_version:44123" => 1125,
- "old:virtual_from_version:42129" => 1105,
- "old:virtual_from_version:40981" => 1077,
- "old:virtual_from_version:46107" => 1070,
- "old:virtual_from_version:40920" => 1025,
- "old:virtual_from_version:49349" => 1070,
- "old:virtual_from_version:49568" => 1404,
- "old:virtual_from_version:46094" => 1070,
- "old:virtual_from_version:47280" => 1125,
- "old:virtual_from_version:42944" => 1009,
- "old:virtual_from_version:50022" => 1125,
- "old:virtual_from_version:47641" => 1109,
- "old:virtual_from_version:44948" => 1001,
- "old:virtual_from_version:42690" => 1062,
- "old:virtual_from_version:47097" => 1070,
- "old:virtual_from_version:46055" => 1070,
- "old:virtual_from_version:49310" => 1077,
- "old:virtual_from_version:42545" => 1343,
- "old:virtual_from_version:44726" => 1009,
- "old:virtual_from_version:50746" => 3259,
- "old:virtual_from_version:46936" => 1076,
- "old:virtual_from_version:46342" => 1070,
- "old:virtual_from_version:46532" => 1025,
- "old:virtual_from_version:49480" => 1689,
- "old:virtual_from_version:49416" => 1580,
- "old:virtual_from_version:46336" => 1007,
- "old:virtual_from_version:46589" => 1404,
- "old:virtual_from_version:50501" => 3131,
- "old:virtual_from_version:47279" => 3038,
- "old:virtual_from_version:45143" => 1107,
- "old:virtual_from_version:47344" => 1689,
- "old:virtual_from_version:42010" => 1070,
- "old:virtual_from_version:42397" => 1077,
- "old:virtual_from_version:50642" => 1587,
- "old:virtual_from_version:45018" => 1222,
- "old:virtual_from_version:47133" => 1172,
- "old:virtual_from_version:44511" => 1172,
- "old:virtual_from_version:40260" => 1146,
- "old:virtual_from_version:42282" => 1424,
- "old:virtual_from_version:45592" => 1070,
- "old:virtual_from_version:49321" => 3146,
- "old:virtual_from_version:40066" => 1070,
- "old:virtual_from_version:42099" => 1077,
- "old:virtual_from_version:49440" => 1172,
- "old:virtual_from_version:44102" => 1037,
- "old:virtual_from_version:42489" => 1107,
- "old:virtual_from_version:46776" => 1077,
- "old:virtual_from_version:50716" => 1007,
- "old:virtual_from_version:45568" => 1172,
- "old:virtual_from_version:46380" => 1005,
- "old:virtual_from_version:49774" => 3031,
- "old:virtual_from_version:47061" => 1172,
- "old:virtual_from_version:40247" => 1107,
- "old:virtual_from_version:46122" => 1070,
- "old:virtual_from_version:46163" => 1006,
- "old:virtual_from_version:44877" => 1136,
- "old:virtual_from_version:44687" => 1070,
- "old:virtual_from_version:44801" => 1125,
- "old:virtual_from_version:49388" => 1095,
- "old:virtual_from_version:44354" => 1515,
- "old:virtual_from_version:47026" => 1077,
- "old:virtual_from_version:49215" => 1404,
- "old:virtual_from_version:40732" => 1070,
- "old:virtual_from_version:46748" => 1070,
- "old:virtual_from_version:44345" => 1070,
- "old:virtual_from_version:40817" => 1077,
- "old:virtual_from_version:44301" => 1404,
- "old:virtual_from_version:49155" => 1009,
- "old:virtual_from_version:42021" => 1070,
- "old:virtual_from_version:49192" => 3078,
- "old:virtual_from_version:43039" => 2030,
- "old:virtual_from_version:43060" => 2059,
- "old:virtual_from_version:42116" => 1037,
- "old:virtual_from_version:40994" => 1009,
- "old:virtual_from_version:50135" => 1172,
- "old:virtual_from_version:47263" => 1077,
- "old:virtual_from_version:40743" => 1025,
- "old:virtual_from_version:49160" => 1070,
- "old:virtual_from_version:50199" => 3131,
- "old:virtual_from_version:42286" => 1070,
- "old:virtual_from_version:46498" => 1107,
- "old:virtual_from_version:44585" => 1025,
- "old:virtual_from_version:46766" => 1025,
- "old:virtual_from_version:45480" => 1136,
- "old:virtual_from_version:40489" => 1070,
- "old:virtual_from_version:44530" => 1110,
- "old:virtual_from_version:47720" => 1070,
- "old:virtual_from_version:28096" => 1084,
- "old:virtual_from_version:45001" => 1009,
- "old:virtual_from_version:39956" => 1076,
- "old:virtual_from_version:43093" => 2085,
- "old:virtual_from_version:46826" => 1048,
- "old:virtual_from_version:42725" => 1110,
- "old:virtual_from_version:42558" => 1070,
- "old:virtual_from_version:47298" => 1070,
- "old:virtual_from_version:47338" => 1070,
- "old:virtual_from_version:50708" => 1533,
- "old:virtual_from_version:49680" => 3190,
- "old:virtual_from_version:40218" => 1112,
- "old:virtual_from_version:46816" => 1509,
- "old:virtual_from_version:46173" => 1009,
- "old:virtual_from_version:40425" => 1335,
- "old:virtual_from_version:40187" => 1051,
- "old:virtual_from_version:45447" => 1107,
- "old:virtual_from_version:47444" => 1077,
- "old:virtual_from_version:47856" => 1314,
- "old:virtual_from_version:47469" => 1077,
- "old:virtual_from_version:49077" => 1666,
- "old:virtual_from_version:49614" => 1025,
- "old:virtual_from_version:39577" => 1087,
- "old:virtual_from_version:49333" => 1404,
- "old:virtual_from_version:42392" => 1077,
- "old:virtual_from_version:50525" => 1062,
- "old:virtual_from_version:45748" => 1019,
- "old:virtual_from_version:49889" => 1070,
- "old:virtual_from_version:47849" => 1077,
- "old:virtual_from_version:46393" => 1404,
- "old:virtual_from_version:46516" => 1125,
- "old:virtual_from_version:44499" => 1125,
- "old:virtual_from_version:39431" => 1110,
- "old:virtual_from_version:42026" => 1070,
- "old:virtual_from_version:50068" => 3131,
- "old:virtual_from_version:44444" => 1070,
- "old:virtual_from_version:44216" => 1419,
- "old:virtual_from_version:47994" => 1070,
- "old:virtual_from_version:10002" => 2001,
- "old:virtual_from_version:49736" => 1007,
- "old:virtual_from_version:42682" => 1037,
- "old:virtual_from_version:45129" => 1009,
- "old:virtual_from_version:42100" => 1037,
- "old:virtual_from_version:50319" => 1125,
- "old:virtual_from_version:42664" => 1077,
- "old:virtual_from_version:49904" => 3131,
- "old:virtual_from_version:38705" => 1051,
- "old:virtual_from_version:45502" => 1009,
- "old:virtual_from_version:50445" => 3189,
- "old:virtual_from_version:50647" => 1110,
- "old:virtual_from_version:44184" => 1404,
- "old:virtual_from_version:40339" => 1328,
- "old:virtual_from_version:42302" => 1009,
- "old:virtual_from_version:42587" => 1037,
- "old:virtual_from_version:4525 " => 1055,
- "old:virtual_from_version:49594" => 1105,
- "old:virtual_from_version:45226" => 1414,
- "old:virtual_from_version:42754" => 1077,
- "old:virtual_from_version:47300" => 1109,
- "old:virtual_from_version:49554" => 1005,
- "old:virtual_from_version:49844" => 3194,
- "old:virtual_from_version:38811" => 1009,
- "old:virtual_from_version:43109" => 2070,
- "old:virtual_from_version:49199" => 1070,
- "old:virtual_from_version:49278" => 1070,
- "old:virtual_from_version:46774" => 1666,
- "old:virtual_from_version:46315" => 1666,
- "old:virtual_from_version:44671" => 1224,
- "old:virtual_from_version:45723" => 1070,
- "old:virtual_from_version:44060" => 1070,
- "old:virtual_from_version:49887" => 1311,
- "old:virtual_from_version:50107" => 3221,
- "old:virtual_from_version:47710" => 1107,
- "old:virtual_from_version:43099" => 2091,
- "old:virtual_from_version:46667" => 1141,
- "old:virtual_from_version:42079" => 1051,
- "old:virtual_from_version:50184" => 3131,
- "old:virtual_from_version:47452" => 1077,
- "old:virtual_from_version:46073" => 1070,
- "old:virtual_from_version:50422" => 1413,
- "old:virtual_from_version:46378" => 1076,
- "old:virtual_from_version:49846" => 1172,
- "old:virtual_from_version:47971" => 1077,
- "old:virtual_from_version:46850" => 1070,
- "old:virtual_from_version:46241" => 1107,
- "old:virtual_from_version:44262" => 1009,
- "old:virtual_from_version:38787" => 1130,
- "old:virtual_from_version:40528" => 1077,
- "old:virtual_from_version:44817" => 1107,
- "old:virtual_from_version:44691" => 1037,
- "old:virtual_from_version:44946" => 1419,
- "old:virtual_from_version:49978" => 3137,
- "old:virtual_from_version:40506" => 1077,
- "old:virtual_from_version:44808" => 1172,
- "old:virtual_from_version:45436" => 1077,
- "old:virtual_from_version:45697" => 1067,
- "old:virtual_from_version:50753" => 3266,
- "old:virtual_from_version:49327" => 1689,
- "old:virtual_from_version:45831" => 1009,
- "old:virtual_from_version:49370" => 1005,
- "old:virtual_from_version:38642" => 1123,
- "old:virtual_from_version:49048" => 1585,
- "old:virtual_from_version:49641" => 1067,
- "old:virtual_from_version:46830" => 1070,
- "old:virtual_from_version:47308" => 1062,
- "old:virtual_from_version:50227" => 3228,
- "old:virtual_from_version:46294" => 1555,
- "old:virtual_from_version:47252" => 1109,
- "old:virtual_from_version:39394" => 1051,
- "old:virtual_from_version:39331" => 1030,
- "old:virtual_from_version:40812" => 1067,
- "old:virtual_from_version:46534" => 1533,
- "old:virtual_from_version:46021" => 1461,
- "old:virtual_from_version:39134" => 1094,
- "old:virtual_from_version:45669" => 1077,
- "old:virtual_from_version:13338" => 1016,
- "old:virtual_from_version:46732" => 1172,
- "old:virtual_from_version:42422" => 1107,
- "old:virtual_from_version:40758" => 1081,
- "old:virtual_from_version:50110" => 1070,
- "old:virtual_from_version:46527" => 1077,
- "old:virtual_from_version:45381" => 1404,
- "old:virtual_from_version:42739" => 1077,
- "old:virtual_from_version:44116" => 1070,
- "old:virtual_from_version:42599" => 1007,
- "old:virtual_from_version:47930" => 1125,
- "old:virtual_from_version:47002" => 1037,
- "old:virtual_from_version:40435" => 1067,
- "old:virtual_from_version:40583" => 1136,
- "old:virtual_from_version:13386" => 1039,
- "old:virtual_from_version:47712" => 1077,
- "old:virtual_from_version:44392" => 1095,
- "old:virtual_from_version:50498" => 3251,
- "old:virtual_from_version:50391" => 1172,
- "old:virtual_from_version:45133" => 1488,
- "old:virtual_from_version:49598" => 1095,
- "old:virtual_from_version:47527" => 1048,
- "old:virtual_from_version:44159" => 1070,
- "old:virtual_from_version:42030" => 1070,
- "old:virtual_from_version:40456" => 1035,
- "old:virtual_from_version:45115" => 1070,
- "old:virtual_from_version:42019" => 1077,
- "old:virtual_from_version:13352" => 1021,
- "old:virtual_from_version:42328" => 1037,
- "old:virtual_from_version:49395" => 3120,
- "old:virtual_from_version:43056" => 2058,
- "old:virtual_from_version:44199" => 1077,
- "old:virtual_from_version:44223" => 1077,
- "old:virtual_from_version:48042" => 2139,
- "old:virtual_from_version:45467" => 1070,
- "old:virtual_from_version:38776" => 1067,
- "old:virtual_from_version:50690" => 1417,
- "old:virtual_from_version:50509" => 3183,
- "old:virtual_from_version:49962" => 3131,
- "old:virtual_from_version:46510" => 1585,
- "old:virtual_from_version:46166" => 1630,
- "old:virtual_from_version:50747" => 3267,
- "old:virtual_from_version:44411" => 1019,
- "old:virtual_from_version:47533" => 1109,
- "old:virtual_from_version:50138" => 1659,
- "old:virtual_from_version:46225" => 1077,
- "old:virtual_from_version:47394" => 1070,
- "old:virtual_from_version:49942" => 1172,
- "old:virtual_from_version:45558" => 1125,
- "old:virtual_from_version:44175" => 1067,
- "old:virtual_from_version:42827" => 1070,
- "old:virtual_from_version:42040" => 1037,
- "old:virtual_from_version:47049" => 1689,
- "old:virtual_from_version:42786" => 1497,
- "old:virtual_from_version:50345" => 3233,
- "old:virtual_from_version:43076" => 2040,
- "old:virtual_from_version:46453" => 1009,
- "old:virtual_from_version:42917" => 1077,
- "old:virtual_from_version:49579" => 1498,
- "old:virtual_from_version:44170" => 1125,
- "old:virtual_from_version:44843" => 1057,
- "old:virtual_from_version:42087" => 1070,
- "old:virtual_from_version:45893" => 1009,
- "old:virtual_from_version:45662" => 1005,
- "old:virtual_from_version:42145" => 1009,
- "old:virtual_from_version:40598" => 1077,
- "old:virtual_from_version:50024" => 3218,
- "old:virtual_from_version:39545" => 1148,
- "old:virtual_from_version:49124" => 1077,
- "old:virtual_from_version:40355" => 1091,
- "old:virtual_from_version:39046" => 1095,
- "old:virtual_from_version:46444" => 1172,
- "old:virtual_from_version:40896" => 1048,
- "old:virtual_from_version:47643" => 1583,
- "old:virtual_from_version:40961" => 1070,
- "old:virtual_from_version:45613" => 1136,
- "old:virtual_from_version:46929" => 1125,
- "old:virtual_from_version:45022" => 1078,
- "old:virtual_from_version:45804" => 1025,
- "old:virtual_from_version:44251" => 1077,
- "old:virtual_from_version:44429" => 1049,
- "old:virtual_from_version:50640" => 1001,
- "old:virtual_from_version:49222" => 1393,
- "old:virtual_from_version:50336" => 1105,
- "old:virtual_from_version:46951" => 1172,
- "old:virtual_from_version:46507" => 1580,
- "old:virtual_from_version:46598" => 1172,
- "old:virtual_from_version:42178" => 1172,
- "old:virtual_from_version:40903" => 1070,
- "old:virtual_from_version:50694" => 1070,
- "old:virtual_from_version:47509" => 1009,
- "old:virtual_from_version:49685" => 1105,
- "old:virtual_from_version:45040" => 1022,
- "old:virtual_from_version:45758" => 1070,
- "old:virtual_from_version:42803" => 1107,
- "old:virtual_from_version:48023" => 2124,
- "old:virtual_from_version:49643" => 1583,
- "old:virtual_from_version:42908" => 1009,
- "old:virtual_from_version:46096" => 1362,
- "old:virtual_from_version:40793" => 1070,
- "old:virtual_from_version:45083" => 1125,
- "old:virtual_from_version:42142" => 1351,
- "old:virtual_from_version:42226" => 1077,
- "old:virtual_from_version:42461" => 1070,
- "old:virtual_from_version:45251" => 1030,
- "old:virtual_from_version:45369" => 1461,
- "old:virtual_from_version:44761" => 1077,
- "old:virtual_from_version:47058" => 1580,
- "old:virtual_from_version:44038" => 1007,
- "old:virtual_from_version:45435" => 1070,
- "old:virtual_from_version:44874" => 1009,
- "old:virtual_from_version:46074" => 1172,
- "old:virtual_from_version:49344" => 1067,
- "old:virtual_from_version:46143" => 1070,
- "old:virtual_from_version:50191" => 1070,
- "old:virtual_from_version:42884" => 1109,
- "old:virtual_from_version:44448" => 1249,
- "old:virtual_from_version:46925" => 3008,
- "old:virtual_from_version:44979" => 1107,
- "old:virtual_from_version:40117" => 1100,
- "old:virtual_from_version:50613" => 3259,
- "old:virtual_from_version:47330" => 1070,
- "old:virtual_from_version:42901" => 1070,
- "old:virtual_from_version:46704" => 1697,
- "old:virtual_from_version:45989" => 1640,
- "old:virtual_from_version:45606" => 1009,
- "old:virtual_from_version:47036" => 1583,
- "old:virtual_from_version:47762" => 1666,
- "old:virtual_from_version:50059" => 3131,
- "old:virtual_from_version:44136" => 1077,
- "old:virtual_from_version:47993" => 1077,
- "old:virtual_from_version:46818" => 1172,
- "old:virtual_from_version:50335" => 1224,
- "old:virtual_from_version:42401" => 1077,
- "old:virtual_from_version:47246" => 1109,
- "old:virtual_from_version:49113" => 1649,
- "old:virtual_from_version:49675" => 1009,
- "old:virtual_from_version:42172" => 1009,
- "old:virtual_from_version:44304" => 1509,
- "old:virtual_from_version:39336" => 1158,
- "old:virtual_from_version:47328" => 1109,
- "old:virtual_from_version:42322" => 1404,
- "old:virtual_from_version:48007" => 2107,
- "old:virtual_from_version:47578" => 1109,
- "old:virtual_from_version:39715" => 1136,
- "old:virtual_from_version:45633" => 1077,
- "old:virtual_from_version:42829" => 1009,
- "old:virtual_from_version:44373" => 1064,
- "old:virtual_from_version:42887" => 1077,
- "old:virtual_from_version:45123" => 1009,
- "old:virtual_from_version:44334" => 1025,
- "old:virtual_from_version:42382" => 1009,
- "old:virtual_from_version:44793" => 1172,
- "old:virtual_from_version:50271" => 1025,
- "old:virtual_from_version:49941" => 1112,
- "old:virtual_from_version:45590" => 1172,
- "old:virtual_from_version:42263" => 1037,
- "old:virtual_from_version:50752" => 3259,
- "old:virtual_from_version:42063" => 1077,
- "old:virtual_from_version:50252" => 1150,
- "old:virtual_from_version:42410" => 1070,
- "old:virtual_from_version:42018" => 1125,
- "old:virtual_from_version:39710" => 1070,
- "old:virtual_from_version:44282" => 1109,
- "old:virtual_from_version:45392" => 1009,
- "old:virtual_from_version:46743" => 1077,
- "old:virtual_from_version:50202" => 1222,
- "old:virtual_from_version:38657" => 1128,
- "old:virtual_from_version:40498" => 1070,
- "old:virtual_from_version:47311" => 1037,
- "old:virtual_from_version:44391" => 1049,
- "old:virtual_from_version:42940" => 1077,
- "old:virtual_from_version:44078" => 1037,
- "old:virtual_from_version:47582" => 1666,
- "old:virtual_from_version:45078" => 1077,
- "old:virtual_from_version:44880" => 1009,
- "old:virtual_from_version:42352" => 1077,
- "old:virtual_from_version:46894" => 1125,
- "old:virtual_from_version:40486" => 1077,
- "old:virtual_from_version:49764" => 1070,
- "old:virtual_from_version:45578" => 1411,
- "old:virtual_from_version:47979" => 1109,
- "old:virtual_from_version:46863" => 1077,
- "old:virtual_from_version:46177" => 1070,
- "old:virtual_from_version:46412" => 1109,
- "old:virtual_from_version:44892" => 1077,
- "old:virtual_from_version:42616" => 1037,
- "old:virtual_from_version:49468" => 1696,
- "old:virtual_from_version:47663" => 1565,
- "old:virtual_from_version:50397" => 1070,
- "old:virtual_from_version:50067" => 1009,
- "old:virtual_from_version:44713" => 1077,
- "old:virtual_from_version:46858" => 1172,
- "old:virtual_from_version:45017" => 1090,
- "old:virtual_from_version:46234" => 1172,
- "old:virtual_from_version:47248" => 3020,
- "old:virtual_from_version:49686" => 1008,
- "old:virtual_from_version:45853" => 1077,
- "old:virtual_from_version:45151" => 1125,
- "old:virtual_from_version:49609" => 1587,
- "old:virtual_from_version:49357" => 3167,
- "old:virtual_from_version:50573" => 3259,
- "old:virtual_from_version:40780" => 1009,
- "old:virtual_from_version:46980" => 1172,
- "old:virtual_from_version:42066" => 1070,
- "old:virtual_from_version:49207" => 1077,
- "old:virtual_from_version:45774" => 1125,
- "old:virtual_from_version:40991" => 1404,
- "old:virtual_from_version:44737" => 1083,
- "old:virtual_from_version:42443" => 1077,
- "old:virtual_from_version:45887" => 1009,
- "old:virtual_from_version:40523" => 1070,
- "old:virtual_from_version:42466" => 1077,
- "old:virtual_from_version:45871" => 1125,
- "old:virtual_from_version:47952" => 1070,
- "old:virtual_from_version:49080" => 1110,
- "old:virtual_from_version:38345" => 1069,
- "old:virtual_from_version:47259" => 1070,
- "old:virtual_from_version:43025" => 2050,
- "old:virtual_from_version:43034" => 2033,
- "old:virtual_from_version:45419" => 1009,
- "old:virtual_from_version:49062" => 1070,
- "old:virtual_from_version:50069" => 3214,
- "old:virtual_from_version:40785" => 1070,
- "old:virtual_from_version:44569" => 1077,
- "old:virtual_from_version:46364" => 1533,
- "old:virtual_from_version:42340" => 1136,
- "old:virtual_from_version:40240" => 1077,
- "old:virtual_from_version:46324" => 1077,
- "old:virtual_from_version:46945" => 1070,
- "old:virtual_from_version:42543" => 1037,
- "old:virtual_from_version:46227" => 1172,
- "old:virtual_from_version:40781" => 1025,
- "old:virtual_from_version:40418" => 1067,
- "old:virtual_from_version:50417" => 3131,
- "old:virtual_from_version:47237" => 1077,
- "old:virtual_from_version:46547" => 1077,
- "old:virtual_from_version:39580" => 1085,
- "old:virtual_from_version:40463" => 1311,
- "old:virtual_from_version:40769" => 1125,
- "old:virtual_from_version:49484" => 3162,
- "old:virtual_from_version:45598" => 1070,
- "old:virtual_from_version:44767" => 1070,
- "old:virtual_from_version:45503" => 1077,
- "old:virtual_from_version:45252" => 1144,
- "old:virtual_from_version:43043" => 2022,
- "old:virtual_from_version:40544" => 1067,
- "old:virtual_from_version:49025" => 1077,
- "old:virtual_from_version:46693" => 1077,
- "old:virtual_from_version:46814" => 1070,
- "old:virtual_from_version:44676" => 1110,
- "old:virtual_from_version:42893" => 1077,
- "old:virtual_from_version:49502" => 1037,
- "old:virtual_from_version:50728" => 3262,
- "old:virtual_from_version:49283" => 3136,
- "old:virtual_from_version:44324" => 1006,
- "old:virtual_from_version:42076" => 1077,
- "old:virtual_from_version:49488" => 1125,
- "old:virtual_from_version:42091" => 1077,
- "old:virtual_from_version:45321" => 1009,
- "old:virtual_from_version:44119" => 1037,
- "old:virtual_from_version:40524" => 1091,
- "old:virtual_from_version:47649" => 1125,
- "old:virtual_from_version:42321" => 1109,
- "old:virtual_from_version:40774" => 1048,
- "old:virtual_from_version:39724" => 1108,
- "old:virtual_from_version:45299" => 1582,
- "old:virtual_from_version:42271" => 1025,
- "old:virtual_from_version:50636" => 1148,
- "old:virtual_from_version:42724" => 1037,
- "old:virtual_from_version:44280" => 1077,
- "old:virtual_from_version:45920" => 1633,
- "old:virtual_from_version:44916" => 1172,
- "old:virtual_from_version:45601" => 1141,
- "old:virtual_from_version:50062" => 3131,
- "old:virtual_from_version:46106" => 1397,
- "old:virtual_from_version:42402" => 1037,
- "old:virtual_from_version:47887" => 1038,
- "old:virtual_from_version:45707" => 1404,
- "old:virtual_from_version:49069" => 1077,
- "old:virtual_from_version:47200" => 1077,
- "old:virtual_from_version:45904" => 1062,
- "old:virtual_from_version:42425" => 1077,
- "old:virtual_from_version:42785" => 1083,
- "old:virtual_from_version:40959" => 1413,
- "old:virtual_from_version:44475" => 1037,
- "old:virtual_from_version:47511" => 1621,
- "old:virtual_from_version:40878" => 1009,
- "old:virtual_from_version:49921" => 3207,
- "old:virtual_from_version:50740" => 3266,
- "old:virtual_from_version:44978" => 1037,
- "old:virtual_from_version:50447" => 1007,
- "old:virtual_from_version:49372" => 1057,
- "old:virtual_from_version:47660" => 1051,
- "old:virtual_from_version:46952" => 1077,
- "old:virtual_from_version:46172" => 1070,
- "old:virtual_from_version:46287" => 1070,
- "old:virtual_from_version:10005" => 2004,
- "old:virtual_from_version:44492" => 1125,
- "old:virtual_from_version:50621" => 1417,
- "old:virtual_from_version:45062" => 1105,
- "old:virtual_from_version:49162" => 1404,
- "old:virtual_from_version:39886" => 1107,
- "old:virtual_from_version:46512" => 1489,
- "old:virtual_from_version:44332" => 1009,
- "old:virtual_from_version:46108" => 1107,
- "old:virtual_from_version:46845" => 1077,
- "old:virtual_from_version:47972" => 1532,
- "old:virtual_from_version:40326" => 1404,
- "old:virtual_from_version:42838" => 1032,
- "old:virtual_from_version:44257" => 1523,
- "old:virtual_from_version:50012" => 3131,
- "old:virtual_from_version:45760" => 1019,
- "old:virtual_from_version:45328" => 1009,
- "old:virtual_from_version:45810" => 1413,
- "old:virtual_from_version:46140" => 1172,
- "old:virtual_from_version:42125" => 1009,
- "old:virtual_from_version:46654" => 1537,
- "old:virtual_from_version:46616" => 1125,
- "old:virtual_from_version:49991" => 3131,
- "old:virtual_from_version:44252" => 1037,
- "old:virtual_from_version:46985" => 1689,
- "old:virtual_from_version:42729" => 1070,
- "old:virtual_from_version:50033" => 1125,
- "old:virtual_from_version:46192" => 1009,
- "old:virtual_from_version:49170" => 1070,
- "old:virtual_from_version:42181" => 1009,
- "old:virtual_from_version:49257" => 1070,
- "old:virtual_from_version:49952" => 1025,
- "old:virtual_from_version:44881" => 1077,
- "old:virtual_from_version:49890" => 1048,
- "old:virtual_from_version:40839" => 1070,
- "old:virtual_from_version:40755" => 1107,
- "old:virtual_from_version:49596" => 1005,
- "old:virtual_from_version:42320" => 1037,
- "old:virtual_from_version:45603" => 1136,
- "old:virtual_from_version:50286" => 1404,
- "old:virtual_from_version:44194" => 1125,
- "old:virtual_from_version:45434" => 1136,
- "old:virtual_from_version:47387" => 3008,
- "old:virtual_from_version:47496" => 1077,
- "old:virtual_from_version:46365" => 1070,
- "old:virtual_from_version:42184" => 1031,
- "old:virtual_from_version:49307" => 1070,
- "old:virtual_from_version:44505" => 1110,
- "old:virtual_from_version:50580" => 1150,
- "old:virtual_from_version:49548" => 1009,
- "old:virtual_from_version:45367" => 1107,
- "old:virtual_from_version:45315" => 1009,
- "old:virtual_from_version:42745" => 1009,
- "old:virtual_from_version:42134" => 1037,
- "old:virtual_from_version:49252" => 1077,
- "old:virtual_from_version:44776" => 1351,
- "old:virtual_from_version:45915" => 1070,
- "old:virtual_from_version:50295" => 1314,
- "old:virtual_from_version:40550" => 1070,
- "old:virtual_from_version:46317" => 1032,
- "old:virtual_from_version:47725" => 1070,
- "old:virtual_from_version:40923" => 1110,
- "old:virtual_from_version:45089" => 1070,
- "old:virtual_from_version:45341" => 1125,
- "old:virtual_from_version:49655" => 1583,
- "old:virtual_from_version:47188" => 1125,
- "old:virtual_from_version:45790" => 1005,
- "old:virtual_from_version:42033" => 1037,
- "old:virtual_from_version:50226" => 3227,
- "old:virtual_from_version:40800" => 1009,
- "old:virtual_from_version:4519 " => 1054,
- "old:virtual_from_version:50117" => 1035,
- "old:virtual_from_version:46044" => 1070,
- "old:virtual_from_version:49960" => 1489,
- "old:virtual_from_version:40821" => 1025,
- "old:virtual_from_version:49302" => 1077,
- "old:virtual_from_version:40879" => 1077,
- "old:virtual_from_version:47687" => 1077,
- "old:virtual_from_version:46259" => 1070,
- "old:virtual_from_version:47434" => 1070,
- "old:virtual_from_version:49691" => 1583,
- "old:virtual_from_version:46283" => 1070,
- "old:virtual_from_version:42005" => 1077,
- "old:virtual_from_version:50111" => 1048,
- "old:virtual_from_version:40742" => 1009,
- "old:virtual_from_version:42484" => 1070,
- "old:virtual_from_version:49555" => 1051,
- "old:virtual_from_version:40720" => 1404,
- "old:virtual_from_version:46270" => 1666,
- "old:virtual_from_version:42001" => 1070,
- "old:virtual_from_version:44245" => 1521,
- "old:virtual_from_version:47448" => 1621,
- "old:virtual_from_version:49851" => 3203,
- "old:virtual_from_version:50593" => 1417,
- "old:virtual_from_version:42346" => 1112,
- "old:virtual_from_version:47513" => 1032,
- "old:virtual_from_version:45257" => 1107,
- "old:virtual_from_version:46089" => 1123,
- "old:virtual_from_version:44342" => 1037,
- "old:virtual_from_version:47247" => 1077,
- "old:virtual_from_version:49159" => 1404,
- "old:virtual_from_version:42194" => 1077,
- "old:virtual_from_version:47852" => 1584,
- "old:virtual_from_version:47274" => 1105,
- "old:virtual_from_version:49086" => 3094,
- "old:virtual_from_version:40660" => 1362,
- "old:virtual_from_version:46004" => 1000,
- "old:virtual_from_version:45244" => 1007,
- "old:virtual_from_version:44113" => 1105,
- "old:virtual_from_version:45580" => 1136,
- "old:virtual_from_version:44234" => 1037,
- "old:virtual_from_version:42014" => 1105,
- "old:virtual_from_version:50723" => 1417,
- "old:virtual_from_version:40530" => 1070,
- "old:virtual_from_version:42579" => 1110,
- "old:virtual_from_version:44721" => 1109,
- "old:virtual_from_version:49082" => 3094,
- "old:virtual_from_version:41012" => 2022,
- "old:virtual_from_version:50552" => 3264,
- "old:virtual_from_version:47011" => 3015,
- "old:virtual_from_version:42590" => 1172,
- "old:virtual_from_version:49996" => 3131,
- "old:virtual_from_version:49280" => 1404,
- "old:virtual_from_version:45274" => 1091,
- "old:virtual_from_version:50515" => 1057,
- "old:virtual_from_version:40845" => 1070,
- "old:virtual_from_version:44646" => 1025,
- "old:virtual_from_version:44982" => 1036,
- "old:virtual_from_version:47789" => 1583,
- "old:virtual_from_version:46416" => 1077,
- "old:virtual_from_version:44480" => 1125,
- "old:virtual_from_version:44640" => 1037,
- "old:virtual_from_version:47033" => 1077,
- "old:virtual_from_version:42440" => 1110,
- "old:virtual_from_version:44230" => 1125,
- "old:virtual_from_version:49749" => 1051,
- "old:virtual_from_version:50197" => 1105,
- "old:virtual_from_version:50660" => 1070,
- "old:virtual_from_version:49977" => 3212,
- "old:virtual_from_version:38678" => 1025,
- "old:virtual_from_version:47727" => 1051,
- "old:virtual_from_version:44896" => 1070,
- "old:virtual_from_version:42720" => 1070,
- "old:virtual_from_version:45557" => 1110,
- "old:virtual_from_version:47583" => 1689,
- "old:virtual_from_version:49925" => 1616,
- "old:virtual_from_version:47595" => 1070,
- "old:virtual_from_version:46358" => 1095,
- "old:virtual_from_version:45402" => 1029,
- "old:virtual_from_version:47750" => 1109,
- "old:virtual_from_version:47278" => 1125,
- "old:virtual_from_version:46340" => 1077,
- "old:virtual_from_version:46737" => 1067,
- "old:virtual_from_version:47343" => 1404,
- "old:virtual_from_version:45492" => 1077,
- "old:virtual_from_version:42465" => 1025,
- "old:virtual_from_version:44785" => 1077,
- "old:virtual_from_version:38383" => 1109,
- "old:virtual_from_version:42056" => 1009,
- "old:virtual_from_version:45348" => 1136,
- "old:virtual_from_version:45822" => 1077,
- "old:virtual_from_version:40602" => 1091,
- "old:virtual_from_version:50659" => 1033,
- "old:virtual_from_version:46260" => 1172,
- "old:virtual_from_version:42524" => 1070,
- "old:virtual_from_version:42963" => 1067,
- "old:virtual_from_version:46489" => 1112,
- "old:virtual_from_version:44751" => 1070,
- "old:virtual_from_version:47355" => 1621,
- "old:virtual_from_version:49510" => 1689,
- "old:virtual_from_version:46499" => 1489,
- "old:virtual_from_version:42740" => 1037,
- "old:virtual_from_version:44889" => 1077,
- "old:virtual_from_version:47697" => 1621,
- "old:virtual_from_version:40751" => 1067,
- "old:virtual_from_version:49061" => 3094,
- "old:virtual_from_version:40417" => 1404,
- "old:virtual_from_version:44018" => 1070,
- "old:virtual_from_version:49240" => 1077,
- "old:virtual_from_version:44504" => 1037,
- "old:virtual_from_version:38360" => 1042,
- "old:virtual_from_version:44137" => 1037,
- "old:virtual_from_version:46982" => 1583,
- "old:virtual_from_version:42844" => 1037,
- "old:virtual_from_version:50568" => 1025,
- "old:virtual_from_version:47577" => 1037,
- "old:virtual_from_version:44357" => 1172,
- "old:virtual_from_version:42994" => 1510,
- "old:virtual_from_version:49857" => 3194,
- "old:virtual_from_version:47538" => 1025,
- "old:virtual_from_version:50669" => 3208,
- "old:virtual_from_version:40207" => 1091,
- "old:virtual_from_version:44400" => 1144,
- "old:virtual_from_version:49563" => 1498,
- "old:virtual_from_version:45271" => 1067,
- "old:virtual_from_version:45497" => 1070,
- "old:virtual_from_version:45608" => 1077,
- "old:virtual_from_version:49794" => 1136,
- "old:virtual_from_version:49602" => 1070,
- "old:virtual_from_version:50143" => 3094,
- "old:virtual_from_version:50004" => 1314,
- "old:virtual_from_version:46300" => 1107,
- "old:virtual_from_version:46628" => 1568,
- "old:virtual_from_version:42619" => 1025,
- "old:virtual_from_version:45759" => 1009,
- "old:virtual_from_version:45205" => 1224,
- "old:virtual_from_version:46479" => 1321,
- "old:virtual_from_version:49804" => 1404,
- "old:virtual_from_version:50758" => 1417,
- "old:virtual_from_version:45599" => 1009,
- "old:virtual_from_version:42639" => 1070,
- "old:virtual_from_version:49811" => 1444,
- "old:virtual_from_version:49608" => 1070,
- "old:virtual_from_version:46883" => 1125,
- "old:virtual_from_version:41015" => 2024,
- "old:virtual_from_version:42086" => 1037,
- "old:virtual_from_version:50663" => 1417,
- "old:virtual_from_version:49909" => 3131,
- "old:virtual_from_version:46613" => 1613,
- "old:virtual_from_version:47155" => 1105,
- "old:virtual_from_version:50250" => 3131,
- "old:virtual_from_version:48011" => 2111,
- "old:virtual_from_version:47541" => 1125,
- "old:virtual_from_version:44472" => 1070,
- "old:virtual_from_version:49355" => 1689,
- "old:virtual_from_version:42077" => 1037,
- "old:virtual_from_version:47682" => 1070,
- "old:virtual_from_version:44174" => 1037,
- "old:virtual_from_version:45836" => 1397,
- "old:virtual_from_version:40962" => 1006,
- "old:virtual_from_version:40315" => 1091,
- "old:virtual_from_version:49855" => 1537,
- "old:virtual_from_version:45114" => 1077,
- "old:virtual_from_version:49863" => 1125,
- "old:virtual_from_version:49379" => 1077,
- "old:virtual_from_version:50000" => 1100,
- "old:virtual_from_version:45685" => 1019,
- "old:virtual_from_version:49813" => 3131,
- "old:virtual_from_version:46327" => 1070,
- "old:virtual_from_version:46120" => 1404,
- "old:virtual_from_version:42354" => 1067,
- "old:virtual_from_version:45713" => 1123,
- "old:virtual_from_version:44865" => 1172,
- "old:virtual_from_version:42333" => 1009,
- "old:virtual_from_version:44816" => 1172,
- "old:virtual_from_version:13397" => 1043,
- "old:virtual_from_version:50094" => 1136,
- "old:virtual_from_version:42148" => 1037,
- "old:virtual_from_version:49747" => 1158,
- "old:virtual_from_version:39478" => 1032,
- "old:virtual_from_version:44343" => 1062,
- "old:virtual_from_version:49527" => 1666,
- "old:virtual_from_version:47743" => 1109,
- "old:virtual_from_version:49604" => 1009,
- "old:virtual_from_version:40358" => 1332,
- "old:virtual_from_version:46374" => 1584,
- "old:virtual_from_version:47739" => 1070,
- "old:virtual_from_version:40239" => 1125,
- "old:virtual_from_version:47529" => 1077,
- "old:virtual_from_version:44303" => 1057,
- "old:virtual_from_version:47931" => 1109,
- "old:virtual_from_version:42736" => 1038,
- "old:virtual_from_version:47013" => 1007,
- "old:virtual_from_version:49672" => 1070,
- "old:virtual_from_version:45888" => 1025,
- "old:virtual_from_version:50602" => 1444,
- "old:virtual_from_version:49067" => 3137,
- "old:virtual_from_version:40545" => 1105,
- "old:virtual_from_version:50529" => 1362,
- "old:virtual_from_version:43052" => 2055,
- "old:virtual_from_version:46593" => 1037,
- "old:virtual_from_version:47375" => 1070,
- "old:virtual_from_version:45926" => 1077,
- "old:virtual_from_version:44921" => 1110,
- "old:virtual_from_version:42036" => 1413,
- "old:virtual_from_version:40522" => 1321,
- "old:virtual_from_version:45945" => 1077,
- "old:virtual_from_version:42499" => 1172,
- "old:virtual_from_version:50029" => 1125,
- "old:virtual_from_version:44088" => 1025,
- "old:virtual_from_version:44991" => 1019,
- "old:virtual_from_version:42312" => 1070,
- "old:virtual_from_version:44672" => 1070,
- "old:virtual_from_version:42035" => 1172,
- "old:virtual_from_version:49242" => 1615,
- "old:virtual_from_version:42972" => 1009,
- "old:virtual_from_version:44420" => 1031,
- "old:virtual_from_version:40353" => 1404,
- "old:virtual_from_version:40854" => 1048,
- "old:virtual_from_version:46723" => 1077,
- "old:virtual_from_version:49854" => 1105,
- "old:virtual_from_version:46827" => 1009,
- "old:virtual_from_version:42553" => 1070,
- "old:virtual_from_version:38953" => 1136,
- "old:virtual_from_version:44421" => 1036,
- "old:virtual_from_version:49975" => 3131,
- "old:virtual_from_version:42770" => 1009,
- "old:virtual_from_version:45820" => 1070,
- "old:virtual_from_version:46678" => 1125,
- "old:virtual_from_version:40727" => 1070,
- "old:virtual_from_version:42435" => 1009,
- "old:virtual_from_version:45752" => 1009,
- "old:virtual_from_version:44834" => 1402,
- "old:virtual_from_version:49765" => 1025,
- "old:virtual_from_version:47368" => 1362,
- "old:virtual_from_version:44515" => 1009,
- "old:virtual_from_version:42149" => 1110,
- "old:virtual_from_version:44855" => 1077,
- "old:virtual_from_version:49315" => 1070,
- "old:virtual_from_version:45734" => 1007,
- "old:virtual_from_version:42009" => 1067,
- "old:virtual_from_version:39125" => 1094,
- "old:virtual_from_version:40250" => 1025,
- "old:virtual_from_version:47261" => 1109,
- "old:virtual_from_version:49987" => 3120,
- "old:virtual_from_version:49190" => 1565,
- "old:virtual_from_version:38349" => 1025,
- "old:virtual_from_version:38557" => 1067,
- "old:virtual_from_version:42456" => 1041,
- "old:virtual_from_version:46651" => 1070,
- "old:virtual_from_version:47303" => 1037,
- "old:virtual_from_version:50065" => 1107,
- "old:virtual_from_version:49911" => 3206,
- "old:virtual_from_version:42501" => 1070,
- "old:virtual_from_version:46757" => 1125,
- "old:virtual_from_version:42734" => 1077,
- "old:virtual_from_version:46777" => 1404,
- "old:virtual_from_version:46994" => 1689,
- "old:virtual_from_version:49715" => 1689,
- "old:virtual_from_version:45733" => 1070,
- "old:virtual_from_version:45842" => 1009,
- "old:virtual_from_version:40744" => 1077,
- "old:virtual_from_version:43083" => 2080,
- "old:virtual_from_version:45946" => 1404,
- "old:virtual_from_version:45843" => 1025,
- "old:virtual_from_version:50281" => 1150,
- "old:virtual_from_version:46237" => 1035,
- "old:virtual_from_version:42721" => 1009,
- "old:virtual_from_version:47839" => 1621,
- "old:virtual_from_version:40350" => 1009,
- "old:virtual_from_version:40388" => 1048,
- "old:virtual_from_version:47422" => 1009,
- "old:virtual_from_version:44556" => 1070,
- "old:virtual_from_version:45373" => 1125,
- "old:virtual_from_version:50136" => 3131,
- "old:virtual_from_version:40621" => 1077,
- "old:virtual_from_version:47864" => 1584,
- "old:virtual_from_version:46123" => 1077,
- "old:virtual_from_version:40752" => 1000,
- "old:virtual_from_version:45715" => 1172,
- "old:virtual_from_version:44952" => 1009,
- "old:virtual_from_version:45326" => 1587,
- "old:virtual_from_version:45515" => 1580,
- "old:virtual_from_version:44188" => 1009,
- "old:virtual_from_version:44886" => 1070,
- "old:virtual_from_version:46265" => 1067,
- "old:virtual_from_version:49497" => 3178,
- "old:virtual_from_version:45688" => 1009,
- "old:virtual_from_version:47780" => 1109,
- "old:virtual_from_version:49507" => 1070,
- "old:virtual_from_version:47089" => 1077,
- "old:virtual_from_version:44068" => 1070,
- "old:virtual_from_version:50105" => 1032,
- "old:virtual_from_version:40940" => 1037,
- "old:virtual_from_version:49006" => 1584,
- "old:virtual_from_version:45051" => 1043,
- "old:virtual_from_version:40747" => 1009,
- "old:virtual_from_version:47410" => 3008,
- "old:virtual_from_version:47060" => 1070,
- "old:virtual_from_version:45110" => 1125,
- "old:virtual_from_version:50711" => 1417,
- "old:virtual_from_version:47172" => 1070,
- "old:virtual_from_version:40988" => 1077,
- "old:virtual_from_version:45604" => 1070,
- "old:virtual_from_version:47773" => 1565,
- "old:virtual_from_version:43035" => 2034,
- "old:virtual_from_version:47331" => 1125,
- "old:virtual_from_version:49946" => 1404,
- "old:virtual_from_version:49968" => 1585,
- "old:virtual_from_version:49559" => 1410,
- "old:virtual_from_version:44270" => 1070,
- "old:virtual_from_version:42299" => 1000,
- "old:virtual_from_version:44903" => 1077,
- "old:virtual_from_version:50291" => 3232,
- "old:virtual_from_version:44532" => 1070,
- "old:virtual_from_version:50327" => 1125,
- "old:virtual_from_version:50759" => 3259,
- "old:virtual_from_version:44431" => 1095,
- "old:virtual_from_version:46646" => 1062,
- "old:virtual_from_version:47227" => 1109,
- "old:virtual_from_version:44546" => 1009,
- "old:virtual_from_version:46465" => 1150,
- "old:virtual_from_version:45394" => 1009,
- "old:virtual_from_version:42071" => 1070,
- "old:virtual_from_version:50576" => 1006,
- "old:virtual_from_version:47935" => 3120,
- "old:virtual_from_version:46623" => 1125,
- "old:virtual_from_version:44679" => 1414,
- "old:virtual_from_version:46363" => 1077,
- "old:virtual_from_version:45776" => 1304,
- "old:virtual_from_version:42863" => 1070,
- "old:virtual_from_version:44181" => 1083,
- "old:virtual_from_version:42935" => 1077,
- "old:virtual_from_version:45405" => 1112,
- "old:virtual_from_version:47076" => 1070,
- "old:virtual_from_version:42085" => 1077,
- "old:virtual_from_version:44146" => 1077,
- "old:virtual_from_version:50750" => 1580,
- "old:virtual_from_version:46726" => 1583,
- "old:virtual_from_version:48016" => 2116,
- "old:virtual_from_version:44097" => 1037,
- "old:virtual_from_version:39051" => 1069,
- "old:virtual_from_version:49931" => 3206,
- "old:virtual_from_version:15751" => 1011,
- "old:virtual_from_version:45549" => 1009,
- "old:virtual_from_version:45070" => 1070,
- "old:virtual_from_version:47401" => 3008,
- "old:virtual_from_version:42306" => 1037,
- "old:virtual_from_version:42808" => 1077,
- "old:virtual_from_version:39513" => 1077,
- "old:virtual_from_version:45300" => 1125,
- "old:virtual_from_version:44709" => 1222,
- "old:virtual_from_version:49914" => 1100,
- "old:virtual_from_version:46572" => 1070,
- "old:virtual_from_version:44043" => 1125,
- "old:virtual_from_version:45621" => 1112,
- "old:virtual_from_version:44861" => 1172,
- "old:virtual_from_version:46971" => 1070,
- "old:virtual_from_version:49547" => 1105,
- "old:virtual_from_version:50630" => 1555,
- "old:virtual_from_version:46111" => 1070,
- "old:virtual_from_version:40907" => 1070,
- "old:virtual_from_version:45498" => 1125,
- "old:virtual_from_version:46626" => 1025,
- "old:virtual_from_version:47841" => 3108,
- "old:virtual_from_version:47920" => 1077,
- "old:virtual_from_version:46961" => 1070,
- "old:virtual_from_version:47942" => 1077,
- "old:virtual_from_version:49636" => 3185,
- "old:virtual_from_version:46007" => 1110,
- "old:virtual_from_version:46397" => 1048,
- "old:virtual_from_version:44449" => 1172,
- "old:virtual_from_version:49213" => 1009,
- "old:virtual_from_version:44044" => 1107,
- "old:virtual_from_version:48001" => 2102,
- "old:virtual_from_version:44802" => 1070,
- "old:virtual_from_version:44053" => 1009,
- "old:virtual_from_version:50300" => 1404,
- "old:virtual_from_version:50384" => 1314,
- "old:virtual_from_version:44644" => 1009,
- "old:virtual_from_version:49506" => 3179,
- "old:virtual_from_version:45107" => 1070,
- "old:virtual_from_version:47428" => 1037,
- "old:virtual_from_version:50456" => 1006,
- "old:virtual_from_version:45865" => 1070,
- "old:virtual_from_version:47066" => 3008,
- "old:virtual_from_version:49727" => 1070,
- "old:virtual_from_version:45778" => 1062,
- "old:virtual_from_version:49237" => 1077,
- "old:virtual_from_version:44377" => 1021,
- "old:virtual_from_version:47053" => 1107,
- "old:virtual_from_version:49537" => 1009,
- "old:virtual_from_version:49163" => 3151,
- "old:virtual_from_version:50208" => 3139,
- "old:virtual_from_version:45589" => 1057,
- "old:virtual_from_version:42288" => 1009,
- "old:virtual_from_version:42212" => 1070,
- "old:virtual_from_version:44467" => 1070,
- "old:virtual_from_version:45349" => 1413,
- "old:virtual_from_version:47631" => 1077,
- "old:virtual_from_version:44757" => 1136,
- "old:virtual_from_version:47801" => 1070,
- "old:virtual_from_version:23466" => 1076,
- "old:virtual_from_version:50058" => 1314,
- "old:virtual_from_version:44100" => 1025,
- "old:virtual_from_version:47751" => 1172,
- "old:virtual_from_version:44804" => 1077,
- "old:virtual_from_version:47891" => 1077,
- "old:virtual_from_version:49791" => 1006,
- "old:virtual_from_version:46696" => 1025,
- "old:virtual_from_version:45479" => 1172,
- "old:virtual_from_version:38748" => 1048,
- "old:virtual_from_version:47051" => 1070,
- "old:virtual_from_version:46649" => 1077,
- "old:virtual_from_version:47934" => 1689,
- "old:virtual_from_version:45821" => 1067,
- "old:virtual_from_version:42051" => 1077,
- "old:virtual_from_version:49092" => 3094,
- "old:virtual_from_version:47804" => 1109,
- "old:virtual_from_version:50097" => 3131,
- "old:virtual_from_version:45418" => 1069,
- "old:virtual_from_version:45295" => 1362,
- "old:virtual_from_version:38581" => 1091,
- "old:virtual_from_version:44803" => 1025,
- "old:virtual_from_version:42574" => 1037,
- "old:virtual_from_version:46937" => 2100,
- "old:virtual_from_version:44712" => 1009,
- "old:virtual_from_version:50687" => 3216,
- "old:virtual_from_version:49744" => 1532,
- "old:virtual_from_version:45629" => 1077,
- "old:virtual_from_version:42649" => 1484,
- "old:virtual_from_version:49271" => 1077,
- "old:virtual_from_version:49955" => 1659,
- "old:virtual_from_version:45986" => 1639,
- "old:virtual_from_version:42195" => 1037,
- "old:virtual_from_version:50198" => 1689,
- "old:virtual_from_version:46278" => 1009,
- "old:virtual_from_version:44428" => 1048,
- "old:virtual_from_version:49934" => 1078,
- "old:virtual_from_version:48009" => 2109,
- "old:virtual_from_version:45597" => 1136,
- "old:virtual_from_version:42881" => 1025,
- "old:virtual_from_version:46663" => 1070,
- "old:virtual_from_version:42658" => 1025,
- "old:virtual_from_version:46583" => 1077,
- "old:virtual_from_version:46751" => 1070,
- "old:virtual_from_version:49621" => 1125,
- "old:virtual_from_version:43012" => 2037,
- "old:virtual_from_version:50650" => 1172,
- "old:virtual_from_version:44575" => 1009,
- "old:virtual_from_version:50239" => 1489,
- "old:virtual_from_version:47491" => 1109,
- "old:virtual_from_version:47020" => 1461,
- "old:virtual_from_version:50246" => 3131,
- "old:virtual_from_version:40708" => 1081,
- "old:virtual_from_version:47180" => 1070,
- "old:virtual_from_version:40597" => 1070,
- "old:virtual_from_version:48041" => 2138,
- "old:virtual_from_version:42653" => 1025,
- "old:virtual_from_version:49105" => 3146,
- "old:virtual_from_version:42451" => 1438,
- "old:virtual_from_version:42411" => 1009,
- "old:virtual_from_version:49250" => 3159,
- "old:virtual_from_version:46907" => 3007,
- "old:virtual_from_version:40770" => 1025,
- "old:virtual_from_version:42417" => 1009,
- "old:virtual_from_version:43028" => 2028,
- "old:virtual_from_version:50536" => 1032,
- "old:virtual_from_version:50378" => 1172,
- "old:virtual_from_version:44072" => 1125,
- "old:virtual_from_version:50414" => 3227,
- "old:virtual_from_version:47950" => 1314,
- "old:virtual_from_version:42890" => 1070,
- "old:virtual_from_version:47666" => 1689,
- "old:virtual_from_version:47459" => 1109,
- "old:virtual_from_version:40686" => 1095,
- "old:virtual_from_version:49788" => 1100,
- "old:virtual_from_version:45077" => 1009,
- "old:virtual_from_version:46045" => 1109,
- "old:virtual_from_version:46087" => 1025,
- "old:virtual_from_version:49202" => 1125,
- "old:virtual_from_version:46891" => 1077,
- "old:virtual_from_version:47135" => 1532,
- "old:virtual_from_version:50578" => 3259,
- "old:virtual_from_version:40116" => 1172,
- "old:virtual_from_version:49777" => 1070,
- "old:virtual_from_version:50565" => 1689,
- "old:virtual_from_version:45757" => 1107,
- "old:virtual_from_version:46165" => 1532,
- "old:virtual_from_version:47668" => 1109,
- "old:virtual_from_version:42506" => 1025,
- "old:virtual_from_version:44773" => 1489,
- "old:virtual_from_version:50570" => 1489,
- "old:virtual_from_version:49581" => 1158,
- "old:virtual_from_version:45950" => 1626,
- "old:virtual_from_version:40482" => 1037,
- "old:virtual_from_version:42648" => 1484,
- "old:virtual_from_version:44794" => 1070,
- "old:virtual_from_version:49354" => 1532,
- "old:virtual_from_version:47376" => 1125,
- "old:virtual_from_version:45741" => 1621,
- "old:virtual_from_version:44851" => 1062,
- "old:virtual_from_version:49251" => 1070,
- "old:virtual_from_version:49214" => 1077,
- "old:virtual_from_version:40438" => 1009,
- "old:virtual_from_version:40757" => 1077,
- "old:virtual_from_version:38495" => 1091,
- "old:virtual_from_version:49524" => 1107,
- "old:virtual_from_version:45049" => 1062,
- "old:virtual_from_version:47501" => 1659,
- "old:virtual_from_version:46057" => 1070,
- "old:virtual_from_version:42684" => 1067,
- "old:virtual_from_version:49164" => 3152,
- "old:virtual_from_version:44544" => 1125,
- "old:virtual_from_version:50074" => 1125,
- "old:virtual_from_version:47397" => 1109,
- "old:virtual_from_version:45909" => 1077,
- "old:virtual_from_version:50584" => 3266,
- "old:virtual_from_version:49514" => 1070,
- "old:virtual_from_version:49638" => 1007,
- "old:virtual_from_version:50751" => 1689,
- "old:virtual_from_version:49367" => 3016,
- "old:virtual_from_version:50526" => 1007,
- "old:virtual_from_version:47745" => 1565,
- "old:virtual_from_version:47648" => 1070,
- "old:virtual_from_version:42280" => 1422,
- "old:virtual_from_version:49606" => 1070,
- "old:virtual_from_version:47184" => 1077,
- "old:virtual_from_version:44675" => 1037,
- "old:virtual_from_version:49262" => 1077,
- "old:virtual_from_version:50331" => 3239,
- "old:virtual_from_version:50077" => 3214,
- "old:virtual_from_version:45410" => 1533,
- "old:virtual_from_version:42526" => 1025,
- "old:virtual_from_version:45525" => 1077,
- "old:virtual_from_version:49392" => 1172,
- "old:virtual_from_version:45065" => 1000,
- "old:virtual_from_version:44998" => 1222,
- "old:virtual_from_version:47288" => 1134,
- "old:virtual_from_version:42315" => 1037,
- "old:virtual_from_version:40707" => 1109,
- "old:virtual_from_version:40571" => 1146,
- "old:virtual_from_version:40067" => 1077,
- "old:virtual_from_version:42168" => 1077,
- "old:virtual_from_version:45345" => 1381,
- "old:virtual_from_version:40958" => 1095,
- "old:virtual_from_version:44028" => 1125,
- "old:virtual_from_version:50622" => 3259,
- "old:virtual_from_version:46454" => 1012,
- "old:virtual_from_version:39546" => 1192,
- "old:virtual_from_version:42581" => 1461,
- "old:virtual_from_version:45280" => 1025,
- "old:virtual_from_version:45154" => 1012,
- "old:virtual_from_version:46787" => 1491,
- "old:virtual_from_version:44315" => 1081,
- "old:virtual_from_version:44481" => 1070,
- "old:virtual_from_version:43107" => 2099,
- "old:virtual_from_version:49847" => 1489,
- "old:virtual_from_version:50346" => 1007,
- "old:virtual_from_version:46016" => 1025,
- "old:virtual_from_version:49103" => 1649,
- "old:virtual_from_version:46991" => 1222,
- "old:virtual_from_version:44561" => 1009,
- "old:virtual_from_version:46778" => 1070,
- "old:virtual_from_version:49043" => 1009,
- "old:virtual_from_version:42201" => 1015,
- "old:virtual_from_version:47223" => 1109,
- "old:virtual_from_version:38369" => 1048,
- "old:virtual_from_version:45030" => 1069,
- "old:virtual_from_version:46197" => 1077,
- "old:virtual_from_version:49211" => 1070,
- "old:virtual_from_version:47190" => 1077,
- "old:virtual_from_version:40626" => 1091,
- "old:virtual_from_version:42982" => 1037,
- "old:virtual_from_version:47183" => 1109,
- "old:virtual_from_version:47412" => 1697,
- "old:virtual_from_version:40957" => 1048,
- "old:virtual_from_version:44022" => 1110,
- "old:virtual_from_version:45650" => 1070,
- "old:virtual_from_version:45158" => 1498,
- "old:virtual_from_version:40539" => 1109,
- "old:virtual_from_version:44226" => 1070,
- "old:virtual_from_version:50261" => 1136,
- "old:virtual_from_version:48013" => 2113,
- "old:virtual_from_version:40554" => 1077,
- "old:virtual_from_version:44577" => 1037,
- "old:virtual_from_version:49115" => 1125,
- "old:virtual_from_version:39228" => 1009,
- "old:virtual_from_version:47726" => 1125,
- "old:virtual_from_version:47882" => 1070,
- "old:virtual_from_version:49021" => 1077,
- "old:virtual_from_version:45624" => 1172,
- "old:virtual_from_version:49705" => 1410,
- "old:virtual_from_version:47679" => 1035,
- "old:virtual_from_version:42236" => 1420,
- "old:virtual_from_version:44602" => 1070,
- "old:virtual_from_version:45960" => 1070,
- "old:virtual_from_version:50396" => 3227,
- "old:virtual_from_version:42662" => 1070,
- "old:virtual_from_version:40631" => 1070,
- "old:virtual_from_version:46867" => 1070,
- "old:virtual_from_version:46895" => 1077,
- "old:virtual_from_version:46502" => 1583,
- "old:virtual_from_version:46509" => 1584,
- "old:virtual_from_version:46409" => 1537,
- "old:virtual_from_version:46056" => 1077,
- "old:virtual_from_version:50292" => 3233,
- "old:virtual_from_version:46922" => 1070,
- "old:virtual_from_version:49949" => 3131,
- "old:virtual_from_version:50672" => 3208,
- "old:virtual_from_version:47655" => 1077,
- "old:virtual_from_version:40930" => 1048,
- "old:virtual_from_version:50408" => 1584,
- "old:virtual_from_version:44049" => 1037,
- "old:virtual_from_version:44389" => 1112,
- "old:virtual_from_version:49631" => 1078,
- "old:virtual_from_version:40937" => 1134,
- "old:virtual_from_version:49490" => 1689,
- "old:virtual_from_version:42419" => 1037,
- "old:virtual_from_version:40380" => 1007,
- "old:virtual_from_version:45675" => 1555,
- "old:virtual_from_version:49665" => 3139,
- "old:virtual_from_version:47244" => 1125,
- "old:virtual_from_version:39180" => 1017,
- "old:virtual_from_version:42852" => 1067,
- "old:virtual_from_version:40580" => 1006,
- "old:virtual_from_version:38344" => 1009,
- "old:virtual_from_version:40217" => 1404,
- "old:virtual_from_version:50348" => 1224,
- "old:virtual_from_version:44624" => 1077,
- "old:virtual_from_version:47721" => 1109,
- "old:virtual_from_version:49378" => 1025,
- "old:virtual_from_version:49662" => 1125,
- "old:virtual_from_version:45215" => 1570,
- "old:virtual_from_version:42147" => 1077,
- "old:virtual_from_version:46900" => 1125,
- "old:virtual_from_version:46088" => 1077,
- "old:virtual_from_version:39858" => 1069,
- "old:virtual_from_version:50438" => 3191,
- "old:virtual_from_version:44498" => 1067,
- "old:virtual_from_version:38802" => 1132,
- "old:virtual_from_version:42078" => 1109,
- "old:virtual_from_version:42293" => 1037,
- "old:virtual_from_version:45512" => 1009,
- "old:virtual_from_version:44430" => 1067,
- "old:virtual_from_version:50263" => 1489,
- "old:virtual_from_version:50560" => 1489,
- "old:virtual_from_version:42674" => 1009,
- "old:virtual_from_version:49512" => 1070,
- "old:virtual_from_version:44047" => 1025,
- "old:virtual_from_version:45638" => 1046,
- "old:virtual_from_version:44125" => 1070,
- "old:virtual_from_version:46529" => 1125,
- "old:virtual_from_version:50089" => 3210,
- "old:virtual_from_version:47613" => 1109,
- "old:virtual_from_version:46788" => 1070,
- "old:virtual_from_version:46659" => 1694,
- "old:virtual_from_version:49742" => 1136,
- "old:virtual_from_version:47192" => 1125,
- "old:virtual_from_version:49452" => 1172,
- "old:virtual_from_version:45980" => 1520,
- "old:virtual_from_version:38461" => 1051,
- "old:virtual_from_version:42609" => 1077,
- "old:virtual_from_version:50385" => 1689,
- "old:virtual_from_version:39836" => 1009,
- "old:virtual_from_version:46820" => 1397,
- "old:virtual_from_version:46526" => 1172,
- "old:virtual_from_version:49249" => 1689,
- "old:virtual_from_version:40314" => 1078,
- "old:virtual_from_version:49592" => 1580,
- "old:virtual_from_version:50284" => 3223,
- "old:virtual_from_version:40763" => 1105,
- "old:virtual_from_version:40455" => 1105,
- "old:virtual_from_version:46048" => 1070,
- "old:virtual_from_version:50349" => 1006,
- "old:virtual_from_version:44866" => 1125,
- "old:virtual_from_version:49406" => 3157,
- "old:virtual_from_version:47477" => 1172,
- "old:virtual_from_version:42767" => 1070,
- "old:virtual_from_version:49862" => 1070,
- "old:virtual_from_version:49853" => 1070,
- "old:virtual_from_version:46915" => 1070,
- "old:virtual_from_version:47987" => 1067,
- "old:virtual_from_version:40714" => 1067,
- "old:virtual_from_version:45038" => 1021,
- "old:virtual_from_version:44755" => 1077,
- "old:virtual_from_version:49042" => 1105,
- "old:virtual_from_version:49034" => 1649,
- "old:virtual_from_version:46635" => 1125,
- "old:virtual_from_version:46597" => 1070,
- "old:virtual_from_version:12547" => 1125,
- "old:virtual_from_version:46662" => 1694,
- "old:virtual_from_version:47847" => 1037,
- "old:virtual_from_version:47163" => 1150,
- "old:virtual_from_version:45279" => 1009,
- "old:virtual_from_version:40827" => 1078,
- "old:virtual_from_version:42757" => 1110,
- "old:virtual_from_version:50106" => 3131,
- "old:virtual_from_version:44040" => 1025,
- "old:virtual_from_version:46438" => 1070,
- "old:virtual_from_version:47291" => 1048,
- "old:virtual_from_version:45489" => 1112,
- "old:virtual_from_version:43045" => 2002,
- "old:virtual_from_version:45452" => 1031,
- "old:virtual_from_version:49745" => 1689,
- "old:virtual_from_version:42985" => 1070,
- "old:virtual_from_version:46632" => 1070,
- "old:virtual_from_version:42894" => 1037,
- "old:virtual_from_version:42667" => 1488,
- "old:virtual_from_version:45379" => 1015,
- "old:virtual_from_version:49011" => 1077,
- "old:virtual_from_version:44901" => 1070,
- "old:virtual_from_version:29684" => 1089,
- "old:virtual_from_version:40822" => 1077,
- "old:virtual_from_version:49871" => 3131,
- "old:virtual_from_version:46349" => 1070,
- "old:virtual_from_version:45303" => 1565,
- "old:virtual_from_version:44908" => 1007,
- "old:virtual_from_version:40450" => 1105,
- "old:virtual_from_version:44849" => 1015,
- "old:virtual_from_version:50165" => 1006,
- "old:virtual_from_version:47580" => 1517,
- "old:virtual_from_version:40070" => 1025,
- "old:virtual_from_version:44460" => 1009,
- "old:virtual_from_version:44506" => 1067,
- "old:virtual_from_version:39343" => 1061,
- "old:virtual_from_version:50099" => 3221,
- "old:virtual_from_version:43101" => 2093,
- "old:virtual_from_version:49369" => 1070,
- "old:virtual_from_version:40768" => 1009,
- "old:virtual_from_version:42580" => 1456,
- "old:virtual_from_version:50431" => 3241,
- "old:virtual_from_version:47106" => 1584,
- "old:virtual_from_version:45698" => 1077,
- "old:virtual_from_version:49231" => 1070,
- "old:virtual_from_version:45775" => 1532,
- "old:virtual_from_version:47560" => 1048,
- "old:virtual_from_version:49762" => 3131,
- "old:virtual_from_version:44670" => 1037,
- "old:virtual_from_version:45111" => 1070,
- "old:virtual_from_version:40915" => 1037,
- "old:virtual_from_version:46383" => 1381,
- "old:virtual_from_version:42039" => 1077,
- "old:virtual_from_version:47193" => 1109,
- "old:virtual_from_version:49825" => 3131,
- "old:virtual_from_version:40381" => 1125,
- "old:virtual_from_version:41001" => 2013,
- "old:virtual_from_version:40656" => 1104,
- "old:virtual_from_version:42339" => 1067,
- "old:virtual_from_version:42883" => 1037,
- "old:virtual_from_version:49363" => 1077,
- "old:virtual_from_version:44187" => 1070,
- "old:virtual_from_version:42083" => 1037,
- "old:virtual_from_version:39893" => 1146,
- "old:virtual_from_version:43001" => 2020,
- "old:virtual_from_version:46599" => 1077,
- "old:virtual_from_version:44182" => 1083,
- "old:virtual_from_version:46150" => 1077,
- "old:virtual_from_version:50158" => 1689,
- "old:virtual_from_version:45075" => 1125,
- "old:virtual_from_version:45461" => 1009,
- "old:virtual_from_version:42702" => 1077,
- "old:virtual_from_version:42388" => 1000,
- "old:virtual_from_version:40202" => 1304,
- "old:virtual_from_version:42235" => 1037,
- "old:virtual_from_version:44211" => 1025,
- "old:virtual_from_version:39786" => 1125,
- "old:virtual_from_version:45260" => 1036,
- "old:virtual_from_version:49523" => 1070,
- "old:virtual_from_version:47416" => 1402,
- "old:virtual_from_version:44401" => 1007,
- "old:virtual_from_version:46382" => 1077,
- "old:virtual_from_version:49260" => 1532,
- "old:virtual_from_version:47626" => 3078,
- "old:virtual_from_version:49443" => 1689,
- "old:virtual_from_version:49200" => 1077,
- "old:virtual_from_version:42988" => 1037,
- "old:virtual_from_version:42048" => 1070,
- "old:virtual_from_version:50406" => 1150,
- "old:virtual_from_version:44069" => 1077,
- "old:virtual_from_version:46650" => 1537,
- "old:virtual_from_version:38330" => 1070,
- "old:virtual_from_version:49417" => 1689,
- "old:virtual_from_version:44862" => 1070,
- "old:virtual_from_version:50148" => 1032,
- "old:virtual_from_version:49858" => 1070,
- "old:virtual_from_version:42108" => 1070,
- "old:virtual_from_version:42497" => 1130,
- "old:virtual_from_version:40408" => 1404,
- "old:virtual_from_version:50760" => 3274,
- "old:virtual_from_version:50301" => 3131,
- "old:virtual_from_version:45602" => 1172,
- "old:virtual_from_version:49539" => 1489,
- "old:virtual_from_version:47019" => 1077,
- "old:virtual_from_version:46976" => 1070,
- "old:virtual_from_version:45550" => 1025,
- "old:virtual_from_version:45806" => 1077,
- "old:virtual_from_version:45336" => 1009,
- "old:virtual_from_version:46152" => 1077,
- "old:virtual_from_version:49266" => 1070,
- "old:virtual_from_version:50169" => 3201,
- "old:virtual_from_version:49711" => 1037,
- "old:virtual_from_version:46944" => 1077,
- "old:virtual_from_version:42924" => 1037,
- "old:virtual_from_version:42823" => 1077,
- "old:virtual_from_version:44432" => 1526,
- "old:virtual_from_version:50175" => 1314,
- "old:virtual_from_version:47082" => 1070,
- "old:virtual_from_version:47989" => 1077,
- "old:virtual_from_version:40710" => 1009,
- "old:virtual_from_version:45716" => 1107,
- "old:virtual_from_version:50766" => 1057,
- "old:virtual_from_version:49658" => 3189,
- "old:virtual_from_version:47156" => 1077,
- "old:virtual_from_version:42054" => 1048,
- "old:virtual_from_version:45762" => 1027,
- "old:virtual_from_version:47693" => 1077,
- "old:virtual_from_version:49963" => 3210,
- "old:virtual_from_version:42873" => 1505,
- "old:virtual_from_version:44625" => 1037,
- "old:virtual_from_version:49516" => 1580,
- "old:virtual_from_version:46780" => 1077,
- "old:virtual_from_version:47373" => 3008,
- "old:virtual_from_version:47879" => 1077,
- "old:virtual_from_version:45438" => 1136,
- "old:virtual_from_version:47825" => 1659,
- "old:virtual_from_version:47299" => 1125,
- "old:virtual_from_version:50596" => 3265,
- "old:virtual_from_version:44490" => 1037,
- "old:virtual_from_version:42519" => 1077,
- "old:virtual_from_version:42640" => 1009,
- "old:virtual_from_version:47790" => 3006,
- "old:virtual_from_version:40671" => 1025,
- "old:virtual_from_version:50036" => 3219,
- "old:virtual_from_version:44142" => 1110,
- "old:virtual_from_version:44538" => 1125,
- "old:virtual_from_version:44594" => 1009,
- "old:virtual_from_version:45350" => 1110,
- "old:virtual_from_version:44296" => 1107,
- "old:virtual_from_version:50078" => 3222,
- "old:virtual_from_version:44989" => 1015,
- "old:virtual_from_version:49556" => 1107,
- "old:virtual_from_version:42405" => 1070,
- "old:virtual_from_version:42559" => 1009,
- "old:virtual_from_version:45098" => 1110,
- "old:virtual_from_version:40894" => 1109,
- "old:virtual_from_version:45970" => 1009,
- "old:virtual_from_version:46009" => 1051,
- "old:virtual_from_version:49877" => 1150,
- "old:virtual_from_version:46799" => 1555,
- "old:virtual_from_version:42198" => 1037,
- "old:virtual_from_version:44833" => 1077,
- "old:virtual_from_version:47860" => 1001,
- "old:virtual_from_version:45732" => 1532,
- "old:virtual_from_version:46262" => 1517,
- "old:virtual_from_version:49817" => 3199,
- "old:virtual_from_version:44054" => 1025,
- "old:virtual_from_version:46005" => 1078,
- "old:virtual_from_version:50633" => 3192,
- "old:virtual_from_version:40847" => 1037,
- "old:virtual_from_version:49842" => 3003,
- "old:virtual_from_version:49464" => 1070,
- "old:virtual_from_version:45340" => 1136,
- "old:virtual_from_version:42174" => 1037,
- "old:virtual_from_version:44600" => 1498,
- "old:virtual_from_version:42308" => 1070,
- "old:virtual_from_version:40818" => 1067,
- "old:virtual_from_version:42696" => 1077,
- "old:virtual_from_version:49823" => 1621,
- "old:virtual_from_version:50749" => 1417,
- "old:virtual_from_version:49852" => 3200,
- "old:virtual_from_version:42257" => 1025,
- "old:virtual_from_version:50163" => 1070,
- "old:virtual_from_version:46590" => 1070,
- "old:virtual_from_version:47423" => 1077,
- "old:virtual_from_version:45309" => 1009,
- "old:virtual_from_version:46239" => 1659,
- "old:virtual_from_version:47272" => 1070,
- "old:virtual_from_version:45725" => 1077,
- "old:virtual_from_version:45399" => 1125,
- "old:virtual_from_version:46251" => 1077,
- "old:virtual_from_version:45642" => 1107,
- "old:virtual_from_version:47742" => 1070,
- "old:virtual_from_version:47057" => 1444,
- "old:virtual_from_version:50258" => 1532,
- "old:virtual_from_version:25148" => 1049,
- "old:virtual_from_version:43100" => 2092,
- "old:virtual_from_version:50767" => 1057,
- "old:virtual_from_version:40565" => 1222,
- "old:virtual_from_version:47351" => 1404,
- "old:virtual_from_version:49422" => 1689,
- "old:virtual_from_version:49181" => 1585,
- "old:virtual_from_version:46719" => 1007,
- "old:virtual_from_version:44790" => 1070,
- "old:virtual_from_version:44677" => 1067,
- "old:virtual_from_version:49486" => 1025,
- "old:virtual_from_version:49674" => 1067,
- "old:virtual_from_version:50120" => 1172,
- "old:virtual_from_version:46974" => 1689,
- "old:virtual_from_version:46797" => 1025,
- "old:virtual_from_version:49020" => 1070,
- "old:virtual_from_version:42752" => 1023,
- "old:virtual_from_version:50008" => 1070,
- "old:virtual_from_version:42395" => 1070,
- "old:virtual_from_version:44364" => 1091,
- "old:virtual_from_version:49861" => 3131,
- "old:virtual_from_version:46903" => 1689,
- "old:virtual_from_version:49246" => 1077,
- "old:virtual_from_version:50572" => 3214,
- "old:virtual_from_version:47753" => 1517,
- "old:virtual_from_version:47292" => 1109,
- "old:virtual_from_version:45390" => 1362,
- "old:virtual_from_version:50641" => 1417,
- "old:virtual_from_version:40858" => 1077,
- "old:virtual_from_version:45766" => 1401,
- "old:virtual_from_version:46701" => 1070,
- "old:virtual_from_version:50363" => 3131,
- "old:virtual_from_version:44397" => 1063,
- "old:virtual_from_version:42276" => 1070,
- "old:virtual_from_version:44615" => 1025,
- "old:virtual_from_version:45935" => 1404,
- "old:virtual_from_version:47777" => 1125,
- "old:virtual_from_version:38984" => 1067,
- "old:virtual_from_version:45484" => 1532,
- "old:virtual_from_version:46604" => 1006,
- "old:virtual_from_version:44347" => 1077,
- "old:virtual_from_version:46407" => 1077,
- "old:virtual_from_version:40553" => 1007,
- "old:virtual_from_version:40777" => 1404,
- "old:virtual_from_version:42314" => 1077,
- "old:virtual_from_version:44551" => 1037,
- "old:virtual_from_version:49567" => 1402,
- "old:virtual_from_version:39002" => 1104,
- "old:virtual_from_version:44685" => 1037,
- "old:virtual_from_version:49729" => 1489,
- "old:virtual_from_version:42814" => 1009,
- "old:virtual_from_version:49230" => 3157,
- "old:virtual_from_version:40801" => 1077,
- "old:virtual_from_version:42965" => 1009,
- "old:virtual_from_version:40798" => 1107,
- "old:virtual_from_version:38377" => 1007,
- "old:virtual_from_version:40682" => 1404,
- "old:virtual_from_version:48022" => 2122,
- "old:virtual_from_version:49558" => 1009,
- "old:virtual_from_version:50052" => 1070,
- "old:virtual_from_version:42191" => 1077,
- "old:virtual_from_version:42143" => 1222,
- "old:virtual_from_version:49009" => 1125,
- "old:virtual_from_version:46758" => 1109,
- "old:virtual_from_version:42637" => 1484,
- "old:virtual_from_version:44090" => 1037,
- "old:virtual_from_version:47349" => 1172,
- "old:virtual_from_version:45354" => 1009,
- "old:virtual_from_version:46366" => 1077,
- "old:virtual_from_version:50696" => 1417,
- "old:virtual_from_version:50628" => 1417,
- "old:virtual_from_version:39798" => 1237,
- "old:virtual_from_version:47170" => 3032,
- "old:virtual_from_version:42811" => 1081,
- "old:virtual_from_version:40659" => 1035,
- "old:virtual_from_version:45891" => 1070,
- "old:virtual_from_version:45282" => 1115,
- "old:virtual_from_version:47572" => 1444,
- "old:virtual_from_version:46559" => 1574,
- "old:virtual_from_version:45146" => 1567,
- "old:virtual_from_version:50241" => 3131,
- "old:virtual_from_version:42088" => 1077,
- "old:virtual_from_version:49633" => 1404,
- "old:virtual_from_version:44541" => 1025,
- "old:virtual_from_version:42554" => 1009,
- "old:virtual_from_version:49805" => 1621,
- "old:virtual_from_version:46274" => 1025,
- "old:virtual_from_version:42533" => 1037,
- "old:virtual_from_version:42349" => 1091,
- "old:virtual_from_version:47239" => 1070,
- "old:virtual_from_version:49973" => 1689,
- "old:virtual_from_version:47685" => 1109,
- "old:virtual_from_version:47045" => 1070,
- "old:virtual_from_version:47407" => 1109,
- "old:virtual_from_version:47571" => 1077,
- "old:virtual_from_version:47099" => 1077,
- "old:virtual_from_version:47654" => 1109,
- "old:virtual_from_version:46214" => 1077,
- "old:virtual_from_version:42833" => 1062,
- "old:virtual_from_version:38703" => 1081,
- "old:virtual_from_version:47341" => 1109,
- "old:virtual_from_version:49039" => 1125,
- "old:virtual_from_version:46703" => 1077,
- "old:virtual_from_version:49023" => 1070,
- "old:virtual_from_version:50632" => 3259,
- "old:virtual_from_version:42341" => 1070,
- "old:virtual_from_version:45637" => 1136,
- "old:virtual_from_version:45811" => 1532,
- "old:virtual_from_version:49368" => 3139,
- "old:virtual_from_version:47623" => 1109,
- "old:virtual_from_version:45587" => 1077,
- "old:virtual_from_version:42218" => 1070,
- "old:virtual_from_version:47086" => 1070,
- "old:virtual_from_version:44002" => 1009,
- "old:virtual_from_version:45939" => 1397,
- "old:virtual_from_version:50367" => 1125,
- "old:virtual_from_version:29976" => 1009,
- "old:virtual_from_version:39976" => 1257,
- "old:virtual_from_version:44838" => 1488,
- "old:virtual_from_version:38370" => 1067,
- "old:virtual_from_version:49500" => 1070,
- "old:virtual_from_version:40508" => 1037,
- "old:virtual_from_version:49967" => 1583,
- "old:virtual_from_version:40527" => 1070,
- "old:virtual_from_version:45483" => 1077,
- "old:virtual_from_version:49859" => 1125,
- "old:virtual_from_version:38364" => 1001,
- "old:virtual_from_version:49153" => 1689,
- "old:virtual_from_version:46795" => 1125,
- "old:virtual_from_version:44557" => 1009,
- "old:virtual_from_version:49532" => 1689,
- "old:virtual_from_version:49513" => 1125,
- "old:virtual_from_version:46332" => 1172,
- "old:virtual_from_version:50403" => 3131,
- "old:virtual_from_version:46672" => 1125,
- "old:virtual_from_version:39038" => 1142,
- "old:virtual_from_version:44349" => 1067,
- "old:virtual_from_version:45541" => 1404,
- "old:virtual_from_version:40616" => 1172,
- "old:virtual_from_version:49366" => 1585,
- "old:virtual_from_version:40999" => 1110,
- "old:virtual_from_version:46540" => 1070,
- "old:virtual_from_version:40504" => 1070,
- "old:virtual_from_version:47178" => 1101,
- "old:virtual_from_version:50609" => 1067,
- "old:virtual_from_version:44723" => 1537,
- "old:virtual_from_version:49245" => 1015,
- "old:virtual_from_version:46963" => 1077,
- "old:virtual_from_version:42583" => 1070,
- "old:virtual_from_version:50588" => 3194,
- "old:virtual_from_version:45225" => 1444,
- "old:virtual_from_version:40982" => 1037,
- "old:virtual_from_version:45987" => 1639,
- "old:virtual_from_version:50230" => 1070,
- "old:virtual_from_version:45826" => 1070,
- "old:virtual_from_version:39291" => 1076,
- "old:virtual_from_version:45426" => 1037,
- "old:virtual_from_version:47083" => 1125,
- "old:virtual_from_version:47069" => 1125,
- "old:virtual_from_version:42841" => 1025,
- "old:virtual_from_version:40987" => 1070,
- "old:virtual_from_version:44020" => 1077,
- "old:virtual_from_version:43092" => 2084,
- "old:virtual_from_version:45830" => 1112,
- "old:virtual_from_version:42111" => 1070,
- "old:virtual_from_version:45849" => 1070,
- "old:virtual_from_version:44968" => 1136,
- "old:virtual_from_version:40809" => 1009,
- "old:virtual_from_version:46665" => 1070,
- "old:virtual_from_version:42505" => 1023,
- "old:virtual_from_version:47009" => 1070,
- "old:virtual_from_version:42316" => 1136,
- "old:virtual_from_version:47055" => 1172,
- "old:virtual_from_version:44000" => 1125,
- "old:virtual_from_version:47354" => 1077,
- "old:virtual_from_version:42414" => 1105,
- "old:virtual_from_version:44686" => 1311,
- "old:virtual_from_version:47612" => 1125,
- "old:virtual_from_version:47289" => 1070,
- "old:virtual_from_version:45286" => 1404,
- "old:virtual_from_version:50187" => 1580,
- "old:virtual_from_version:50066" => 1172,
- "old:virtual_from_version:49123" => 1012,
- "old:virtual_from_version:40841" => 1025,
- "old:virtual_from_version:39350" => 1062,
- "old:virtual_from_version:44835" => 1381,
- "old:virtual_from_version:46862" => 1172,
- "old:virtual_from_version:44330" => 1107,
- "old:virtual_from_version:45917" => 1001,
- "old:virtual_from_version:46491" => 1568,
- "old:virtual_from_version:44772" => 1077,
- "old:virtual_from_version:45943" => 1070,
- "old:virtual_from_version:47803" => 1048,
- "old:virtual_from_version:45469" => 1025,
- "old:virtual_from_version:40387" => 1081,
- "old:virtual_from_version:50599" => 1125,
- "old:virtual_from_version:40462" => 1311,
- "old:virtual_from_version:50520" => 1311,
- "old:virtual_from_version:42185" => 1037,
- "old:virtual_from_version:38608" => 1110,
- "old:virtual_from_version:50060" => 1125,
- "old:virtual_from_version:42990" => 1077,
- "old:virtual_from_version:44363" => 1078,
- "old:virtual_from_version:47913" => 1070,
- "old:virtual_from_version:45290" => 1578,
- "old:virtual_from_version:46027" => 1070,
- "old:virtual_from_version:49295" => 1077,
- "old:virtual_from_version:42418" => 1077,
- "old:virtual_from_version:46815" => 1077,
- "old:virtual_from_version:42538" => 1025,
- "old:virtual_from_version:50433" => 1401,
- "old:virtual_from_version:47568" => 1125,
- "old:virtual_from_version:40275" => 1019,
- "old:virtual_from_version:44227" => 1077,
- "old:virtual_from_version:49509" => 1037,
- "old:virtual_from_version:39155" => 1067,
- "old:virtual_from_version:49886" => 1488,
- "old:virtual_from_version:49267" => 1077,
- "old:virtual_from_version:44474" => 1077,
- "old:virtual_from_version:44576" => 1077,
- "old:virtual_from_version:49375" => 1656,
- "old:virtual_from_version:47522" => 1537,
- "old:virtual_from_version:45546" => 1136,
- "old:virtual_from_version:46040" => 1488,
- "old:virtual_from_version:49081" => 1555,
- "old:virtual_from_version:39366" => 1017,
- "old:virtual_from_version:39536" => 1112,
- "old:virtual_from_version:44281" => 1037,
- "old:virtual_from_version:40992" => 1107,
- "old:virtual_from_version:42266" => 1037,
- "old:virtual_from_version:46813" => 1666,
- "old:virtual_from_version:39595" => 1084,
- "old:virtual_from_version:50054" => 1025,
- "old:virtual_from_version:42307" => 1110,
- "old:virtual_from_version:49104" => 3136,
- "old:virtual_from_version:45982" => 1638,
- "old:virtual_from_version:45064" => 1125,
- "old:virtual_from_version:50339" => 3236,
- "old:virtual_from_version:49168" => 1070,
- "old:virtual_from_version:42365" => 1037,
- "old:virtual_from_version:45690" => 1621,
- "old:virtual_from_version:42110" => 1037,
- "old:virtual_from_version:49769" => 1078,
- "old:virtual_from_version:44597" => 1110,
- "old:virtual_from_version:46851" => 1077,
- "old:virtual_from_version:44553" => 1070,
- "old:virtual_from_version:44248" => 1009,
- "old:virtual_from_version:49820" => 1100,
- "old:virtual_from_version:44997" => 1172,
- "old:virtual_from_version:44178" => 1438,
- "old:virtual_from_version:45657" => 1076,
- "old:virtual_from_version:46546" => 1125,
- "old:virtual_from_version:44700" => 1070,
- "old:virtual_from_version:49004" => 1532,
- "old:virtual_from_version:42661" => 1067,
- "old:virtual_from_version:46142" => 1077,
- "old:virtual_from_version:38786" => 1104,
- "old:virtual_from_version:42672" => 1489,
- "old:virtual_from_version:49803" => 1070,
- "old:virtual_from_version:44619" => 1110,
- "old:virtual_from_version:43085" => 2082,
- "old:virtual_from_version:42801" => 1057,
- "old:virtual_from_version:40561" => 1067,
- "old:virtual_from_version:47551" => 1109,
- "old:virtual_from_version:49203" => 1107,
- "old:virtual_from_version:44486" => 1070,
- "old:virtual_from_version:49573" => 1659,
- "old:virtual_from_version:47585" => 1070,
- "old:virtual_from_version:38355" => 1108,
- "old:virtual_from_version:46436" => 1067,
- "old:virtual_from_version:49133" => 3137,
- "old:virtual_from_version:46560" => 1689,
- "old:virtual_from_version:44520" => 1048,
- "old:virtual_from_version:46960" => 1077,
- "old:virtual_from_version:42544" => 1110,
- "old:virtual_from_version:49269" => 1025,
- "old:virtual_from_version:46467" => 1321,
- "old:virtual_from_version:49849" => 1537,
- "old:virtual_from_version:46394" => 1582,
- "old:virtual_from_version:50100" => 3221,
- "old:virtual_from_version:43075" => 2073,
- "old:virtual_from_version:46180" => 1404,
- "old:virtual_from_version:42415" => 1107,
- "old:virtual_from_version:50342" => 1224,
- "old:virtual_from_version:50714" => 1417,
- "old:virtual_from_version:45918" => 1077,
- "old:virtual_from_version:49322" => 1649,
- "old:virtual_from_version:50023" => 3131,
- "old:virtual_from_version:44754" => 1025,
- "old:virtual_from_version:43027" => 2052,
- "old:virtual_from_version:50224" => 3016,
- "old:virtual_from_version:40852" => 1077,
- "old:virtual_from_version:42007" => 1110,
- "old:virtual_from_version:46015" => 1009,
- "old:virtual_from_version:13578" => 1032,
- "old:virtual_from_version:49750" => 1112,
- "old:virtual_from_version:42492" => 1125,
- "old:virtual_from_version:46323" => 1070,
- "old:virtual_from_version:44025" => 1037,
- "old:virtual_from_version:49550" => 1574,
- "old:virtual_from_version:49600" => 1095,
- "old:virtual_from_version:47458" => 1125,
- "old:virtual_from_version:46561" => 1070,
- "old:virtual_from_version:44871" => 1498,
- "old:virtual_from_version:49760" => 3002,
- "old:virtual_from_version:44595" => 1077,
- "old:virtual_from_version:46588" => 1077,
- "old:virtual_from_version:45375" => 1009,
- "old:virtual_from_version:46188" => 1649,
- "old:virtual_from_version:49783" => 1659,
- "old:virtual_from_version:50009" => 1314,
- "old:virtual_from_version:47543" => 1077,
- "old:virtual_from_version:45488" => 1107,
- "old:virtual_from_version:42756" => 1109,
- "old:virtual_from_version:39727" => 1224,
- "old:virtual_from_version:49832" => 1689,
- "old:virtual_from_version:40701" => 1077,
- "old:virtual_from_version:45890" => 1506,
- "old:virtual_from_version:45932" => 1077,
- "old:virtual_from_version:46209" => 1077,
- "old:virtual_from_version:44821" => 1077,
- "old:virtual_from_version:49079" => 1070,
- "old:virtual_from_version:44996" => 1017,
- "old:virtual_from_version:50266" => 1105,
- "old:virtual_from_version:46957" => 1007,
- "old:virtual_from_version:44518" => 1037,
- "old:virtual_from_version:40249" => 1009,
- "old:virtual_from_version:45736" => 1109,
- "old:virtual_from_version:46325" => 1404,
- "old:virtual_from_version:50734" => 1404,
- "old:virtual_from_version:50666" => 3259,
- "old:virtual_from_version:50064" => 1125,
- "old:virtual_from_version:44777" => 1353,
- "old:virtual_from_version:45902" => 1038,
- "old:virtual_from_version:47968" => 1125,
- "old:virtual_from_version:40516" => 1070,
- "old:virtual_from_version:50458" => 1489,
- "old:virtual_from_version:13323" => 1010,
- "old:virtual_from_version:50034" => 3131,
- "old:virtual_from_version:45947" => 1627,
- "old:virtual_from_version:50013" => 3215,
- "old:virtual_from_version:46432" => 1136,
- "old:virtual_from_version:46284" => 1077,
- "old:virtual_from_version:44920" => 1009,
- "old:virtual_from_version:42748" => 1110,
- "old:virtual_from_version:50159" => 3131,
- "old:virtual_from_version:41011" => 2022,
- "old:virtual_from_version:44336" => 1037,
- "old:virtual_from_version:42104" => 1070,
- "old:virtual_from_version:42371" => 1037,
- "old:virtual_from_version:47395" => 1125,
- "old:virtual_from_version:49661" => 1070,
- "old:virtual_from_version:49463" => 1423,
- "old:virtual_from_version:45825" => 1626,
- "old:virtual_from_version:46881" => 1689,
- "old:virtual_from_version:39019" => 1016,
- "old:virtual_from_version:40863" => 1037,
- "old:virtual_from_version:42861" => 1136,
- "old:virtual_from_version:47189" => 1109,
- "old:virtual_from_version:50249" => 3131,
- "old:virtual_from_version:49874" => 1100,
- "old:virtual_from_version:50715" => 3259,
- "old:virtual_from_version:47240" => 1136,
- "old:virtual_from_version:40906" => 1037,
- "old:virtual_from_version:49700" => 1070,
- "old:virtual_from_version:50309" => 1067,
- "old:virtual_from_version:38546" => 1025,
- "old:virtual_from_version:45264" => 1095,
- "old:virtual_from_version:44688" => 1009,
- "old:virtual_from_version:45988" => 1362,
- "old:virtual_from_version:42420" => 1404,
- "old:virtual_from_version:44383" => 1031,
- "old:virtual_from_version:47929" => 1362,
- "old:virtual_from_version:49334" => 1037,
- "old:virtual_from_version:50625" => 1128,
- "old:virtual_from_version:40592" => 1077,
- "old:virtual_from_version:50114" => 1689,
- "old:virtual_from_version:44161" => 1077,
- "old:virtual_from_version:50225" => 3131,
- "old:virtual_from_version:49743" => 1404,
- "old:virtual_from_version:44629" => 1082,
- "old:virtual_from_version:50569" => 1404,
- "old:virtual_from_version:42151" => 1009,
- "old:virtual_from_version:45024" => 1006,
- "old:virtual_from_version:42043" => 1070,
- "old:virtual_from_version:42768" => 1006,
- "old:virtual_from_version:39612" => 1035,
- "old:virtual_from_version:48005" => 2106,
- "old:virtual_from_version:49819" => 1070,
- "old:virtual_from_version:46272" => 1136,
- "old:virtual_from_version:42575" => 1172,
- "old:virtual_from_version:44037" => 1070,
- "old:virtual_from_version:49493" => 1105,
- "old:virtual_from_version:47986" => 1109,
- "old:virtual_from_version:49880" => 1070,
- "old:virtual_from_version:41010" => 2021,
- "old:virtual_from_version:50360" => 3131,
- "old:virtual_from_version:45616" => 1077,
- "old:virtual_from_version:42227" => 1037,
- "old:virtual_from_version:47875" => 1037,
- "old:virtual_from_version:46771" => 1077,
- "old:virtual_from_version:44011" => 1016,
- "old:virtual_from_version:50332" => 1076,
- "old:virtual_from_version:44992" => 1067,
- "old:virtual_from_version:48006" => 2105,
- "old:virtual_from_version:45609" => 1404,
- "old:virtual_from_version:49646" => 1070,
- "old:virtual_from_version:42272" => 1077,
- "old:virtual_from_version:43037" => 2036,
- "old:virtual_from_version:40741" => 1070,
- "old:virtual_from_version:42485" => 1009,
- "old:virtual_from_version:42735" => 1037,
- "old:virtual_from_version:44974" => 1144,
- "old:virtual_from_version:45521" => 1580,
- "old:virtual_from_version:50386" => 3131,
- "old:virtual_from_version:42038" => 1009,
- "old:virtual_from_version:44981" => 1048,
- "old:virtual_from_version:42551" => 1172,
- "old:virtual_from_version:49239" => 1070,
- "old:virtual_from_version:44954" => 1077,
- "old:virtual_from_version:47871" => 1314,
- "old:virtual_from_version:44844" => 1070,
- "old:virtual_from_version:50381" => 1049,
- "old:virtual_from_version:44847" => 1070,
- "old:virtual_from_version:50317" => 3236,
- "old:virtual_from_version:45874" => 1077,
- "old:virtual_from_version:49409" => 1067,
- "old:virtual_from_version:49197" => 1517,
- "old:virtual_from_version:47467" => 1070,
- "old:virtual_from_version:42851" => 1037,
- "old:virtual_from_version:40541" => 1070,
- "old:virtual_from_version:49582" => 3119,
- "old:virtual_from_version:46647" => 1070,
- "old:virtual_from_version:50623" => 1033,
- "old:virtual_from_version:47273" => 1109,
- "old:virtual_from_version:46024" => 1070,
- "old:virtual_from_version:40735" => 1025,
- "old:virtual_from_version:46157" => 1070,
- "old:virtual_from_version:49748" => 1070,
- "old:virtual_from_version:45664" => 1019,
- "old:virtual_from_version:42586" => 1077,
- "old:virtual_from_version:49519" => 1125,
- "old:virtual_from_version:50172" => 1070,
- "old:virtual_from_version:44454" => 1529,
- "old:virtual_from_version:44626" => 1070,
- "old:virtual_from_version:45571" => 1105,
- "old:virtual_from_version:44493" => 1107,
- "old:virtual_from_version:50204" => 3131,
- "old:virtual_from_version:49495" => 1689,
- "old:virtual_from_version:50216" => 3131,
- "old:virtual_from_version:50684" => 1689,
- "old:virtual_from_version:47260" => 1125,
- "old:virtual_from_version:40764" => 1046,
- "old:virtual_from_version:40874" => 1077,
- "old:virtual_from_version:42480" => 1077,
- "old:virtual_from_version:50152" => 3131,
- "old:virtual_from_version:45021" => 1063,
- "old:virtual_from_version:42717" => 1077,
- "old:virtual_from_version:47062" => 1077,
- "old:virtual_from_version:49398" => 1070,
- "old:virtual_from_version:42303" => 1125,
- "old:virtual_from_version:13209" => 1061,
- "old:virtual_from_version:50527" => 1070,
- "old:virtual_from_version:46602" => 1125,
- "old:virtual_from_version:46744" => 1555,
- "old:virtual_from_version:40943" => 1037,
- "old:virtual_from_version:40939" => 1077,
- "old:virtual_from_version:44990" => 1090,
- "old:virtual_from_version:47932" => 1067,
- "old:virtual_from_version:42373" => 1105,
- "old:virtual_from_version:46522" => 1070,
- "old:virtual_from_version:38929" => 1061,
- "old:virtual_from_version:47325" => 1077,
- "old:virtual_from_version:39909" => 1115,
- "old:virtual_from_version:50470" => 3247,
- "old:virtual_from_version:47471" => 1444,
- "old:virtual_from_version:49041" => 1067,
- "old:virtual_from_version:47639" => 1070,
- "old:virtual_from_version:49387" => 3129,
- "old:virtual_from_version:47574" => 1689,
- "old:virtual_from_version:49833" => 3002,
- "old:virtual_from_version:45832" => 1077,
- "old:virtual_from_version:44503" => 1077,
- "old:virtual_from_version:50428" => 1580,
- "old:virtual_from_version:49093" => 3094,
- "old:virtual_from_version:44402" => 1008,
- "old:virtual_from_version:38351" => 1029,
- "old:virtual_from_version:41018" => 2027,
- "old:virtual_from_version:46841" => 1077,
- "old:virtual_from_version:46690" => 1070,
- "old:virtual_from_version:38753" => 1000,
- "old:virtual_from_version:46637" => 1077,
- "old:virtual_from_version:47339" => 1125,
- "old:virtual_from_version:48008" => 2108,
- "old:virtual_from_version:49868" => 3204,
- "old:virtual_from_version:46429" => 1077,
- "old:virtual_from_version:40704" => 1009,
- "old:virtual_from_version:40762" => 1048,
- "old:virtual_from_version:46282" => 1404,
- "old:virtual_from_version:42398" => 1037,
- "old:virtual_from_version:42446" => 1107,
- "old:virtual_from_version:47576" => 1070,
- "old:virtual_from_version:44655" => 1009,
- "old:virtual_from_version:44384" => 1036,
- "old:virtual_from_version:49109" => 3146,
- "old:virtual_from_version:47910" => 3008,
- "old:virtual_from_version:46034" => 1649,
- "old:virtual_from_version:40586" => 1077,
- "old:virtual_from_version:40243" => 1136,
- "old:virtual_from_version:44036" => 1488,
- "old:virtual_from_version:50474" => 3251,
- "old:virtual_from_version:46010" => 1048,
- "old:virtual_from_version:40860" => 1048,
- "old:virtual_from_version:45900" => 1077,
- "old:virtual_from_version:47391" => 3008,
- "old:virtual_from_version:45219" => 1574,
- "old:virtual_from_version:37575" => 1015,
- "old:virtual_from_version:49187" => 1070,
- "old:virtual_from_version:39951" => 1109,
- "old:virtual_from_version:47923" => 1565,
- "old:virtual_from_version:47563" => 1404,
- "old:virtual_from_version:44366" => 1007,
- "old:virtual_from_version:42615" => 1077,
- "old:virtual_from_version:50190" => 1146,
- "old:virtual_from_version:45145" => 1037,
- "old:virtual_from_version:45948" => 1627,
- "old:virtual_from_version:44827" => 1552,
- "old:virtual_from_version:46046" => 1077,
- "old:virtual_from_version:42548" => 1009,
- "old:virtual_from_version:49796" => 1689,
- "old:virtual_from_version:47187" => 1070,
- "old:virtual_from_version:45769" => 1009,
- "old:virtual_from_version:44740" => 1172,
- "old:virtual_from_version:46288" => 1070,
- "old:virtual_from_version:46668" => 1070,
- "old:virtual_from_version:49371" => 1077,
- "old:virtual_from_version:47873" => 1070,
- "old:virtual_from_version:46531" => 1105,
- "old:virtual_from_version:47431" => 1404,
- "old:virtual_from_version:46375" => 1585,
- "old:virtual_from_version:44828" => 1070,
- "old:virtual_from_version:44033" => 1070,
- "old:virtual_from_version:47897" => 1037,
- "old:virtual_from_version:44654" => 1070,
- "old:virtual_from_version:42820" => 1104,
- "old:virtual_from_version:40868" => 1037,
- "old:virtual_from_version:40627" => 1025,
- "old:virtual_from_version:45398" => 1008,
- "old:virtual_from_version:47016" => 1067,
- "old:virtual_from_version:42089" => 1037,
- "old:virtual_from_version:49183" => 1070,
- "old:virtual_from_version:46119" => 1092,
- "old:virtual_from_version:42630" => 1070,
- "old:virtual_from_version:40146" => 1078,
- "old:virtual_from_version:44534" => 1025,
- "old:virtual_from_version:46752" => 1077,
- "old:virtual_from_version:47136" => 1659,
- "old:virtual_from_version:50156" => 1517,
- "old:virtual_from_version:44927" => 1125,
- "old:virtual_from_version:40970" => 1077,
- "old:virtual_from_version:47275" => 1077,
- "old:virtual_from_version:47995" => 1125,
- "old:virtual_from_version:46927" => 1077,
- "old:virtual_from_version:42570" => 1172,
- "old:virtual_from_version:46686" => 1125,
- "old:virtual_from_version:40773" => 1404,
- "old:virtual_from_version:46621" => 1070,
- "old:virtual_from_version:45117" => 1077,
- "old:virtual_from_version:49185" => 1077,
- "old:virtual_from_version:45475" => 1110,
- "old:virtual_from_version:45683" => 1019,
- "old:virtual_from_version:49277" => 1007,
- "old:virtual_from_version:42268" => 1070,
- "old:virtual_from_version:47334" => 3006,
- "old:virtual_from_version:50151" => 1580,
- "old:virtual_from_version:50682" => 1585,
- "old:virtual_from_version:49294" => 1037,
- "old:virtual_from_version:40985" => 1407,
- "old:virtual_from_version:42092" => 1037,
- "old:virtual_from_version:47713" => 1621,
- "old:virtual_from_version:42987" => 1077,
- "old:virtual_from_version:44570" => 1037,
- "old:virtual_from_version:46118" => 1077,
- "old:virtual_from_version:46722" => 1172,
- "old:virtual_from_version:45740" => 1077,
- "old:virtual_from_version:46049" => 1125,
- "old:virtual_from_version:50264" => 3131,
- "old:virtual_from_version:45738" => 1067,
- "old:virtual_from_version:49939" => 1107,
- "old:virtual_from_version:42979" => 1070,
- "old:virtual_from_version:44966" => 1049,
- "old:virtual_from_version:45473" => 1136,
- "old:virtual_from_version:46769" => 1498,
- "old:virtual_from_version:47954" => 1109,
- "old:virtual_from_version:42589" => 1110,
- "old:virtual_from_version:46999" => 3015,
- "old:virtual_from_version:40400" => 1350,
- "old:virtual_from_version:44608" => 1110,
- "old:virtual_from_version:44446" => 1077,
- "old:virtual_from_version:44528" => 1077,
- "old:virtual_from_version:42093" => 1335,
- "old:virtual_from_version:46749" => 1077,
- "old:virtual_from_version:44415" => 1022,
- "old:virtual_from_version:50559" => 1070,
- "old:virtual_from_version:49286" => 1077,
- "old:virtual_from_version:42447" => 1070,
- "old:virtual_from_version:44131" => 1077,
- "old:virtual_from_version:40960" => 1107,
- "old:virtual_from_version:49647" => 1314,
- "old:virtual_from_version:49620" => 1158,
- "old:virtual_from_version:50583" => 3259,
- "old:virtual_from_version:42961" => 1037,
- "old:virtual_from_version:42424" => 1009,
- "old:virtual_from_version:47653" => 1125,
- "old:virtual_from_version:49401" => 3169,
- "old:virtual_from_version:42229" => 1083,
- "old:virtual_from_version:44118" => 1077,
- "old:virtual_from_version:42452" => 1439,
- "old:virtual_from_version:44509" => 1311,
- "old:virtual_from_version:49336" => 1404,
- "old:virtual_from_version:39966" => 1053,
- "old:virtual_from_version:43040" => 2038,
- "old:virtual_from_version:46442" => 1343,
- "old:virtual_from_version:42932" => 1146,
- "old:virtual_from_version:44416" => 1023,
- "old:virtual_from_version:49767" => 3002,
- "old:virtual_from_version:42173" => 1077,
- "old:virtual_from_version:44277" => 1070,
- "old:virtual_from_version:46037" => 1107,
- "old:virtual_from_version:44727" => 1025,
- "old:virtual_from_version:44201" => 1081,
- "old:virtual_from_version:40983" => 1328,
- "old:virtual_from_version:46969" => 1070,
- "old:virtual_from_version:40789" => 1025,
- "old:virtual_from_version:49505" => 1404,
- "old:virtual_from_version:42560" => 1025,
- "old:virtual_from_version:44350" => 1070,
- "old:virtual_from_version:49001" => 3127,
- "old:virtual_from_version:46786" => 1077,
- "old:virtual_from_version:45614" => 1070,
- "old:virtual_from_version:49720" => 1689,
- "old:virtual_from_version:40840" => 1009,
- "old:virtual_from_version:47650" => 1109,
- "old:virtual_from_version:47999" => 1125,
- "old:virtual_from_version:49456" => 1070,
- "old:virtual_from_version:40646" => 1394,
- "old:virtual_from_version:46990" => 1172,
- "old:virtual_from_version:49838" => 1009,
- "old:virtual_from_version:50440" => 3244,
- "old:virtual_from_version:47371" => 3046,
- "old:virtual_from_version:39662" => 1081,
- "old:virtual_from_version:42139" => 1077,
- "old:virtual_from_version:50388" => 1125,
- "old:virtual_from_version:47945" => 1070,
- "old:virtual_from_version:47590" => 1125,
- "old:virtual_from_version:45276" => 1222,
- "old:virtual_from_version:44045" => 1070,
- "old:virtual_from_version:47966" => 1649,
- "old:virtual_from_version:44399" => 1091,
- "old:virtual_from_version:40829" => 1125,
- "old:virtual_from_version:47194" => 1077,
- "old:virtual_from_version:47569" => 1109,
- "old:virtual_from_version:44409" => 1064,
- "old:virtual_from_version:44911" => 1125,
- "old:virtual_from_version:46311" => 1077,
- "old:virtual_from_version:49892" => 1689,
- "old:virtual_from_version:46641" => 1077,
- "old:virtual_from_version:44639" => 1077,
- "old:virtual_from_version:49089" => 3139,
- "old:virtual_from_version:47893" => 1123,
- "old:virtual_from_version:46806" => 1077,
- "old:virtual_from_version:45066" => 1070,
- "old:virtual_from_version:46625" => 1009,
- "old:virtual_from_version:42061" => 1070,
- "old:virtual_from_version:47779" => 1048,
- "old:virtual_from_version:42996" => 1077,
- "old:virtual_from_version:47048" => 1517,
- "old:virtual_from_version:47251" => 1037,
- "old:virtual_from_version:44425" => 1094,
- "old:virtual_from_version:49424" => 1172,
- "old:virtual_from_version:46296" => 1172,
- "old:virtual_from_version:44192" => 1110,
- "old:virtual_from_version:46612" => 1077,
- "old:virtual_from_version:49827" => 1070,
- "old:virtual_from_version:42941" => 1037,
- "old:virtual_from_version:40986" => 1107,
- "old:virtual_from_version:46050" => 1009,
- "old:virtual_from_version:46319" => 1222,
- "old:virtual_from_version:46354" => 1057,
- "old:virtual_from_version:40805" => 1077,
- "old:virtual_from_version:50211" => 1532,
- "old:virtual_from_version:46807" => 1666,
- "old:virtual_from_version:47342" => 1077,
- "old:virtual_from_version:40451" => 1091,
- "old:virtual_from_version:44845" => 1009,
- "old:virtual_from_version:44478" => 1077,
- "old:virtual_from_version:46871" => 1444,
- "old:virtual_from_version:42624" => 1077,
- "old:virtual_from_version:40534" => 1077,
- "old:virtual_from_version:42213" => 1009,
- "old:virtual_from_version:42508" => 1037,
- "old:virtual_from_version:46104" => 1070,
- "old:virtual_from_version:47230" => 1689,
- "old:virtual_from_version:42960" => 1077,
- "old:virtual_from_version:50283" => 3222,
- "old:virtual_from_version:42907" => 1070,
- "old:virtual_from_version:45099" => 1070,
- "old:virtual_from_version:45632" => 1070,
- "old:virtual_from_version:39624" => 1082,
- "old:virtual_from_version:45517" => 1136,
- "old:virtual_from_version:46258" => 1537,
- "old:virtual_from_version:45041" => 1023,
- "old:virtual_from_version:47404" => 1411,
- "old:virtual_from_version:40390" => 1341,
- "old:virtual_from_version:46504" => 1585,
- "old:virtual_from_version:49221" => 1314,
- "old:virtual_from_version:50476" => 1659,
- "old:virtual_from_version:45474" => 1070,
- "old:virtual_from_version:46979" => 1067,
- "old:virtual_from_version:47437" => 1077,
- "old:virtual_from_version:50326" => 1070,
- "old:virtual_from_version:45510" => 1070,
- "old:virtual_from_version:47615" => 1077,
- "old:virtual_from_version:49990" => 1404,
- "old:virtual_from_version:50562" => 1070,
- "old:virtual_from_version:46679" => 1077,
- "old:virtual_from_version:46161" => 1070,
- "old:virtual_from_version:42459" => 1107,
- "old:virtual_from_version:50374" => 3131,
- "old:virtual_from_version:46694" => 1404,
- "old:virtual_from_version:42687" => 1009,
- "old:virtual_from_version:46447" => 1172,
- "old:virtual_from_version:10004" => 2003,
- "old:virtual_from_version:46138" => 1414,
- "old:virtual_from_version:40887" => 1009,
- "old:virtual_from_version:40079" => 1081,
- "old:virtual_from_version:49074" => 3002,
- "old:virtual_from_version:46448" => 1031,
- "old:virtual_from_version:8056 " => 1060,
- "old:virtual_from_version:49828" => 1125,
- "old:virtual_from_version:47317" => 3009,
- "old:virtual_from_version:46439" => 1077,
- "old:virtual_from_version:47656" => 1404,
- "old:virtual_from_version:40936" => 1037,
- "old:virtual_from_version:44516" => 1025,
- "old:virtual_from_version:44980" => 1081,
- "old:virtual_from_version:42947" => 1110,
- "old:virtual_from_version:49826" => 3201,
- "old:virtual_from_version:42517" => 1070,
- "old:virtual_from_version:44167" => 1522,
- "old:virtual_from_version:50328" => 1224,
- "old:virtual_from_version:50288" => 3131,
- "old:virtual_from_version:46036" => 1070,
- "old:virtual_from_version:44103" => 1516,
- "old:virtual_from_version:42566" => 1009,
- "old:virtual_from_version:42253" => 1037,
- "old:virtual_from_version:49775" => 3131,
- "old:virtual_from_version:46574" => 1689,
- "old:virtual_from_version:49937" => 1136,
- "old:virtual_from_version:49058" => 1404,
- "old:virtual_from_version:49364" => 1583,
- "old:virtual_from_version:50046" => 1070,
- "old:virtual_from_version:44895" => 1107,
- "old:virtual_from_version:47256" => 1077,
- "old:virtual_from_version:47809" => 3108,
- "old:virtual_from_version:50443" => 1035,
- "old:virtual_from_version:42618" => 1070,
- "old:virtual_from_version:45803" => 1009,
- "old:virtual_from_version:49758" => 1666,
- "old:virtual_from_version:44317" => 1067,
- "old:virtual_from_version:45265" => 1042,
- "old:virtual_from_version:42120" => 1077,
- "old:virtual_from_version:49561" => 1070,
- "old:virtual_from_version:40643" => 1005,
- "old:virtual_from_version:47519" => 1109,
- "old:virtual_from_version:44596" => 1037,
- "old:virtual_from_version:42360" => 1037,
- "old:virtual_from_version:49754" => 3195,
- "old:virtual_from_version:45119" => 1009,
- "old:virtual_from_version:50243" => 1070,
- "old:virtual_from_version:47485" => 1070,
- "old:virtual_from_version:50164" => 1172,
- "old:virtual_from_version:22824" => 1035,
- "old:virtual_from_version:40061" => 1067,
- "old:virtual_from_version:47409" => 1621,
- "old:virtual_from_version:45148" => 1568,
- "old:virtual_from_version:42617" => 1172,
- "old:virtual_from_version:49792" => 3131,
- "old:virtual_from_version:47969" => 1037,
- "old:virtual_from_version:46213" => 1009,
- "old:virtual_from_version:40679" => 1109,
- "old:virtual_from_version:47833" => 1172,
- "old:virtual_from_version:42849" => 1009,
- "old:virtual_from_version:39183" => 1036,
- "old:virtual_from_version:46127" => 1070,
- "old:virtual_from_version:49255" => 1410,
- "old:virtual_from_version:44795" => 1025,
- "old:virtual_from_version:42106" => 1037,
- "old:virtual_from_version:46022" => 1574,
- "old:virtual_from_version:45094" => 1070,
- "old:virtual_from_version:42877" => 1063,
- "old:virtual_from_version:44918" => 1009,
- "old:virtual_from_version:46201" => 1633,
- "old:virtual_from_version:49191" => 1689,
- "old:virtual_from_version:49534" => 1585,
- "old:virtual_from_version:49126" => 1580,
- "old:virtual_from_version:45273" => 1112,
- "old:virtual_from_version:46868" => 1067,
- "old:virtual_from_version:47633" => 1584,
- "old:virtual_from_version:46392" => 1077,
- "old:virtual_from_version:45768" => 1070,
- "old:virtual_from_version:49531" => 1532,
- "old:virtual_from_version:46231" => 1615,
- "old:virtual_from_version:45457" => 1125,
- "old:virtual_from_version:49005" => 1583,
- "old:virtual_from_version:42989" => 1070,
- "old:virtual_from_version:46740" => 1404,
- "old:virtual_from_version:45623" => 1077,
- "old:virtual_from_version:50168" => 3131,
- "old:virtual_from_version:45907" => 1107,
- "old:virtual_from_version:40582" => 1105,
- "old:virtual_from_version:46713" => 1048,
- "old:virtual_from_version:46550" => 1048,
- "old:virtual_from_version:49872" => 3194,
- "old:virtual_from_version:40932" => 1077,
- "old:virtual_from_version:47466" => 1621,
- "old:virtual_from_version:45581" => 1070,
- "old:virtual_from_version:46028" => 1077,
- "old:virtual_from_version:50664" => 1419,
- "old:virtual_from_version:42510" => 1109,
- "old:virtual_from_version:39317" => 1123,
- "old:virtual_from_version:42300" => 1107,
- "old:virtual_from_version:44864" => 1077,
- "old:virtual_from_version:47984" => 1070,
- "old:virtual_from_version:45509" => 1136,
- "old:virtual_from_version:49209" => 1565,
- "old:virtual_from_version:49438" => 1150,
- "old:virtual_from_version:49517" => 1070,
- "old:virtual_from_version:47848" => 1109,
- "old:virtual_from_version:47046" => 1125,
- "old:virtual_from_version:45860" => 1070,
- "old:virtual_from_version:50490" => 3252,
- "old:virtual_from_version:45545" => 1172,
- "old:virtual_from_version:49988" => 3131,
- "old:virtual_from_version:46128" => 1077,
- "old:virtual_from_version:46567" => 1077,
- "old:virtual_from_version:50132" => 1404,
- "old:virtual_from_version:44012" => 1077,
- "old:virtual_from_version:47846" => 1070,
- "old:virtual_from_version:44128" => 1037,
- "old:virtual_from_version:49898" => 1006,
- "old:virtual_from_version:44897" => 1077,
- "old:virtual_from_version:44135" => 1070,
- "old:virtual_from_version:44462" => 1037,
- "old:virtual_from_version:42240" => 1037,
- "old:virtual_from_version:45220" => 1575,
- "old:virtual_from_version:50667" => 1070,
- "old:virtual_from_version:44353" => 1172,
- "old:virtual_from_version:49681" => 3190,
- "old:virtual_from_version:46676" => 1077,
- "old:virtual_from_version:45807" => 1381,
- "old:virtual_from_version:42952" => 1077,
- "old:virtual_from_version:44591" => 1110,
- "old:virtual_from_version:50762" => 1070,
- "old:virtual_from_version:50435" => 1057,
- "old:virtual_from_version:45071" => 1077,
- "old:virtual_from_version:42862" => 1321,
- "old:virtual_from_version:50315" => 3186,
- "old:virtual_from_version:50434" => 3239,
- "old:virtual_from_version:45458" => 1107,
- "old:virtual_from_version:50383" => 1125,
- "old:virtual_from_version:44550" => 1077,
- "old:virtual_from_version:50072" => 3215,
- "old:virtual_from_version:49617" => 1158,
- "old:virtual_from_version:50090" => 1070,
- "old:virtual_from_version:50704" => 1012,
- "old:virtual_from_version:45962" => 1077,
- "old:virtual_from_version:40470" => 1091,
- "old:virtual_from_version:47523" => 1580,
- "old:virtual_from_version:50426" => 1070,
- "old:virtual_from_version:47322" => 1109,
- "old:virtual_from_version:43074" => 2072,
- "old:virtual_from_version:50371" => 3131,
- "old:virtual_from_version:46013" => 1172,
- "old:virtual_from_version:46601" => 1005,
- "old:virtual_from_version:46090" => 1655,
- "old:virtual_from_version:50488" => 3221,
- "old:virtual_from_version:47202" => 1035,
- "old:virtual_from_version:45116" => 1009,
- "old:virtual_from_version:44810" => 1077,
- "old:virtual_from_version:42164" => 1070,
- "old:virtual_from_version:42003" => 1009,
- "old:virtual_from_version:40401" => 1351,
- "old:virtual_from_version:49256" => 1649,
- "old:virtual_from_version:46912" => 1621,
- "old:virtual_from_version:49471" => 1314,
- "old:virtual_from_version:42221" => 1037,
- "old:virtual_from_version:40905" => 1077,
- "old:virtual_from_version:49498" => 1035,
- "old:virtual_from_version:38727" => 1083,
- "old:virtual_from_version:50214" => 1172,
- "old:virtual_from_version:47047" => 1077,
- "old:virtual_from_version:47096" => 1311,
- "old:virtual_from_version:42900" => 1110,
- "old:virtual_from_version:45841" => 1172,
- "old:virtual_from_version:49140" => 1689,
- "old:virtual_from_version:49353" => 1077,
- "old:virtual_from_version:50329" => 3131,
- "old:virtual_from_version:47035" => 1580,
- "old:virtual_from_version:44995" => 1091,
- "old:virtual_from_version:49899" => 3131,
- "old:virtual_from_version:47201" => 1587,
- "old:virtual_from_version:46228" => 1077,
- "old:virtual_from_version:50732" => 1048,
- "old:virtual_from_version:44143" => 1125,
- "old:virtual_from_version:47903" => 3119,
- "old:virtual_from_version:45913" => 1009,
- "old:virtual_from_version:50093" => 3131,
- "old:virtual_from_version:44031" => 1037,
- "old:virtual_from_version:46042" => 1650,
- "old:virtual_from_version:44928" => 1107,
- "old:virtual_from_version:49407" => 1070,
- "old:virtual_from_version:49738" => 1489,
- "old:virtual_from_version:49795" => 1489,
- "old:virtual_from_version:47781" => 1077,
- "old:virtual_from_version:50354" => 1314,
- "old:virtual_from_version:42710" => 1077,
- "old:virtual_from_version:44909" => 1009,
- "old:virtual_from_version:46734" => 1517,
- "old:virtual_from_version:46126" => 1077,
- "old:virtual_from_version:49970" => 3209,
- "old:virtual_from_version:44879" => 1070,
- "old:virtual_from_version:42896" => 1070,
- "old:virtual_from_version:50188" => 3131,
- "old:virtual_from_version:39658" => 1007,
- "old:virtual_from_version:45427" => 1048,
- "old:virtual_from_version:50082" => 3131,
- "old:virtual_from_version:40465" => 1009,
- "old:virtual_from_version:45275" => 1017,
- "old:virtual_from_version:42886" => 1009,
- "old:virtual_from_version:45635" => 1076,
- "old:virtual_from_version:43065" => 2066,
- "old:virtual_from_version:44195" => 1070,
- "old:virtual_from_version:40687" => 1051,
- "old:virtual_from_version:40729" => 1077,
- "old:virtual_from_version:42219" => 1009,
- "old:virtual_from_version:38563" => 1116,
- "old:virtual_from_version:49479" => 1583,
- "old:virtual_from_version:50631" => 1689,
- "old:virtual_from_version:47316" => 1689,
- "old:virtual_from_version:50021" => 1070,
- "old:virtual_from_version:42927" => 1077,
- "old:virtual_from_version:39901" => 1070,
- "old:virtual_from_version:49704" => 3191,
- "old:virtual_from_version:42723" => 1077,
- "old:virtual_from_version:49485" => 1070,
- "old:virtual_from_version:45622" => 1009,
- "old:virtual_from_version:46421" => 1077,
- "old:virtual_from_version:44004" => 1037,
- "old:virtual_from_version:46099" => 1649,
- "old:virtual_from_version:43081" => 2078,
- "old:virtual_from_version:47314" => 1077,
- "old:virtual_from_version:44667" => 1172,
- "old:virtual_from_version:46186" => 1077,
- "old:virtual_from_version:49901" => 1616,
- "old:virtual_from_version:49652" => 1070,
- "old:virtual_from_version:49703" => 3129,
- "old:virtual_from_version:42153" => 1037,
- "old:virtual_from_version:47424" => 1689,
- "old:virtual_from_version:47587" => 1109,
- "old:virtual_from_version:49049" => 1666,
- "old:virtual_from_version:47052" => 1125,
- "old:virtual_from_version:44837" => 1009,
- "old:virtual_from_version:47290" => 1125,
- "old:virtual_from_version:45032" => 1015,
- "old:virtual_from_version:45563" => 1012,
- "old:virtual_from_version:44442" => 1077,
- "old:virtual_from_version:42945" => 1077,
- "old:virtual_from_version:50480" => 3174,
- "old:virtual_from_version:44836" => 1033,
- "old:virtual_from_version:49120" => 1067,
- "old:virtual_from_version:46334" => 1659,
- "old:virtual_from_version:46633" => 1077,
- "old:virtual_from_version:47000" => 1070,
- "old:virtual_from_version:49038" => 1070,
- "old:virtual_from_version:40788" => 1070,
- "old:virtual_from_version:42369" => 1009,
- "old:virtual_from_version:43051" => 2018,
- "old:virtual_from_version:44949" => 1404,
- "old:virtual_from_version:49884" => 1689,
- "old:virtual_from_version:46144" => 1105,
- "old:virtual_from_version:50577" => 3031,
- "old:virtual_from_version:40303" => 1109,
- "old:virtual_from_version:42891" => 1009,
- "old:virtual_from_version:38291" => 1082,
- "old:virtual_from_version:49725" => 1006,
- "old:virtual_from_version:50677" => 1070,
- "old:virtual_from_version:46835" => 1077,
- "old:virtual_from_version:50594" => 3227,
- "old:virtual_from_version:49487" => 1070,
- "old:virtual_from_version:44797" => 1109,
- "old:virtual_from_version:47698" => 1672,
- "old:virtual_from_version:49150" => 1107,
- "old:virtual_from_version:47795" => 3078,
- "old:virtual_from_version:45163" => 1009,
- "old:virtual_from_version:47946" => 1109,
- "old:virtual_from_version:39050" => 1007,
- "old:virtual_from_version:44967" => 1070,
- "old:virtual_from_version:49290" => 3136,
- "old:virtual_from_version:42015" => 1107,
- "old:virtual_from_version:46576" => 1007,
- "old:virtual_from_version:40935" => 1077,
- "old:virtual_from_version:46141" => 1012,
- "old:virtual_from_version:49248" => 1532,
- "old:virtual_from_version:49698" => 1659,
- "old:virtual_from_version:45908" => 1009,
- "old:virtual_from_version:47454" => 1402,
- "old:virtual_from_version:44938" => 1110,
- "old:virtual_from_version:40601" => 1070,
- "old:virtual_from_version:43009" => 2034,
- "old:virtual_from_version:44523" => 1172,
- "old:virtual_from_version:45256" => 1037,
- "old:virtual_from_version:49212" => 1172,
- "old:virtual_from_version:39329" => 1069,
- "old:virtual_from_version:49799" => 1125,
- "old:virtual_from_version:46545" => 1070,
- "old:virtual_from_version:45937" => 1015,
- "old:virtual_from_version:47926" => 3008,
- "old:virtual_from_version:50461" => 1689,
- "old:virtual_from_version:44832" => 1029,
- "old:virtual_from_version:46742" => 1070,
- "old:virtual_from_version:46949" => 1659,
- "old:virtual_from_version:45802" => 1105,
- "old:virtual_from_version:39991" => 2006,
- "old:virtual_from_version:42350" => 1009,
- "old:virtual_from_version:46791" => 1689,
- "old:virtual_from_version:46395" => 1423,
- "old:virtual_from_version:49338" => 1689,
- "old:virtual_from_version:50761" => 3009,
- "old:virtual_from_version:44173" => 1077,
- "old:virtual_from_version:50595" => 3259,
- "old:virtual_from_version:50232" => 1689,
- "old:virtual_from_version:44613" => 1009,
- "old:virtual_from_version:49526" => 1580,
- "old:virtual_from_version:44554" => 1077,
- "old:virtual_from_version:47315" => 1517,
- "old:virtual_from_version:45352" => 1125,
- "old:virtual_from_version:38362" => 1110,
- "old:virtual_from_version:45729" => 1112,
- "old:virtual_from_version:46759" => 1077,
- "old:virtual_from_version:45160" => 1107,
- "old:virtual_from_version:45519" => 1025,
- "old:virtual_from_version:49346" => 1077,
- "old:virtual_from_version:42577" => 1077,
- "old:virtual_from_version:42238" => 1009,
- "old:virtual_from_version:49078" => 1666,
- "old:virtual_from_version:49268" => 1070,
- "old:virtual_from_version:40084" => 1107,
- "old:virtual_from_version:50545" => 3120,
- "old:virtual_from_version:44711" => 1070,
- "old:virtual_from_version:44500" => 1107,
- "old:virtual_from_version:42207" => 1172,
- "old:virtual_from_version:46388" => 1107,
- "old:virtual_from_version:42075" => 1070,
- "old:virtual_from_version:42527" => 1077,
- "old:virtual_from_version:47071" => 1077,
- "old:virtual_from_version:39322" => 1025,
- "old:virtual_from_version:46962" => 1125,
- "old:virtual_from_version:46764" => 1070,
- "old:virtual_from_version:47921" => 1404,
- "old:virtual_from_version:44742" => 1077,
- "old:virtual_from_version:38553" => 1007,
- "old:virtual_from_version:50614" => 1070,
- "old:virtual_from_version:40824" => 1070,
- "old:virtual_from_version:47982" => 1689,
- "old:virtual_from_version:42564" => 1110,
- "old:virtual_from_version:46792" => 2072,
- "old:virtual_from_version:40908" => 1125,
- "old:virtual_from_version:44641" => 1136,
- "old:virtual_from_version:47476" => 1109,
- "old:virtual_from_version:44750" => 1076,
- "old:virtual_from_version:49983" => 3131,
- "old:virtual_from_version:42956" => 1125,
- "old:virtual_from_version:41005" => 2017,
- "old:virtual_from_version:42621" => 1037,
- "old:virtual_from_version:45867" => 1077,
- "old:virtual_from_version:42298" => 1430,
- "old:virtual_from_version:50185" => 1062,
- "old:virtual_from_version:45930" => 1077,
- "old:virtual_from_version:40089" => 1136,
- "old:virtual_from_version:42571" => 1000,
- "old:virtual_from_version:44786" => 1110,
- "old:virtual_from_version:50698" => 1580,
- "old:virtual_from_version:42954" => 1067,
- "old:virtual_from_version:46566" => 1125,
- "old:virtual_from_version:42826" => 1136,
- "old:virtual_from_version:44260" => 1107,
- "old:virtual_from_version:45561" => 1009,
- "old:virtual_from_version:40461" => 1328,
- "old:virtual_from_version:46371" => 1077,
- "old:virtual_from_version:44985" => 1095,
- "old:virtual_from_version:40223" => 1099,
- "old:virtual_from_version:40518" => 1077,
- "old:virtual_from_version:44612" => 1070,
- "old:virtual_from_version:47159" => 1633,
- "old:virtual_from_version:49900" => 3194,
- "old:virtual_from_version:42267" => 1057,
- "old:virtual_from_version:50566" => 1070,
- "old:virtual_from_version:49601" => 1070,
- "old:virtual_from_version:40884" => 1105,
- "old:virtual_from_version:46302" => 1553,
- "old:virtual_from_version:46493" => 1413,
- "old:virtual_from_version:45895" => 1070,
- "old:virtual_from_version:46859" => 1077,
- "old:virtual_from_version:47131" => 1070,
- "old:virtual_from_version:46297" => 1077,
- "old:virtual_from_version:42192" => 1037,
- "old:virtual_from_version:50685" => 3002,
- "old:virtual_from_version:45862" => 1077,
- "old:virtual_from_version:45704" => 1070,
- "old:virtual_from_version:45386" => 1051,
- "old:virtual_from_version:47103" => 1172,
- "old:virtual_from_version:44220" => 1051,
- "old:virtual_from_version:42733" => 1070,
- "old:virtual_from_version:46255" => 1063,
- "old:virtual_from_version:40182" => 1031,
- "old:virtual_from_version:47472" => 1689,
- "old:virtual_from_version:49612" => 1125,
- "old:virtual_from_version:44450" => 1104,
- "old:virtual_from_version:49728" => 1404,
- "old:virtual_from_version:44820" => 1025,
- "old:virtual_from_version:42916" => 1025,
- "old:virtual_from_version:40588" => 1070,
- "old:virtual_from_version:47301" => 1077,
- "old:virtual_from_version:50242" => 3230,
- "old:virtual_from_version:40658" => 1136,
- "old:virtual_from_version:40816" => 1025,
- "old:virtual_from_version:45777" => 1397,
- "old:virtual_from_version:49950" => 3194,
- "old:virtual_from_version:49325" => 1037,
- "old:virtual_from_version:42011" => 1009,
- "old:virtual_from_version:46685" => 1070,
- "old:virtual_from_version:50041" => 1070,
- "old:virtual_from_version:32632" => 1030,
- "old:virtual_from_version:50654" => 1489,
- "old:virtual_from_version:46151" => 1070,
- "old:virtual_from_version:46350" => 1001,
- "old:virtual_from_version:45149" => 1125,
- "old:virtual_from_version:39502" => 1015,
- "old:virtual_from_version:42434" => 1070,
- "old:virtual_from_version:50220" => 1037,
- "old:virtual_from_version:42126" => 1077,
- "old:virtual_from_version:49933" => 1000,
- "old:virtual_from_version:50238" => 1070,
- "old:virtual_from_version:44512" => 1125,
- "old:virtual_from_version:37035" => 1104,
- "old:virtual_from_version:44219" => 1067,
- "old:virtual_from_version:46987" => 1070,
- "old:virtual_from_version:38681" => 1110,
- "old:virtual_from_version:49781" => 3131,
- "old:virtual_from_version:42622" => 1084,
- "old:virtual_from_version:44853" => 1107,
- "old:virtual_from_version:44372" => 1016,
- "old:virtual_from_version:45445" => 1070,
- "old:virtual_from_version:47808" => 1404,
- "old:virtual_from_version:40835" => 1062,
- "old:virtual_from_version:47098" => 1172,
- "old:virtual_from_version:44089" => 1077,
- "old:virtual_from_version:47948" => 1689,
- "old:virtual_from_version:47819" => 3078,
- "old:virtual_from_version:46360" => 1555,
- "old:virtual_from_version:49261" => 1070,
- "old:virtual_from_version:44109" => 1025,
- "old:virtual_from_version:42523" => 1107,
- "old:virtual_from_version:40559" => 1077,
- "old:virtual_from_version:46377" => 1076,
- "old:virtual_from_version:38952" => 1077,
- "old:virtual_from_version:46586" => 1025,
- "old:virtual_from_version:44708" => 1537,
- "old:virtual_from_version:40615" => 1095,
- "old:virtual_from_version:46972" => 1077,
- "old:virtual_from_version:47940" => 1109,
- "old:virtual_from_version:49597" => 1107,
- "old:virtual_from_version:46767" => 1077,
- "old:virtual_from_version:44983" => 1109,
- "old:virtual_from_version:44841" => 1110,
- "old:virtual_from_version:47963" => 1077,
- "old:virtual_from_version:48037" => 2079,
- "old:virtual_from_version:46291" => 1172,
- "old:virtual_from_version:46675" => 1125,
- "old:virtual_from_version:45708" => 1532,
- "old:virtual_from_version:40647" => 1362,
- "old:virtual_from_version:45726" => 1402,
- "old:virtual_from_version:40888" => 1125,
- "old:virtual_from_version:47346" => 1070,
- "old:virtual_from_version:50087" => 1025,
- "old:virtual_from_version:40449" => 1404,
- "old:virtual_from_version:40796" => 1081,
- "old:virtual_from_version:42216" => 1037,
- "old:virtual_from_version:45466" => 1136,
- "old:virtual_from_version:47638" => 1032,
- "old:virtual_from_version:46261" => 1077,
- "old:virtual_from_version:49616" => 3183,
- "old:virtual_from_version:46520" => 1077,
- "old:virtual_from_version:46918" => 1095,
- "old:virtual_from_version:50125" => 1125,
- "old:virtual_from_version:42885" => 1070,
- "old:virtual_from_version:40579" => 1404,
- "old:virtual_from_version:50683" => 1666,
- "old:virtual_from_version:42665" => 1037,
- "old:virtual_from_version:50402" => 1314,
- "old:virtual_from_version:47324" => 1012,
- "old:virtual_from_version:47138" => 1070,
- "old:virtual_from_version:44517" => 1077,
- "old:virtual_from_version:49169" => 1077,
- "old:virtual_from_version:44351" => 1077,
- "old:virtual_from_version:40724" => 1404,
- "old:virtual_from_version:42301" => 1070,
- "old:virtual_from_version:47208" => 1077,
- "old:virtual_from_version:44739" => 1077,
- "old:virtual_from_version:50005" => 1689,
- "old:virtual_from_version:40782" => 1077,
- "old:virtual_from_version:40891" => 1037,
- "old:virtual_from_version:47495" => 1109,
- "old:virtual_from_version:42203" => 1037,
- "old:virtual_from_version:44945" => 1077,
- "old:virtual_from_version:45241" => 1000,
- "old:virtual_from_version:45555" => 1136,
- "old:virtual_from_version:42275" => 1107,
- "old:virtual_from_version:50712" => 3259,
- "old:virtual_from_version:45248" => 1043,
- "old:virtual_from_version:49253" => 1404,
- "old:virtual_from_version:45670" => 1621,
- "old:virtual_from_version:50102" => 1015,
- "old:virtual_from_version:43041" => 2053,
- "old:virtual_from_version:42550" => 1037,
- "old:virtual_from_version:46849" => 1077,
- "old:virtual_from_version:49959" => 1070,
- "old:virtual_from_version:42515" => 1150,
- "old:virtual_from_version:50115" => 3131,
- "old:virtual_from_version:42899" => 1037,
- "old:virtual_from_version:44875" => 1077,
- "old:virtual_from_version:40979" => 1070,
- "old:virtual_from_version:49994" => 1100,
- "old:virtual_from_version:46497" => 1537,
- "old:virtual_from_version:42758" => 1461,
- "old:virtual_from_version:39994" => 2009,
- "old:virtual_from_version:49182" => 3153,
- "old:virtual_from_version:44923" => 1125,
- "old:virtual_from_version:38384" => 1067,
- "old:virtual_from_version:50504" => 3261,
- "old:virtual_from_version:47550" => 1070,
- "old:virtual_from_version:44491" => 1110,
- "old:virtual_from_version:42719" => 1037,
- "old:virtual_from_version:38366" => 1065,
- "old:virtual_from_version:50418" => 1070,
- "old:virtual_from_version:40885" => 1057,
- "old:virtual_from_version:47028" => 3008,
- "old:virtual_from_version:49829" => 1037,
- "old:virtual_from_version:49195" => 1070,
- "old:virtual_from_version:46121" => 1461,
- "old:virtual_from_version:47165" => 1125,
- "old:virtual_from_version:47805" => 1172,
- "old:virtual_from_version:50205" => 3137,
- "old:virtual_from_version:50366" => 1007,
- "old:virtual_from_version:50027" => 3131,
- "old:virtual_from_version:49637" => 1158,
- "old:virtual_from_version:46357" => 1070,
- "old:virtual_from_version:47883" => 1109,
- "old:virtual_from_version:42755" => 1037,
- "old:virtual_from_version:42573" => 1077,
- "old:virtual_from_version:42380" => 1172,
- "old:virtual_from_version:38672" => 1104,
- "old:virtual_from_version:49595" => 1070,
- "old:virtual_from_version:47735" => 1109,
- "old:virtual_from_version:42850" => 1077,
- "old:virtual_from_version:50436" => 3242,
- "old:virtual_from_version:47941" => 1025,
- "old:virtual_from_version:46455" => 1537,
- "old:virtual_from_version:47079" => 1583,
- "old:virtual_from_version:50273" => 3131,
- "old:virtual_from_version:46609" => 1125,
- "old:virtual_from_version:47820" => 3094,
- "old:virtual_from_version:47140" => 1077,
- "old:virtual_from_version:44884" => 1136,
- "old:virtual_from_version:42821" => 1070,
- "old:virtual_from_version:49719" => 1489,
- "old:virtual_from_version:50709" => 3273,
- "old:virtual_from_version:44221" => 1070,
- "old:virtual_from_version:40926" => 1107,
- "old:virtual_from_version:46386" => 1552,
- "old:virtual_from_version:40641" => 1025,
- "old:virtual_from_version:50606" => 3131,
- "old:virtual_from_version:42171" => 1070,
- "old:virtual_from_version:46451" => 1172,
- "old:virtual_from_version:50688" => 1005,
- "old:virtual_from_version:42925" => 1506,
- "old:virtual_from_version:44950" => 1067,
- "old:virtual_from_version:45112" => 1009,
- "old:virtual_from_version:44075" => 1009,
- "old:virtual_from_version:42535" => 1067,
- "old:virtual_from_version:42931" => 1051,
- "old:virtual_from_version:49947" => 1580,
- "old:virtual_from_version:42132" => 1009,
- "old:virtual_from_version:44732" => 1070,
- "old:virtual_from_version:50101" => 1070,
- "old:virtual_from_version:47827" => 1070,
- "old:virtual_from_version:45764" => 1404,
- "old:virtual_from_version:44984" => 1022,
- "old:virtual_from_version:44367" => 1008,
- "old:virtual_from_version:49304" => 1583,
- "old:virtual_from_version:50017" => 1314,
- "old:virtual_from_version:46731" => 1125,
- "old:virtual_from_version:45744" => 1009,
- "old:virtual_from_version:39708" => 1109,
- "old:virtual_from_version:39232" => 1062,
- "old:virtual_from_version:44994" => 1112,
- "old:virtual_from_version:46290" => 1067,
- "old:virtual_from_version:47667" => 1070,
- "old:virtual_from_version:47234" => 1640,
- "old:virtual_from_version:47164" => 1070,
- "old:virtual_from_version:50044" => 1689,
- "old:virtual_from_version:50678" => 1150,
- "old:virtual_from_version:40585" => 1025,
- "old:virtual_from_version:42783" => 1077,
- "old:virtual_from_version:47619" => 1311,
- "old:virtual_from_version:44019" => 1009,
- "old:virtual_from_version:44110" => 1077,
- "old:virtual_from_version:47740" => 1109,
- "old:virtual_from_version:46058" => 1077,
- "old:virtual_from_version:38932" => 1007,
- "old:virtual_from_version:50695" => 1006,
- "old:virtual_from_version:46110" => 1404,
- "old:virtual_from_version:47922" => 1413,
- "old:virtual_from_version:42638" => 1172,
- "old:virtual_from_version:45104" => 1070,
- "old:virtual_from_version:44609" => 1051,
- "old:virtual_from_version:43068" => 2069,
- "old:virtual_from_version:44306" => 1172,
- "old:virtual_from_version:45233" => 1083,
- "old:virtual_from_version:47326" => 1070,
- "old:virtual_from_version:37416" => 1001,
- "old:virtual_from_version:42243" => 1070,
- "old:virtual_from_version:46939" => 3009,
- "old:virtual_from_version:46541" => 1125,
- "old:virtual_from_version:42284" => 1426,
- "old:virtual_from_version:44287" => 1025,
- "old:virtual_from_version:44919" => 1077,
- "old:virtual_from_version:38762" => 1108,
- "old:virtual_from_version:46047" => 1488,
- "old:virtual_from_version:46700" => 1417,
- "old:virtual_from_version:45076" => 1070,
- "old:virtual_from_version:48003" => 2104,
- "old:virtual_from_version:50173" => 1125,
- "old:virtual_from_version:44617" => 1037,
- "old:virtual_from_version:50463" => 3159,
- "old:virtual_from_version:34128" => 1091,
- "old:virtual_from_version:44842" => 1081,
- "old:virtual_from_version:50462" => 3131,
- "old:virtual_from_version:47182" => 1051,
- "old:virtual_from_version:43094" => 2086,
- "old:virtual_from_version:40699" => 1016,
- "old:virtual_from_version:46836" => 1351,
- "old:virtual_from_version:49956" => 1070,
- "old:virtual_from_version:42627" => 1311,
- "old:virtual_from_version:45526" => 1404,
- "old:virtual_from_version:49869" => 1584,
- "old:virtual_from_version:50648" => 1038,
- "old:virtual_from_version:49998" => 3215,
- "old:virtual_from_version:50564" => 1150,
- "old:virtual_from_version:45056" => 1112,
- "old:virtual_from_version:45490" => 1105,
- "old:virtual_from_version:42969" => 1110,
- "old:virtual_from_version:46558" => 1077,
- "old:virtual_from_version:42857" => 1077,
- "old:virtual_from_version:47866" => 1689,
- "old:virtual_from_version:45755" => 1012,
- "old:virtual_from_version:46821" => 1509,
- "old:virtual_from_version:47211" => 1070,
- "old:virtual_from_version:50514" => 1585,
- "old:virtual_from_version:45500" => 1112,
- "old:virtual_from_version:45829" => 1107,
- "old:virtual_from_version:47861" => 1077,
- "old:virtual_from_version:47980" => 1077,
- "old:virtual_from_version:50113" => 1580,
- "old:virtual_from_version:46318" => 1070,
- "old:virtual_from_version:50427" => 1064,
- "old:virtual_from_version:40851" => 1009,
- "old:virtual_from_version:47546" => 1125,
- "old:virtual_from_version:49071" => 1689,
- "old:virtual_from_version:42347" => 1107,
- "old:virtual_from_version:49397" => 3008,
- "old:virtual_from_version:49337" => 1666,
- "old:virtual_from_version:49923" => 3206,
- "old:virtual_from_version:47774" => 1666,
- "old:virtual_from_version:44048" => 1077,
- "old:virtual_from_version:39815" => 1149,
- "old:virtual_from_version:50081" => 1051,
- "old:virtual_from_version:46661" => 1077,
- "old:virtual_from_version:46370" => 1005,
- "old:virtual_from_version:47939" => 1070,
- "old:virtual_from_version:47977" => 1070,
- "old:virtual_from_version:44210" => 1183,
- "old:virtual_from_version:47992" => 1109,
- "old:virtual_from_version:48028" => 2079,
- "old:virtual_from_version:49145" => 1077,
- "old:virtual_from_version:47385" => 3008,
- "old:virtual_from_version:46775" => 1070,
- "old:virtual_from_version:45378" => 1125,
- "old:virtual_from_version:40637" => 1057,
- "old:virtual_from_version:46964" => 1070,
- "old:virtual_from_version:44185" => 1125,
- "old:virtual_from_version:42673" => 1070,
- "old:virtual_from_version:49137" => 1649,
- "old:virtual_from_version:46989" => 1125,
- "old:virtual_from_version:40672" => 1077,
- "old:virtual_from_version:42716" => 1023,
- "old:virtual_from_version:42453" => 1440,
- "old:virtual_from_version:45586" => 1070,
- "old:virtual_from_version:46805" => 1048,
- "old:virtual_from_version:44003" => 1077,
- "old:virtual_from_version:46565" => 1070,
- "old:virtual_from_version:46217" => 1404,
- "old:virtual_from_version:49083" => 3136,
- "old:virtual_from_version:47392" => 3008,
- "old:virtual_from_version:44924" => 1070,
- "old:virtual_from_version:49790" => 1037,
- "old:virtual_from_version:49695" => 3008,
- "old:virtual_from_version:49154" => 1070,
- "old:virtual_from_version:49623" => 3185,
- "old:virtual_from_version:46885" => 1172,
- "old:virtual_from_version:42237" => 1070,
- "old:virtual_from_version:42242" => 1172,
- "old:virtual_from_version:44944" => 1026,
- "old:virtual_from_version:42655" => 1037,
- "old:virtual_from_version:44988" => 1010,
- "old:virtual_from_version:47480" => 1444,
- "old:virtual_from_version:42856" => 1009,
- "old:virtual_from_version:44753" => 1009,
- "old:virtual_from_version:47197" => 1070,
- "old:virtual_from_version:45875" => 1532,
- "old:virtual_from_version:40635" => 1077,
- "old:virtual_from_version:39752" => 1404,
- "old:virtual_from_version:47830" => 1107,
- "old:virtual_from_version:45507" => 1585,
- "old:virtual_from_version:38667" => 1069,
- "old:virtual_from_version:49734" => 1067,
- "old:virtual_from_version:46149" => 1037,
- "old:virtual_from_version:44346" => 1025,
- "old:virtual_from_version:45676" => 1048,
- "old:virtual_from_version:49724" => 1070,
- "old:virtual_from_version:42747" => 1037,
- "old:virtual_from_version:49330" => 1659,
- "old:virtual_from_version:45105" => 1077,
- "old:virtual_from_version:44374" => 1017,
- "old:virtual_from_version:50011" => 1565,
- "old:virtual_from_version:49152" => 1105,
- "old:virtual_from_version:49864" => 1404,
- "old:virtual_from_version:44356" => 1081,
- "old:virtual_from_version:46194" => 1649,
- "old:virtual_from_version:49358" => 1070,
- "old:virtual_from_version:50579" => 1125,
- "old:virtual_from_version:47122" => 1067,
- "old:virtual_from_version:45232" => 1083,
- "old:virtual_from_version:42562" => 1037,
- "old:virtual_from_version:49605" => 1070,
- "old:virtual_from_version:50333" => 1070,
- "old:virtual_from_version:42789" => 1353,
- "old:virtual_from_version:50233" => 3131,
- "old:virtual_from_version:49007" => 1585,
- "old:virtual_from_version:44423" => 1042,
- "old:virtual_from_version:44657" => 1077,
- "old:virtual_from_version:45626" => 1070,
- "old:virtual_from_version:44056" => 1037,
- "old:virtual_from_version:47532" => 1070,
- "old:virtual_from_version:46747" => 1632,
- "old:virtual_from_version:50079" => 3223,
- "old:virtual_from_version:40499" => 1077,
- "old:virtual_from_version:47772" => 1077,
- "old:virtual_from_version:44673" => 1009,
- "old:virtual_from_version:40237" => 1070,
- "old:virtual_from_version:49184" => 1105,
- "old:virtual_from_version:49393" => 1381,
- "old:virtual_from_version:43077" => 2074,
- "old:virtual_from_version:38981" => 1009,
- "old:virtual_from_version:42713" => 1311,
- "old:virtual_from_version:40690" => 1070,
- "old:virtual_from_version:40480" => 1077,
- "old:virtual_from_version:46711" => 1077,
- "old:virtual_from_version:45938" => 1077,
- "old:virtual_from_version:47115" => 3021,
- "old:virtual_from_version:44846" => 1077,
- "old:virtual_from_version:44533" => 1009,
- "old:virtual_from_version:49772" => 1651,
- "old:virtual_from_version:49587" => 1172,
- "old:virtual_from_version:41003" => 2015,
- "old:virtual_from_version:45294" => 1581,
- "old:virtual_from_version:47676" => 1404,
- "old:virtual_from_version:40152" => 1105,
- "old:virtual_from_version:47460" => 1077,
- "old:virtual_from_version:40795" => 1077,
- "old:virtual_from_version:49907" => 1007,
- "old:virtual_from_version:44214" => 1037,
- "old:virtual_from_version:43032" => 2031,
- "old:virtual_from_version:49985" => 1100,
- "old:virtual_from_version:45128" => 1125,
- "old:virtual_from_version:49809" => 1100,
- "old:virtual_from_version:42910" => 1077,
- "old:virtual_from_version:40549" => 1107,
- "old:virtual_from_version:42130" => 1136,
- "old:virtual_from_version:50370" => 3131,
- "old:virtual_from_version:44940" => 1070,
- "old:virtual_from_version:49746" => 3194,
- "old:virtual_from_version:42376" => 1077,
- "old:virtual_from_version:45067" => 1077,
- "old:virtual_from_version:46552" => 1077,
- "old:virtual_from_version:50582" => 1689,
- "old:virtual_from_version:39970" => 1048,
- "old:virtual_from_version:42613" => 1009,
- "old:virtual_from_version:44476" => 1067,
- "old:virtual_from_version:44666" => 1497,
- "old:virtual_from_version:49583" => 1070,
- "old:virtual_from_version:50389" => 1314,
- "old:virtual_from_version:44885" => 1125,
- "old:virtual_from_version:41014" => 2007,
- "old:virtual_from_version:47728" => 1109,
- "old:virtual_from_version:45221" => 1101,
- "old:virtual_from_version:42552" => 1172,
- "old:virtual_from_version:42738" => 1070,
- "old:virtual_from_version:42847" => 1067,
- "old:virtual_from_version:42750" => 1070,
- "old:virtual_from_version:46220" => 1633,
- "old:virtual_from_version:47107" => 1585,
- "old:virtual_from_version:49125" => 1404,
- "old:virtual_from_version:42680" => 1009,
- "old:virtual_from_version:40494" => 1070,
- "old:virtual_from_version:47620" => 3077,
- "old:virtual_from_version:46653" => 1077,
- "old:virtual_from_version:46235" => 1077,
- "old:virtual_from_version:50262" => 1032,
- "old:virtual_from_version:47736" => 1084,
- "old:virtual_from_version:47134" => 1077,
- "old:virtual_from_version:46244" => 1077,
- "old:virtual_from_version:43033" => 2032,
- "old:virtual_from_version:40664" => 1007,
- "old:virtual_from_version:42261" => 1070,
- "old:virtual_from_version:38333" => 1007,
- "old:virtual_from_version:47435" => 1109,
- "old:virtual_from_version:49908" => 1444,
- "old:virtual_from_version:45596" => 1172,
- "old:virtual_from_version:46692" => 1009,
- "old:virtual_from_version:44658" => 1037,
- "old:virtual_from_version:46523" => 1125,
- "old:virtual_from_version:50038" => 1012,
- "old:virtual_from_version:46695" => 1070,
- "old:virtual_from_version:47018" => 1172,
- "old:virtual_from_version:50457" => 1444,
- "old:virtual_from_version:46553" => 1404,
- "old:virtual_from_version:42578" => 1037,
- "old:virtual_from_version:42681" => 1077,
- "old:virtual_from_version:49451" => 1070,
- "old:virtual_from_version:42426" => 1037,
- "old:virtual_from_version:42064" => 1037,
- "old:virtual_from_version:48024" => 2125,
- "old:virtual_from_version:47125" => 1077,
- "old:virtual_from_version:45028" => 1009,
- "old:virtual_from_version:40389" => 1067,
- "old:virtual_from_version:50757" => 1048,
- "old:virtual_from_version:44443" => 1037,
- "old:virtual_from_version:40767" => 1070,
- "old:virtual_from_version:50479" => 3253,
- "old:virtual_from_version:44582" => 1077,
- "old:virtual_from_version:42652" => 1070,
- "old:virtual_from_version:45912" => 1172,
- "old:virtual_from_version:44912" => 1070,
- "old:virtual_from_version:46846" => 1070,
- "old:virtual_from_version:44634" => 1077,
- "old:virtual_from_version:49144" => 1070,
- "old:virtual_from_version:42975" => 1077,
- "old:virtual_from_version:40194" => 1222,
- "old:virtual_from_version:40501" => 1105,
- "old:virtual_from_version:49326" => 1077,
- "old:virtual_from_version:45409" => 1582,
- "old:virtual_from_version:46299" => 1362,
- "old:virtual_from_version:42714" => 1070,
- "old:virtual_from_version:50658" => 1321,
- "old:virtual_from_version:44256" => 1350,
- "old:virtual_from_version:47229" => 1077,
- "old:virtual_from_version:45538" => 1009,
- "old:virtual_from_version:50293" => 1035,
- "old:virtual_from_version:45214" => 1125,
- "old:virtual_from_version:47918" => 1067,
- "old:virtual_from_version:45957" => 1092,
- "old:virtual_from_version:49692" => 1224,
- "old:virtual_from_version:50741" => 3186,
- "old:virtual_from_version:49666" => 1062,
- "old:virtual_from_version:47353" => 1109,
- "old:virtual_from_version:47494" => 1070,
- "old:virtual_from_version:50452" => 1105,
- "old:virtual_from_version:44329" => 1037,
- "old:virtual_from_version:44360" => 1090,
- "old:virtual_from_version:46781" => 1517,
- "old:virtual_from_version:50240" => 1689,
- "old:virtual_from_version:45470" => 1077,
- "old:virtual_from_version:44696" => 1009,
- "old:virtual_from_version:45025" => 1144,
- "old:virtual_from_version:45027" => 1008,
- "old:virtual_from_version:43069" => 2059,
- "old:virtual_from_version:45254" => 1021,
- "old:virtual_from_version:43024" => 2049,
- "old:virtual_from_version:39351" => 1109,
- "old:virtual_from_version:45863" => 1335,
- "old:virtual_from_version:44632" => 1070,
- "old:virtual_from_version:47498" => 1125,
- "old:virtual_from_version:47637" => 1350,
- "old:virtual_from_version:46785" => 1125,
- "old:virtual_from_version:45101" => 1077,
- "old:virtual_from_version:49593" => 1689,
- "old:virtual_from_version:44394" => 1090,
- "old:virtual_from_version:42915" => 1015,
- "old:virtual_from_version:44464" => 1067,
- "old:virtual_from_version:49716" => 3192,
- "old:virtual_from_version:47486" => 1037,
- "old:virtual_from_version:38346" => 1011,
- "old:virtual_from_version:40490" => 1077,
- "old:virtual_from_version:45942" => 1007,
- "old:virtual_from_version:50634" => 3268,
- "old:virtual_from_version:40570" => 1146,
- "old:virtual_from_version:40954" => 1037,
- "old:virtual_from_version:47027" => 3008,
- "old:virtual_from_version:47318" => 3042,
- "old:virtual_from_version:45719" => 1009,
- "old:virtual_from_version:42633" => 1077,
- "old:virtual_from_version:42537" => 1070,
- "old:virtual_from_version:45701" => 1027,
- "old:virtual_from_version:44080" => 1125,
- "old:virtual_from_version:47219" => 1533,
- "old:virtual_from_version:45267" => 1010,
- "old:virtual_from_version:40803" => 1070,
- "old:virtual_from_version:44095" => 1025,
- "old:virtual_from_version:49054" => 1659,
- "old:virtual_from_version:44678" => 1076,
- "old:virtual_from_version:47884" => 1025,
- "old:virtual_from_version:47313" => 1172,
- "old:virtual_from_version:44937" => 1077,
- "old:virtual_from_version:44620" => 1067,
- "old:virtual_from_version:49037" => 1007,
- "old:virtual_from_version:49545" => 1413,
- "old:virtual_from_version:42998" => 1505,
- "old:virtual_from_version:39310" => 1000,
- "old:virtual_from_version:50003" => 3215,
- "old:virtual_from_version:47686" => 1112,
- "old:virtual_from_version:47383" => 1109,
- "old:virtual_from_version:42170" => 1172,
- "old:virtual_from_version:40510" => 1084,
- "old:virtual_from_version:44319" => 1104,
- "old:virtual_from_version:45406" => 1009,
- "old:virtual_from_version:47670" => 1009,
- "old:virtual_from_version:50671" => 3208,
- "old:virtual_from_version:42287" => 1007,
- "old:virtual_from_version:42938" => 1070,
- "old:virtual_from_version:42880" => 1015,
- "old:virtual_from_version:49141" => 1070,
- "old:virtual_from_version:46435" => 1070,
- "old:virtual_from_version:46032" => 1077,
- "old:virtual_from_version:40415" => 1077,
- "old:virtual_from_version:46934" => 1584,
- "old:virtual_from_version:47283" => 1461,
- "old:virtual_from_version:45791" => 1125,
- "old:virtual_from_version:39992" => 2007,
- "old:virtual_from_version:47462" => 1689,
- "old:virtual_from_version:46579" => 1689,
- "old:virtual_from_version:47453" => 1381,
- "old:virtual_from_version:44717" => 1070,
- "old:virtual_from_version:49793" => 1100,
- "old:virtual_from_version:44267" => 1067,
- "old:virtual_from_version:50392" => 1689,
- "old:virtual_from_version:40756" => 1070,
- "old:virtual_from_version:40890" => 1077,
- "old:virtual_from_version:42468" => 1037,
- "old:virtual_from_version:42503" => 1009,
- "old:virtual_from_version:46642" => 1537,
- "old:virtual_from_version:44398" => 1078,
- "old:virtual_from_version:44653" => 1037,
- "old:virtual_from_version:44107" => 1009,
- "old:virtual_from_version:46271" => 1070,
- "old:virtual_from_version:45014" => 1413,
- "old:virtual_from_version:38341" => 1005,
- "old:virtual_from_version:50334" => 1125,
- "old:virtual_from_version:49969" => 3131,
- "old:virtual_from_version:45044" => 1030,
- "old:virtual_from_version:42955" => 1150,
- "old:virtual_from_version:50543" => 1689,
- "old:virtual_from_version:46372" => 1402,
- "old:virtual_from_version:42623" => 1070,
- "old:virtual_from_version:42270" => 1015,
- "old:virtual_from_version:44854" => 1070,
- "old:virtual_from_version:47764" => 3094,
- "old:virtual_from_version:39156" => 1136,
- "old:virtual_from_version:47063" => 1689,
- "old:virtual_from_version:46169" => 1067,
- "old:virtual_from_version:49553" => 1070,
- "old:virtual_from_version:47771" => 1109,
- "old:virtual_from_version:46091" => 1656,
- "old:virtual_from_version:42150" => 1070,
- "old:virtual_from_version:44872" => 1141,
- "old:virtual_from_version:46312" => 1404,
- "old:virtual_from_version:47738" => 1404,
- "old:virtual_from_version:46779" => 1172,
- "old:virtual_from_version:45750" => 1407,
- "old:virtual_from_version:42122" => 1353,
- "old:virtual_from_version:47588" => 1077,
- "old:virtual_from_version:42805" => 1007,
- "old:virtual_from_version:47632" => 1583,
- "old:virtual_from_version:42539" => 1077,
- "old:virtual_from_version:42939" => 1009,
- "old:virtual_from_version:42824" => 1037,
- "old:virtual_from_version:49483" => 3152,
- "old:virtual_from_version:45788" => 1007,
- "old:virtual_from_version:42269" => 1009,
- "old:virtual_from_version:46555" => 1070,
- "old:virtual_from_version:47068" => 1136,
- "old:virtual_from_version:46484" => 1172,
- "old:virtual_from_version:45593" => 1110,
- "old:virtual_from_version:49365" => 1584,
- "old:virtual_from_version:50160" => 3214,
- "old:virtual_from_version:49525" => 1404,
- "old:virtual_from_version:47088" => 1048,
- "old:virtual_from_version:46755" => 1077,
- "old:virtual_from_version:39326" => 1067,
- "old:virtual_from_version:45857" => 1109,
- "old:virtual_from_version:49311" => 3162,
- "old:virtual_from_version:50618" => 3259,
- "old:virtual_from_version:46017" => 1006,
- "old:virtual_from_version:40784" => 1067,
- "old:virtual_from_version:44858" => 1070,
- "old:virtual_from_version:45886" => 1125,
- "old:virtual_from_version:40776" => 1077,
- "old:virtual_from_version:46402" => 1672,
- "old:virtual_from_version:45929" => 1009,
- "old:virtual_from_version:42763" => 1110,
- "old:virtual_from_version:42626" => 1051,
- "old:virtual_from_version:45850" => 1125,
- "old:virtual_from_version:50407" => 1583,
- "old:virtual_from_version:50492" => 3258,
- "old:virtual_from_version:39402" => 1168,
- "old:virtual_from_version:50454" => 1314,
- "old:virtual_from_version:40975" => 1009,
- "old:virtual_from_version:45543" => 1613,
- "old:virtual_from_version:43006" => 2031,
- "old:virtual_from_version:47432" => 1580,
- "old:virtual_from_version:42528" => 1037,
- "old:virtual_from_version:44057" => 1081,
- "old:virtual_from_version:49564" => 1070,
- "old:virtual_from_version:46581" => 1070,
- "old:virtual_from_version:49297" => 3152,
- "old:virtual_from_version:47520" => 1009,
- "old:virtual_from_version:44867" => 1107,
- "old:virtual_from_version:42364" => 1077,
- "old:virtual_from_version:44144" => 1070,
- "old:virtual_from_version:44705" => 1070,
- "old:virtual_from_version:49316" => 1077,
- "old:virtual_from_version:47837" => 1583,
- "old:virtual_from_version:44200" => 1037,
- "old:virtual_from_version:46680" => 1125,
- "old:virtual_from_version:50692" => 3259,
- "old:virtual_from_version:49948" => 1689,
- "old:virtual_from_version:45658" => 1172,
- "old:virtual_from_version:38606" => 1108,
- "old:virtual_from_version:45779" => 1574,
- "old:virtual_from_version:40012" => 1069,
- "old:virtual_from_version:50179" => 1025,
- "old:virtual_from_version:44160" => 1009,
- "old:virtual_from_version:44312" => 1077,
- "old:virtual_from_version:47254" => 1172,
- "old:virtual_from_version:47901" => 1689,
- "old:virtual_from_version:49619" => 1696,
- "old:virtual_from_version:38610" => 1104,
- "old:virtual_from_version:42943" => 1070,
- "old:virtual_from_version:50707" => 3259,
- "old:virtual_from_version:44274" => 1037,
- "old:virtual_from_version:46060" => 1077,
- "old:virtual_from_version:42474" => 1172,
- "old:virtual_from_version:47758" => 1125,
- "old:virtual_from_version:44936" => 1009,
- "old:virtual_from_version:40938" => 1070,
- "old:virtual_from_version:44023" => 1070,
- "old:virtual_from_version:47222" => 1107,
- "old:virtual_from_version:47547" => 1109,
- "old:virtual_from_version:50495" => 3259,
- "old:virtual_from_version:50318" => 1070,
- "old:virtual_from_version:47390" => 3008,
- "old:virtual_from_version:49875" => 1107,
- "old:virtual_from_version:45607" => 1025,
- "old:virtual_from_version:44825" => 1009,
- "old:virtual_from_version:45562" => 1025,
- "old:virtual_from_version:39725" => 1062,
- "old:virtual_from_version:42098" => 1070,
- "old:virtual_from_version:39718" => 1222,
- "old:virtual_from_version:49916" => 1444,
- "old:virtual_from_version:42816" => 1077,
- "old:virtual_from_version:47493" => 1077,
- "old:virtual_from_version:46355" => 1057,
- "old:virtual_from_version:44549" => 1070,
- "old:virtual_from_version:45870" => 1070,
- "old:virtual_from_version:46351" => 1077,
- "old:virtual_from_version:45844" => 1077,
- "old:virtual_from_version:47499" => 1109,
- "old:virtual_from_version:50145" => 3210,
- "old:virtual_from_version:40078" => 1110,
- "old:virtual_from_version:47304" => 3042,
- "old:virtual_from_version:45444" => 1136,
- "old:virtual_from_version:45016" => 1000,
- "old:virtual_from_version:42378" => 1404,
- "old:virtual_from_version:40685" => 1067,
- "old:virtual_from_version:46544" => 1689,
- "old:virtual_from_version:44058" => 1125,
- "old:virtual_from_version:45431" => 1025,
- "old:virtual_from_version:50744" => 1417,
- "old:virtual_from_version:49913" => 1070,
- "old:virtual_from_version:45407" => 1404,
- "old:virtual_from_version:42141" => 1110,
- "old:virtual_from_version:50057" => 1125,
- "old:virtual_from_version:50144" => 3058,
- "old:virtual_from_version:46159" => 1404,
- "old:virtual_from_version:40736" => 1077,
- "old:virtual_from_version:47216" => 1077,
- "old:virtual_from_version:50229" => 1007,
- "old:virtual_from_version:42247" => 1404,
- "old:virtual_from_version:49151" => 1172,
- "old:virtual_from_version:43013" => 2038,
- "old:virtual_from_version:40831" => 1407,
- "old:virtual_from_version:39477" => 1404,
- "old:virtual_from_version:45781" => 1136,
- "old:virtual_from_version:42561" => 1077,
- "old:virtual_from_version:40715" => 1070,
- "old:virtual_from_version:47535" => 1070,
- "old:virtual_from_version:49664" => 1583,
- "old:virtual_from_version:46648" => 1125,
- "old:virtual_from_version:50221" => 1314,
- "old:virtual_from_version:42491" => 1009,
- "old:virtual_from_version:46130" => 1077,
- "old:virtual_from_version:45346" => 1413,
- "old:virtual_from_version:49285" => 1009,
- "old:virtual_from_version:45659" => 1136,
- "old:virtual_from_version:45618" => 1136,
- "old:virtual_from_version:45979" => 1613,
- "old:virtual_from_version:47167" => 1077,
- "old:virtual_from_version:46603" => 1172,
- "old:virtual_from_version:49801" => 3131,
- "old:virtual_from_version:49888" => 1035,
- "old:virtual_from_version:40177" => 1006,
- "old:virtual_from_version:47622" => 1070,
- "old:virtual_from_version:50558" => 3265,
- "old:virtual_from_version:46135" => 1404,
- "old:virtual_from_version:46242" => 1172,
- "old:virtual_from_version:49386" => 1659,
- "old:virtual_from_version:47450" => 1109,
- "old:virtual_from_version:45058" => 1049,
- "old:virtual_from_version:47659" => 1125,
- "old:virtual_from_version:49731" => 1070,
- "old:virtual_from_version:44962" => 1000,
- "old:virtual_from_version:47540" => 1070,
- "old:virtual_from_version:42765" => 1484,
- "old:virtual_from_version:44197" => 1009,
- "old:virtual_from_version:45150" => 1009,
- "old:virtual_from_version:42348" => 1070,
- "old:virtual_from_version:47158" => 1584,
- "old:virtual_from_version:47518" => 1037,
- "old:virtual_from_version:49014" => 3129,
- "old:virtual_from_version:45357" => 1031,
- "old:virtual_from_version:42950" => 1009,
- "old:virtual_from_version:42812" => 1107,
- "old:virtual_from_version:49342" => 1125,
- "old:virtual_from_version:45537" => 1070,
- "old:virtual_from_version:39528" => 1107,
- "old:virtual_from_version:50412" => 3201,
- "old:virtual_from_version:45749" => 1077,
- "old:virtual_from_version:44960" => 1016,
- "old:virtual_from_version:45222" => 1576,
- "old:virtual_from_version:49688" => 1381,
- "old:virtual_from_version:49522" => 1488,
- "old:virtual_from_version:47007" => 1077,
- "old:virtual_from_version:44405" => 1069,
- "old:virtual_from_version:40968" => 1070,
- "old:virtual_from_version:42500" => 1107,
- "old:virtual_from_version:47970" => 1109,
- "old:virtual_from_version:46400" => 1402,
- "old:virtual_from_version:46440" => 1070,
- "old:virtual_from_version:45761" => 1362,
- "old:virtual_from_version:44300" => 1037,
- "old:virtual_from_version:50404" => 3214,
- "old:virtual_from_version:42052" => 1037,
- "old:virtual_from_version:49412" => 3008,
- "old:virtual_from_version:42140" => 1037,
- "old:virtual_from_version:50502" => 1035,
- "old:virtual_from_version:46164" => 1077,
- "old:virtual_from_version:47618" => 1583,
- "old:virtual_from_version:42966" => 1016,
- "old:virtual_from_version:47956" => 1077,
- "old:virtual_from_version:50510" => 3261,
- "old:virtual_from_version:47702" => 1109,
- "old:virtual_from_version:44695" => 1070,
- "old:virtual_from_version:49118" => 1048,
- "old:virtual_from_version:47755" => 3092,
- "old:virtual_from_version:40436" => 1057,
- "old:virtual_from_version:47786" => 1125,
- "old:virtual_from_version:50053" => 1314,
- "old:virtual_from_version:47748" => 1070,
- "old:virtual_from_version:45374" => 1107,
- "old:virtual_from_version:45702" => 1077,
- "old:virtual_from_version:44747" => 1009,
- "old:virtual_from_version:47531" => 3058,
- "old:virtual_from_version:47591" => 1109,
- "old:virtual_from_version:39215" => 1058,
- "old:virtual_from_version:47757" => 1070,
- "old:virtual_from_version:42366" => 1311,
- "old:virtual_from_version:44390" => 1048,
- "old:virtual_from_version:47335" => 3043,
- "old:virtual_from_version:46193" => 1077,
- "old:virtual_from_version:50312" => 3131,
- "old:virtual_from_version:40620" => 1025,
- "old:virtual_from_version:46322" => 1402,
- "old:virtual_from_version:42375" => 1070,
- "old:virtual_from_version:47895" => 1070,
- "old:virtual_from_version:45615" => 1009,
- "old:virtual_from_version:50673" => 3208,
- "old:virtual_from_version:42711" => 1037,
- "old:virtual_from_version:49087" => 3030,
- "old:virtual_from_version:38858" => 1070,
- "old:virtual_from_version:44957" => 1057,
- "old:virtual_from_version:45933" => 1070,
- "old:virtual_from_version:47614" => 1069,
- "old:virtual_from_version:42082" => 1077,
- "old:virtual_from_version:45448" => 1109,
- "old:virtual_from_version:39583" => 1031,
- "old:virtual_from_version:46741" => 1689,
- "old:virtual_from_version:50189" => 3025,
- "old:virtual_from_version:47691" => 1109,
- "old:virtual_from_version:49415" => 1532,
- "old:virtual_from_version:46443" => 1051,
- "old:virtual_from_version:42217" => 1000,
- "old:virtual_from_version:42471" => 1112,
- "old:virtual_from_version:47617" => 1565,
- "old:virtual_from_version:40953" => 1077,
- "old:virtual_from_version:45255" => 1051,
- "old:virtual_from_version:50689" => 1404,
- "old:virtual_from_version:40129" => 1125,
- "old:virtual_from_version:49741" => 1070,
- "old:virtual_from_version:42335" => 1077,
- "old:virtual_from_version:39990" => 1260,
- "old:virtual_from_version:49356" => 3167,
- "old:virtual_from_version:40871" => 1009,
- "old:virtual_from_version:42678" => 1048,
- "old:virtual_from_version:49663" => 1150,
- "old:virtual_from_version:44953" => 1025,
- "old:virtual_from_version:46145" => 1009,
- "old:virtual_from_version:45809" => 1404,
- "old:virtual_from_version:50423" => 1689,
- "old:virtual_from_version:47880" => 1585,
- "old:virtual_from_version:47233" => 1077,
- "old:virtual_from_version:47377" => 1109,
- "old:virtual_from_version:44340" => 1025,
- "old:virtual_from_version:46076" => 1404,
- "old:virtual_from_version:48021" => 2121,
- "old:virtual_from_version:39126" => 1070,
- "old:virtual_from_version:44593" => 1070,
- "old:virtual_from_version:50764" => 3259,
- "old:virtual_from_version:43008" => 2033,
- "old:virtual_from_version:50736" => 1489,
- "old:virtual_from_version:44763" => 1070,
- "old:virtual_from_version:44213" => 1077,
- "old:virtual_from_version:42919" => 1062,
- "old:virtual_from_version:45892" => 1109,
- "old:virtual_from_version:46505" => 1084,
- "old:virtual_from_version:49915" => 1107,
- "old:virtual_from_version:42614" => 1025,
- "old:virtual_from_version:47886" => 1108,
- "old:virtual_from_version:49590" => 1404,
- "old:virtual_from_version:45652" => 1107,
- "old:virtual_from_version:44975" => 1023,
- "old:virtual_from_version:44715" => 1067,
- "old:virtual_from_version:50748" => 3206,
- "old:virtual_from_version:42487" => 1037,
- "old:virtual_from_version:50646" => 1108,
- "old:virtual_from_version:42760" => 1009,
- "old:virtual_from_version:44288" => 1077,
- "old:virtual_from_version:44243" => 1110,
- "old:virtual_from_version:47877" => 1314,
- "old:virtual_from_version:49843" => 3131,
- "old:virtual_from_version:38797" => 1125,
- "old:virtual_from_version:49165" => 1070,
- "old:virtual_from_version:42521" => 1037,
- "old:virtual_from_version:42882" => 1077,
- "old:virtual_from_version:45620" => 1067,
- "old:virtual_from_version:46652" => 1025,
- "old:virtual_from_version:42601" => 1077,
- "old:virtual_from_version:42971" => 1063,
- "old:virtual_from_version:46920" => 1077,
- "old:virtual_from_version:47360" => 1037,
- "old:virtual_from_version:47006" => 1172,
- "old:virtual_from_version:47228" => 1172,
- "old:virtual_from_version:44339" => 1009,
- "old:virtual_from_version:42660" => 1037,
- "old:virtual_from_version:46379" => 1070,
- "old:virtual_from_version:47384" => 1077,
- "old:virtual_from_version:49919" => 3206,
- "old:virtual_from_version:42103" => 1037,
- "old:virtual_from_version:50141" => 1580,
- "old:virtual_from_version:50743" => 1105,
- "old:virtual_from_version:45765" => 1048,
- "old:virtual_from_version:49426" => 3002,
- "old:virtual_from_version:44496" => 1037,
- "old:virtual_from_version:49405" => 1689,
- "old:virtual_from_version:49894" => 1070,
- "old:virtual_from_version:45678" => 1009,
- "old:virtual_from_version:42332" => 1070,
- "old:virtual_from_version:50405" => 3227,
- "old:virtual_from_version:46935" => 1585,
- "old:virtual_from_version:42095" => 1077,
- "old:virtual_from_version:39424" => 1172,
- "old:virtual_from_version:39944" => 1037,
- "old:virtual_from_version:47761" => 1077,
- "old:virtual_from_version:42825" => 1172,
- "old:virtual_from_version:45848" => 1627,
- "old:virtual_from_version:38621" => 1081,
- "old:virtual_from_version:45852" => 1009,
- "old:virtual_from_version:44883" => 1172,
- "old:virtual_from_version:42022" => 1009,
- "old:virtual_from_version:40899" => 1025,
- "old:virtual_from_version:47561" => 1109,
- "old:virtual_from_version:42685" => 1491,
- "old:virtual_from_version:46345" => 1172,
- "old:virtual_from_version:46210" => 1555,
- "old:virtual_from_version:45487" => 1070,
- "old:virtual_from_version:49196" => 1077,
- "old:virtual_from_version:46640" => 1125,
- "old:virtual_from_version:50699" => 1689,
- "old:virtual_from_version:44603" => 1007,
- "old:virtual_from_version:43061" => 2062,
- "old:virtual_from_version:46839" => 1105,
- "old:virtual_from_version:44913" => 1009,
- "old:virtual_from_version:50693" => 3271,
- "old:virtual_from_version:39753" => 1067,
- "old:virtual_from_version:50124" => 1070,
- "old:virtual_from_version:46557" => 1009,
- "old:virtual_from_version:42708" => 1070,
- "old:virtual_from_version:45540" => 1077,
- "old:virtual_from_version:50705" => 1417,
- "old:virtual_from_version:42494" => 1077,
- "old:virtual_from_version:46018" => 1077,
- "old:virtual_from_version:46359" => 1077,
- "old:virtual_from_version:44436" => 1037,
- "old:virtual_from_version:44265" => 1037,
- "old:virtual_from_version:49008" => 1070,
- "old:virtual_from_version:50769" => 1070,
- "old:virtual_from_version:46620" => 1404,
- "old:virtual_from_version:38677" => 1009,
- "old:virtual_from_version:47664" => 1109,
- "old:virtual_from_version:43011" => 2036,
- "old:virtual_from_version:47176" => 1638,
- "old:virtual_from_version:45647" => 1076,
- "old:virtual_from_version:47309" => 1070,
- "old:virtual_from_version:44241" => 1077,
- "old:virtual_from_version:49465" => 1067,
- "old:virtual_from_version:44387" => 1094,
- "old:virtual_from_version:44729" => 1541,
- "old:virtual_from_version:46563" => 1172,
- "old:virtual_from_version:50359" => 1689,
- "old:virtual_from_version:47573" => 1580,
- "old:virtual_from_version:44748" => 1077,
- "old:virtual_from_version:50542" => 1583,
- "old:virtual_from_version:44086" => 1070,
- "old:virtual_from_version:38873" => 1135,
- "old:virtual_from_version:46887" => 1077,
- "old:virtual_from_version:50489" => 1491,
- "old:virtual_from_version:50611" => 1417,
- "old:virtual_from_version:32145" => 1099,
- "old:virtual_from_version:46408" => 1402,
- "old:virtual_from_version:44635" => 1037,
- "old:virtual_from_version:47889" => 1125,
- "old:virtual_from_version:42569" => 1037,
- "old:virtual_from_version:46133" => 1067,
- "old:virtual_from_version:42273" => 1037,
- "old:virtual_from_version:50430" => 1659,
- "old:virtual_from_version:50039" => 3131,
- "old:virtual_from_version:45229" => 1461,
- "old:virtual_from_version:43048" => 2021,
- "old:virtual_from_version:50497" => 3251,
- "old:virtual_from_version:42540" => 1037,
- "old:virtual_from_version:49552" => 1007,
- "old:virtual_from_version:45743" => 1532,
- "old:virtual_from_version:44269" => 1125,
- "old:virtual_from_version:39977" => 1104,
- "old:virtual_from_version:46955" => 3012,
- "old:virtual_from_version:47374" => 3008,
- "old:virtual_from_version:42441" => 1070,
- "old:virtual_from_version:47642" => 1077,
- "old:virtual_from_version:45513" => 1025,
- "old:virtual_from_version:44545" => 1070,
- "old:virtual_from_version:40723" => 1077,
- "old:virtual_from_version:47072" => 1689,
- "old:virtual_from_version:47413" => 1125,
- "old:virtual_from_version:47990" => 3016,
- "old:virtual_from_version:49953" => 3131,
- "old:virtual_from_version:42726" => 1083,
- "old:virtual_from_version:50437" => 1257,
- "old:virtual_from_version:50092" => 1172,
- "old:virtual_from_version:40790" => 1077,
- "old:virtual_from_version:42152" => 1077,
- "old:virtual_from_version:46682" => 1070,
- "old:virtual_from_version:49128" => 1584,
- "old:virtual_from_version:45278" => 1008,
- "old:virtual_from_version:49247" => 1404,
- "old:virtual_from_version:45361" => 1584,
- "old:virtual_from_version:44253" => 1081,
- "old:virtual_from_version:44455" => 1136,
- "old:virtual_from_version:42044" => 1009,
- "old:virtual_from_version:47128" => 1621,
- "old:virtual_from_version:48012" => 2112,
- "old:virtual_from_version:49111" => 1136,
- "old:virtual_from_version:45742" => 1125,
- "old:virtual_from_version:47955" => 1112,
- "old:virtual_from_version:42363" => 1025,
- "old:virtual_from_version:50201" => 1069,
- "old:virtual_from_version:47021" => 1532,
- "old:virtual_from_version:46518" => 1067,
- "old:virtual_from_version:40043" => 1094,
- "old:virtual_from_version:49737" => 1128,
- "old:virtual_from_version:44752" => 1006,
- "old:virtual_from_version:39778" => 1000,
- "old:virtual_from_version:43108" => 2100,
- "old:virtual_from_version:46368" => 1555,
- "old:virtual_from_version:42675" => 1077,
- "old:virtual_from_version:50076" => 3131,
- "old:virtual_from_version:44906" => 1321,
- "old:virtual_from_version:47070" => 1172,
- "old:virtual_from_version:50719" => 3259,
- "old:virtual_from_version:49628" => 3184,
- "old:virtual_from_version:46031" => 1070,
- "old:virtual_from_version:49308" => 1025,
- "old:virtual_from_version:46125" => 1070,
- "old:virtual_from_version:42289" => 1015,
- "old:virtual_from_version:40378" => 1107,
- "old:virtual_from_version:45135" => 1009,
- "old:virtual_from_version:50330" => 3238,
- "old:virtual_from_version:47688" => 1621,
- "old:virtual_from_version:42488" => 1136,
- "old:virtual_from_version:45471" => 1031,
- "old:virtual_from_version:44778" => 1076,
- "old:virtual_from_version:45566" => 1532,
- "old:virtual_from_version:50171" => 1314,
- "old:virtual_from_version:46346" => 1077,
- "old:virtual_from_version:42666" => 1488,
- "old:virtual_from_version:42842" => 1077,
- "old:virtual_from_version:44380" => 1023,
- "old:virtual_from_version:45356" => 1012,
- "old:virtual_from_version:40814" => 1070,
- "old:virtual_from_version:40214" => 1109,
- "old:virtual_from_version:42782" => 1070,
- "old:virtual_from_version:44710" => 1107,
- "old:virtual_from_version:42572" => 1070,
- "old:virtual_from_version:45293" => 1580,
- "old:virtual_from_version:47365" => 1444,
- "old:virtual_from_version:50088" => 3131,
- "old:virtual_from_version:14174" => 1059,
- "old:virtual_from_version:49432" => 3008,
- "old:virtual_from_version:47203" => 1123,
- "old:virtual_from_version:46856" => 3003,
- "old:virtual_from_version:47876" => 1109,
- "old:virtual_from_version:40771" => 1077,
- "old:virtual_from_version:47497" => 1070,
- "old:virtual_from_version:49194" => 1649,
- "old:virtual_from_version:42342" => 1009,
- "old:virtual_from_version:45322" => 1586,
- "old:virtual_from_version:39174" => 1404,
- "old:virtual_from_version:47388" => 1037,
- "old:virtual_from_version:46959" => 1105,
- "old:virtual_from_version:50130" => 1070,
- "old:virtual_from_version:48015" => 2115,
- "old:virtual_from_version:38634" => 1000,
- "old:virtual_from_version:40413" => 1070,
- "old:virtual_from_version:45141" => 1321,
- "old:virtual_from_version:50025" => 1070,
- "old:virtual_from_version:42121" => 1037,
- "old:virtual_from_version:42498" => 1057,
- "old:virtual_from_version:44115" => 1107,
- "old:virtual_from_version:47548" => 1077,
- "old:virtual_from_version:42409" => 1172,
- "old:virtual_from_version:47040" => 1077,
- "old:virtual_from_version:46514" => 1007,
- "old:virtual_from_version:45140" => 1110,
- "old:virtual_from_version:50361" => 1125,
- "old:virtual_from_version:40980" => 1125,
- "old:virtual_from_version:47381" => 1070,
- "old:virtual_from_version:45283" => 1006,
- "old:virtual_from_version:38756" => 1007,
- "old:virtual_from_version:42761" => 1077,
- "old:virtual_from_version:42846" => 1081,
- "old:virtual_from_version:50358" => 1150,
- "old:virtual_from_version:50522" => 1033,
- "old:virtual_from_version:49454" => 1689,
- "old:virtual_from_version:45846" => 1498,
- "old:virtual_from_version:46794" => 1070,
- "old:virtual_from_version:46263" => 1537,
- "old:virtual_from_version:49016" => 1009,
- "old:virtual_from_version:46898" => 2100,
- "old:virtual_from_version:47794" => 3104,
- "old:virtual_from_version:44410" => 1017,
- "old:virtual_from_version:46156" => 1077,
- "old:virtual_from_version:40996" => 1077,
- "old:virtual_from_version:47215" => 1009,
- "old:virtual_from_version:49421" => 1070,
- "old:virtual_from_version:44999" => 1105,
- "old:virtual_from_version:50247" => 1070,
- "old:virtual_from_version:47015" => 1125,
- "old:virtual_from_version:45721" => 1362,
- "old:virtual_from_version:49557" => 1067,
- "old:virtual_from_version:49951" => 1070,
- "old:virtual_from_version:45696" => 1019,
- "old:virtual_from_version:49520" => 1574,
- "old:virtual_from_version:50556" => 1689,
- "old:virtual_from_version:42305" => 1077,
- "old:virtual_from_version:46619" => 1077,
- "old:virtual_from_version:44806" => 1070,
- "old:virtual_from_version:50725" => 3259,
- "old:virtual_from_version:47350" => 1077,
- "old:virtual_from_version:42600" => 1009,
- "old:virtual_from_version:38611" => 1122,
- "old:virtual_from_version:44859" => 1077,
- "old:virtual_from_version:40815" => 1009,
- "old:virtual_from_version:50304" => 3131,
- "old:virtual_from_version:39906" => 1404,
- "old:virtual_from_version:42399" => 1067,
- "old:virtual_from_version:39503" => 1183,
- "old:virtual_from_version:50399" => 1689,
- "old:virtual_from_version:40557" => 1070,
- "old:virtual_from_version:50320" => 1067,
- "old:virtual_from_version:46538" => 1077,
- "old:virtual_from_version:43059" => 2059,
- "old:virtual_from_version:42929" => 1037,
- "old:virtual_from_version:48020" => 2120,
- "old:virtual_from_version:39521" => 1104,
- "old:virtual_from_version:50380" => 3131,
- "old:virtual_from_version:50170" => 3226,
- "old:virtual_from_version:45751" => 1532,
- "old:virtual_from_version:50043" => 1012,
- "old:virtual_from_version:45927" => 1633,
- "old:virtual_from_version:49441" => 1404,
- "old:virtual_from_version:46067" => 1077,
- "old:virtual_from_version:50419" => 1136,
- "old:virtual_from_version:42679" => 1070,
- "old:virtual_from_version:40810" => 1125,
- "old:virtual_from_version:49279" => 1077,
- "old:virtual_from_version:42251" => 1025,
- "old:virtual_from_version:50390" => 1125,
- "old:virtual_from_version:46940" => 1070,
- "old:virtual_from_version:44417" => 1027,
- "old:virtual_from_version:44447" => 1037,
- "old:virtual_from_version:39241" => 1109,
- "old:virtual_from_version:39524" => 1025,
- "old:virtual_from_version:49494" => 1404,
- "old:virtual_from_version:47853" => 1585,
- "old:virtual_from_version:47347" => 1125,
- "old:virtual_from_version:49521" => 1580,
- "old:virtual_from_version:50537" => 1381,
- "old:virtual_from_version:47788" => 1077,
- "old:virtual_from_version:42068" => 1077,
- "old:virtual_from_version:40484" => 1370,
- "old:virtual_from_version:46014" => 1105,
- "old:virtual_from_version:49771" => 3131,
- "old:virtual_from_version:42809" => 1037,
- "old:virtual_from_version:42728" => 1237,
- "old:virtual_from_version:44408" => 1016,
- "old:virtual_from_version:40748" => 1025,
- "old:virtual_from_version:43082" => 2079,
- "old:virtual_from_version:40716" => 1077,
- "old:virtual_from_version:42097" => 1110,
- "old:virtual_from_version:45817" => 1019,
- "old:virtual_from_version:45338" => 1125,
- "old:virtual_from_version:46768" => 1517,
- "old:virtual_from_version:44542" => 1077,
- "old:virtual_from_version:47327" => 1125,
- "old:virtual_from_version:44589" => 1077,
- "old:virtual_from_version:40402" => 1352,
- "old:virtual_from_version:42119" => 1070,
- "old:virtual_from_version:49448" => 1689,
- "old:virtual_from_version:49216" => 1190,
- "old:virtual_from_version:46434" => 1077,
- "old:virtual_from_version:45654" => 1009,
- "old:virtual_from_version:50376" => 1070,
- "old:virtual_from_version:47775" => 1689,
- "old:virtual_from_version:49444" => 1070,
- "old:virtual_from_version:44951" => 1070,
- "old:virtual_from_version:50727" => 1070,
- "old:virtual_from_version:40927" => 1070,
- "old:virtual_from_version:40666" => 1012,
- "old:virtual_from_version:50119" => 1112,
- "old:virtual_from_version:42800" => 1498,
- "old:virtual_from_version:44510" => 1532,
- "old:virtual_from_version:44611" => 1125,
- "old:virtual_from_version:44893" => 1048,
- "old:virtual_from_version:46993" => 1077,
- "old:virtual_from_version:46608" => 1070,
- "old:virtual_from_version:45968" => 1070,
- "old:virtual_from_version:47840" => 1689,
- "old:virtual_from_version:46611" => 1012,
- "old:virtual_from_version:42585" => 1009,
- "old:virtual_from_version:44264" => 1077,
- "old:virtual_from_version:46008" => 1125,
- "old:virtual_from_version:46059" => 1070,
- "old:virtual_from_version:42393" => 1037,
- "old:virtual_from_version:40997" => 1037,
- "old:virtual_from_version:44707" => 1037,
- "old:virtual_from_version:45312" => 1584,
- "old:virtual_from_version:47369" => 1109,
- "old:virtual_from_version:46995" => 3008,
- "old:virtual_from_version:50745" => 1689,
- "old:virtual_from_version:50213" => 1070,
- "old:virtual_from_version:49634" => 1532,
- "old:virtual_from_version:42774" => 1110,
- "old:virtual_from_version:47415" => 1105,
- "old:virtual_from_version:42260" => 1000,
- "old:virtual_from_version:46341" => 1671,
- "old:virtual_from_version:47112" => 3019,
- "old:virtual_from_version:42069" => 1037,
- "old:virtual_from_version:47389" => 1037,
- "old:virtual_from_version:40700" => 1025,
- "old:virtual_from_version:49296" => 1580,
- "old:virtual_from_version:49789" => 1070,
- "old:virtual_from_version:42793" => 1009,
- "old:virtual_from_version:50259" => 1689,
- "old:virtual_from_version:49434" => 1070,
- "old:virtual_from_version:45785" => 1048,
- "old:virtual_from_version:44485" => 1107,
- "old:virtual_from_version:49673" => 1136,
- "old:virtual_from_version:47421" => 1109,
- "old:virtual_from_version:40918" => 1070,
- "old:virtual_from_version:45284" => 1077,
- "old:virtual_from_version:42860" => 1498,
- "old:virtual_from_version:49822" => 1565,
- "old:virtual_from_version:46463" => 1172,
- "old:virtual_from_version:50710" => 1070,
- "old:virtual_from_version:49052" => 3094,
- "old:virtual_from_version:49870" => 1689,
- "old:virtual_from_version:42046" => 1037,
- "old:virtual_from_version:44519" => 1112,
- "old:virtual_from_version:50028" => 1032,
- "old:virtual_from_version:43096" => 2088,
- "old:virtual_from_version:18960" => 1041,
- "old:virtual_from_version:44157" => 1125,
- "old:virtual_from_version:47352" => 1070,
- "old:virtual_from_version:42822" => 1025,
- "old:virtual_from_version:44762" => 1062,
- "old:virtual_from_version:45362" => 1585,
- "old:virtual_from_version:42199" => 1070,
- "old:virtual_from_version:42778" => 1009,
- "old:virtual_from_version:47110" => 1640,
- "old:virtual_from_version:46533" => 1077,
- "old:virtual_from_version:42045" => 1077,
- "old:virtual_from_version:49224" => 1070,
- "old:virtual_from_version:40909" => 1077,
- "old:virtual_from_version:40964" => 1037,
- "old:virtual_from_version:40662" => 1070,
- "old:virtual_from_version:40665" => 1009,
- "old:virtual_from_version:49848" => 1537,
- "old:virtual_from_version:47105" => 1583,
- "old:virtual_from_version:42163" => 1172,
- "old:virtual_from_version:49713" => 1404,
- "old:virtual_from_version:45511" => 1105,
- "old:virtual_from_version:50485" => 3189,
- "old:virtual_from_version:45956" => 1077,
- "old:virtual_from_version:49671" => 3155,
- "old:virtual_from_version:46441" => 1077,
- "old:virtual_from_version:39907" => 1222,
- "old:virtual_from_version:47224" => 1077,
- "old:virtual_from_version:46706" => 1697,
- "old:virtual_from_version:44070" => 1037,
- "old:virtual_from_version:45385" => 1125,
- "old:virtual_from_version:35826" => 1000,
- "old:virtual_from_version:44077" => 1077,
- "old:virtual_from_version:47669" => 1112,
- "old:virtual_from_version:39895" => 1007,
- "old:virtual_from_version:45583" => 1615,
- "old:virtual_from_version:44469" => 1077,
- "old:virtual_from_version:50661" => 1110,
- "old:virtual_from_version:50303" => 3131,
- "old:virtual_from_version:49697" => 1640,
- "old:virtual_from_version:40974" => 1007,
- "old:virtual_from_version:42057" => 1077,
- "old:virtual_from_version:45724" => 1009,
- "old:virtual_from_version:46306" => 1125,
- "old:virtual_from_version:46968" => 3013,
- "old:virtual_from_version:50375" => 1007,
- "old:virtual_from_version:50181" => 3131,
- "old:virtual_from_version:50448" => 1070,
- "old:virtual_from_version:42802" => 1172,
- "old:virtual_from_version:47975" => 1649,
- "old:virtual_from_version:46506" => 1112,
- "old:virtual_from_version:47181" => 1125,
- "old:virtual_from_version:46644" => 1077,
- "old:virtual_from_version:49669" => 1404,
- "old:virtual_from_version:39222" => 1110,
- "old:virtual_from_version:44680" => 1070,
- "old:virtual_from_version:47744" => 1077,
- "old:virtual_from_version:46671" => 1070,
- "old:virtual_from_version:40869" => 1222,
- "old:virtual_from_version:44470" => 1037,
- "old:virtual_from_version:46430" => 1587,
- "old:virtual_from_version:49491" => 1659,
- "old:virtual_from_version:42957" => 1070,
- "old:virtual_from_version:46765" => 1136,
- "old:virtual_from_version:44935" => 1078,
- "old:virtual_from_version:40775" => 1070,
- "old:virtual_from_version:47629" => 1070,
- "old:virtual_from_version:38758" => 1125,
- "old:virtual_from_version:45773" => 1067,
- "old:virtual_from_version:45424" => 1007,
- "old:virtual_from_version:42889" => 1067,
- "old:virtual_from_version:44681" => 1009,
- "old:virtual_from_version:44127" => 1077,
- "old:virtual_from_version:44699" => 1037,
- "old:virtual_from_version:46178" => 1125,
- "old:virtual_from_version:42258" => 1077,
- "old:virtual_from_version:44831" => 1024,
- "old:virtual_from_version:46517" => 1109,
- "old:virtual_from_version:44529" => 1037,
- "old:virtual_from_version:47185" => 1404,
- "old:virtual_from_version:42677" => 1109,
- "old:virtual_from_version:45661" => 1070,
- "old:virtual_from_version:44560" => 1070,
- "old:virtual_from_version:40951" => 1070,
- "old:virtual_from_version:45113" => 1517,
- "old:virtual_from_version:45008" => 1413,
- "old:virtual_from_version:49359" => 1125,
- "old:virtual_from_version:44703" => 1539,
- "old:virtual_from_version:42643" => 1037,
- "old:virtual_from_version:47340" => 1037,
- "old:virtual_from_version:42133" => 1077,
- "old:virtual_from_version:47166" => 1001,
- "old:virtual_from_version:45528" => 1136,
- "old:virtual_from_version:45249" => 1064,
- "old:virtual_from_version:50549" => 3259,
- "old:virtual_from_version:43042" => 2054,
- "old:virtual_from_version:44064" => 1070,
- "old:virtual_from_version:45560" => 1109,
- "old:virtual_from_version:42353" => 1037,
- "old:virtual_from_version:38361" => 1109,
- "old:virtual_from_version:46387" => 1070,
- "old:virtual_from_version:42135" => 1110,
- "old:virtual_from_version:42244" => 1009,
- "old:virtual_from_version:49866" => 3002,
- "old:virtual_from_version:42334" => 1025,
- "old:virtual_from_version:42654" => 1077,
- "old:virtual_from_version:44081" => 1107,
- "old:virtual_from_version:40577" => 1077,
- "old:virtual_from_version:46760" => 1689,
- "old:virtual_from_version:42444" => 1037,
- "old:virtual_from_version:40661" => 1107,
- "old:virtual_from_version:46105" => 1077,
- "old:virtual_from_version:46911" => 1397,
- "old:virtual_from_version:45894" => 1077,
- "old:virtual_from_version:42450" => 1037,
- "old:virtual_from_version:49533" => 1532,
- "old:virtual_from_version:45397" => 1404,
- "old:virtual_from_version:40414" => 1009,
- "old:virtual_from_version:50605" => 3259,
- "old:virtual_from_version:46811" => 1077,
- "old:virtual_from_version:50147" => 1032,
- "old:virtual_from_version:50265" => 1070,
- "old:virtual_from_version:49383" => 1077,
- "old:virtual_from_version:45262" => 1022,
- "old:virtual_from_version:47981" => 1574,
- "old:virtual_from_version:49423" => 1070,
- "old:virtual_from_version:50768" => 1353,
- "old:virtual_from_version:46674" => 1070,
- "old:virtual_from_version:44495" => 1077,
- "old:virtual_from_version:47964" => 1689,
- "old:virtual_from_version:49264" => 1689,
- "old:virtual_from_version:50540" => 1489,
- "old:virtual_from_version:42311" => 1000,
- "old:virtual_from_version:49075" => 3094,
- "old:virtual_from_version:49377" => 1070,
- "old:virtual_from_version:47507" => 1005,
- "old:virtual_from_version:47419" => 1007,
- "old:virtual_from_version:42128" => 1110,
- "old:virtual_from_version:45358" => 1404,
- "old:virtual_from_version:50338" => 3214,
- "old:virtual_from_version:43003" => 2028,
- "old:virtual_from_version:42190" => 1009,
- "old:virtual_from_version:42205" => 1077,
- "old:virtual_from_version:45667" => 1025,
- "old:virtual_from_version:38828" => 1134,
- "old:virtual_from_version:50491" => 3221,
- "old:virtual_from_version:42027" => 1077,
- "old:virtual_from_version:50285" => 1125,
- "old:virtual_from_version:49110" => 1649,
- "old:virtual_from_version:44271" => 1009,
- "old:virtual_from_version:50109" => 3221,
- "old:virtual_from_version:45074" => 1349,
- "old:virtual_from_version:42109" => 1077,
- "old:virtual_from_version:40383" => 1025,
- "old:virtual_from_version:44063" => 1037,
- "old:virtual_from_version:50574" => 1070,
- "old:virtual_from_version:44718" => 1009,
- "old:virtual_from_version:38562" => 1109,
- "old:virtual_from_version:42223" => 1107,
- "old:virtual_from_version:40971" => 1414,
- "old:virtual_from_version:49389" => 1172,
- "old:virtual_from_version:44812" => 1005,
- "old:virtual_from_version:46904" => 3006,
- "old:virtual_from_version:49300" => 1070,
- "old:virtual_from_version:45235" => 1578,
- "old:virtual_from_version:42612" => 1070,
- "old:virtual_from_version:30081" => 1094,
- "old:virtual_from_version:42224" => 1070,
- "old:virtual_from_version:49630" => 1158,
- "old:virtual_from_version:46933" => 1583,
- "old:virtual_from_version:45924" => 1009,
- "old:virtual_from_version:40949" => 1172,
- "old:virtual_from_version:49807" => 3198,
- "old:virtual_from_version:47023" => 1689,
- "old:virtual_from_version:42113" => 1037,
- "old:virtual_from_version:45898" => 1070,
- "old:virtual_from_version:46052" => 1006,
- "old:virtual_from_version:44743" => 1224,
- "old:virtual_from_version:42400" => 1070,
- "old:virtual_from_version:49922" => 3208,
- "old:virtual_from_version:50506" => 3259,
- "old:virtual_from_version:40628" => 1077,
- "old:virtual_from_version:41016" => 2025,
- "old:virtual_from_version:44758" => 1070,
- "old:virtual_from_version:42565" => 1070,
- "old:virtual_from_version:42265" => 1077,
- "old:virtual_from_version:42542" => 1077,
- "old:virtual_from_version:50416" => 1314,
- "old:virtual_from_version:47924" => 1689,
- "old:virtual_from_version:47408" => 1077,
- "old:virtual_from_version:50548" => 3236,
- "old:virtual_from_version:40850" => 1070,
- "old:virtual_from_version:40302" => 1062,
- "old:virtual_from_version:45524" => 1070,
- "old:virtual_from_version:49335" => 1077,
- "old:virtual_from_version:44006" => 1490,
- "old:virtual_from_version:50517" => 3263,
- "old:virtual_from_version:50450" => 1112,
- "old:virtual_from_version:46246" => 1070,
- "old:virtual_from_version:49927" => 3209,
- "old:virtual_from_version:45060" => 1095,
- "old:virtual_from_version:45412" => 1136,
- "old:virtual_from_version:42970" => 1070,
- "old:virtual_from_version:42325" => 1070,
- "old:virtual_from_version:42495" => 1037,
- "old:virtual_from_version:42753" => 1025,
- "old:virtual_from_version:42918" => 1037,
- "old:virtual_from_version:45564" => 1077,
- "old:virtual_from_version:45639" => 1172,
- "old:virtual_from_version:40779" => 1070,
- "old:virtual_from_version:47101" => 1352,
- "old:virtual_from_version:49017" => 1077,
- "old:virtual_from_version:49881" => 1125,
- "old:virtual_from_version:46490" => 1006,
- "old:virtual_from_version:44438" => 1110,
- "old:virtual_from_version:42769" => 1007,
- "old:virtual_from_version:45155" => 1136,
- "old:virtual_from_version:47212" => 1125,
- "old:virtual_from_version:42264" => 1070,
- "old:virtual_from_version:49865" => 1689,
- "old:virtual_from_version:46460" => 1659,
- "old:virtual_from_version:46070" => 1007,
- "old:virtual_from_version:50276" => 3218,
- "old:virtual_from_version:44902" => 1009,
- "old:virtual_from_version:45529" => 1070,
- "old:virtual_from_version:42854" => 1172,
- "old:virtual_from_version:47199" => 1109,
- "old:virtual_from_version:40242" => 1081,
- "old:virtual_from_version:45106" => 1125,
- "old:virtual_from_version:46280" => 1070,
- "old:virtual_from_version:42549" => 1077,
- "old:virtual_from_version:49839" => 1006,
- "old:virtual_from_version:49188" => 1077,
- "old:virtual_from_version:38680" => 1077,
- "old:virtual_from_version:45646" => 1404,
- "old:virtual_from_version:49029" => 1649,
- "old:virtual_from_version:40819" => 1000,
- "old:virtual_from_version:49306" => 1585,
- "old:virtual_from_version:38783" => 1069,
- "old:virtual_from_version:42403" => 1404,
- "old:virtual_from_version:47218" => 3016,
- "old:virtual_from_version:44233" => 1077,
- "old:virtual_from_version:49101" => 3146,
- "old:virtual_from_version:42556" => 1077,
- "old:virtual_from_version:46129" => 1070,
- "old:virtual_from_version:50236" => 3131,
- "old:virtual_from_version:45833" => 1404,
- "old:virtual_from_version:50126" => 1172,
- "old:virtual_from_version:44904" => 1110,
- "old:virtual_from_version:46721" => 1125,
- "old:virtual_from_version:42704" => 1067,
- "old:virtual_from_version:46146" => 1077,
- "old:virtual_from_version:49944" => 1314,
- "old:virtual_from_version:45780" => 1062,
- "old:virtual_from_version:49477" => 1314,
- "old:virtual_from_version:49361" => 1404,
- "old:virtual_from_version:49831" => 1404,
- "old:virtual_from_version:49198" => 1689,
- "old:virtual_from_version:40485" => 1070,
- "old:virtual_from_version:45023" => 1091,
- "old:virtual_from_version:38912" => 1083,
- "old:virtual_from_version:42595" => 1109,
- "old:virtual_from_version:49343" => 1107,
- "old:virtual_from_version:47947" => 1077,
- "old:virtual_from_version:45138" => 1550,
- "old:virtual_from_version:49489" => 1107,
- "old:virtual_from_version:47737" => 1077,
- "old:virtual_from_version:45531" => 1077,
- "old:virtual_from_version:47967" => 1070,
- "old:virtual_from_version:42695" => 1009,
- "old:virtual_from_version:47567" => 1070,
- "old:virtual_from_version:49840" => 1489,
- "old:virtual_from_version:45813" => 1621,
- "old:virtual_from_version:45858" => 1067,
- "old:virtual_from_version:44172" => 1009,
- "old:virtual_from_version:46208" => 1025,
- "old:virtual_from_version:44660" => 1009,
- "old:virtual_from_version:40944" => 1070,
- "old:virtual_from_version:46136" => 1070,
- "old:virtual_from_version:49399" => 1070,
- "old:virtual_from_version:40875" => 1037,
- "old:virtual_from_version:44648" => 1037,
- "old:virtual_from_version:47173" => 1105,
- "old:virtual_from_version:40698" => 1009,
- "old:virtual_from_version:47996" => 1109,
- "old:virtual_from_version:47898" => 1109,
- "old:virtual_from_version:49986" => 1025,
- "old:virtual_from_version:47160" => 1689,
- "old:virtual_from_version:44934" => 1070,
- "old:virtual_from_version:41013" => 2023,
- "old:virtual_from_version:42233" => 1009,
- "old:virtual_from_version:42225" => 1009,
- "old:virtual_from_version:49910" => 3194,
- "old:virtual_from_version:42749" => 1067,
- "old:virtual_from_version:47645" => 1621,
- "old:virtual_from_version:42964" => 1070,
- "old:virtual_from_version:46369" => 1070,
- "old:virtual_from_version:43029" => 2029,
- "old:virtual_from_version:49730" => 1666,
- "old:virtual_from_version:44071" => 1110,
- "old:virtual_from_version:49350" => 1077,
- "old:virtual_from_version:47362" => 1109,
- "old:virtual_from_version:38692" => 1062,
- "old:virtual_from_version:46569" => 1077,
- "old:virtual_from_version:45277" => 1105,
- "old:virtual_from_version:40972" => 1037,
- "old:virtual_from_version:44335" => 1077,
- "old:virtual_from_version:40537" => 1077,
- "old:virtual_from_version:40261" => 1314,
- "old:virtual_from_version:45368" => 1009,
- "old:virtual_from_version:44099" => 1070,
- "old:virtual_from_version:44501" => 1070,
- "old:virtual_from_version:49292" => 1070,
- "old:virtual_from_version:42797" => 1037,
- "old:virtual_from_version:49084" => 3094,
- "old:virtual_from_version:47171" => 1343,
- "old:virtual_from_version:44206" => 1125,
- "old:virtual_from_version:50362" => 1689,
- "old:virtual_from_version:44734" => 1070,
- "old:virtual_from_version:46134" => 1077,
- "old:virtual_from_version:45344" => 1031,
- "old:virtual_from_version:50103" => 1172,
- "old:virtual_from_version:47521" => 1077,
- "old:virtual_from_version:40697" => 1070,
- "old:virtual_from_version:40880" => 1037,
- "old:virtual_from_version:50196" => 1172,
- "old:virtual_from_version:47559" => 1037,
- "old:virtual_from_version:44126" => 1009,
- "old:virtual_from_version:42144" => 1070,
- "old:virtual_from_version:44977" => 1051,
- "old:virtual_from_version:43020" => 2045,
- "old:virtual_from_version:49442" => 1580,
- "old:virtual_from_version:47400" => 3008,
- "old:virtual_from_version:49529" => 1410,
- "old:virtual_from_version:42518" => 1009,
- "old:virtual_from_version:47249" => 1070,
- "old:virtual_from_version:49535" => 3008,
- "old:virtual_from_version:49301" => 1136,
- "old:virtual_from_version:50351" => 1659,
- "old:virtual_from_version:46204" => 1077,
- "old:virtual_from_version:40928" => 1077,
- "old:virtual_from_version:44348" => 1037,
- "old:virtual_from_version:46353" => 1190,
- "old:virtual_from_version:49656" => 1070,
- "old:virtual_from_version:49063" => 1077,
- "old:virtual_from_version:50756" => 1125,
- "old:virtual_from_version:47305" => 3042,
- "old:virtual_from_version:42407" => 1037,
- "old:virtual_from_version:45054" => 1081,
- "old:virtual_from_version:44169" => 1136,
- "old:virtual_from_version:47041" => 1070,
- "old:virtual_from_version:45035" => 1017,
- "old:virtual_from_version:45270" => 1019,
- "old:virtual_from_version:47838" => 1587,
- "old:virtual_from_version:50245" => 1689,
- "old:virtual_from_version:44780" => 1070,
- "old:virtual_from_version:40842" => 1077,
- "old:virtual_from_version:46298" => 1070,
- "old:virtual_from_version:42531" => 1070,
- "old:virtual_from_version:50528" => 1136,
- "old:virtual_from_version:45643" => 1067,
- "old:virtual_from_version:42437" => 1077,
- "old:virtual_from_version:45797" => 1015,
- "old:virtual_from_version:42326" => 1009,
- "old:virtual_from_version:44719" => 1025,
- "old:virtual_from_version:44961" => 1062,
- "old:virtual_from_version:46600" => 1070,
- "old:virtual_from_version:45889" => 1077,
- "old:virtual_from_version:47734" => 1125,
- "old:virtual_from_version:47965" => 3016,
- "old:virtual_from_version:42642" => 1077,
- "old:virtual_from_version:44566" => 1070,
- "old:virtual_from_version:49457" => 1070,
- "old:virtual_from_version:50691" => 1689,
- "old:virtual_from_version:45313" => 1585,
- "old:virtual_from_version:46725" => 1537,
- "old:virtual_from_version:47828" => 1125,
- "old:virtual_from_version:46796" => 1172,
- "old:virtual_from_version:42845" => 1109,
- "old:virtual_from_version:44769" => 1489,
- "old:virtual_from_version:49699" => 1158,
- "old:virtual_from_version:42997" => 1037,
- "old:virtual_from_version:47700" => 1070,
- "old:virtual_from_version:45745" => 1070,
- "old:virtual_from_version:47321" => 1125,
- "old:virtual_from_version:46800" => 1666,
- "old:virtual_from_version:46673" => 1077,
- "old:virtual_from_version:50484" => 1410,
- "old:virtual_from_version:47109" => 1070,
- "old:virtual_from_version:44067" => 1107,
- "old:virtual_from_version:46401" => 1537,
- "old:virtual_from_version:47652" => 1070,
- "old:virtual_from_version:46946" => 1077,
- "old:virtual_from_version:47696" => 1077,
- "old:virtual_from_version:50598" => 1136,
- "old:virtual_from_version:49639" => 1070,
- "old:virtual_from_version:44735" => 1077,
- "old:virtual_from_version:47579" => 1077,
- "old:virtual_from_version:15764" => 1029,
- "old:virtual_from_version:45864" => 1627,
- "old:virtual_from_version:50737" => 1585,
- "old:virtual_from_version:49175" => 1659,
- "old:virtual_from_version:47117" => 1656,
- "old:virtual_from_version:40766" => 1107,
- "old:virtual_from_version:47121" => 1125,
- "old:virtual_from_version:40865" => 1411,
- "old:virtual_from_version:45585" => 1136,
- "old:virtual_from_version:44052" => 1070,
- "old:virtual_from_version:47874" => 1136,
- "old:virtual_from_version:42791" => 1222,
- "old:virtual_from_version:50037" => 3220,
- "old:virtual_from_version:49433" => 1007,
- "old:virtual_from_version:44418" => 1030,
- "old:virtual_from_version:46884" => 1048,
- "old:virtual_from_version:47684" => 1051,
- "old:virtual_from_version:45246" => 1070,
- "old:virtual_from_version:38518" => 1108,
- "old:virtual_from_version:44320" => 1498,
- "old:virtual_from_version:44583" => 1037,
- "old:virtual_from_version:46874" => 1613,
- "old:virtual_from_version:39316" => 1077,
- "old:virtual_from_version:40573" => 1077,
- "old:virtual_from_version:40562" => 1070,
- "old:virtual_from_version:21275" => 1057,
- "old:virtual_from_version:40393" => 1344,
- "old:virtual_from_version:42795" => 1025,
- "old:virtual_from_version:45520" => 1077,
- "old:virtual_from_version:44484" => 1125,
- "old:virtual_from_version:44537" => 1110,
- "old:virtual_from_version:45823" => 1190,
- "old:virtual_from_version:49360" => 1077,
- "old:virtual_from_version:50254" => 1689,
- "old:virtual_from_version:50533" => 1150,
- "old:virtual_from_version:46257" => 1517,
- "old:virtual_from_version:48002" => 2103,
- "old:virtual_from_version:50194" => 3030,
- "old:virtual_from_version:45905" => 1070,
- "old:virtual_from_version:49808" => 1062,
- "old:virtual_from_version:45400" => 1032,
- "old:virtual_from_version:42449" => 1077,
- "old:virtual_from_version:44573" => 1067,
- "old:virtual_from_version:45281" => 1012,
- "old:virtual_from_version:49782" => 3194,
- "old:virtual_from_version:42390" => 1009,
- "old:virtual_from_version:44720" => 1077,
- "old:virtual_from_version:44268" => 1084,
- "old:virtual_from_version:38964" => 1109,
- "old:virtual_from_version:40950" => 1107,
- "old:virtual_from_version:49876" => 1172,
- "old:virtual_from_version:45501" => 1105,
- "old:virtual_from_version:40924" => 1048,
- "old:virtual_from_version:49733" => 1015,
- "old:virtual_from_version:44061" => 1009,
- "old:virtual_from_version:43022" => 2047,
- "old:virtual_from_version:45772" => 1077,
- "old:virtual_from_version:45319" => 1110,
- "old:virtual_from_version:42657" => 1009,
- "old:virtual_from_version:44598" => 1057,
- "old:virtual_from_version:47746" => 3090,
- "old:virtual_from_version:46293" => 1414,
- "old:virtual_from_version:42546" => 1172,
- "old:virtual_from_version:49374" => 3167,
- "old:virtual_from_version:40618" => 1078,
- "old:virtual_from_version:42458" => 1136,
- "old:virtual_from_version:49740" => 1584,
- "old:virtual_from_version:45301" => 1107,
- "old:virtual_from_version:40567" => 1115,
- "old:virtual_from_version:45969" => 1172,
- "old:virtual_from_version:49408" => 1048,
- "old:virtual_from_version:43087" => 2081,
- "old:virtual_from_version:40807" => 1070,
- "old:virtual_from_version:49331" => 1070,
- "old:virtual_from_version:43070" => 2070,
- "old:virtual_from_version:44016" => 1054,
- "old:virtual_from_version:44628" => 1037,
- "old:virtual_from_version:42913" => 1070,
- "old:virtual_from_version:42165" => 1006,
- "old:virtual_from_version:45798" => 1019,
- "old:virtual_from_version:46174" => 1077,
- "old:virtual_from_version:45958" => 1461,
- "old:virtual_from_version:49384" => 1489,
- "old:virtual_from_version:50302" => 1025,
- "old:virtual_from_version:47152" => 1070,
- "old:virtual_from_version:42292" => 1077,
- "old:virtual_from_version:47085" => 3008,
- "old:virtual_from_version:49562" => 1158,
- "old:virtual_from_version:47741" => 1077,
- "old:virtual_from_version:48036" => 2079,
- "old:virtual_from_version:43063" => 2064,
- "old:virtual_from_version:44807" => 1077,
- "old:virtual_from_version:49060" => 3094,
- "old:virtual_from_version:46956" => 1062,
- "old:virtual_from_version:49905" => 3205,
- "old:virtual_from_version:44466" => 1107,
- "old:virtual_from_version:44789" => 1107,
- "old:virtual_from_version:46855" => 1509,
- "old:virtual_from_version:49580" => 1035,
- "old:virtual_from_version:42926" => 1070,
- "old:virtual_from_version:46199" => 1407,
- "old:virtual_from_version:45504" => 1532,
- "old:virtual_from_version:47087" => 1125,
- "old:virtual_from_version:42668" => 1070,
- "old:virtual_from_version:42536" => 1000,
- "old:virtual_from_version:49097" => 1012,
- "old:virtual_from_version:49912" => 1348,
- "old:virtual_from_version:45840" => 1107,
- "old:virtual_from_version:45363" => 1587,
- "old:virtual_from_version:47429" => 1109,
- "old:virtual_from_version:42343" => 1077,
- "old:virtual_from_version:49385" => 1489,
- "old:virtual_from_version:45600" => 1077,
- "old:virtual_from_version:47004" => 1070,
- "old:virtual_from_version:47468" => 1109,
- "old:virtual_from_version:44093" => 1070,
- "old:virtual_from_version:45699" => 1070,
- "old:virtual_from_version:45314" => 1009,
- "old:virtual_from_version:42060" => 1067,
- "old:virtual_from_version:42024" => 1037,
- "old:virtual_from_version:40377" => 1032,
- "old:virtual_from_version:49040" => 1037,
- "old:virtual_from_version:42962" => 1110,
- "old:virtual_from_version:46761" => 1575,
- "old:virtual_from_version:47832" => 1109,
- "old:virtual_from_version:44706" => 1077,
- "old:virtual_from_version:40898" => 1009,
- "old:virtual_from_version:45944" => 1136,
- "old:virtual_from_version:50645" => 1070,
- "old:virtual_from_version:50121" => 1031,
- "old:virtual_from_version:47449" => 1070,
- "old:virtual_from_version:44209" => 1009,
- "old:virtual_from_version:42869" => 1070,
- "old:virtual_from_version:39734" => 1059,
- "old:virtual_from_version:49461" => 1404,
- "old:virtual_from_version:46828" => 1077,
- "old:virtual_from_version:46670" => 1404,
- "old:virtual_from_version:44578" => 1048,
- "old:virtual_from_version:40584" => 1070,
- "old:virtual_from_version:49000" => 1077,
- "old:virtual_from_version:42117" => 1328,
- "old:virtual_from_version:50718" => 1417,
- "old:virtual_from_version:47517" => 1125,
- "old:virtual_from_version:50589" => 3259,
- "old:virtual_from_version:46958" => 1070,
- "old:virtual_from_version:49845" => 1515,
- "old:virtual_from_version:44914" => 1517,
- "old:virtual_from_version:45325" => 1009,
- "old:virtual_from_version:38368" => 1112,
- "old:virtual_from_version:49059" => 1666,
- "old:virtual_from_version:42902" => 1009,
- "old:virtual_from_version:46854" => 3002,
- "old:virtual_from_version:46798" => 1077,
- "old:virtual_from_version:49018" => 3129,
- "old:virtual_from_version:47635" => 1689,
- "old:virtual_from_version:44746" => 1007,
- "old:virtual_from_version:42906" => 1067,
- "old:virtual_from_version:45298" => 1237,
- "old:virtual_from_version:40946" => 1077,
- "old:virtual_from_version:47084" => 1077,
- "old:virtual_from_version:50571" => 3031,
- "old:virtual_from_version:45649" => 1136,
- "old:virtual_from_version:42037" => 1070,
- "old:virtual_from_version:47161" => 3029,
- "old:virtual_from_version:42878" => 1007,
- "old:virtual_from_version:49258" => 1077,
- "old:virtual_from_version:46536" => 1077,
- "old:virtual_from_version:44034" => 1077,
- "old:virtual_from_version:47295" => 1037,
- "old:virtual_from_version:44907" => 1070,
- "old:virtual_from_version:50713" => 1070,
- "old:virtual_from_version:40904" => 1025,
- "old:virtual_from_version:44117" => 1009,
- "old:virtual_from_version:45157" => 1051,
- "old:virtual_from_version:46812" => 3002,
- "old:virtual_from_version:40760" => 1009,
- "old:virtual_from_version:49391" => 1095,
- "old:virtual_from_version:47386" => 3008,
- "old:virtual_from_version:39264" => 1144,
- "old:virtual_from_version:47378" => 1077,
- "old:virtual_from_version:44580" => 1078,
- "old:virtual_from_version:44774" => 1350,
- "old:virtual_from_version:45132" => 1009,
- "old:virtual_from_version:50425" => 1035,
- "old:virtual_from_version:47526" => 1037,
- "old:virtual_from_version:44970" => 1043,
- "old:virtual_from_version:50652" => 1417,
- "old:virtual_from_version:47706" => 1321,
- "old:virtual_from_version:44307" => 1125,
- "old:virtual_from_version:42013" => 1037,
- "old:virtual_from_version:45122" => 1125,
- "old:virtual_from_version:45238" => 1136,
- "old:virtual_from_version:44471" => 1110,
- "old:virtual_from_version:42175" => 1418,
- "old:virtual_from_version:49210" => 3155,
- "old:virtual_from_version:50206" => 1659,
- "old:virtual_from_version:40495" => 1077,
- "old:virtual_from_version:46158" => 1077,
- "old:virtual_from_version:24814" => 1040,
- "old:virtual_from_version:49679" => 3190,
- "old:virtual_from_version:45139" => 1009,
- "old:virtual_from_version:44141" => 1037,
- "old:virtual_from_version:45709" => 1533,
- "old:virtual_from_version:42659" => 1077,
- "old:virtual_from_version:42694" => 1070,
- "old:virtual_from_version:49066" => 3136,
- "old:virtual_from_version:42909" => 1025,
- "old:virtual_from_version:45839" => 1125,
- "old:virtual_from_version:42050" => 1025,
- "old:virtual_from_version:45682" => 1027,
- "old:virtual_from_version:42032" => 1077,
- "old:virtual_from_version:50002" => 3131,
- "old:virtual_from_version:49272" => 3078,
- "old:virtual_from_version:42942" => 1172,
- "old:virtual_from_version:43010" => 2035,
- "old:virtual_from_version:45711" => 1009,
- "old:virtual_from_version:47800" => 1007,
- "old:virtual_from_version:47379" => 1404,
- "old:virtual_from_version:45403" => 1125,
- "old:virtual_from_version:46162" => 1105,
- "old:virtual_from_version:50035" => 3176,
- "old:virtual_from_version:49714" => 1489,
- "old:virtual_from_version:44650" => 1009,
- "old:virtual_from_version:40684" => 1048,
- "old:virtual_from_version:44522" => 1107,
- "old:virtual_from_version:46295" => 1070,
- "old:virtual_from_version:40712" => 1077,
- "old:virtual_from_version:44051" => 1107,
- "old:virtual_from_version:39042" => 1125,
- "old:virtual_from_version:49362" => 1070,
- "old:virtual_from_version:44439" => 1067,
- "old:virtual_from_version:45906" => 1125,
- "old:virtual_from_version:40497" => 1328,
- "old:virtual_from_version:46381" => 1109,
- "old:virtual_from_version:40591" => 1070,
- "old:virtual_from_version:49508" => 1125,
- "old:virtual_from_version:42949" => 1070,
- "old:virtual_from_version:46984" => 1585,
- "old:virtual_from_version:46699" => 1696,
- "old:virtual_from_version:46750" => 1699,
- "old:virtual_from_version:46292" => 1077,
- "old:virtual_from_version:45837" => 1070,
- "old:virtual_from_version:50122" => 3131,
- "old:virtual_from_version:49702" => 1583,
- "old:virtual_from_version:42396" => 1009,
- "old:virtual_from_version:49964" => 3211,
- "old:virtual_from_version:50153" => 1059,
- "old:virtual_from_version:49756" => 1172,
- "old:virtual_from_version:46485" => 1105,
- "old:virtual_from_version:47689" => 1689,
- "old:virtual_from_version:45088" => 1116,
- "old:virtual_from_version:40856" => 1009,
- "old:virtual_from_version:45085" => 1009,
- "old:virtual_from_version:49879" => 3131,
- "old:virtual_from_version:49584" => 1136,
- "old:virtual_from_version:47022" => 1580,
- "old:virtual_from_version:49860" => 1025,
- "old:virtual_from_version:39804" => 1088,
- "old:virtual_from_version:44427" => 1112,
- "old:virtual_from_version:40867" => 1077,
- "old:virtual_from_version:49980" => 1070,
- "old:virtual_from_version:40976" => 1077,
- "old:virtual_from_version:49718" => 1037,
- "old:virtual_from_version:46528" => 1070,
- "old:virtual_from_version:50095" => 1172,
- "old:virtual_from_version:49351" => 1077,
- "old:virtual_from_version:47102" => 1070,
- "old:virtual_from_version:45159" => 1125,
- "old:virtual_from_version:49936" => 1100,
- "old:virtual_from_version:46115" => 1517,
- "old:virtual_from_version:46328" => 1125,
- "old:virtual_from_version:42047" => 1110,
- "old:virtual_from_version:46615" => 1063,
- "old:virtual_from_version:43038" => 2037,
- "old:virtual_from_version:45247" => 1063,
- "old:virtual_from_version:42324" => 1172,
- "old:virtual_from_version:49540" => 3181,
- "old:virtual_from_version:45824" => 1084,
- "old:virtual_from_version:46578" => 1077,
- "old:virtual_from_version:37911" => 1090,
- "old:virtual_from_version:42072" => 1077,
- "old:virtual_from_version:42358" => 1025,
- "old:virtual_from_version:46943" => 1109,
- "old:virtual_from_version:46852" => 1666,
- "old:virtual_from_version:45655" => 1077,
- "old:virtual_from_version:45413" => 1112,
- "old:virtual_from_version:45801" => 1172,
- "old:virtual_from_version:40832" => 1123,
- "old:virtual_from_version:50513" => 1584,
- "old:virtual_from_version:40479" => 1025,
- "old:virtual_from_version:40605" => 1025,
- "old:virtual_from_version:46643" => 1070,
- "old:virtual_from_version:40977" => 1037,
- "old:virtual_from_version:50150" => 1172,
- "old:virtual_from_version:44683" => 1077,
- "old:virtual_from_version:46876" => 1070,
- "old:virtual_from_version:47862" => 1404,
- "old:virtual_from_version:46860" => 1007,
- "old:virtual_from_version:44868" => 1070,
- "old:virtual_from_version:45710" => 1070,
- "old:virtual_from_version:46075" => 1077,
- "old:virtual_from_version:47074" => 1659,
- "old:virtual_from_version:45630" => 1172,
- "old:virtual_from_version:44328" => 1077,
- "old:virtual_from_version:46698" => 1020,
- "old:virtual_from_version:45048" => 1037,
- "old:virtual_from_version:44497" => 1110,
- "old:virtual_from_version:15732" => 1005,
- "old:virtual_from_version:44488" => 1023,
- "old:virtual_from_version:49427" => 1070,
- "old:virtual_from_version:44848" => 1009,
- "old:virtual_from_version:46071" => 1070,
- "old:virtual_from_version:40433" => 1108,
- "old:virtual_from_version:50161" => 3058,
- "old:virtual_from_version:47231" => 1070,
- "old:virtual_from_version:42304" => 1025,
- "old:virtual_from_version:49106" => 3094,
- "old:virtual_from_version:49549" => 1410,
- "old:virtual_from_version:45648" => 1172,
- "old:virtual_from_version:40900" => 1077,
- "old:virtual_from_version:44104" => 1125,
- "old:virtual_from_version:44930" => 1077,
- "old:virtual_from_version:50274" => 3131,
- "old:virtual_from_version:43057" => 2057,
- "old:virtual_from_version:44145" => 1009,
- "old:virtual_from_version:38819" => 1108,
- "old:virtual_from_version:46051" => 1025,
- "old:virtual_from_version:44607" => 1037,
- "old:virtual_from_version:50112" => 1172,
- "old:virtual_from_version:44783" => 1070,
- "old:virtual_from_version:40372" => 1009,
- "old:virtual_from_version:40409" => 1048,
- "old:virtual_from_version:45002" => 1025,
- "old:virtual_from_version:46139" => 1070,
- "old:virtual_from_version:46223" => 1007,
- "old:virtual_from_version:42310" => 1037,
- "old:virtual_from_version:44649" => 1070,
- "old:virtual_from_version:42936" => 1037,
- "old:virtual_from_version:47760" => 1109,
- "old:virtual_from_version:44208" => 1070,
- "old:virtual_from_version:47250" => 1125,
- "old:virtual_from_version:42911" => 1037,
- "old:virtual_from_version:46503" => 1584,
- "old:virtual_from_version:50340" => 1070,
- "old:virtual_from_version:50091" => 1125,
- "old:virtual_from_version:46973" => 1583,
- "old:virtual_from_version:45316" => 1012,
- "old:virtual_from_version:50096" => 1009,
- "old:virtual_from_version:46683" => 1077,
- "old:virtual_from_version:44736" => 1083,
- "old:virtual_from_version:44007" => 1311,
- "old:virtual_from_version:49088" => 3139,
- "old:virtual_from_version:46414" => 1077,
- "old:virtual_from_version:44623" => 1025,
- "old:virtual_from_version:42107" => 1105,
- "old:virtual_from_version:44369" => 1069,
- "old:virtual_from_version:45838" => 1362,
- "old:virtual_from_version:42062" => 1025,
- "old:virtual_from_version:46461" => 1062,
- "old:virtual_from_version:47372" => 3008,
- "old:virtual_from_version:46468" => 1404,
- "old:virtual_from_version:49450" => 3176,
- "old:virtual_from_version:47393" => 1697,
- "old:virtual_from_version:47843" => 3114,
- "old:virtual_from_version:44105" => 1107,
- "old:virtual_from_version:45584" => 1172,
- "old:virtual_from_version:45684" => 1615,
- "old:virtual_from_version:47154" => 1017,
- "old:virtual_from_version:49136" => 1012,
- "old:virtual_from_version:42722" => 1025,
- "old:virtual_from_version:50730" => 3273,
- "old:virtual_from_version:42157" => 1416,
- "old:virtual_from_version:46793" => 3000,
- "old:virtual_from_version:45320" => 1125,
- "old:virtual_from_version:45455" => 1136,
- "old:virtual_from_version:49051" => 3114,
- "old:virtual_from_version:44196" => 1007,
- "old:virtual_from_version:39152" => 1125,
- "old:virtual_from_version:45462" => 1077,
- "old:virtual_from_version:44388" => 1065,
- "old:virtual_from_version:45285" => 1031,
- "old:virtual_from_version:49284" => 3146,
- "old:virtual_from_version:49625" => 3183,
- "old:virtual_from_version:50739" => 3259,
- "old:virtual_from_version:46977" => 1125,
- "old:virtual_from_version:49780" => 1489,
- "old:virtual_from_version:39585" => 1404,
- "old:virtual_from_version:50133" => 3131,
- "old:virtual_from_version:38683" => 1067,
- "old:virtual_from_version:47367" => 1070,
- "old:virtual_from_version:42514" => 1048,
- "old:virtual_from_version:45712" => 1077,
- "old:virtual_from_version:45415" => 1444,
- "old:virtual_from_version:50203" => 1689,
- "old:virtual_from_version:47205" => 1125,
- "old:virtual_from_version:45794" => 1107,
- "old:virtual_from_version:45125" => 1009,
- "old:virtual_from_version:42781" => 1048,
- "old:virtual_from_version:50344" => 3192,
- "old:virtual_from_version:49065" => 3094,
- "old:virtual_from_version:49778" => 1112,
- "old:virtual_from_version:49972" => 3209,
- "old:virtual_from_version:45747" => 1027,
- "old:virtual_from_version:47366" => 1037,
- "old:virtual_from_version:40913" => 1070,
- "old:virtual_from_version:35710" => 1017,
- "old:virtual_from_version:47210" => 1321,
- "old:virtual_from_version:45156" => 1404,
- "old:virtual_from_version:46339" => 1105,
- "old:virtual_from_version:42281" => 1423,
- "old:virtual_from_version:45417" => 1136,
- "old:virtual_from_version:44458" => 1112,
- "old:virtual_from_version:42285" => 1222,
- "old:virtual_from_version:40546" => 1116,
- "old:virtual_from_version:40170" => 1076,
- "old:virtual_from_version:42532" => 1077,
- "old:virtual_from_version:45093" => 1105,
- "old:virtual_from_version:36614" => 1006,
- "old:virtual_from_version:44925" => 1077,
- "old:virtual_from_version:47835" => 1077,
- "old:virtual_from_version:49518" => 1025,
- "old:virtual_from_version:47581" => 1568,
- "old:virtual_from_version:50364" => 1035,
- "old:virtual_from_version:47433" => 1689,
- "old:virtual_from_version:43088" => 2082,
- "old:virtual_from_version:45771" => 1025,
- "old:virtual_from_version:47010" => 3015,
- "old:virtual_from_version:42049" => 1009,
- "old:virtual_from_version:47488" => 1172,
- "old:virtual_from_version:44621" => 1070,
- "old:virtual_from_version:50098" => 3221,
- "old:virtual_from_version:45451" => 1077,
- "old:virtual_from_version:50086" => 1172,
- "old:virtual_from_version:47142" => 3025,
- "old:virtual_from_version:38340" => 1070,
- "old:virtual_from_version:46494" => 1321,
- "old:virtual_from_version:39993" => 2008,
- "old:virtual_from_version:40245" => 1152,
- "old:virtual_from_version:49683" => 1070,
- "old:virtual_from_version:47174" => 1077,
- "old:virtual_from_version:50649" => 1067,
- "old:virtual_from_version:46605" => 1077,
- "old:virtual_from_version:40291" => 1110,
- "old:virtual_from_version:41006" => 1168,
- "old:virtual_from_version:40046" => 1007,
- "old:virtual_from_version:46691" => 1125,
- "old:virtual_from_version:50369" => 3131,
- "old:virtual_from_version:44331" => 1070,
- "old:virtual_from_version:42200" => 1009,
- "old:virtual_from_version:45746" => 1125,
- "old:virtual_from_version:44215" => 1109
-}
\ No newline at end of file
+ 'old:virtual_from_version:40876' => 1048,
+ 'old:virtual_from_version:44059' => 1125,
+ 'old:virtual_from_version:46266' => 1172,
+ 'old:virtual_from_version:44870' => 1077,
+ 'old:virtual_from_version:40446' => 1009,
+ 'old:virtual_from_version:42230' => 1083,
+ 'old:virtual_from_version:44261' => 1070,
+ 'old:virtual_from_version:44863' => 1009,
+ 'old:virtual_from_version:44231' => 1107,
+ 'old:virtual_from_version:47370' => 1077,
+ 'old:virtual_from_version:49429' => 1580,
+ 'old:virtual_from_version:42156' => 1037,
+ 'old:virtual_from_version:44222' => 1009,
+ 'old:virtual_from_version:42381' => 1070,
+ 'old:virtual_from_version:50050' => 3131,
+ 'old:virtual_from_version:47704' => 1689,
+ 'old:virtual_from_version:40625' => 1070,
+ 'old:virtual_from_version:40934' => 1070,
+ 'old:virtual_from_version:43002' => 2018,
+ 'old:virtual_from_version:40941' => 1070,
+ 'old:virtual_from_version:39314' => 1125,
+ 'old:virtual_from_version:46950' => 1070,
+ 'old:virtual_from_version:46093' => 1649,
+ 'old:virtual_from_version:49425' => 1025,
+ 'old:virtual_from_version:42731' => 1077,
+ 'old:virtual_from_version:47095' => 1077,
+ 'old:virtual_from_version:49684' => 1125,
+ 'old:virtual_from_version:49229' => 1689,
+ 'old:virtual_from_version:47012' => 3016,
+ 'old:virtual_from_version:45228' => 1414,
+ 'old:virtual_from_version:45287' => 1517,
+ 'old:virtual_from_version:45569' => 1136,
+ 'old:virtual_from_version:42525' => 1017,
+ 'old:virtual_from_version:38363' => 1081,
+ 'old:virtual_from_version:40404' => 1354,
+ 'old:virtual_from_version:47677' => 1689,
+ 'old:virtual_from_version:47916' => 1081,
+ 'old:virtual_from_version:42239' => 1077,
+ 'old:virtual_from_version:46908' => 1070,
+ 'old:virtual_from_version:50341' => 3131,
+ 'old:virtual_from_version:44232' => 1070,
+ 'old:virtual_from_version:44622' => 1009,
+ 'old:virtual_from_version:40556' => 1067,
+ 'old:virtual_from_version:46102' => 1070,
+ 'old:virtual_from_version:49057' => 1077,
+ 'old:virtual_from_version:45091' => 1025,
+ 'old:virtual_from_version:44599' => 1141,
+ 'old:virtual_from_version:39208' => 1148,
+ 'old:virtual_from_version:44055' => 1077,
+ 'old:virtual_from_version:39055' => 1110,
+ 'old:virtual_from_version:44779' => 1545,
+ 'old:virtual_from_version:43073' => 2072,
+ 'old:virtual_from_version:45955' => 1105,
+ 'old:virtual_from_version:46215' => 1070,
+ 'old:virtual_from_version:46917' => 1109,
+ 'old:virtual_from_version:50608' => 1136,
+ 'old:virtual_from_version:29952' => 1078,
+ 'old:virtual_from_version:42084' => 1070,
+ 'old:virtual_from_version:45919' => 1035,
+ 'old:virtual_from_version:40589' => 1077,
+ 'old:virtual_from_version:44604' => 1009,
+ 'old:virtual_from_version:50267' => 3131,
+ 'old:virtual_from_version:50174' => 1172,
+ 'old:virtual_from_version:40681' => 1081,
+ 'old:virtual_from_version:44915' => 1077,
+ 'old:virtual_from_version:42810' => 1500,
+ 'old:virtual_from_version:46938' => 3009,
+ 'old:virtual_from_version:42177' => 1172,
+ 'old:virtual_from_version:40398' => 1348,
+ 'old:virtual_from_version:49002' => 1070,
+ 'old:virtual_from_version:45570' => 1070,
+ 'old:virtual_from_version:42980' => 1009,
+ 'old:virtual_from_version:42557' => 1037,
+ 'old:virtual_from_version:42070' => 1107,
+ 'old:virtual_from_version:40634' => 1070,
+ 'old:virtual_from_version:40441' => 1083,
+ 'old:virtual_from_version:39905' => 1081,
+ 'old:virtual_from_version:45020' => 1070,
+ 'old:virtual_from_version:47294' => 1077,
+ 'old:virtual_from_version:44738' => 1070,
+ 'old:virtual_from_version:49659' => 3155,
+ 'old:virtual_from_version:44158' => 1107,
+ 'old:virtual_from_version:44939' => 1125,
+ 'old:virtual_from_version:47658' => 1070,
+ 'old:virtual_from_version:38751' => 1112,
+ 'old:virtual_from_version:50316' => 1311,
+ 'old:virtual_from_version:45554' => 1172,
+ 'old:virtual_from_version:46320' => 1115,
+ 'old:virtual_from_version:46790' => 1077,
+ 'old:virtual_from_version:45799' => 1067,
+ 'old:virtual_from_version:49263' => 1532,
+ 'old:virtual_from_version:45033' => 1016,
+ 'old:virtual_from_version:45005' => 1006,
+ 'old:virtual_from_version:47430' => 1077,
+ 'old:virtual_from_version:42607' => 1070,
+ 'old:virtual_from_version:44878' => 1125,
+ 'old:virtual_from_version:46763' => 1062,
+ 'old:virtual_from_version:44050' => 1125,
+ 'old:virtual_from_version:50616' => 1025,
+ 'old:virtual_from_version:50308' => 1224,
+ 'old:virtual_from_version:45330' => 1588,
+ 'old:virtual_from_version:45783' => 1007,
+ 'old:virtual_from_version:42948' => 1148,
+ 'old:virtual_from_version:42159' => 1077,
+ 'old:virtual_from_version:39932' => 1110,
+ 'old:virtual_from_version:42828' => 1078,
+ 'old:virtual_from_version:39175' => 1146,
+ 'old:virtual_from_version:47474' => 1070,
+ 'old:virtual_from_version:44796' => 1077,
+ 'old:virtual_from_version:45353' => 1107,
+ 'old:virtual_from_version:42081' => 1009,
+ 'old:virtual_from_version:45491' => 1009,
+ 'old:virtual_from_version:44302' => 1013,
+ 'old:virtual_from_version:40848' => 1407,
+ 'old:virtual_from_version:45954' => 1070,
+ 'old:virtual_from_version:50612' => 1689,
+ 'old:virtual_from_version:38407' => 1104,
+ 'old:virtual_from_version:48010' => 2110,
+ 'old:virtual_from_version:39483' => 1007,
+ 'old:virtual_from_version:41000' => 2012,
+ 'old:virtual_from_version:46948' => 1659,
+ 'old:virtual_from_version:44362' => 1063,
+ 'old:virtual_from_version:45446' => 1125,
+ 'old:virtual_from_version:42256' => 1009,
+ 'old:virtual_from_version:47113' => 3020,
+ 'old:virtual_from_version:42442' => 1009,
+ 'old:virtual_from_version:46735' => 1689,
+ 'old:virtual_from_version:43021' => 2046,
+ 'old:virtual_from_version:49586' => 1067,
+ 'old:virtual_from_version:44579' => 1070,
+ 'old:virtual_from_version:40892' => 1108,
+ 'old:virtual_from_version:44692' => 1109,
+ 'old:virtual_from_version:50607' => 1070,
+ 'old:virtual_from_version:50177' => 1070,
+ 'old:virtual_from_version:38801' => 1131,
+ 'old:virtual_from_version:39897' => 1183,
+ 'old:virtual_from_version:45015' => 1125,
+ 'old:virtual_from_version:47406' => 1125,
+ 'old:virtual_from_version:46305' => 1070,
+ 'old:virtual_from_version:45506' => 1584,
+ 'old:virtual_from_version:39737' => 1025,
+ 'old:virtual_from_version:47427' => 1136,
+ 'old:virtual_from_version:43086' => 2083,
+ 'old:virtual_from_version:42914' => 1009,
+ 'old:virtual_from_version:45928' => 1070,
+ 'old:virtual_from_version:44656' => 1025,
+ 'old:virtual_from_version:44637' => 1070,
+ 'old:virtual_from_version:49610' => 1659,
+ 'old:virtual_from_version:50200' => 1311,
+ 'old:virtual_from_version:47516' => 1070,
+ 'old:virtual_from_version:49208' => 1404,
+ 'old:virtual_from_version:50668' => 3208,
+ 'old:virtual_from_version:42598' => 1070,
+ 'old:virtual_from_version:49324' => 1070,
+ 'old:virtual_from_version:47473' => 1616,
+ 'old:virtual_from_version:49225' => 1125,
+ 'old:virtual_from_version:50763' => 1417,
+ 'old:virtual_from_version:45121' => 1077,
+ 'old:virtual_from_version:49776' => 3194,
+ 'old:virtual_from_version:49217' => 1070,
+ 'old:virtual_from_version:46356' => 1670,
+ 'old:virtual_from_version:50726' => 3266,
+ 'old:virtual_from_version:46452' => 1105,
+ 'old:virtual_from_version:49589' => 1077,
+ 'old:virtual_from_version:45476' => 1105,
+ 'old:virtual_from_version:49352' => 1136,
+ 'old:virtual_from_version:40828' => 1006,
+ 'old:virtual_from_version:40651' => 1397,
+ 'old:virtual_from_version:38793' => 1062,
+ 'old:virtual_from_version:46893' => 1070,
+ 'old:virtual_from_version:50209' => 1070,
+ 'old:virtual_from_version:40645' => 1128,
+ 'old:virtual_from_version:42563' => 1109,
+ 'old:virtual_from_version:49413' => 1070,
+ 'old:virtual_from_version:42408' => 1311,
+ 'old:virtual_from_version:45296' => 1062,
+ 'old:virtual_from_version:46543' => 1125,
+ 'old:virtual_from_version:41017' => 2026,
+ 'old:virtual_from_version:47043' => 1077,
+ 'old:virtual_from_version:50353' => 1125,
+ 'old:virtual_from_version:50721' => 1150,
+ 'old:virtual_from_version:44922' => 1555,
+ 'old:virtual_from_version:44822' => 1550,
+ 'old:virtual_from_version:46901' => 1077,
+ 'old:virtual_from_version:49205' => 1070,
+ 'old:virtual_from_version:45289' => 1110,
+ 'old:virtual_from_version:49676' => 1404,
+ 'old:virtual_from_version:47640' => 1125,
+ 'old:virtual_from_version:49390' => 1070,
+ 'old:virtual_from_version:50534' => 1314,
+ 'old:virtual_from_version:45730' => 1048,
+ 'old:virtual_from_version:46420' => 1136,
+ 'old:virtual_from_version:40902' => 1048,
+ 'old:virtual_from_version:44030' => 1077,
+ 'old:virtual_from_version:49732' => 1489,
+ 'old:virtual_from_version:46240' => 1070,
+ 'old:virtual_from_version:50700' => 3259,
+ 'old:virtual_from_version:42470' => 1404,
+ 'old:virtual_from_version:47364' => 1077,
+ 'old:virtual_from_version:46495' => 1580,
+ 'old:virtual_from_version:47445' => 1381,
+ 'old:virtual_from_version:46823' => 3000,
+ 'old:virtual_from_version:40512' => 1077,
+ 'old:virtual_from_version:49158' => 1077,
+ 'old:virtual_from_version:49930' => 1632,
+ 'old:virtual_from_version:40552' => 1091,
+ 'old:virtual_from_version:43036' => 2035,
+ 'old:virtual_from_version:50499' => 3259,
+ 'old:virtual_from_version:40778' => 1107,
+ 'old:virtual_from_version:49503' => 1107,
+ 'old:virtual_from_version:45553' => 1348,
+ 'old:virtual_from_version:42806' => 1009,
+ 'old:virtual_from_version:45109' => 1489,
+ 'old:virtual_from_version:44247' => 1070,
+ 'old:virtual_from_version:45377' => 1362,
+ 'old:virtual_from_version:47983' => 3126,
+ 'old:virtual_from_version:49979' => 1062,
+ 'old:virtual_from_version:47162' => 3030,
+ 'old:virtual_from_version:44217' => 1224,
+ 'old:virtual_from_version:45925' => 1025,
+ 'old:virtual_from_version:46708' => 1070,
+ 'old:virtual_from_version:47490' => 1070,
+ 'old:virtual_from_version:42876' => 1070,
+ 'old:virtual_from_version:49178' => 1077,
+ 'old:virtual_from_version:39149' => 1123,
+ 'old:virtual_from_version:44564' => 1037,
+ 'old:virtual_from_version:42252' => 1077,
+ 'old:virtual_from_version:49696' => 1158,
+ 'old:virtual_from_version:40797' => 1051,
+ 'old:virtual_from_version:40811' => 1077,
+ 'old:virtual_from_version:47730' => 1077,
+ 'old:virtual_from_version:42231' => 1172,
+ 'old:virtual_from_version:49064' => 1689,
+ 'old:virtual_from_version:42493' => 1025,
+ 'old:virtual_from_version:47153' => 1125,
+ 'old:virtual_from_version:49233' => 1077,
+ 'old:virtual_from_version:44129' => 1070,
+ 'old:virtual_from_version:48039' => 2136,
+ 'old:virtual_from_version:44101' => 1077,
+ 'old:virtual_from_version:49504' => 1105,
+ 'old:virtual_from_version:44725' => 1070,
+ 'old:virtual_from_version:49102' => 1649,
+ 'old:virtual_from_version:49138' => 1070,
+ 'old:virtual_from_version:44140' => 1077,
+ 'old:virtual_from_version:40745' => 1081,
+ 'old:virtual_from_version:46622' => 1136,
+ 'old:virtual_from_version:46415' => 1070,
+ 'old:virtual_from_version:50290' => 3223,
+ 'old:virtual_from_version:45423' => 1136,
+ 'old:virtual_from_version:40576' => 1070,
+ 'old:virtual_from_version:49455' => 3008,
+ 'old:virtual_from_version:45272' => 1069,
+ 'old:virtual_from_version:45866' => 1125,
+ 'old:virtual_from_version:49024' => 1125,
+ 'old:virtual_from_version:44190' => 1077,
+ 'old:virtual_from_version:39281' => 1105,
+ 'old:virtual_from_version:47997' => 1077,
+ 'old:virtual_from_version:40244' => 1311,
+ 'old:virtual_from_version:44403' => 1009,
+ 'old:virtual_from_version:47733' => 1070,
+ 'old:virtual_from_version:47817' => 3094,
+ 'old:virtual_from_version:49682' => 1651,
+ 'old:virtual_from_version:49897' => 1070,
+ 'old:virtual_from_version:45686' => 1027,
+ 'old:virtual_from_version:50084' => 1070,
+ 'old:virtual_from_version:39995' => 2010,
+ 'old:virtual_from_version:48018' => 2118,
+ 'old:virtual_from_version:42385' => 1037,
+ 'old:virtual_from_version:50070' => 1172,
+ 'old:virtual_from_version:44770' => 1544,
+ 'old:virtual_from_version:50310' => 1009,
+ 'old:virtual_from_version:40733' => 1009,
+ 'old:virtual_from_version:42743' => 1321,
+ 'old:virtual_from_version:46092' => 1649,
+ 'old:virtual_from_version:43044' => 2001,
+ 'old:virtual_from_version:50478' => 3234,
+ 'old:virtual_from_version:44888' => 1025,
+ 'old:virtual_from_version:40995' => 1125,
+ 'old:virtual_from_version:39517' => 1125,
+ 'old:virtual_from_version:42313' => 1025,
+ 'old:virtual_from_version:45694' => 1070,
+ 'old:virtual_from_version:40843' => 1109,
+ 'old:virtual_from_version:49219' => 1128,
+ 'old:virtual_from_version:42701' => 1009,
+ 'old:virtual_from_version:42002' => 1007,
+ 'old:virtual_from_version:47863' => 1583,
+ 'old:virtual_from_version:50681' => 1584,
+ 'old:virtual_from_version:49818' => 3200,
+ 'old:virtual_from_version:42512' => 1081,
+ 'old:virtual_from_version:42486' => 1077,
+ 'old:virtual_from_version:50244' => 1067,
+ 'old:virtual_from_version:42832' => 1037,
+ 'old:virtual_from_version:42953' => 1037,
+ 'old:virtual_from_version:40717' => 1070,
+ 'old:virtual_from_version:50219' => 1065,
+ 'old:virtual_from_version:49957' => 1489,
+ 'old:virtual_from_version:45404' => 1011,
+ 'old:virtual_from_version:44969' => 1063,
+ 'old:virtual_from_version:42383' => 1025,
+ 'old:virtual_from_version:44108' => 1517,
+ 'old:virtual_from_version:44987' => 1027,
+ 'old:virtual_from_version:45574' => 1136,
+ 'old:virtual_from_version:40216' => 1094,
+ 'old:virtual_from_version:47914' => 1125,
+ 'old:virtual_from_version:46211' => 1661,
+ 'old:virtual_from_version:44768' => 1077,
+ 'old:virtual_from_version:40919' => 1009,
+ 'old:virtual_from_version:45131' => 1125,
+ 'old:virtual_from_version:50128' => 3131,
+ 'old:virtual_from_version:42448' => 1125,
+ 'old:virtual_from_version:42608' => 1009,
+ 'old:virtual_from_version:46720' => 1070,
+ 'old:virtual_from_version:42986' => 1009,
+ 'old:virtual_from_version:47312' => 1109,
+ 'old:virtual_from_version:49920' => 3186,
+ 'old:virtual_from_version:47475' => 1037,
+ 'old:virtual_from_version:38675' => 1006,
+ 'old:virtual_from_version:50482' => 1491,
+ 'old:virtual_from_version:42922' => 1025,
+ 'old:virtual_from_version:47962' => 1067,
+ 'old:virtual_from_version:49131' => 3002,
+ 'old:virtual_from_version:49541' => 1532,
+ 'old:virtual_from_version:47915' => 1037,
+ 'old:virtual_from_version:49551' => 1689,
+ 'old:virtual_from_version:42250' => 1009,
+ 'old:virtual_from_version:45542' => 1532,
+ 'old:virtual_from_version:50451' => 1172,
+ 'old:virtual_from_version:42368' => 1070,
+ 'old:virtual_from_version:46428' => 1070,
+ 'old:virtual_from_version:49445' => 1105,
+ 'old:virtual_from_version:44355' => 1172,
+ 'old:virtual_from_version:45896' => 1125,
+ 'old:virtual_from_version:44543' => 1037,
+ 'old:virtual_from_version:42372' => 1404,
+ 'old:virtual_from_version:44616' => 1077,
+ 'old:virtual_from_version:49270' => 1077,
+ 'old:virtual_from_version:47858' => 1037,
+ 'old:virtual_from_version:44531' => 1533,
+ 'old:virtual_from_version:42080' => 1070,
+ 'old:virtual_from_version:46889' => 1125,
+ 'old:virtual_from_version:49243' => 3158,
+ 'old:virtual_from_version:50638' => 1105,
+ 'old:virtual_from_version:45243' => 1078,
+ 'old:virtual_from_version:44525' => 1070,
+ 'old:virtual_from_version:49966' => 1070,
+ 'old:virtual_from_version:42319' => 1077,
+ 'old:virtual_from_version:40984' => 1415,
+ 'old:virtual_from_version:42482' => 1067,
+ 'old:virtual_from_version:44694' => 1538,
+ 'old:virtual_from_version:47671' => 1077,
+ 'old:virtual_from_version:47865' => 1585,
+ 'old:virtual_from_version:47675' => 1077,
+ 'old:virtual_from_version:46492' => 1686,
+ 'old:virtual_from_version:46218' => 1070,
+ 'old:virtual_from_version:44483' => 1037,
+ 'old:virtual_from_version:49045' => 1404,
+ 'old:virtual_from_version:49244' => 1070,
+ 'old:virtual_from_version:45036' => 1019,
+ 'old:virtual_from_version:42693' => 1032,
+ 'old:virtual_from_version:49958' => 3131,
+ 'old:virtual_from_version:46097' => 1077,
+ 'old:virtual_from_version:37419' => 1038,
+ 'old:virtual_from_version:49709' => 1086,
+ 'old:virtual_from_version:42386' => 1404,
+ 'old:virtual_from_version:47690' => 1070,
+ 'old:virtual_from_version:40740' => 1222,
+ 'old:virtual_from_version:46986' => 3008,
+ 'old:virtual_from_version:47001' => 1125,
+ 'old:virtual_from_version:38955' => 1006,
+ 'old:virtual_from_version:46660' => 1070,
+ 'old:virtual_from_version:42676' => 1037,
+ 'old:virtual_from_version:44618' => 1109,
+ 'old:virtual_from_version:39242' => 1035,
+ 'old:virtual_from_version:47297' => 1616,
+ 'old:virtual_from_version:46832' => 1048,
+ 'old:virtual_from_version:44764' => 1009,
+ 'old:virtual_from_version:40259' => 1067,
+ 'old:virtual_from_version:42169' => 1037,
+ 'old:virtual_from_version:42686' => 1070,
+ 'old:virtual_from_version:46268' => 1517,
+ 'old:virtual_from_version:45899' => 1125,
+ 'old:virtual_from_version:46592' => 1070,
+ 'old:virtual_from_version:50075' => 1172,
+ 'old:virtual_from_version:40973' => 1070,
+ 'old:virtual_from_version:38378' => 1009,
+ 'old:virtual_from_version:42012' => 1077,
+ 'old:virtual_from_version:50049' => 1689,
+ 'old:virtual_from_version:47752' => 1077,
+ 'old:virtual_from_version:50637' => 1128,
+ 'old:virtual_from_version:40617' => 1070,
+ 'old:virtual_from_version:49810' => 1006,
+ 'old:virtual_from_version:38662' => 1404,
+ 'old:virtual_from_version:49394' => 1070,
+ 'old:virtual_from_version:40719' => 1081,
+ 'old:virtual_from_version:42920' => 1048,
+ 'old:virtual_from_version:40542' => 1077,
+ 'old:virtual_from_version:49234' => 1532,
+ 'old:virtual_from_version:45216' => 1571,
+ 'old:virtual_from_version:45478' => 1077,
+ 'old:virtual_from_version:47044' => 3017,
+ 'old:virtual_from_version:49347' => 1404,
+ 'old:virtual_from_version:42006' => 1037,
+ 'old:virtual_from_version:47959' => 1649,
+ 'old:virtual_from_version:39103' => 1144,
+ 'old:virtual_from_version:42234' => 1077,
+ 'old:virtual_from_version:46537' => 1070,
+ 'old:virtual_from_version:50424' => 3131,
+ 'old:virtual_from_version:49670' => 1689,
+ 'old:virtual_from_version:44665' => 1037,
+ 'old:virtual_from_version:49189' => 1404,
+ 'old:virtual_from_version:42650' => 1484,
+ 'old:virtual_from_version:40718' => 1077,
+ 'old:virtual_from_version:47953' => 1107,
+ 'old:virtual_from_version:40430' => 1009,
+ 'old:virtual_from_version:49076' => 1083,
+ 'old:virtual_from_version:50373' => 1032,
+ 'old:virtual_from_version:50379' => 1689,
+ 'old:virtual_from_version:45401' => 1136,
+ 'old:virtual_from_version:42933' => 1070,
+ 'old:virtual_from_version:49129' => 1585,
+ 'old:virtual_from_version:44001' => 1070,
+ 'old:virtual_from_version:50446' => 3189,
+ 'old:virtual_from_version:45486' => 1136,
+ 'old:virtual_from_version:45763' => 1077,
+ 'old:virtual_from_version:40702' => 1081,
+ 'old:virtual_from_version:40613' => 1109,
+ 'old:virtual_from_version:50030' => 3131,
+ 'old:virtual_from_version:46243' => 1009,
+ 'old:virtual_from_version:38918' => 1077,
+ 'old:virtual_from_version:13305' => 1063,
+ 'old:virtual_from_version:49044' => 1077,
+ 'old:virtual_from_version:46970' => 1077,
+ 'old:virtual_from_version:39902' => 1125,
+ 'old:virtual_from_version:46923' => 1109,
+ 'old:virtual_from_version:49701' => 1037,
+ 'old:virtual_from_version:46338' => 1110,
+ 'old:virtual_from_version:42136' => 1070,
+ 'old:virtual_from_version:45242' => 1065,
+ 'old:virtual_from_version:39604' => 1109,
+ 'old:virtual_from_version:45677' => 1125,
+ 'old:virtual_from_version:47778' => 1037,
+ 'old:virtual_from_version:46733' => 1077,
+ 'old:virtual_from_version:47564' => 1537,
+ 'old:virtual_from_version:44379' => 1022,
+ 'old:virtual_from_version:49943' => 1150,
+ 'old:virtual_from_version:44021' => 1037,
+ 'old:virtual_from_version:49015' => 1070,
+ 'old:virtual_from_version:47694' => 1070,
+ 'old:virtual_from_version:47091' => 1070,
+ 'old:virtual_from_version:13426' => 1067,
+ 'old:virtual_from_version:47439' => 1621,
+ 'old:virtual_from_version:46784' => 1070,
+ 'old:virtual_from_version:44631' => 1136,
+ 'old:virtual_from_version:46801' => 1659,
+ 'old:virtual_from_version:44477' => 1070,
+ 'old:virtual_from_version:50551' => 1125,
+ 'old:virtual_from_version:45425' => 1070,
+ 'old:virtual_from_version:40305' => 1112,
+ 'old:virtual_from_version:45770' => 1012,
+ 'old:virtual_from_version:40734' => 1016,
+ 'old:virtual_from_version:47017' => 1112,
+ 'old:virtual_from_version:50352' => 1070,
+ 'old:virtual_from_version:44313' => 1037,
+ 'old:virtual_from_version:42338' => 1404,
+ 'old:virtual_from_version:42017' => 1009,
+ 'old:virtual_from_version:49878' => 1314,
+ 'old:virtual_from_version:50083' => 3222,
+ 'old:virtual_from_version:50508' => 1035,
+ 'old:virtual_from_version:49644' => 3186,
+ 'old:virtual_from_version:44451' => 1530,
+ 'old:virtual_from_version:40706' => 1077,
+ 'old:virtual_from_version:45010' => 1150,
+ 'old:virtual_from_version:44457' => 1107,
+ 'old:virtual_from_version:46905' => 1070,
+ 'old:virtual_from_version:47785' => 1070,
+ 'old:virtual_from_version:46321' => 1077,
+ 'old:virtual_from_version:44852' => 1048,
+ 'old:virtual_from_version:44508' => 1321,
+ 'old:virtual_from_version:45055' => 1065,
+ 'old:virtual_from_version:39997' => 1035,
+ 'old:virtual_from_version:42029' => 1222,
+ 'old:virtual_from_version:42663' => 1009,
+ 'old:virtual_from_version:46657' => 1077,
+ 'old:virtual_from_version:46896' => 1353,
+ 'old:virtual_from_version:42507' => 1077,
+ 'old:virtual_from_version:45259' => 1048,
+ 'old:virtual_from_version:42188' => 1172,
+ 'old:virtual_from_version:48019' => 2119,
+ 'old:virtual_from_version:42209' => 1025,
+ 'old:virtual_from_version:46880' => 1397,
+ 'old:virtual_from_version:50465' => 1070,
+ 'old:virtual_from_version:49739' => 1583,
+ 'old:virtual_from_version:45371' => 1314,
+ 'old:virtual_from_version:46171' => 1537,
+ 'old:virtual_from_version:46810' => 1067,
+ 'old:virtual_from_version:45059' => 1067,
+ 'old:virtual_from_version:50217' => 3227,
+ 'old:virtual_from_version:39354' => 1115,
+ 'old:virtual_from_version:49157' => 1070,
+ 'old:virtual_from_version:44322' => 1125,
+ 'old:virtual_from_version:42746' => 1077,
+ 'old:virtual_from_version:45687' => 1615,
+ 'old:virtual_from_version:50597' => 1070,
+ 'old:virtual_from_version:42479' => 1025,
+ 'old:virtual_from_version:49339' => 3136,
+ 'old:virtual_from_version:46926' => 1070,
+ 'old:virtual_from_version:42605' => 1484,
+ 'old:virtual_from_version:42105' => 1077,
+ 'old:virtual_from_version:49476' => 1070,
+ 'old:virtual_from_version:40692' => 1016,
+ 'old:virtual_from_version:49496' => 1507,
+ 'old:virtual_from_version:47003' => 1077,
+ 'old:virtual_from_version:45792' => 1023,
+ 'old:virtual_from_version:50453' => 1150,
+ 'old:virtual_from_version:44890' => 1000,
+ 'old:virtual_from_version:47232' => 1109,
+ 'old:virtual_from_version:46702' => 1009,
+ 'old:virtual_from_version:44378' => 1517,
+ 'old:virtual_from_version:42582' => 1172,
+ 'old:virtual_from_version:46247' => 1077,
+ 'old:virtual_from_version:45161' => 1009,
+ 'old:virtual_from_version:42262' => 1077,
+ 'old:virtual_from_version:44521' => 1067,
+ 'old:virtual_from_version:44338' => 1070,
+ 'old:virtual_from_version:49802' => 3191,
+ 'old:virtual_from_version:47624' => 1084,
+ 'old:virtual_from_version:42423' => 1070,
+ 'old:virtual_from_version:46511' => 1125,
+ 'old:virtual_from_version:46817' => 1070,
+ 'old:virtual_from_version:44284' => 1067,
+ 'old:virtual_from_version:30037' => 1036,
+ 'old:virtual_from_version:50325' => 3237,
+ 'old:virtual_from_version:47149' => 3022,
+ 'old:virtual_from_version:47900' => 1583,
+ 'old:virtual_from_version:46573' => 1077,
+ 'old:virtual_from_version:50411' => 3131,
+ 'old:virtual_from_version:46419' => 1070,
+ 'old:virtual_from_version:38247' => 1025,
+ 'old:virtual_from_version:44690' => 1077,
+ 'old:virtual_from_version:42644' => 1062,
+ 'old:virtual_from_version:38625' => 1125,
+ 'old:virtual_from_version:46666' => 1077,
+ 'old:virtual_from_version:40397' => 1347,
+ 'old:virtual_from_version:39628' => 1012,
+ 'old:virtual_from_version:46331' => 1107,
+ 'old:virtual_from_version:40963' => 1077,
+ 'old:virtual_from_version:46809' => 1070,
+ 'old:virtual_from_version:44106' => 1070,
+ 'old:virtual_from_version:42186' => 1062,
+ 'old:virtual_from_version:49856' => 3131,
+ 'old:virtual_from_version:47556' => 3062,
+ 'old:virtual_from_version:45382' => 1404,
+ 'old:virtual_from_version:46890' => 1067,
+ 'old:virtual_from_version:45818' => 1009,
+ 'old:virtual_from_version:50045' => 3131,
+ 'old:virtual_from_version:50016' => 1100,
+ 'old:virtual_from_version:45003' => 1012,
+ 'old:virtual_from_version:43053' => 2055,
+ 'old:virtual_from_version:45459' => 1109,
+ 'old:virtual_from_version:42689' => 1037,
+ 'old:virtual_from_version:49478' => 1580,
+ 'old:virtual_from_version:42476' => 1070,
+ 'old:virtual_from_version:45717' => 1070,
+ 'old:virtual_from_version:42211' => 1037,
+ 'old:virtual_from_version:44840' => 1009,
+ 'old:virtual_from_version:50601' => 1417,
+ 'old:virtual_from_version:45468' => 1009,
+ 'old:virtual_from_version:42473' => 1105,
+ 'old:virtual_from_version:46330' => 1070,
+ 'old:virtual_from_version:47960' => 1070,
+ 'old:virtual_from_version:38682' => 1404,
+ 'old:virtual_from_version:49560' => 1025,
+ 'old:virtual_from_version:46582' => 1125,
+ 'old:virtual_from_version:42101' => 1070,
+ 'old:virtual_from_version:46508' => 1583,
+ 'old:virtual_from_version:46610' => 1172,
+ 'old:virtual_from_version:50553' => 1070,
+ 'old:virtual_from_version:47056' => 1077,
+ 'old:virtual_from_version:46687' => 1172,
+ 'old:virtual_from_version:47258' => 1587,
+ 'old:virtual_from_version:50617' => 1417,
+ 'old:virtual_from_version:47701' => 1125,
+ 'old:virtual_from_version:40096' => 1067,
+ 'old:virtual_from_version:46861' => 1070,
+ 'old:virtual_from_version:42391' => 1025,
+ 'old:virtual_from_version:44186' => 1107,
+ 'old:virtual_from_version:49218' => 1077,
+ 'old:virtual_from_version:40624' => 1067,
+ 'old:virtual_from_version:42114' => 1070,
+ 'old:virtual_from_version:47530' => 1404,
+ 'old:virtual_from_version:49835' => 3131,
+ 'old:virtual_from_version:47094' => 1009,
+ 'old:virtual_from_version:40877' => 1070,
+ 'old:virtual_from_version:45934' => 1077,
+ 'old:virtual_from_version:44926' => 1067,
+ 'old:virtual_from_version:45884' => 1077,
+ 'old:virtual_from_version:38833' => 1109,
+ 'old:virtual_from_version:49462' => 1580,
+ 'old:virtual_from_version:42016' => 1070,
+ 'old:virtual_from_version:46153' => 1404,
+ 'old:virtual_from_version:40608' => 1381,
+ 'old:virtual_from_version:49882' => 1069,
+ 'old:virtual_from_version:44212' => 1026,
+ 'old:virtual_from_version:40110' => 1009,
+ 'old:virtual_from_version:40910' => 1037,
+ 'old:virtual_from_version:49798' => 1100,
+ 'old:virtual_from_version:42634' => 1037,
+ 'old:virtual_from_version:45477' => 1025,
+ 'old:virtual_from_version:49238' => 1615,
+ 'old:virtual_from_version:49924' => 3186,
+ 'old:virtual_from_version:44275' => 1110,
+ 'old:virtual_from_version:42167' => 1417,
+ 'old:virtual_from_version:49515' => 1105,
+ 'old:virtual_from_version:47662' => 1077,
+ 'old:virtual_from_version:50581' => 1031,
+ 'old:virtual_from_version:40855' => 1070,
+ 'old:virtual_from_version:44965' => 1007,
+ 'old:virtual_from_version:42138' => 1009,
+ 'old:virtual_from_version:43005' => 2030,
+ 'old:virtual_from_version:45342' => 1172,
+ 'old:virtual_from_version:49003' => 1077,
+ 'old:virtual_from_version:50733' => 1006,
+ 'old:virtual_from_version:42751' => 1009,
+ 'old:virtual_from_version:46607' => 1537,
+ 'old:virtual_from_version:44929' => 1070,
+ 'old:virtual_from_version:49228' => 1404,
+ 'old:virtual_from_version:44805' => 1172,
+ 'old:virtual_from_version:44781' => 1077,
+ 'old:virtual_from_version:50350' => 3131,
+ 'old:virtual_from_version:49785' => 1689,
+ 'old:virtual_from_version:42584' => 1008,
+ 'old:virtual_from_version:38347' => 1013,
+ 'old:virtual_from_version:46738' => 1025,
+ 'old:virtual_from_version:41009' => 2020,
+ 'old:virtual_from_version:45082' => 1528,
+ 'old:virtual_from_version:50154' => 1070,
+ 'old:virtual_from_version:50409' => 1585,
+ 'old:virtual_from_version:45754' => 1125,
+ 'old:virtual_from_version:45605' => 1110,
+ 'old:virtual_from_version:49414' => 1109,
+ 'old:virtual_from_version:47100' => 1689,
+ 'old:virtual_from_version:49460' => 1172,
+ 'old:virtual_from_version:44760' => 1009,
+ 'old:virtual_from_version:49576' => 1533,
+ 'old:virtual_from_version:50735' => 1417,
+ 'old:virtual_from_version:44062' => 1077,
+ 'old:virtual_from_version:40403' => 1353,
+ 'old:virtual_from_version:45031' => 1012,
+ 'old:virtual_from_version:47695' => 1109,
+ 'old:virtual_from_version:47329' => 1077,
+ 'old:virtual_from_version:47799' => 1321,
+ 'old:virtual_from_version:40978' => 1048,
+ 'old:virtual_from_version:40386' => 1110,
+ 'old:virtual_from_version:46445' => 1105,
+ 'old:virtual_from_version:49566' => 1381,
+ 'old:virtual_from_version:44024' => 1077,
+ 'old:virtual_from_version:49174' => 1404,
+ 'old:virtual_from_version:42202' => 1077,
+ 'old:virtual_from_version:42278' => 1077,
+ 'old:virtual_from_version:49935' => 1070,
+ 'old:virtual_from_version:46041' => 1488,
+ 'old:virtual_from_version:45482' => 1125,
+ 'old:virtual_from_version:46822' => 1509,
+ 'old:virtual_from_version:43016' => 2041,
+ 'old:virtual_from_version:42179' => 1107,
+ 'old:virtual_from_version:44800' => 1321,
+ 'old:virtual_from_version:42912' => 1035,
+ 'old:virtual_from_version:42567' => 1025,
+ 'old:virtual_from_version:45237' => 1172,
+ 'old:virtual_from_version:50415' => 1037,
+ 'old:virtual_from_version:50166' => 1404,
+ 'old:virtual_from_version:50280' => 1107,
+ 'old:virtual_from_version:45539' => 1025,
+ 'old:virtual_from_version:49232' => 1105,
+ 'old:virtual_from_version:47961' => 1109,
+ 'old:virtual_from_version:46426' => 1077,
+ 'old:virtual_from_version:40942' => 1077,
+ 'old:virtual_from_version:47731' => 1565,
+ 'old:virtual_from_version:46634' => 1070,
+ 'old:virtual_from_version:49603' => 1172,
+ 'old:virtual_from_version:50535' => 1084,
+ 'old:virtual_from_version:46804' => 1125,
+ 'old:virtual_from_version:42759' => 1070,
+ 'old:virtual_from_version:45057' => 1048,
+ 'old:virtual_from_version:3905 ' => 1052,
+ 'old:virtual_from_version:44082' => 1070,
+ 'old:virtual_from_version:38434' => 1114,
+ 'old:virtual_from_version:46551' => 1172,
+ 'old:virtual_from_version:40688' => 1076,
+ 'old:virtual_from_version:45789' => 1070,
+ 'old:virtual_from_version:46773' => 1077,
+ 'old:virtual_from_version:43023' => 2048,
+ 'old:virtual_from_version:44375' => 1019,
+ 'old:virtual_from_version:46176' => 1537,
+ 'old:virtual_from_version:45391' => 1051,
+ 'old:virtual_from_version:42481' => 1037,
+ 'old:virtual_from_version:47405' => 1070,
+ 'old:virtual_from_version:50289' => 3222,
+ 'old:virtual_from_version:45854' => 1517,
+ 'old:virtual_from_version:45640' => 1136,
+ 'old:virtual_from_version:49470' => 1136,
+ 'old:virtual_from_version:44224' => 1037,
+ 'old:virtual_from_version:44973' => 1030,
+ 'old:virtual_from_version:50755' => 1070,
+ 'old:virtual_from_version:44242' => 1037,
+ 'old:virtual_from_version:46196' => 1070,
+ 'old:virtual_from_version:44941' => 1005,
+ 'old:virtual_from_version:47075' => 3008,
+ 'old:virtual_from_version:45218' => 1573,
+ 'old:virtual_from_version:50116' => 3191,
+ 'old:virtual_from_version:46170' => 1077,
+ 'old:virtual_from_version:47692' => 1025,
+ 'old:virtual_from_version:46450' => 1048,
+ 'old:virtual_from_version:50444' => 3245,
+ 'old:virtual_from_version:40722' => 1009,
+ 'old:virtual_from_version:50518' => 1311,
+ 'old:virtual_from_version:49472' => 1009,
+ 'old:virtual_from_version:49142' => 1077,
+ 'old:virtual_from_version:46337' => 1070,
+ 'old:virtual_from_version:44426' => 1065,
+ 'old:virtual_from_version:49139' => 1077,
+ 'old:virtual_from_version:45784' => 1029,
+ 'old:virtual_from_version:50662' => 1407,
+ 'old:virtual_from_version:45873' => 1009,
+ 'old:virtual_from_version:49572' => 1158,
+ 'old:virtual_from_version:47869' => 1141,
+ 'old:virtual_from_version:50357' => 1125,
+ 'old:virtual_from_version:49172' => 1172,
+ 'old:virtual_from_version:47644' => 1584,
+ 'old:virtual_from_version:50108' => 1158,
+ 'old:virtual_from_version:42436' => 1025,
+ 'old:virtual_from_version:46267' => 1077,
+ 'old:virtual_from_version:31197' => 1037,
+ 'old:virtual_from_version:46587' => 1006,
+ 'old:virtual_from_version:49712' => 1107,
+ 'old:virtual_from_version:42387' => 1172,
+ 'old:virtual_from_version:42596' => 1067,
+ 'old:virtual_from_version:45828' => 1125,
+ 'old:virtual_from_version:44111' => 1037,
+ 'old:virtual_from_version:40492' => 1037,
+ 'old:virtual_from_version:42534' => 1109,
+ 'old:virtual_from_version:42875' => 1146,
+ 'old:virtual_from_version:47319' => 1659,
+ 'old:virtual_from_version:42166' => 1009,
+ 'old:virtual_from_version:43091' => 2070,
+ 'old:virtual_from_version:50031' => 1007,
+ 'old:virtual_from_version:44134' => 1107,
+ 'old:virtual_from_version:46824' => 1070,
+ 'old:virtual_from_version:40761' => 1077,
+ 'old:virtual_from_version:46269' => 1574,
+ 'old:virtual_from_version:46919' => 1009,
+ 'old:virtual_from_version:46844' => 1172,
+ 'old:virtual_from_version:49180' => 1584,
+ 'old:virtual_from_version:49288' => 3151,
+ 'old:virtual_from_version:47396' => 1037,
+ 'old:virtual_from_version:46997' => 1626,
+ 'old:virtual_from_version:42641' => 1025,
+ 'old:virtual_from_version:45217' => 1572,
+ 'old:virtual_from_version:47722' => 1077,
+ 'old:virtual_from_version:50368' => 1689,
+ 'old:virtual_from_version:50486' => 3234,
+ 'old:virtual_from_version:40575' => 1109,
+ 'old:virtual_from_version:46847' => 1125,
+ 'old:virtual_from_version:47586' => 1125,
+ 'old:virtual_from_version:42182' => 1125,
+ 'old:virtual_from_version:46981' => 1077,
+ 'old:virtual_from_version:42355' => 1051,
+ 'old:virtual_from_version:49893' => 3131,
+ 'old:virtual_from_version:49341' => 1070,
+ 'old:virtual_from_version:42903' => 1077,
+ 'old:virtual_from_version:42991' => 1037,
+ 'old:virtual_from_version:45573' => 1172,
+ 'old:virtual_from_version:50591' => 1070,
+ 'old:virtual_from_version:42977' => 1109,
+ 'old:virtual_from_version:42817' => 1037,
+ 'old:virtual_from_version:42158' => 1070,
+ 'old:virtual_from_version:45450' => 1009,
+ 'old:virtual_from_version:44643' => 1070,
+ 'old:virtual_from_version:50429' => 1076,
+ 'old:virtual_from_version:38535' => 1070,
+ 'old:virtual_from_version:47888' => 1070,
+ 'old:virtual_from_version:38885' => 1136,
+ 'old:virtual_from_version:50195' => 1070,
+ 'old:virtual_from_version:46185' => 1070,
+ 'old:virtual_from_version:45872' => 1067,
+ 'old:virtual_from_version:46026' => 1077,
+ 'old:virtual_from_version:50635' => 3269,
+ 'old:virtual_from_version:49824' => 3120,
+ 'old:virtual_from_version:42329' => 1051,
+ 'old:virtual_from_version:47081' => 1585,
+ 'old:virtual_from_version:45705' => 1077,
+ 'old:virtual_from_version:47456' => 1321,
+ 'old:virtual_from_version:38841' => 1094,
+ 'old:virtual_from_version:49917' => 3131,
+ 'old:virtual_from_version:46427' => 1537,
+ 'old:virtual_from_version:50603' => 1587,
+ 'old:virtual_from_version:47438' => 1381,
+ 'old:virtual_from_version:50511' => 3247,
+ 'old:virtual_from_version:40286' => 1172,
+ 'old:virtual_from_version:42670' => 1037,
+ 'old:virtual_from_version:42074' => 1110,
+ 'old:virtual_from_version:38442' => 1404,
+ 'old:virtual_from_version:44452' => 1527,
+ 'old:virtual_from_version:40566' => 1070,
+ 'old:virtual_from_version:49773' => 3197,
+ 'old:virtual_from_version:50546' => 3201,
+ 'old:virtual_from_version:45043' => 1027,
+ 'old:virtual_from_version:42709' => 1009,
+ 'old:virtual_from_version:39312' => 1070,
+ 'old:virtual_from_version:46924' => 1077,
+ 'old:virtual_from_version:42766' => 1107,
+ 'old:virtual_from_version:50731' => 1070,
+ 'old:virtual_from_version:46669' => 1077,
+ 'old:virtual_from_version:45231' => 1576,
+ 'old:virtual_from_version:35686' => 1101,
+ 'old:virtual_from_version:44592' => 1107,
+ 'old:virtual_from_version:47811' => 3094,
+ 'old:virtual_from_version:46112' => 1077,
+ 'old:virtual_from_version:49312' => 1150,
+ 'old:virtual_from_version:49645' => 3183,
+ 'old:virtual_from_version:44887' => 1009,
+ 'old:virtual_from_version:49501' => 1125,
+ 'old:virtual_from_version:49466' => 1009,
+ 'old:virtual_from_version:42671' => 1488,
+ 'old:virtual_from_version:50717' => 1105,
+ 'old:virtual_from_version:40883' => 1067,
+ 'old:virtual_from_version:13410' => 1065,
+ 'old:virtual_from_version:50401' => 3227,
+ 'old:virtual_from_version:49753' => 3194,
+ 'old:virtual_from_version:46564' => 1077,
+ 'old:virtual_from_version:39371' => 1144,
+ 'old:virtual_from_version:49173' => 1077,
+ 'old:virtual_from_version:46433' => 1025,
+ 'old:virtual_from_version:44250' => 1025,
+ 'old:virtual_from_version:50131' => 1172,
+ 'old:virtual_from_version:46236' => 1574,
+ 'old:virtual_from_version:44433' => 1070,
+ 'old:virtual_from_version:44368' => 1010,
+ 'old:virtual_from_version:47562' => 1077,
+ 'old:virtual_from_version:46114' => 1461,
+ 'old:virtual_from_version:44092' => 1067,
+ 'old:virtual_from_version:42895' => 1109,
+ 'old:virtual_from_version:46221' => 1070,
+ 'old:virtual_from_version:49179' => 1583,
+ 'old:virtual_from_version:44563' => 1077,
+ 'old:virtual_from_version:49404' => 1105,
+ 'old:virtual_from_version:42837' => 1497,
+ 'old:virtual_from_version:46831' => 1110,
+ 'old:virtual_from_version:40703' => 1070,
+ 'old:virtual_from_version:50701' => 3272,
+ 'old:virtual_from_version:50575' => 1125,
+ 'old:virtual_from_version:44638' => 1009,
+ 'old:virtual_from_version:50665' => 1555,
+ 'old:virtual_from_version:42976' => 1037,
+ 'old:virtual_from_version:49436' => 1580,
+ 'old:virtual_from_version:42034' => 1112,
+ 'old:virtual_from_version:44046' => 1009,
+ 'old:virtual_from_version:47611' => 1070,
+ 'old:virtual_from_version:49622' => 1532,
+ 'old:virtual_from_version:50365' => 3240,
+ 'old:virtual_from_version:44419' => 1077,
+ 'old:virtual_from_version:47150' => 3028,
+ 'old:virtual_from_version:50670' => 3208,
+ 'old:virtual_from_version:49323' => 3136,
+ 'old:virtual_from_version:45612' => 1172,
+ 'old:virtual_from_version:46843' => 1067,
+ 'old:virtual_from_version:47661' => 1109,
+ 'old:virtual_from_version:44091' => 1109,
+ 'old:virtual_from_version:44947' => 1094,
+ 'old:virtual_from_version:50541' => 1580,
+ 'old:virtual_from_version:46914' => 3007,
+ 'old:virtual_from_version:50530' => 1125,
+ 'old:virtual_from_version:40886' => 1070,
+ 'old:virtual_from_version:50322' => 1311,
+ 'old:virtual_from_version:42457' => 1035,
+ 'old:virtual_from_version:42220' => 1077,
+ 'old:virtual_from_version:44096' => 1077,
+ 'old:virtual_from_version:46524' => 1107,
+ 'old:virtual_from_version:50006' => 3131,
+ 'old:virtual_from_version:45883' => 1009,
+ 'old:virtual_from_version:42362' => 1070,
+ 'old:virtual_from_version:42892' => 1025,
+ 'old:virtual_from_version:42472' => 1048,
+ 'old:virtual_from_version:45393' => 1404,
+ 'old:virtual_from_version:43054' => 2056,
+ 'old:virtual_from_version:49850' => 1172,
+ 'old:virtual_from_version:44191' => 1037,
+ 'old:virtual_from_version:42764' => 1494,
+ 'old:virtual_from_version:47029' => 3008,
+ 'old:virtual_from_version:46367' => 1444,
+ 'old:virtual_from_version:42295' => 1427,
+ 'old:virtual_from_version:46562' => 1125,
+ 'old:virtual_from_version:46530' => 1091,
+ 'old:virtual_from_version:50507' => 3261,
+ 'old:virtual_from_version:45441' => 1062,
+ 'old:virtual_from_version:44318' => 1520,
+ 'old:virtual_from_version:46195' => 1630,
+ 'old:virtual_from_version:50604' => 1689,
+ 'old:virtual_from_version:44358' => 1125,
+ 'old:virtual_from_version:47306' => 3042,
+ 'old:virtual_from_version:44494' => 1070,
+ 'old:virtual_from_version:45544' => 1076,
+ 'old:virtual_from_version:45718' => 1007,
+ 'old:virtual_from_version:47455' => 3043,
+ 'old:virtual_from_version:49635' => 3139,
+ 'old:virtual_from_version:40711' => 1025,
+ 'old:virtual_from_version:45463' => 1404,
+ 'old:virtual_from_version:45903' => 1632,
+ 'old:virtual_from_version:50118' => 1070,
+ 'old:virtual_from_version:45700' => 1019,
+ 'old:virtual_from_version:43062' => 2063,
+ 'old:virtual_from_version:46279' => 1077,
+ 'old:virtual_from_version:49274' => 1077,
+ 'old:virtual_from_version:40791' => 1370,
+ 'old:virtual_from_version:49787' => 3194,
+ 'old:virtual_from_version:40861' => 1070,
+ 'old:virtual_from_version:42439' => 1037,
+ 'old:virtual_from_version:50129' => 3224,
+ 'old:virtual_from_version:47592' => 1077,
+ 'old:virtual_from_version:42974' => 1025,
+ 'old:virtual_from_version:46160' => 1659,
+ 'old:virtual_from_version:50073' => 3221,
+ 'old:virtual_from_version:49050' => 1689,
+ 'old:virtual_from_version:42651' => 1487,
+ 'old:virtual_from_version:46525' => 1048,
+ 'old:virtual_from_version:44502' => 1009,
+ 'old:virtual_from_version:42798' => 1110,
+ 'old:virtual_from_version:47126' => 1444,
+ 'old:virtual_from_version:45006' => 1077,
+ 'old:virtual_from_version:40287' => 1107,
+ 'old:virtual_from_version:39235' => 1061,
+ 'old:virtual_from_version:44894' => 1125,
+ 'old:virtual_from_version:42297' => 1429,
+ 'old:virtual_from_version:10003' => 2002,
+ 'old:virtual_from_version:49201' => 1070,
+ 'old:virtual_from_version:47092' => 1125,
+ 'old:virtual_from_version:49574' => 1158,
+ 'old:virtual_from_version:46109' => 1077,
+ 'old:virtual_from_version:47127' => 1585,
+ 'old:virtual_from_version:42384' => 1077,
+ 'old:virtual_from_version:43050' => 2020,
+ 'old:virtual_from_version:45881' => 1630,
+ 'old:virtual_from_version:40642' => 1393,
+ 'old:virtual_from_version:47241' => 1109,
+ 'old:virtual_from_version:46072' => 1077,
+ 'old:virtual_from_version:45037' => 1115,
+ 'old:virtual_from_version:39709' => 1110,
+ 'old:virtual_from_version:44463' => 1048,
+ 'old:virtual_from_version:42455' => 1114,
+ 'old:virtual_from_version:45134' => 1009,
+ 'old:virtual_from_version:38631' => 1126,
+ 'old:virtual_from_version:47464' => 3008,
+ 'old:virtual_from_version:47909' => 3006,
+ 'old:virtual_from_version:50146' => 3058,
+ 'old:virtual_from_version:47104' => 1077,
+ 'old:virtual_from_version:50655' => 1555,
+ 'old:virtual_from_version:49717' => 1006,
+ 'old:virtual_from_version:49206' => 1136,
+ 'old:virtual_from_version:50724' => 1666,
+ 'old:virtual_from_version:45551' => 1077,
+ 'old:virtual_from_version:49735' => 3194,
+ 'old:virtual_from_version:47177' => 1638,
+ 'old:virtual_from_version:46910' => 1077,
+ 'old:virtual_from_version:44314' => 1062,
+ 'old:virtual_from_version:46025' => 1067,
+ 'old:virtual_from_version:46745' => 1070,
+ 'old:virtual_from_version:50215' => 3131,
+ 'old:virtual_from_version:46103' => 1077,
+ 'old:virtual_from_version:42463' => 1009,
+ 'old:virtual_from_version:42053' => 1110,
+ 'old:virtual_from_version:46770' => 1070,
+ 'old:virtual_from_version:39952' => 1107,
+ 'old:virtual_from_version:49726' => 1404,
+ 'old:virtual_from_version:42204' => 1070,
+ 'old:virtual_from_version:49883' => 1444,
+ 'old:virtual_from_version:50305' => 1067,
+ 'old:virtual_from_version:47892' => 1699,
+ 'old:virtual_from_version:45631' => 1136,
+ 'old:virtual_from_version:50547' => 3227,
+ 'old:virtual_from_version:42496' => 1067,
+ 'old:virtual_from_version:49299' => 3008,
+ 'old:virtual_from_version:42279' => 1037,
+ 'old:virtual_from_version:47842' => 3094,
+ 'old:virtual_from_version:40568' => 1077,
+ 'old:virtual_from_version:49289' => 3146,
+ 'old:virtual_from_version:47896' => 1125,
+ 'old:virtual_from_version:50550' => 3259,
+ 'old:virtual_from_version:50460' => 1580,
+ 'old:virtual_from_version:44487' => 1007,
+ 'old:virtual_from_version:45087' => 1565,
+ 'old:virtual_from_version:42394' => 1067,
+ 'old:virtual_from_version:50019' => 3131,
+ 'old:virtual_from_version:44702' => 1037,
+ 'old:virtual_from_version:49536' => 1105,
+ 'old:virtual_from_version:45514' => 1077,
+ 'old:virtual_from_version:44437' => 1109,
+ 'old:virtual_from_version:38857' => 1404,
+ 'old:virtual_from_version:42923' => 1077,
+ 'old:virtual_from_version:40989' => 1037,
+ 'old:virtual_from_version:42161' => 1057,
+ 'old:virtual_from_version:47539' => 1077,
+ 'old:virtual_from_version:49654' => 1489,
+ 'old:virtual_from_version:47596' => 1125,
+ 'old:virtual_from_version:46931' => 1105,
+ 'old:virtual_from_version:39706' => 1077,
+ 'old:virtual_from_version:39537' => 1172,
+ 'old:virtual_from_version:46425' => 1112,
+ 'old:virtual_from_version:49981' => 1314,
+ 'old:virtual_from_version:46697' => 1077,
+ 'old:virtual_from_version:45834' => 1621,
+ 'old:virtual_from_version:39274' => 1107,
+ 'old:virtual_from_version:49642' => 1069,
+ 'old:virtual_from_version:44689' => 1025,
+ 'old:virtual_from_version:47382' => 1125,
+ 'old:virtual_from_version:46095' => 1136,
+ 'old:virtual_from_version:46216' => 1077,
+ 'old:virtual_from_version:47039' => 1070,
+ 'old:virtual_from_version:46677' => 1070,
+ 'old:virtual_from_version:42834' => 1418,
+ 'old:virtual_from_version:49618' => 3184,
+ 'old:virtual_from_version:49806' => 3131,
+ 'old:virtual_from_version:40514' => 1048,
+ 'old:virtual_from_version:47059' => 1065,
+ 'old:virtual_from_version:45086' => 1077,
+ 'old:virtual_from_version:45885' => 1070,
+ 'old:virtual_from_version:46848' => 1067,
+ 'old:virtual_from_version:49122' => 1105,
+ 'old:virtual_from_version:46819' => 1077,
+ 'old:virtual_from_version:29531' => 1083,
+ 'old:virtual_from_version:45380' => 1009,
+ 'old:virtual_from_version:40737' => 1081,
+ 'old:virtual_from_version:47276' => 1689,
+ 'old:virtual_from_version:45931' => 1070,
+ 'old:virtual_from_version:44559' => 1037,
+ 'old:virtual_from_version:45796' => 1027,
+ 'old:virtual_from_version:43018' => 2043,
+ 'old:virtual_from_version:42868' => 1067,
+ 'old:virtual_from_version:42283' => 1425,
+ 'old:virtual_from_version:46256' => 1077,
+ 'old:virtual_from_version:44073' => 1107,
+ 'old:virtual_from_version:44860' => 1553,
+ 'old:virtual_from_version:47489' => 1077,
+ 'old:virtual_from_version:44042' => 1037,
+ 'old:virtual_from_version:47957' => 1689,
+ 'old:virtual_from_version:46803' => 1070,
+ 'old:virtual_from_version:38996' => 1078,
+ 'old:virtual_from_version:47054' => 1015,
+ 'old:virtual_from_version:50055' => 1006,
+ 'old:virtual_from_version:42210' => 1077,
+ 'old:virtual_from_version:42784' => 1037,
+ 'old:virtual_from_version:42898' => 1077,
+ 'old:virtual_from_version:47537' => 1109,
+ 'old:virtual_from_version:45577' => 1404,
+ 'old:virtual_from_version:44098' => 1067,
+ 'old:virtual_from_version:47616' => 1537,
+ 'old:virtual_from_version:42866' => 1037,
+ 'old:virtual_from_version:42245' => 1077,
+ 'old:virtual_from_version:42772' => 1077,
+ 'old:virtual_from_version:44716' => 1076,
+ 'old:virtual_from_version:44745' => 1006,
+ 'old:virtual_from_version:44540' => 1009,
+ 'old:virtual_from_version:46932' => 1077,
+ 'old:virtual_from_version:43047' => 2003,
+ 'old:virtual_from_version:47806' => 1105,
+ 'old:virtual_from_version:47014' => 1070,
+ 'old:virtual_from_version:50007' => 3215,
+ 'old:virtual_from_version:46501' => 1537,
+ 'old:virtual_from_version:47225' => 1689,
+ 'old:virtual_from_version:49895' => 1069,
+ 'old:virtual_from_version:42377' => 1037,
+ 'old:virtual_from_version:47236' => 1109,
+ 'old:virtual_from_version:45090' => 1517,
+ 'old:virtual_from_version:46627' => 1077,
+ 'old:virtual_from_version:49615' => 1404,
+ 'old:virtual_from_version:46148' => 1070,
+ 'old:virtual_from_version:44567' => 1009,
+ 'old:virtual_from_version:44203' => 1067,
+ 'old:virtual_from_version:44273' => 1077,
+ 'old:virtual_from_version:42978' => 1067,
+ 'old:virtual_from_version:47510' => 1077,
+ 'old:virtual_from_version:45029' => 1010,
+ 'old:virtual_from_version:44627' => 1077,
+ 'old:virtual_from_version:44083' => 1009,
+ 'old:virtual_from_version:45547' => 1070,
+ 'old:virtual_from_version:45103' => 1077,
+ 'old:virtual_from_version:44548' => 1037,
+ 'old:virtual_from_version:47214' => 1172,
+ 'old:virtual_from_version:42155' => 1077,
+ 'old:virtual_from_version:40488' => 1037,
+ 'old:virtual_from_version:46464' => 1362,
+ 'old:virtual_from_version:38949' => 1070,
+ 'old:virtual_from_version:49816' => 1057,
+ 'old:virtual_from_version:46717' => 1697,
+ 'old:virtual_from_version:46238' => 1659,
+ 'old:virtual_from_version:47545' => 1070,
+ 'old:virtual_from_version:47114' => 3020,
+ 'old:virtual_from_version:45591' => 1136,
+ 'old:virtual_from_version:40525' => 1077,
+ 'old:virtual_from_version:42025' => 1109,
+ 'old:virtual_from_version:50010' => 1012,
+ 'old:virtual_from_version:42771' => 1025,
+ 'old:virtual_from_version:42807' => 1025,
+ 'old:virtual_from_version:40794' => 1069,
+ 'old:virtual_from_version:46423' => 1070,
+ 'old:virtual_from_version:38417' => 1077,
+ 'old:virtual_from_version:42183' => 1077,
+ 'old:virtual_from_version:39575' => 1110,
+ 'old:virtual_from_version:45923' => 1048,
+ 'old:virtual_from_version:50459' => 1532,
+ 'old:virtual_from_version:50056' => 3131,
+ 'old:virtual_from_version:49906' => 3078,
+ 'old:virtual_from_version:50001' => 1689,
+ 'old:virtual_from_version:39148' => 1077,
+ 'old:virtual_from_version:49459' => 1062,
+ 'old:virtual_from_version:44809' => 1070,
+ 'old:virtual_from_version:42792' => 1070,
+ 'old:virtual_from_version:45656' => 1076,
+ 'old:virtual_from_version:49926' => 3209,
+ 'old:virtual_from_version:46310' => 1025,
+ 'old:virtual_from_version:42879' => 1009,
+ 'old:virtual_from_version:42840' => 1009,
+ 'old:virtual_from_version:44722' => 1067,
+ 'old:virtual_from_version:50420' => 1037,
+ 'old:virtual_from_version:47403' => 1697,
+ 'old:virtual_from_version:46789' => 1125,
+ 'old:virtual_from_version:50042' => 1009,
+ 'old:virtual_from_version:40945' => 1009,
+ 'old:virtual_from_version:42462' => 1007,
+ 'old:virtual_from_version:50372' => 3008,
+ 'old:virtual_from_version:46198' => 1404,
+ 'old:virtual_from_version:46384' => 1402,
+ 'old:virtual_from_version:42995' => 1070,
+ 'old:virtual_from_version:47067' => 1070,
+ 'old:virtual_from_version:47132' => 1125,
+ 'old:virtual_from_version:40483' => 1369,
+ 'old:virtual_from_version:40844' => 1410,
+ 'old:virtual_from_version:40823' => 1067,
+ 'old:virtual_from_version:42593' => 1077,
+ 'old:virtual_from_version:47703' => 1077,
+ 'old:virtual_from_version:49161' => 1077,
+ 'old:virtual_from_version:39903' => 1077,
+ 'old:virtual_from_version:46715' => 1077,
+ 'old:virtual_from_version:46639' => 1070,
+ 'old:virtual_from_version:45495' => 1136,
+ 'old:virtual_from_version:40196' => 1007,
+ 'old:virtual_from_version:47333' => 1077,
+ 'old:virtual_from_version:42905' => 1109,
+ 'old:virtual_from_version:44440' => 1070,
+ 'old:virtual_from_version:44441' => 1009,
+ 'old:virtual_from_version:47933' => 1077,
+ 'old:virtual_from_version:42779' => 1077,
+ 'old:virtual_from_version:49938' => 1125,
+ 'old:virtual_from_version:46840' => 1025,
+ 'old:virtual_from_version:44741' => 1070,
+ 'old:virtual_from_version:44784' => 1025,
+ 'old:virtual_from_version:14391' => 1068,
+ 'old:virtual_from_version:42067' => 1025,
+ 'old:virtual_from_version:47363' => 1025,
+ 'old:virtual_from_version:45636' => 1172,
+ 'old:virtual_from_version:49166' => 1125,
+ 'old:virtual_from_version:45323' => 1110,
+ 'old:virtual_from_version:47829' => 1037,
+ 'old:virtual_from_version:46754' => 1070,
+ 'old:virtual_from_version:47776' => 1070,
+ 'old:virtual_from_version:45782' => 1587,
+ 'old:virtual_from_version:50178' => 1172,
+ 'old:virtual_from_version:44309' => 1009,
+ 'old:virtual_from_version:39885' => 1136,
+ 'old:virtual_from_version:50272' => 3131,
+ 'old:virtual_from_version:42356' => 1070,
+ 'old:virtual_from_version:45617' => 1172,
+ 'old:virtual_from_version:44568' => 1517,
+ 'old:virtual_from_version:46212' => 1070,
+ 'old:virtual_from_version:46289' => 1107,
+ 'old:virtual_from_version:40862' => 1077,
+ 'old:virtual_from_version:47506' => 1070,
+ 'old:virtual_from_version:46462' => 1125,
+ 'old:virtual_from_version:45084' => 1070,
+ 'old:virtual_from_version:39476' => 1081,
+ 'old:virtual_from_version:46352' => 1190,
+ 'old:virtual_from_version:50268' => 1488,
+ 'old:virtual_from_version:47242' => 1077,
+ 'old:virtual_from_version:45442' => 1150,
+ 'old:virtual_from_version:44724' => 1539,
+ 'old:virtual_from_version:47281' => 1172,
+ 'old:virtual_from_version:40594' => 1070,
+ 'old:virtual_from_version:46941' => 1125,
+ 'old:virtual_from_version:46411' => 1070,
+ 'old:virtual_from_version:46086' => 1017,
+ 'old:virtual_from_version:44647' => 1077,
+ 'old:virtual_from_version:50307' => 3131,
+ 'old:virtual_from_version:44787' => 1057,
+ 'old:virtual_from_version:42208' => 1070,
+ 'old:virtual_from_version:13404' => 1047,
+ 'old:virtual_from_version:50026' => 1125,
+ 'old:virtual_from_version:44856' => 1070,
+ 'old:virtual_from_version:44171' => 1070,
+ 'old:virtual_from_version:49974' => 3120,
+ 'old:virtual_from_version:44124' => 1107,
+ 'old:virtual_from_version:50738' => 1689,
+ 'old:virtual_from_version:42870' => 1025,
+ 'old:virtual_from_version:46446' => 1537,
+ 'old:virtual_from_version:40478' => 1070,
+ 'old:virtual_from_version:42413' => 1037,
+ 'old:virtual_from_version:50680' => 1583,
+ 'old:virtual_from_version:49439' => 1070,
+ 'old:virtual_from_version:50467' => 3009,
+ 'old:virtual_from_version:44337' => 1081,
+ 'old:virtual_from_version:42853' => 1504,
+ 'old:virtual_from_version:49291' => 1649,
+ 'old:virtual_from_version:45812' => 1574,
+ 'old:virtual_from_version:45565' => 1404,
+ 'old:virtual_from_version:46515' => 1070,
+ 'old:virtual_from_version:49499' => 3078,
+ 'old:virtual_from_version:46085' => 1070,
+ 'old:virtual_from_version:42196' => 1070,
+ 'old:virtual_from_version:45534' => 1489,
+ 'old:virtual_from_version:44029' => 1070,
+ 'old:virtual_from_version:44087' => 1009,
+ 'old:virtual_from_version:45034' => 1064,
+ 'old:virtual_from_version:50048' => 1444,
+ 'old:virtual_from_version:46992' => 1025,
+ 'old:virtual_from_version:45042' => 1025,
+ 'old:virtual_from_version:47243' => 1070,
+ 'old:virtual_from_version:49453' => 1444,
+ 'old:virtual_from_version:40536' => 1070,
+ 'old:virtual_from_version:45045' => 1077,
+ 'old:virtual_from_version:45395' => 1112,
+ 'old:virtual_from_version:42367' => 1413,
+ 'old:virtual_from_version:46424' => 1125,
+ 'old:virtual_from_version:40966' => 1048,
+ 'old:virtual_from_version:42777' => 1070,
+ 'old:virtual_from_version:49380' => 1077,
+ 'old:virtual_from_version:46476' => 1009,
+ 'old:virtual_from_version:46636' => 1067,
+ 'old:virtual_from_version:38617' => 1123,
+ 'old:virtual_from_version:44744' => 1070,
+ 'old:virtual_from_version:40749' => 1077,
+ 'old:virtual_from_version:47630' => 1109,
+ 'old:virtual_from_version:40738' => 1048,
+ 'old:virtual_from_version:47169' => 3031,
+ 'old:virtual_from_version:46549' => 1125,
+ 'old:virtual_from_version:45594' => 1009,
+ 'old:virtual_from_version:40969' => 1009,
+ 'old:virtual_from_version:49099' => 3136,
+ 'old:virtual_from_version:38342' => 1006,
+ 'old:virtual_from_version:44857' => 1077,
+ 'old:virtual_from_version:49693' => 1078,
+ 'old:virtual_from_version:44581' => 1009,
+ 'old:virtual_from_version:44905' => 1555,
+ 'old:virtual_from_version:44574' => 1070,
+ 'old:virtual_from_version:39605' => 1067,
+ 'old:virtual_from_version:44590' => 1037,
+ 'old:virtual_from_version:45317' => 1125,
+ 'old:virtual_from_version:50686' => 3259,
+ 'old:virtual_from_version:49236' => 1070,
+ 'old:virtual_from_version:42732' => 1037,
+ 'old:virtual_from_version:44370' => 1012,
+ 'old:virtual_from_version:42831' => 1077,
+ 'old:virtual_from_version:49220' => 1314,
+ 'old:virtual_from_version:47988' => 1009,
+ 'old:virtual_from_version:50061' => 1019,
+ 'old:virtual_from_version:42712' => 1311,
+ 'old:virtual_from_version:50279' => 3131,
+ 'old:virtual_from_version:46838' => 1172,
+ 'old:virtual_from_version:49626' => 1158,
+ 'old:virtual_from_version:44535' => 1077,
+ 'old:virtual_from_version:47951' => 3124,
+ 'old:virtual_from_version:40394' => 1136,
+ 'old:virtual_from_version:40294' => 1321,
+ 'old:virtual_from_version:45505' => 1580,
+ 'old:virtual_from_version:45953' => 1108,
+ 'old:virtual_from_version:50253' => 1489,
+ 'old:virtual_from_version:40691' => 1009,
+ 'old:virtual_from_version:50587' => 1417,
+ 'old:virtual_from_version:45007' => 1031,
+ 'old:virtual_from_version:50269' => 1078,
+ 'old:virtual_from_version:47293' => 1105,
+ 'old:virtual_from_version:40292' => 1048,
+ 'old:virtual_from_version:45460' => 1067,
+ 'old:virtual_from_version:42020' => 1037,
+ 'old:virtual_from_version:49903' => 1404,
+ 'old:virtual_from_version:46390' => 1172,
+ 'old:virtual_from_version:46277' => 1070,
+ 'old:virtual_from_version:46181' => 1537,
+ 'old:virtual_from_version:49117' => 1037,
+ 'old:virtual_from_version:42698' => 1037,
+ 'old:virtual_from_version:42228' => 1419,
+ 'old:virtual_from_version:44539' => 1070,
+ 'old:virtual_from_version:50421' => 1314,
+ 'old:virtual_from_version:42416' => 1070,
+ 'old:virtual_from_version:46252' => 1665,
+ 'old:virtual_from_version:40830' => 1077,
+ 'old:virtual_from_version:46316' => 1613,
+ 'old:virtual_from_version:46033' => 1410,
+ 'old:virtual_from_version:49241' => 1532,
+ 'old:virtual_from_version:45827' => 1362,
+ 'old:virtual_from_version:47257' => 1517,
+ 'old:virtual_from_version:46913' => 3007,
+ 'old:virtual_from_version:47080' => 1584,
+ 'old:virtual_from_version:47270' => 1037,
+ 'old:virtual_from_version:50167' => 1413,
+ 'old:virtual_from_version:44189' => 1025,
+ 'old:virtual_from_version:44899' => 1123,
+ 'old:virtual_from_version:42804' => 1070,
+ 'old:virtual_from_version:44917' => 1070,
+ 'old:virtual_from_version:46281' => 1077,
+ 'old:virtual_from_version:49348' => 3139,
+ 'old:virtual_from_version:44799' => 1321,
+ 'old:virtual_from_version:45305' => 1125,
+ 'old:virtual_from_version:44661' => 1077,
+ 'old:virtual_from_version:50754' => 3186,
+ 'old:virtual_from_version:44434' => 1009,
+ 'old:virtual_from_version:50104' => 1222,
+ 'old:virtual_from_version:49544' => 1404,
+ 'old:virtual_from_version:47037' => 1689,
+ 'old:virtual_from_version:50657' => 1009,
+ 'old:virtual_from_version:45859' => 1077,
+ 'old:virtual_from_version:49766' => 1077,
+ 'old:virtual_from_version:49147' => 1532,
+ 'old:virtual_from_version:40746' => 1070,
+ 'old:virtual_from_version:47217' => 1689,
+ 'old:virtual_from_version:50539' => 1404,
+ 'old:virtual_from_version:49751' => 1006,
+ 'old:virtual_from_version:42588' => 1062,
+ 'old:virtual_from_version:49984' => 1070,
+ 'old:virtual_from_version:47034' => 1555,
+ 'old:virtual_from_version:40895' => 1110,
+ 'old:virtual_from_version:46584' => 1689,
+ 'old:virtual_from_version:48027' => 2025,
+ 'old:virtual_from_version:33505' => 1081,
+ 'old:virtual_from_version:40922' => 1037,
+ 'old:virtual_from_version:47917' => 1109,
+ 'old:virtual_from_version:41007' => 2018,
+ 'old:virtual_from_version:40253' => 1110,
+ 'old:virtual_from_version:38358' => 1040,
+ 'old:virtual_from_version:45258' => 1081,
+ 'old:virtual_from_version:47985' => 1125,
+ 'old:virtual_from_version:44552' => 1107,
+ 'old:virtual_from_version:45053' => 1110,
+ 'old:virtual_from_version:40804' => 1025,
+ 'old:virtual_from_version:44765' => 1015,
+ 'old:virtual_from_version:49072' => 1083,
+ 'old:virtual_from_version:44891' => 1070,
+ 'old:virtual_from_version:48014' => 2114,
+ 'old:virtual_from_version:13342' => 1064,
+ 'old:virtual_from_version:47890' => 1109,
+ 'old:virtual_from_version:46206' => 1633,
+ 'old:virtual_from_version:46655' => 1007,
+ 'old:virtual_from_version:49467' => 1689,
+ 'old:virtual_from_version:38436' => 1006,
+ 'old:virtual_from_version:45548' => 1109,
+ 'old:virtual_from_version:42867' => 1109,
+ 'old:virtual_from_version:40179' => 1015,
+ 'old:virtual_from_version:47245' => 1037,
+ 'old:virtual_from_version:50306' => 1404,
+ 'old:virtual_from_version:47264' => 1689,
+ 'old:virtual_from_version:46556' => 1125,
+ 'old:virtual_from_version:40238' => 1144,
+ 'old:virtual_from_version:47262' => 1009,
+ 'old:virtual_from_version:47302' => 1580,
+ 'old:virtual_from_version:47320' => 1070,
+ 'old:virtual_from_version:46098' => 1649,
+ 'old:virtual_from_version:47552' => 1105,
+ 'old:virtual_from_version:47078' => 1077,
+ 'old:virtual_from_version:46594' => 1172,
+ 'old:virtual_from_version:38800' => 1110,
+ 'old:virtual_from_version:39510' => 1070,
+ 'old:virtual_from_version:47206' => 1109,
+ 'old:virtual_from_version:44207' => 1107,
+ 'old:virtual_from_version:44323' => 1070,
+ 'old:virtual_from_version:42688' => 1077,
+ 'old:virtual_from_version:49755' => 1070,
+ 'old:virtual_from_version:46930' => 1051,
+ 'old:virtual_from_version:42603' => 1105,
+ 'old:virtual_from_version:45735' => 1077,
+ 'old:virtual_from_version:46081' => 1415,
+ 'old:virtual_from_version:46001' => 1649,
+ 'old:virtual_from_version:47151' => 1007,
+ 'old:virtual_from_version:45266' => 1027,
+ 'old:virtual_from_version:47674' => 1109,
+ 'old:virtual_from_version:40563' => 1077,
+ 'old:virtual_from_version:46179' => 1077,
+ 'old:virtual_from_version:45318' => 1009,
+ 'old:virtual_from_version:44547' => 1077,
+ 'old:virtual_from_version:46410' => 1676,
+ 'old:virtual_from_version:44352' => 1037,
+ 'old:virtual_from_version:40739' => 1084,
+ 'old:virtual_from_version:40531' => 1077,
+ 'old:virtual_from_version:46978' => 1037,
+ 'old:virtual_from_version:46347' => 1555,
+ 'old:virtual_from_version:50523' => 1016,
+ 'old:virtual_from_version:42946' => 1037,
+ 'old:virtual_from_version:45137' => 1057,
+ 'old:virtual_from_version:47634' => 1585,
+ 'old:virtual_from_version:49687' => 1009,
+ 'old:virtual_from_version:50071' => 3131,
+ 'old:virtual_from_version:40473' => 1037,
+ 'old:virtual_from_version:47348' => 1109,
+ 'old:virtual_from_version:49834' => 3120,
+ 'old:virtual_from_version:44005' => 1500,
+ 'old:virtual_from_version:42041' => 1172,
+ 'old:virtual_from_version:46645' => 1537,
+ 'old:virtual_from_version:49235' => 1689,
+ 'old:virtual_from_version:49114' => 1070,
+ 'old:virtual_from_version:42872' => 1037,
+ 'old:virtual_from_version:49435' => 1555,
+ 'old:virtual_from_version:46865' => 3004,
+ 'old:virtual_from_version:42277' => 1069,
+ 'old:virtual_from_version:46595' => 1077,
+ 'old:virtual_from_version:45096' => 1517,
+ 'old:virtual_from_version:49227' => 1077,
+ 'old:virtual_from_version:42065' => 1048,
+ 'old:virtual_from_version:49690' => 1489,
+ 'old:virtual_from_version:39531' => 1069,
+ 'old:virtual_from_version:49149' => 1007,
+ 'old:virtual_from_version:49779' => 1404,
+ 'old:virtual_from_version:46326' => 1062,
+ 'old:virtual_from_version:44963' => 1065,
+ 'old:virtual_from_version:49945' => 1025,
+ 'old:virtual_from_version:50032' => 1070,
+ 'old:virtual_from_version:46137' => 1077,
+ 'old:virtual_from_version:50679' => 1417,
+ 'old:virtual_from_version:46011' => 1109,
+ 'old:virtual_from_version:47446' => 1621,
+ 'old:virtual_from_version:44371' => 1015,
+ 'old:virtual_from_version:49276' => 1616,
+ 'old:virtual_from_version:46030' => 1062,
+ 'old:virtual_from_version:47885' => 1077,
+ 'old:virtual_from_version:47542' => 1109,
+ 'old:virtual_from_version:45430' => 1009,
+ 'old:virtual_from_version:45795' => 1109,
+ 'old:virtual_from_version:49119' => 1109,
+ 'old:virtual_from_version:40721' => 1070,
+ 'old:virtual_from_version:46389' => 1112,
+ 'old:virtual_from_version:47557' => 1070,
+ 'old:virtual_from_version:43015' => 2040,
+ 'old:virtual_from_version:45047' => 1036,
+ 'old:virtual_from_version:40783' => 1048,
+ 'old:virtual_from_version:47927' => 1659,
+ 'old:virtual_from_version:49332' => 1077,
+ 'old:virtual_from_version:46219' => 1077,
+ 'old:virtual_from_version:40921' => 1077,
+ 'old:virtual_from_version:47851' => 1583,
+ 'old:virtual_from_version:45916' => 1109,
+ 'old:virtual_from_version:40521' => 1105,
+ 'old:virtual_from_version:45897' => 1077,
+ 'old:virtual_from_version:43046' => 2000,
+ 'old:virtual_from_version:47597' => 1109,
+ 'old:virtual_from_version:45481' => 1070,
+ 'old:virtual_from_version:46065' => 1070,
+ 'old:virtual_from_version:42193' => 1070,
+ 'old:virtual_from_version:42594' => 1037,
+ 'old:virtual_from_version:40889' => 1025,
+ 'old:virtual_from_version:42715' => 1009,
+ 'old:virtual_from_version:46039' => 1410,
+ 'old:virtual_from_version:50255' => 3131,
+ 'old:virtual_from_version:49030' => 1649,
+ 'old:virtual_from_version:50586' => 1032,
+ 'old:virtual_from_version:40914' => 1077,
+ 'old:virtual_from_version:44163' => 1110,
+ 'old:virtual_from_version:46303' => 1425,
+ 'old:virtual_from_version:44558' => 1077,
+ 'old:virtual_from_version:45910' => 1404,
+ 'old:virtual_from_version:42625' => 1037,
+ 'old:virtual_from_version:47478' => 1077,
+ 'old:virtual_from_version:50127' => 1689,
+ 'old:virtual_from_version:50627' => 1407,
+ 'old:virtual_from_version:44039' => 1009,
+ 'old:virtual_from_version:46500' => 1136,
+ 'old:virtual_from_version:46399' => 1077,
+ 'old:virtual_from_version:47030' => 1070,
+ 'old:virtual_from_version:44359' => 1000,
+ 'old:virtual_from_version:47461' => 1444,
+ 'old:virtual_from_version:50567' => 1125,
+ 'old:virtual_from_version:46656' => 1070,
+ 'old:virtual_from_version:50231' => 1005,
+ 'old:virtual_from_version:45428' => 1109,
+ 'old:virtual_from_version:49027' => 3131,
+ 'old:virtual_from_version:47440' => 1070,
+ 'old:virtual_from_version:50393' => 3131,
+ 'old:virtual_from_version:38348' => 1014,
+ 'old:virtual_from_version:45370' => 1407,
+ 'old:virtual_from_version:46983' => 1584,
+ 'old:virtual_from_version:40806' => 1136,
+ 'old:virtual_from_version:50218' => 3008,
+ 'old:virtual_from_version:40009' => 1192,
+ 'old:virtual_from_version:47598' => 1077,
+ 'old:virtual_from_version:47479' => 1381,
+ 'old:virtual_from_version:50275' => 3231,
+ 'old:virtual_from_version:43084' => 2081,
+ 'old:virtual_from_version:49204' => 1077,
+ 'old:virtual_from_version:46449' => 1532,
+ 'old:virtual_from_version:44704' => 1540,
+ 'old:virtual_from_version:49896' => 3131,
+ 'old:virtual_from_version:47899' => 1077,
+ 'old:virtual_from_version:40897' => 1070,
+ 'old:virtual_from_version:46873' => 1410,
+ 'old:virtual_from_version:44605' => 1025,
+ 'old:virtual_from_version:46361' => 1070,
+ 'old:virtual_from_version:43049' => 2019,
+ 'old:virtual_from_version:45579' => 1172,
+ 'old:virtual_from_version:42123' => 1172,
+ 'old:virtual_from_version:47032' => 1172,
+ 'old:virtual_from_version:45951' => 1533,
+ 'old:virtual_from_version:44876' => 1067,
+ 'old:virtual_from_version:45327' => 1125,
+ 'old:virtual_from_version:40808' => 1007,
+ 'old:virtual_from_version:46406' => 1025,
+ 'old:virtual_from_version:47277' => 1125,
+ 'old:virtual_from_version:46313' => 1537,
+ 'old:virtual_from_version:49995' => 1404,
+ 'old:virtual_from_version:46519' => 1025,
+ 'old:virtual_from_version:42232' => 1070,
+ 'old:virtual_from_version:42610' => 1037,
+ 'old:virtual_from_version:50722' => 1084,
+ 'old:virtual_from_version:49046' => 1583,
+ 'old:virtual_from_version:46614' => 1070,
+ 'old:virtual_from_version:42981' => 1077,
+ 'old:virtual_from_version:40713' => 1048,
+ 'old:virtual_from_version:47536' => 1125,
+ 'old:virtual_from_version:40881' => 1110,
+ 'old:virtual_from_version:45026' => 1007,
+ 'old:virtual_from_version:44344' => 1081,
+ 'old:virtual_from_version:50703' => 1172,
+ 'old:virtual_from_version:42819' => 1501,
+ 'old:virtual_from_version:49259' => 1404,
+ 'old:virtual_from_version:45310' => 1580,
+ 'old:virtual_from_version:45152' => 1107,
+ 'old:virtual_from_version:44771' => 1070,
+ 'old:virtual_from_version:45645' => 1077,
+ 'old:virtual_from_version:47284' => 3009,
+ 'old:virtual_from_version:46191' => 1070,
+ 'old:virtual_from_version:50538' => 1402,
+ 'old:virtual_from_version:36622' => 1008,
+ 'old:virtual_from_version:42137' => 1007,
+ 'old:virtual_from_version:47991' => 1070,
+ 'old:virtual_from_version:44823' => 1349,
+ 'old:virtual_from_version:42124' => 1070,
+ 'old:virtual_from_version:42669' => 1077,
+ 'old:virtual_from_version:47683' => 1136,
+ 'old:virtual_from_version:49989' => 1100,
+ 'old:virtual_from_version:44749' => 1224,
+ 'old:virtual_from_version:49902' => 1070,
+ 'old:virtual_from_version:49821' => 1444,
+ 'old:virtual_from_version:49309' => 1077,
+ 'old:virtual_from_version:39532' => 1015,
+ 'old:virtual_from_version:46864' => 1076,
+ 'old:virtual_from_version:50040' => 3159,
+ 'old:virtual_from_version:49171' => 1125,
+ 'old:virtual_from_version:50149' => 1125,
+ 'old:virtual_from_version:38702' => 1062,
+ 'old:virtual_from_version:46307' => 1067,
+ 'old:virtual_from_version:45556' => 1070,
+ 'old:virtual_from_version:42475' => 1000,
+ 'old:virtual_from_version:42992' => 1110,
+ 'old:virtual_from_version:46688' => 1077,
+ 'old:virtual_from_version:45376' => 1314,
+ 'old:virtual_from_version:42855' => 1070,
+ 'old:virtual_from_version:47038' => 3008,
+ 'old:virtual_from_version:44642' => 1125,
+ 'old:virtual_from_version:42180' => 1070,
+ 'old:virtual_from_version:46928' => 1070,
+ 'old:virtual_from_version:44839' => 1488,
+ 'old:virtual_from_version:45081' => 1555,
+ 'old:virtual_from_version:45572' => 1077,
+ 'old:virtual_from_version:40787' => 1067,
+ 'old:virtual_from_version:42351' => 1125,
+ 'old:virtual_from_version:50176' => 3131,
+ 'old:virtual_from_version:40454' => 1404,
+ 'old:virtual_from_version:47255' => 1001,
+ 'old:virtual_from_version:46724' => 1517,
+ 'old:virtual_from_version:50278' => 1444,
+ 'old:virtual_from_version:45582' => 1077,
+ 'old:virtual_from_version:45307' => 1565,
+ 'old:virtual_from_version:47636' => 1488,
+ 'old:virtual_from_version:40931' => 1070,
+ 'old:virtual_from_version:44114' => 1125,
+ 'old:virtual_from_version:47570' => 1105,
+ 'old:virtual_from_version:46396' => 1070,
+ 'old:virtual_from_version:42692' => 1048,
+ 'old:virtual_from_version:49591' => 1444,
+ 'old:virtual_from_version:45269' => 1090,
+ 'old:virtual_from_version:42592' => 1009,
+ 'old:virtual_from_version:47508' => 1109,
+ 'old:virtual_from_version:40515' => 1067,
+ 'old:virtual_from_version:40276' => 1115,
+ 'old:virtual_from_version:42968' => 1037,
+ 'old:virtual_from_version:46833' => 1015,
+ 'old:virtual_from_version:40728' => 1025,
+ 'old:virtual_from_version:42934' => 1009,
+ 'old:virtual_from_version:40493' => 1404,
+ 'old:virtual_from_version:45000' => 1008,
+ 'old:virtual_from_version:45914' => 1077,
+ 'old:virtual_from_version:46857' => 1070,
+ 'old:virtual_from_version:46967' => 1134,
+ 'old:virtual_from_version:47928' => 1070,
+ 'old:virtual_from_version:50439' => 3243,
+ 'old:virtual_from_version:44527' => 1025,
+ 'old:virtual_from_version:45245' => 1049,
+ 'old:virtual_from_version:46275' => 1077,
+ 'old:virtual_from_version:49786' => 3131,
+ 'old:virtual_from_version:47457' => 1070,
+ 'old:virtual_from_version:39579' => 1086,
+ 'old:virtual_from_version:44235' => 1110,
+ 'old:virtual_from_version:40753' => 1070,
+ 'old:virtual_from_version:39728' => 1048,
+ 'old:virtual_from_version:46681' => 1125,
+ 'old:virtual_from_version:42576' => 1070,
+ 'old:virtual_from_version:49982' => 1689,
+ 'old:virtual_from_version:44818' => 1070,
+ 'old:virtual_from_version:45302' => 1414,
+ 'old:virtual_from_version:42290' => 1115,
+ 'old:virtual_from_version:42160' => 1037,
+ 'old:virtual_from_version:49836' => 3194,
+ 'old:virtual_from_version:49653' => 1314,
+ 'old:virtual_from_version:50468' => 3246,
+ 'old:virtual_from_version:40993' => 1070,
+ 'old:virtual_from_version:50137' => 1540,
+ 'old:virtual_from_version:40654' => 1083,
+ 'old:virtual_from_version:47120' => 1070,
+ 'old:virtual_from_version:42214' => 1025,
+ 'old:virtual_from_version:43007' => 2032,
+ 'old:virtual_from_version:42645' => 1109,
+ 'old:virtual_from_version:49070' => 1404,
+ 'old:virtual_from_version:50356' => 3131,
+ 'old:virtual_from_version:50765' => 1070,
+ 'old:virtual_from_version:49293' => 1051,
+ 'old:virtual_from_version:50519' => 1311,
+ 'old:virtual_from_version:50466' => 1172,
+ 'old:virtual_from_version:45816' => 1125,
+ 'old:virtual_from_version:40833' => 1070,
+ 'old:virtual_from_version:49492' => 1125,
+ 'old:virtual_from_version:45429' => 1067,
+ 'old:virtual_from_version:50702' => 1070,
+ 'old:virtual_from_version:40348' => 1095,
+ 'old:virtual_from_version:46301' => 1613,
+ 'old:virtual_from_version:50464' => 3204,
+ 'old:virtual_from_version:44514' => 1070,
+ 'old:virtual_from_version:46837' => 1070,
+ 'old:virtual_from_version:42865' => 1077,
+ 'old:virtual_from_version:42707' => 1037,
+ 'old:virtual_from_version:45493' => 1580,
+ 'old:virtual_from_version:50192' => 3028,
+ 'old:virtual_from_version:50653' => 1419,
+ 'old:virtual_from_version:46727' => 1584,
+ 'old:virtual_from_version:44461' => 1077,
+ 'old:virtual_from_version:50282' => 3131,
+ 'old:virtual_from_version:44259' => 1172,
+ 'old:virtual_from_version:45625' => 1136,
+ 'old:virtual_from_version:47673' => 1070,
+ 'old:virtual_from_version:45963' => 1461,
+ 'old:virtual_from_version:49019' => 1035,
+ 'old:virtual_from_version:45297' => 1125,
+ 'old:virtual_from_version:44065' => 1077,
+ 'old:virtual_from_version:42705' => 1070,
+ 'old:virtual_from_version:45046' => 1031,
+ 'old:virtual_from_version:46746' => 1077,
+ 'old:virtual_from_version:47911' => 1314,
+ 'old:virtual_from_version:45061' => 1051,
+ 'old:virtual_from_version:40097' => 1083,
+ 'old:virtual_from_version:46942' => 1107,
+ 'old:virtual_from_version:49667' => 1070,
+ 'old:virtual_from_version:40540' => 1067,
+ 'old:virtual_from_version:44664' => 1077,
+ 'old:virtual_from_version:44669' => 1077,
+ 'old:virtual_from_version:50561' => 3259,
+ 'old:virtual_from_version:10001' => 2000,
+ 'old:virtual_from_version:46101' => 1077,
+ 'old:virtual_from_version:40648' => 1128,
+ 'old:virtual_from_version:46124' => 1555,
+ 'old:virtual_from_version:4513 ' => 1053,
+ 'old:virtual_from_version:44297' => 1070,
+ 'old:virtual_from_version:50183' => 1069,
+ 'old:virtual_from_version:45335' => 1125,
+ 'old:virtual_from_version:47857' => 1070,
+ 'old:virtual_from_version:42042' => 1172,
+ 'old:virtual_from_version:42541' => 1070,
+ 'old:virtual_from_version:45984' => 1613,
+ 'old:virtual_from_version:44285' => 1070,
+ 'old:virtual_from_version:49538' => 1413,
+ 'old:virtual_from_version:47141' => 1583,
+ 'old:virtual_from_version:46222' => 1077,
+ 'old:virtual_from_version:49954' => 3131,
+ 'old:virtual_from_version:44365' => 1144,
+ 'old:virtual_from_version:46842' => 1070,
+ 'old:virtual_from_version:45835' => 1146,
+ 'old:virtual_from_version:42597' => 1172,
+ 'old:virtual_from_version:50248' => 1489,
+ 'old:virtual_from_version:46254' => 1070,
+ 'old:virtual_from_version:50123' => 3184,
+ 'old:virtual_from_version:49585' => 1107,
+ 'old:virtual_from_version:44964' => 1078,
+ 'old:virtual_from_version:49473' => 1580,
+ 'old:virtual_from_version:47881' => 1689,
+ 'old:virtual_from_version:40705' => 1025,
+ 'old:virtual_from_version:46513' => 1659,
+ 'old:virtual_from_version:44084' => 1515,
+ 'old:virtual_from_version:46617' => 1081,
+ 'old:virtual_from_version:42744' => 1070,
+ 'old:virtual_from_version:40133' => 1290,
+ 'old:virtual_from_version:50018' => 1006,
+ 'old:virtual_from_version:45108' => 1077,
+ 'old:virtual_from_version:42859' => 1067,
+ 'old:virtual_from_version:50222' => 1404,
+ 'old:virtual_from_version:47646' => 1689,
+ 'old:virtual_from_version:42921' => 1070,
+ 'old:virtual_from_version:45355' => 1084,
+ 'old:virtual_from_version:47332' => 1109,
+ 'old:virtual_from_version:48025' => 2126,
+ 'old:virtual_from_version:49768' => 3131,
+ 'old:virtual_from_version:44013' => 1037,
+ 'old:virtual_from_version:49146' => 1070,
+ 'old:virtual_from_version:40834' => 1077,
+ 'old:virtual_from_version:40726' => 1401,
+ 'old:virtual_from_version:46362' => 1109,
+ 'old:virtual_from_version:45981' => 1321,
+ 'old:virtual_from_version:46539' => 1568,
+ 'old:virtual_from_version:47878' => 1009,
+ 'old:virtual_from_version:45343' => 1009,
+ 'old:virtual_from_version:44489' => 1077,
+ 'old:virtual_from_version:49148' => 3150,
+ 'old:virtual_from_version:49940' => 1048,
+ 'old:virtual_from_version:47213' => 1109,
+ 'old:virtual_from_version:46947' => 1583,
+ 'old:virtual_from_version:50180' => 1489,
+ 'old:virtual_from_version:47854' => 1150,
+ 'old:virtual_from_version:43064' => 2065,
+ 'old:virtual_from_version:42404' => 1107,
+ 'old:virtual_from_version:45102' => 1070,
+ 'old:virtual_from_version:39295' => 1025,
+ 'old:virtual_from_version:50085' => 1125,
+ 'old:virtual_from_version:50210' => 1404,
+ 'old:virtual_from_version:49303' => 1413,
+ 'old:virtual_from_version:45668' => 1027,
+ 'old:virtual_from_version:44933' => 1172,
+ 'old:virtual_from_version:45153' => 1009,
+ 'old:virtual_from_version:44278' => 1009,
+ 'old:virtual_from_version:46870' => 1404,
+ 'old:virtual_from_version:44289' => 1037,
+ 'old:virtual_from_version:44473' => 1009,
+ 'old:virtual_from_version:46897' => 1076,
+ 'old:virtual_from_version:50139' => 1070,
+ 'old:virtual_from_version:42255' => 1070,
+ 'old:virtual_from_version:49613' => 1070,
+ 'old:virtual_from_version:42999' => 1136,
+ 'old:virtual_from_version:44479' => 1037,
+ 'old:virtual_from_version:49396' => 1505,
+ 'old:virtual_from_version:47732' => 1689,
+ 'old:virtual_from_version:46373' => 1583,
+ 'old:virtual_from_version:47411' => 1321,
+ 'old:virtual_from_version:49932' => 3197,
+ 'old:virtual_from_version:47554' => 3016,
+ 'old:virtual_from_version:50742' => 1070,
+ 'old:virtual_from_version:46886' => 1105,
+ 'old:virtual_from_version:45681' => 1042,
+ 'old:virtual_from_version:42700' => 1070,
+ 'old:virtual_from_version:47978' => 1125,
+ 'old:virtual_from_version:49640' => 1107,
+ 'old:virtual_from_version:42241' => 1067,
+ 'old:virtual_from_version:44112' => 1109,
+ 'old:virtual_from_version:49918' => 3206,
+ 'old:virtual_from_version:50410' => 1689,
+ 'old:virtual_from_version:50015' => 3217,
+ 'old:virtual_from_version:39544' => 1190,
+ 'old:virtual_from_version:42294' => 1110,
+ 'old:virtual_from_version:47816' => 3094,
+ 'old:virtual_from_version:44238' => 1125,
+ 'old:virtual_from_version:45499' => 1109,
+ 'old:virtual_from_version:42839' => 1070,
+ 'old:virtual_from_version:42848' => 1070,
+ 'old:virtual_from_version:44682' => 1025,
+ 'old:virtual_from_version:49287' => 1689,
+ 'old:virtual_from_version:47426' => 1070,
+ 'old:virtual_from_version:49770' => 1404,
+ 'old:virtual_from_version:50656' => 3259,
+ 'old:virtual_from_version:45936' => 1070,
+ 'old:virtual_from_version:42699' => 1067,
+ 'old:virtual_from_version:44588' => 1070,
+ 'old:virtual_from_version:46825' => 1107,
+ 'old:virtual_from_version:43017' => 2042,
+ 'old:virtual_from_version:50532' => 1067,
+ 'old:virtual_from_version:45329' => 1404,
+ 'old:virtual_from_version:46496' => 1125,
+ 'old:virtual_from_version:48000' => 2101,
+ 'old:virtual_from_version:42762' => 1037,
+ 'old:virtual_from_version:46802' => 1123,
+ 'old:virtual_from_version:40990' => 1110,
+ 'old:virtual_from_version:44651' => 1025,
+ 'old:virtual_from_version:49542' => 1105,
+ 'old:virtual_from_version:42127' => 1037,
+ 'old:virtual_from_version:42259' => 1037,
+ 'old:virtual_from_version:46577' => 1070,
+ 'old:virtual_from_version:47307' => 1616,
+ 'old:virtual_from_version:40759' => 1070,
+ 'old:virtual_from_version:47802' => 1037,
+ 'old:virtual_from_version:47024' => 1070,
+ 'old:virtual_from_version:49056' => 1070,
+ 'old:virtual_from_version:42309' => 1077,
+ 'old:virtual_from_version:42706' => 1077,
+ 'old:virtual_from_version:42058' => 1037,
+ 'old:virtual_from_version:45922' => 1070,
+ 'old:virtual_from_version:50223' => 1583,
+ 'old:virtual_from_version:44662' => 1037,
+ 'old:virtual_from_version:49127' => 1583,
+ 'old:virtual_from_version:44756' => 1109,
+ 'old:virtual_from_version:44701' => 1077,
+ 'old:virtual_from_version:44562' => 1023,
+ 'old:virtual_from_version:47831' => 1048,
+ 'old:virtual_from_version:47787' => 1109,
+ 'old:virtual_from_version:44610' => 1537,
+ 'old:virtual_from_version:45360' => 1583,
+ 'old:virtual_from_version:47723' => 1404,
+ 'old:virtual_from_version:44766' => 1077,
+ 'old:virtual_from_version:50521' => 1016,
+ 'old:virtual_from_version:38483' => 1030,
+ 'old:virtual_from_version:45911' => 1070,
+ 'old:virtual_from_version:50294' => 1321,
+ 'old:virtual_from_version:46988' => 1136,
+ 'old:virtual_from_version:49345' => 1105,
+ 'old:virtual_from_version:50080' => 1125,
+ 'old:virtual_from_version:40644' => 1032,
+ 'old:virtual_from_version:40853' => 1037,
+ 'old:virtual_from_version:40826' => 1070,
+ 'old:virtual_from_version:49167' => 1077,
+ 'old:virtual_from_version:45072' => 1067,
+ 'old:virtual_from_version:42131' => 1070,
+ 'old:virtual_from_version:50323' => 3237,
+ 'old:virtual_from_version:50555' => 1580,
+ 'old:virtual_from_version:44459' => 1070,
+ 'old:virtual_from_version:44412' => 1115,
+ 'old:virtual_from_version:40094' => 1062,
+ 'old:virtual_from_version:50449' => 1037,
+ 'old:virtual_from_version:46630' => 1070,
+ 'old:virtual_from_version:44094' => 1009,
+ 'old:virtual_from_version:38379' => 1025,
+ 'old:virtual_from_version:46205' => 1092,
+ 'old:virtual_from_version:40866' => 1070,
+ 'old:virtual_from_version:45039' => 1517,
+ 'old:virtual_from_version:42629' => 1136,
+ 'old:virtual_from_version:38018' => 1095,
+ 'old:virtual_from_version:44422' => 1037,
+ 'old:virtual_from_version:40820' => 1070,
+ 'old:virtual_from_version:49010' => 1172,
+ 'old:virtual_from_version:45805' => 1006,
+ 'old:virtual_from_version:45050' => 1042,
+ 'old:virtual_from_version:45868' => 1517,
+ 'old:virtual_from_version:44308' => 1070,
+ 'old:virtual_from_version:49482' => 3151,
+ 'old:virtual_from_version:44079' => 1172,
+ 'old:virtual_from_version:45588' => 1616,
+ 'old:virtual_from_version:47845' => 1132,
+ 'old:virtual_from_version:45800' => 1112,
+ 'old:virtual_from_version:50382' => 1070,
+ 'old:virtual_from_version:40572' => 1070,
+ 'old:virtual_from_version:44395' => 1222,
+ 'old:virtual_from_version:42189' => 1070,
+ 'old:virtual_from_version:46728' => 1585,
+ 'old:virtual_from_version:44120' => 1062,
+ 'old:virtual_from_version:48026' => 2127,
+ 'old:virtual_from_version:44076' => 1025,
+ 'old:virtual_from_version:42620' => 1077,
+ 'old:virtual_from_version:38961' => 1025,
+ 'old:virtual_from_version:38790' => 1025,
+ 'old:virtual_from_version:46344' => 1067,
+ 'old:virtual_from_version:50155' => 1125,
+ 'old:virtual_from_version:47077' => 1125,
+ 'old:virtual_from_version:40730' => 1402,
+ 'old:virtual_from_version:42730' => 1009,
+ 'old:virtual_from_version:46006' => 1070,
+ 'old:virtual_from_version:46203' => 1070,
+ 'old:virtual_from_version:45627' => 1107,
+ 'old:virtual_from_version:44041' => 1077,
+ 'old:virtual_from_version:46182' => 1537,
+ 'old:virtual_from_version:46585' => 1070,
+ 'old:virtual_from_version:42206' => 1037,
+ 'old:virtual_from_version:44782' => 1172,
+ 'old:virtual_from_version:44445' => 1025,
+ 'old:virtual_from_version:50287' => 1532,
+ 'old:virtual_from_version:42813' => 1070,
+ 'old:virtual_from_version:49177' => 1070,
+ 'old:virtual_from_version:45253' => 1023,
+ 'old:virtual_from_version:42631' => 1009,
+ 'old:virtual_from_version:46405' => 1070,
+ 'old:virtual_from_version:47558' => 1125,
+ 'old:virtual_from_version:42490' => 1070,
+ 'old:virtual_from_version:46233' => 1070,
+ 'old:virtual_from_version:47859' => 1109,
+ 'old:virtual_from_version:40693' => 1125,
+ 'old:virtual_from_version:49418' => 3029,
+ 'old:virtual_from_version:42888' => 1037,
+ 'old:virtual_from_version:46879' => 1077,
+ 'old:virtual_from_version:49176' => 1062,
+ 'old:virtual_from_version:46829' => 1397,
+ 'old:virtual_from_version:46756' => 1070,
+ 'old:virtual_from_version:39508' => 1040,
+ 'old:virtual_from_version:42094' => 1070,
+ 'old:virtual_from_version:45052' => 1109,
+ 'old:virtual_from_version:47729' => 1067,
+ 'old:virtual_from_version:39547' => 1192,
+ 'old:virtual_from_version:46224' => 1070,
+ 'old:virtual_from_version:45552' => 1614,
+ 'old:virtual_from_version:40695' => 1077,
+ 'old:virtual_from_version:44536' => 1037,
+ 'old:virtual_from_version:47919' => 1009,
+ 'old:virtual_from_version:38765' => 1107,
+ 'old:virtual_from_version:50619' => 1070,
+ 'old:virtual_from_version:47834' => 1009,
+ 'old:virtual_from_version:44407' => 1015,
+ 'old:virtual_from_version:47093' => 1172,
+ 'old:virtual_from_version:39509' => 1044,
+ 'old:virtual_from_version:45793' => 1051,
+ 'old:virtual_from_version:42656' => 1070,
+ 'old:virtual_from_version:42112' => 1077,
+ 'old:virtual_from_version:50134' => 1070,
+ 'old:virtual_from_version:45306' => 1404,
+ 'old:virtual_from_version:46202' => 1062,
+ 'old:virtual_from_version:39311' => 1107,
+ 'old:virtual_from_version:44008' => 1070,
+ 'old:virtual_from_version:49068' => 1070,
+ 'old:virtual_from_version:44386' => 1043,
+ 'old:virtual_from_version:44453' => 1528,
+ 'old:virtual_from_version:40933' => 1037,
+ 'old:virtual_from_version:49830' => 1015,
+ 'old:virtual_from_version:46043' => 1649,
+ 'old:virtual_from_version:50481' => 3255,
+ 'old:virtual_from_version:46710' => 1070,
+ 'old:virtual_from_version:50343' => 3131,
+ 'old:virtual_from_version:44435' => 1077,
+ 'old:virtual_from_version:47998' => 1070,
+ 'old:virtual_from_version:47402' => 3047,
+ 'old:virtual_from_version:47064' => 3003,
+ 'old:virtual_from_version:50182' => 1070,
+ 'old:virtual_from_version:45815' => 1070,
+ 'old:virtual_from_version:50563' => 1125,
+ 'old:virtual_from_version:42464' => 1125,
+ 'old:virtual_from_version:42359' => 1077,
+ 'old:virtual_from_version:50494' => 3226,
+ 'old:virtual_from_version:47418' => 3008,
+ 'old:virtual_from_version:40558' => 1025,
+ 'old:virtual_from_version:42773' => 1037,
+ 'old:virtual_from_version:50483' => 3247,
+ 'old:virtual_from_version:45142' => 1125,
+ 'old:virtual_from_version:50675' => 3192,
+ 'old:virtual_from_version:45118' => 1070,
+ 'old:virtual_from_version:44066' => 1037,
+ 'old:virtual_from_version:44972' => 1110,
+ 'old:virtual_from_version:46155' => 1070,
+ 'old:virtual_from_version:44606' => 1077,
+ 'old:virtual_from_version:45878' => 1630,
+ 'old:virtual_from_version:40955' => 1109,
+ 'old:virtual_from_version:49530' => 1489,
+ 'old:virtual_from_version:44299' => 1077,
+ 'old:virtual_from_version:47090' => 1321,
+ 'old:virtual_from_version:45263' => 1224,
+ 'old:virtual_from_version:40825' => 1077,
+ 'old:virtual_from_version:43019' => 2044,
+ 'old:virtual_from_version:49814' => 3194,
+ 'old:virtual_from_version:38415' => 1069,
+ 'old:virtual_from_version:47207' => 1009,
+ 'old:virtual_from_version:49757' => 1585,
+ 'old:virtual_from_version:44791' => 1025,
+ 'old:virtual_from_version:44943' => 1517,
+ 'old:virtual_from_version:44132' => 1037,
+ 'old:virtual_from_version:44228' => 1037,
+ 'old:virtual_from_version:45961' => 1025,
+ 'old:virtual_from_version:49130' => 1689,
+ 'old:virtual_from_version:49752' => 1689,
+ 'old:virtual_from_version:47031' => 1125,
+ 'old:virtual_from_version:40468' => 1067,
+ 'old:virtual_from_version:39965' => 1095,
+ 'old:virtual_from_version:42555' => 1025,
+ 'old:virtual_from_version:46343' => 1109,
+ 'old:virtual_from_version:44255' => 1105,
+ 'old:virtual_from_version:49376' => 1077,
+ 'old:virtual_from_version:42904' => 1037,
+ 'old:virtual_from_version:46019' => 1404,
+ 'old:virtual_from_version:46658' => 1461,
+ 'old:virtual_from_version:42794' => 1115,
+ 'old:virtual_from_version:42327' => 1077,
+ 'old:virtual_from_version:39284' => 1007,
+ 'old:virtual_from_version:38978' => 1107,
+ 'old:virtual_from_version:45337' => 1125,
+ 'old:virtual_from_version:47976' => 1062,
+ 'old:virtual_from_version:40434' => 1109,
+ 'old:virtual_from_version:38570' => 1095,
+ 'old:virtual_from_version:47680' => 1659,
+ 'old:virtual_from_version:49543' => 1009,
+ 'old:virtual_from_version:44958' => 1560,
+ 'old:virtual_from_version:44139' => 1070,
+ 'old:virtual_from_version:47442' => 1109,
+ 'old:virtual_from_version:50644' => 1148,
+ 'old:virtual_from_version:47836' => 1404,
+ 'old:virtual_from_version:46054' => 1651,
+ 'old:virtual_from_version:46348' => 1671,
+ 'old:virtual_from_version:46079' => 1150,
+ 'old:virtual_from_version:49281' => 1659,
+ 'old:virtual_from_version:44325' => 1009,
+ 'old:virtual_from_version:42858' => 1037,
+ 'old:virtual_from_version:36542' => 1069,
+ 'old:virtual_from_version:47361' => 1107,
+ 'old:virtual_from_version:48017' => 2117,
+ 'old:virtual_from_version:45069' => 1125,
+ 'old:virtual_from_version:38545' => 1115,
+ 'old:virtual_from_version:45449' => 1222,
+ 'old:virtual_from_version:49053' => 3094,
+ 'old:virtual_from_version:45240' => 1062,
+ 'old:virtual_from_version:40709' => 1070,
+ 'old:virtual_from_version:44792' => 1077,
+ 'old:virtual_from_version:43004' => 2029,
+ 'old:virtual_from_version:42606' => 1172,
+ 'old:virtual_from_version:42835' => 1501,
+ 'old:virtual_from_version:50142' => 3131,
+ 'old:virtual_from_version:47235' => 1070,
+ 'old:virtual_from_version:40533' => 1070,
+ 'old:virtual_from_version:42871' => 1077,
+ 'old:virtual_from_version:49340' => 3167,
+ 'old:virtual_from_version:46853' => 3002,
+ 'old:virtual_from_version:46624' => 1051,
+ 'old:virtual_from_version:38990' => 1141,
+ 'old:virtual_from_version:47672' => 3078,
+ 'old:virtual_from_version:40164' => 1048,
+ 'old:virtual_from_version:42055' => 1070,
+ 'old:virtual_from_version:50554' => 1125,
+ 'old:virtual_from_version:47709' => 1070,
+ 'old:virtual_from_version:49411' => 1532,
+ 'old:virtual_from_version:46437' => 1077,
+ 'old:virtual_from_version:50544' => 3016,
+ 'old:virtual_from_version:13356' => 1022,
+ 'old:virtual_from_version:47073' => 3008,
+ 'old:virtual_from_version:45855' => 1070,
+ 'old:virtual_from_version:45136' => 1001,
+ 'old:virtual_from_version:45882' => 1070,
+ 'old:virtual_from_version:50235' => 1689,
+ 'old:virtual_from_version:45230' => 1569,
+ 'old:virtual_from_version:45518' => 1070,
+ 'old:virtual_from_version:49965' => 3211,
+ 'old:virtual_from_version:40838' => 1107,
+ 'old:virtual_from_version:46739' => 1077,
+ 'old:virtual_from_version:45414' => 1009,
+ 'old:virtual_from_version:49373' => 3167,
+ 'old:virtual_from_version:44406' => 1012,
+ 'old:virtual_from_version:44674' => 1077,
+ 'old:virtual_from_version:47310' => 1125,
+ 'old:virtual_from_version:42187' => 1109,
+ 'old:virtual_from_version:44239' => 1070,
+ 'old:virtual_from_version:47534' => 1077,
+ 'old:virtual_from_version:47589' => 1070,
+ 'old:virtual_from_version:50277' => 1659,
+ 'old:virtual_from_version:45144' => 1125,
+ 'old:virtual_from_version:45653' => 1067,
+ 'old:virtual_from_version:46729' => 1697,
+ 'old:virtual_from_version:44733' => 1077,
+ 'old:virtual_from_version:47500' => 1077,
+ 'old:virtual_from_version:44829' => 1011,
+ 'old:virtual_from_version:40947' => 1037,
+ 'old:virtual_from_version:50186' => 1037,
+ 'old:virtual_from_version:46456' => 1444,
+ 'old:virtual_from_version:42703' => 1037,
+ 'old:virtual_from_version:46966' => 1077,
+ 'old:virtual_from_version:40916' => 1110,
+ 'old:virtual_from_version:44668' => 1070,
+ 'old:virtual_from_version:49873' => 1070,
+ 'old:virtual_from_version:47253' => 1067,
+ 'old:virtual_from_version:50531' => 1048,
+ 'old:virtual_from_version:49607' => 1404,
+ 'old:virtual_from_version:39009' => 1083,
+ 'old:virtual_from_version:42118' => 1136,
+ 'old:virtual_from_version:42291' => 1025,
+ 'old:virtual_from_version:42389' => 1070,
+ 'old:virtual_from_version:42406' => 1077,
+ 'old:virtual_from_version:44971' => 1064,
+ 'old:virtual_from_version:46309' => 1009,
+ 'old:virtual_from_version:49254' => 1689,
+ 'old:virtual_from_version:46664' => 1077,
+ 'old:virtual_from_version:50512' => 1583,
+ 'old:virtual_from_version:46100' => 1070,
+ 'old:virtual_from_version:49073' => 1666,
+ 'old:virtual_from_version:44586' => 1077,
+ 'old:virtual_from_version:46466' => 1404,
+ 'old:virtual_from_version:42028' => 1037,
+ 'old:virtual_from_version:47221' => 1070,
+ 'old:virtual_from_version:42317' => 1413,
+ 'old:virtual_from_version:44587' => 1037,
+ 'old:virtual_from_version:44759' => 1006,
+ 'old:virtual_from_version:44714' => 1037,
+ 'old:virtual_from_version:40754' => 1077,
+ 'old:virtual_from_version:46568' => 1070,
+ 'old:virtual_from_version:46329' => 1077,
+ 'old:virtual_from_version:46899' => 1070,
+ 'old:virtual_from_version:47417' => 1689,
+ 'old:virtual_from_version:49867' => 3131,
+ 'old:virtual_from_version:49091' => 3139,
+ 'old:virtual_from_version:42197' => 1077,
+ 'old:virtual_from_version:46475' => 1105,
+ 'old:virtual_from_version:46902' => 1404,
+ 'old:virtual_from_version:46965' => 1125,
+ 'old:virtual_from_version:39716' => 1083,
+ 'old:virtual_from_version:45223' => 1576,
+ 'old:virtual_from_version:49797' => 1070,
+ 'old:virtual_from_version:47850' => 1532,
+ 'old:virtual_from_version:45575' => 1070,
+ 'old:virtual_from_version:47822' => 3094,
+ 'old:virtual_from_version:47226' => 1070,
+ 'old:virtual_from_version:45250' => 1110,
+ 'old:virtual_from_version:50337' => 3131,
+ 'old:virtual_from_version:46618' => 1172,
+ 'old:virtual_from_version:42958' => 1009,
+ 'old:virtual_from_version:50629' => 1419,
+ 'old:virtual_from_version:47711' => 1109,
+ 'old:virtual_from_version:42090' => 1070,
+ 'old:virtual_from_version:44413' => 1021,
+ 'old:virtual_from_version:44393' => 1000,
+ 'old:virtual_from_version:46314' => 1665,
+ 'old:virtual_from_version:49800' => 1107,
+ 'old:virtual_from_version:50524' => 1033,
+ 'old:virtual_from_version:40799' => 1070,
+ 'old:virtual_from_version:46207' => 1070,
+ 'old:virtual_from_version:40929' => 1037,
+ 'old:virtual_from_version:49528' => 1362,
+ 'old:virtual_from_version:39596' => 1000,
+ 'old:virtual_from_version:46921' => 1621,
+ 'old:virtual_from_version:45013' => 1136,
+ 'old:virtual_from_version:46906' => 1077,
+ 'old:virtual_from_version:46116' => 1353,
+ 'old:virtual_from_version:46245' => 1574,
+ 'old:virtual_from_version:40652' => 1398,
+ 'old:virtual_from_version:47123' => 1172,
+ 'old:virtual_from_version:38847' => 1112,
+ 'old:virtual_from_version:46168' => 1070,
+ 'old:virtual_from_version:40859' => 1037,
+ 'old:virtual_from_version:47759' => 1037,
+ 'old:virtual_from_version:47420' => 1070,
+ 'old:virtual_from_version:49841' => 1517,
+ 'old:virtual_from_version:40399' => 1349,
+ 'old:virtual_from_version:46877' => 1125,
+ 'old:virtual_from_version:49430' => 3029,
+ 'old:virtual_from_version:50395' => 3214,
+ 'old:virtual_from_version:49033' => 3046,
+ 'old:virtual_from_version:46571' => 1498,
+ 'old:virtual_from_version:49402' => 1070,
+ 'old:virtual_from_version:42318' => 1070,
+ 'old:virtual_from_version:45432' => 1077,
+ 'old:virtual_from_version:44869' => 1009,
+ 'old:virtual_from_version:46542' => 1077,
+ 'old:virtual_from_version:49186' => 1404,
+ 'old:virtual_from_version:40846' => 1077,
+ 'old:virtual_from_version:49929' => 3209,
+ 'old:virtual_from_version:49999' => 1070,
+ 'old:virtual_from_version:44873' => 1070,
+ 'old:virtual_from_version:46736' => 1070,
+ 'old:virtual_from_version:39933' => 1247,
+ 'old:virtual_from_version:49226' => 1314,
+ 'old:virtual_from_version:47204' => 1070,
+ 'old:virtual_from_version:40925' => 1067,
+ 'old:virtual_from_version:44993' => 1069,
+ 'old:virtual_from_version:41008' => 2019,
+ 'old:virtual_from_version:47719' => 1321,
+ 'old:virtual_from_version:47766' => 3078,
+ 'old:virtual_from_version:47553' => 1077,
+ 'old:virtual_from_version:44693' => 1048,
+ 'old:virtual_from_version:42504' => 1012,
+ 'old:virtual_from_version:40750' => 1109,
+ 'old:virtual_from_version:49116' => 1051,
+ 'old:virtual_from_version:47198' => 1125,
+ 'old:virtual_from_version:47168' => 1444,
+ 'old:virtual_from_version:45079' => 1402,
+ 'old:virtual_from_version:47282' => 1397,
+ 'old:virtual_from_version:47358' => 3045,
+ 'old:virtual_from_version:49546' => 1125,
+ 'old:virtual_from_version:46606' => 1404,
+ 'old:virtual_from_version:44035' => 1037,
+ 'old:virtual_from_version:49108' => 3136,
+ 'old:virtual_from_version:44404' => 1010,
+ 'old:virtual_from_version:50400' => 3131,
+ 'old:virtual_from_version:44381' => 1027,
+ 'old:virtual_from_version:45387' => 1362,
+ 'old:virtual_from_version:44424' => 1043,
+ 'old:virtual_from_version:47447' => 1057,
+ 'old:virtual_from_version:47157' => 1583,
+ 'old:virtual_from_version:45851' => 1109,
+ 'old:virtual_from_version:44507' => 1053,
+ 'old:virtual_from_version:42096' => 1037,
+ 'old:virtual_from_version:49298' => 3136,
+ 'old:virtual_from_version:46053' => 1077,
+ 'old:virtual_from_version:44524' => 1136,
+ 'old:virtual_from_version:45576' => 1077,
+ 'old:virtual_from_version:49032' => 1649,
+ 'old:virtual_from_version:40655' => 1083,
+ 'old:virtual_from_version:45080' => 1110,
+ 'old:virtual_from_version:40786' => 1077,
+ 'old:virtual_from_version:45819' => 1077,
+ 'old:virtual_from_version:50355' => 1689,
+ 'old:virtual_from_version:44659' => 1070,
+ 'old:virtual_from_version:49629' => 3184,
+ 'old:virtual_from_version:40952' => 1009,
+ 'old:virtual_from_version:42323' => 1112,
+ 'old:virtual_from_version:44798' => 1067,
+ 'old:virtual_from_version:45009' => 1517,
+ 'old:virtual_from_version:47042' => 1172,
+ 'old:virtual_from_version:45530' => 1009,
+ 'old:virtual_from_version:47191' => 1070,
+ 'old:virtual_from_version:45366' => 1125,
+ 'old:virtual_from_version:44513' => 1107,
+ 'old:virtual_from_version:45536' => 1136,
+ 'old:virtual_from_version:40657' => 1125,
+ 'old:virtual_from_version:46264' => 1070,
+ 'old:virtual_from_version:46909' => 1095,
+ 'old:virtual_from_version:50047' => 1105,
+ 'old:virtual_from_version:46175' => 1532,
+ 'old:virtual_from_version:42483' => 1104,
+ 'old:virtual_from_version:40511' => 1070,
+ 'old:virtual_from_version:44482' => 1077,
+ 'old:virtual_from_version:50432' => 1057,
+ 'old:virtual_from_version:50455' => 1025,
+ 'old:virtual_from_version:42591' => 1070,
+ 'old:virtual_from_version:49511' => 3180,
+ 'old:virtual_from_version:50260' => 3131,
+ 'old:virtual_from_version:45739' => 1070,
+ 'old:virtual_from_version:38375' => 1070,
+ 'old:virtual_from_version:38835' => 1051,
+ 'old:virtual_from_version:42547' => 1070,
+ 'old:virtual_from_version:49588' => 1105,
+ 'old:virtual_from_version:45644' => 1009,
+ 'old:virtual_from_version:47770' => 1070,
+ 'old:virtual_from_version:47399' => 1077,
+ 'old:virtual_from_version:49976' => 3209,
+ 'old:virtual_from_version:46638' => 1404,
+ 'old:virtual_from_version:42967' => 1077,
+ 'old:virtual_from_version:45351' => 1362,
+ 'old:virtual_from_version:38538' => 1077,
+ 'old:virtual_from_version:45288' => 1568,
+ 'old:virtual_from_version:45308' => 1125,
+ 'old:virtual_from_version:49447' => 1580,
+ 'old:virtual_from_version:41002' => 2014,
+ 'old:virtual_from_version:42357' => 1009,
+ 'old:virtual_from_version:42023' => 1077,
+ 'old:virtual_from_version:49885' => 3131,
+ 'old:virtual_from_version:45856' => 1125,
+ 'old:virtual_from_version:42296' => 1428,
+ 'old:virtual_from_version:45268' => 1015,
+ 'old:virtual_from_version:42337' => 1037,
+ 'old:virtual_from_version:49121' => 1112,
+ 'old:virtual_from_version:49928' => 3009,
+ 'old:virtual_from_version:46113' => 1404,
+ 'old:virtual_from_version:46878' => 1025,
+ 'old:virtual_from_version:50251' => 3186,
+ 'old:virtual_from_version:47124' => 1025,
+ 'old:virtual_from_version:46038' => 1077,
+ 'old:virtual_from_version:47651' => 1077,
+ 'old:virtual_from_version:39578' => 1100,
+ 'old:virtual_from_version:43026' => 2051,
+ 'old:virtual_from_version:50624' => 1110,
+ 'old:virtual_from_version:50590' => 3267,
+ 'old:virtual_from_version:47441' => 1125,
+ 'old:virtual_from_version:40882' => 1048,
+ 'old:virtual_from_version:40872' => 1019,
+ 'old:virtual_from_version:47807' => 1077,
+ 'old:virtual_from_version:47111' => 3017,
+ 'old:virtual_from_version:50472' => 3249,
+ 'old:virtual_from_version:50674' => 3270,
+ 'old:virtual_from_version:47025' => 1172,
+ 'old:virtual_from_version:49446' => 1444,
+ 'old:virtual_from_version:44121' => 1110,
+ 'old:virtual_from_version:50503' => 3174,
+ 'old:virtual_from_version:42477' => 1444,
+ 'old:virtual_from_version:42509' => 1062,
+ 'old:virtual_from_version:45641' => 1070,
+ 'old:virtual_from_version:50398' => 1069,
+ 'old:virtual_from_version:42274' => 1222,
+ 'old:virtual_from_version:45533' => 1613,
+ 'old:virtual_from_version:47973' => 1689,
+ 'old:virtual_from_version:47528' => 1109,
+ 'old:virtual_from_version:45311' => 1583,
+ 'old:virtual_from_version:47359' => 1070,
+ 'old:virtual_from_version:43066' => 2067,
+ 'old:virtual_from_version:49400' => 1025,
+ 'old:virtual_from_version:50387' => 1070,
+ 'old:virtual_from_version:50473' => 3250,
+ 'old:virtual_from_version:49112' => 3146,
+ 'old:virtual_from_version:49648' => 1489,
+ 'old:virtual_from_version:40477' => 1083,
+ 'old:virtual_from_version:45993' => 1076,
+ 'old:virtual_from_version:44341' => 1077,
+ 'old:virtual_from_version:46916' => 1136,
+ 'old:virtual_from_version:45239' => 1016,
+ 'old:virtual_from_version:47492' => 1025,
+ 'old:virtual_from_version:34143' => 1051,
+ 'old:virtual_from_version:39771' => 1088,
+ 'old:virtual_from_version:42222' => 1413,
+ 'old:virtual_from_version:45731' => 1125,
+ 'old:virtual_from_version:39704' => 1019,
+ 'old:virtual_from_version:49961' => 1580,
+ 'old:virtual_from_version:44130' => 1009,
+ 'old:virtual_from_version:46591' => 1077,
+ 'old:virtual_from_version:50377' => 1125,
+ 'old:virtual_from_version:42737' => 1108,
+ 'old:virtual_from_version:46132' => 1109,
+ 'old:virtual_from_version:42331' => 1032,
+ 'old:virtual_from_version:45861' => 1125,
+ 'old:virtual_from_version:50557' => 3259,
+ 'old:virtual_from_version:42983' => 1507,
+ 'old:virtual_from_version:42502' => 1091,
+ 'old:virtual_from_version:46888' => 1070,
+ 'old:virtual_from_version:44788' => 1125,
+ 'old:virtual_from_version:40998' => 1109,
+ 'old:virtual_from_version:40689' => 1107,
+ 'old:virtual_from_version:44601' => 1107,
+ 'old:virtual_from_version:45628' => 1067,
+ 'old:virtual_from_version:46730' => 1070,
+ 'old:virtual_from_version:47524' => 1410,
+ 'old:virtual_from_version:39935' => 1025,
+ 'old:virtual_from_version:47749' => 1125,
+ 'old:virtual_from_version:47487' => 1109,
+ 'old:virtual_from_version:44133' => 1062,
+ 'old:virtual_from_version:46335' => 1670,
+ 'old:virtual_from_version:49668' => 1136,
+ 'old:virtual_from_version:50643' => 3259,
+ 'old:virtual_from_version:39941' => 1009,
+ 'old:virtual_from_version:42602' => 1037,
+ 'old:virtual_from_version:45019' => 1107,
+ 'old:virtual_from_version:46834' => 1172,
+ 'old:virtual_from_version:40948' => 1048,
+ 'old:virtual_from_version:50347' => 1125,
+ 'old:virtual_from_version:38339' => 1107,
+ 'old:virtual_from_version:45559' => 1107,
+ 'old:virtual_from_version:42345' => 1037,
+ 'old:virtual_from_version:46250' => 1070,
+ 'old:virtual_from_version:44361' => 1222,
+ 'old:virtual_from_version:45147' => 1125,
+ 'old:virtual_from_version:44630' => 1172,
+ 'old:virtual_from_version:49710' => 1084,
+ 'old:virtual_from_version:45304' => 1580,
+ 'old:virtual_from_version:46535' => 1070,
+ 'old:virtual_from_version:45978' => 1533,
+ 'old:virtual_from_version:40911' => 1110,
+ 'old:virtual_from_version:49156' => 1077,
+ 'old:virtual_from_version:44074' => 1070,
+ 'old:virtual_from_version:44396' => 1070,
+ 'old:virtual_from_version:49403' => 1689,
+ 'old:virtual_from_version:45532' => 1085,
+ 'old:virtual_from_version:44162' => 1037,
+ 'old:virtual_from_version:44850' => 1077,
+ 'old:virtual_from_version:40857' => 1025,
+ 'old:virtual_from_version:49784' => 1070,
+ 'old:virtual_from_version:49689' => 1404,
+ 'old:virtual_from_version:50297' => 3234,
+ 'old:virtual_from_version:44728' => 1077,
+ 'old:virtual_from_version:47414' => 1037,
+ 'old:virtual_from_version:42115' => 1077,
+ 'old:virtual_from_version:45619' => 1070,
+ 'old:virtual_from_version:45722' => 1107,
+ 'old:virtual_from_version:46631' => 1077,
+ 'old:virtual_from_version:42568' => 1077,
+ 'old:virtual_from_version:42249' => 1070,
+ 'old:virtual_from_version:49047' => 1584,
+ 'old:virtual_from_version:42361' => 1000,
+ 'old:virtual_from_version:47765' => 3078,
+ 'old:virtual_from_version:40725' => 1048,
+ 'old:virtual_from_version:45097' => 1077,
+ 'old:virtual_from_version:42611' => 1172,
+ 'old:virtual_from_version:45396' => 1009,
+ 'old:virtual_from_version:49410' => 1404,
+ 'old:virtual_from_version:40870' => 1070,
+ 'old:virtual_from_version:45808' => 1397,
+ 'old:virtual_from_version:47525' => 1070,
+ 'old:virtual_from_version:42073' => 1037,
+ 'old:virtual_from_version:50193' => 3131,
+ 'old:virtual_from_version:47398' => 1172,
+ 'old:virtual_from_version:44942' => 1014,
+ 'old:virtual_from_version:49992' => 1666,
+ 'old:virtual_from_version:46548' => 1070,
+ 'old:virtual_from_version:44645' => 1517,
+ 'old:virtual_from_version:49761' => 1672,
+ 'old:virtual_from_version:44147' => 1037,
+ 'old:virtual_from_version:46131' => 1070,
+ 'old:virtual_from_version:50296' => 3131,
+ 'old:virtual_from_version:40273' => 1222,
+ 'old:virtual_from_version:44414' => 1517,
+ 'old:virtual_from_version:36625' => 1012,
+ 'old:virtual_from_version:49971' => 3209,
+ 'old:virtual_from_version:46023' => 1580,
+ 'old:virtual_from_version:50270' => 1070,
+ 'old:virtual_from_version:47625' => 1077,
+ 'old:virtual_from_version:44698' => 1077,
+ 'old:virtual_from_version:44697' => 1025,
+ 'old:virtual_from_version:46554' => 1555,
+ 'old:virtual_from_version:44382' => 1030,
+ 'old:virtual_from_version:45261' => 1109,
+ 'old:virtual_from_version:50157' => 1580,
+ 'old:virtual_from_version:49759' => 1689,
+ 'old:virtual_from_version:42646' => 1112,
+ 'old:virtual_from_version:46882' => 1070,
+ 'old:virtual_from_version:44085' => 1107,
+ 'old:virtual_from_version:46308' => 1172,
+ 'old:virtual_from_version:42059' => 1112,
+ 'old:virtual_from_version:49107' => 3147,
+ 'old:virtual_from_version:47584' => 1007,
+ 'old:virtual_from_version:40813' => 1107,
+ 'old:virtual_from_version:44652' => 1077,
+ 'old:virtual_from_version:42374' => 1107,
+ 'old:virtual_from_version:42412' => 1077,
+ 'old:virtual_from_version:50394' => 3159,
+ 'old:virtual_from_version:42370' => 1077,
+ 'old:virtual_from_version:40606' => 1077,
+ 'old:virtual_from_version:45324' => 1125,
+ 'old:virtual_from_version:46872' => 1410,
+ 'old:virtual_from_version:47470' => 1402,
+ 'old:virtual_from_version:44976' => 1021,
+ 'old:virtual_from_version:40520' => 1109,
+ 'old:virtual_from_version:39234' => 1150,
+ 'old:virtual_from_version:42780' => 1037,
+ 'old:virtual_from_version:45092' => 1077,
+ 'old:virtual_from_version:46117' => 1070,
+ 'old:virtual_from_version:45767' => 1035,
+ 'old:virtual_from_version:45456' => 1070,
+ 'old:virtual_from_version:40912' => 1067,
+ 'old:virtual_from_version:47925' => 3008,
+ 'old:virtual_from_version:50505' => 1311,
+ 'old:virtual_from_version:46772' => 1070,
+ 'old:virtual_from_version:47380' => 3008,
+ 'old:virtual_from_version:46333' => 1077,
+ 'old:virtual_from_version:44017' => 1125,
+ 'old:virtual_from_version:46226' => 1070,
+ 'old:virtual_from_version:46232' => 1615,
+ 'old:virtual_from_version:45737' => 1555,
+ 'old:virtual_from_version:44775' => 1423,
+ 'old:virtual_from_version:46029' => 1649,
+ 'old:virtual_from_version:43000' => 2000,
+ 'old:virtual_from_version:46712' => 1070,
+ 'old:virtual_from_version:49997' => 3214,
+ 'old:virtual_from_version:50257' => 1070,
+ 'old:virtual_from_version:44240' => 1009,
+ 'old:virtual_from_version:44009' => 1009,
+ 'old:virtual_from_version:40368' => 1009,
+ 'old:virtual_from_version:46273' => 1030,
+ 'old:virtual_from_version:40595' => 1077,
+ 'old:virtual_from_version:45756' => 1077,
+ 'old:virtual_from_version:45651' => 1125,
+ 'old:virtual_from_version:49022' => 1689,
+ 'old:virtual_from_version:49305' => 1584,
+ 'old:virtual_from_version:45496' => 1007,
+ 'old:virtual_from_version:42154' => 1070,
+ 'old:virtual_from_version:50212' => 3131,
+ 'old:virtual_from_version:46869' => 1077,
+ 'old:virtual_from_version:44614' => 1017,
+ 'old:virtual_from_version:44526' => 1009,
+ 'old:virtual_from_version:47665' => 1077,
+ 'old:virtual_from_version:42379' => 1311,
+ 'old:virtual_from_version:44584' => 1070,
+ 'old:virtual_from_version:45695' => 1027,
+ 'old:virtual_from_version:42478' => 1009,
+ 'old:virtual_from_version:44636' => 1136,
+ 'old:virtual_from_version:44180' => 1321,
+ 'old:virtual_from_version:42246' => 1037,
+ 'old:virtual_from_version:44910' => 1077,
+ 'old:virtual_from_version:44468' => 1009,
+ 'old:virtual_from_version:40901' => 1037,
+ 'old:virtual_from_version:42516' => 1172,
+ 'old:virtual_from_version:45567' => 1614,
+ 'old:virtual_from_version:42445' => 1067,
+ 'old:virtual_from_version:46684' => 1659,
+ 'old:virtual_from_version:50237' => 1035,
+ 'old:virtual_from_version:45753' => 1070,
+ 'old:virtual_from_version:45523' => 1136,
+ 'old:virtual_from_version:46714' => 1172,
+ 'old:virtual_from_version:45595' => 1077,
+ 'old:virtual_from_version:42691' => 1109,
+ 'old:virtual_from_version:44663' => 1070,
+ 'old:virtual_from_version:47566' => 1588,
+ 'old:virtual_from_version:49632' => 1070,
+ 'old:virtual_from_version:40600' => 1048,
+ 'old:virtual_from_version:42815' => 1025,
+ 'old:virtual_from_version:40509' => 1110,
+ 'old:virtual_from_version:40444' => 1105,
+ 'old:virtual_from_version:47323' => 1172,
+ 'old:virtual_from_version:44321' => 1172,
+ 'old:virtual_from_version:47220' => 1050,
+ 'old:virtual_from_version:47005' => 1125,
+ 'old:virtual_from_version:42796' => 1077,
+ 'old:virtual_from_version:42951' => 1025,
+ 'old:virtual_from_version:42102' => 1077,
+ 'old:virtual_from_version:42864' => 1009,
+ 'old:virtual_from_version:42330' => 1141,
+ 'old:virtual_from_version:46875' => 1613,
+ 'old:virtual_from_version:47139' => 1172,
+ 'old:virtual_from_version:49891' => 1489,
+ 'old:virtual_from_version:44555' => 1037,
+ 'old:virtual_from_version:44327' => 1025,
+ 'old:virtual_from_version:46709' => 1077,
+ 'old:virtual_from_version:46012' => 1090,
+ 'old:virtual_from_version:44123' => 1125,
+ 'old:virtual_from_version:42129' => 1105,
+ 'old:virtual_from_version:40981' => 1077,
+ 'old:virtual_from_version:46107' => 1070,
+ 'old:virtual_from_version:40920' => 1025,
+ 'old:virtual_from_version:49349' => 1070,
+ 'old:virtual_from_version:49568' => 1404,
+ 'old:virtual_from_version:46094' => 1070,
+ 'old:virtual_from_version:47280' => 1125,
+ 'old:virtual_from_version:42944' => 1009,
+ 'old:virtual_from_version:50022' => 1125,
+ 'old:virtual_from_version:47641' => 1109,
+ 'old:virtual_from_version:44948' => 1001,
+ 'old:virtual_from_version:42690' => 1062,
+ 'old:virtual_from_version:47097' => 1070,
+ 'old:virtual_from_version:46055' => 1070,
+ 'old:virtual_from_version:49310' => 1077,
+ 'old:virtual_from_version:42545' => 1343,
+ 'old:virtual_from_version:44726' => 1009,
+ 'old:virtual_from_version:50746' => 3259,
+ 'old:virtual_from_version:46936' => 1076,
+ 'old:virtual_from_version:46342' => 1070,
+ 'old:virtual_from_version:46532' => 1025,
+ 'old:virtual_from_version:49480' => 1689,
+ 'old:virtual_from_version:49416' => 1580,
+ 'old:virtual_from_version:46336' => 1007,
+ 'old:virtual_from_version:46589' => 1404,
+ 'old:virtual_from_version:50501' => 3131,
+ 'old:virtual_from_version:47279' => 3038,
+ 'old:virtual_from_version:45143' => 1107,
+ 'old:virtual_from_version:47344' => 1689,
+ 'old:virtual_from_version:42010' => 1070,
+ 'old:virtual_from_version:42397' => 1077,
+ 'old:virtual_from_version:50642' => 1587,
+ 'old:virtual_from_version:45018' => 1222,
+ 'old:virtual_from_version:47133' => 1172,
+ 'old:virtual_from_version:44511' => 1172,
+ 'old:virtual_from_version:40260' => 1146,
+ 'old:virtual_from_version:42282' => 1424,
+ 'old:virtual_from_version:45592' => 1070,
+ 'old:virtual_from_version:49321' => 3146,
+ 'old:virtual_from_version:40066' => 1070,
+ 'old:virtual_from_version:42099' => 1077,
+ 'old:virtual_from_version:49440' => 1172,
+ 'old:virtual_from_version:44102' => 1037,
+ 'old:virtual_from_version:42489' => 1107,
+ 'old:virtual_from_version:46776' => 1077,
+ 'old:virtual_from_version:50716' => 1007,
+ 'old:virtual_from_version:45568' => 1172,
+ 'old:virtual_from_version:46380' => 1005,
+ 'old:virtual_from_version:49774' => 3031,
+ 'old:virtual_from_version:47061' => 1172,
+ 'old:virtual_from_version:40247' => 1107,
+ 'old:virtual_from_version:46122' => 1070,
+ 'old:virtual_from_version:46163' => 1006,
+ 'old:virtual_from_version:44877' => 1136,
+ 'old:virtual_from_version:44687' => 1070,
+ 'old:virtual_from_version:44801' => 1125,
+ 'old:virtual_from_version:49388' => 1095,
+ 'old:virtual_from_version:44354' => 1515,
+ 'old:virtual_from_version:47026' => 1077,
+ 'old:virtual_from_version:49215' => 1404,
+ 'old:virtual_from_version:40732' => 1070,
+ 'old:virtual_from_version:46748' => 1070,
+ 'old:virtual_from_version:44345' => 1070,
+ 'old:virtual_from_version:40817' => 1077,
+ 'old:virtual_from_version:44301' => 1404,
+ 'old:virtual_from_version:49155' => 1009,
+ 'old:virtual_from_version:42021' => 1070,
+ 'old:virtual_from_version:49192' => 3078,
+ 'old:virtual_from_version:43039' => 2030,
+ 'old:virtual_from_version:43060' => 2059,
+ 'old:virtual_from_version:42116' => 1037,
+ 'old:virtual_from_version:40994' => 1009,
+ 'old:virtual_from_version:50135' => 1172,
+ 'old:virtual_from_version:47263' => 1077,
+ 'old:virtual_from_version:40743' => 1025,
+ 'old:virtual_from_version:49160' => 1070,
+ 'old:virtual_from_version:50199' => 3131,
+ 'old:virtual_from_version:42286' => 1070,
+ 'old:virtual_from_version:46498' => 1107,
+ 'old:virtual_from_version:44585' => 1025,
+ 'old:virtual_from_version:46766' => 1025,
+ 'old:virtual_from_version:45480' => 1136,
+ 'old:virtual_from_version:40489' => 1070,
+ 'old:virtual_from_version:44530' => 1110,
+ 'old:virtual_from_version:47720' => 1070,
+ 'old:virtual_from_version:28096' => 1084,
+ 'old:virtual_from_version:45001' => 1009,
+ 'old:virtual_from_version:39956' => 1076,
+ 'old:virtual_from_version:43093' => 2085,
+ 'old:virtual_from_version:46826' => 1048,
+ 'old:virtual_from_version:42725' => 1110,
+ 'old:virtual_from_version:42558' => 1070,
+ 'old:virtual_from_version:47298' => 1070,
+ 'old:virtual_from_version:47338' => 1070,
+ 'old:virtual_from_version:50708' => 1533,
+ 'old:virtual_from_version:49680' => 3190,
+ 'old:virtual_from_version:40218' => 1112,
+ 'old:virtual_from_version:46816' => 1509,
+ 'old:virtual_from_version:46173' => 1009,
+ 'old:virtual_from_version:40425' => 1335,
+ 'old:virtual_from_version:40187' => 1051,
+ 'old:virtual_from_version:45447' => 1107,
+ 'old:virtual_from_version:47444' => 1077,
+ 'old:virtual_from_version:47856' => 1314,
+ 'old:virtual_from_version:47469' => 1077,
+ 'old:virtual_from_version:49077' => 1666,
+ 'old:virtual_from_version:49614' => 1025,
+ 'old:virtual_from_version:39577' => 1087,
+ 'old:virtual_from_version:49333' => 1404,
+ 'old:virtual_from_version:42392' => 1077,
+ 'old:virtual_from_version:50525' => 1062,
+ 'old:virtual_from_version:45748' => 1019,
+ 'old:virtual_from_version:49889' => 1070,
+ 'old:virtual_from_version:47849' => 1077,
+ 'old:virtual_from_version:46393' => 1404,
+ 'old:virtual_from_version:46516' => 1125,
+ 'old:virtual_from_version:44499' => 1125,
+ 'old:virtual_from_version:39431' => 1110,
+ 'old:virtual_from_version:42026' => 1070,
+ 'old:virtual_from_version:50068' => 3131,
+ 'old:virtual_from_version:44444' => 1070,
+ 'old:virtual_from_version:44216' => 1419,
+ 'old:virtual_from_version:47994' => 1070,
+ 'old:virtual_from_version:10002' => 2001,
+ 'old:virtual_from_version:49736' => 1007,
+ 'old:virtual_from_version:42682' => 1037,
+ 'old:virtual_from_version:45129' => 1009,
+ 'old:virtual_from_version:42100' => 1037,
+ 'old:virtual_from_version:50319' => 1125,
+ 'old:virtual_from_version:42664' => 1077,
+ 'old:virtual_from_version:49904' => 3131,
+ 'old:virtual_from_version:38705' => 1051,
+ 'old:virtual_from_version:45502' => 1009,
+ 'old:virtual_from_version:50445' => 3189,
+ 'old:virtual_from_version:50647' => 1110,
+ 'old:virtual_from_version:44184' => 1404,
+ 'old:virtual_from_version:40339' => 1328,
+ 'old:virtual_from_version:42302' => 1009,
+ 'old:virtual_from_version:42587' => 1037,
+ 'old:virtual_from_version:4525 ' => 1055,
+ 'old:virtual_from_version:49594' => 1105,
+ 'old:virtual_from_version:45226' => 1414,
+ 'old:virtual_from_version:42754' => 1077,
+ 'old:virtual_from_version:47300' => 1109,
+ 'old:virtual_from_version:49554' => 1005,
+ 'old:virtual_from_version:49844' => 3194,
+ 'old:virtual_from_version:38811' => 1009,
+ 'old:virtual_from_version:43109' => 2070,
+ 'old:virtual_from_version:49199' => 1070,
+ 'old:virtual_from_version:49278' => 1070,
+ 'old:virtual_from_version:46774' => 1666,
+ 'old:virtual_from_version:46315' => 1666,
+ 'old:virtual_from_version:44671' => 1224,
+ 'old:virtual_from_version:45723' => 1070,
+ 'old:virtual_from_version:44060' => 1070,
+ 'old:virtual_from_version:49887' => 1311,
+ 'old:virtual_from_version:50107' => 3221,
+ 'old:virtual_from_version:47710' => 1107,
+ 'old:virtual_from_version:43099' => 2091,
+ 'old:virtual_from_version:46667' => 1141,
+ 'old:virtual_from_version:42079' => 1051,
+ 'old:virtual_from_version:50184' => 3131,
+ 'old:virtual_from_version:47452' => 1077,
+ 'old:virtual_from_version:46073' => 1070,
+ 'old:virtual_from_version:50422' => 1413,
+ 'old:virtual_from_version:46378' => 1076,
+ 'old:virtual_from_version:49846' => 1172,
+ 'old:virtual_from_version:47971' => 1077,
+ 'old:virtual_from_version:46850' => 1070,
+ 'old:virtual_from_version:46241' => 1107,
+ 'old:virtual_from_version:44262' => 1009,
+ 'old:virtual_from_version:38787' => 1130,
+ 'old:virtual_from_version:40528' => 1077,
+ 'old:virtual_from_version:44817' => 1107,
+ 'old:virtual_from_version:44691' => 1037,
+ 'old:virtual_from_version:44946' => 1419,
+ 'old:virtual_from_version:49978' => 3137,
+ 'old:virtual_from_version:40506' => 1077,
+ 'old:virtual_from_version:44808' => 1172,
+ 'old:virtual_from_version:45436' => 1077,
+ 'old:virtual_from_version:45697' => 1067,
+ 'old:virtual_from_version:50753' => 3266,
+ 'old:virtual_from_version:49327' => 1689,
+ 'old:virtual_from_version:45831' => 1009,
+ 'old:virtual_from_version:49370' => 1005,
+ 'old:virtual_from_version:38642' => 1123,
+ 'old:virtual_from_version:49048' => 1585,
+ 'old:virtual_from_version:49641' => 1067,
+ 'old:virtual_from_version:46830' => 1070,
+ 'old:virtual_from_version:47308' => 1062,
+ 'old:virtual_from_version:50227' => 3228,
+ 'old:virtual_from_version:46294' => 1555,
+ 'old:virtual_from_version:47252' => 1109,
+ 'old:virtual_from_version:39394' => 1051,
+ 'old:virtual_from_version:39331' => 1030,
+ 'old:virtual_from_version:40812' => 1067,
+ 'old:virtual_from_version:46534' => 1533,
+ 'old:virtual_from_version:46021' => 1461,
+ 'old:virtual_from_version:39134' => 1094,
+ 'old:virtual_from_version:45669' => 1077,
+ 'old:virtual_from_version:13338' => 1016,
+ 'old:virtual_from_version:46732' => 1172,
+ 'old:virtual_from_version:42422' => 1107,
+ 'old:virtual_from_version:40758' => 1081,
+ 'old:virtual_from_version:50110' => 1070,
+ 'old:virtual_from_version:46527' => 1077,
+ 'old:virtual_from_version:45381' => 1404,
+ 'old:virtual_from_version:42739' => 1077,
+ 'old:virtual_from_version:44116' => 1070,
+ 'old:virtual_from_version:42599' => 1007,
+ 'old:virtual_from_version:47930' => 1125,
+ 'old:virtual_from_version:47002' => 1037,
+ 'old:virtual_from_version:40435' => 1067,
+ 'old:virtual_from_version:40583' => 1136,
+ 'old:virtual_from_version:13386' => 1039,
+ 'old:virtual_from_version:47712' => 1077,
+ 'old:virtual_from_version:44392' => 1095,
+ 'old:virtual_from_version:50498' => 3251,
+ 'old:virtual_from_version:50391' => 1172,
+ 'old:virtual_from_version:45133' => 1488,
+ 'old:virtual_from_version:49598' => 1095,
+ 'old:virtual_from_version:47527' => 1048,
+ 'old:virtual_from_version:44159' => 1070,
+ 'old:virtual_from_version:42030' => 1070,
+ 'old:virtual_from_version:40456' => 1035,
+ 'old:virtual_from_version:45115' => 1070,
+ 'old:virtual_from_version:42019' => 1077,
+ 'old:virtual_from_version:13352' => 1021,
+ 'old:virtual_from_version:42328' => 1037,
+ 'old:virtual_from_version:49395' => 3120,
+ 'old:virtual_from_version:43056' => 2058,
+ 'old:virtual_from_version:44199' => 1077,
+ 'old:virtual_from_version:44223' => 1077,
+ 'old:virtual_from_version:48042' => 2139,
+ 'old:virtual_from_version:45467' => 1070,
+ 'old:virtual_from_version:38776' => 1067,
+ 'old:virtual_from_version:50690' => 1417,
+ 'old:virtual_from_version:50509' => 3183,
+ 'old:virtual_from_version:49962' => 3131,
+ 'old:virtual_from_version:46510' => 1585,
+ 'old:virtual_from_version:46166' => 1630,
+ 'old:virtual_from_version:50747' => 3267,
+ 'old:virtual_from_version:44411' => 1019,
+ 'old:virtual_from_version:47533' => 1109,
+ 'old:virtual_from_version:50138' => 1659,
+ 'old:virtual_from_version:46225' => 1077,
+ 'old:virtual_from_version:47394' => 1070,
+ 'old:virtual_from_version:49942' => 1172,
+ 'old:virtual_from_version:45558' => 1125,
+ 'old:virtual_from_version:44175' => 1067,
+ 'old:virtual_from_version:42827' => 1070,
+ 'old:virtual_from_version:42040' => 1037,
+ 'old:virtual_from_version:47049' => 1689,
+ 'old:virtual_from_version:42786' => 1497,
+ 'old:virtual_from_version:50345' => 3233,
+ 'old:virtual_from_version:43076' => 2040,
+ 'old:virtual_from_version:46453' => 1009,
+ 'old:virtual_from_version:42917' => 1077,
+ 'old:virtual_from_version:49579' => 1498,
+ 'old:virtual_from_version:44170' => 1125,
+ 'old:virtual_from_version:44843' => 1057,
+ 'old:virtual_from_version:42087' => 1070,
+ 'old:virtual_from_version:45893' => 1009,
+ 'old:virtual_from_version:45662' => 1005,
+ 'old:virtual_from_version:42145' => 1009,
+ 'old:virtual_from_version:40598' => 1077,
+ 'old:virtual_from_version:50024' => 3218,
+ 'old:virtual_from_version:39545' => 1148,
+ 'old:virtual_from_version:49124' => 1077,
+ 'old:virtual_from_version:40355' => 1091,
+ 'old:virtual_from_version:39046' => 1095,
+ 'old:virtual_from_version:46444' => 1172,
+ 'old:virtual_from_version:40896' => 1048,
+ 'old:virtual_from_version:47643' => 1583,
+ 'old:virtual_from_version:40961' => 1070,
+ 'old:virtual_from_version:45613' => 1136,
+ 'old:virtual_from_version:46929' => 1125,
+ 'old:virtual_from_version:45022' => 1078,
+ 'old:virtual_from_version:45804' => 1025,
+ 'old:virtual_from_version:44251' => 1077,
+ 'old:virtual_from_version:44429' => 1049,
+ 'old:virtual_from_version:50640' => 1001,
+ 'old:virtual_from_version:49222' => 1393,
+ 'old:virtual_from_version:50336' => 1105,
+ 'old:virtual_from_version:46951' => 1172,
+ 'old:virtual_from_version:46507' => 1580,
+ 'old:virtual_from_version:46598' => 1172,
+ 'old:virtual_from_version:42178' => 1172,
+ 'old:virtual_from_version:40903' => 1070,
+ 'old:virtual_from_version:50694' => 1070,
+ 'old:virtual_from_version:47509' => 1009,
+ 'old:virtual_from_version:49685' => 1105,
+ 'old:virtual_from_version:45040' => 1022,
+ 'old:virtual_from_version:45758' => 1070,
+ 'old:virtual_from_version:42803' => 1107,
+ 'old:virtual_from_version:48023' => 2124,
+ 'old:virtual_from_version:49643' => 1583,
+ 'old:virtual_from_version:42908' => 1009,
+ 'old:virtual_from_version:46096' => 1362,
+ 'old:virtual_from_version:40793' => 1070,
+ 'old:virtual_from_version:45083' => 1125,
+ 'old:virtual_from_version:42142' => 1351,
+ 'old:virtual_from_version:42226' => 1077,
+ 'old:virtual_from_version:42461' => 1070,
+ 'old:virtual_from_version:45251' => 1030,
+ 'old:virtual_from_version:45369' => 1461,
+ 'old:virtual_from_version:44761' => 1077,
+ 'old:virtual_from_version:47058' => 1580,
+ 'old:virtual_from_version:44038' => 1007,
+ 'old:virtual_from_version:45435' => 1070,
+ 'old:virtual_from_version:44874' => 1009,
+ 'old:virtual_from_version:46074' => 1172,
+ 'old:virtual_from_version:49344' => 1067,
+ 'old:virtual_from_version:46143' => 1070,
+ 'old:virtual_from_version:50191' => 1070,
+ 'old:virtual_from_version:42884' => 1109,
+ 'old:virtual_from_version:44448' => 1249,
+ 'old:virtual_from_version:46925' => 3008,
+ 'old:virtual_from_version:44979' => 1107,
+ 'old:virtual_from_version:40117' => 1100,
+ 'old:virtual_from_version:50613' => 3259,
+ 'old:virtual_from_version:47330' => 1070,
+ 'old:virtual_from_version:42901' => 1070,
+ 'old:virtual_from_version:46704' => 1697,
+ 'old:virtual_from_version:45989' => 1640,
+ 'old:virtual_from_version:45606' => 1009,
+ 'old:virtual_from_version:47036' => 1583,
+ 'old:virtual_from_version:47762' => 1666,
+ 'old:virtual_from_version:50059' => 3131,
+ 'old:virtual_from_version:44136' => 1077,
+ 'old:virtual_from_version:47993' => 1077,
+ 'old:virtual_from_version:46818' => 1172,
+ 'old:virtual_from_version:50335' => 1224,
+ 'old:virtual_from_version:42401' => 1077,
+ 'old:virtual_from_version:47246' => 1109,
+ 'old:virtual_from_version:49113' => 1649,
+ 'old:virtual_from_version:49675' => 1009,
+ 'old:virtual_from_version:42172' => 1009,
+ 'old:virtual_from_version:44304' => 1509,
+ 'old:virtual_from_version:39336' => 1158,
+ 'old:virtual_from_version:47328' => 1109,
+ 'old:virtual_from_version:42322' => 1404,
+ 'old:virtual_from_version:48007' => 2107,
+ 'old:virtual_from_version:47578' => 1109,
+ 'old:virtual_from_version:39715' => 1136,
+ 'old:virtual_from_version:45633' => 1077,
+ 'old:virtual_from_version:42829' => 1009,
+ 'old:virtual_from_version:44373' => 1064,
+ 'old:virtual_from_version:42887' => 1077,
+ 'old:virtual_from_version:45123' => 1009,
+ 'old:virtual_from_version:44334' => 1025,
+ 'old:virtual_from_version:42382' => 1009,
+ 'old:virtual_from_version:44793' => 1172,
+ 'old:virtual_from_version:50271' => 1025,
+ 'old:virtual_from_version:49941' => 1112,
+ 'old:virtual_from_version:45590' => 1172,
+ 'old:virtual_from_version:42263' => 1037,
+ 'old:virtual_from_version:50752' => 3259,
+ 'old:virtual_from_version:42063' => 1077,
+ 'old:virtual_from_version:50252' => 1150,
+ 'old:virtual_from_version:42410' => 1070,
+ 'old:virtual_from_version:42018' => 1125,
+ 'old:virtual_from_version:39710' => 1070,
+ 'old:virtual_from_version:44282' => 1109,
+ 'old:virtual_from_version:45392' => 1009,
+ 'old:virtual_from_version:46743' => 1077,
+ 'old:virtual_from_version:50202' => 1222,
+ 'old:virtual_from_version:38657' => 1128,
+ 'old:virtual_from_version:40498' => 1070,
+ 'old:virtual_from_version:47311' => 1037,
+ 'old:virtual_from_version:44391' => 1049,
+ 'old:virtual_from_version:42940' => 1077,
+ 'old:virtual_from_version:44078' => 1037,
+ 'old:virtual_from_version:47582' => 1666,
+ 'old:virtual_from_version:45078' => 1077,
+ 'old:virtual_from_version:44880' => 1009,
+ 'old:virtual_from_version:42352' => 1077,
+ 'old:virtual_from_version:46894' => 1125,
+ 'old:virtual_from_version:40486' => 1077,
+ 'old:virtual_from_version:49764' => 1070,
+ 'old:virtual_from_version:45578' => 1411,
+ 'old:virtual_from_version:47979' => 1109,
+ 'old:virtual_from_version:46863' => 1077,
+ 'old:virtual_from_version:46177' => 1070,
+ 'old:virtual_from_version:46412' => 1109,
+ 'old:virtual_from_version:44892' => 1077,
+ 'old:virtual_from_version:42616' => 1037,
+ 'old:virtual_from_version:49468' => 1696,
+ 'old:virtual_from_version:47663' => 1565,
+ 'old:virtual_from_version:50397' => 1070,
+ 'old:virtual_from_version:50067' => 1009,
+ 'old:virtual_from_version:44713' => 1077,
+ 'old:virtual_from_version:46858' => 1172,
+ 'old:virtual_from_version:45017' => 1090,
+ 'old:virtual_from_version:46234' => 1172,
+ 'old:virtual_from_version:47248' => 3020,
+ 'old:virtual_from_version:49686' => 1008,
+ 'old:virtual_from_version:45853' => 1077,
+ 'old:virtual_from_version:45151' => 1125,
+ 'old:virtual_from_version:49609' => 1587,
+ 'old:virtual_from_version:49357' => 3167,
+ 'old:virtual_from_version:50573' => 3259,
+ 'old:virtual_from_version:40780' => 1009,
+ 'old:virtual_from_version:46980' => 1172,
+ 'old:virtual_from_version:42066' => 1070,
+ 'old:virtual_from_version:49207' => 1077,
+ 'old:virtual_from_version:45774' => 1125,
+ 'old:virtual_from_version:40991' => 1404,
+ 'old:virtual_from_version:44737' => 1083,
+ 'old:virtual_from_version:42443' => 1077,
+ 'old:virtual_from_version:45887' => 1009,
+ 'old:virtual_from_version:40523' => 1070,
+ 'old:virtual_from_version:42466' => 1077,
+ 'old:virtual_from_version:45871' => 1125,
+ 'old:virtual_from_version:47952' => 1070,
+ 'old:virtual_from_version:49080' => 1110,
+ 'old:virtual_from_version:38345' => 1069,
+ 'old:virtual_from_version:47259' => 1070,
+ 'old:virtual_from_version:43025' => 2050,
+ 'old:virtual_from_version:43034' => 2033,
+ 'old:virtual_from_version:45419' => 1009,
+ 'old:virtual_from_version:49062' => 1070,
+ 'old:virtual_from_version:50069' => 3214,
+ 'old:virtual_from_version:40785' => 1070,
+ 'old:virtual_from_version:44569' => 1077,
+ 'old:virtual_from_version:46364' => 1533,
+ 'old:virtual_from_version:42340' => 1136,
+ 'old:virtual_from_version:40240' => 1077,
+ 'old:virtual_from_version:46324' => 1077,
+ 'old:virtual_from_version:46945' => 1070,
+ 'old:virtual_from_version:42543' => 1037,
+ 'old:virtual_from_version:46227' => 1172,
+ 'old:virtual_from_version:40781' => 1025,
+ 'old:virtual_from_version:40418' => 1067,
+ 'old:virtual_from_version:50417' => 3131,
+ 'old:virtual_from_version:47237' => 1077,
+ 'old:virtual_from_version:46547' => 1077,
+ 'old:virtual_from_version:39580' => 1085,
+ 'old:virtual_from_version:40463' => 1311,
+ 'old:virtual_from_version:40769' => 1125,
+ 'old:virtual_from_version:49484' => 3162,
+ 'old:virtual_from_version:45598' => 1070,
+ 'old:virtual_from_version:44767' => 1070,
+ 'old:virtual_from_version:45503' => 1077,
+ 'old:virtual_from_version:45252' => 1144,
+ 'old:virtual_from_version:43043' => 2022,
+ 'old:virtual_from_version:40544' => 1067,
+ 'old:virtual_from_version:49025' => 1077,
+ 'old:virtual_from_version:46693' => 1077,
+ 'old:virtual_from_version:46814' => 1070,
+ 'old:virtual_from_version:44676' => 1110,
+ 'old:virtual_from_version:42893' => 1077,
+ 'old:virtual_from_version:49502' => 1037,
+ 'old:virtual_from_version:50728' => 3262,
+ 'old:virtual_from_version:49283' => 3136,
+ 'old:virtual_from_version:44324' => 1006,
+ 'old:virtual_from_version:42076' => 1077,
+ 'old:virtual_from_version:49488' => 1125,
+ 'old:virtual_from_version:42091' => 1077,
+ 'old:virtual_from_version:45321' => 1009,
+ 'old:virtual_from_version:44119' => 1037,
+ 'old:virtual_from_version:40524' => 1091,
+ 'old:virtual_from_version:47649' => 1125,
+ 'old:virtual_from_version:42321' => 1109,
+ 'old:virtual_from_version:40774' => 1048,
+ 'old:virtual_from_version:39724' => 1108,
+ 'old:virtual_from_version:45299' => 1582,
+ 'old:virtual_from_version:42271' => 1025,
+ 'old:virtual_from_version:50636' => 1148,
+ 'old:virtual_from_version:42724' => 1037,
+ 'old:virtual_from_version:44280' => 1077,
+ 'old:virtual_from_version:45920' => 1633,
+ 'old:virtual_from_version:44916' => 1172,
+ 'old:virtual_from_version:45601' => 1141,
+ 'old:virtual_from_version:50062' => 3131,
+ 'old:virtual_from_version:46106' => 1397,
+ 'old:virtual_from_version:42402' => 1037,
+ 'old:virtual_from_version:47887' => 1038,
+ 'old:virtual_from_version:45707' => 1404,
+ 'old:virtual_from_version:49069' => 1077,
+ 'old:virtual_from_version:47200' => 1077,
+ 'old:virtual_from_version:45904' => 1062,
+ 'old:virtual_from_version:42425' => 1077,
+ 'old:virtual_from_version:42785' => 1083,
+ 'old:virtual_from_version:40959' => 1413,
+ 'old:virtual_from_version:44475' => 1037,
+ 'old:virtual_from_version:47511' => 1621,
+ 'old:virtual_from_version:40878' => 1009,
+ 'old:virtual_from_version:49921' => 3207,
+ 'old:virtual_from_version:50740' => 3266,
+ 'old:virtual_from_version:44978' => 1037,
+ 'old:virtual_from_version:50447' => 1007,
+ 'old:virtual_from_version:49372' => 1057,
+ 'old:virtual_from_version:47660' => 1051,
+ 'old:virtual_from_version:46952' => 1077,
+ 'old:virtual_from_version:46172' => 1070,
+ 'old:virtual_from_version:46287' => 1070,
+ 'old:virtual_from_version:10005' => 2004,
+ 'old:virtual_from_version:44492' => 1125,
+ 'old:virtual_from_version:50621' => 1417,
+ 'old:virtual_from_version:45062' => 1105,
+ 'old:virtual_from_version:49162' => 1404,
+ 'old:virtual_from_version:39886' => 1107,
+ 'old:virtual_from_version:46512' => 1489,
+ 'old:virtual_from_version:44332' => 1009,
+ 'old:virtual_from_version:46108' => 1107,
+ 'old:virtual_from_version:46845' => 1077,
+ 'old:virtual_from_version:47972' => 1532,
+ 'old:virtual_from_version:40326' => 1404,
+ 'old:virtual_from_version:42838' => 1032,
+ 'old:virtual_from_version:44257' => 1523,
+ 'old:virtual_from_version:50012' => 3131,
+ 'old:virtual_from_version:45760' => 1019,
+ 'old:virtual_from_version:45328' => 1009,
+ 'old:virtual_from_version:45810' => 1413,
+ 'old:virtual_from_version:46140' => 1172,
+ 'old:virtual_from_version:42125' => 1009,
+ 'old:virtual_from_version:46654' => 1537,
+ 'old:virtual_from_version:46616' => 1125,
+ 'old:virtual_from_version:49991' => 3131,
+ 'old:virtual_from_version:44252' => 1037,
+ 'old:virtual_from_version:46985' => 1689,
+ 'old:virtual_from_version:42729' => 1070,
+ 'old:virtual_from_version:50033' => 1125,
+ 'old:virtual_from_version:46192' => 1009,
+ 'old:virtual_from_version:49170' => 1070,
+ 'old:virtual_from_version:42181' => 1009,
+ 'old:virtual_from_version:49257' => 1070,
+ 'old:virtual_from_version:49952' => 1025,
+ 'old:virtual_from_version:44881' => 1077,
+ 'old:virtual_from_version:49890' => 1048,
+ 'old:virtual_from_version:40839' => 1070,
+ 'old:virtual_from_version:40755' => 1107,
+ 'old:virtual_from_version:49596' => 1005,
+ 'old:virtual_from_version:42320' => 1037,
+ 'old:virtual_from_version:45603' => 1136,
+ 'old:virtual_from_version:50286' => 1404,
+ 'old:virtual_from_version:44194' => 1125,
+ 'old:virtual_from_version:45434' => 1136,
+ 'old:virtual_from_version:47387' => 3008,
+ 'old:virtual_from_version:47496' => 1077,
+ 'old:virtual_from_version:46365' => 1070,
+ 'old:virtual_from_version:42184' => 1031,
+ 'old:virtual_from_version:49307' => 1070,
+ 'old:virtual_from_version:44505' => 1110,
+ 'old:virtual_from_version:50580' => 1150,
+ 'old:virtual_from_version:49548' => 1009,
+ 'old:virtual_from_version:45367' => 1107,
+ 'old:virtual_from_version:45315' => 1009,
+ 'old:virtual_from_version:42745' => 1009,
+ 'old:virtual_from_version:42134' => 1037,
+ 'old:virtual_from_version:49252' => 1077,
+ 'old:virtual_from_version:44776' => 1351,
+ 'old:virtual_from_version:45915' => 1070,
+ 'old:virtual_from_version:50295' => 1314,
+ 'old:virtual_from_version:40550' => 1070,
+ 'old:virtual_from_version:46317' => 1032,
+ 'old:virtual_from_version:47725' => 1070,
+ 'old:virtual_from_version:40923' => 1110,
+ 'old:virtual_from_version:45089' => 1070,
+ 'old:virtual_from_version:45341' => 1125,
+ 'old:virtual_from_version:49655' => 1583,
+ 'old:virtual_from_version:47188' => 1125,
+ 'old:virtual_from_version:45790' => 1005,
+ 'old:virtual_from_version:42033' => 1037,
+ 'old:virtual_from_version:50226' => 3227,
+ 'old:virtual_from_version:40800' => 1009,
+ 'old:virtual_from_version:4519 ' => 1054,
+ 'old:virtual_from_version:50117' => 1035,
+ 'old:virtual_from_version:46044' => 1070,
+ 'old:virtual_from_version:49960' => 1489,
+ 'old:virtual_from_version:40821' => 1025,
+ 'old:virtual_from_version:49302' => 1077,
+ 'old:virtual_from_version:40879' => 1077,
+ 'old:virtual_from_version:47687' => 1077,
+ 'old:virtual_from_version:46259' => 1070,
+ 'old:virtual_from_version:47434' => 1070,
+ 'old:virtual_from_version:49691' => 1583,
+ 'old:virtual_from_version:46283' => 1070,
+ 'old:virtual_from_version:42005' => 1077,
+ 'old:virtual_from_version:50111' => 1048,
+ 'old:virtual_from_version:40742' => 1009,
+ 'old:virtual_from_version:42484' => 1070,
+ 'old:virtual_from_version:49555' => 1051,
+ 'old:virtual_from_version:40720' => 1404,
+ 'old:virtual_from_version:46270' => 1666,
+ 'old:virtual_from_version:42001' => 1070,
+ 'old:virtual_from_version:44245' => 1521,
+ 'old:virtual_from_version:47448' => 1621,
+ 'old:virtual_from_version:49851' => 3203,
+ 'old:virtual_from_version:50593' => 1417,
+ 'old:virtual_from_version:42346' => 1112,
+ 'old:virtual_from_version:47513' => 1032,
+ 'old:virtual_from_version:45257' => 1107,
+ 'old:virtual_from_version:46089' => 1123,
+ 'old:virtual_from_version:44342' => 1037,
+ 'old:virtual_from_version:47247' => 1077,
+ 'old:virtual_from_version:49159' => 1404,
+ 'old:virtual_from_version:42194' => 1077,
+ 'old:virtual_from_version:47852' => 1584,
+ 'old:virtual_from_version:47274' => 1105,
+ 'old:virtual_from_version:49086' => 3094,
+ 'old:virtual_from_version:40660' => 1362,
+ 'old:virtual_from_version:46004' => 1000,
+ 'old:virtual_from_version:45244' => 1007,
+ 'old:virtual_from_version:44113' => 1105,
+ 'old:virtual_from_version:45580' => 1136,
+ 'old:virtual_from_version:44234' => 1037,
+ 'old:virtual_from_version:42014' => 1105,
+ 'old:virtual_from_version:50723' => 1417,
+ 'old:virtual_from_version:40530' => 1070,
+ 'old:virtual_from_version:42579' => 1110,
+ 'old:virtual_from_version:44721' => 1109,
+ 'old:virtual_from_version:49082' => 3094,
+ 'old:virtual_from_version:41012' => 2022,
+ 'old:virtual_from_version:50552' => 3264,
+ 'old:virtual_from_version:47011' => 3015,
+ 'old:virtual_from_version:42590' => 1172,
+ 'old:virtual_from_version:49996' => 3131,
+ 'old:virtual_from_version:49280' => 1404,
+ 'old:virtual_from_version:45274' => 1091,
+ 'old:virtual_from_version:50515' => 1057,
+ 'old:virtual_from_version:40845' => 1070,
+ 'old:virtual_from_version:44646' => 1025,
+ 'old:virtual_from_version:44982' => 1036,
+ 'old:virtual_from_version:47789' => 1583,
+ 'old:virtual_from_version:46416' => 1077,
+ 'old:virtual_from_version:44480' => 1125,
+ 'old:virtual_from_version:44640' => 1037,
+ 'old:virtual_from_version:47033' => 1077,
+ 'old:virtual_from_version:42440' => 1110,
+ 'old:virtual_from_version:44230' => 1125,
+ 'old:virtual_from_version:49749' => 1051,
+ 'old:virtual_from_version:50197' => 1105,
+ 'old:virtual_from_version:50660' => 1070,
+ 'old:virtual_from_version:49977' => 3212,
+ 'old:virtual_from_version:38678' => 1025,
+ 'old:virtual_from_version:47727' => 1051,
+ 'old:virtual_from_version:44896' => 1070,
+ 'old:virtual_from_version:42720' => 1070,
+ 'old:virtual_from_version:45557' => 1110,
+ 'old:virtual_from_version:47583' => 1689,
+ 'old:virtual_from_version:49925' => 1616,
+ 'old:virtual_from_version:47595' => 1070,
+ 'old:virtual_from_version:46358' => 1095,
+ 'old:virtual_from_version:45402' => 1029,
+ 'old:virtual_from_version:47750' => 1109,
+ 'old:virtual_from_version:47278' => 1125,
+ 'old:virtual_from_version:46340' => 1077,
+ 'old:virtual_from_version:46737' => 1067,
+ 'old:virtual_from_version:47343' => 1404,
+ 'old:virtual_from_version:45492' => 1077,
+ 'old:virtual_from_version:42465' => 1025,
+ 'old:virtual_from_version:44785' => 1077,
+ 'old:virtual_from_version:38383' => 1109,
+ 'old:virtual_from_version:42056' => 1009,
+ 'old:virtual_from_version:45348' => 1136,
+ 'old:virtual_from_version:45822' => 1077,
+ 'old:virtual_from_version:40602' => 1091,
+ 'old:virtual_from_version:50659' => 1033,
+ 'old:virtual_from_version:46260' => 1172,
+ 'old:virtual_from_version:42524' => 1070,
+ 'old:virtual_from_version:42963' => 1067,
+ 'old:virtual_from_version:46489' => 1112,
+ 'old:virtual_from_version:44751' => 1070,
+ 'old:virtual_from_version:47355' => 1621,
+ 'old:virtual_from_version:49510' => 1689,
+ 'old:virtual_from_version:46499' => 1489,
+ 'old:virtual_from_version:42740' => 1037,
+ 'old:virtual_from_version:44889' => 1077,
+ 'old:virtual_from_version:47697' => 1621,
+ 'old:virtual_from_version:40751' => 1067,
+ 'old:virtual_from_version:49061' => 3094,
+ 'old:virtual_from_version:40417' => 1404,
+ 'old:virtual_from_version:44018' => 1070,
+ 'old:virtual_from_version:49240' => 1077,
+ 'old:virtual_from_version:44504' => 1037,
+ 'old:virtual_from_version:38360' => 1042,
+ 'old:virtual_from_version:44137' => 1037,
+ 'old:virtual_from_version:46982' => 1583,
+ 'old:virtual_from_version:42844' => 1037,
+ 'old:virtual_from_version:50568' => 1025,
+ 'old:virtual_from_version:47577' => 1037,
+ 'old:virtual_from_version:44357' => 1172,
+ 'old:virtual_from_version:42994' => 1510,
+ 'old:virtual_from_version:49857' => 3194,
+ 'old:virtual_from_version:47538' => 1025,
+ 'old:virtual_from_version:50669' => 3208,
+ 'old:virtual_from_version:40207' => 1091,
+ 'old:virtual_from_version:44400' => 1144,
+ 'old:virtual_from_version:49563' => 1498,
+ 'old:virtual_from_version:45271' => 1067,
+ 'old:virtual_from_version:45497' => 1070,
+ 'old:virtual_from_version:45608' => 1077,
+ 'old:virtual_from_version:49794' => 1136,
+ 'old:virtual_from_version:49602' => 1070,
+ 'old:virtual_from_version:50143' => 3094,
+ 'old:virtual_from_version:50004' => 1314,
+ 'old:virtual_from_version:46300' => 1107,
+ 'old:virtual_from_version:46628' => 1568,
+ 'old:virtual_from_version:42619' => 1025,
+ 'old:virtual_from_version:45759' => 1009,
+ 'old:virtual_from_version:45205' => 1224,
+ 'old:virtual_from_version:46479' => 1321,
+ 'old:virtual_from_version:49804' => 1404,
+ 'old:virtual_from_version:50758' => 1417,
+ 'old:virtual_from_version:45599' => 1009,
+ 'old:virtual_from_version:42639' => 1070,
+ 'old:virtual_from_version:49811' => 1444,
+ 'old:virtual_from_version:49608' => 1070,
+ 'old:virtual_from_version:46883' => 1125,
+ 'old:virtual_from_version:41015' => 2024,
+ 'old:virtual_from_version:42086' => 1037,
+ 'old:virtual_from_version:50663' => 1417,
+ 'old:virtual_from_version:49909' => 3131,
+ 'old:virtual_from_version:46613' => 1613,
+ 'old:virtual_from_version:47155' => 1105,
+ 'old:virtual_from_version:50250' => 3131,
+ 'old:virtual_from_version:48011' => 2111,
+ 'old:virtual_from_version:47541' => 1125,
+ 'old:virtual_from_version:44472' => 1070,
+ 'old:virtual_from_version:49355' => 1689,
+ 'old:virtual_from_version:42077' => 1037,
+ 'old:virtual_from_version:47682' => 1070,
+ 'old:virtual_from_version:44174' => 1037,
+ 'old:virtual_from_version:45836' => 1397,
+ 'old:virtual_from_version:40962' => 1006,
+ 'old:virtual_from_version:40315' => 1091,
+ 'old:virtual_from_version:49855' => 1537,
+ 'old:virtual_from_version:45114' => 1077,
+ 'old:virtual_from_version:49863' => 1125,
+ 'old:virtual_from_version:49379' => 1077,
+ 'old:virtual_from_version:50000' => 1100,
+ 'old:virtual_from_version:45685' => 1019,
+ 'old:virtual_from_version:49813' => 3131,
+ 'old:virtual_from_version:46327' => 1070,
+ 'old:virtual_from_version:46120' => 1404,
+ 'old:virtual_from_version:42354' => 1067,
+ 'old:virtual_from_version:45713' => 1123,
+ 'old:virtual_from_version:44865' => 1172,
+ 'old:virtual_from_version:42333' => 1009,
+ 'old:virtual_from_version:44816' => 1172,
+ 'old:virtual_from_version:13397' => 1043,
+ 'old:virtual_from_version:50094' => 1136,
+ 'old:virtual_from_version:42148' => 1037,
+ 'old:virtual_from_version:49747' => 1158,
+ 'old:virtual_from_version:39478' => 1032,
+ 'old:virtual_from_version:44343' => 1062,
+ 'old:virtual_from_version:49527' => 1666,
+ 'old:virtual_from_version:47743' => 1109,
+ 'old:virtual_from_version:49604' => 1009,
+ 'old:virtual_from_version:40358' => 1332,
+ 'old:virtual_from_version:46374' => 1584,
+ 'old:virtual_from_version:47739' => 1070,
+ 'old:virtual_from_version:40239' => 1125,
+ 'old:virtual_from_version:47529' => 1077,
+ 'old:virtual_from_version:44303' => 1057,
+ 'old:virtual_from_version:47931' => 1109,
+ 'old:virtual_from_version:42736' => 1038,
+ 'old:virtual_from_version:47013' => 1007,
+ 'old:virtual_from_version:49672' => 1070,
+ 'old:virtual_from_version:45888' => 1025,
+ 'old:virtual_from_version:50602' => 1444,
+ 'old:virtual_from_version:49067' => 3137,
+ 'old:virtual_from_version:40545' => 1105,
+ 'old:virtual_from_version:50529' => 1362,
+ 'old:virtual_from_version:43052' => 2055,
+ 'old:virtual_from_version:46593' => 1037,
+ 'old:virtual_from_version:47375' => 1070,
+ 'old:virtual_from_version:45926' => 1077,
+ 'old:virtual_from_version:44921' => 1110,
+ 'old:virtual_from_version:42036' => 1413,
+ 'old:virtual_from_version:40522' => 1321,
+ 'old:virtual_from_version:45945' => 1077,
+ 'old:virtual_from_version:42499' => 1172,
+ 'old:virtual_from_version:50029' => 1125,
+ 'old:virtual_from_version:44088' => 1025,
+ 'old:virtual_from_version:44991' => 1019,
+ 'old:virtual_from_version:42312' => 1070,
+ 'old:virtual_from_version:44672' => 1070,
+ 'old:virtual_from_version:42035' => 1172,
+ 'old:virtual_from_version:49242' => 1615,
+ 'old:virtual_from_version:42972' => 1009,
+ 'old:virtual_from_version:44420' => 1031,
+ 'old:virtual_from_version:40353' => 1404,
+ 'old:virtual_from_version:40854' => 1048,
+ 'old:virtual_from_version:46723' => 1077,
+ 'old:virtual_from_version:49854' => 1105,
+ 'old:virtual_from_version:46827' => 1009,
+ 'old:virtual_from_version:42553' => 1070,
+ 'old:virtual_from_version:38953' => 1136,
+ 'old:virtual_from_version:44421' => 1036,
+ 'old:virtual_from_version:49975' => 3131,
+ 'old:virtual_from_version:42770' => 1009,
+ 'old:virtual_from_version:45820' => 1070,
+ 'old:virtual_from_version:46678' => 1125,
+ 'old:virtual_from_version:40727' => 1070,
+ 'old:virtual_from_version:42435' => 1009,
+ 'old:virtual_from_version:45752' => 1009,
+ 'old:virtual_from_version:44834' => 1402,
+ 'old:virtual_from_version:49765' => 1025,
+ 'old:virtual_from_version:47368' => 1362,
+ 'old:virtual_from_version:44515' => 1009,
+ 'old:virtual_from_version:42149' => 1110,
+ 'old:virtual_from_version:44855' => 1077,
+ 'old:virtual_from_version:49315' => 1070,
+ 'old:virtual_from_version:45734' => 1007,
+ 'old:virtual_from_version:42009' => 1067,
+ 'old:virtual_from_version:39125' => 1094,
+ 'old:virtual_from_version:40250' => 1025,
+ 'old:virtual_from_version:47261' => 1109,
+ 'old:virtual_from_version:49987' => 3120,
+ 'old:virtual_from_version:49190' => 1565,
+ 'old:virtual_from_version:38349' => 1025,
+ 'old:virtual_from_version:38557' => 1067,
+ 'old:virtual_from_version:42456' => 1041,
+ 'old:virtual_from_version:46651' => 1070,
+ 'old:virtual_from_version:47303' => 1037,
+ 'old:virtual_from_version:50065' => 1107,
+ 'old:virtual_from_version:49911' => 3206,
+ 'old:virtual_from_version:42501' => 1070,
+ 'old:virtual_from_version:46757' => 1125,
+ 'old:virtual_from_version:42734' => 1077,
+ 'old:virtual_from_version:46777' => 1404,
+ 'old:virtual_from_version:46994' => 1689,
+ 'old:virtual_from_version:49715' => 1689,
+ 'old:virtual_from_version:45733' => 1070,
+ 'old:virtual_from_version:45842' => 1009,
+ 'old:virtual_from_version:40744' => 1077,
+ 'old:virtual_from_version:43083' => 2080,
+ 'old:virtual_from_version:45946' => 1404,
+ 'old:virtual_from_version:45843' => 1025,
+ 'old:virtual_from_version:50281' => 1150,
+ 'old:virtual_from_version:46237' => 1035,
+ 'old:virtual_from_version:42721' => 1009,
+ 'old:virtual_from_version:47839' => 1621,
+ 'old:virtual_from_version:40350' => 1009,
+ 'old:virtual_from_version:40388' => 1048,
+ 'old:virtual_from_version:47422' => 1009,
+ 'old:virtual_from_version:44556' => 1070,
+ 'old:virtual_from_version:45373' => 1125,
+ 'old:virtual_from_version:50136' => 3131,
+ 'old:virtual_from_version:40621' => 1077,
+ 'old:virtual_from_version:47864' => 1584,
+ 'old:virtual_from_version:46123' => 1077,
+ 'old:virtual_from_version:40752' => 1000,
+ 'old:virtual_from_version:45715' => 1172,
+ 'old:virtual_from_version:44952' => 1009,
+ 'old:virtual_from_version:45326' => 1587,
+ 'old:virtual_from_version:45515' => 1580,
+ 'old:virtual_from_version:44188' => 1009,
+ 'old:virtual_from_version:44886' => 1070,
+ 'old:virtual_from_version:46265' => 1067,
+ 'old:virtual_from_version:49497' => 3178,
+ 'old:virtual_from_version:45688' => 1009,
+ 'old:virtual_from_version:47780' => 1109,
+ 'old:virtual_from_version:49507' => 1070,
+ 'old:virtual_from_version:47089' => 1077,
+ 'old:virtual_from_version:44068' => 1070,
+ 'old:virtual_from_version:50105' => 1032,
+ 'old:virtual_from_version:40940' => 1037,
+ 'old:virtual_from_version:49006' => 1584,
+ 'old:virtual_from_version:45051' => 1043,
+ 'old:virtual_from_version:40747' => 1009,
+ 'old:virtual_from_version:47410' => 3008,
+ 'old:virtual_from_version:47060' => 1070,
+ 'old:virtual_from_version:45110' => 1125,
+ 'old:virtual_from_version:50711' => 1417,
+ 'old:virtual_from_version:47172' => 1070,
+ 'old:virtual_from_version:40988' => 1077,
+ 'old:virtual_from_version:45604' => 1070,
+ 'old:virtual_from_version:47773' => 1565,
+ 'old:virtual_from_version:43035' => 2034,
+ 'old:virtual_from_version:47331' => 1125,
+ 'old:virtual_from_version:49946' => 1404,
+ 'old:virtual_from_version:49968' => 1585,
+ 'old:virtual_from_version:49559' => 1410,
+ 'old:virtual_from_version:44270' => 1070,
+ 'old:virtual_from_version:42299' => 1000,
+ 'old:virtual_from_version:44903' => 1077,
+ 'old:virtual_from_version:50291' => 3232,
+ 'old:virtual_from_version:44532' => 1070,
+ 'old:virtual_from_version:50327' => 1125,
+ 'old:virtual_from_version:50759' => 3259,
+ 'old:virtual_from_version:44431' => 1095,
+ 'old:virtual_from_version:46646' => 1062,
+ 'old:virtual_from_version:47227' => 1109,
+ 'old:virtual_from_version:44546' => 1009,
+ 'old:virtual_from_version:46465' => 1150,
+ 'old:virtual_from_version:45394' => 1009,
+ 'old:virtual_from_version:42071' => 1070,
+ 'old:virtual_from_version:50576' => 1006,
+ 'old:virtual_from_version:47935' => 3120,
+ 'old:virtual_from_version:46623' => 1125,
+ 'old:virtual_from_version:44679' => 1414,
+ 'old:virtual_from_version:46363' => 1077,
+ 'old:virtual_from_version:45776' => 1304,
+ 'old:virtual_from_version:42863' => 1070,
+ 'old:virtual_from_version:44181' => 1083,
+ 'old:virtual_from_version:42935' => 1077,
+ 'old:virtual_from_version:45405' => 1112,
+ 'old:virtual_from_version:47076' => 1070,
+ 'old:virtual_from_version:42085' => 1077,
+ 'old:virtual_from_version:44146' => 1077,
+ 'old:virtual_from_version:50750' => 1580,
+ 'old:virtual_from_version:46726' => 1583,
+ 'old:virtual_from_version:48016' => 2116,
+ 'old:virtual_from_version:44097' => 1037,
+ 'old:virtual_from_version:39051' => 1069,
+ 'old:virtual_from_version:49931' => 3206,
+ 'old:virtual_from_version:15751' => 1011,
+ 'old:virtual_from_version:45549' => 1009,
+ 'old:virtual_from_version:45070' => 1070,
+ 'old:virtual_from_version:47401' => 3008,
+ 'old:virtual_from_version:42306' => 1037,
+ 'old:virtual_from_version:42808' => 1077,
+ 'old:virtual_from_version:39513' => 1077,
+ 'old:virtual_from_version:45300' => 1125,
+ 'old:virtual_from_version:44709' => 1222,
+ 'old:virtual_from_version:49914' => 1100,
+ 'old:virtual_from_version:46572' => 1070,
+ 'old:virtual_from_version:44043' => 1125,
+ 'old:virtual_from_version:45621' => 1112,
+ 'old:virtual_from_version:44861' => 1172,
+ 'old:virtual_from_version:46971' => 1070,
+ 'old:virtual_from_version:49547' => 1105,
+ 'old:virtual_from_version:50630' => 1555,
+ 'old:virtual_from_version:46111' => 1070,
+ 'old:virtual_from_version:40907' => 1070,
+ 'old:virtual_from_version:45498' => 1125,
+ 'old:virtual_from_version:46626' => 1025,
+ 'old:virtual_from_version:47841' => 3108,
+ 'old:virtual_from_version:47920' => 1077,
+ 'old:virtual_from_version:46961' => 1070,
+ 'old:virtual_from_version:47942' => 1077,
+ 'old:virtual_from_version:49636' => 3185,
+ 'old:virtual_from_version:46007' => 1110,
+ 'old:virtual_from_version:46397' => 1048,
+ 'old:virtual_from_version:44449' => 1172,
+ 'old:virtual_from_version:49213' => 1009,
+ 'old:virtual_from_version:44044' => 1107,
+ 'old:virtual_from_version:48001' => 2102,
+ 'old:virtual_from_version:44802' => 1070,
+ 'old:virtual_from_version:44053' => 1009,
+ 'old:virtual_from_version:50300' => 1404,
+ 'old:virtual_from_version:50384' => 1314,
+ 'old:virtual_from_version:44644' => 1009,
+ 'old:virtual_from_version:49506' => 3179,
+ 'old:virtual_from_version:45107' => 1070,
+ 'old:virtual_from_version:47428' => 1037,
+ 'old:virtual_from_version:50456' => 1006,
+ 'old:virtual_from_version:45865' => 1070,
+ 'old:virtual_from_version:47066' => 3008,
+ 'old:virtual_from_version:49727' => 1070,
+ 'old:virtual_from_version:45778' => 1062,
+ 'old:virtual_from_version:49237' => 1077,
+ 'old:virtual_from_version:44377' => 1021,
+ 'old:virtual_from_version:47053' => 1107,
+ 'old:virtual_from_version:49537' => 1009,
+ 'old:virtual_from_version:49163' => 3151,
+ 'old:virtual_from_version:50208' => 3139,
+ 'old:virtual_from_version:45589' => 1057,
+ 'old:virtual_from_version:42288' => 1009,
+ 'old:virtual_from_version:42212' => 1070,
+ 'old:virtual_from_version:44467' => 1070,
+ 'old:virtual_from_version:45349' => 1413,
+ 'old:virtual_from_version:47631' => 1077,
+ 'old:virtual_from_version:44757' => 1136,
+ 'old:virtual_from_version:47801' => 1070,
+ 'old:virtual_from_version:23466' => 1076,
+ 'old:virtual_from_version:50058' => 1314,
+ 'old:virtual_from_version:44100' => 1025,
+ 'old:virtual_from_version:47751' => 1172,
+ 'old:virtual_from_version:44804' => 1077,
+ 'old:virtual_from_version:47891' => 1077,
+ 'old:virtual_from_version:49791' => 1006,
+ 'old:virtual_from_version:46696' => 1025,
+ 'old:virtual_from_version:45479' => 1172,
+ 'old:virtual_from_version:38748' => 1048,
+ 'old:virtual_from_version:47051' => 1070,
+ 'old:virtual_from_version:46649' => 1077,
+ 'old:virtual_from_version:47934' => 1689,
+ 'old:virtual_from_version:45821' => 1067,
+ 'old:virtual_from_version:42051' => 1077,
+ 'old:virtual_from_version:49092' => 3094,
+ 'old:virtual_from_version:47804' => 1109,
+ 'old:virtual_from_version:50097' => 3131,
+ 'old:virtual_from_version:45418' => 1069,
+ 'old:virtual_from_version:45295' => 1362,
+ 'old:virtual_from_version:38581' => 1091,
+ 'old:virtual_from_version:44803' => 1025,
+ 'old:virtual_from_version:42574' => 1037,
+ 'old:virtual_from_version:46937' => 2100,
+ 'old:virtual_from_version:44712' => 1009,
+ 'old:virtual_from_version:50687' => 3216,
+ 'old:virtual_from_version:49744' => 1532,
+ 'old:virtual_from_version:45629' => 1077,
+ 'old:virtual_from_version:42649' => 1484,
+ 'old:virtual_from_version:49271' => 1077,
+ 'old:virtual_from_version:49955' => 1659,
+ 'old:virtual_from_version:45986' => 1639,
+ 'old:virtual_from_version:42195' => 1037,
+ 'old:virtual_from_version:50198' => 1689,
+ 'old:virtual_from_version:46278' => 1009,
+ 'old:virtual_from_version:44428' => 1048,
+ 'old:virtual_from_version:49934' => 1078,
+ 'old:virtual_from_version:48009' => 2109,
+ 'old:virtual_from_version:45597' => 1136,
+ 'old:virtual_from_version:42881' => 1025,
+ 'old:virtual_from_version:46663' => 1070,
+ 'old:virtual_from_version:42658' => 1025,
+ 'old:virtual_from_version:46583' => 1077,
+ 'old:virtual_from_version:46751' => 1070,
+ 'old:virtual_from_version:49621' => 1125,
+ 'old:virtual_from_version:43012' => 2037,
+ 'old:virtual_from_version:50650' => 1172,
+ 'old:virtual_from_version:44575' => 1009,
+ 'old:virtual_from_version:50239' => 1489,
+ 'old:virtual_from_version:47491' => 1109,
+ 'old:virtual_from_version:47020' => 1461,
+ 'old:virtual_from_version:50246' => 3131,
+ 'old:virtual_from_version:40708' => 1081,
+ 'old:virtual_from_version:47180' => 1070,
+ 'old:virtual_from_version:40597' => 1070,
+ 'old:virtual_from_version:48041' => 2138,
+ 'old:virtual_from_version:42653' => 1025,
+ 'old:virtual_from_version:49105' => 3146,
+ 'old:virtual_from_version:42451' => 1438,
+ 'old:virtual_from_version:42411' => 1009,
+ 'old:virtual_from_version:49250' => 3159,
+ 'old:virtual_from_version:46907' => 3007,
+ 'old:virtual_from_version:40770' => 1025,
+ 'old:virtual_from_version:42417' => 1009,
+ 'old:virtual_from_version:43028' => 2028,
+ 'old:virtual_from_version:50536' => 1032,
+ 'old:virtual_from_version:50378' => 1172,
+ 'old:virtual_from_version:44072' => 1125,
+ 'old:virtual_from_version:50414' => 3227,
+ 'old:virtual_from_version:47950' => 1314,
+ 'old:virtual_from_version:42890' => 1070,
+ 'old:virtual_from_version:47666' => 1689,
+ 'old:virtual_from_version:47459' => 1109,
+ 'old:virtual_from_version:40686' => 1095,
+ 'old:virtual_from_version:49788' => 1100,
+ 'old:virtual_from_version:45077' => 1009,
+ 'old:virtual_from_version:46045' => 1109,
+ 'old:virtual_from_version:46087' => 1025,
+ 'old:virtual_from_version:49202' => 1125,
+ 'old:virtual_from_version:46891' => 1077,
+ 'old:virtual_from_version:47135' => 1532,
+ 'old:virtual_from_version:50578' => 3259,
+ 'old:virtual_from_version:40116' => 1172,
+ 'old:virtual_from_version:49777' => 1070,
+ 'old:virtual_from_version:50565' => 1689,
+ 'old:virtual_from_version:45757' => 1107,
+ 'old:virtual_from_version:46165' => 1532,
+ 'old:virtual_from_version:47668' => 1109,
+ 'old:virtual_from_version:42506' => 1025,
+ 'old:virtual_from_version:44773' => 1489,
+ 'old:virtual_from_version:50570' => 1489,
+ 'old:virtual_from_version:49581' => 1158,
+ 'old:virtual_from_version:45950' => 1626,
+ 'old:virtual_from_version:40482' => 1037,
+ 'old:virtual_from_version:42648' => 1484,
+ 'old:virtual_from_version:44794' => 1070,
+ 'old:virtual_from_version:49354' => 1532,
+ 'old:virtual_from_version:47376' => 1125,
+ 'old:virtual_from_version:45741' => 1621,
+ 'old:virtual_from_version:44851' => 1062,
+ 'old:virtual_from_version:49251' => 1070,
+ 'old:virtual_from_version:49214' => 1077,
+ 'old:virtual_from_version:40438' => 1009,
+ 'old:virtual_from_version:40757' => 1077,
+ 'old:virtual_from_version:38495' => 1091,
+ 'old:virtual_from_version:49524' => 1107,
+ 'old:virtual_from_version:45049' => 1062,
+ 'old:virtual_from_version:47501' => 1659,
+ 'old:virtual_from_version:46057' => 1070,
+ 'old:virtual_from_version:42684' => 1067,
+ 'old:virtual_from_version:49164' => 3152,
+ 'old:virtual_from_version:44544' => 1125,
+ 'old:virtual_from_version:50074' => 1125,
+ 'old:virtual_from_version:47397' => 1109,
+ 'old:virtual_from_version:45909' => 1077,
+ 'old:virtual_from_version:50584' => 3266,
+ 'old:virtual_from_version:49514' => 1070,
+ 'old:virtual_from_version:49638' => 1007,
+ 'old:virtual_from_version:50751' => 1689,
+ 'old:virtual_from_version:49367' => 3016,
+ 'old:virtual_from_version:50526' => 1007,
+ 'old:virtual_from_version:47745' => 1565,
+ 'old:virtual_from_version:47648' => 1070,
+ 'old:virtual_from_version:42280' => 1422,
+ 'old:virtual_from_version:49606' => 1070,
+ 'old:virtual_from_version:47184' => 1077,
+ 'old:virtual_from_version:44675' => 1037,
+ 'old:virtual_from_version:49262' => 1077,
+ 'old:virtual_from_version:50331' => 3239,
+ 'old:virtual_from_version:50077' => 3214,
+ 'old:virtual_from_version:45410' => 1533,
+ 'old:virtual_from_version:42526' => 1025,
+ 'old:virtual_from_version:45525' => 1077,
+ 'old:virtual_from_version:49392' => 1172,
+ 'old:virtual_from_version:45065' => 1000,
+ 'old:virtual_from_version:44998' => 1222,
+ 'old:virtual_from_version:47288' => 1134,
+ 'old:virtual_from_version:42315' => 1037,
+ 'old:virtual_from_version:40707' => 1109,
+ 'old:virtual_from_version:40571' => 1146,
+ 'old:virtual_from_version:40067' => 1077,
+ 'old:virtual_from_version:42168' => 1077,
+ 'old:virtual_from_version:45345' => 1381,
+ 'old:virtual_from_version:40958' => 1095,
+ 'old:virtual_from_version:44028' => 1125,
+ 'old:virtual_from_version:50622' => 3259,
+ 'old:virtual_from_version:46454' => 1012,
+ 'old:virtual_from_version:39546' => 1192,
+ 'old:virtual_from_version:42581' => 1461,
+ 'old:virtual_from_version:45280' => 1025,
+ 'old:virtual_from_version:45154' => 1012,
+ 'old:virtual_from_version:46787' => 1491,
+ 'old:virtual_from_version:44315' => 1081,
+ 'old:virtual_from_version:44481' => 1070,
+ 'old:virtual_from_version:43107' => 2099,
+ 'old:virtual_from_version:49847' => 1489,
+ 'old:virtual_from_version:50346' => 1007,
+ 'old:virtual_from_version:46016' => 1025,
+ 'old:virtual_from_version:49103' => 1649,
+ 'old:virtual_from_version:46991' => 1222,
+ 'old:virtual_from_version:44561' => 1009,
+ 'old:virtual_from_version:46778' => 1070,
+ 'old:virtual_from_version:49043' => 1009,
+ 'old:virtual_from_version:42201' => 1015,
+ 'old:virtual_from_version:47223' => 1109,
+ 'old:virtual_from_version:38369' => 1048,
+ 'old:virtual_from_version:45030' => 1069,
+ 'old:virtual_from_version:46197' => 1077,
+ 'old:virtual_from_version:49211' => 1070,
+ 'old:virtual_from_version:47190' => 1077,
+ 'old:virtual_from_version:40626' => 1091,
+ 'old:virtual_from_version:42982' => 1037,
+ 'old:virtual_from_version:47183' => 1109,
+ 'old:virtual_from_version:47412' => 1697,
+ 'old:virtual_from_version:40957' => 1048,
+ 'old:virtual_from_version:44022' => 1110,
+ 'old:virtual_from_version:45650' => 1070,
+ 'old:virtual_from_version:45158' => 1498,
+ 'old:virtual_from_version:40539' => 1109,
+ 'old:virtual_from_version:44226' => 1070,
+ 'old:virtual_from_version:50261' => 1136,
+ 'old:virtual_from_version:48013' => 2113,
+ 'old:virtual_from_version:40554' => 1077,
+ 'old:virtual_from_version:44577' => 1037,
+ 'old:virtual_from_version:49115' => 1125,
+ 'old:virtual_from_version:39228' => 1009,
+ 'old:virtual_from_version:47726' => 1125,
+ 'old:virtual_from_version:47882' => 1070,
+ 'old:virtual_from_version:49021' => 1077,
+ 'old:virtual_from_version:45624' => 1172,
+ 'old:virtual_from_version:49705' => 1410,
+ 'old:virtual_from_version:47679' => 1035,
+ 'old:virtual_from_version:42236' => 1420,
+ 'old:virtual_from_version:44602' => 1070,
+ 'old:virtual_from_version:45960' => 1070,
+ 'old:virtual_from_version:50396' => 3227,
+ 'old:virtual_from_version:42662' => 1070,
+ 'old:virtual_from_version:40631' => 1070,
+ 'old:virtual_from_version:46867' => 1070,
+ 'old:virtual_from_version:46895' => 1077,
+ 'old:virtual_from_version:46502' => 1583,
+ 'old:virtual_from_version:46509' => 1584,
+ 'old:virtual_from_version:46409' => 1537,
+ 'old:virtual_from_version:46056' => 1077,
+ 'old:virtual_from_version:50292' => 3233,
+ 'old:virtual_from_version:46922' => 1070,
+ 'old:virtual_from_version:49949' => 3131,
+ 'old:virtual_from_version:50672' => 3208,
+ 'old:virtual_from_version:47655' => 1077,
+ 'old:virtual_from_version:40930' => 1048,
+ 'old:virtual_from_version:50408' => 1584,
+ 'old:virtual_from_version:44049' => 1037,
+ 'old:virtual_from_version:44389' => 1112,
+ 'old:virtual_from_version:49631' => 1078,
+ 'old:virtual_from_version:40937' => 1134,
+ 'old:virtual_from_version:49490' => 1689,
+ 'old:virtual_from_version:42419' => 1037,
+ 'old:virtual_from_version:40380' => 1007,
+ 'old:virtual_from_version:45675' => 1555,
+ 'old:virtual_from_version:49665' => 3139,
+ 'old:virtual_from_version:47244' => 1125,
+ 'old:virtual_from_version:39180' => 1017,
+ 'old:virtual_from_version:42852' => 1067,
+ 'old:virtual_from_version:40580' => 1006,
+ 'old:virtual_from_version:38344' => 1009,
+ 'old:virtual_from_version:40217' => 1404,
+ 'old:virtual_from_version:50348' => 1224,
+ 'old:virtual_from_version:44624' => 1077,
+ 'old:virtual_from_version:47721' => 1109,
+ 'old:virtual_from_version:49378' => 1025,
+ 'old:virtual_from_version:49662' => 1125,
+ 'old:virtual_from_version:45215' => 1570,
+ 'old:virtual_from_version:42147' => 1077,
+ 'old:virtual_from_version:46900' => 1125,
+ 'old:virtual_from_version:46088' => 1077,
+ 'old:virtual_from_version:39858' => 1069,
+ 'old:virtual_from_version:50438' => 3191,
+ 'old:virtual_from_version:44498' => 1067,
+ 'old:virtual_from_version:38802' => 1132,
+ 'old:virtual_from_version:42078' => 1109,
+ 'old:virtual_from_version:42293' => 1037,
+ 'old:virtual_from_version:45512' => 1009,
+ 'old:virtual_from_version:44430' => 1067,
+ 'old:virtual_from_version:50263' => 1489,
+ 'old:virtual_from_version:50560' => 1489,
+ 'old:virtual_from_version:42674' => 1009,
+ 'old:virtual_from_version:49512' => 1070,
+ 'old:virtual_from_version:44047' => 1025,
+ 'old:virtual_from_version:45638' => 1046,
+ 'old:virtual_from_version:44125' => 1070,
+ 'old:virtual_from_version:46529' => 1125,
+ 'old:virtual_from_version:50089' => 3210,
+ 'old:virtual_from_version:47613' => 1109,
+ 'old:virtual_from_version:46788' => 1070,
+ 'old:virtual_from_version:46659' => 1694,
+ 'old:virtual_from_version:49742' => 1136,
+ 'old:virtual_from_version:47192' => 1125,
+ 'old:virtual_from_version:49452' => 1172,
+ 'old:virtual_from_version:45980' => 1520,
+ 'old:virtual_from_version:38461' => 1051,
+ 'old:virtual_from_version:42609' => 1077,
+ 'old:virtual_from_version:50385' => 1689,
+ 'old:virtual_from_version:39836' => 1009,
+ 'old:virtual_from_version:46820' => 1397,
+ 'old:virtual_from_version:46526' => 1172,
+ 'old:virtual_from_version:49249' => 1689,
+ 'old:virtual_from_version:40314' => 1078,
+ 'old:virtual_from_version:49592' => 1580,
+ 'old:virtual_from_version:50284' => 3223,
+ 'old:virtual_from_version:40763' => 1105,
+ 'old:virtual_from_version:40455' => 1105,
+ 'old:virtual_from_version:46048' => 1070,
+ 'old:virtual_from_version:50349' => 1006,
+ 'old:virtual_from_version:44866' => 1125,
+ 'old:virtual_from_version:49406' => 3157,
+ 'old:virtual_from_version:47477' => 1172,
+ 'old:virtual_from_version:42767' => 1070,
+ 'old:virtual_from_version:49862' => 1070,
+ 'old:virtual_from_version:49853' => 1070,
+ 'old:virtual_from_version:46915' => 1070,
+ 'old:virtual_from_version:47987' => 1067,
+ 'old:virtual_from_version:40714' => 1067,
+ 'old:virtual_from_version:45038' => 1021,
+ 'old:virtual_from_version:44755' => 1077,
+ 'old:virtual_from_version:49042' => 1105,
+ 'old:virtual_from_version:49034' => 1649,
+ 'old:virtual_from_version:46635' => 1125,
+ 'old:virtual_from_version:46597' => 1070,
+ 'old:virtual_from_version:12547' => 1125,
+ 'old:virtual_from_version:46662' => 1694,
+ 'old:virtual_from_version:47847' => 1037,
+ 'old:virtual_from_version:47163' => 1150,
+ 'old:virtual_from_version:45279' => 1009,
+ 'old:virtual_from_version:40827' => 1078,
+ 'old:virtual_from_version:42757' => 1110,
+ 'old:virtual_from_version:50106' => 3131,
+ 'old:virtual_from_version:44040' => 1025,
+ 'old:virtual_from_version:46438' => 1070,
+ 'old:virtual_from_version:47291' => 1048,
+ 'old:virtual_from_version:45489' => 1112,
+ 'old:virtual_from_version:43045' => 2002,
+ 'old:virtual_from_version:45452' => 1031,
+ 'old:virtual_from_version:49745' => 1689,
+ 'old:virtual_from_version:42985' => 1070,
+ 'old:virtual_from_version:46632' => 1070,
+ 'old:virtual_from_version:42894' => 1037,
+ 'old:virtual_from_version:42667' => 1488,
+ 'old:virtual_from_version:45379' => 1015,
+ 'old:virtual_from_version:49011' => 1077,
+ 'old:virtual_from_version:44901' => 1070,
+ 'old:virtual_from_version:29684' => 1089,
+ 'old:virtual_from_version:40822' => 1077,
+ 'old:virtual_from_version:49871' => 3131,
+ 'old:virtual_from_version:46349' => 1070,
+ 'old:virtual_from_version:45303' => 1565,
+ 'old:virtual_from_version:44908' => 1007,
+ 'old:virtual_from_version:40450' => 1105,
+ 'old:virtual_from_version:44849' => 1015,
+ 'old:virtual_from_version:50165' => 1006,
+ 'old:virtual_from_version:47580' => 1517,
+ 'old:virtual_from_version:40070' => 1025,
+ 'old:virtual_from_version:44460' => 1009,
+ 'old:virtual_from_version:44506' => 1067,
+ 'old:virtual_from_version:39343' => 1061,
+ 'old:virtual_from_version:50099' => 3221,
+ 'old:virtual_from_version:43101' => 2093,
+ 'old:virtual_from_version:49369' => 1070,
+ 'old:virtual_from_version:40768' => 1009,
+ 'old:virtual_from_version:42580' => 1456,
+ 'old:virtual_from_version:50431' => 3241,
+ 'old:virtual_from_version:47106' => 1584,
+ 'old:virtual_from_version:45698' => 1077,
+ 'old:virtual_from_version:49231' => 1070,
+ 'old:virtual_from_version:45775' => 1532,
+ 'old:virtual_from_version:47560' => 1048,
+ 'old:virtual_from_version:49762' => 3131,
+ 'old:virtual_from_version:44670' => 1037,
+ 'old:virtual_from_version:45111' => 1070,
+ 'old:virtual_from_version:40915' => 1037,
+ 'old:virtual_from_version:46383' => 1381,
+ 'old:virtual_from_version:42039' => 1077,
+ 'old:virtual_from_version:47193' => 1109,
+ 'old:virtual_from_version:49825' => 3131,
+ 'old:virtual_from_version:40381' => 1125,
+ 'old:virtual_from_version:41001' => 2013,
+ 'old:virtual_from_version:40656' => 1104,
+ 'old:virtual_from_version:42339' => 1067,
+ 'old:virtual_from_version:42883' => 1037,
+ 'old:virtual_from_version:49363' => 1077,
+ 'old:virtual_from_version:44187' => 1070,
+ 'old:virtual_from_version:42083' => 1037,
+ 'old:virtual_from_version:39893' => 1146,
+ 'old:virtual_from_version:43001' => 2020,
+ 'old:virtual_from_version:46599' => 1077,
+ 'old:virtual_from_version:44182' => 1083,
+ 'old:virtual_from_version:46150' => 1077,
+ 'old:virtual_from_version:50158' => 1689,
+ 'old:virtual_from_version:45075' => 1125,
+ 'old:virtual_from_version:45461' => 1009,
+ 'old:virtual_from_version:42702' => 1077,
+ 'old:virtual_from_version:42388' => 1000,
+ 'old:virtual_from_version:40202' => 1304,
+ 'old:virtual_from_version:42235' => 1037,
+ 'old:virtual_from_version:44211' => 1025,
+ 'old:virtual_from_version:39786' => 1125,
+ 'old:virtual_from_version:45260' => 1036,
+ 'old:virtual_from_version:49523' => 1070,
+ 'old:virtual_from_version:47416' => 1402,
+ 'old:virtual_from_version:44401' => 1007,
+ 'old:virtual_from_version:46382' => 1077,
+ 'old:virtual_from_version:49260' => 1532,
+ 'old:virtual_from_version:47626' => 3078,
+ 'old:virtual_from_version:49443' => 1689,
+ 'old:virtual_from_version:49200' => 1077,
+ 'old:virtual_from_version:42988' => 1037,
+ 'old:virtual_from_version:42048' => 1070,
+ 'old:virtual_from_version:50406' => 1150,
+ 'old:virtual_from_version:44069' => 1077,
+ 'old:virtual_from_version:46650' => 1537,
+ 'old:virtual_from_version:38330' => 1070,
+ 'old:virtual_from_version:49417' => 1689,
+ 'old:virtual_from_version:44862' => 1070,
+ 'old:virtual_from_version:50148' => 1032,
+ 'old:virtual_from_version:49858' => 1070,
+ 'old:virtual_from_version:42108' => 1070,
+ 'old:virtual_from_version:42497' => 1130,
+ 'old:virtual_from_version:40408' => 1404,
+ 'old:virtual_from_version:50760' => 3274,
+ 'old:virtual_from_version:50301' => 3131,
+ 'old:virtual_from_version:45602' => 1172,
+ 'old:virtual_from_version:49539' => 1489,
+ 'old:virtual_from_version:47019' => 1077,
+ 'old:virtual_from_version:46976' => 1070,
+ 'old:virtual_from_version:45550' => 1025,
+ 'old:virtual_from_version:45806' => 1077,
+ 'old:virtual_from_version:45336' => 1009,
+ 'old:virtual_from_version:46152' => 1077,
+ 'old:virtual_from_version:49266' => 1070,
+ 'old:virtual_from_version:50169' => 3201,
+ 'old:virtual_from_version:49711' => 1037,
+ 'old:virtual_from_version:46944' => 1077,
+ 'old:virtual_from_version:42924' => 1037,
+ 'old:virtual_from_version:42823' => 1077,
+ 'old:virtual_from_version:44432' => 1526,
+ 'old:virtual_from_version:50175' => 1314,
+ 'old:virtual_from_version:47082' => 1070,
+ 'old:virtual_from_version:47989' => 1077,
+ 'old:virtual_from_version:40710' => 1009,
+ 'old:virtual_from_version:45716' => 1107,
+ 'old:virtual_from_version:50766' => 1057,
+ 'old:virtual_from_version:49658' => 3189,
+ 'old:virtual_from_version:47156' => 1077,
+ 'old:virtual_from_version:42054' => 1048,
+ 'old:virtual_from_version:45762' => 1027,
+ 'old:virtual_from_version:47693' => 1077,
+ 'old:virtual_from_version:49963' => 3210,
+ 'old:virtual_from_version:42873' => 1505,
+ 'old:virtual_from_version:44625' => 1037,
+ 'old:virtual_from_version:49516' => 1580,
+ 'old:virtual_from_version:46780' => 1077,
+ 'old:virtual_from_version:47373' => 3008,
+ 'old:virtual_from_version:47879' => 1077,
+ 'old:virtual_from_version:45438' => 1136,
+ 'old:virtual_from_version:47825' => 1659,
+ 'old:virtual_from_version:47299' => 1125,
+ 'old:virtual_from_version:50596' => 3265,
+ 'old:virtual_from_version:44490' => 1037,
+ 'old:virtual_from_version:42519' => 1077,
+ 'old:virtual_from_version:42640' => 1009,
+ 'old:virtual_from_version:47790' => 3006,
+ 'old:virtual_from_version:40671' => 1025,
+ 'old:virtual_from_version:50036' => 3219,
+ 'old:virtual_from_version:44142' => 1110,
+ 'old:virtual_from_version:44538' => 1125,
+ 'old:virtual_from_version:44594' => 1009,
+ 'old:virtual_from_version:45350' => 1110,
+ 'old:virtual_from_version:44296' => 1107,
+ 'old:virtual_from_version:50078' => 3222,
+ 'old:virtual_from_version:44989' => 1015,
+ 'old:virtual_from_version:49556' => 1107,
+ 'old:virtual_from_version:42405' => 1070,
+ 'old:virtual_from_version:42559' => 1009,
+ 'old:virtual_from_version:45098' => 1110,
+ 'old:virtual_from_version:40894' => 1109,
+ 'old:virtual_from_version:45970' => 1009,
+ 'old:virtual_from_version:46009' => 1051,
+ 'old:virtual_from_version:49877' => 1150,
+ 'old:virtual_from_version:46799' => 1555,
+ 'old:virtual_from_version:42198' => 1037,
+ 'old:virtual_from_version:44833' => 1077,
+ 'old:virtual_from_version:47860' => 1001,
+ 'old:virtual_from_version:45732' => 1532,
+ 'old:virtual_from_version:46262' => 1517,
+ 'old:virtual_from_version:49817' => 3199,
+ 'old:virtual_from_version:44054' => 1025,
+ 'old:virtual_from_version:46005' => 1078,
+ 'old:virtual_from_version:50633' => 3192,
+ 'old:virtual_from_version:40847' => 1037,
+ 'old:virtual_from_version:49842' => 3003,
+ 'old:virtual_from_version:49464' => 1070,
+ 'old:virtual_from_version:45340' => 1136,
+ 'old:virtual_from_version:42174' => 1037,
+ 'old:virtual_from_version:44600' => 1498,
+ 'old:virtual_from_version:42308' => 1070,
+ 'old:virtual_from_version:40818' => 1067,
+ 'old:virtual_from_version:42696' => 1077,
+ 'old:virtual_from_version:49823' => 1621,
+ 'old:virtual_from_version:50749' => 1417,
+ 'old:virtual_from_version:49852' => 3200,
+ 'old:virtual_from_version:42257' => 1025,
+ 'old:virtual_from_version:50163' => 1070,
+ 'old:virtual_from_version:46590' => 1070,
+ 'old:virtual_from_version:47423' => 1077,
+ 'old:virtual_from_version:45309' => 1009,
+ 'old:virtual_from_version:46239' => 1659,
+ 'old:virtual_from_version:47272' => 1070,
+ 'old:virtual_from_version:45725' => 1077,
+ 'old:virtual_from_version:45399' => 1125,
+ 'old:virtual_from_version:46251' => 1077,
+ 'old:virtual_from_version:45642' => 1107,
+ 'old:virtual_from_version:47742' => 1070,
+ 'old:virtual_from_version:47057' => 1444,
+ 'old:virtual_from_version:50258' => 1532,
+ 'old:virtual_from_version:25148' => 1049,
+ 'old:virtual_from_version:43100' => 2092,
+ 'old:virtual_from_version:50767' => 1057,
+ 'old:virtual_from_version:40565' => 1222,
+ 'old:virtual_from_version:47351' => 1404,
+ 'old:virtual_from_version:49422' => 1689,
+ 'old:virtual_from_version:49181' => 1585,
+ 'old:virtual_from_version:46719' => 1007,
+ 'old:virtual_from_version:44790' => 1070,
+ 'old:virtual_from_version:44677' => 1067,
+ 'old:virtual_from_version:49486' => 1025,
+ 'old:virtual_from_version:49674' => 1067,
+ 'old:virtual_from_version:50120' => 1172,
+ 'old:virtual_from_version:46974' => 1689,
+ 'old:virtual_from_version:46797' => 1025,
+ 'old:virtual_from_version:49020' => 1070,
+ 'old:virtual_from_version:42752' => 1023,
+ 'old:virtual_from_version:50008' => 1070,
+ 'old:virtual_from_version:42395' => 1070,
+ 'old:virtual_from_version:44364' => 1091,
+ 'old:virtual_from_version:49861' => 3131,
+ 'old:virtual_from_version:46903' => 1689,
+ 'old:virtual_from_version:49246' => 1077,
+ 'old:virtual_from_version:50572' => 3214,
+ 'old:virtual_from_version:47753' => 1517,
+ 'old:virtual_from_version:47292' => 1109,
+ 'old:virtual_from_version:45390' => 1362,
+ 'old:virtual_from_version:50641' => 1417,
+ 'old:virtual_from_version:40858' => 1077,
+ 'old:virtual_from_version:45766' => 1401,
+ 'old:virtual_from_version:46701' => 1070,
+ 'old:virtual_from_version:50363' => 3131,
+ 'old:virtual_from_version:44397' => 1063,
+ 'old:virtual_from_version:42276' => 1070,
+ 'old:virtual_from_version:44615' => 1025,
+ 'old:virtual_from_version:45935' => 1404,
+ 'old:virtual_from_version:47777' => 1125,
+ 'old:virtual_from_version:38984' => 1067,
+ 'old:virtual_from_version:45484' => 1532,
+ 'old:virtual_from_version:46604' => 1006,
+ 'old:virtual_from_version:44347' => 1077,
+ 'old:virtual_from_version:46407' => 1077,
+ 'old:virtual_from_version:40553' => 1007,
+ 'old:virtual_from_version:40777' => 1404,
+ 'old:virtual_from_version:42314' => 1077,
+ 'old:virtual_from_version:44551' => 1037,
+ 'old:virtual_from_version:49567' => 1402,
+ 'old:virtual_from_version:39002' => 1104,
+ 'old:virtual_from_version:44685' => 1037,
+ 'old:virtual_from_version:49729' => 1489,
+ 'old:virtual_from_version:42814' => 1009,
+ 'old:virtual_from_version:49230' => 3157,
+ 'old:virtual_from_version:40801' => 1077,
+ 'old:virtual_from_version:42965' => 1009,
+ 'old:virtual_from_version:40798' => 1107,
+ 'old:virtual_from_version:38377' => 1007,
+ 'old:virtual_from_version:40682' => 1404,
+ 'old:virtual_from_version:48022' => 2122,
+ 'old:virtual_from_version:49558' => 1009,
+ 'old:virtual_from_version:50052' => 1070,
+ 'old:virtual_from_version:42191' => 1077,
+ 'old:virtual_from_version:42143' => 1222,
+ 'old:virtual_from_version:49009' => 1125,
+ 'old:virtual_from_version:46758' => 1109,
+ 'old:virtual_from_version:42637' => 1484,
+ 'old:virtual_from_version:44090' => 1037,
+ 'old:virtual_from_version:47349' => 1172,
+ 'old:virtual_from_version:45354' => 1009,
+ 'old:virtual_from_version:46366' => 1077,
+ 'old:virtual_from_version:50696' => 1417,
+ 'old:virtual_from_version:50628' => 1417,
+ 'old:virtual_from_version:39798' => 1237,
+ 'old:virtual_from_version:47170' => 3032,
+ 'old:virtual_from_version:42811' => 1081,
+ 'old:virtual_from_version:40659' => 1035,
+ 'old:virtual_from_version:45891' => 1070,
+ 'old:virtual_from_version:45282' => 1115,
+ 'old:virtual_from_version:47572' => 1444,
+ 'old:virtual_from_version:46559' => 1574,
+ 'old:virtual_from_version:45146' => 1567,
+ 'old:virtual_from_version:50241' => 3131,
+ 'old:virtual_from_version:42088' => 1077,
+ 'old:virtual_from_version:49633' => 1404,
+ 'old:virtual_from_version:44541' => 1025,
+ 'old:virtual_from_version:42554' => 1009,
+ 'old:virtual_from_version:49805' => 1621,
+ 'old:virtual_from_version:46274' => 1025,
+ 'old:virtual_from_version:42533' => 1037,
+ 'old:virtual_from_version:42349' => 1091,
+ 'old:virtual_from_version:47239' => 1070,
+ 'old:virtual_from_version:49973' => 1689,
+ 'old:virtual_from_version:47685' => 1109,
+ 'old:virtual_from_version:47045' => 1070,
+ 'old:virtual_from_version:47407' => 1109,
+ 'old:virtual_from_version:47571' => 1077,
+ 'old:virtual_from_version:47099' => 1077,
+ 'old:virtual_from_version:47654' => 1109,
+ 'old:virtual_from_version:46214' => 1077,
+ 'old:virtual_from_version:42833' => 1062,
+ 'old:virtual_from_version:38703' => 1081,
+ 'old:virtual_from_version:47341' => 1109,
+ 'old:virtual_from_version:49039' => 1125,
+ 'old:virtual_from_version:46703' => 1077,
+ 'old:virtual_from_version:49023' => 1070,
+ 'old:virtual_from_version:50632' => 3259,
+ 'old:virtual_from_version:42341' => 1070,
+ 'old:virtual_from_version:45637' => 1136,
+ 'old:virtual_from_version:45811' => 1532,
+ 'old:virtual_from_version:49368' => 3139,
+ 'old:virtual_from_version:47623' => 1109,
+ 'old:virtual_from_version:45587' => 1077,
+ 'old:virtual_from_version:42218' => 1070,
+ 'old:virtual_from_version:47086' => 1070,
+ 'old:virtual_from_version:44002' => 1009,
+ 'old:virtual_from_version:45939' => 1397,
+ 'old:virtual_from_version:50367' => 1125,
+ 'old:virtual_from_version:29976' => 1009,
+ 'old:virtual_from_version:39976' => 1257,
+ 'old:virtual_from_version:44838' => 1488,
+ 'old:virtual_from_version:38370' => 1067,
+ 'old:virtual_from_version:49500' => 1070,
+ 'old:virtual_from_version:40508' => 1037,
+ 'old:virtual_from_version:49967' => 1583,
+ 'old:virtual_from_version:40527' => 1070,
+ 'old:virtual_from_version:45483' => 1077,
+ 'old:virtual_from_version:49859' => 1125,
+ 'old:virtual_from_version:38364' => 1001,
+ 'old:virtual_from_version:49153' => 1689,
+ 'old:virtual_from_version:46795' => 1125,
+ 'old:virtual_from_version:44557' => 1009,
+ 'old:virtual_from_version:49532' => 1689,
+ 'old:virtual_from_version:49513' => 1125,
+ 'old:virtual_from_version:46332' => 1172,
+ 'old:virtual_from_version:50403' => 3131,
+ 'old:virtual_from_version:46672' => 1125,
+ 'old:virtual_from_version:39038' => 1142,
+ 'old:virtual_from_version:44349' => 1067,
+ 'old:virtual_from_version:45541' => 1404,
+ 'old:virtual_from_version:40616' => 1172,
+ 'old:virtual_from_version:49366' => 1585,
+ 'old:virtual_from_version:40999' => 1110,
+ 'old:virtual_from_version:46540' => 1070,
+ 'old:virtual_from_version:40504' => 1070,
+ 'old:virtual_from_version:47178' => 1101,
+ 'old:virtual_from_version:50609' => 1067,
+ 'old:virtual_from_version:44723' => 1537,
+ 'old:virtual_from_version:49245' => 1015,
+ 'old:virtual_from_version:46963' => 1077,
+ 'old:virtual_from_version:42583' => 1070,
+ 'old:virtual_from_version:50588' => 3194,
+ 'old:virtual_from_version:45225' => 1444,
+ 'old:virtual_from_version:40982' => 1037,
+ 'old:virtual_from_version:45987' => 1639,
+ 'old:virtual_from_version:50230' => 1070,
+ 'old:virtual_from_version:45826' => 1070,
+ 'old:virtual_from_version:39291' => 1076,
+ 'old:virtual_from_version:45426' => 1037,
+ 'old:virtual_from_version:47083' => 1125,
+ 'old:virtual_from_version:47069' => 1125,
+ 'old:virtual_from_version:42841' => 1025,
+ 'old:virtual_from_version:40987' => 1070,
+ 'old:virtual_from_version:44020' => 1077,
+ 'old:virtual_from_version:43092' => 2084,
+ 'old:virtual_from_version:45830' => 1112,
+ 'old:virtual_from_version:42111' => 1070,
+ 'old:virtual_from_version:45849' => 1070,
+ 'old:virtual_from_version:44968' => 1136,
+ 'old:virtual_from_version:40809' => 1009,
+ 'old:virtual_from_version:46665' => 1070,
+ 'old:virtual_from_version:42505' => 1023,
+ 'old:virtual_from_version:47009' => 1070,
+ 'old:virtual_from_version:42316' => 1136,
+ 'old:virtual_from_version:47055' => 1172,
+ 'old:virtual_from_version:44000' => 1125,
+ 'old:virtual_from_version:47354' => 1077,
+ 'old:virtual_from_version:42414' => 1105,
+ 'old:virtual_from_version:44686' => 1311,
+ 'old:virtual_from_version:47612' => 1125,
+ 'old:virtual_from_version:47289' => 1070,
+ 'old:virtual_from_version:45286' => 1404,
+ 'old:virtual_from_version:50187' => 1580,
+ 'old:virtual_from_version:50066' => 1172,
+ 'old:virtual_from_version:49123' => 1012,
+ 'old:virtual_from_version:40841' => 1025,
+ 'old:virtual_from_version:39350' => 1062,
+ 'old:virtual_from_version:44835' => 1381,
+ 'old:virtual_from_version:46862' => 1172,
+ 'old:virtual_from_version:44330' => 1107,
+ 'old:virtual_from_version:45917' => 1001,
+ 'old:virtual_from_version:46491' => 1568,
+ 'old:virtual_from_version:44772' => 1077,
+ 'old:virtual_from_version:45943' => 1070,
+ 'old:virtual_from_version:47803' => 1048,
+ 'old:virtual_from_version:45469' => 1025,
+ 'old:virtual_from_version:40387' => 1081,
+ 'old:virtual_from_version:50599' => 1125,
+ 'old:virtual_from_version:40462' => 1311,
+ 'old:virtual_from_version:50520' => 1311,
+ 'old:virtual_from_version:42185' => 1037,
+ 'old:virtual_from_version:38608' => 1110,
+ 'old:virtual_from_version:50060' => 1125,
+ 'old:virtual_from_version:42990' => 1077,
+ 'old:virtual_from_version:44363' => 1078,
+ 'old:virtual_from_version:47913' => 1070,
+ 'old:virtual_from_version:45290' => 1578,
+ 'old:virtual_from_version:46027' => 1070,
+ 'old:virtual_from_version:49295' => 1077,
+ 'old:virtual_from_version:42418' => 1077,
+ 'old:virtual_from_version:46815' => 1077,
+ 'old:virtual_from_version:42538' => 1025,
+ 'old:virtual_from_version:50433' => 1401,
+ 'old:virtual_from_version:47568' => 1125,
+ 'old:virtual_from_version:40275' => 1019,
+ 'old:virtual_from_version:44227' => 1077,
+ 'old:virtual_from_version:49509' => 1037,
+ 'old:virtual_from_version:39155' => 1067,
+ 'old:virtual_from_version:49886' => 1488,
+ 'old:virtual_from_version:49267' => 1077,
+ 'old:virtual_from_version:44474' => 1077,
+ 'old:virtual_from_version:44576' => 1077,
+ 'old:virtual_from_version:49375' => 1656,
+ 'old:virtual_from_version:47522' => 1537,
+ 'old:virtual_from_version:45546' => 1136,
+ 'old:virtual_from_version:46040' => 1488,
+ 'old:virtual_from_version:49081' => 1555,
+ 'old:virtual_from_version:39366' => 1017,
+ 'old:virtual_from_version:39536' => 1112,
+ 'old:virtual_from_version:44281' => 1037,
+ 'old:virtual_from_version:40992' => 1107,
+ 'old:virtual_from_version:42266' => 1037,
+ 'old:virtual_from_version:46813' => 1666,
+ 'old:virtual_from_version:39595' => 1084,
+ 'old:virtual_from_version:50054' => 1025,
+ 'old:virtual_from_version:42307' => 1110,
+ 'old:virtual_from_version:49104' => 3136,
+ 'old:virtual_from_version:45982' => 1638,
+ 'old:virtual_from_version:45064' => 1125,
+ 'old:virtual_from_version:50339' => 3236,
+ 'old:virtual_from_version:49168' => 1070,
+ 'old:virtual_from_version:42365' => 1037,
+ 'old:virtual_from_version:45690' => 1621,
+ 'old:virtual_from_version:42110' => 1037,
+ 'old:virtual_from_version:49769' => 1078,
+ 'old:virtual_from_version:44597' => 1110,
+ 'old:virtual_from_version:46851' => 1077,
+ 'old:virtual_from_version:44553' => 1070,
+ 'old:virtual_from_version:44248' => 1009,
+ 'old:virtual_from_version:49820' => 1100,
+ 'old:virtual_from_version:44997' => 1172,
+ 'old:virtual_from_version:44178' => 1438,
+ 'old:virtual_from_version:45657' => 1076,
+ 'old:virtual_from_version:46546' => 1125,
+ 'old:virtual_from_version:44700' => 1070,
+ 'old:virtual_from_version:49004' => 1532,
+ 'old:virtual_from_version:42661' => 1067,
+ 'old:virtual_from_version:46142' => 1077,
+ 'old:virtual_from_version:38786' => 1104,
+ 'old:virtual_from_version:42672' => 1489,
+ 'old:virtual_from_version:49803' => 1070,
+ 'old:virtual_from_version:44619' => 1110,
+ 'old:virtual_from_version:43085' => 2082,
+ 'old:virtual_from_version:42801' => 1057,
+ 'old:virtual_from_version:40561' => 1067,
+ 'old:virtual_from_version:47551' => 1109,
+ 'old:virtual_from_version:49203' => 1107,
+ 'old:virtual_from_version:44486' => 1070,
+ 'old:virtual_from_version:49573' => 1659,
+ 'old:virtual_from_version:47585' => 1070,
+ 'old:virtual_from_version:38355' => 1108,
+ 'old:virtual_from_version:46436' => 1067,
+ 'old:virtual_from_version:49133' => 3137,
+ 'old:virtual_from_version:46560' => 1689,
+ 'old:virtual_from_version:44520' => 1048,
+ 'old:virtual_from_version:46960' => 1077,
+ 'old:virtual_from_version:42544' => 1110,
+ 'old:virtual_from_version:49269' => 1025,
+ 'old:virtual_from_version:46467' => 1321,
+ 'old:virtual_from_version:49849' => 1537,
+ 'old:virtual_from_version:46394' => 1582,
+ 'old:virtual_from_version:50100' => 3221,
+ 'old:virtual_from_version:43075' => 2073,
+ 'old:virtual_from_version:46180' => 1404,
+ 'old:virtual_from_version:42415' => 1107,
+ 'old:virtual_from_version:50342' => 1224,
+ 'old:virtual_from_version:50714' => 1417,
+ 'old:virtual_from_version:45918' => 1077,
+ 'old:virtual_from_version:49322' => 1649,
+ 'old:virtual_from_version:50023' => 3131,
+ 'old:virtual_from_version:44754' => 1025,
+ 'old:virtual_from_version:43027' => 2052,
+ 'old:virtual_from_version:50224' => 3016,
+ 'old:virtual_from_version:40852' => 1077,
+ 'old:virtual_from_version:42007' => 1110,
+ 'old:virtual_from_version:46015' => 1009,
+ 'old:virtual_from_version:13578' => 1032,
+ 'old:virtual_from_version:49750' => 1112,
+ 'old:virtual_from_version:42492' => 1125,
+ 'old:virtual_from_version:46323' => 1070,
+ 'old:virtual_from_version:44025' => 1037,
+ 'old:virtual_from_version:49550' => 1574,
+ 'old:virtual_from_version:49600' => 1095,
+ 'old:virtual_from_version:47458' => 1125,
+ 'old:virtual_from_version:46561' => 1070,
+ 'old:virtual_from_version:44871' => 1498,
+ 'old:virtual_from_version:49760' => 3002,
+ 'old:virtual_from_version:44595' => 1077,
+ 'old:virtual_from_version:46588' => 1077,
+ 'old:virtual_from_version:45375' => 1009,
+ 'old:virtual_from_version:46188' => 1649,
+ 'old:virtual_from_version:49783' => 1659,
+ 'old:virtual_from_version:50009' => 1314,
+ 'old:virtual_from_version:47543' => 1077,
+ 'old:virtual_from_version:45488' => 1107,
+ 'old:virtual_from_version:42756' => 1109,
+ 'old:virtual_from_version:39727' => 1224,
+ 'old:virtual_from_version:49832' => 1689,
+ 'old:virtual_from_version:40701' => 1077,
+ 'old:virtual_from_version:45890' => 1506,
+ 'old:virtual_from_version:45932' => 1077,
+ 'old:virtual_from_version:46209' => 1077,
+ 'old:virtual_from_version:44821' => 1077,
+ 'old:virtual_from_version:49079' => 1070,
+ 'old:virtual_from_version:44996' => 1017,
+ 'old:virtual_from_version:50266' => 1105,
+ 'old:virtual_from_version:46957' => 1007,
+ 'old:virtual_from_version:44518' => 1037,
+ 'old:virtual_from_version:40249' => 1009,
+ 'old:virtual_from_version:45736' => 1109,
+ 'old:virtual_from_version:46325' => 1404,
+ 'old:virtual_from_version:50734' => 1404,
+ 'old:virtual_from_version:50666' => 3259,
+ 'old:virtual_from_version:50064' => 1125,
+ 'old:virtual_from_version:44777' => 1353,
+ 'old:virtual_from_version:45902' => 1038,
+ 'old:virtual_from_version:47968' => 1125,
+ 'old:virtual_from_version:40516' => 1070,
+ 'old:virtual_from_version:50458' => 1489,
+ 'old:virtual_from_version:13323' => 1010,
+ 'old:virtual_from_version:50034' => 3131,
+ 'old:virtual_from_version:45947' => 1627,
+ 'old:virtual_from_version:50013' => 3215,
+ 'old:virtual_from_version:46432' => 1136,
+ 'old:virtual_from_version:46284' => 1077,
+ 'old:virtual_from_version:44920' => 1009,
+ 'old:virtual_from_version:42748' => 1110,
+ 'old:virtual_from_version:50159' => 3131,
+ 'old:virtual_from_version:41011' => 2022,
+ 'old:virtual_from_version:44336' => 1037,
+ 'old:virtual_from_version:42104' => 1070,
+ 'old:virtual_from_version:42371' => 1037,
+ 'old:virtual_from_version:47395' => 1125,
+ 'old:virtual_from_version:49661' => 1070,
+ 'old:virtual_from_version:49463' => 1423,
+ 'old:virtual_from_version:45825' => 1626,
+ 'old:virtual_from_version:46881' => 1689,
+ 'old:virtual_from_version:39019' => 1016,
+ 'old:virtual_from_version:40863' => 1037,
+ 'old:virtual_from_version:42861' => 1136,
+ 'old:virtual_from_version:47189' => 1109,
+ 'old:virtual_from_version:50249' => 3131,
+ 'old:virtual_from_version:49874' => 1100,
+ 'old:virtual_from_version:50715' => 3259,
+ 'old:virtual_from_version:47240' => 1136,
+ 'old:virtual_from_version:40906' => 1037,
+ 'old:virtual_from_version:49700' => 1070,
+ 'old:virtual_from_version:50309' => 1067,
+ 'old:virtual_from_version:38546' => 1025,
+ 'old:virtual_from_version:45264' => 1095,
+ 'old:virtual_from_version:44688' => 1009,
+ 'old:virtual_from_version:45988' => 1362,
+ 'old:virtual_from_version:42420' => 1404,
+ 'old:virtual_from_version:44383' => 1031,
+ 'old:virtual_from_version:47929' => 1362,
+ 'old:virtual_from_version:49334' => 1037,
+ 'old:virtual_from_version:50625' => 1128,
+ 'old:virtual_from_version:40592' => 1077,
+ 'old:virtual_from_version:50114' => 1689,
+ 'old:virtual_from_version:44161' => 1077,
+ 'old:virtual_from_version:50225' => 3131,
+ 'old:virtual_from_version:49743' => 1404,
+ 'old:virtual_from_version:44629' => 1082,
+ 'old:virtual_from_version:50569' => 1404,
+ 'old:virtual_from_version:42151' => 1009,
+ 'old:virtual_from_version:45024' => 1006,
+ 'old:virtual_from_version:42043' => 1070,
+ 'old:virtual_from_version:42768' => 1006,
+ 'old:virtual_from_version:39612' => 1035,
+ 'old:virtual_from_version:48005' => 2106,
+ 'old:virtual_from_version:49819' => 1070,
+ 'old:virtual_from_version:46272' => 1136,
+ 'old:virtual_from_version:42575' => 1172,
+ 'old:virtual_from_version:44037' => 1070,
+ 'old:virtual_from_version:49493' => 1105,
+ 'old:virtual_from_version:47986' => 1109,
+ 'old:virtual_from_version:49880' => 1070,
+ 'old:virtual_from_version:41010' => 2021,
+ 'old:virtual_from_version:50360' => 3131,
+ 'old:virtual_from_version:45616' => 1077,
+ 'old:virtual_from_version:42227' => 1037,
+ 'old:virtual_from_version:47875' => 1037,
+ 'old:virtual_from_version:46771' => 1077,
+ 'old:virtual_from_version:44011' => 1016,
+ 'old:virtual_from_version:50332' => 1076,
+ 'old:virtual_from_version:44992' => 1067,
+ 'old:virtual_from_version:48006' => 2105,
+ 'old:virtual_from_version:45609' => 1404,
+ 'old:virtual_from_version:49646' => 1070,
+ 'old:virtual_from_version:42272' => 1077,
+ 'old:virtual_from_version:43037' => 2036,
+ 'old:virtual_from_version:40741' => 1070,
+ 'old:virtual_from_version:42485' => 1009,
+ 'old:virtual_from_version:42735' => 1037,
+ 'old:virtual_from_version:44974' => 1144,
+ 'old:virtual_from_version:45521' => 1580,
+ 'old:virtual_from_version:50386' => 3131,
+ 'old:virtual_from_version:42038' => 1009,
+ 'old:virtual_from_version:44981' => 1048,
+ 'old:virtual_from_version:42551' => 1172,
+ 'old:virtual_from_version:49239' => 1070,
+ 'old:virtual_from_version:44954' => 1077,
+ 'old:virtual_from_version:47871' => 1314,
+ 'old:virtual_from_version:44844' => 1070,
+ 'old:virtual_from_version:50381' => 1049,
+ 'old:virtual_from_version:44847' => 1070,
+ 'old:virtual_from_version:50317' => 3236,
+ 'old:virtual_from_version:45874' => 1077,
+ 'old:virtual_from_version:49409' => 1067,
+ 'old:virtual_from_version:49197' => 1517,
+ 'old:virtual_from_version:47467' => 1070,
+ 'old:virtual_from_version:42851' => 1037,
+ 'old:virtual_from_version:40541' => 1070,
+ 'old:virtual_from_version:49582' => 3119,
+ 'old:virtual_from_version:46647' => 1070,
+ 'old:virtual_from_version:50623' => 1033,
+ 'old:virtual_from_version:47273' => 1109,
+ 'old:virtual_from_version:46024' => 1070,
+ 'old:virtual_from_version:40735' => 1025,
+ 'old:virtual_from_version:46157' => 1070,
+ 'old:virtual_from_version:49748' => 1070,
+ 'old:virtual_from_version:45664' => 1019,
+ 'old:virtual_from_version:42586' => 1077,
+ 'old:virtual_from_version:49519' => 1125,
+ 'old:virtual_from_version:50172' => 1070,
+ 'old:virtual_from_version:44454' => 1529,
+ 'old:virtual_from_version:44626' => 1070,
+ 'old:virtual_from_version:45571' => 1105,
+ 'old:virtual_from_version:44493' => 1107,
+ 'old:virtual_from_version:50204' => 3131,
+ 'old:virtual_from_version:49495' => 1689,
+ 'old:virtual_from_version:50216' => 3131,
+ 'old:virtual_from_version:50684' => 1689,
+ 'old:virtual_from_version:47260' => 1125,
+ 'old:virtual_from_version:40764' => 1046,
+ 'old:virtual_from_version:40874' => 1077,
+ 'old:virtual_from_version:42480' => 1077,
+ 'old:virtual_from_version:50152' => 3131,
+ 'old:virtual_from_version:45021' => 1063,
+ 'old:virtual_from_version:42717' => 1077,
+ 'old:virtual_from_version:47062' => 1077,
+ 'old:virtual_from_version:49398' => 1070,
+ 'old:virtual_from_version:42303' => 1125,
+ 'old:virtual_from_version:13209' => 1061,
+ 'old:virtual_from_version:50527' => 1070,
+ 'old:virtual_from_version:46602' => 1125,
+ 'old:virtual_from_version:46744' => 1555,
+ 'old:virtual_from_version:40943' => 1037,
+ 'old:virtual_from_version:40939' => 1077,
+ 'old:virtual_from_version:44990' => 1090,
+ 'old:virtual_from_version:47932' => 1067,
+ 'old:virtual_from_version:42373' => 1105,
+ 'old:virtual_from_version:46522' => 1070,
+ 'old:virtual_from_version:38929' => 1061,
+ 'old:virtual_from_version:47325' => 1077,
+ 'old:virtual_from_version:39909' => 1115,
+ 'old:virtual_from_version:50470' => 3247,
+ 'old:virtual_from_version:47471' => 1444,
+ 'old:virtual_from_version:49041' => 1067,
+ 'old:virtual_from_version:47639' => 1070,
+ 'old:virtual_from_version:49387' => 3129,
+ 'old:virtual_from_version:47574' => 1689,
+ 'old:virtual_from_version:49833' => 3002,
+ 'old:virtual_from_version:45832' => 1077,
+ 'old:virtual_from_version:44503' => 1077,
+ 'old:virtual_from_version:50428' => 1580,
+ 'old:virtual_from_version:49093' => 3094,
+ 'old:virtual_from_version:44402' => 1008,
+ 'old:virtual_from_version:38351' => 1029,
+ 'old:virtual_from_version:41018' => 2027,
+ 'old:virtual_from_version:46841' => 1077,
+ 'old:virtual_from_version:46690' => 1070,
+ 'old:virtual_from_version:38753' => 1000,
+ 'old:virtual_from_version:46637' => 1077,
+ 'old:virtual_from_version:47339' => 1125,
+ 'old:virtual_from_version:48008' => 2108,
+ 'old:virtual_from_version:49868' => 3204,
+ 'old:virtual_from_version:46429' => 1077,
+ 'old:virtual_from_version:40704' => 1009,
+ 'old:virtual_from_version:40762' => 1048,
+ 'old:virtual_from_version:46282' => 1404,
+ 'old:virtual_from_version:42398' => 1037,
+ 'old:virtual_from_version:42446' => 1107,
+ 'old:virtual_from_version:47576' => 1070,
+ 'old:virtual_from_version:44655' => 1009,
+ 'old:virtual_from_version:44384' => 1036,
+ 'old:virtual_from_version:49109' => 3146,
+ 'old:virtual_from_version:47910' => 3008,
+ 'old:virtual_from_version:46034' => 1649,
+ 'old:virtual_from_version:40586' => 1077,
+ 'old:virtual_from_version:40243' => 1136,
+ 'old:virtual_from_version:44036' => 1488,
+ 'old:virtual_from_version:50474' => 3251,
+ 'old:virtual_from_version:46010' => 1048,
+ 'old:virtual_from_version:40860' => 1048,
+ 'old:virtual_from_version:45900' => 1077,
+ 'old:virtual_from_version:47391' => 3008,
+ 'old:virtual_from_version:45219' => 1574,
+ 'old:virtual_from_version:37575' => 1015,
+ 'old:virtual_from_version:49187' => 1070,
+ 'old:virtual_from_version:39951' => 1109,
+ 'old:virtual_from_version:47923' => 1565,
+ 'old:virtual_from_version:47563' => 1404,
+ 'old:virtual_from_version:44366' => 1007,
+ 'old:virtual_from_version:42615' => 1077,
+ 'old:virtual_from_version:50190' => 1146,
+ 'old:virtual_from_version:45145' => 1037,
+ 'old:virtual_from_version:45948' => 1627,
+ 'old:virtual_from_version:44827' => 1552,
+ 'old:virtual_from_version:46046' => 1077,
+ 'old:virtual_from_version:42548' => 1009,
+ 'old:virtual_from_version:49796' => 1689,
+ 'old:virtual_from_version:47187' => 1070,
+ 'old:virtual_from_version:45769' => 1009,
+ 'old:virtual_from_version:44740' => 1172,
+ 'old:virtual_from_version:46288' => 1070,
+ 'old:virtual_from_version:46668' => 1070,
+ 'old:virtual_from_version:49371' => 1077,
+ 'old:virtual_from_version:47873' => 1070,
+ 'old:virtual_from_version:46531' => 1105,
+ 'old:virtual_from_version:47431' => 1404,
+ 'old:virtual_from_version:46375' => 1585,
+ 'old:virtual_from_version:44828' => 1070,
+ 'old:virtual_from_version:44033' => 1070,
+ 'old:virtual_from_version:47897' => 1037,
+ 'old:virtual_from_version:44654' => 1070,
+ 'old:virtual_from_version:42820' => 1104,
+ 'old:virtual_from_version:40868' => 1037,
+ 'old:virtual_from_version:40627' => 1025,
+ 'old:virtual_from_version:45398' => 1008,
+ 'old:virtual_from_version:47016' => 1067,
+ 'old:virtual_from_version:42089' => 1037,
+ 'old:virtual_from_version:49183' => 1070,
+ 'old:virtual_from_version:46119' => 1092,
+ 'old:virtual_from_version:42630' => 1070,
+ 'old:virtual_from_version:40146' => 1078,
+ 'old:virtual_from_version:44534' => 1025,
+ 'old:virtual_from_version:46752' => 1077,
+ 'old:virtual_from_version:47136' => 1659,
+ 'old:virtual_from_version:50156' => 1517,
+ 'old:virtual_from_version:44927' => 1125,
+ 'old:virtual_from_version:40970' => 1077,
+ 'old:virtual_from_version:47275' => 1077,
+ 'old:virtual_from_version:47995' => 1125,
+ 'old:virtual_from_version:46927' => 1077,
+ 'old:virtual_from_version:42570' => 1172,
+ 'old:virtual_from_version:46686' => 1125,
+ 'old:virtual_from_version:40773' => 1404,
+ 'old:virtual_from_version:46621' => 1070,
+ 'old:virtual_from_version:45117' => 1077,
+ 'old:virtual_from_version:49185' => 1077,
+ 'old:virtual_from_version:45475' => 1110,
+ 'old:virtual_from_version:45683' => 1019,
+ 'old:virtual_from_version:49277' => 1007,
+ 'old:virtual_from_version:42268' => 1070,
+ 'old:virtual_from_version:47334' => 3006,
+ 'old:virtual_from_version:50151' => 1580,
+ 'old:virtual_from_version:50682' => 1585,
+ 'old:virtual_from_version:49294' => 1037,
+ 'old:virtual_from_version:40985' => 1407,
+ 'old:virtual_from_version:42092' => 1037,
+ 'old:virtual_from_version:47713' => 1621,
+ 'old:virtual_from_version:42987' => 1077,
+ 'old:virtual_from_version:44570' => 1037,
+ 'old:virtual_from_version:46118' => 1077,
+ 'old:virtual_from_version:46722' => 1172,
+ 'old:virtual_from_version:45740' => 1077,
+ 'old:virtual_from_version:46049' => 1125,
+ 'old:virtual_from_version:50264' => 3131,
+ 'old:virtual_from_version:45738' => 1067,
+ 'old:virtual_from_version:49939' => 1107,
+ 'old:virtual_from_version:42979' => 1070,
+ 'old:virtual_from_version:44966' => 1049,
+ 'old:virtual_from_version:45473' => 1136,
+ 'old:virtual_from_version:46769' => 1498,
+ 'old:virtual_from_version:47954' => 1109,
+ 'old:virtual_from_version:42589' => 1110,
+ 'old:virtual_from_version:46999' => 3015,
+ 'old:virtual_from_version:40400' => 1350,
+ 'old:virtual_from_version:44608' => 1110,
+ 'old:virtual_from_version:44446' => 1077,
+ 'old:virtual_from_version:44528' => 1077,
+ 'old:virtual_from_version:42093' => 1335,
+ 'old:virtual_from_version:46749' => 1077,
+ 'old:virtual_from_version:44415' => 1022,
+ 'old:virtual_from_version:50559' => 1070,
+ 'old:virtual_from_version:49286' => 1077,
+ 'old:virtual_from_version:42447' => 1070,
+ 'old:virtual_from_version:44131' => 1077,
+ 'old:virtual_from_version:40960' => 1107,
+ 'old:virtual_from_version:49647' => 1314,
+ 'old:virtual_from_version:49620' => 1158,
+ 'old:virtual_from_version:50583' => 3259,
+ 'old:virtual_from_version:42961' => 1037,
+ 'old:virtual_from_version:42424' => 1009,
+ 'old:virtual_from_version:47653' => 1125,
+ 'old:virtual_from_version:49401' => 3169,
+ 'old:virtual_from_version:42229' => 1083,
+ 'old:virtual_from_version:44118' => 1077,
+ 'old:virtual_from_version:42452' => 1439,
+ 'old:virtual_from_version:44509' => 1311,
+ 'old:virtual_from_version:49336' => 1404,
+ 'old:virtual_from_version:39966' => 1053,
+ 'old:virtual_from_version:43040' => 2038,
+ 'old:virtual_from_version:46442' => 1343,
+ 'old:virtual_from_version:42932' => 1146,
+ 'old:virtual_from_version:44416' => 1023,
+ 'old:virtual_from_version:49767' => 3002,
+ 'old:virtual_from_version:42173' => 1077,
+ 'old:virtual_from_version:44277' => 1070,
+ 'old:virtual_from_version:46037' => 1107,
+ 'old:virtual_from_version:44727' => 1025,
+ 'old:virtual_from_version:44201' => 1081,
+ 'old:virtual_from_version:40983' => 1328,
+ 'old:virtual_from_version:46969' => 1070,
+ 'old:virtual_from_version:40789' => 1025,
+ 'old:virtual_from_version:49505' => 1404,
+ 'old:virtual_from_version:42560' => 1025,
+ 'old:virtual_from_version:44350' => 1070,
+ 'old:virtual_from_version:49001' => 3127,
+ 'old:virtual_from_version:46786' => 1077,
+ 'old:virtual_from_version:45614' => 1070,
+ 'old:virtual_from_version:49720' => 1689,
+ 'old:virtual_from_version:40840' => 1009,
+ 'old:virtual_from_version:47650' => 1109,
+ 'old:virtual_from_version:47999' => 1125,
+ 'old:virtual_from_version:49456' => 1070,
+ 'old:virtual_from_version:40646' => 1394,
+ 'old:virtual_from_version:46990' => 1172,
+ 'old:virtual_from_version:49838' => 1009,
+ 'old:virtual_from_version:50440' => 3244,
+ 'old:virtual_from_version:47371' => 3046,
+ 'old:virtual_from_version:39662' => 1081,
+ 'old:virtual_from_version:42139' => 1077,
+ 'old:virtual_from_version:50388' => 1125,
+ 'old:virtual_from_version:47945' => 1070,
+ 'old:virtual_from_version:47590' => 1125,
+ 'old:virtual_from_version:45276' => 1222,
+ 'old:virtual_from_version:44045' => 1070,
+ 'old:virtual_from_version:47966' => 1649,
+ 'old:virtual_from_version:44399' => 1091,
+ 'old:virtual_from_version:40829' => 1125,
+ 'old:virtual_from_version:47194' => 1077,
+ 'old:virtual_from_version:47569' => 1109,
+ 'old:virtual_from_version:44409' => 1064,
+ 'old:virtual_from_version:44911' => 1125,
+ 'old:virtual_from_version:46311' => 1077,
+ 'old:virtual_from_version:49892' => 1689,
+ 'old:virtual_from_version:46641' => 1077,
+ 'old:virtual_from_version:44639' => 1077,
+ 'old:virtual_from_version:49089' => 3139,
+ 'old:virtual_from_version:47893' => 1123,
+ 'old:virtual_from_version:46806' => 1077,
+ 'old:virtual_from_version:45066' => 1070,
+ 'old:virtual_from_version:46625' => 1009,
+ 'old:virtual_from_version:42061' => 1070,
+ 'old:virtual_from_version:47779' => 1048,
+ 'old:virtual_from_version:42996' => 1077,
+ 'old:virtual_from_version:47048' => 1517,
+ 'old:virtual_from_version:47251' => 1037,
+ 'old:virtual_from_version:44425' => 1094,
+ 'old:virtual_from_version:49424' => 1172,
+ 'old:virtual_from_version:46296' => 1172,
+ 'old:virtual_from_version:44192' => 1110,
+ 'old:virtual_from_version:46612' => 1077,
+ 'old:virtual_from_version:49827' => 1070,
+ 'old:virtual_from_version:42941' => 1037,
+ 'old:virtual_from_version:40986' => 1107,
+ 'old:virtual_from_version:46050' => 1009,
+ 'old:virtual_from_version:46319' => 1222,
+ 'old:virtual_from_version:46354' => 1057,
+ 'old:virtual_from_version:40805' => 1077,
+ 'old:virtual_from_version:50211' => 1532,
+ 'old:virtual_from_version:46807' => 1666,
+ 'old:virtual_from_version:47342' => 1077,
+ 'old:virtual_from_version:40451' => 1091,
+ 'old:virtual_from_version:44845' => 1009,
+ 'old:virtual_from_version:44478' => 1077,
+ 'old:virtual_from_version:46871' => 1444,
+ 'old:virtual_from_version:42624' => 1077,
+ 'old:virtual_from_version:40534' => 1077,
+ 'old:virtual_from_version:42213' => 1009,
+ 'old:virtual_from_version:42508' => 1037,
+ 'old:virtual_from_version:46104' => 1070,
+ 'old:virtual_from_version:47230' => 1689,
+ 'old:virtual_from_version:42960' => 1077,
+ 'old:virtual_from_version:50283' => 3222,
+ 'old:virtual_from_version:42907' => 1070,
+ 'old:virtual_from_version:45099' => 1070,
+ 'old:virtual_from_version:45632' => 1070,
+ 'old:virtual_from_version:39624' => 1082,
+ 'old:virtual_from_version:45517' => 1136,
+ 'old:virtual_from_version:46258' => 1537,
+ 'old:virtual_from_version:45041' => 1023,
+ 'old:virtual_from_version:47404' => 1411,
+ 'old:virtual_from_version:40390' => 1341,
+ 'old:virtual_from_version:46504' => 1585,
+ 'old:virtual_from_version:49221' => 1314,
+ 'old:virtual_from_version:50476' => 1659,
+ 'old:virtual_from_version:45474' => 1070,
+ 'old:virtual_from_version:46979' => 1067,
+ 'old:virtual_from_version:47437' => 1077,
+ 'old:virtual_from_version:50326' => 1070,
+ 'old:virtual_from_version:45510' => 1070,
+ 'old:virtual_from_version:47615' => 1077,
+ 'old:virtual_from_version:49990' => 1404,
+ 'old:virtual_from_version:50562' => 1070,
+ 'old:virtual_from_version:46679' => 1077,
+ 'old:virtual_from_version:46161' => 1070,
+ 'old:virtual_from_version:42459' => 1107,
+ 'old:virtual_from_version:50374' => 3131,
+ 'old:virtual_from_version:46694' => 1404,
+ 'old:virtual_from_version:42687' => 1009,
+ 'old:virtual_from_version:46447' => 1172,
+ 'old:virtual_from_version:10004' => 2003,
+ 'old:virtual_from_version:46138' => 1414,
+ 'old:virtual_from_version:40887' => 1009,
+ 'old:virtual_from_version:40079' => 1081,
+ 'old:virtual_from_version:49074' => 3002,
+ 'old:virtual_from_version:46448' => 1031,
+ 'old:virtual_from_version:8056 ' => 1060,
+ 'old:virtual_from_version:49828' => 1125,
+ 'old:virtual_from_version:47317' => 3009,
+ 'old:virtual_from_version:46439' => 1077,
+ 'old:virtual_from_version:47656' => 1404,
+ 'old:virtual_from_version:40936' => 1037,
+ 'old:virtual_from_version:44516' => 1025,
+ 'old:virtual_from_version:44980' => 1081,
+ 'old:virtual_from_version:42947' => 1110,
+ 'old:virtual_from_version:49826' => 3201,
+ 'old:virtual_from_version:42517' => 1070,
+ 'old:virtual_from_version:44167' => 1522,
+ 'old:virtual_from_version:50328' => 1224,
+ 'old:virtual_from_version:50288' => 3131,
+ 'old:virtual_from_version:46036' => 1070,
+ 'old:virtual_from_version:44103' => 1516,
+ 'old:virtual_from_version:42566' => 1009,
+ 'old:virtual_from_version:42253' => 1037,
+ 'old:virtual_from_version:49775' => 3131,
+ 'old:virtual_from_version:46574' => 1689,
+ 'old:virtual_from_version:49937' => 1136,
+ 'old:virtual_from_version:49058' => 1404,
+ 'old:virtual_from_version:49364' => 1583,
+ 'old:virtual_from_version:50046' => 1070,
+ 'old:virtual_from_version:44895' => 1107,
+ 'old:virtual_from_version:47256' => 1077,
+ 'old:virtual_from_version:47809' => 3108,
+ 'old:virtual_from_version:50443' => 1035,
+ 'old:virtual_from_version:42618' => 1070,
+ 'old:virtual_from_version:45803' => 1009,
+ 'old:virtual_from_version:49758' => 1666,
+ 'old:virtual_from_version:44317' => 1067,
+ 'old:virtual_from_version:45265' => 1042,
+ 'old:virtual_from_version:42120' => 1077,
+ 'old:virtual_from_version:49561' => 1070,
+ 'old:virtual_from_version:40643' => 1005,
+ 'old:virtual_from_version:47519' => 1109,
+ 'old:virtual_from_version:44596' => 1037,
+ 'old:virtual_from_version:42360' => 1037,
+ 'old:virtual_from_version:49754' => 3195,
+ 'old:virtual_from_version:45119' => 1009,
+ 'old:virtual_from_version:50243' => 1070,
+ 'old:virtual_from_version:47485' => 1070,
+ 'old:virtual_from_version:50164' => 1172,
+ 'old:virtual_from_version:22824' => 1035,
+ 'old:virtual_from_version:40061' => 1067,
+ 'old:virtual_from_version:47409' => 1621,
+ 'old:virtual_from_version:45148' => 1568,
+ 'old:virtual_from_version:42617' => 1172,
+ 'old:virtual_from_version:49792' => 3131,
+ 'old:virtual_from_version:47969' => 1037,
+ 'old:virtual_from_version:46213' => 1009,
+ 'old:virtual_from_version:40679' => 1109,
+ 'old:virtual_from_version:47833' => 1172,
+ 'old:virtual_from_version:42849' => 1009,
+ 'old:virtual_from_version:39183' => 1036,
+ 'old:virtual_from_version:46127' => 1070,
+ 'old:virtual_from_version:49255' => 1410,
+ 'old:virtual_from_version:44795' => 1025,
+ 'old:virtual_from_version:42106' => 1037,
+ 'old:virtual_from_version:46022' => 1574,
+ 'old:virtual_from_version:45094' => 1070,
+ 'old:virtual_from_version:42877' => 1063,
+ 'old:virtual_from_version:44918' => 1009,
+ 'old:virtual_from_version:46201' => 1633,
+ 'old:virtual_from_version:49191' => 1689,
+ 'old:virtual_from_version:49534' => 1585,
+ 'old:virtual_from_version:49126' => 1580,
+ 'old:virtual_from_version:45273' => 1112,
+ 'old:virtual_from_version:46868' => 1067,
+ 'old:virtual_from_version:47633' => 1584,
+ 'old:virtual_from_version:46392' => 1077,
+ 'old:virtual_from_version:45768' => 1070,
+ 'old:virtual_from_version:49531' => 1532,
+ 'old:virtual_from_version:46231' => 1615,
+ 'old:virtual_from_version:45457' => 1125,
+ 'old:virtual_from_version:49005' => 1583,
+ 'old:virtual_from_version:42989' => 1070,
+ 'old:virtual_from_version:46740' => 1404,
+ 'old:virtual_from_version:45623' => 1077,
+ 'old:virtual_from_version:50168' => 3131,
+ 'old:virtual_from_version:45907' => 1107,
+ 'old:virtual_from_version:40582' => 1105,
+ 'old:virtual_from_version:46713' => 1048,
+ 'old:virtual_from_version:46550' => 1048,
+ 'old:virtual_from_version:49872' => 3194,
+ 'old:virtual_from_version:40932' => 1077,
+ 'old:virtual_from_version:47466' => 1621,
+ 'old:virtual_from_version:45581' => 1070,
+ 'old:virtual_from_version:46028' => 1077,
+ 'old:virtual_from_version:50664' => 1419,
+ 'old:virtual_from_version:42510' => 1109,
+ 'old:virtual_from_version:39317' => 1123,
+ 'old:virtual_from_version:42300' => 1107,
+ 'old:virtual_from_version:44864' => 1077,
+ 'old:virtual_from_version:47984' => 1070,
+ 'old:virtual_from_version:45509' => 1136,
+ 'old:virtual_from_version:49209' => 1565,
+ 'old:virtual_from_version:49438' => 1150,
+ 'old:virtual_from_version:49517' => 1070,
+ 'old:virtual_from_version:47848' => 1109,
+ 'old:virtual_from_version:47046' => 1125,
+ 'old:virtual_from_version:45860' => 1070,
+ 'old:virtual_from_version:50490' => 3252,
+ 'old:virtual_from_version:45545' => 1172,
+ 'old:virtual_from_version:49988' => 3131,
+ 'old:virtual_from_version:46128' => 1077,
+ 'old:virtual_from_version:46567' => 1077,
+ 'old:virtual_from_version:50132' => 1404,
+ 'old:virtual_from_version:44012' => 1077,
+ 'old:virtual_from_version:47846' => 1070,
+ 'old:virtual_from_version:44128' => 1037,
+ 'old:virtual_from_version:49898' => 1006,
+ 'old:virtual_from_version:44897' => 1077,
+ 'old:virtual_from_version:44135' => 1070,
+ 'old:virtual_from_version:44462' => 1037,
+ 'old:virtual_from_version:42240' => 1037,
+ 'old:virtual_from_version:45220' => 1575,
+ 'old:virtual_from_version:50667' => 1070,
+ 'old:virtual_from_version:44353' => 1172,
+ 'old:virtual_from_version:49681' => 3190,
+ 'old:virtual_from_version:46676' => 1077,
+ 'old:virtual_from_version:45807' => 1381,
+ 'old:virtual_from_version:42952' => 1077,
+ 'old:virtual_from_version:44591' => 1110,
+ 'old:virtual_from_version:50762' => 1070,
+ 'old:virtual_from_version:50435' => 1057,
+ 'old:virtual_from_version:45071' => 1077,
+ 'old:virtual_from_version:42862' => 1321,
+ 'old:virtual_from_version:50315' => 3186,
+ 'old:virtual_from_version:50434' => 3239,
+ 'old:virtual_from_version:45458' => 1107,
+ 'old:virtual_from_version:50383' => 1125,
+ 'old:virtual_from_version:44550' => 1077,
+ 'old:virtual_from_version:50072' => 3215,
+ 'old:virtual_from_version:49617' => 1158,
+ 'old:virtual_from_version:50090' => 1070,
+ 'old:virtual_from_version:50704' => 1012,
+ 'old:virtual_from_version:45962' => 1077,
+ 'old:virtual_from_version:40470' => 1091,
+ 'old:virtual_from_version:47523' => 1580,
+ 'old:virtual_from_version:50426' => 1070,
+ 'old:virtual_from_version:47322' => 1109,
+ 'old:virtual_from_version:43074' => 2072,
+ 'old:virtual_from_version:50371' => 3131,
+ 'old:virtual_from_version:46013' => 1172,
+ 'old:virtual_from_version:46601' => 1005,
+ 'old:virtual_from_version:46090' => 1655,
+ 'old:virtual_from_version:50488' => 3221,
+ 'old:virtual_from_version:47202' => 1035,
+ 'old:virtual_from_version:45116' => 1009,
+ 'old:virtual_from_version:44810' => 1077,
+ 'old:virtual_from_version:42164' => 1070,
+ 'old:virtual_from_version:42003' => 1009,
+ 'old:virtual_from_version:40401' => 1351,
+ 'old:virtual_from_version:49256' => 1649,
+ 'old:virtual_from_version:46912' => 1621,
+ 'old:virtual_from_version:49471' => 1314,
+ 'old:virtual_from_version:42221' => 1037,
+ 'old:virtual_from_version:40905' => 1077,
+ 'old:virtual_from_version:49498' => 1035,
+ 'old:virtual_from_version:38727' => 1083,
+ 'old:virtual_from_version:50214' => 1172,
+ 'old:virtual_from_version:47047' => 1077,
+ 'old:virtual_from_version:47096' => 1311,
+ 'old:virtual_from_version:42900' => 1110,
+ 'old:virtual_from_version:45841' => 1172,
+ 'old:virtual_from_version:49140' => 1689,
+ 'old:virtual_from_version:49353' => 1077,
+ 'old:virtual_from_version:50329' => 3131,
+ 'old:virtual_from_version:47035' => 1580,
+ 'old:virtual_from_version:44995' => 1091,
+ 'old:virtual_from_version:49899' => 3131,
+ 'old:virtual_from_version:47201' => 1587,
+ 'old:virtual_from_version:46228' => 1077,
+ 'old:virtual_from_version:50732' => 1048,
+ 'old:virtual_from_version:44143' => 1125,
+ 'old:virtual_from_version:47903' => 3119,
+ 'old:virtual_from_version:45913' => 1009,
+ 'old:virtual_from_version:50093' => 3131,
+ 'old:virtual_from_version:44031' => 1037,
+ 'old:virtual_from_version:46042' => 1650,
+ 'old:virtual_from_version:44928' => 1107,
+ 'old:virtual_from_version:49407' => 1070,
+ 'old:virtual_from_version:49738' => 1489,
+ 'old:virtual_from_version:49795' => 1489,
+ 'old:virtual_from_version:47781' => 1077,
+ 'old:virtual_from_version:50354' => 1314,
+ 'old:virtual_from_version:42710' => 1077,
+ 'old:virtual_from_version:44909' => 1009,
+ 'old:virtual_from_version:46734' => 1517,
+ 'old:virtual_from_version:46126' => 1077,
+ 'old:virtual_from_version:49970' => 3209,
+ 'old:virtual_from_version:44879' => 1070,
+ 'old:virtual_from_version:42896' => 1070,
+ 'old:virtual_from_version:50188' => 3131,
+ 'old:virtual_from_version:39658' => 1007,
+ 'old:virtual_from_version:45427' => 1048,
+ 'old:virtual_from_version:50082' => 3131,
+ 'old:virtual_from_version:40465' => 1009,
+ 'old:virtual_from_version:45275' => 1017,
+ 'old:virtual_from_version:42886' => 1009,
+ 'old:virtual_from_version:45635' => 1076,
+ 'old:virtual_from_version:43065' => 2066,
+ 'old:virtual_from_version:44195' => 1070,
+ 'old:virtual_from_version:40687' => 1051,
+ 'old:virtual_from_version:40729' => 1077,
+ 'old:virtual_from_version:42219' => 1009,
+ 'old:virtual_from_version:38563' => 1116,
+ 'old:virtual_from_version:49479' => 1583,
+ 'old:virtual_from_version:50631' => 1689,
+ 'old:virtual_from_version:47316' => 1689,
+ 'old:virtual_from_version:50021' => 1070,
+ 'old:virtual_from_version:42927' => 1077,
+ 'old:virtual_from_version:39901' => 1070,
+ 'old:virtual_from_version:49704' => 3191,
+ 'old:virtual_from_version:42723' => 1077,
+ 'old:virtual_from_version:49485' => 1070,
+ 'old:virtual_from_version:45622' => 1009,
+ 'old:virtual_from_version:46421' => 1077,
+ 'old:virtual_from_version:44004' => 1037,
+ 'old:virtual_from_version:46099' => 1649,
+ 'old:virtual_from_version:43081' => 2078,
+ 'old:virtual_from_version:47314' => 1077,
+ 'old:virtual_from_version:44667' => 1172,
+ 'old:virtual_from_version:46186' => 1077,
+ 'old:virtual_from_version:49901' => 1616,
+ 'old:virtual_from_version:49652' => 1070,
+ 'old:virtual_from_version:49703' => 3129,
+ 'old:virtual_from_version:42153' => 1037,
+ 'old:virtual_from_version:47424' => 1689,
+ 'old:virtual_from_version:47587' => 1109,
+ 'old:virtual_from_version:49049' => 1666,
+ 'old:virtual_from_version:47052' => 1125,
+ 'old:virtual_from_version:44837' => 1009,
+ 'old:virtual_from_version:47290' => 1125,
+ 'old:virtual_from_version:45032' => 1015,
+ 'old:virtual_from_version:45563' => 1012,
+ 'old:virtual_from_version:44442' => 1077,
+ 'old:virtual_from_version:42945' => 1077,
+ 'old:virtual_from_version:50480' => 3174,
+ 'old:virtual_from_version:44836' => 1033,
+ 'old:virtual_from_version:49120' => 1067,
+ 'old:virtual_from_version:46334' => 1659,
+ 'old:virtual_from_version:46633' => 1077,
+ 'old:virtual_from_version:47000' => 1070,
+ 'old:virtual_from_version:49038' => 1070,
+ 'old:virtual_from_version:40788' => 1070,
+ 'old:virtual_from_version:42369' => 1009,
+ 'old:virtual_from_version:43051' => 2018,
+ 'old:virtual_from_version:44949' => 1404,
+ 'old:virtual_from_version:49884' => 1689,
+ 'old:virtual_from_version:46144' => 1105,
+ 'old:virtual_from_version:50577' => 3031,
+ 'old:virtual_from_version:40303' => 1109,
+ 'old:virtual_from_version:42891' => 1009,
+ 'old:virtual_from_version:38291' => 1082,
+ 'old:virtual_from_version:49725' => 1006,
+ 'old:virtual_from_version:50677' => 1070,
+ 'old:virtual_from_version:46835' => 1077,
+ 'old:virtual_from_version:50594' => 3227,
+ 'old:virtual_from_version:49487' => 1070,
+ 'old:virtual_from_version:44797' => 1109,
+ 'old:virtual_from_version:47698' => 1672,
+ 'old:virtual_from_version:49150' => 1107,
+ 'old:virtual_from_version:47795' => 3078,
+ 'old:virtual_from_version:45163' => 1009,
+ 'old:virtual_from_version:47946' => 1109,
+ 'old:virtual_from_version:39050' => 1007,
+ 'old:virtual_from_version:44967' => 1070,
+ 'old:virtual_from_version:49290' => 3136,
+ 'old:virtual_from_version:42015' => 1107,
+ 'old:virtual_from_version:46576' => 1007,
+ 'old:virtual_from_version:40935' => 1077,
+ 'old:virtual_from_version:46141' => 1012,
+ 'old:virtual_from_version:49248' => 1532,
+ 'old:virtual_from_version:49698' => 1659,
+ 'old:virtual_from_version:45908' => 1009,
+ 'old:virtual_from_version:47454' => 1402,
+ 'old:virtual_from_version:44938' => 1110,
+ 'old:virtual_from_version:40601' => 1070,
+ 'old:virtual_from_version:43009' => 2034,
+ 'old:virtual_from_version:44523' => 1172,
+ 'old:virtual_from_version:45256' => 1037,
+ 'old:virtual_from_version:49212' => 1172,
+ 'old:virtual_from_version:39329' => 1069,
+ 'old:virtual_from_version:49799' => 1125,
+ 'old:virtual_from_version:46545' => 1070,
+ 'old:virtual_from_version:45937' => 1015,
+ 'old:virtual_from_version:47926' => 3008,
+ 'old:virtual_from_version:50461' => 1689,
+ 'old:virtual_from_version:44832' => 1029,
+ 'old:virtual_from_version:46742' => 1070,
+ 'old:virtual_from_version:46949' => 1659,
+ 'old:virtual_from_version:45802' => 1105,
+ 'old:virtual_from_version:39991' => 2006,
+ 'old:virtual_from_version:42350' => 1009,
+ 'old:virtual_from_version:46791' => 1689,
+ 'old:virtual_from_version:46395' => 1423,
+ 'old:virtual_from_version:49338' => 1689,
+ 'old:virtual_from_version:50761' => 3009,
+ 'old:virtual_from_version:44173' => 1077,
+ 'old:virtual_from_version:50595' => 3259,
+ 'old:virtual_from_version:50232' => 1689,
+ 'old:virtual_from_version:44613' => 1009,
+ 'old:virtual_from_version:49526' => 1580,
+ 'old:virtual_from_version:44554' => 1077,
+ 'old:virtual_from_version:47315' => 1517,
+ 'old:virtual_from_version:45352' => 1125,
+ 'old:virtual_from_version:38362' => 1110,
+ 'old:virtual_from_version:45729' => 1112,
+ 'old:virtual_from_version:46759' => 1077,
+ 'old:virtual_from_version:45160' => 1107,
+ 'old:virtual_from_version:45519' => 1025,
+ 'old:virtual_from_version:49346' => 1077,
+ 'old:virtual_from_version:42577' => 1077,
+ 'old:virtual_from_version:42238' => 1009,
+ 'old:virtual_from_version:49078' => 1666,
+ 'old:virtual_from_version:49268' => 1070,
+ 'old:virtual_from_version:40084' => 1107,
+ 'old:virtual_from_version:50545' => 3120,
+ 'old:virtual_from_version:44711' => 1070,
+ 'old:virtual_from_version:44500' => 1107,
+ 'old:virtual_from_version:42207' => 1172,
+ 'old:virtual_from_version:46388' => 1107,
+ 'old:virtual_from_version:42075' => 1070,
+ 'old:virtual_from_version:42527' => 1077,
+ 'old:virtual_from_version:47071' => 1077,
+ 'old:virtual_from_version:39322' => 1025,
+ 'old:virtual_from_version:46962' => 1125,
+ 'old:virtual_from_version:46764' => 1070,
+ 'old:virtual_from_version:47921' => 1404,
+ 'old:virtual_from_version:44742' => 1077,
+ 'old:virtual_from_version:38553' => 1007,
+ 'old:virtual_from_version:50614' => 1070,
+ 'old:virtual_from_version:40824' => 1070,
+ 'old:virtual_from_version:47982' => 1689,
+ 'old:virtual_from_version:42564' => 1110,
+ 'old:virtual_from_version:46792' => 2072,
+ 'old:virtual_from_version:40908' => 1125,
+ 'old:virtual_from_version:44641' => 1136,
+ 'old:virtual_from_version:47476' => 1109,
+ 'old:virtual_from_version:44750' => 1076,
+ 'old:virtual_from_version:49983' => 3131,
+ 'old:virtual_from_version:42956' => 1125,
+ 'old:virtual_from_version:41005' => 2017,
+ 'old:virtual_from_version:42621' => 1037,
+ 'old:virtual_from_version:45867' => 1077,
+ 'old:virtual_from_version:42298' => 1430,
+ 'old:virtual_from_version:50185' => 1062,
+ 'old:virtual_from_version:45930' => 1077,
+ 'old:virtual_from_version:40089' => 1136,
+ 'old:virtual_from_version:42571' => 1000,
+ 'old:virtual_from_version:44786' => 1110,
+ 'old:virtual_from_version:50698' => 1580,
+ 'old:virtual_from_version:42954' => 1067,
+ 'old:virtual_from_version:46566' => 1125,
+ 'old:virtual_from_version:42826' => 1136,
+ 'old:virtual_from_version:44260' => 1107,
+ 'old:virtual_from_version:45561' => 1009,
+ 'old:virtual_from_version:40461' => 1328,
+ 'old:virtual_from_version:46371' => 1077,
+ 'old:virtual_from_version:44985' => 1095,
+ 'old:virtual_from_version:40223' => 1099,
+ 'old:virtual_from_version:40518' => 1077,
+ 'old:virtual_from_version:44612' => 1070,
+ 'old:virtual_from_version:47159' => 1633,
+ 'old:virtual_from_version:49900' => 3194,
+ 'old:virtual_from_version:42267' => 1057,
+ 'old:virtual_from_version:50566' => 1070,
+ 'old:virtual_from_version:49601' => 1070,
+ 'old:virtual_from_version:40884' => 1105,
+ 'old:virtual_from_version:46302' => 1553,
+ 'old:virtual_from_version:46493' => 1413,
+ 'old:virtual_from_version:45895' => 1070,
+ 'old:virtual_from_version:46859' => 1077,
+ 'old:virtual_from_version:47131' => 1070,
+ 'old:virtual_from_version:46297' => 1077,
+ 'old:virtual_from_version:42192' => 1037,
+ 'old:virtual_from_version:50685' => 3002,
+ 'old:virtual_from_version:45862' => 1077,
+ 'old:virtual_from_version:45704' => 1070,
+ 'old:virtual_from_version:45386' => 1051,
+ 'old:virtual_from_version:47103' => 1172,
+ 'old:virtual_from_version:44220' => 1051,
+ 'old:virtual_from_version:42733' => 1070,
+ 'old:virtual_from_version:46255' => 1063,
+ 'old:virtual_from_version:40182' => 1031,
+ 'old:virtual_from_version:47472' => 1689,
+ 'old:virtual_from_version:49612' => 1125,
+ 'old:virtual_from_version:44450' => 1104,
+ 'old:virtual_from_version:49728' => 1404,
+ 'old:virtual_from_version:44820' => 1025,
+ 'old:virtual_from_version:42916' => 1025,
+ 'old:virtual_from_version:40588' => 1070,
+ 'old:virtual_from_version:47301' => 1077,
+ 'old:virtual_from_version:50242' => 3230,
+ 'old:virtual_from_version:40658' => 1136,
+ 'old:virtual_from_version:40816' => 1025,
+ 'old:virtual_from_version:45777' => 1397,
+ 'old:virtual_from_version:49950' => 3194,
+ 'old:virtual_from_version:49325' => 1037,
+ 'old:virtual_from_version:42011' => 1009,
+ 'old:virtual_from_version:46685' => 1070,
+ 'old:virtual_from_version:50041' => 1070,
+ 'old:virtual_from_version:32632' => 1030,
+ 'old:virtual_from_version:50654' => 1489,
+ 'old:virtual_from_version:46151' => 1070,
+ 'old:virtual_from_version:46350' => 1001,
+ 'old:virtual_from_version:45149' => 1125,
+ 'old:virtual_from_version:39502' => 1015,
+ 'old:virtual_from_version:42434' => 1070,
+ 'old:virtual_from_version:50220' => 1037,
+ 'old:virtual_from_version:42126' => 1077,
+ 'old:virtual_from_version:49933' => 1000,
+ 'old:virtual_from_version:50238' => 1070,
+ 'old:virtual_from_version:44512' => 1125,
+ 'old:virtual_from_version:37035' => 1104,
+ 'old:virtual_from_version:44219' => 1067,
+ 'old:virtual_from_version:46987' => 1070,
+ 'old:virtual_from_version:38681' => 1110,
+ 'old:virtual_from_version:49781' => 3131,
+ 'old:virtual_from_version:42622' => 1084,
+ 'old:virtual_from_version:44853' => 1107,
+ 'old:virtual_from_version:44372' => 1016,
+ 'old:virtual_from_version:45445' => 1070,
+ 'old:virtual_from_version:47808' => 1404,
+ 'old:virtual_from_version:40835' => 1062,
+ 'old:virtual_from_version:47098' => 1172,
+ 'old:virtual_from_version:44089' => 1077,
+ 'old:virtual_from_version:47948' => 1689,
+ 'old:virtual_from_version:47819' => 3078,
+ 'old:virtual_from_version:46360' => 1555,
+ 'old:virtual_from_version:49261' => 1070,
+ 'old:virtual_from_version:44109' => 1025,
+ 'old:virtual_from_version:42523' => 1107,
+ 'old:virtual_from_version:40559' => 1077,
+ 'old:virtual_from_version:46377' => 1076,
+ 'old:virtual_from_version:38952' => 1077,
+ 'old:virtual_from_version:46586' => 1025,
+ 'old:virtual_from_version:44708' => 1537,
+ 'old:virtual_from_version:40615' => 1095,
+ 'old:virtual_from_version:46972' => 1077,
+ 'old:virtual_from_version:47940' => 1109,
+ 'old:virtual_from_version:49597' => 1107,
+ 'old:virtual_from_version:46767' => 1077,
+ 'old:virtual_from_version:44983' => 1109,
+ 'old:virtual_from_version:44841' => 1110,
+ 'old:virtual_from_version:47963' => 1077,
+ 'old:virtual_from_version:48037' => 2079,
+ 'old:virtual_from_version:46291' => 1172,
+ 'old:virtual_from_version:46675' => 1125,
+ 'old:virtual_from_version:45708' => 1532,
+ 'old:virtual_from_version:40647' => 1362,
+ 'old:virtual_from_version:45726' => 1402,
+ 'old:virtual_from_version:40888' => 1125,
+ 'old:virtual_from_version:47346' => 1070,
+ 'old:virtual_from_version:50087' => 1025,
+ 'old:virtual_from_version:40449' => 1404,
+ 'old:virtual_from_version:40796' => 1081,
+ 'old:virtual_from_version:42216' => 1037,
+ 'old:virtual_from_version:45466' => 1136,
+ 'old:virtual_from_version:47638' => 1032,
+ 'old:virtual_from_version:46261' => 1077,
+ 'old:virtual_from_version:49616' => 3183,
+ 'old:virtual_from_version:46520' => 1077,
+ 'old:virtual_from_version:46918' => 1095,
+ 'old:virtual_from_version:50125' => 1125,
+ 'old:virtual_from_version:42885' => 1070,
+ 'old:virtual_from_version:40579' => 1404,
+ 'old:virtual_from_version:50683' => 1666,
+ 'old:virtual_from_version:42665' => 1037,
+ 'old:virtual_from_version:50402' => 1314,
+ 'old:virtual_from_version:47324' => 1012,
+ 'old:virtual_from_version:47138' => 1070,
+ 'old:virtual_from_version:44517' => 1077,
+ 'old:virtual_from_version:49169' => 1077,
+ 'old:virtual_from_version:44351' => 1077,
+ 'old:virtual_from_version:40724' => 1404,
+ 'old:virtual_from_version:42301' => 1070,
+ 'old:virtual_from_version:47208' => 1077,
+ 'old:virtual_from_version:44739' => 1077,
+ 'old:virtual_from_version:50005' => 1689,
+ 'old:virtual_from_version:40782' => 1077,
+ 'old:virtual_from_version:40891' => 1037,
+ 'old:virtual_from_version:47495' => 1109,
+ 'old:virtual_from_version:42203' => 1037,
+ 'old:virtual_from_version:44945' => 1077,
+ 'old:virtual_from_version:45241' => 1000,
+ 'old:virtual_from_version:45555' => 1136,
+ 'old:virtual_from_version:42275' => 1107,
+ 'old:virtual_from_version:50712' => 3259,
+ 'old:virtual_from_version:45248' => 1043,
+ 'old:virtual_from_version:49253' => 1404,
+ 'old:virtual_from_version:45670' => 1621,
+ 'old:virtual_from_version:50102' => 1015,
+ 'old:virtual_from_version:43041' => 2053,
+ 'old:virtual_from_version:42550' => 1037,
+ 'old:virtual_from_version:46849' => 1077,
+ 'old:virtual_from_version:49959' => 1070,
+ 'old:virtual_from_version:42515' => 1150,
+ 'old:virtual_from_version:50115' => 3131,
+ 'old:virtual_from_version:42899' => 1037,
+ 'old:virtual_from_version:44875' => 1077,
+ 'old:virtual_from_version:40979' => 1070,
+ 'old:virtual_from_version:49994' => 1100,
+ 'old:virtual_from_version:46497' => 1537,
+ 'old:virtual_from_version:42758' => 1461,
+ 'old:virtual_from_version:39994' => 2009,
+ 'old:virtual_from_version:49182' => 3153,
+ 'old:virtual_from_version:44923' => 1125,
+ 'old:virtual_from_version:38384' => 1067,
+ 'old:virtual_from_version:50504' => 3261,
+ 'old:virtual_from_version:47550' => 1070,
+ 'old:virtual_from_version:44491' => 1110,
+ 'old:virtual_from_version:42719' => 1037,
+ 'old:virtual_from_version:38366' => 1065,
+ 'old:virtual_from_version:50418' => 1070,
+ 'old:virtual_from_version:40885' => 1057,
+ 'old:virtual_from_version:47028' => 3008,
+ 'old:virtual_from_version:49829' => 1037,
+ 'old:virtual_from_version:49195' => 1070,
+ 'old:virtual_from_version:46121' => 1461,
+ 'old:virtual_from_version:47165' => 1125,
+ 'old:virtual_from_version:47805' => 1172,
+ 'old:virtual_from_version:50205' => 3137,
+ 'old:virtual_from_version:50366' => 1007,
+ 'old:virtual_from_version:50027' => 3131,
+ 'old:virtual_from_version:49637' => 1158,
+ 'old:virtual_from_version:46357' => 1070,
+ 'old:virtual_from_version:47883' => 1109,
+ 'old:virtual_from_version:42755' => 1037,
+ 'old:virtual_from_version:42573' => 1077,
+ 'old:virtual_from_version:42380' => 1172,
+ 'old:virtual_from_version:38672' => 1104,
+ 'old:virtual_from_version:49595' => 1070,
+ 'old:virtual_from_version:47735' => 1109,
+ 'old:virtual_from_version:42850' => 1077,
+ 'old:virtual_from_version:50436' => 3242,
+ 'old:virtual_from_version:47941' => 1025,
+ 'old:virtual_from_version:46455' => 1537,
+ 'old:virtual_from_version:47079' => 1583,
+ 'old:virtual_from_version:50273' => 3131,
+ 'old:virtual_from_version:46609' => 1125,
+ 'old:virtual_from_version:47820' => 3094,
+ 'old:virtual_from_version:47140' => 1077,
+ 'old:virtual_from_version:44884' => 1136,
+ 'old:virtual_from_version:42821' => 1070,
+ 'old:virtual_from_version:49719' => 1489,
+ 'old:virtual_from_version:50709' => 3273,
+ 'old:virtual_from_version:44221' => 1070,
+ 'old:virtual_from_version:40926' => 1107,
+ 'old:virtual_from_version:46386' => 1552,
+ 'old:virtual_from_version:40641' => 1025,
+ 'old:virtual_from_version:50606' => 3131,
+ 'old:virtual_from_version:42171' => 1070,
+ 'old:virtual_from_version:46451' => 1172,
+ 'old:virtual_from_version:50688' => 1005,
+ 'old:virtual_from_version:42925' => 1506,
+ 'old:virtual_from_version:44950' => 1067,
+ 'old:virtual_from_version:45112' => 1009,
+ 'old:virtual_from_version:44075' => 1009,
+ 'old:virtual_from_version:42535' => 1067,
+ 'old:virtual_from_version:42931' => 1051,
+ 'old:virtual_from_version:49947' => 1580,
+ 'old:virtual_from_version:42132' => 1009,
+ 'old:virtual_from_version:44732' => 1070,
+ 'old:virtual_from_version:50101' => 1070,
+ 'old:virtual_from_version:47827' => 1070,
+ 'old:virtual_from_version:45764' => 1404,
+ 'old:virtual_from_version:44984' => 1022,
+ 'old:virtual_from_version:44367' => 1008,
+ 'old:virtual_from_version:49304' => 1583,
+ 'old:virtual_from_version:50017' => 1314,
+ 'old:virtual_from_version:46731' => 1125,
+ 'old:virtual_from_version:45744' => 1009,
+ 'old:virtual_from_version:39708' => 1109,
+ 'old:virtual_from_version:39232' => 1062,
+ 'old:virtual_from_version:44994' => 1112,
+ 'old:virtual_from_version:46290' => 1067,
+ 'old:virtual_from_version:47667' => 1070,
+ 'old:virtual_from_version:47234' => 1640,
+ 'old:virtual_from_version:47164' => 1070,
+ 'old:virtual_from_version:50044' => 1689,
+ 'old:virtual_from_version:50678' => 1150,
+ 'old:virtual_from_version:40585' => 1025,
+ 'old:virtual_from_version:42783' => 1077,
+ 'old:virtual_from_version:47619' => 1311,
+ 'old:virtual_from_version:44019' => 1009,
+ 'old:virtual_from_version:44110' => 1077,
+ 'old:virtual_from_version:47740' => 1109,
+ 'old:virtual_from_version:46058' => 1077,
+ 'old:virtual_from_version:38932' => 1007,
+ 'old:virtual_from_version:50695' => 1006,
+ 'old:virtual_from_version:46110' => 1404,
+ 'old:virtual_from_version:47922' => 1413,
+ 'old:virtual_from_version:42638' => 1172,
+ 'old:virtual_from_version:45104' => 1070,
+ 'old:virtual_from_version:44609' => 1051,
+ 'old:virtual_from_version:43068' => 2069,
+ 'old:virtual_from_version:44306' => 1172,
+ 'old:virtual_from_version:45233' => 1083,
+ 'old:virtual_from_version:47326' => 1070,
+ 'old:virtual_from_version:37416' => 1001,
+ 'old:virtual_from_version:42243' => 1070,
+ 'old:virtual_from_version:46939' => 3009,
+ 'old:virtual_from_version:46541' => 1125,
+ 'old:virtual_from_version:42284' => 1426,
+ 'old:virtual_from_version:44287' => 1025,
+ 'old:virtual_from_version:44919' => 1077,
+ 'old:virtual_from_version:38762' => 1108,
+ 'old:virtual_from_version:46047' => 1488,
+ 'old:virtual_from_version:46700' => 1417,
+ 'old:virtual_from_version:45076' => 1070,
+ 'old:virtual_from_version:48003' => 2104,
+ 'old:virtual_from_version:50173' => 1125,
+ 'old:virtual_from_version:44617' => 1037,
+ 'old:virtual_from_version:50463' => 3159,
+ 'old:virtual_from_version:34128' => 1091,
+ 'old:virtual_from_version:44842' => 1081,
+ 'old:virtual_from_version:50462' => 3131,
+ 'old:virtual_from_version:47182' => 1051,
+ 'old:virtual_from_version:43094' => 2086,
+ 'old:virtual_from_version:40699' => 1016,
+ 'old:virtual_from_version:46836' => 1351,
+ 'old:virtual_from_version:49956' => 1070,
+ 'old:virtual_from_version:42627' => 1311,
+ 'old:virtual_from_version:45526' => 1404,
+ 'old:virtual_from_version:49869' => 1584,
+ 'old:virtual_from_version:50648' => 1038,
+ 'old:virtual_from_version:49998' => 3215,
+ 'old:virtual_from_version:50564' => 1150,
+ 'old:virtual_from_version:45056' => 1112,
+ 'old:virtual_from_version:45490' => 1105,
+ 'old:virtual_from_version:42969' => 1110,
+ 'old:virtual_from_version:46558' => 1077,
+ 'old:virtual_from_version:42857' => 1077,
+ 'old:virtual_from_version:47866' => 1689,
+ 'old:virtual_from_version:45755' => 1012,
+ 'old:virtual_from_version:46821' => 1509,
+ 'old:virtual_from_version:47211' => 1070,
+ 'old:virtual_from_version:50514' => 1585,
+ 'old:virtual_from_version:45500' => 1112,
+ 'old:virtual_from_version:45829' => 1107,
+ 'old:virtual_from_version:47861' => 1077,
+ 'old:virtual_from_version:47980' => 1077,
+ 'old:virtual_from_version:50113' => 1580,
+ 'old:virtual_from_version:46318' => 1070,
+ 'old:virtual_from_version:50427' => 1064,
+ 'old:virtual_from_version:40851' => 1009,
+ 'old:virtual_from_version:47546' => 1125,
+ 'old:virtual_from_version:49071' => 1689,
+ 'old:virtual_from_version:42347' => 1107,
+ 'old:virtual_from_version:49397' => 3008,
+ 'old:virtual_from_version:49337' => 1666,
+ 'old:virtual_from_version:49923' => 3206,
+ 'old:virtual_from_version:47774' => 1666,
+ 'old:virtual_from_version:44048' => 1077,
+ 'old:virtual_from_version:39815' => 1149,
+ 'old:virtual_from_version:50081' => 1051,
+ 'old:virtual_from_version:46661' => 1077,
+ 'old:virtual_from_version:46370' => 1005,
+ 'old:virtual_from_version:47939' => 1070,
+ 'old:virtual_from_version:47977' => 1070,
+ 'old:virtual_from_version:44210' => 1183,
+ 'old:virtual_from_version:47992' => 1109,
+ 'old:virtual_from_version:48028' => 2079,
+ 'old:virtual_from_version:49145' => 1077,
+ 'old:virtual_from_version:47385' => 3008,
+ 'old:virtual_from_version:46775' => 1070,
+ 'old:virtual_from_version:45378' => 1125,
+ 'old:virtual_from_version:40637' => 1057,
+ 'old:virtual_from_version:46964' => 1070,
+ 'old:virtual_from_version:44185' => 1125,
+ 'old:virtual_from_version:42673' => 1070,
+ 'old:virtual_from_version:49137' => 1649,
+ 'old:virtual_from_version:46989' => 1125,
+ 'old:virtual_from_version:40672' => 1077,
+ 'old:virtual_from_version:42716' => 1023,
+ 'old:virtual_from_version:42453' => 1440,
+ 'old:virtual_from_version:45586' => 1070,
+ 'old:virtual_from_version:46805' => 1048,
+ 'old:virtual_from_version:44003' => 1077,
+ 'old:virtual_from_version:46565' => 1070,
+ 'old:virtual_from_version:46217' => 1404,
+ 'old:virtual_from_version:49083' => 3136,
+ 'old:virtual_from_version:47392' => 3008,
+ 'old:virtual_from_version:44924' => 1070,
+ 'old:virtual_from_version:49790' => 1037,
+ 'old:virtual_from_version:49695' => 3008,
+ 'old:virtual_from_version:49154' => 1070,
+ 'old:virtual_from_version:49623' => 3185,
+ 'old:virtual_from_version:46885' => 1172,
+ 'old:virtual_from_version:42237' => 1070,
+ 'old:virtual_from_version:42242' => 1172,
+ 'old:virtual_from_version:44944' => 1026,
+ 'old:virtual_from_version:42655' => 1037,
+ 'old:virtual_from_version:44988' => 1010,
+ 'old:virtual_from_version:47480' => 1444,
+ 'old:virtual_from_version:42856' => 1009,
+ 'old:virtual_from_version:44753' => 1009,
+ 'old:virtual_from_version:47197' => 1070,
+ 'old:virtual_from_version:45875' => 1532,
+ 'old:virtual_from_version:40635' => 1077,
+ 'old:virtual_from_version:39752' => 1404,
+ 'old:virtual_from_version:47830' => 1107,
+ 'old:virtual_from_version:45507' => 1585,
+ 'old:virtual_from_version:38667' => 1069,
+ 'old:virtual_from_version:49734' => 1067,
+ 'old:virtual_from_version:46149' => 1037,
+ 'old:virtual_from_version:44346' => 1025,
+ 'old:virtual_from_version:45676' => 1048,
+ 'old:virtual_from_version:49724' => 1070,
+ 'old:virtual_from_version:42747' => 1037,
+ 'old:virtual_from_version:49330' => 1659,
+ 'old:virtual_from_version:45105' => 1077,
+ 'old:virtual_from_version:44374' => 1017,
+ 'old:virtual_from_version:50011' => 1565,
+ 'old:virtual_from_version:49152' => 1105,
+ 'old:virtual_from_version:49864' => 1404,
+ 'old:virtual_from_version:44356' => 1081,
+ 'old:virtual_from_version:46194' => 1649,
+ 'old:virtual_from_version:49358' => 1070,
+ 'old:virtual_from_version:50579' => 1125,
+ 'old:virtual_from_version:47122' => 1067,
+ 'old:virtual_from_version:45232' => 1083,
+ 'old:virtual_from_version:42562' => 1037,
+ 'old:virtual_from_version:49605' => 1070,
+ 'old:virtual_from_version:50333' => 1070,
+ 'old:virtual_from_version:42789' => 1353,
+ 'old:virtual_from_version:50233' => 3131,
+ 'old:virtual_from_version:49007' => 1585,
+ 'old:virtual_from_version:44423' => 1042,
+ 'old:virtual_from_version:44657' => 1077,
+ 'old:virtual_from_version:45626' => 1070,
+ 'old:virtual_from_version:44056' => 1037,
+ 'old:virtual_from_version:47532' => 1070,
+ 'old:virtual_from_version:46747' => 1632,
+ 'old:virtual_from_version:50079' => 3223,
+ 'old:virtual_from_version:40499' => 1077,
+ 'old:virtual_from_version:47772' => 1077,
+ 'old:virtual_from_version:44673' => 1009,
+ 'old:virtual_from_version:40237' => 1070,
+ 'old:virtual_from_version:49184' => 1105,
+ 'old:virtual_from_version:49393' => 1381,
+ 'old:virtual_from_version:43077' => 2074,
+ 'old:virtual_from_version:38981' => 1009,
+ 'old:virtual_from_version:42713' => 1311,
+ 'old:virtual_from_version:40690' => 1070,
+ 'old:virtual_from_version:40480' => 1077,
+ 'old:virtual_from_version:46711' => 1077,
+ 'old:virtual_from_version:45938' => 1077,
+ 'old:virtual_from_version:47115' => 3021,
+ 'old:virtual_from_version:44846' => 1077,
+ 'old:virtual_from_version:44533' => 1009,
+ 'old:virtual_from_version:49772' => 1651,
+ 'old:virtual_from_version:49587' => 1172,
+ 'old:virtual_from_version:41003' => 2015,
+ 'old:virtual_from_version:45294' => 1581,
+ 'old:virtual_from_version:47676' => 1404,
+ 'old:virtual_from_version:40152' => 1105,
+ 'old:virtual_from_version:47460' => 1077,
+ 'old:virtual_from_version:40795' => 1077,
+ 'old:virtual_from_version:49907' => 1007,
+ 'old:virtual_from_version:44214' => 1037,
+ 'old:virtual_from_version:43032' => 2031,
+ 'old:virtual_from_version:49985' => 1100,
+ 'old:virtual_from_version:45128' => 1125,
+ 'old:virtual_from_version:49809' => 1100,
+ 'old:virtual_from_version:42910' => 1077,
+ 'old:virtual_from_version:40549' => 1107,
+ 'old:virtual_from_version:42130' => 1136,
+ 'old:virtual_from_version:50370' => 3131,
+ 'old:virtual_from_version:44940' => 1070,
+ 'old:virtual_from_version:49746' => 3194,
+ 'old:virtual_from_version:42376' => 1077,
+ 'old:virtual_from_version:45067' => 1077,
+ 'old:virtual_from_version:46552' => 1077,
+ 'old:virtual_from_version:50582' => 1689,
+ 'old:virtual_from_version:39970' => 1048,
+ 'old:virtual_from_version:42613' => 1009,
+ 'old:virtual_from_version:44476' => 1067,
+ 'old:virtual_from_version:44666' => 1497,
+ 'old:virtual_from_version:49583' => 1070,
+ 'old:virtual_from_version:50389' => 1314,
+ 'old:virtual_from_version:44885' => 1125,
+ 'old:virtual_from_version:41014' => 2007,
+ 'old:virtual_from_version:47728' => 1109,
+ 'old:virtual_from_version:45221' => 1101,
+ 'old:virtual_from_version:42552' => 1172,
+ 'old:virtual_from_version:42738' => 1070,
+ 'old:virtual_from_version:42847' => 1067,
+ 'old:virtual_from_version:42750' => 1070,
+ 'old:virtual_from_version:46220' => 1633,
+ 'old:virtual_from_version:47107' => 1585,
+ 'old:virtual_from_version:49125' => 1404,
+ 'old:virtual_from_version:42680' => 1009,
+ 'old:virtual_from_version:40494' => 1070,
+ 'old:virtual_from_version:47620' => 3077,
+ 'old:virtual_from_version:46653' => 1077,
+ 'old:virtual_from_version:46235' => 1077,
+ 'old:virtual_from_version:50262' => 1032,
+ 'old:virtual_from_version:47736' => 1084,
+ 'old:virtual_from_version:47134' => 1077,
+ 'old:virtual_from_version:46244' => 1077,
+ 'old:virtual_from_version:43033' => 2032,
+ 'old:virtual_from_version:40664' => 1007,
+ 'old:virtual_from_version:42261' => 1070,
+ 'old:virtual_from_version:38333' => 1007,
+ 'old:virtual_from_version:47435' => 1109,
+ 'old:virtual_from_version:49908' => 1444,
+ 'old:virtual_from_version:45596' => 1172,
+ 'old:virtual_from_version:46692' => 1009,
+ 'old:virtual_from_version:44658' => 1037,
+ 'old:virtual_from_version:46523' => 1125,
+ 'old:virtual_from_version:50038' => 1012,
+ 'old:virtual_from_version:46695' => 1070,
+ 'old:virtual_from_version:47018' => 1172,
+ 'old:virtual_from_version:50457' => 1444,
+ 'old:virtual_from_version:46553' => 1404,
+ 'old:virtual_from_version:42578' => 1037,
+ 'old:virtual_from_version:42681' => 1077,
+ 'old:virtual_from_version:49451' => 1070,
+ 'old:virtual_from_version:42426' => 1037,
+ 'old:virtual_from_version:42064' => 1037,
+ 'old:virtual_from_version:48024' => 2125,
+ 'old:virtual_from_version:47125' => 1077,
+ 'old:virtual_from_version:45028' => 1009,
+ 'old:virtual_from_version:40389' => 1067,
+ 'old:virtual_from_version:50757' => 1048,
+ 'old:virtual_from_version:44443' => 1037,
+ 'old:virtual_from_version:40767' => 1070,
+ 'old:virtual_from_version:50479' => 3253,
+ 'old:virtual_from_version:44582' => 1077,
+ 'old:virtual_from_version:42652' => 1070,
+ 'old:virtual_from_version:45912' => 1172,
+ 'old:virtual_from_version:44912' => 1070,
+ 'old:virtual_from_version:46846' => 1070,
+ 'old:virtual_from_version:44634' => 1077,
+ 'old:virtual_from_version:49144' => 1070,
+ 'old:virtual_from_version:42975' => 1077,
+ 'old:virtual_from_version:40194' => 1222,
+ 'old:virtual_from_version:40501' => 1105,
+ 'old:virtual_from_version:49326' => 1077,
+ 'old:virtual_from_version:45409' => 1582,
+ 'old:virtual_from_version:46299' => 1362,
+ 'old:virtual_from_version:42714' => 1070,
+ 'old:virtual_from_version:50658' => 1321,
+ 'old:virtual_from_version:44256' => 1350,
+ 'old:virtual_from_version:47229' => 1077,
+ 'old:virtual_from_version:45538' => 1009,
+ 'old:virtual_from_version:50293' => 1035,
+ 'old:virtual_from_version:45214' => 1125,
+ 'old:virtual_from_version:47918' => 1067,
+ 'old:virtual_from_version:45957' => 1092,
+ 'old:virtual_from_version:49692' => 1224,
+ 'old:virtual_from_version:50741' => 3186,
+ 'old:virtual_from_version:49666' => 1062,
+ 'old:virtual_from_version:47353' => 1109,
+ 'old:virtual_from_version:47494' => 1070,
+ 'old:virtual_from_version:50452' => 1105,
+ 'old:virtual_from_version:44329' => 1037,
+ 'old:virtual_from_version:44360' => 1090,
+ 'old:virtual_from_version:46781' => 1517,
+ 'old:virtual_from_version:50240' => 1689,
+ 'old:virtual_from_version:45470' => 1077,
+ 'old:virtual_from_version:44696' => 1009,
+ 'old:virtual_from_version:45025' => 1144,
+ 'old:virtual_from_version:45027' => 1008,
+ 'old:virtual_from_version:43069' => 2059,
+ 'old:virtual_from_version:45254' => 1021,
+ 'old:virtual_from_version:43024' => 2049,
+ 'old:virtual_from_version:39351' => 1109,
+ 'old:virtual_from_version:45863' => 1335,
+ 'old:virtual_from_version:44632' => 1070,
+ 'old:virtual_from_version:47498' => 1125,
+ 'old:virtual_from_version:47637' => 1350,
+ 'old:virtual_from_version:46785' => 1125,
+ 'old:virtual_from_version:45101' => 1077,
+ 'old:virtual_from_version:49593' => 1689,
+ 'old:virtual_from_version:44394' => 1090,
+ 'old:virtual_from_version:42915' => 1015,
+ 'old:virtual_from_version:44464' => 1067,
+ 'old:virtual_from_version:49716' => 3192,
+ 'old:virtual_from_version:47486' => 1037,
+ 'old:virtual_from_version:38346' => 1011,
+ 'old:virtual_from_version:40490' => 1077,
+ 'old:virtual_from_version:45942' => 1007,
+ 'old:virtual_from_version:50634' => 3268,
+ 'old:virtual_from_version:40570' => 1146,
+ 'old:virtual_from_version:40954' => 1037,
+ 'old:virtual_from_version:47027' => 3008,
+ 'old:virtual_from_version:47318' => 3042,
+ 'old:virtual_from_version:45719' => 1009,
+ 'old:virtual_from_version:42633' => 1077,
+ 'old:virtual_from_version:42537' => 1070,
+ 'old:virtual_from_version:45701' => 1027,
+ 'old:virtual_from_version:44080' => 1125,
+ 'old:virtual_from_version:47219' => 1533,
+ 'old:virtual_from_version:45267' => 1010,
+ 'old:virtual_from_version:40803' => 1070,
+ 'old:virtual_from_version:44095' => 1025,
+ 'old:virtual_from_version:49054' => 1659,
+ 'old:virtual_from_version:44678' => 1076,
+ 'old:virtual_from_version:47884' => 1025,
+ 'old:virtual_from_version:47313' => 1172,
+ 'old:virtual_from_version:44937' => 1077,
+ 'old:virtual_from_version:44620' => 1067,
+ 'old:virtual_from_version:49037' => 1007,
+ 'old:virtual_from_version:49545' => 1413,
+ 'old:virtual_from_version:42998' => 1505,
+ 'old:virtual_from_version:39310' => 1000,
+ 'old:virtual_from_version:50003' => 3215,
+ 'old:virtual_from_version:47686' => 1112,
+ 'old:virtual_from_version:47383' => 1109,
+ 'old:virtual_from_version:42170' => 1172,
+ 'old:virtual_from_version:40510' => 1084,
+ 'old:virtual_from_version:44319' => 1104,
+ 'old:virtual_from_version:45406' => 1009,
+ 'old:virtual_from_version:47670' => 1009,
+ 'old:virtual_from_version:50671' => 3208,
+ 'old:virtual_from_version:42287' => 1007,
+ 'old:virtual_from_version:42938' => 1070,
+ 'old:virtual_from_version:42880' => 1015,
+ 'old:virtual_from_version:49141' => 1070,
+ 'old:virtual_from_version:46435' => 1070,
+ 'old:virtual_from_version:46032' => 1077,
+ 'old:virtual_from_version:40415' => 1077,
+ 'old:virtual_from_version:46934' => 1584,
+ 'old:virtual_from_version:47283' => 1461,
+ 'old:virtual_from_version:45791' => 1125,
+ 'old:virtual_from_version:39992' => 2007,
+ 'old:virtual_from_version:47462' => 1689,
+ 'old:virtual_from_version:46579' => 1689,
+ 'old:virtual_from_version:47453' => 1381,
+ 'old:virtual_from_version:44717' => 1070,
+ 'old:virtual_from_version:49793' => 1100,
+ 'old:virtual_from_version:44267' => 1067,
+ 'old:virtual_from_version:50392' => 1689,
+ 'old:virtual_from_version:40756' => 1070,
+ 'old:virtual_from_version:40890' => 1077,
+ 'old:virtual_from_version:42468' => 1037,
+ 'old:virtual_from_version:42503' => 1009,
+ 'old:virtual_from_version:46642' => 1537,
+ 'old:virtual_from_version:44398' => 1078,
+ 'old:virtual_from_version:44653' => 1037,
+ 'old:virtual_from_version:44107' => 1009,
+ 'old:virtual_from_version:46271' => 1070,
+ 'old:virtual_from_version:45014' => 1413,
+ 'old:virtual_from_version:38341' => 1005,
+ 'old:virtual_from_version:50334' => 1125,
+ 'old:virtual_from_version:49969' => 3131,
+ 'old:virtual_from_version:45044' => 1030,
+ 'old:virtual_from_version:42955' => 1150,
+ 'old:virtual_from_version:50543' => 1689,
+ 'old:virtual_from_version:46372' => 1402,
+ 'old:virtual_from_version:42623' => 1070,
+ 'old:virtual_from_version:42270' => 1015,
+ 'old:virtual_from_version:44854' => 1070,
+ 'old:virtual_from_version:47764' => 3094,
+ 'old:virtual_from_version:39156' => 1136,
+ 'old:virtual_from_version:47063' => 1689,
+ 'old:virtual_from_version:46169' => 1067,
+ 'old:virtual_from_version:49553' => 1070,
+ 'old:virtual_from_version:47771' => 1109,
+ 'old:virtual_from_version:46091' => 1656,
+ 'old:virtual_from_version:42150' => 1070,
+ 'old:virtual_from_version:44872' => 1141,
+ 'old:virtual_from_version:46312' => 1404,
+ 'old:virtual_from_version:47738' => 1404,
+ 'old:virtual_from_version:46779' => 1172,
+ 'old:virtual_from_version:45750' => 1407,
+ 'old:virtual_from_version:42122' => 1353,
+ 'old:virtual_from_version:47588' => 1077,
+ 'old:virtual_from_version:42805' => 1007,
+ 'old:virtual_from_version:47632' => 1583,
+ 'old:virtual_from_version:42539' => 1077,
+ 'old:virtual_from_version:42939' => 1009,
+ 'old:virtual_from_version:42824' => 1037,
+ 'old:virtual_from_version:49483' => 3152,
+ 'old:virtual_from_version:45788' => 1007,
+ 'old:virtual_from_version:42269' => 1009,
+ 'old:virtual_from_version:46555' => 1070,
+ 'old:virtual_from_version:47068' => 1136,
+ 'old:virtual_from_version:46484' => 1172,
+ 'old:virtual_from_version:45593' => 1110,
+ 'old:virtual_from_version:49365' => 1584,
+ 'old:virtual_from_version:50160' => 3214,
+ 'old:virtual_from_version:49525' => 1404,
+ 'old:virtual_from_version:47088' => 1048,
+ 'old:virtual_from_version:46755' => 1077,
+ 'old:virtual_from_version:39326' => 1067,
+ 'old:virtual_from_version:45857' => 1109,
+ 'old:virtual_from_version:49311' => 3162,
+ 'old:virtual_from_version:50618' => 3259,
+ 'old:virtual_from_version:46017' => 1006,
+ 'old:virtual_from_version:40784' => 1067,
+ 'old:virtual_from_version:44858' => 1070,
+ 'old:virtual_from_version:45886' => 1125,
+ 'old:virtual_from_version:40776' => 1077,
+ 'old:virtual_from_version:46402' => 1672,
+ 'old:virtual_from_version:45929' => 1009,
+ 'old:virtual_from_version:42763' => 1110,
+ 'old:virtual_from_version:42626' => 1051,
+ 'old:virtual_from_version:45850' => 1125,
+ 'old:virtual_from_version:50407' => 1583,
+ 'old:virtual_from_version:50492' => 3258,
+ 'old:virtual_from_version:39402' => 1168,
+ 'old:virtual_from_version:50454' => 1314,
+ 'old:virtual_from_version:40975' => 1009,
+ 'old:virtual_from_version:45543' => 1613,
+ 'old:virtual_from_version:43006' => 2031,
+ 'old:virtual_from_version:47432' => 1580,
+ 'old:virtual_from_version:42528' => 1037,
+ 'old:virtual_from_version:44057' => 1081,
+ 'old:virtual_from_version:49564' => 1070,
+ 'old:virtual_from_version:46581' => 1070,
+ 'old:virtual_from_version:49297' => 3152,
+ 'old:virtual_from_version:47520' => 1009,
+ 'old:virtual_from_version:44867' => 1107,
+ 'old:virtual_from_version:42364' => 1077,
+ 'old:virtual_from_version:44144' => 1070,
+ 'old:virtual_from_version:44705' => 1070,
+ 'old:virtual_from_version:49316' => 1077,
+ 'old:virtual_from_version:47837' => 1583,
+ 'old:virtual_from_version:44200' => 1037,
+ 'old:virtual_from_version:46680' => 1125,
+ 'old:virtual_from_version:50692' => 3259,
+ 'old:virtual_from_version:49948' => 1689,
+ 'old:virtual_from_version:45658' => 1172,
+ 'old:virtual_from_version:38606' => 1108,
+ 'old:virtual_from_version:45779' => 1574,
+ 'old:virtual_from_version:40012' => 1069,
+ 'old:virtual_from_version:50179' => 1025,
+ 'old:virtual_from_version:44160' => 1009,
+ 'old:virtual_from_version:44312' => 1077,
+ 'old:virtual_from_version:47254' => 1172,
+ 'old:virtual_from_version:47901' => 1689,
+ 'old:virtual_from_version:49619' => 1696,
+ 'old:virtual_from_version:38610' => 1104,
+ 'old:virtual_from_version:42943' => 1070,
+ 'old:virtual_from_version:50707' => 3259,
+ 'old:virtual_from_version:44274' => 1037,
+ 'old:virtual_from_version:46060' => 1077,
+ 'old:virtual_from_version:42474' => 1172,
+ 'old:virtual_from_version:47758' => 1125,
+ 'old:virtual_from_version:44936' => 1009,
+ 'old:virtual_from_version:40938' => 1070,
+ 'old:virtual_from_version:44023' => 1070,
+ 'old:virtual_from_version:47222' => 1107,
+ 'old:virtual_from_version:47547' => 1109,
+ 'old:virtual_from_version:50495' => 3259,
+ 'old:virtual_from_version:50318' => 1070,
+ 'old:virtual_from_version:47390' => 3008,
+ 'old:virtual_from_version:49875' => 1107,
+ 'old:virtual_from_version:45607' => 1025,
+ 'old:virtual_from_version:44825' => 1009,
+ 'old:virtual_from_version:45562' => 1025,
+ 'old:virtual_from_version:39725' => 1062,
+ 'old:virtual_from_version:42098' => 1070,
+ 'old:virtual_from_version:39718' => 1222,
+ 'old:virtual_from_version:49916' => 1444,
+ 'old:virtual_from_version:42816' => 1077,
+ 'old:virtual_from_version:47493' => 1077,
+ 'old:virtual_from_version:46355' => 1057,
+ 'old:virtual_from_version:44549' => 1070,
+ 'old:virtual_from_version:45870' => 1070,
+ 'old:virtual_from_version:46351' => 1077,
+ 'old:virtual_from_version:45844' => 1077,
+ 'old:virtual_from_version:47499' => 1109,
+ 'old:virtual_from_version:50145' => 3210,
+ 'old:virtual_from_version:40078' => 1110,
+ 'old:virtual_from_version:47304' => 3042,
+ 'old:virtual_from_version:45444' => 1136,
+ 'old:virtual_from_version:45016' => 1000,
+ 'old:virtual_from_version:42378' => 1404,
+ 'old:virtual_from_version:40685' => 1067,
+ 'old:virtual_from_version:46544' => 1689,
+ 'old:virtual_from_version:44058' => 1125,
+ 'old:virtual_from_version:45431' => 1025,
+ 'old:virtual_from_version:50744' => 1417,
+ 'old:virtual_from_version:49913' => 1070,
+ 'old:virtual_from_version:45407' => 1404,
+ 'old:virtual_from_version:42141' => 1110,
+ 'old:virtual_from_version:50057' => 1125,
+ 'old:virtual_from_version:50144' => 3058,
+ 'old:virtual_from_version:46159' => 1404,
+ 'old:virtual_from_version:40736' => 1077,
+ 'old:virtual_from_version:47216' => 1077,
+ 'old:virtual_from_version:50229' => 1007,
+ 'old:virtual_from_version:42247' => 1404,
+ 'old:virtual_from_version:49151' => 1172,
+ 'old:virtual_from_version:43013' => 2038,
+ 'old:virtual_from_version:40831' => 1407,
+ 'old:virtual_from_version:39477' => 1404,
+ 'old:virtual_from_version:45781' => 1136,
+ 'old:virtual_from_version:42561' => 1077,
+ 'old:virtual_from_version:40715' => 1070,
+ 'old:virtual_from_version:47535' => 1070,
+ 'old:virtual_from_version:49664' => 1583,
+ 'old:virtual_from_version:46648' => 1125,
+ 'old:virtual_from_version:50221' => 1314,
+ 'old:virtual_from_version:42491' => 1009,
+ 'old:virtual_from_version:46130' => 1077,
+ 'old:virtual_from_version:45346' => 1413,
+ 'old:virtual_from_version:49285' => 1009,
+ 'old:virtual_from_version:45659' => 1136,
+ 'old:virtual_from_version:45618' => 1136,
+ 'old:virtual_from_version:45979' => 1613,
+ 'old:virtual_from_version:47167' => 1077,
+ 'old:virtual_from_version:46603' => 1172,
+ 'old:virtual_from_version:49801' => 3131,
+ 'old:virtual_from_version:49888' => 1035,
+ 'old:virtual_from_version:40177' => 1006,
+ 'old:virtual_from_version:47622' => 1070,
+ 'old:virtual_from_version:50558' => 3265,
+ 'old:virtual_from_version:46135' => 1404,
+ 'old:virtual_from_version:46242' => 1172,
+ 'old:virtual_from_version:49386' => 1659,
+ 'old:virtual_from_version:47450' => 1109,
+ 'old:virtual_from_version:45058' => 1049,
+ 'old:virtual_from_version:47659' => 1125,
+ 'old:virtual_from_version:49731' => 1070,
+ 'old:virtual_from_version:44962' => 1000,
+ 'old:virtual_from_version:47540' => 1070,
+ 'old:virtual_from_version:42765' => 1484,
+ 'old:virtual_from_version:44197' => 1009,
+ 'old:virtual_from_version:45150' => 1009,
+ 'old:virtual_from_version:42348' => 1070,
+ 'old:virtual_from_version:47158' => 1584,
+ 'old:virtual_from_version:47518' => 1037,
+ 'old:virtual_from_version:49014' => 3129,
+ 'old:virtual_from_version:45357' => 1031,
+ 'old:virtual_from_version:42950' => 1009,
+ 'old:virtual_from_version:42812' => 1107,
+ 'old:virtual_from_version:49342' => 1125,
+ 'old:virtual_from_version:45537' => 1070,
+ 'old:virtual_from_version:39528' => 1107,
+ 'old:virtual_from_version:50412' => 3201,
+ 'old:virtual_from_version:45749' => 1077,
+ 'old:virtual_from_version:44960' => 1016,
+ 'old:virtual_from_version:45222' => 1576,
+ 'old:virtual_from_version:49688' => 1381,
+ 'old:virtual_from_version:49522' => 1488,
+ 'old:virtual_from_version:47007' => 1077,
+ 'old:virtual_from_version:44405' => 1069,
+ 'old:virtual_from_version:40968' => 1070,
+ 'old:virtual_from_version:42500' => 1107,
+ 'old:virtual_from_version:47970' => 1109,
+ 'old:virtual_from_version:46400' => 1402,
+ 'old:virtual_from_version:46440' => 1070,
+ 'old:virtual_from_version:45761' => 1362,
+ 'old:virtual_from_version:44300' => 1037,
+ 'old:virtual_from_version:50404' => 3214,
+ 'old:virtual_from_version:42052' => 1037,
+ 'old:virtual_from_version:49412' => 3008,
+ 'old:virtual_from_version:42140' => 1037,
+ 'old:virtual_from_version:50502' => 1035,
+ 'old:virtual_from_version:46164' => 1077,
+ 'old:virtual_from_version:47618' => 1583,
+ 'old:virtual_from_version:42966' => 1016,
+ 'old:virtual_from_version:47956' => 1077,
+ 'old:virtual_from_version:50510' => 3261,
+ 'old:virtual_from_version:47702' => 1109,
+ 'old:virtual_from_version:44695' => 1070,
+ 'old:virtual_from_version:49118' => 1048,
+ 'old:virtual_from_version:47755' => 3092,
+ 'old:virtual_from_version:40436' => 1057,
+ 'old:virtual_from_version:47786' => 1125,
+ 'old:virtual_from_version:50053' => 1314,
+ 'old:virtual_from_version:47748' => 1070,
+ 'old:virtual_from_version:45374' => 1107,
+ 'old:virtual_from_version:45702' => 1077,
+ 'old:virtual_from_version:44747' => 1009,
+ 'old:virtual_from_version:47531' => 3058,
+ 'old:virtual_from_version:47591' => 1109,
+ 'old:virtual_from_version:39215' => 1058,
+ 'old:virtual_from_version:47757' => 1070,
+ 'old:virtual_from_version:42366' => 1311,
+ 'old:virtual_from_version:44390' => 1048,
+ 'old:virtual_from_version:47335' => 3043,
+ 'old:virtual_from_version:46193' => 1077,
+ 'old:virtual_from_version:50312' => 3131,
+ 'old:virtual_from_version:40620' => 1025,
+ 'old:virtual_from_version:46322' => 1402,
+ 'old:virtual_from_version:42375' => 1070,
+ 'old:virtual_from_version:47895' => 1070,
+ 'old:virtual_from_version:45615' => 1009,
+ 'old:virtual_from_version:50673' => 3208,
+ 'old:virtual_from_version:42711' => 1037,
+ 'old:virtual_from_version:49087' => 3030,
+ 'old:virtual_from_version:38858' => 1070,
+ 'old:virtual_from_version:44957' => 1057,
+ 'old:virtual_from_version:45933' => 1070,
+ 'old:virtual_from_version:47614' => 1069,
+ 'old:virtual_from_version:42082' => 1077,
+ 'old:virtual_from_version:45448' => 1109,
+ 'old:virtual_from_version:39583' => 1031,
+ 'old:virtual_from_version:46741' => 1689,
+ 'old:virtual_from_version:50189' => 3025,
+ 'old:virtual_from_version:47691' => 1109,
+ 'old:virtual_from_version:49415' => 1532,
+ 'old:virtual_from_version:46443' => 1051,
+ 'old:virtual_from_version:42217' => 1000,
+ 'old:virtual_from_version:42471' => 1112,
+ 'old:virtual_from_version:47617' => 1565,
+ 'old:virtual_from_version:40953' => 1077,
+ 'old:virtual_from_version:45255' => 1051,
+ 'old:virtual_from_version:50689' => 1404,
+ 'old:virtual_from_version:40129' => 1125,
+ 'old:virtual_from_version:49741' => 1070,
+ 'old:virtual_from_version:42335' => 1077,
+ 'old:virtual_from_version:39990' => 1260,
+ 'old:virtual_from_version:49356' => 3167,
+ 'old:virtual_from_version:40871' => 1009,
+ 'old:virtual_from_version:42678' => 1048,
+ 'old:virtual_from_version:49663' => 1150,
+ 'old:virtual_from_version:44953' => 1025,
+ 'old:virtual_from_version:46145' => 1009,
+ 'old:virtual_from_version:45809' => 1404,
+ 'old:virtual_from_version:50423' => 1689,
+ 'old:virtual_from_version:47880' => 1585,
+ 'old:virtual_from_version:47233' => 1077,
+ 'old:virtual_from_version:47377' => 1109,
+ 'old:virtual_from_version:44340' => 1025,
+ 'old:virtual_from_version:46076' => 1404,
+ 'old:virtual_from_version:48021' => 2121,
+ 'old:virtual_from_version:39126' => 1070,
+ 'old:virtual_from_version:44593' => 1070,
+ 'old:virtual_from_version:50764' => 3259,
+ 'old:virtual_from_version:43008' => 2033,
+ 'old:virtual_from_version:50736' => 1489,
+ 'old:virtual_from_version:44763' => 1070,
+ 'old:virtual_from_version:44213' => 1077,
+ 'old:virtual_from_version:42919' => 1062,
+ 'old:virtual_from_version:45892' => 1109,
+ 'old:virtual_from_version:46505' => 1084,
+ 'old:virtual_from_version:49915' => 1107,
+ 'old:virtual_from_version:42614' => 1025,
+ 'old:virtual_from_version:47886' => 1108,
+ 'old:virtual_from_version:49590' => 1404,
+ 'old:virtual_from_version:45652' => 1107,
+ 'old:virtual_from_version:44975' => 1023,
+ 'old:virtual_from_version:44715' => 1067,
+ 'old:virtual_from_version:50748' => 3206,
+ 'old:virtual_from_version:42487' => 1037,
+ 'old:virtual_from_version:50646' => 1108,
+ 'old:virtual_from_version:42760' => 1009,
+ 'old:virtual_from_version:44288' => 1077,
+ 'old:virtual_from_version:44243' => 1110,
+ 'old:virtual_from_version:47877' => 1314,
+ 'old:virtual_from_version:49843' => 3131,
+ 'old:virtual_from_version:38797' => 1125,
+ 'old:virtual_from_version:49165' => 1070,
+ 'old:virtual_from_version:42521' => 1037,
+ 'old:virtual_from_version:42882' => 1077,
+ 'old:virtual_from_version:45620' => 1067,
+ 'old:virtual_from_version:46652' => 1025,
+ 'old:virtual_from_version:42601' => 1077,
+ 'old:virtual_from_version:42971' => 1063,
+ 'old:virtual_from_version:46920' => 1077,
+ 'old:virtual_from_version:47360' => 1037,
+ 'old:virtual_from_version:47006' => 1172,
+ 'old:virtual_from_version:47228' => 1172,
+ 'old:virtual_from_version:44339' => 1009,
+ 'old:virtual_from_version:42660' => 1037,
+ 'old:virtual_from_version:46379' => 1070,
+ 'old:virtual_from_version:47384' => 1077,
+ 'old:virtual_from_version:49919' => 3206,
+ 'old:virtual_from_version:42103' => 1037,
+ 'old:virtual_from_version:50141' => 1580,
+ 'old:virtual_from_version:50743' => 1105,
+ 'old:virtual_from_version:45765' => 1048,
+ 'old:virtual_from_version:49426' => 3002,
+ 'old:virtual_from_version:44496' => 1037,
+ 'old:virtual_from_version:49405' => 1689,
+ 'old:virtual_from_version:49894' => 1070,
+ 'old:virtual_from_version:45678' => 1009,
+ 'old:virtual_from_version:42332' => 1070,
+ 'old:virtual_from_version:50405' => 3227,
+ 'old:virtual_from_version:46935' => 1585,
+ 'old:virtual_from_version:42095' => 1077,
+ 'old:virtual_from_version:39424' => 1172,
+ 'old:virtual_from_version:39944' => 1037,
+ 'old:virtual_from_version:47761' => 1077,
+ 'old:virtual_from_version:42825' => 1172,
+ 'old:virtual_from_version:45848' => 1627,
+ 'old:virtual_from_version:38621' => 1081,
+ 'old:virtual_from_version:45852' => 1009,
+ 'old:virtual_from_version:44883' => 1172,
+ 'old:virtual_from_version:42022' => 1009,
+ 'old:virtual_from_version:40899' => 1025,
+ 'old:virtual_from_version:47561' => 1109,
+ 'old:virtual_from_version:42685' => 1491,
+ 'old:virtual_from_version:46345' => 1172,
+ 'old:virtual_from_version:46210' => 1555,
+ 'old:virtual_from_version:45487' => 1070,
+ 'old:virtual_from_version:49196' => 1077,
+ 'old:virtual_from_version:46640' => 1125,
+ 'old:virtual_from_version:50699' => 1689,
+ 'old:virtual_from_version:44603' => 1007,
+ 'old:virtual_from_version:43061' => 2062,
+ 'old:virtual_from_version:46839' => 1105,
+ 'old:virtual_from_version:44913' => 1009,
+ 'old:virtual_from_version:50693' => 3271,
+ 'old:virtual_from_version:39753' => 1067,
+ 'old:virtual_from_version:50124' => 1070,
+ 'old:virtual_from_version:46557' => 1009,
+ 'old:virtual_from_version:42708' => 1070,
+ 'old:virtual_from_version:45540' => 1077,
+ 'old:virtual_from_version:50705' => 1417,
+ 'old:virtual_from_version:42494' => 1077,
+ 'old:virtual_from_version:46018' => 1077,
+ 'old:virtual_from_version:46359' => 1077,
+ 'old:virtual_from_version:44436' => 1037,
+ 'old:virtual_from_version:44265' => 1037,
+ 'old:virtual_from_version:49008' => 1070,
+ 'old:virtual_from_version:50769' => 1070,
+ 'old:virtual_from_version:46620' => 1404,
+ 'old:virtual_from_version:38677' => 1009,
+ 'old:virtual_from_version:47664' => 1109,
+ 'old:virtual_from_version:43011' => 2036,
+ 'old:virtual_from_version:47176' => 1638,
+ 'old:virtual_from_version:45647' => 1076,
+ 'old:virtual_from_version:47309' => 1070,
+ 'old:virtual_from_version:44241' => 1077,
+ 'old:virtual_from_version:49465' => 1067,
+ 'old:virtual_from_version:44387' => 1094,
+ 'old:virtual_from_version:44729' => 1541,
+ 'old:virtual_from_version:46563' => 1172,
+ 'old:virtual_from_version:50359' => 1689,
+ 'old:virtual_from_version:47573' => 1580,
+ 'old:virtual_from_version:44748' => 1077,
+ 'old:virtual_from_version:50542' => 1583,
+ 'old:virtual_from_version:44086' => 1070,
+ 'old:virtual_from_version:38873' => 1135,
+ 'old:virtual_from_version:46887' => 1077,
+ 'old:virtual_from_version:50489' => 1491,
+ 'old:virtual_from_version:50611' => 1417,
+ 'old:virtual_from_version:32145' => 1099,
+ 'old:virtual_from_version:46408' => 1402,
+ 'old:virtual_from_version:44635' => 1037,
+ 'old:virtual_from_version:47889' => 1125,
+ 'old:virtual_from_version:42569' => 1037,
+ 'old:virtual_from_version:46133' => 1067,
+ 'old:virtual_from_version:42273' => 1037,
+ 'old:virtual_from_version:50430' => 1659,
+ 'old:virtual_from_version:50039' => 3131,
+ 'old:virtual_from_version:45229' => 1461,
+ 'old:virtual_from_version:43048' => 2021,
+ 'old:virtual_from_version:50497' => 3251,
+ 'old:virtual_from_version:42540' => 1037,
+ 'old:virtual_from_version:49552' => 1007,
+ 'old:virtual_from_version:45743' => 1532,
+ 'old:virtual_from_version:44269' => 1125,
+ 'old:virtual_from_version:39977' => 1104,
+ 'old:virtual_from_version:46955' => 3012,
+ 'old:virtual_from_version:47374' => 3008,
+ 'old:virtual_from_version:42441' => 1070,
+ 'old:virtual_from_version:47642' => 1077,
+ 'old:virtual_from_version:45513' => 1025,
+ 'old:virtual_from_version:44545' => 1070,
+ 'old:virtual_from_version:40723' => 1077,
+ 'old:virtual_from_version:47072' => 1689,
+ 'old:virtual_from_version:47413' => 1125,
+ 'old:virtual_from_version:47990' => 3016,
+ 'old:virtual_from_version:49953' => 3131,
+ 'old:virtual_from_version:42726' => 1083,
+ 'old:virtual_from_version:50437' => 1257,
+ 'old:virtual_from_version:50092' => 1172,
+ 'old:virtual_from_version:40790' => 1077,
+ 'old:virtual_from_version:42152' => 1077,
+ 'old:virtual_from_version:46682' => 1070,
+ 'old:virtual_from_version:49128' => 1584,
+ 'old:virtual_from_version:45278' => 1008,
+ 'old:virtual_from_version:49247' => 1404,
+ 'old:virtual_from_version:45361' => 1584,
+ 'old:virtual_from_version:44253' => 1081,
+ 'old:virtual_from_version:44455' => 1136,
+ 'old:virtual_from_version:42044' => 1009,
+ 'old:virtual_from_version:47128' => 1621,
+ 'old:virtual_from_version:48012' => 2112,
+ 'old:virtual_from_version:49111' => 1136,
+ 'old:virtual_from_version:45742' => 1125,
+ 'old:virtual_from_version:47955' => 1112,
+ 'old:virtual_from_version:42363' => 1025,
+ 'old:virtual_from_version:50201' => 1069,
+ 'old:virtual_from_version:47021' => 1532,
+ 'old:virtual_from_version:46518' => 1067,
+ 'old:virtual_from_version:40043' => 1094,
+ 'old:virtual_from_version:49737' => 1128,
+ 'old:virtual_from_version:44752' => 1006,
+ 'old:virtual_from_version:39778' => 1000,
+ 'old:virtual_from_version:43108' => 2100,
+ 'old:virtual_from_version:46368' => 1555,
+ 'old:virtual_from_version:42675' => 1077,
+ 'old:virtual_from_version:50076' => 3131,
+ 'old:virtual_from_version:44906' => 1321,
+ 'old:virtual_from_version:47070' => 1172,
+ 'old:virtual_from_version:50719' => 3259,
+ 'old:virtual_from_version:49628' => 3184,
+ 'old:virtual_from_version:46031' => 1070,
+ 'old:virtual_from_version:49308' => 1025,
+ 'old:virtual_from_version:46125' => 1070,
+ 'old:virtual_from_version:42289' => 1015,
+ 'old:virtual_from_version:40378' => 1107,
+ 'old:virtual_from_version:45135' => 1009,
+ 'old:virtual_from_version:50330' => 3238,
+ 'old:virtual_from_version:47688' => 1621,
+ 'old:virtual_from_version:42488' => 1136,
+ 'old:virtual_from_version:45471' => 1031,
+ 'old:virtual_from_version:44778' => 1076,
+ 'old:virtual_from_version:45566' => 1532,
+ 'old:virtual_from_version:50171' => 1314,
+ 'old:virtual_from_version:46346' => 1077,
+ 'old:virtual_from_version:42666' => 1488,
+ 'old:virtual_from_version:42842' => 1077,
+ 'old:virtual_from_version:44380' => 1023,
+ 'old:virtual_from_version:45356' => 1012,
+ 'old:virtual_from_version:40814' => 1070,
+ 'old:virtual_from_version:40214' => 1109,
+ 'old:virtual_from_version:42782' => 1070,
+ 'old:virtual_from_version:44710' => 1107,
+ 'old:virtual_from_version:42572' => 1070,
+ 'old:virtual_from_version:45293' => 1580,
+ 'old:virtual_from_version:47365' => 1444,
+ 'old:virtual_from_version:50088' => 3131,
+ 'old:virtual_from_version:14174' => 1059,
+ 'old:virtual_from_version:49432' => 3008,
+ 'old:virtual_from_version:47203' => 1123,
+ 'old:virtual_from_version:46856' => 3003,
+ 'old:virtual_from_version:47876' => 1109,
+ 'old:virtual_from_version:40771' => 1077,
+ 'old:virtual_from_version:47497' => 1070,
+ 'old:virtual_from_version:49194' => 1649,
+ 'old:virtual_from_version:42342' => 1009,
+ 'old:virtual_from_version:45322' => 1586,
+ 'old:virtual_from_version:39174' => 1404,
+ 'old:virtual_from_version:47388' => 1037,
+ 'old:virtual_from_version:46959' => 1105,
+ 'old:virtual_from_version:50130' => 1070,
+ 'old:virtual_from_version:48015' => 2115,
+ 'old:virtual_from_version:38634' => 1000,
+ 'old:virtual_from_version:40413' => 1070,
+ 'old:virtual_from_version:45141' => 1321,
+ 'old:virtual_from_version:50025' => 1070,
+ 'old:virtual_from_version:42121' => 1037,
+ 'old:virtual_from_version:42498' => 1057,
+ 'old:virtual_from_version:44115' => 1107,
+ 'old:virtual_from_version:47548' => 1077,
+ 'old:virtual_from_version:42409' => 1172,
+ 'old:virtual_from_version:47040' => 1077,
+ 'old:virtual_from_version:46514' => 1007,
+ 'old:virtual_from_version:45140' => 1110,
+ 'old:virtual_from_version:50361' => 1125,
+ 'old:virtual_from_version:40980' => 1125,
+ 'old:virtual_from_version:47381' => 1070,
+ 'old:virtual_from_version:45283' => 1006,
+ 'old:virtual_from_version:38756' => 1007,
+ 'old:virtual_from_version:42761' => 1077,
+ 'old:virtual_from_version:42846' => 1081,
+ 'old:virtual_from_version:50358' => 1150,
+ 'old:virtual_from_version:50522' => 1033,
+ 'old:virtual_from_version:49454' => 1689,
+ 'old:virtual_from_version:45846' => 1498,
+ 'old:virtual_from_version:46794' => 1070,
+ 'old:virtual_from_version:46263' => 1537,
+ 'old:virtual_from_version:49016' => 1009,
+ 'old:virtual_from_version:46898' => 2100,
+ 'old:virtual_from_version:47794' => 3104,
+ 'old:virtual_from_version:44410' => 1017,
+ 'old:virtual_from_version:46156' => 1077,
+ 'old:virtual_from_version:40996' => 1077,
+ 'old:virtual_from_version:47215' => 1009,
+ 'old:virtual_from_version:49421' => 1070,
+ 'old:virtual_from_version:44999' => 1105,
+ 'old:virtual_from_version:50247' => 1070,
+ 'old:virtual_from_version:47015' => 1125,
+ 'old:virtual_from_version:45721' => 1362,
+ 'old:virtual_from_version:49557' => 1067,
+ 'old:virtual_from_version:49951' => 1070,
+ 'old:virtual_from_version:45696' => 1019,
+ 'old:virtual_from_version:49520' => 1574,
+ 'old:virtual_from_version:50556' => 1689,
+ 'old:virtual_from_version:42305' => 1077,
+ 'old:virtual_from_version:46619' => 1077,
+ 'old:virtual_from_version:44806' => 1070,
+ 'old:virtual_from_version:50725' => 3259,
+ 'old:virtual_from_version:47350' => 1077,
+ 'old:virtual_from_version:42600' => 1009,
+ 'old:virtual_from_version:38611' => 1122,
+ 'old:virtual_from_version:44859' => 1077,
+ 'old:virtual_from_version:40815' => 1009,
+ 'old:virtual_from_version:50304' => 3131,
+ 'old:virtual_from_version:39906' => 1404,
+ 'old:virtual_from_version:42399' => 1067,
+ 'old:virtual_from_version:39503' => 1183,
+ 'old:virtual_from_version:50399' => 1689,
+ 'old:virtual_from_version:40557' => 1070,
+ 'old:virtual_from_version:50320' => 1067,
+ 'old:virtual_from_version:46538' => 1077,
+ 'old:virtual_from_version:43059' => 2059,
+ 'old:virtual_from_version:42929' => 1037,
+ 'old:virtual_from_version:48020' => 2120,
+ 'old:virtual_from_version:39521' => 1104,
+ 'old:virtual_from_version:50380' => 3131,
+ 'old:virtual_from_version:50170' => 3226,
+ 'old:virtual_from_version:45751' => 1532,
+ 'old:virtual_from_version:50043' => 1012,
+ 'old:virtual_from_version:45927' => 1633,
+ 'old:virtual_from_version:49441' => 1404,
+ 'old:virtual_from_version:46067' => 1077,
+ 'old:virtual_from_version:50419' => 1136,
+ 'old:virtual_from_version:42679' => 1070,
+ 'old:virtual_from_version:40810' => 1125,
+ 'old:virtual_from_version:49279' => 1077,
+ 'old:virtual_from_version:42251' => 1025,
+ 'old:virtual_from_version:50390' => 1125,
+ 'old:virtual_from_version:46940' => 1070,
+ 'old:virtual_from_version:44417' => 1027,
+ 'old:virtual_from_version:44447' => 1037,
+ 'old:virtual_from_version:39241' => 1109,
+ 'old:virtual_from_version:39524' => 1025,
+ 'old:virtual_from_version:49494' => 1404,
+ 'old:virtual_from_version:47853' => 1585,
+ 'old:virtual_from_version:47347' => 1125,
+ 'old:virtual_from_version:49521' => 1580,
+ 'old:virtual_from_version:50537' => 1381,
+ 'old:virtual_from_version:47788' => 1077,
+ 'old:virtual_from_version:42068' => 1077,
+ 'old:virtual_from_version:40484' => 1370,
+ 'old:virtual_from_version:46014' => 1105,
+ 'old:virtual_from_version:49771' => 3131,
+ 'old:virtual_from_version:42809' => 1037,
+ 'old:virtual_from_version:42728' => 1237,
+ 'old:virtual_from_version:44408' => 1016,
+ 'old:virtual_from_version:40748' => 1025,
+ 'old:virtual_from_version:43082' => 2079,
+ 'old:virtual_from_version:40716' => 1077,
+ 'old:virtual_from_version:42097' => 1110,
+ 'old:virtual_from_version:45817' => 1019,
+ 'old:virtual_from_version:45338' => 1125,
+ 'old:virtual_from_version:46768' => 1517,
+ 'old:virtual_from_version:44542' => 1077,
+ 'old:virtual_from_version:47327' => 1125,
+ 'old:virtual_from_version:44589' => 1077,
+ 'old:virtual_from_version:40402' => 1352,
+ 'old:virtual_from_version:42119' => 1070,
+ 'old:virtual_from_version:49448' => 1689,
+ 'old:virtual_from_version:49216' => 1190,
+ 'old:virtual_from_version:46434' => 1077,
+ 'old:virtual_from_version:45654' => 1009,
+ 'old:virtual_from_version:50376' => 1070,
+ 'old:virtual_from_version:47775' => 1689,
+ 'old:virtual_from_version:49444' => 1070,
+ 'old:virtual_from_version:44951' => 1070,
+ 'old:virtual_from_version:50727' => 1070,
+ 'old:virtual_from_version:40927' => 1070,
+ 'old:virtual_from_version:40666' => 1012,
+ 'old:virtual_from_version:50119' => 1112,
+ 'old:virtual_from_version:42800' => 1498,
+ 'old:virtual_from_version:44510' => 1532,
+ 'old:virtual_from_version:44611' => 1125,
+ 'old:virtual_from_version:44893' => 1048,
+ 'old:virtual_from_version:46993' => 1077,
+ 'old:virtual_from_version:46608' => 1070,
+ 'old:virtual_from_version:45968' => 1070,
+ 'old:virtual_from_version:47840' => 1689,
+ 'old:virtual_from_version:46611' => 1012,
+ 'old:virtual_from_version:42585' => 1009,
+ 'old:virtual_from_version:44264' => 1077,
+ 'old:virtual_from_version:46008' => 1125,
+ 'old:virtual_from_version:46059' => 1070,
+ 'old:virtual_from_version:42393' => 1037,
+ 'old:virtual_from_version:40997' => 1037,
+ 'old:virtual_from_version:44707' => 1037,
+ 'old:virtual_from_version:45312' => 1584,
+ 'old:virtual_from_version:47369' => 1109,
+ 'old:virtual_from_version:46995' => 3008,
+ 'old:virtual_from_version:50745' => 1689,
+ 'old:virtual_from_version:50213' => 1070,
+ 'old:virtual_from_version:49634' => 1532,
+ 'old:virtual_from_version:42774' => 1110,
+ 'old:virtual_from_version:47415' => 1105,
+ 'old:virtual_from_version:42260' => 1000,
+ 'old:virtual_from_version:46341' => 1671,
+ 'old:virtual_from_version:47112' => 3019,
+ 'old:virtual_from_version:42069' => 1037,
+ 'old:virtual_from_version:47389' => 1037,
+ 'old:virtual_from_version:40700' => 1025,
+ 'old:virtual_from_version:49296' => 1580,
+ 'old:virtual_from_version:49789' => 1070,
+ 'old:virtual_from_version:42793' => 1009,
+ 'old:virtual_from_version:50259' => 1689,
+ 'old:virtual_from_version:49434' => 1070,
+ 'old:virtual_from_version:45785' => 1048,
+ 'old:virtual_from_version:44485' => 1107,
+ 'old:virtual_from_version:49673' => 1136,
+ 'old:virtual_from_version:47421' => 1109,
+ 'old:virtual_from_version:40918' => 1070,
+ 'old:virtual_from_version:45284' => 1077,
+ 'old:virtual_from_version:42860' => 1498,
+ 'old:virtual_from_version:49822' => 1565,
+ 'old:virtual_from_version:46463' => 1172,
+ 'old:virtual_from_version:50710' => 1070,
+ 'old:virtual_from_version:49052' => 3094,
+ 'old:virtual_from_version:49870' => 1689,
+ 'old:virtual_from_version:42046' => 1037,
+ 'old:virtual_from_version:44519' => 1112,
+ 'old:virtual_from_version:50028' => 1032,
+ 'old:virtual_from_version:43096' => 2088,
+ 'old:virtual_from_version:18960' => 1041,
+ 'old:virtual_from_version:44157' => 1125,
+ 'old:virtual_from_version:47352' => 1070,
+ 'old:virtual_from_version:42822' => 1025,
+ 'old:virtual_from_version:44762' => 1062,
+ 'old:virtual_from_version:45362' => 1585,
+ 'old:virtual_from_version:42199' => 1070,
+ 'old:virtual_from_version:42778' => 1009,
+ 'old:virtual_from_version:47110' => 1640,
+ 'old:virtual_from_version:46533' => 1077,
+ 'old:virtual_from_version:42045' => 1077,
+ 'old:virtual_from_version:49224' => 1070,
+ 'old:virtual_from_version:40909' => 1077,
+ 'old:virtual_from_version:40964' => 1037,
+ 'old:virtual_from_version:40662' => 1070,
+ 'old:virtual_from_version:40665' => 1009,
+ 'old:virtual_from_version:49848' => 1537,
+ 'old:virtual_from_version:47105' => 1583,
+ 'old:virtual_from_version:42163' => 1172,
+ 'old:virtual_from_version:49713' => 1404,
+ 'old:virtual_from_version:45511' => 1105,
+ 'old:virtual_from_version:50485' => 3189,
+ 'old:virtual_from_version:45956' => 1077,
+ 'old:virtual_from_version:49671' => 3155,
+ 'old:virtual_from_version:46441' => 1077,
+ 'old:virtual_from_version:39907' => 1222,
+ 'old:virtual_from_version:47224' => 1077,
+ 'old:virtual_from_version:46706' => 1697,
+ 'old:virtual_from_version:44070' => 1037,
+ 'old:virtual_from_version:45385' => 1125,
+ 'old:virtual_from_version:35826' => 1000,
+ 'old:virtual_from_version:44077' => 1077,
+ 'old:virtual_from_version:47669' => 1112,
+ 'old:virtual_from_version:39895' => 1007,
+ 'old:virtual_from_version:45583' => 1615,
+ 'old:virtual_from_version:44469' => 1077,
+ 'old:virtual_from_version:50661' => 1110,
+ 'old:virtual_from_version:50303' => 3131,
+ 'old:virtual_from_version:49697' => 1640,
+ 'old:virtual_from_version:40974' => 1007,
+ 'old:virtual_from_version:42057' => 1077,
+ 'old:virtual_from_version:45724' => 1009,
+ 'old:virtual_from_version:46306' => 1125,
+ 'old:virtual_from_version:46968' => 3013,
+ 'old:virtual_from_version:50375' => 1007,
+ 'old:virtual_from_version:50181' => 3131,
+ 'old:virtual_from_version:50448' => 1070,
+ 'old:virtual_from_version:42802' => 1172,
+ 'old:virtual_from_version:47975' => 1649,
+ 'old:virtual_from_version:46506' => 1112,
+ 'old:virtual_from_version:47181' => 1125,
+ 'old:virtual_from_version:46644' => 1077,
+ 'old:virtual_from_version:49669' => 1404,
+ 'old:virtual_from_version:39222' => 1110,
+ 'old:virtual_from_version:44680' => 1070,
+ 'old:virtual_from_version:47744' => 1077,
+ 'old:virtual_from_version:46671' => 1070,
+ 'old:virtual_from_version:40869' => 1222,
+ 'old:virtual_from_version:44470' => 1037,
+ 'old:virtual_from_version:46430' => 1587,
+ 'old:virtual_from_version:49491' => 1659,
+ 'old:virtual_from_version:42957' => 1070,
+ 'old:virtual_from_version:46765' => 1136,
+ 'old:virtual_from_version:44935' => 1078,
+ 'old:virtual_from_version:40775' => 1070,
+ 'old:virtual_from_version:47629' => 1070,
+ 'old:virtual_from_version:38758' => 1125,
+ 'old:virtual_from_version:45773' => 1067,
+ 'old:virtual_from_version:45424' => 1007,
+ 'old:virtual_from_version:42889' => 1067,
+ 'old:virtual_from_version:44681' => 1009,
+ 'old:virtual_from_version:44127' => 1077,
+ 'old:virtual_from_version:44699' => 1037,
+ 'old:virtual_from_version:46178' => 1125,
+ 'old:virtual_from_version:42258' => 1077,
+ 'old:virtual_from_version:44831' => 1024,
+ 'old:virtual_from_version:46517' => 1109,
+ 'old:virtual_from_version:44529' => 1037,
+ 'old:virtual_from_version:47185' => 1404,
+ 'old:virtual_from_version:42677' => 1109,
+ 'old:virtual_from_version:45661' => 1070,
+ 'old:virtual_from_version:44560' => 1070,
+ 'old:virtual_from_version:40951' => 1070,
+ 'old:virtual_from_version:45113' => 1517,
+ 'old:virtual_from_version:45008' => 1413,
+ 'old:virtual_from_version:49359' => 1125,
+ 'old:virtual_from_version:44703' => 1539,
+ 'old:virtual_from_version:42643' => 1037,
+ 'old:virtual_from_version:47340' => 1037,
+ 'old:virtual_from_version:42133' => 1077,
+ 'old:virtual_from_version:47166' => 1001,
+ 'old:virtual_from_version:45528' => 1136,
+ 'old:virtual_from_version:45249' => 1064,
+ 'old:virtual_from_version:50549' => 3259,
+ 'old:virtual_from_version:43042' => 2054,
+ 'old:virtual_from_version:44064' => 1070,
+ 'old:virtual_from_version:45560' => 1109,
+ 'old:virtual_from_version:42353' => 1037,
+ 'old:virtual_from_version:38361' => 1109,
+ 'old:virtual_from_version:46387' => 1070,
+ 'old:virtual_from_version:42135' => 1110,
+ 'old:virtual_from_version:42244' => 1009,
+ 'old:virtual_from_version:49866' => 3002,
+ 'old:virtual_from_version:42334' => 1025,
+ 'old:virtual_from_version:42654' => 1077,
+ 'old:virtual_from_version:44081' => 1107,
+ 'old:virtual_from_version:40577' => 1077,
+ 'old:virtual_from_version:46760' => 1689,
+ 'old:virtual_from_version:42444' => 1037,
+ 'old:virtual_from_version:40661' => 1107,
+ 'old:virtual_from_version:46105' => 1077,
+ 'old:virtual_from_version:46911' => 1397,
+ 'old:virtual_from_version:45894' => 1077,
+ 'old:virtual_from_version:42450' => 1037,
+ 'old:virtual_from_version:49533' => 1532,
+ 'old:virtual_from_version:45397' => 1404,
+ 'old:virtual_from_version:40414' => 1009,
+ 'old:virtual_from_version:50605' => 3259,
+ 'old:virtual_from_version:46811' => 1077,
+ 'old:virtual_from_version:50147' => 1032,
+ 'old:virtual_from_version:50265' => 1070,
+ 'old:virtual_from_version:49383' => 1077,
+ 'old:virtual_from_version:45262' => 1022,
+ 'old:virtual_from_version:47981' => 1574,
+ 'old:virtual_from_version:49423' => 1070,
+ 'old:virtual_from_version:50768' => 1353,
+ 'old:virtual_from_version:46674' => 1070,
+ 'old:virtual_from_version:44495' => 1077,
+ 'old:virtual_from_version:47964' => 1689,
+ 'old:virtual_from_version:49264' => 1689,
+ 'old:virtual_from_version:50540' => 1489,
+ 'old:virtual_from_version:42311' => 1000,
+ 'old:virtual_from_version:49075' => 3094,
+ 'old:virtual_from_version:49377' => 1070,
+ 'old:virtual_from_version:47507' => 1005,
+ 'old:virtual_from_version:47419' => 1007,
+ 'old:virtual_from_version:42128' => 1110,
+ 'old:virtual_from_version:45358' => 1404,
+ 'old:virtual_from_version:50338' => 3214,
+ 'old:virtual_from_version:43003' => 2028,
+ 'old:virtual_from_version:42190' => 1009,
+ 'old:virtual_from_version:42205' => 1077,
+ 'old:virtual_from_version:45667' => 1025,
+ 'old:virtual_from_version:38828' => 1134,
+ 'old:virtual_from_version:50491' => 3221,
+ 'old:virtual_from_version:42027' => 1077,
+ 'old:virtual_from_version:50285' => 1125,
+ 'old:virtual_from_version:49110' => 1649,
+ 'old:virtual_from_version:44271' => 1009,
+ 'old:virtual_from_version:50109' => 3221,
+ 'old:virtual_from_version:45074' => 1349,
+ 'old:virtual_from_version:42109' => 1077,
+ 'old:virtual_from_version:40383' => 1025,
+ 'old:virtual_from_version:44063' => 1037,
+ 'old:virtual_from_version:50574' => 1070,
+ 'old:virtual_from_version:44718' => 1009,
+ 'old:virtual_from_version:38562' => 1109,
+ 'old:virtual_from_version:42223' => 1107,
+ 'old:virtual_from_version:40971' => 1414,
+ 'old:virtual_from_version:49389' => 1172,
+ 'old:virtual_from_version:44812' => 1005,
+ 'old:virtual_from_version:46904' => 3006,
+ 'old:virtual_from_version:49300' => 1070,
+ 'old:virtual_from_version:45235' => 1578,
+ 'old:virtual_from_version:42612' => 1070,
+ 'old:virtual_from_version:30081' => 1094,
+ 'old:virtual_from_version:42224' => 1070,
+ 'old:virtual_from_version:49630' => 1158,
+ 'old:virtual_from_version:46933' => 1583,
+ 'old:virtual_from_version:45924' => 1009,
+ 'old:virtual_from_version:40949' => 1172,
+ 'old:virtual_from_version:49807' => 3198,
+ 'old:virtual_from_version:47023' => 1689,
+ 'old:virtual_from_version:42113' => 1037,
+ 'old:virtual_from_version:45898' => 1070,
+ 'old:virtual_from_version:46052' => 1006,
+ 'old:virtual_from_version:44743' => 1224,
+ 'old:virtual_from_version:42400' => 1070,
+ 'old:virtual_from_version:49922' => 3208,
+ 'old:virtual_from_version:50506' => 3259,
+ 'old:virtual_from_version:40628' => 1077,
+ 'old:virtual_from_version:41016' => 2025,
+ 'old:virtual_from_version:44758' => 1070,
+ 'old:virtual_from_version:42565' => 1070,
+ 'old:virtual_from_version:42265' => 1077,
+ 'old:virtual_from_version:42542' => 1077,
+ 'old:virtual_from_version:50416' => 1314,
+ 'old:virtual_from_version:47924' => 1689,
+ 'old:virtual_from_version:47408' => 1077,
+ 'old:virtual_from_version:50548' => 3236,
+ 'old:virtual_from_version:40850' => 1070,
+ 'old:virtual_from_version:40302' => 1062,
+ 'old:virtual_from_version:45524' => 1070,
+ 'old:virtual_from_version:49335' => 1077,
+ 'old:virtual_from_version:44006' => 1490,
+ 'old:virtual_from_version:50517' => 3263,
+ 'old:virtual_from_version:50450' => 1112,
+ 'old:virtual_from_version:46246' => 1070,
+ 'old:virtual_from_version:49927' => 3209,
+ 'old:virtual_from_version:45060' => 1095,
+ 'old:virtual_from_version:45412' => 1136,
+ 'old:virtual_from_version:42970' => 1070,
+ 'old:virtual_from_version:42325' => 1070,
+ 'old:virtual_from_version:42495' => 1037,
+ 'old:virtual_from_version:42753' => 1025,
+ 'old:virtual_from_version:42918' => 1037,
+ 'old:virtual_from_version:45564' => 1077,
+ 'old:virtual_from_version:45639' => 1172,
+ 'old:virtual_from_version:40779' => 1070,
+ 'old:virtual_from_version:47101' => 1352,
+ 'old:virtual_from_version:49017' => 1077,
+ 'old:virtual_from_version:49881' => 1125,
+ 'old:virtual_from_version:46490' => 1006,
+ 'old:virtual_from_version:44438' => 1110,
+ 'old:virtual_from_version:42769' => 1007,
+ 'old:virtual_from_version:45155' => 1136,
+ 'old:virtual_from_version:47212' => 1125,
+ 'old:virtual_from_version:42264' => 1070,
+ 'old:virtual_from_version:49865' => 1689,
+ 'old:virtual_from_version:46460' => 1659,
+ 'old:virtual_from_version:46070' => 1007,
+ 'old:virtual_from_version:50276' => 3218,
+ 'old:virtual_from_version:44902' => 1009,
+ 'old:virtual_from_version:45529' => 1070,
+ 'old:virtual_from_version:42854' => 1172,
+ 'old:virtual_from_version:47199' => 1109,
+ 'old:virtual_from_version:40242' => 1081,
+ 'old:virtual_from_version:45106' => 1125,
+ 'old:virtual_from_version:46280' => 1070,
+ 'old:virtual_from_version:42549' => 1077,
+ 'old:virtual_from_version:49839' => 1006,
+ 'old:virtual_from_version:49188' => 1077,
+ 'old:virtual_from_version:38680' => 1077,
+ 'old:virtual_from_version:45646' => 1404,
+ 'old:virtual_from_version:49029' => 1649,
+ 'old:virtual_from_version:40819' => 1000,
+ 'old:virtual_from_version:49306' => 1585,
+ 'old:virtual_from_version:38783' => 1069,
+ 'old:virtual_from_version:42403' => 1404,
+ 'old:virtual_from_version:47218' => 3016,
+ 'old:virtual_from_version:44233' => 1077,
+ 'old:virtual_from_version:49101' => 3146,
+ 'old:virtual_from_version:42556' => 1077,
+ 'old:virtual_from_version:46129' => 1070,
+ 'old:virtual_from_version:50236' => 3131,
+ 'old:virtual_from_version:45833' => 1404,
+ 'old:virtual_from_version:50126' => 1172,
+ 'old:virtual_from_version:44904' => 1110,
+ 'old:virtual_from_version:46721' => 1125,
+ 'old:virtual_from_version:42704' => 1067,
+ 'old:virtual_from_version:46146' => 1077,
+ 'old:virtual_from_version:49944' => 1314,
+ 'old:virtual_from_version:45780' => 1062,
+ 'old:virtual_from_version:49477' => 1314,
+ 'old:virtual_from_version:49361' => 1404,
+ 'old:virtual_from_version:49831' => 1404,
+ 'old:virtual_from_version:49198' => 1689,
+ 'old:virtual_from_version:40485' => 1070,
+ 'old:virtual_from_version:45023' => 1091,
+ 'old:virtual_from_version:38912' => 1083,
+ 'old:virtual_from_version:42595' => 1109,
+ 'old:virtual_from_version:49343' => 1107,
+ 'old:virtual_from_version:47947' => 1077,
+ 'old:virtual_from_version:45138' => 1550,
+ 'old:virtual_from_version:49489' => 1107,
+ 'old:virtual_from_version:47737' => 1077,
+ 'old:virtual_from_version:45531' => 1077,
+ 'old:virtual_from_version:47967' => 1070,
+ 'old:virtual_from_version:42695' => 1009,
+ 'old:virtual_from_version:47567' => 1070,
+ 'old:virtual_from_version:49840' => 1489,
+ 'old:virtual_from_version:45813' => 1621,
+ 'old:virtual_from_version:45858' => 1067,
+ 'old:virtual_from_version:44172' => 1009,
+ 'old:virtual_from_version:46208' => 1025,
+ 'old:virtual_from_version:44660' => 1009,
+ 'old:virtual_from_version:40944' => 1070,
+ 'old:virtual_from_version:46136' => 1070,
+ 'old:virtual_from_version:49399' => 1070,
+ 'old:virtual_from_version:40875' => 1037,
+ 'old:virtual_from_version:44648' => 1037,
+ 'old:virtual_from_version:47173' => 1105,
+ 'old:virtual_from_version:40698' => 1009,
+ 'old:virtual_from_version:47996' => 1109,
+ 'old:virtual_from_version:47898' => 1109,
+ 'old:virtual_from_version:49986' => 1025,
+ 'old:virtual_from_version:47160' => 1689,
+ 'old:virtual_from_version:44934' => 1070,
+ 'old:virtual_from_version:41013' => 2023,
+ 'old:virtual_from_version:42233' => 1009,
+ 'old:virtual_from_version:42225' => 1009,
+ 'old:virtual_from_version:49910' => 3194,
+ 'old:virtual_from_version:42749' => 1067,
+ 'old:virtual_from_version:47645' => 1621,
+ 'old:virtual_from_version:42964' => 1070,
+ 'old:virtual_from_version:46369' => 1070,
+ 'old:virtual_from_version:43029' => 2029,
+ 'old:virtual_from_version:49730' => 1666,
+ 'old:virtual_from_version:44071' => 1110,
+ 'old:virtual_from_version:49350' => 1077,
+ 'old:virtual_from_version:47362' => 1109,
+ 'old:virtual_from_version:38692' => 1062,
+ 'old:virtual_from_version:46569' => 1077,
+ 'old:virtual_from_version:45277' => 1105,
+ 'old:virtual_from_version:40972' => 1037,
+ 'old:virtual_from_version:44335' => 1077,
+ 'old:virtual_from_version:40537' => 1077,
+ 'old:virtual_from_version:40261' => 1314,
+ 'old:virtual_from_version:45368' => 1009,
+ 'old:virtual_from_version:44099' => 1070,
+ 'old:virtual_from_version:44501' => 1070,
+ 'old:virtual_from_version:49292' => 1070,
+ 'old:virtual_from_version:42797' => 1037,
+ 'old:virtual_from_version:49084' => 3094,
+ 'old:virtual_from_version:47171' => 1343,
+ 'old:virtual_from_version:44206' => 1125,
+ 'old:virtual_from_version:50362' => 1689,
+ 'old:virtual_from_version:44734' => 1070,
+ 'old:virtual_from_version:46134' => 1077,
+ 'old:virtual_from_version:45344' => 1031,
+ 'old:virtual_from_version:50103' => 1172,
+ 'old:virtual_from_version:47521' => 1077,
+ 'old:virtual_from_version:40697' => 1070,
+ 'old:virtual_from_version:40880' => 1037,
+ 'old:virtual_from_version:50196' => 1172,
+ 'old:virtual_from_version:47559' => 1037,
+ 'old:virtual_from_version:44126' => 1009,
+ 'old:virtual_from_version:42144' => 1070,
+ 'old:virtual_from_version:44977' => 1051,
+ 'old:virtual_from_version:43020' => 2045,
+ 'old:virtual_from_version:49442' => 1580,
+ 'old:virtual_from_version:47400' => 3008,
+ 'old:virtual_from_version:49529' => 1410,
+ 'old:virtual_from_version:42518' => 1009,
+ 'old:virtual_from_version:47249' => 1070,
+ 'old:virtual_from_version:49535' => 3008,
+ 'old:virtual_from_version:49301' => 1136,
+ 'old:virtual_from_version:50351' => 1659,
+ 'old:virtual_from_version:46204' => 1077,
+ 'old:virtual_from_version:40928' => 1077,
+ 'old:virtual_from_version:44348' => 1037,
+ 'old:virtual_from_version:46353' => 1190,
+ 'old:virtual_from_version:49656' => 1070,
+ 'old:virtual_from_version:49063' => 1077,
+ 'old:virtual_from_version:50756' => 1125,
+ 'old:virtual_from_version:47305' => 3042,
+ 'old:virtual_from_version:42407' => 1037,
+ 'old:virtual_from_version:45054' => 1081,
+ 'old:virtual_from_version:44169' => 1136,
+ 'old:virtual_from_version:47041' => 1070,
+ 'old:virtual_from_version:45035' => 1017,
+ 'old:virtual_from_version:45270' => 1019,
+ 'old:virtual_from_version:47838' => 1587,
+ 'old:virtual_from_version:50245' => 1689,
+ 'old:virtual_from_version:44780' => 1070,
+ 'old:virtual_from_version:40842' => 1077,
+ 'old:virtual_from_version:46298' => 1070,
+ 'old:virtual_from_version:42531' => 1070,
+ 'old:virtual_from_version:50528' => 1136,
+ 'old:virtual_from_version:45643' => 1067,
+ 'old:virtual_from_version:42437' => 1077,
+ 'old:virtual_from_version:45797' => 1015,
+ 'old:virtual_from_version:42326' => 1009,
+ 'old:virtual_from_version:44719' => 1025,
+ 'old:virtual_from_version:44961' => 1062,
+ 'old:virtual_from_version:46600' => 1070,
+ 'old:virtual_from_version:45889' => 1077,
+ 'old:virtual_from_version:47734' => 1125,
+ 'old:virtual_from_version:47965' => 3016,
+ 'old:virtual_from_version:42642' => 1077,
+ 'old:virtual_from_version:44566' => 1070,
+ 'old:virtual_from_version:49457' => 1070,
+ 'old:virtual_from_version:50691' => 1689,
+ 'old:virtual_from_version:45313' => 1585,
+ 'old:virtual_from_version:46725' => 1537,
+ 'old:virtual_from_version:47828' => 1125,
+ 'old:virtual_from_version:46796' => 1172,
+ 'old:virtual_from_version:42845' => 1109,
+ 'old:virtual_from_version:44769' => 1489,
+ 'old:virtual_from_version:49699' => 1158,
+ 'old:virtual_from_version:42997' => 1037,
+ 'old:virtual_from_version:47700' => 1070,
+ 'old:virtual_from_version:45745' => 1070,
+ 'old:virtual_from_version:47321' => 1125,
+ 'old:virtual_from_version:46800' => 1666,
+ 'old:virtual_from_version:46673' => 1077,
+ 'old:virtual_from_version:50484' => 1410,
+ 'old:virtual_from_version:47109' => 1070,
+ 'old:virtual_from_version:44067' => 1107,
+ 'old:virtual_from_version:46401' => 1537,
+ 'old:virtual_from_version:47652' => 1070,
+ 'old:virtual_from_version:46946' => 1077,
+ 'old:virtual_from_version:47696' => 1077,
+ 'old:virtual_from_version:50598' => 1136,
+ 'old:virtual_from_version:49639' => 1070,
+ 'old:virtual_from_version:44735' => 1077,
+ 'old:virtual_from_version:47579' => 1077,
+ 'old:virtual_from_version:15764' => 1029,
+ 'old:virtual_from_version:45864' => 1627,
+ 'old:virtual_from_version:50737' => 1585,
+ 'old:virtual_from_version:49175' => 1659,
+ 'old:virtual_from_version:47117' => 1656,
+ 'old:virtual_from_version:40766' => 1107,
+ 'old:virtual_from_version:47121' => 1125,
+ 'old:virtual_from_version:40865' => 1411,
+ 'old:virtual_from_version:45585' => 1136,
+ 'old:virtual_from_version:44052' => 1070,
+ 'old:virtual_from_version:47874' => 1136,
+ 'old:virtual_from_version:42791' => 1222,
+ 'old:virtual_from_version:50037' => 3220,
+ 'old:virtual_from_version:49433' => 1007,
+ 'old:virtual_from_version:44418' => 1030,
+ 'old:virtual_from_version:46884' => 1048,
+ 'old:virtual_from_version:47684' => 1051,
+ 'old:virtual_from_version:45246' => 1070,
+ 'old:virtual_from_version:38518' => 1108,
+ 'old:virtual_from_version:44320' => 1498,
+ 'old:virtual_from_version:44583' => 1037,
+ 'old:virtual_from_version:46874' => 1613,
+ 'old:virtual_from_version:39316' => 1077,
+ 'old:virtual_from_version:40573' => 1077,
+ 'old:virtual_from_version:40562' => 1070,
+ 'old:virtual_from_version:21275' => 1057,
+ 'old:virtual_from_version:40393' => 1344,
+ 'old:virtual_from_version:42795' => 1025,
+ 'old:virtual_from_version:45520' => 1077,
+ 'old:virtual_from_version:44484' => 1125,
+ 'old:virtual_from_version:44537' => 1110,
+ 'old:virtual_from_version:45823' => 1190,
+ 'old:virtual_from_version:49360' => 1077,
+ 'old:virtual_from_version:50254' => 1689,
+ 'old:virtual_from_version:50533' => 1150,
+ 'old:virtual_from_version:46257' => 1517,
+ 'old:virtual_from_version:48002' => 2103,
+ 'old:virtual_from_version:50194' => 3030,
+ 'old:virtual_from_version:45905' => 1070,
+ 'old:virtual_from_version:49808' => 1062,
+ 'old:virtual_from_version:45400' => 1032,
+ 'old:virtual_from_version:42449' => 1077,
+ 'old:virtual_from_version:44573' => 1067,
+ 'old:virtual_from_version:45281' => 1012,
+ 'old:virtual_from_version:49782' => 3194,
+ 'old:virtual_from_version:42390' => 1009,
+ 'old:virtual_from_version:44720' => 1077,
+ 'old:virtual_from_version:44268' => 1084,
+ 'old:virtual_from_version:38964' => 1109,
+ 'old:virtual_from_version:40950' => 1107,
+ 'old:virtual_from_version:49876' => 1172,
+ 'old:virtual_from_version:45501' => 1105,
+ 'old:virtual_from_version:40924' => 1048,
+ 'old:virtual_from_version:49733' => 1015,
+ 'old:virtual_from_version:44061' => 1009,
+ 'old:virtual_from_version:43022' => 2047,
+ 'old:virtual_from_version:45772' => 1077,
+ 'old:virtual_from_version:45319' => 1110,
+ 'old:virtual_from_version:42657' => 1009,
+ 'old:virtual_from_version:44598' => 1057,
+ 'old:virtual_from_version:47746' => 3090,
+ 'old:virtual_from_version:46293' => 1414,
+ 'old:virtual_from_version:42546' => 1172,
+ 'old:virtual_from_version:49374' => 3167,
+ 'old:virtual_from_version:40618' => 1078,
+ 'old:virtual_from_version:42458' => 1136,
+ 'old:virtual_from_version:49740' => 1584,
+ 'old:virtual_from_version:45301' => 1107,
+ 'old:virtual_from_version:40567' => 1115,
+ 'old:virtual_from_version:45969' => 1172,
+ 'old:virtual_from_version:49408' => 1048,
+ 'old:virtual_from_version:43087' => 2081,
+ 'old:virtual_from_version:40807' => 1070,
+ 'old:virtual_from_version:49331' => 1070,
+ 'old:virtual_from_version:43070' => 2070,
+ 'old:virtual_from_version:44016' => 1054,
+ 'old:virtual_from_version:44628' => 1037,
+ 'old:virtual_from_version:42913' => 1070,
+ 'old:virtual_from_version:42165' => 1006,
+ 'old:virtual_from_version:45798' => 1019,
+ 'old:virtual_from_version:46174' => 1077,
+ 'old:virtual_from_version:45958' => 1461,
+ 'old:virtual_from_version:49384' => 1489,
+ 'old:virtual_from_version:50302' => 1025,
+ 'old:virtual_from_version:47152' => 1070,
+ 'old:virtual_from_version:42292' => 1077,
+ 'old:virtual_from_version:47085' => 3008,
+ 'old:virtual_from_version:49562' => 1158,
+ 'old:virtual_from_version:47741' => 1077,
+ 'old:virtual_from_version:48036' => 2079,
+ 'old:virtual_from_version:43063' => 2064,
+ 'old:virtual_from_version:44807' => 1077,
+ 'old:virtual_from_version:49060' => 3094,
+ 'old:virtual_from_version:46956' => 1062,
+ 'old:virtual_from_version:49905' => 3205,
+ 'old:virtual_from_version:44466' => 1107,
+ 'old:virtual_from_version:44789' => 1107,
+ 'old:virtual_from_version:46855' => 1509,
+ 'old:virtual_from_version:49580' => 1035,
+ 'old:virtual_from_version:42926' => 1070,
+ 'old:virtual_from_version:46199' => 1407,
+ 'old:virtual_from_version:45504' => 1532,
+ 'old:virtual_from_version:47087' => 1125,
+ 'old:virtual_from_version:42668' => 1070,
+ 'old:virtual_from_version:42536' => 1000,
+ 'old:virtual_from_version:49097' => 1012,
+ 'old:virtual_from_version:49912' => 1348,
+ 'old:virtual_from_version:45840' => 1107,
+ 'old:virtual_from_version:45363' => 1587,
+ 'old:virtual_from_version:47429' => 1109,
+ 'old:virtual_from_version:42343' => 1077,
+ 'old:virtual_from_version:49385' => 1489,
+ 'old:virtual_from_version:45600' => 1077,
+ 'old:virtual_from_version:47004' => 1070,
+ 'old:virtual_from_version:47468' => 1109,
+ 'old:virtual_from_version:44093' => 1070,
+ 'old:virtual_from_version:45699' => 1070,
+ 'old:virtual_from_version:45314' => 1009,
+ 'old:virtual_from_version:42060' => 1067,
+ 'old:virtual_from_version:42024' => 1037,
+ 'old:virtual_from_version:40377' => 1032,
+ 'old:virtual_from_version:49040' => 1037,
+ 'old:virtual_from_version:42962' => 1110,
+ 'old:virtual_from_version:46761' => 1575,
+ 'old:virtual_from_version:47832' => 1109,
+ 'old:virtual_from_version:44706' => 1077,
+ 'old:virtual_from_version:40898' => 1009,
+ 'old:virtual_from_version:45944' => 1136,
+ 'old:virtual_from_version:50645' => 1070,
+ 'old:virtual_from_version:50121' => 1031,
+ 'old:virtual_from_version:47449' => 1070,
+ 'old:virtual_from_version:44209' => 1009,
+ 'old:virtual_from_version:42869' => 1070,
+ 'old:virtual_from_version:39734' => 1059,
+ 'old:virtual_from_version:49461' => 1404,
+ 'old:virtual_from_version:46828' => 1077,
+ 'old:virtual_from_version:46670' => 1404,
+ 'old:virtual_from_version:44578' => 1048,
+ 'old:virtual_from_version:40584' => 1070,
+ 'old:virtual_from_version:49000' => 1077,
+ 'old:virtual_from_version:42117' => 1328,
+ 'old:virtual_from_version:50718' => 1417,
+ 'old:virtual_from_version:47517' => 1125,
+ 'old:virtual_from_version:50589' => 3259,
+ 'old:virtual_from_version:46958' => 1070,
+ 'old:virtual_from_version:49845' => 1515,
+ 'old:virtual_from_version:44914' => 1517,
+ 'old:virtual_from_version:45325' => 1009,
+ 'old:virtual_from_version:38368' => 1112,
+ 'old:virtual_from_version:49059' => 1666,
+ 'old:virtual_from_version:42902' => 1009,
+ 'old:virtual_from_version:46854' => 3002,
+ 'old:virtual_from_version:46798' => 1077,
+ 'old:virtual_from_version:49018' => 3129,
+ 'old:virtual_from_version:47635' => 1689,
+ 'old:virtual_from_version:44746' => 1007,
+ 'old:virtual_from_version:42906' => 1067,
+ 'old:virtual_from_version:45298' => 1237,
+ 'old:virtual_from_version:40946' => 1077,
+ 'old:virtual_from_version:47084' => 1077,
+ 'old:virtual_from_version:50571' => 3031,
+ 'old:virtual_from_version:45649' => 1136,
+ 'old:virtual_from_version:42037' => 1070,
+ 'old:virtual_from_version:47161' => 3029,
+ 'old:virtual_from_version:42878' => 1007,
+ 'old:virtual_from_version:49258' => 1077,
+ 'old:virtual_from_version:46536' => 1077,
+ 'old:virtual_from_version:44034' => 1077,
+ 'old:virtual_from_version:47295' => 1037,
+ 'old:virtual_from_version:44907' => 1070,
+ 'old:virtual_from_version:50713' => 1070,
+ 'old:virtual_from_version:40904' => 1025,
+ 'old:virtual_from_version:44117' => 1009,
+ 'old:virtual_from_version:45157' => 1051,
+ 'old:virtual_from_version:46812' => 3002,
+ 'old:virtual_from_version:40760' => 1009,
+ 'old:virtual_from_version:49391' => 1095,
+ 'old:virtual_from_version:47386' => 3008,
+ 'old:virtual_from_version:39264' => 1144,
+ 'old:virtual_from_version:47378' => 1077,
+ 'old:virtual_from_version:44580' => 1078,
+ 'old:virtual_from_version:44774' => 1350,
+ 'old:virtual_from_version:45132' => 1009,
+ 'old:virtual_from_version:50425' => 1035,
+ 'old:virtual_from_version:47526' => 1037,
+ 'old:virtual_from_version:44970' => 1043,
+ 'old:virtual_from_version:50652' => 1417,
+ 'old:virtual_from_version:47706' => 1321,
+ 'old:virtual_from_version:44307' => 1125,
+ 'old:virtual_from_version:42013' => 1037,
+ 'old:virtual_from_version:45122' => 1125,
+ 'old:virtual_from_version:45238' => 1136,
+ 'old:virtual_from_version:44471' => 1110,
+ 'old:virtual_from_version:42175' => 1418,
+ 'old:virtual_from_version:49210' => 3155,
+ 'old:virtual_from_version:50206' => 1659,
+ 'old:virtual_from_version:40495' => 1077,
+ 'old:virtual_from_version:46158' => 1077,
+ 'old:virtual_from_version:24814' => 1040,
+ 'old:virtual_from_version:49679' => 3190,
+ 'old:virtual_from_version:45139' => 1009,
+ 'old:virtual_from_version:44141' => 1037,
+ 'old:virtual_from_version:45709' => 1533,
+ 'old:virtual_from_version:42659' => 1077,
+ 'old:virtual_from_version:42694' => 1070,
+ 'old:virtual_from_version:49066' => 3136,
+ 'old:virtual_from_version:42909' => 1025,
+ 'old:virtual_from_version:45839' => 1125,
+ 'old:virtual_from_version:42050' => 1025,
+ 'old:virtual_from_version:45682' => 1027,
+ 'old:virtual_from_version:42032' => 1077,
+ 'old:virtual_from_version:50002' => 3131,
+ 'old:virtual_from_version:49272' => 3078,
+ 'old:virtual_from_version:42942' => 1172,
+ 'old:virtual_from_version:43010' => 2035,
+ 'old:virtual_from_version:45711' => 1009,
+ 'old:virtual_from_version:47800' => 1007,
+ 'old:virtual_from_version:47379' => 1404,
+ 'old:virtual_from_version:45403' => 1125,
+ 'old:virtual_from_version:46162' => 1105,
+ 'old:virtual_from_version:50035' => 3176,
+ 'old:virtual_from_version:49714' => 1489,
+ 'old:virtual_from_version:44650' => 1009,
+ 'old:virtual_from_version:40684' => 1048,
+ 'old:virtual_from_version:44522' => 1107,
+ 'old:virtual_from_version:46295' => 1070,
+ 'old:virtual_from_version:40712' => 1077,
+ 'old:virtual_from_version:44051' => 1107,
+ 'old:virtual_from_version:39042' => 1125,
+ 'old:virtual_from_version:49362' => 1070,
+ 'old:virtual_from_version:44439' => 1067,
+ 'old:virtual_from_version:45906' => 1125,
+ 'old:virtual_from_version:40497' => 1328,
+ 'old:virtual_from_version:46381' => 1109,
+ 'old:virtual_from_version:40591' => 1070,
+ 'old:virtual_from_version:49508' => 1125,
+ 'old:virtual_from_version:42949' => 1070,
+ 'old:virtual_from_version:46984' => 1585,
+ 'old:virtual_from_version:46699' => 1696,
+ 'old:virtual_from_version:46750' => 1699,
+ 'old:virtual_from_version:46292' => 1077,
+ 'old:virtual_from_version:45837' => 1070,
+ 'old:virtual_from_version:50122' => 3131,
+ 'old:virtual_from_version:49702' => 1583,
+ 'old:virtual_from_version:42396' => 1009,
+ 'old:virtual_from_version:49964' => 3211,
+ 'old:virtual_from_version:50153' => 1059,
+ 'old:virtual_from_version:49756' => 1172,
+ 'old:virtual_from_version:46485' => 1105,
+ 'old:virtual_from_version:47689' => 1689,
+ 'old:virtual_from_version:45088' => 1116,
+ 'old:virtual_from_version:40856' => 1009,
+ 'old:virtual_from_version:45085' => 1009,
+ 'old:virtual_from_version:49879' => 3131,
+ 'old:virtual_from_version:49584' => 1136,
+ 'old:virtual_from_version:47022' => 1580,
+ 'old:virtual_from_version:49860' => 1025,
+ 'old:virtual_from_version:39804' => 1088,
+ 'old:virtual_from_version:44427' => 1112,
+ 'old:virtual_from_version:40867' => 1077,
+ 'old:virtual_from_version:49980' => 1070,
+ 'old:virtual_from_version:40976' => 1077,
+ 'old:virtual_from_version:49718' => 1037,
+ 'old:virtual_from_version:46528' => 1070,
+ 'old:virtual_from_version:50095' => 1172,
+ 'old:virtual_from_version:49351' => 1077,
+ 'old:virtual_from_version:47102' => 1070,
+ 'old:virtual_from_version:45159' => 1125,
+ 'old:virtual_from_version:49936' => 1100,
+ 'old:virtual_from_version:46115' => 1517,
+ 'old:virtual_from_version:46328' => 1125,
+ 'old:virtual_from_version:42047' => 1110,
+ 'old:virtual_from_version:46615' => 1063,
+ 'old:virtual_from_version:43038' => 2037,
+ 'old:virtual_from_version:45247' => 1063,
+ 'old:virtual_from_version:42324' => 1172,
+ 'old:virtual_from_version:49540' => 3181,
+ 'old:virtual_from_version:45824' => 1084,
+ 'old:virtual_from_version:46578' => 1077,
+ 'old:virtual_from_version:37911' => 1090,
+ 'old:virtual_from_version:42072' => 1077,
+ 'old:virtual_from_version:42358' => 1025,
+ 'old:virtual_from_version:46943' => 1109,
+ 'old:virtual_from_version:46852' => 1666,
+ 'old:virtual_from_version:45655' => 1077,
+ 'old:virtual_from_version:45413' => 1112,
+ 'old:virtual_from_version:45801' => 1172,
+ 'old:virtual_from_version:40832' => 1123,
+ 'old:virtual_from_version:50513' => 1584,
+ 'old:virtual_from_version:40479' => 1025,
+ 'old:virtual_from_version:40605' => 1025,
+ 'old:virtual_from_version:46643' => 1070,
+ 'old:virtual_from_version:40977' => 1037,
+ 'old:virtual_from_version:50150' => 1172,
+ 'old:virtual_from_version:44683' => 1077,
+ 'old:virtual_from_version:46876' => 1070,
+ 'old:virtual_from_version:47862' => 1404,
+ 'old:virtual_from_version:46860' => 1007,
+ 'old:virtual_from_version:44868' => 1070,
+ 'old:virtual_from_version:45710' => 1070,
+ 'old:virtual_from_version:46075' => 1077,
+ 'old:virtual_from_version:47074' => 1659,
+ 'old:virtual_from_version:45630' => 1172,
+ 'old:virtual_from_version:44328' => 1077,
+ 'old:virtual_from_version:46698' => 1020,
+ 'old:virtual_from_version:45048' => 1037,
+ 'old:virtual_from_version:44497' => 1110,
+ 'old:virtual_from_version:15732' => 1005,
+ 'old:virtual_from_version:44488' => 1023,
+ 'old:virtual_from_version:49427' => 1070,
+ 'old:virtual_from_version:44848' => 1009,
+ 'old:virtual_from_version:46071' => 1070,
+ 'old:virtual_from_version:40433' => 1108,
+ 'old:virtual_from_version:50161' => 3058,
+ 'old:virtual_from_version:47231' => 1070,
+ 'old:virtual_from_version:42304' => 1025,
+ 'old:virtual_from_version:49106' => 3094,
+ 'old:virtual_from_version:49549' => 1410,
+ 'old:virtual_from_version:45648' => 1172,
+ 'old:virtual_from_version:40900' => 1077,
+ 'old:virtual_from_version:44104' => 1125,
+ 'old:virtual_from_version:44930' => 1077,
+ 'old:virtual_from_version:50274' => 3131,
+ 'old:virtual_from_version:43057' => 2057,
+ 'old:virtual_from_version:44145' => 1009,
+ 'old:virtual_from_version:38819' => 1108,
+ 'old:virtual_from_version:46051' => 1025,
+ 'old:virtual_from_version:44607' => 1037,
+ 'old:virtual_from_version:50112' => 1172,
+ 'old:virtual_from_version:44783' => 1070,
+ 'old:virtual_from_version:40372' => 1009,
+ 'old:virtual_from_version:40409' => 1048,
+ 'old:virtual_from_version:45002' => 1025,
+ 'old:virtual_from_version:46139' => 1070,
+ 'old:virtual_from_version:46223' => 1007,
+ 'old:virtual_from_version:42310' => 1037,
+ 'old:virtual_from_version:44649' => 1070,
+ 'old:virtual_from_version:42936' => 1037,
+ 'old:virtual_from_version:47760' => 1109,
+ 'old:virtual_from_version:44208' => 1070,
+ 'old:virtual_from_version:47250' => 1125,
+ 'old:virtual_from_version:42911' => 1037,
+ 'old:virtual_from_version:46503' => 1584,
+ 'old:virtual_from_version:50340' => 1070,
+ 'old:virtual_from_version:50091' => 1125,
+ 'old:virtual_from_version:46973' => 1583,
+ 'old:virtual_from_version:45316' => 1012,
+ 'old:virtual_from_version:50096' => 1009,
+ 'old:virtual_from_version:46683' => 1077,
+ 'old:virtual_from_version:44736' => 1083,
+ 'old:virtual_from_version:44007' => 1311,
+ 'old:virtual_from_version:49088' => 3139,
+ 'old:virtual_from_version:46414' => 1077,
+ 'old:virtual_from_version:44623' => 1025,
+ 'old:virtual_from_version:42107' => 1105,
+ 'old:virtual_from_version:44369' => 1069,
+ 'old:virtual_from_version:45838' => 1362,
+ 'old:virtual_from_version:42062' => 1025,
+ 'old:virtual_from_version:46461' => 1062,
+ 'old:virtual_from_version:47372' => 3008,
+ 'old:virtual_from_version:46468' => 1404,
+ 'old:virtual_from_version:49450' => 3176,
+ 'old:virtual_from_version:47393' => 1697,
+ 'old:virtual_from_version:47843' => 3114,
+ 'old:virtual_from_version:44105' => 1107,
+ 'old:virtual_from_version:45584' => 1172,
+ 'old:virtual_from_version:45684' => 1615,
+ 'old:virtual_from_version:47154' => 1017,
+ 'old:virtual_from_version:49136' => 1012,
+ 'old:virtual_from_version:42722' => 1025,
+ 'old:virtual_from_version:50730' => 3273,
+ 'old:virtual_from_version:42157' => 1416,
+ 'old:virtual_from_version:46793' => 3000,
+ 'old:virtual_from_version:45320' => 1125,
+ 'old:virtual_from_version:45455' => 1136,
+ 'old:virtual_from_version:49051' => 3114,
+ 'old:virtual_from_version:44196' => 1007,
+ 'old:virtual_from_version:39152' => 1125,
+ 'old:virtual_from_version:45462' => 1077,
+ 'old:virtual_from_version:44388' => 1065,
+ 'old:virtual_from_version:45285' => 1031,
+ 'old:virtual_from_version:49284' => 3146,
+ 'old:virtual_from_version:49625' => 3183,
+ 'old:virtual_from_version:50739' => 3259,
+ 'old:virtual_from_version:46977' => 1125,
+ 'old:virtual_from_version:49780' => 1489,
+ 'old:virtual_from_version:39585' => 1404,
+ 'old:virtual_from_version:50133' => 3131,
+ 'old:virtual_from_version:38683' => 1067,
+ 'old:virtual_from_version:47367' => 1070,
+ 'old:virtual_from_version:42514' => 1048,
+ 'old:virtual_from_version:45712' => 1077,
+ 'old:virtual_from_version:45415' => 1444,
+ 'old:virtual_from_version:50203' => 1689,
+ 'old:virtual_from_version:47205' => 1125,
+ 'old:virtual_from_version:45794' => 1107,
+ 'old:virtual_from_version:45125' => 1009,
+ 'old:virtual_from_version:42781' => 1048,
+ 'old:virtual_from_version:50344' => 3192,
+ 'old:virtual_from_version:49065' => 3094,
+ 'old:virtual_from_version:49778' => 1112,
+ 'old:virtual_from_version:49972' => 3209,
+ 'old:virtual_from_version:45747' => 1027,
+ 'old:virtual_from_version:47366' => 1037,
+ 'old:virtual_from_version:40913' => 1070,
+ 'old:virtual_from_version:35710' => 1017,
+ 'old:virtual_from_version:47210' => 1321,
+ 'old:virtual_from_version:45156' => 1404,
+ 'old:virtual_from_version:46339' => 1105,
+ 'old:virtual_from_version:42281' => 1423,
+ 'old:virtual_from_version:45417' => 1136,
+ 'old:virtual_from_version:44458' => 1112,
+ 'old:virtual_from_version:42285' => 1222,
+ 'old:virtual_from_version:40546' => 1116,
+ 'old:virtual_from_version:40170' => 1076,
+ 'old:virtual_from_version:42532' => 1077,
+ 'old:virtual_from_version:45093' => 1105,
+ 'old:virtual_from_version:36614' => 1006,
+ 'old:virtual_from_version:44925' => 1077,
+ 'old:virtual_from_version:47835' => 1077,
+ 'old:virtual_from_version:49518' => 1025,
+ 'old:virtual_from_version:47581' => 1568,
+ 'old:virtual_from_version:50364' => 1035,
+ 'old:virtual_from_version:47433' => 1689,
+ 'old:virtual_from_version:43088' => 2082,
+ 'old:virtual_from_version:45771' => 1025,
+ 'old:virtual_from_version:47010' => 3015,
+ 'old:virtual_from_version:42049' => 1009,
+ 'old:virtual_from_version:47488' => 1172,
+ 'old:virtual_from_version:44621' => 1070,
+ 'old:virtual_from_version:50098' => 3221,
+ 'old:virtual_from_version:45451' => 1077,
+ 'old:virtual_from_version:50086' => 1172,
+ 'old:virtual_from_version:47142' => 3025,
+ 'old:virtual_from_version:38340' => 1070,
+ 'old:virtual_from_version:46494' => 1321,
+ 'old:virtual_from_version:39993' => 2008,
+ 'old:virtual_from_version:40245' => 1152,
+ 'old:virtual_from_version:49683' => 1070,
+ 'old:virtual_from_version:47174' => 1077,
+ 'old:virtual_from_version:50649' => 1067,
+ 'old:virtual_from_version:46605' => 1077,
+ 'old:virtual_from_version:40291' => 1110,
+ 'old:virtual_from_version:41006' => 1168,
+ 'old:virtual_from_version:40046' => 1007,
+ 'old:virtual_from_version:46691' => 1125,
+ 'old:virtual_from_version:50369' => 3131,
+ 'old:virtual_from_version:44331' => 1070,
+ 'old:virtual_from_version:42200' => 1009,
+ 'old:virtual_from_version:45746' => 1125,
+ 'old:virtual_from_version:44215' => 1109
+}.freeze
diff --git a/lib/tasks/generate_component_previews.rake b/lib/tasks/generate_component_previews.rake
index 2bc61c28b3..6e1e978a1a 100644
--- a/lib/tasks/generate_component_previews.rake
+++ b/lib/tasks/generate_component_previews.rake
@@ -1,31 +1,33 @@
+# frozen_string_literal: true
+
# lib/tasks/generate_component_previews.rake
namespace :component_previews do
- desc "Generate previews for all components"
+ desc 'Generate previews for all components'
task generate: :environment do
- components_path = Rails.root.join("app/components")
+ components_path = Rails.root.join('app/components')
components = Dir.glob("#{components_path}/**/*_component.rb")
components.each do |component_path|
- component_name = File.basename(component_path, "_component.rb")
+ component_name = File.basename(component_path, '_component.rb')
preview_path = Rails.root.join("test/components/previews/#{component_name}_preview.rb")
# Skip if the preview already exists
next if File.exist?(preview_path)
- File.open(preview_path, "w") do |file|
+ File.open(preview_path, 'w') do |file|
file.puts("class #{component_name.camelize}Preview < ViewComponent::Preview")
- file.puts(" def default")
- file.puts(" # Initialize the component with any necessary data")
+ file.puts(' def default')
+ file.puts(' # Initialize the component with any necessary data')
file.puts(" component = #{component_name.camelize}Component.new")
- file.puts(" # Add any necessary data or context to the component")
- file.puts(" # component.some_data = some_value")
+ file.puts(' # Add any necessary data or context to the component')
+ file.puts(' # component.some_data = some_value')
- file.puts(" # Render the component")
- file.puts(" render(component)")
- file.puts(" end")
- file.puts("end")
+ file.puts(' # Render the component')
+ file.puts(' render(component)')
+ file.puts(' end')
+ file.puts('end')
end
puts "Generated preview for #{component_name}"
diff --git a/package.json b/package.json
index d5003c910e..c1c7190c8a 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,17 @@
"vis-util": "^5.0.3"
},
"scripts": {
- "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds"
+ "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds",
+ "lint": "standard 'app/**/*.js'",
+ "lint:fix": "standard --fix 'app/*/*.js'"
+ },
+ "devDependencies": {
+ "eslint": "^8.52.0",
+ "eslint-config-standard": "^17.1.0",
+ "eslint-plugin-import": "^2.29.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-standard": "^5.0.0",
+ "standard": "^17.1.0"
}
}
diff --git a/public/dispatch.fcgi b/public/dispatch.fcgi
index 65188f380b..d01539c2f4 100755
--- a/public/dispatch.fcgi
+++ b/public/dispatch.fcgi
@@ -1,4 +1,6 @@
#!/usr/local/bin/ruby
+# frozen_string_literal: true
+
#
# You may specify the path to the FastCGI crash log (a log of unhandled
# exceptions which forced the FastCGI instance to exit, great for debugging)
@@ -18,7 +20,7 @@
# # Custom log path, normal GC behavior.
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
#
-require File.dirname(__FILE__) + "/../config/environment"
+require "#{File.dirname(__FILE__)}/../config/environment"
require 'fcgi_handler'
RailsFCGIHandler.process!
diff --git a/public/dispatch.rb b/public/dispatch.rb
index 4e7790d9ab..e1b6507eab 100755
--- a/public/dispatch.rb
+++ b/public/dispatch.rb
@@ -1,10 +1,15 @@
#!/usr/local/bin/ruby
+# frozen_string_literal: true
-require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails.root)
+require "#{File.dirname(__FILE__)}/../config/environment" unless defined?(Rails.root)
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
-require "dispatcher"
+require 'dispatcher'
-ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
-Dispatcher.dispatch
\ No newline at end of file
+if defined?(Apache::RubyRun)
+ ADDITIONAL_LOAD_PATHS.reverse.each do |dir|
+ $LOAD_PATH.unshift(dir) if File.directory?(dir)
+ end
+end
+Dispatcher.dispatch
diff --git a/script/about b/script/about
index 7b07d46a30..ceed20557a 100755
--- a/script/about
+++ b/script/about
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/about'
\ No newline at end of file
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../config/boot"
+require 'commands/about'
diff --git a/script/breakpointer b/script/breakpointer
index 64af76edd4..1f7bb7d518 100755
--- a/script/breakpointer
+++ b/script/breakpointer
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/breakpointer'
\ No newline at end of file
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../config/boot"
+require 'commands/breakpointer'
diff --git a/script/console b/script/console
index f3a605b74c..c7bdaf4b01 100755
--- a/script/console
+++ b/script/console
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
require_relative '../config/boot'
-require 'commands/console'
\ No newline at end of file
+require 'commands/console'
diff --git a/script/dbconsole b/script/dbconsole
index 83c8436a9d..e1e4c57a8a 100755
--- a/script/dbconsole
+++ b/script/dbconsole
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.expand_path('../../config/boot', __FILE__)
+# frozen_string_literal: true
+
+require File.expand_path('../config/boot', __dir__)
require 'commands/dbconsole'
diff --git a/script/destroy b/script/destroy
index fa0e6fcd0b..e7d7fd69b2 100755
--- a/script/destroy
+++ b/script/destroy
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/destroy'
\ No newline at end of file
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../config/boot"
+require 'commands/destroy'
diff --git a/script/generate b/script/generate
index ef976e09f3..0bf19c07d6 100755
--- a/script/generate
+++ b/script/generate
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/generate'
\ No newline at end of file
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../config/boot"
+require 'commands/generate'
diff --git a/script/performance/benchmarker b/script/performance/benchmarker
index c842d35d33..7a5eb146fa 100755
--- a/script/performance/benchmarker
+++ b/script/performance/benchmarker
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../../config/boot"
require 'commands/performance/benchmarker'
diff --git a/script/performance/profiler b/script/performance/profiler
index d855ac8b13..1a50743ef5 100755
--- a/script/performance/profiler
+++ b/script/performance/profiler
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../../config/boot"
require 'commands/performance/profiler'
diff --git a/script/plugin b/script/plugin
index 4a9a20a5a2..6a83b0b70b 100755
--- a/script/plugin
+++ b/script/plugin
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.expand_path('../../config/boot', __FILE__)
-require 'commands/plugin'
\ No newline at end of file
+# frozen_string_literal: true
+
+require File.expand_path('../config/boot', __dir__)
+require 'commands/plugin'
diff --git a/script/process/inspector b/script/process/inspector
index bf25ad86d1..0cbddd7d22 100755
--- a/script/process/inspector
+++ b/script/process/inspector
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../../config/boot"
require 'commands/process/inspector'
diff --git a/script/process/reaper b/script/process/reaper
index c77f04535f..435474d885 100755
--- a/script/process/reaper
+++ b/script/process/reaper
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../../config/boot"
require 'commands/process/reaper'
diff --git a/script/process/spawner b/script/process/spawner
index 7118f3983c..08c5f32cc6 100755
--- a/script/process/spawner
+++ b/script/process/spawner
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../../config/boot"
require 'commands/process/spawner'
diff --git a/script/rails b/script/rails
index f8da2cffd4..e1068b282c 100755
--- a/script/rails
+++ b/script/rails
@@ -1,6 +1,8 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
+APP_PATH = File.expand_path('../config/application', __dir__)
+require File.expand_path('../config/boot', __dir__)
require 'rails/commands'
diff --git a/script/runner b/script/runner
index ccc30f9d24..0d4a2fae90 100755
--- a/script/runner
+++ b/script/runner
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/runner'
\ No newline at end of file
+# frozen_string_literal: true
+
+require "#{File.dirname(__FILE__)}/../config/boot"
+require 'commands/runner'
diff --git a/script/server b/script/server
index ece2450965..6c1d5f63d6 100755
--- a/script/server
+++ b/script/server
@@ -1,3 +1,5 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
require_relative '../config/boot'
-require 'commands/server'
\ No newline at end of file
+require 'commands/server'
diff --git a/script/ssl_server b/script/ssl_server
index 91ab6b08f9..4d7b5ed235 100755
--- a/script/ssl_server
+++ b/script/ssl_server
@@ -1,4 +1,6 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
require_relative '../config/boot'
require 'active_support'
@@ -19,35 +21,40 @@ rescue Exception
end
options = {
- :Port => 443,
- :Host => "0.0.0.0",
- :environment => (Rails.env || "development").dup,
- :config => Rails.root + "/config.ru",
- :detach => false,
- :debugger => false,
- :path => nil,
- :SSLEnable => true,
- :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
- :SSLCertName => [ [ "CN", WEBrick::Utils::getservername ] ]
+ Port: 443,
+ Host: '0.0.0.0',
+ environment: (Rails.env || 'development').dup,
+ config: "#{Rails.root}/config.ru",
+ detach: false,
+ debugger: false,
+ path: nil,
+ SSLEnable: true,
+ SSLVerifyClient: OpenSSL::SSL::VERIFY_NONE,
+ SSLCertName: [['CN', WEBrick::Utils.getservername]]
}
ARGV.clone.options do |opts|
- opts.on("-p", "--port=port", Integer,
- "Runs Rails on the specified port.", "Default: 3000") { |v| options[:Port] = v }
- opts.on("-b", "--binding=ip", String,
- "Binds Rails to the specified ip.", "Default: 0.0.0.0") { |v| options[:Host] = v }
- opts.on("-c", "--config=file", String,
- "Use custom rackup configuration file") { |v| options[:config] = v }
- opts.on("-d", "--daemon", "Make server run as a Daemon.") { options[:detach] = true }
- opts.on("-u", "--debugger", "Enable ruby-debugging for the server.") { options[:debugger] = true }
- opts.on("-e", "--environment=name", String,
- "Specifies the environment to run this server under (test/development/production).",
- "Default: development") { |v| options[:environment] = v }
- opts.on("-P", "--path=/path", String, "Runs Rails app mounted at a specific path.", "Default: /") { |v| options[:path] = v }
-
- opts.separator ""
-
- opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
+ opts.on('-p', '--port=port', Integer,
+ 'Runs Rails on the specified port.', 'Default: 3000') { |v| options[:Port] = v }
+ opts.on('-b', '--binding=ip', String,
+ 'Binds Rails to the specified ip.', 'Default: 0.0.0.0') { |v| options[:Host] = v }
+ opts.on('-c', '--config=file', String,
+ 'Use custom rackup configuration file') { |v| options[:config] = v }
+ opts.on('-d', '--daemon', 'Make server run as a Daemon.') { options[:detach] = true }
+ opts.on('-u', '--debugger', 'Enable ruby-debugging for the server.') { options[:debugger] = true }
+ opts.on('-e', '--environment=name', String,
+ 'Specifies the environment to run this server under (test/development/production).',
+ 'Default: development') { |v| options[:environment] = v }
+ opts.on('-P', '--path=/path', String, 'Runs Rails app mounted at a specific path.', 'Default: /') do |v|
+ options[:path] = v
+ end
+
+ opts.separator ''
+
+ opts.on('-h', '--help', 'Show this help message.') do
+ puts opts
+ exit
+ end
opts.parse!
end
@@ -57,14 +64,14 @@ server = Rack::Handler::WEBrick
puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}"
puts "=> Rails #{Rails.version} application starting on http://#{options[:Host]}:#{options[:Port]}#{options[:path]}"
-%w(cache pids sessions sockets).each do |dir_to_make|
+%w[cache pids sessions sockets].each do |dir_to_make|
FileUtils.mkdir_p(Rails.root.join('tmp', dir_to_make))
end
if options[:detach]
Process.daemon
pid = "#{Rails.root}/tmp/pids/server.pid"
- File.open(pid, 'w'){ |f| f.write(Process.pid) }
+ File.open(pid, 'w') { |f| f.write(Process.pid) }
at_exit { File.delete(pid) if File.exist?(pid) }
end
@@ -75,10 +82,8 @@ if File.exist?(options[:config])
config = options[:config]
if config =~ /\.ru$/
cfgfile = File.read(config)
- if cfgfile[/^#\\(.*)/]
- opts.parse!($1.split(/\s+/))
- end
- inner_app = eval("Rack::Builder.new {( " + cfgfile + "\n )}.to_app", nil, config)
+ opts.parse!(Regexp.last_match(1).split(/\s+/)) if cfgfile[/^#\\(.*)/]
+ inner_app = eval("Rack::Builder.new {( #{cfgfile}\n )}.to_app", nil, __FILE__, __LINE__)
else
require config
inner_app = Object.const_get(File.basename(config, '.rb').capitalize)
@@ -89,29 +94,29 @@ else
end
if options[:path].nil?
- map_path = "/"
+ map_path = '/'
else
ActionController::Base.relative_url_root = options[:path]
map_path = options[:path]
end
-app = Rack::Builder.new {
+app = Rack::Builder.new do
use Rails::Rack::LogTailer unless options[:detach]
use Rails::Rack::Debugger if options[:debugger]
map map_path do
use Rails::Rack::Static
run inner_app
end
-}.to_app
+end.to_app
-puts "=> Call with -d to detach"
+puts '=> Call with -d to detach'
trap(:INT) { exit }
-puts "=> Ctrl-C to shutdown server"
+puts '=> Ctrl-C to shutdown server'
begin
- server.run(app, options.merge(:AccessLog => []))
+ server.run(app, options.merge(AccessLog: []))
ensure
puts 'Exiting'
-end
\ No newline at end of file
+end
diff --git a/spec/components/alerts_container_component_spec.rb b/spec/components/alerts_container_component_spec.rb
index 582e620dab..6f6716932f 100644
--- a/spec/components/alerts_container_component_spec.rb
+++ b/spec/components/alerts_container_component_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "rails_helper"
+require 'rails_helper'
RSpec.describe AlertsContainerComponent, type: :component do
pending "add some examples to (or delete) #{__FILE__}"
diff --git a/spec/components/turbo_frame_component_spec.rb b/spec/components/turbo_frame_component_spec.rb
index 8576d9d0f4..0622812371 100644
--- a/spec/components/turbo_frame_component_spec.rb
+++ b/spec/components/turbo_frame_component_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "rails_helper"
+require 'rails_helper'
RSpec.describe TurboFrameComponent, type: :component do
pending "add some examples to (or delete) #{__FILE__}"
diff --git a/spec/components/turbo_modal_component_spec.rb b/spec/components/turbo_modal_component_spec.rb
index ba4d1402af..239c018042 100644
--- a/spec/components/turbo_modal_component_spec.rb
+++ b/spec/components/turbo_modal_component_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "rails_helper"
+require 'rails_helper'
RSpec.describe TurboModalComponent, type: :component do
pending "add some examples to (or delete) #{__FILE__}"
diff --git a/spec/mailers/subscribe_spec.rb b/spec/mailers/subscribe_spec.rb
index a2b7391c33..0fd890c223 100644
--- a/spec/mailers/subscribe_spec.rb
+++ b/spec/mailers/subscribe_spec.rb
@@ -1,35 +1,33 @@
-require "rails_helper"
+# frozen_string_literal: true
+
+require 'rails_helper'
RSpec.describe SubscribeMailer, type: :mailer do
-
- describe "register for announce list" do
- let(:mail) { SubscribeMailer.register_for_announce_list("user@lirmm.fr","user_fn","user_ln") }
+ describe 'register for announce list' do
+ let(:mail) { SubscribeMailer.register_for_announce_list('user@lirmm.fr', 'user_fn', 'user_ln') }
- it "renders the headers" do
+ it 'renders the headers' do
expect(mail.subject).to eq("subscribe #{$ANNOUNCE_LIST} user_fn user_ln")
expect(mail.to).to eq([$ANNOUNCE_SERVICE_HOST])
- expect(mail.from).to eq(["user@lirmm.fr"])
+ expect(mail.from).to eq(['user@lirmm.fr'])
end
- it "renders the body" do
- expect(mail.body.encoded).to match("")
+ it 'renders the body' do
+ expect(mail.body.encoded).to match('')
end
-
end
- describe "unregister for announce list" do
- let(:mail) { SubscribeMailer.unregister_for_announce_list("user@lirmm.fr") }
+ describe 'unregister for announce list' do
+ let(:mail) { SubscribeMailer.unregister_for_announce_list('user@lirmm.fr') }
- it "renders the headers" do
+ it 'renders the headers' do
expect(mail.subject).to eq("unsubscribe #{$ANNOUNCE_LIST}")
expect(mail.to).to eq([$ANNOUNCE_SERVICE_HOST])
- expect(mail.from).to eq(["user@lirmm.fr"])
+ expect(mail.from).to eq(['user@lirmm.fr'])
end
- it "renders the body" do
- expect(mail.body.encoded).to match("")
+ it 'renders the body' do
+ expect(mail.body.encoded).to match('')
end
-
end
-
end
diff --git a/spec/models/license_spec.rb b/spec/models/license_spec.rb
index a5fc0d775d..948cf4040b 100644
--- a/spec/models/license_spec.rb
+++ b/spec/models/license_spec.rb
@@ -1,11 +1,12 @@
+# frozen_string_literal: true
+
require 'rails_helper'
RSpec.describe License, type: :model do
-
include ActiveSupport::Testing::TimeHelpers
# Decryption of below variable: "841b4f58-02e1-4a66-9e27-191f15e16279;Microsoft Corporation;2021-02-14".
- let (:encrypted_license_key) {
+ let(:encrypted_license_key) do
<<~HEREDOC
ds938nK0sdu8AzhtGefz0r7JTH97ncQfuokmwYLGHYbQF4CA1lWVHWwWoM/W\
lzvZlDSE/WSLvXKefOXk6+yrelKgUMcnLy1Q5o6E+jJW6uia77Ivv6Hxl445\
@@ -16,18 +17,18 @@
|a6Bh755yqiviJBFm/XAMS/lA1hhYjR5SKrnQ5vb4/osMutu91j9Z/BSNIknD\
Ia5kNAhlV6Ie0UkjjMbRgAr471TdLFcy2fB05BwG14JU1GM=
HEREDOC
- }
+ end
- # This license key was generated using the staging license server, and the
+ # This license key was generated using the staging license server, and the
# encoded appliance ID matches that of the BioPortal staging environment.
- #
+ #
# Staging license server: https://license.stage.ontoportal.org
# Staging BioPortal instance: https://stage.bioontology.org/
# License information for this encrypted key: https://license.stage.ontoportal.org/licenses/1077
#
# Decryption of below variable: "dd212a7c-29fd-4142-8353-f59a19a79738;BMIR;2021-04-20"
#
- let (:encrypted_license_key_staging_env) {
+ let(:encrypted_license_key_staging_env) do
<<~HEREDOC
WtlzkakMaAKx7NwyuHRnCDVSMQszaEtv7jNiVgBcg9kQeNS69ToFp9Nhvb8F
AANaHtSibb6InYemQABpq+sONg9cp4+pfCTAh5ETmyF8GPrWiwv8DZstMRUO
@@ -38,67 +39,66 @@
|Sf6udPHZJB3CSRQBRw8CjB4nHEspfpg4fM7NwStIfXhfiDx0W0P0+9NiQkIh
0VlkhKD3ev0hnSDi/x/GazByvg==
HEREDOC
- }
+ end
- it do "decrypts license data"
+ it do
license = License.create(encrypted_key: encrypted_license_key_staging_env)
- expect(license.appliance_id).to eq("dd212a7c-29fd-4142-8353-f59a19a79738")
- expect(license.organization).to eq("BMIR")
- expect(license.expiry_date).to eq(Date.parse("2021-04-20"))
+ expect(license.appliance_id).to eq('dd212a7c-29fd-4142-8353-f59a19a79738')
+ expect(license.organization).to eq('BMIR')
+ expect(license.expiry_date).to eq(Date.parse('2021-04-20'))
end
- it do "is a trial license"
- license = License.new(encrypted_key: "trial", created_at: Time.current)
+ it do
+ license = License.new(encrypted_key: 'trial', created_at: Time.current)
expect(license.is_trial?).to eq(true)
end
- it do "is not a trial license"
+ it do
license = License.new(encrypted_key: encrypted_license_key)
expect(license.is_trial?).to eq(false)
end
- it do "is in trial period"
- license = License.create(encrypted_key: "trial", created_at: Time.current)
-
+ it do
+ license = License.create(encrypted_key: 'trial', created_at: Time.current)
+
travel 15.days do
expect(license.days_remaining).to be > 0
end
end
- it do "is out of trial after trial period"
- license = License.create(encrypted_key: "trial", created_at: Time.current)
+ it do
+ license = License.create(encrypted_key: 'trial', created_at: Time.current)
travel 31.days do
expect(license.days_remaining).to eq(0)
end
end
- it do "calculates days remaining"
+ it do
license = License.create(encrypted_key: encrypted_license_key_staging_env)
- travel_to(Date.parse("2021-03-21")) do
+ travel_to(Date.parse('2021-03-21')) do
expect(license.days_remaining).to eq(30)
end
- travel_to(Date.parse("2021-04-19")) do
+ travel_to(Date.parse('2021-04-19')) do
expect(license.days_remaining).to eq(1)
end
- travel_to(Date.parse("2021-04-20")) do
+ travel_to(Date.parse('2021-04-20')) do
expect(license.days_remaining).to eq(0)
end
- travel_to(Date.parse("2021-05-01")) do
+ travel_to(Date.parse('2021-05-01')) do
expect(license.days_remaining).to eq(0)
end
end
- describe "validation" do
-
- let (:encrypted_license_key_with_missing_characters) {
+ describe 'validation' do
+ let(:encrypted_license_key_with_missing_characters) do
<<~HEREDOC
ds938nK0sdu8AzhtGefz0r7JTH97ncQfuokmwYLGHYbQF4CA1lWVHWwWoM/W\
lzvZlDSE/WSLvXKefOXk6+yrelKgUMcnLy1Q5o6E+jJW6uia77Ivv6Hxl445\
@@ -109,28 +109,28 @@
|a6Bh755yqiviJBFm/XAMS/lA1hhYjR5SKrnQ5vb4/osMutu91j9Z/BSNIknD\
Ia5kNAhlV6Ie0UkjjMbRgAr471TdLFcy2fB05BwG14JU
HEREDOC
- }
+ end
- it "blocks malformed keys" do
+ it 'blocks malformed keys' do
license = License.new(encrypted_key: encrypted_license_key_with_missing_characters)
license.valid?
expect(license).to be_invalid
- expect(license.errors[:encrypted_key]).to include I18n.t("activerecord.errors.models.license.attributes.encrypted_key.invalid_license_key")
+ expect(license.errors[:encrypted_key]).to include I18n.t('activerecord.errors.models.license.attributes.encrypted_key.invalid_license_key')
end
- it "blocks invalid keys" do
- license = License.create(encrypted_key: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua")
+ it 'blocks invalid keys' do
+ license = License.create(encrypted_key: 'lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua')
license.valid?
expect(license).to be_invalid
- expect(license.errors[:encrypted_key]).to include I18n.t("activerecord.errors.models.license.attributes.encrypted_key.invalid_license_key")
+ expect(license.errors[:encrypted_key]).to include I18n.t('activerecord.errors.models.license.attributes.encrypted_key.invalid_license_key')
end
- it "allows trial licenses" do
- license = License.new(encrypted_key: "trial")
+ it 'allows trial licenses' do
+ license = License.new(encrypted_key: 'trial')
license.valid?
@@ -138,7 +138,7 @@
expect(license.errors).to be_empty
end
- it "allows valid keys" do
+ it 'allows valid keys' do
license = License.new(encrypted_key: encrypted_license_key_staging_env)
license.valid?
@@ -147,26 +147,22 @@
expect(license.errors).to be_empty
end
- it "blocks licenses with mismatches between encoded appliance IDs and actual" do
+ it 'blocks licenses with mismatches between encoded appliance IDs and actual' do
license = License.new(encrypted_key: encrypted_license_key)
license.save
- expect(license.errors[:encrypted_key]).to include "is an appliance ID mismatch"
+ expect(license.errors[:encrypted_key]).to include 'is an appliance ID mismatch'
end
-
end
- describe ".current_license" do
-
- it "should return the latest license" do
- new_license = License.create(encrypted_key: encrypted_license_key_staging_env, created_at: Time.now + 1.day)
+ describe '.current_license' do
+ it 'should return the latest license' do
+ License.create(encrypted_key: encrypted_license_key_staging_env, created_at: Time.now + 1.day)
newer_license = License.create(encrypted_key: encrypted_license_key_staging_env, created_at: Time.now + 2.days)
expect(License.current_license.count).to eql(1)
expect(License.current_license.first).to eql(newer_license)
end
-
end
-
end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index b06351ba45..3920bb88ee 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
@@ -5,7 +7,7 @@
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
-abort("The Rails environment is running in production mode!") if Rails.env.production?
+abort('The Rails environment is running in production mode!') if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index ce33d66df6..01f7c97442 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -44,53 +46,51 @@
# triggering implicit auto-inclusion in groups with matching metadata.
config.shared_context_metadata_behavior = :apply_to_host_groups
-# The settings below are suggested to provide a good initial experience
-# with RSpec, but feel free to customize to your heart's content.
-=begin
- # This allows you to limit a spec run to individual examples or groups
- # you care about by tagging them with `:focus` metadata. When nothing
- # is tagged with `:focus`, all examples get run. RSpec also provides
- # aliases for `it`, `describe`, and `context` that include `:focus`
- # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
- config.filter_run_when_matching :focus
-
- # Allows RSpec to persist some state between runs in order to support
- # the `--only-failures` and `--next-failure` CLI options. We recommend
- # you configure your source control system to ignore this file.
- config.example_status_persistence_file_path = "spec/examples.txt"
-
- # Limits the available syntax to the non-monkey patched syntax that is
- # recommended. For more details, see:
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
- config.disable_monkey_patching!
-
- # Many RSpec users commonly either run the entire suite or an individual
- # file, and it's useful to allow more verbose output when running an
- # individual spec file.
- if config.files_to_run.one?
- # Use the documentation formatter for detailed output,
- # unless a formatter has already been configured
- # (e.g. via a command-line flag).
- config.default_formatter = "doc"
- end
-
- # Print the 10 slowest examples and example groups at the
- # end of the spec run, to help surface which specs are running
- # particularly slow.
- config.profile_examples = 10
-
- # Run specs in random order to surface order dependencies. If you find an
- # order dependency and want to debug it, you can fix the order by providing
- # the seed, which is printed after each run.
- # --seed 1234
- config.order = :random
-
- # Seed global randomization in this process using the `--seed` CLI option.
- # Setting this allows you to use `--seed` to deterministically reproduce
- # test failures related to randomization by passing the same `--seed` value
- # as the one that triggered the failure.
- Kernel.srand config.seed
-=end
+ # The settings below are suggested to provide a good initial experience
+ # with RSpec, but feel free to customize to your heart's content.
+ # # This allows you to limit a spec run to individual examples or groups
+ # # you care about by tagging them with `:focus` metadata. When nothing
+ # # is tagged with `:focus`, all examples get run. RSpec also provides
+ # # aliases for `it`, `describe`, and `context` that include `:focus`
+ # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+ # config.filter_run_when_matching :focus
+ #
+ # # Allows RSpec to persist some state between runs in order to support
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
+ # # you configure your source control system to ignore this file.
+ # config.example_status_persistence_file_path = "spec/examples.txt"
+ #
+ # # Limits the available syntax to the non-monkey patched syntax that is
+ # # recommended. For more details, see:
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
+ # config.disable_monkey_patching!
+ #
+ # # Many RSpec users commonly either run the entire suite or an individual
+ # # file, and it's useful to allow more verbose output when running an
+ # # individual spec file.
+ # if config.files_to_run.one?
+ # # Use the documentation formatter for detailed output,
+ # # unless a formatter has already been configured
+ # # (e.g. via a command-line flag).
+ # config.default_formatter = "doc"
+ # end
+ #
+ # # Print the 10 slowest examples and example groups at the
+ # # end of the spec run, to help surface which specs are running
+ # # particularly slow.
+ # config.profile_examples = 10
+ #
+ # # Run specs in random order to surface order dependencies. If you find an
+ # # order dependency and want to debug it, you can fix the order by providing
+ # # the seed, which is printed after each run.
+ # # --seed 1234
+ # config.order = :random
+ #
+ # # Seed global randomization in this process using the `--seed` CLI option.
+ # # Setting this allows you to use `--seed` to deterministically reproduce
+ # # test failures related to randomization by passing the same `--seed` value
+ # # as the one that triggered the failure.
+ # Kernel.srand config.seed
end
diff --git a/test/components/previews/buttons/chip_button_component_preview.rb b/test/components/previews/buttons/chip_button_component_preview.rb
index 9ac36c8a30..0b24f1fa23 100644
--- a/test/components/previews/buttons/chip_button_component_preview.rb
+++ b/test/components/previews/buttons/chip_button_component_preview.rb
@@ -1,19 +1,19 @@
-class Buttons::ChipButtonComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+module Buttons
+ class ChipButtonComponentPreview < ViewComponent::Preview
# @param url text
# @param text text
- def standard(url: "nil", text: "text")
- render(ChipButtonComponent.new(url: url, text: text, type: "static"))
+ def standard(url: 'nil', text: 'text')
+ render(ChipButtonComponent.new(url: url, text: text, type: 'static'))
end
# @param url text
# @param text text
- def clickable(url: "nil", text: "text")
- render(ChipButtonComponent.new(url: url, text: text, type: "clickable"))
+ def clickable(url: 'nil', text: 'text')
+ render(ChipButtonComponent.new(url: url, text: text, type: 'clickable'))
end
-
-
-
-end
\ No newline at end of file
+ end
+end
diff --git a/test/components/previews/buttons/ontology_subscribe_button_component_preview.rb b/test/components/previews/buttons/ontology_subscribe_button_component_preview.rb
index 4d9c2b56dd..1fba614b3d 100644
--- a/test/components/previews/buttons/ontology_subscribe_button_component_preview.rb
+++ b/test/components/previews/buttons/ontology_subscribe_button_component_preview.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
-class Buttons::OntologySubscribeButtonComponentPreview < ViewComponent::Preview
- def default
- render OntologySubscribeButtonComponent.new(ontology_id: '', subscribed: true, user_id: '')
+module Buttons
+ class OntologySubscribeButtonComponentPreview < ViewComponent::Preview
+ def default
+ render OntologySubscribeButtonComponent.new(ontology_id: '', subscribed: true, user_id: '')
+ end
end
end
diff --git a/test/components/previews/buttons/pill_button_component_preview.rb b/test/components/previews/buttons/pill_button_component_preview.rb
index f4cc6a9ac0..5bad6b1fd5 100644
--- a/test/components/previews/buttons/pill_button_component_preview.rb
+++ b/test/components/previews/buttons/pill_button_component_preview.rb
@@ -1,8 +1,10 @@
# frozen_string_literal: true
-class Buttons::PillButtonComponentPreview < ViewComponent::Preview
- # @param text text
- def default(text: 'hello')
- render PillButtonComponent.new(text: text)
+module Buttons
+ class PillButtonComponentPreview < ViewComponent::Preview
+ # @param text text
+ def default(text: 'hello')
+ render PillButtonComponent.new(text: text)
+ end
end
end
diff --git a/test/components/previews/buttons/regular_button_component_preview.rb b/test/components/previews/buttons/regular_button_component_preview.rb
index 85894c64af..3a8941ecd1 100644
--- a/test/components/previews/buttons/regular_button_component_preview.rb
+++ b/test/components/previews/buttons/regular_button_component_preview.rb
@@ -1,57 +1,60 @@
# frozen_string_literal: true
-class Buttons::RegularButtonComponentPreview < ViewComponent::Preview
- include InlineSvg::ActionView::Helpers
- layout 'component_preview_not_centred'
- def primary
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary")
+module Buttons
+ class RegularButtonComponentPreview < ViewComponent::Preview
+ include InlineSvg::ActionView::Helpers
+ layout 'component_preview_not_centred'
- end
-
- def link
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Link", variant: "primary", href: "#")
- end
+ def primary
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary')
+ end
+ def link
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Link', variant: 'primary', href: '#')
+ end
- def secondary
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "secondary")
- end
+ def secondary
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'secondary')
+ end
- def slim
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary", size: "slim")
- end
+ def slim
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary', size: 'slim')
+ end
- def danger
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary", color: "danger")
- end
+ def danger
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary',
+ color: 'danger')
+ end
- def warning
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary", color: "warning")
- end
+ def warning
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary',
+ color: 'warning')
+ end
- def disabled
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary", state: "disabled")
- end
+ def disabled
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary',
+ state: 'disabled')
+ end
- def no_animation
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary", state: "regular")
- end
+ def no_animation
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary',
+ state: 'regular')
+ end
- def icon_left
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary") do |btn|
- btn.icon_left do
- inline_svg_tag "check.svg"
+ def icon_left
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary') do |btn|
+ btn.icon_left do
+ inline_svg_tag 'check.svg'
+ end
end
end
- end
- def icon_right
-
- render Buttons::RegularButtonComponent.new(id:'regular-button', value: "Login", variant: "primary") do |btn|
- btn.icon_right do
- inline_svg_tag "check.svg"
+ def icon_right
+ render Buttons::RegularButtonComponent.new(id: 'regular-button', value: 'Login', variant: 'primary') do |btn|
+ btn.icon_right do
+ inline_svg_tag 'check.svg'
+ end
end
end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/buttons/rounded_button_component_preview.rb b/test/components/previews/buttons/rounded_button_component_preview.rb
index 685badf8ad..0f58bff756 100644
--- a/test/components/previews/buttons/rounded_button_component_preview.rb
+++ b/test/components/previews/buttons/rounded_button_component_preview.rb
@@ -1,14 +1,13 @@
-class Buttons::RoundedButtonComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+module Buttons
+ class RoundedButtonComponentPreview < ViewComponent::Preview
# @param icon text
# @param link text
# @param size select [small, medium, big]
- def default(icon: "json.svg", link: "text", size: "small")
- render(RoundedButtonComponent.new(icon: icon, link: link, size: size))
+ def default(icon: 'json.svg', link: 'text', size: 'small')
+ render(RoundedButtonComponent.new(icon: icon, link: link, size: size))
end
-
-
-
-
-end
\ No newline at end of file
+ end
+end
diff --git a/test/components/previews/concept_details_component_preview.rb b/test/components/previews/concept_details_component_preview.rb
index 3d486535a6..9b3686355e 100644
--- a/test/components/previews/concept_details_component_preview.rb
+++ b/test/components/previews/concept_details_component_preview.rb
@@ -4,29 +4,28 @@ class ConceptDetailsComponentPreview < ViewComponent::Preview
def default
properties = { links: nil,
context: nil,
- "http://www.w3.org/2004/02/skos/core#narrower": ["http://opendata.inrae.fr/thesaurusINRAE/d_0101",
- "http://opendata.inrae.fr/thesaurusINRAE/d_0103",
- "http://opendata.inrae.fr/thesaurusINRAE/d_0102",
- "http://opendata.inrae.fr/thesaurusINRAE/d_0104",
- "http://opendata.inrae.fr/thesaurusINRAE/d_0105"],
- "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": ["http://www.w3.org/2004/02/skos/core#Concept",
- "http://www.w3.org/2002/07/owl#NamedIndividual"],
- "http://www.w3.org/2004/02/skos/core#topConceptOf": ["http://opendata.inrae.fr/thesaurusINRAE/thesaurusINRAE"],
- "http://www.w3.org/2004/02/skos/core#prefLabel": ["01. ENVIRONMENT [domain]"],
- "http://www.w3.org/2004/02/skos/core#inScheme": ["http://opendata.inrae.fr/thesaurusINRAE/thesaurusINRAE"],
- "http://purl.org/dc/terms/modified": ["2021-02-24T15:25:56"]
- }
+ "http://www.w3.org/2004/02/skos/core#narrower": ['http://opendata.inrae.fr/thesaurusINRAE/d_0101',
+ 'http://opendata.inrae.fr/thesaurusINRAE/d_0103',
+ 'http://opendata.inrae.fr/thesaurusINRAE/d_0102',
+ 'http://opendata.inrae.fr/thesaurusINRAE/d_0104',
+ 'http://opendata.inrae.fr/thesaurusINRAE/d_0105'],
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": ['http://www.w3.org/2004/02/skos/core#Concept',
+ 'http://www.w3.org/2002/07/owl#NamedIndividual'],
+ "http://www.w3.org/2004/02/skos/core#topConceptOf": ['http://opendata.inrae.fr/thesaurusINRAE/thesaurusINRAE'],
+ "http://www.w3.org/2004/02/skos/core#prefLabel": ['01. ENVIRONMENT [domain]'],
+ "http://www.w3.org/2004/02/skos/core#inScheme": ['http://opendata.inrae.fr/thesaurusINRAE/thesaurusINRAE'],
+ "http://purl.org/dc/terms/modified": ['2021-02-24T15:25:56'] }
schemes_keys = %w[hasTopConcept topConceptOf]
label_xl_set = %w[skos-xl#prefLabel skos-xl#altLabel skos-xl#hiddenLabel]
- render ConceptDetailsComponent.new(id: 'concept-details', acronym: "Ontology",
+ render ConceptDetailsComponent.new(id: 'concept-details', acronym: 'Ontology',
properties: OpenStruct.new(properties),
top_keys: %w[description comment],
bottom_keys: %w[disjoint subclass is_a has_part],
exclude_keys: schemes_keys + label_xl_set + ['inScheme']) do |c|
c.header(stripped: true) do |table|
- table.add_row({ th: 'ID' }, { td: "http://opendata.inrae.fr/thesaurusINRAE/d_1" })
- table.add_row({ th: 'Preferred Name' }, { td: "01. ENVIRONMENT [domain]" })
- table.add_row({ th: 'Type' }, { td: "http://www.w3.org/2004/02/skos/core#Concept" })
+ table.add_row({ th: 'ID' }, { td: 'http://opendata.inrae.fr/thesaurusINRAE/d_1' })
+ table.add_row({ th: 'Preferred Name' }, { td: '01. ENVIRONMENT [domain]' })
+ table.add_row({ th: 'Type' }, { td: 'http://www.w3.org/2004/02/skos/core#Concept' })
end
end
end
diff --git a/test/components/previews/display/alert_component_preview.rb b/test/components/previews/display/alert_component_preview.rb
index 9b9d355a69..969c5efb10 100644
--- a/test/components/previews/display/alert_component_preview.rb
+++ b/test/components/previews/display/alert_component_preview.rb
@@ -1,34 +1,45 @@
-class Display::AlertComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- #@param message text
- #@param closable select [true, false]
- def default(message: "New ontology Bioinformatics Ontology v2.0 has been uploaded. Check it out in the latest uploads section", closable: true)
- render Display::AlertComponent.new(message: message, closable: closable)
- end
-
- #@param message text
- #@param closable select [true, false]
- def danger(message: "Unable to delete ontology Chemistry Concepts Ontology. This ontology is associated with existing mappings. Please remove mappings before deleting", closable: true)
- render Display::AlertComponent.new(message: message, closable: closable, type: "danger")
- end
+module Display
+ class AlertComponentPreview < ViewComponent::Preview
+ # @param message text
+ # @param closable select [true, false]
+ def default(
+ message: 'New ontology Bioinformatics Ontology v2.0 has been uploaded. Check it out in the latest uploads section', closable: true
+ )
+ render Display::AlertComponent.new(message: message, closable: closable)
+ end
- #@param message text
- #@param closable select [true, false]
- def warning(message: "This ontology version is outdated and may contain inaccuracies. Consider using the latest version for accurate information", closable: true)
- render Display::AlertComponent.new(message: message, closable: closable, type: "warning")
- end
+ # @param message text
+ # @param closable select [true, false]
+ def danger(
+ message: 'Unable to delete ontology Chemistry Concepts Ontology. This ontology is associated with existing mappings. Please remove mappings before deleting', closable: true
+ )
+ render Display::AlertComponent.new(message: message, closable: closable, type: 'danger')
+ end
- #@param message text
- #@param closable select [true, false]
- def success(message: "Your ontology submission has been successfully uploaded and is now under review. You will receive an email confirmation shortly", closable: true)
- render Display::AlertComponent.new(message: message, closable: closable, type: "success")
- end
+ # @param message text
+ # @param closable select [true, false]
+ def warning(
+ message: 'This ontology version is outdated and may contain inaccuracies. Consider using the latest version for accurate information', closable: true
+ )
+ render Display::AlertComponent.new(message: message, closable: closable, type: 'warning')
+ end
+ # @param message text
+ # @param closable select [true, false]
+ def success(
+ message: 'Your ontology submission has been successfully uploaded and is now under review. You will receive an email confirmation shortly', closable: true
+ )
+ render Display::AlertComponent.new(message: message, closable: closable, type: 'success')
+ end
- #@param message text
- #@param delay number
- def auto_close(message: "Your ontology submission has been successfully uploaded and is now under review. You will receive an email confirmation shortly", delay: 3000)
- render Display::AlertComponent.new(message: message, closable: true, auto_close_delay: delay, type: "default")
+ # @param message text
+ # @param delay number
+ def auto_close(
+ message: 'Your ontology submission has been successfully uploaded and is now under review. You will receive an email confirmation shortly', delay: 3000
+ )
+ render Display::AlertComponent.new(message: message, closable: true, auto_close_delay: delay, type: 'default')
+ end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/display/circle_progress_bar_component_preview.rb b/test/components/previews/display/circle_progress_bar_component_preview.rb
index f226774376..db4088464a 100644
--- a/test/components/previews/display/circle_progress_bar_component_preview.rb
+++ b/test/components/previews/display/circle_progress_bar_component_preview.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-class Display::CircleProgressBarComponentPreview < ViewComponent::Preview
-
- # @param count number
- # @param max number
- def default(count: 63, max: 100)
- render CircleProgressBarComponent.new(count: count, max: max)
+module Display
+ class CircleProgressBarComponentPreview < ViewComponent::Preview
+ # @param count number
+ # @param max number
+ def default(count: 63, max: 100)
+ render CircleProgressBarComponent.new(count: count, max: max)
+ end
end
end
diff --git a/test/components/previews/display/date_time_field_component_preview.rb b/test/components/previews/display/date_time_field_component_preview.rb
index 04071bc8c8..ce78b043b3 100644
--- a/test/components/previews/display/date_time_field_component_preview.rb
+++ b/test/components/previews/display/date_time_field_component_preview.rb
@@ -1,9 +1,11 @@
-class Display::DateTimeFieldComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- # @param text text
- # @param format select [year_month_day_concise, month_day_year, monthfull_day_year]
- def default(text: "2022-10-01", format: 'monthfull_day_year')
- render DateTimeFieldComponent.new(value: text, format: format.to_sym)
+module Display
+ class DateTimeFieldComponentPreview < ViewComponent::Preview
+ # @param text text
+ # @param format select [year_month_day_concise, month_day_year, monthfull_day_year]
+ def default(text: '2022-10-01', format: 'monthfull_day_year')
+ render DateTimeFieldComponent.new(value: text, format: format.to_sym)
+ end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/display/field_container_component_preview.rb b/test/components/previews/display/field_container_component_preview.rb
index 0f04e8222c..6b2466f8c7 100644
--- a/test/components/previews/display/field_container_component_preview.rb
+++ b/test/components/previews/display/field_container_component_preview.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-class Display::FieldContainerComponentPreview < ViewComponent::Preview
-
- # @param label text
- # @param value text
- #
- def default(label: 'label' , value: 'value')
- render FieldContainerComponent.new(label: label , value: value)
+module Display
+ class FieldContainerComponentPreview < ViewComponent::Preview
+ # @param label text
+ # @param value text
+ #
+ def default(label: 'label', value: 'value')
+ render FieldContainerComponent.new(label: label, value: value)
+ end
end
end
diff --git a/test/components/previews/display/header_component_preview.rb b/test/components/previews/display/header_component_preview.rb
index 4911908968..d232adf896 100644
--- a/test/components/previews/display/header_component_preview.rb
+++ b/test/components/previews/display/header_component_preview.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-class Display::HeaderComponentPreview < ViewComponent::Preview
-
- # @param text text
- # @param tooltip text
- def default(text: 'header text' , tooltip: 'text tooltip')
- render Display::HeaderComponent.new(text: text, tooltip: tooltip)
+module Display
+ class HeaderComponentPreview < ViewComponent::Preview
+ # @param text text
+ # @param tooltip text
+ def default(text: 'header text', tooltip: 'text tooltip')
+ render Display::HeaderComponent.new(text: text, tooltip: tooltip)
+ end
end
end
diff --git a/test/components/previews/display/image_component_preview.rb b/test/components/previews/display/image_component_preview.rb
index d6caa1f9a8..b430a2da27 100644
--- a/test/components/previews/display/image_component_preview.rb
+++ b/test/components/previews/display/image_component_preview.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
-class Display::ImageComponentPreview < ViewComponent::Preview
- def default
- render Display::ImageComponent.new(src: "empty-box.svg", title: 'Image popup')
+module Display
+ class ImageComponentPreview < ViewComponent::Preview
+ def default
+ render Display::ImageComponent.new(src: 'empty-box.svg', title: 'Image popup')
+ end
end
end
diff --git a/test/components/previews/display/info_tooltip_component_preview.rb b/test/components/previews/display/info_tooltip_component_preview.rb
index 44f8449721..2454042738 100644
--- a/test/components/previews/display/info_tooltip_component_preview.rb
+++ b/test/components/previews/display/info_tooltip_component_preview.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
-class Display::InfoTooltipComponentPreview < ViewComponent::Preview
-
- # @param text text
- def default(text: 'tooltip text')
- render Display::InfoTooltipComponent.new(text: text)
+module Display
+ class InfoTooltipComponentPreview < ViewComponent::Preview
+ # @param text text
+ def default(text: 'tooltip text')
+ render Display::InfoTooltipComponent.new(text: text)
+ end
end
end
diff --git a/test/components/previews/display/language_field_component_preview.rb b/test/components/previews/display/language_field_component_preview.rb
index 29cd56d3ac..3febb01db4 100644
--- a/test/components/previews/display/language_field_component_preview.rb
+++ b/test/components/previews/display/language_field_component_preview.rb
@@ -1,8 +1,10 @@
-class Display::LanguageFieldComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- # @param value text
- def default(value: 'fr')
- render LanguageFieldComponent.new(value: value)
+module Display
+ class LanguageFieldComponentPreview < ViewComponent::Preview
+ # @param value text
+ def default(value: 'fr')
+ render LanguageFieldComponent.new(value: value)
+ end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/display/license_field_component_preview.rb b/test/components/previews/display/license_field_component_preview.rb
index 203318a0b5..3d6136c9a4 100644
--- a/test/components/previews/display/license_field_component_preview.rb
+++ b/test/components/previews/display/license_field_component_preview.rb
@@ -1,8 +1,10 @@
-class Display::LicenseFieldComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- # @param value select [ CC-BY IGO 3.0, https://creativecommons.org/licenses/by/4.0/, http://www.gnu.org/licenses/gpl-3.0, https://opensource.org/licenses/MIT, http://www.apache.org/licenses/LICENSE-2.0 ]
- def default(value: "https://creativecommons.org/licenses/by/4.0/")
- render LicenseFieldComponent.new(value: value)
+module Display
+ class LicenseFieldComponentPreview < ViewComponent::Preview
+ # @param value select [ CC-BY IGO 3.0, https://creativecommons.org/licenses/by/4.0/, http://www.gnu.org/licenses/gpl-3.0, https://opensource.org/licenses/MIT, http://www.apache.org/licenses/LICENSE-2.0 ]
+ def default(value: 'https://creativecommons.org/licenses/by/4.0/')
+ render LicenseFieldComponent.new(value: value)
+ end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/display/link_field_component_preview.rb b/test/components/previews/display/link_field_component_preview.rb
index 3b6d3a85a5..cef3b2297d 100644
--- a/test/components/previews/display/link_field_component_preview.rb
+++ b/test/components/previews/display/link_field_component_preview.rb
@@ -1,8 +1,10 @@
-class Display::LinkFieldComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- # @param text text
- def default(text: "https://agroportal.lirmm.fr/")
- render LinkFieldComponent.new(value: text)
+module Display
+ class LinkFieldComponentPreview < ViewComponent::Preview
+ # @param text text
+ def default(text: 'https://agroportal.lirmm.fr/')
+ render LinkFieldComponent.new(value: text)
+ end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/display/link_text_component_preview.rb b/test/components/previews/display/link_text_component_preview.rb
index d041c5c95f..7e8eac8bb1 100644
--- a/test/components/previews/display/link_text_component_preview.rb
+++ b/test/components/previews/display/link_text_component_preview.rb
@@ -1,25 +1,26 @@
# frozen_string_literal: true
-class Display::LinkTextComponentPreview < ViewComponent::Preview
+module Display
+ class LinkTextComponentPreview < ViewComponent::Preview
+ # @param text text
+ # @param icon text
+ def default(text: 'link text', icon: '')
+ render ChipButtonComponent.new(text: LinkTextComponent.new(text: text, icon: icon).call, type: 'clickable')
+ end
- # @param text text
- # @param icon text
- def default(text: 'link text', icon: '')
- render ChipButtonComponent.new(text: LinkTextComponent.new(text: text, icon: icon).call, type: 'clickable')
- end
-
- # @param text text
- def internal(text: 'redirect inside the site')
- render ChipButtonComponent.new(text: InternalLinkTextComponent.new(text: text).call, type: 'clickable')
- end
+ # @param text text
+ def internal(text: 'redirect inside the site')
+ render ChipButtonComponent.new(text: InternalLinkTextComponent.new(text: text).call, type: 'clickable')
+ end
- # @param text text
- def external(text: 'go out of the site')
- render ChipButtonComponent.new(text: ExternalLinkTextComponent.new(text: text).call, type: 'clickable')
- end
+ # @param text text
+ def external(text: 'go out of the site')
+ render ChipButtonComponent.new(text: ExternalLinkTextComponent.new(text: text).call, type: 'clickable')
+ end
- # @param text text
- def popup(text: 'open popup')
- render ChipButtonComponent.new(text: PopupLinkTextComponent.new(text: text).call, type: 'clickable')
+ # @param text text
+ def popup(text: 'open popup')
+ render ChipButtonComponent.new(text: PopupLinkTextComponent.new(text: text).call, type: 'clickable')
+ end
end
end
diff --git a/test/components/previews/display/text_area_field_component_preview.rb b/test/components/previews/display/text_area_field_component_preview.rb
index efa508ab23..2ca22872cb 100644
--- a/test/components/previews/display/text_area_field_component_preview.rb
+++ b/test/components/previews/display/text_area_field_component_preview.rb
@@ -1,13 +1,16 @@
-class Display::TextAreaFieldComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+module Display
+ class TextAreaFieldComponentPreview < ViewComponent::Preview
+ # @param value textarea
+ def default(value: '')
+ render TextAreaFieldComponent.new(value: value.empty? ? (long_text + long_text) : value)
+ end
- # @param value textarea
- def default(value: '')
- render TextAreaFieldComponent.new(value: value.empty? ? (long_text + long_text) : value )
- end
+ private
- private
- def long_text
- "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
+ def long_text
+ "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
+ end
end
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/input/chips_component_preview.rb b/test/components/previews/input/chips_component_preview.rb
index 76e10ec283..1e5da8aed8 100644
--- a/test/components/previews/input/chips_component_preview.rb
+++ b/test/components/previews/input/chips_component_preview.rb
@@ -1,10 +1,12 @@
-class Input::ChipsComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+module Input
+ class ChipsComponentPreview < ViewComponent::Preview
# @param name text
# @param value text
-
- def default(name: "name", value: "value")
- render(ChipsComponent.new(name: name, value: value))
+
+ def default(name: 'name', value: 'value')
+ render(ChipsComponent.new(name: name, value: value))
end
-
-end
\ No newline at end of file
+ end
+end
diff --git a/test/components/previews/input/input_field_component_preview.rb b/test/components/previews/input/input_field_component_preview.rb
index dafe178b9d..39d3a331f6 100644
--- a/test/components/previews/input/input_field_component_preview.rb
+++ b/test/components/previews/input/input_field_component_preview.rb
@@ -1,94 +1,97 @@
# frozen_string_literal: true
-class Input::InputFieldComponentPreview < ViewComponent::Preview
-
- # This is a date input field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
- # @param label text
- # @param error_message text
- # @param helper_text text
-
- def date(label: "Label", placeholder: "", error_message: "", helper_text: "")
- render Input::DateComponent.new(label: label, name: "name", placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
-
-
- # This is a url input field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
- # @param label text
- # @param error_message text
- # @param helper_text text
-
- def email(label: "Label", placeholder: "", error_message: "", helper_text: "")
- render Input::EmailComponent.new(label: label, name: "name", placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
-
-
- def file
- render Input::FileInputComponent.new(name: "file")
- end
-
-
- # This is a url input field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
- # @param label text
- # @param error_message text
- # @param helper_text text
-
- def password(label: "Label", placeholder: "", error_message: "", helper_text: "")
- render Input::PasswordComponent.new(label: label, name: "name", placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
-
-
- # This is a url input field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
- # @param label text
- # @param error_message text
- # @param helper_text text
-
- def url(label: "Label", placeholder: "", error_message: "", helper_text: "")
- render Input::UrlComponent.new(label: label, name: "name", placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
-
- # This is a text input field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To give it a hint (placeholder): define the param hint with the hind you want to be displayed.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
- # @param label text
- # @param placeholder text
- # @param error_message text
- # @param helper_text text
-
- def text(label: "Label", placeholder: "", error_message: "", helper_text: "")
- render Input::TextInputComponent.new(label: label, name: "name", placeholder: placeholder, error_message: error_message, helper_text: helper_text)
- end
-
- # This is a textarea field:
- # - To use it without a label: don't give a value to the param label or leave it empty.
- # - To give it a hint (placeholder): define the param hint with the hind you want to be displayed.
- # - To put it in error state: define the param error_message with the error message you want to be displayed.
- # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
-
- # @param label text
- # @param placeholder text
- # @param error_message text
- # @param helper_text text
- # @param rows number
-
- def text_area(label: "Label", placeholder: "", error_message: "", helper_text: "", rows: 5)
- render Input::TextAreaComponent.new(label: label, name: "name",value: '', placeholder: placeholder, error_message: error_message, helper_text: helper_text, rows: rows)
- end
-
- def language_input
- render Input::LanguageSelectorComponent.new(languages: {fr: 'French', en: 'English'})
+module Input
+ class InputFieldComponentPreview < ViewComponent::Preview
+ # This is a date input field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+ # @param label text
+ # @param error_message text
+ # @param helper_text text
+
+ def date(label: 'Label', placeholder: '', error_message: '', helper_text: '')
+ render Input::DateComponent.new(label: label, name: 'name', placeholder: placeholder, error_message: error_message,
+ helper_text: helper_text)
+ end
+
+ # This is a url input field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+ # @param label text
+ # @param error_message text
+ # @param helper_text text
+
+ def email(label: 'Label', placeholder: '', error_message: '', helper_text: '')
+ render Input::EmailComponent.new(label: label, name: 'name', placeholder: placeholder,
+ error_message: error_message, helper_text: helper_text)
+ end
+
+ def file
+ render Input::FileInputComponent.new(name: 'file')
+ end
+
+ # This is a url input field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+ # @param label text
+ # @param error_message text
+ # @param helper_text text
+
+ def password(label: 'Label', placeholder: '', error_message: '', helper_text: '')
+ render Input::PasswordComponent.new(label: label, name: 'name', placeholder: placeholder,
+ error_message: error_message, helper_text: helper_text)
+ end
+
+ # This is a url input field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+ # @param label text
+ # @param error_message text
+ # @param helper_text text
+
+ def url(label: 'Label', placeholder: '', error_message: '', helper_text: '')
+ render Input::UrlComponent.new(label: label, name: 'name', placeholder: placeholder, error_message: error_message,
+ helper_text: helper_text)
+ end
+
+ # This is a text input field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To give it a hint (placeholder): define the param hint with the hind you want to be displayed.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+ # @param label text
+ # @param placeholder text
+ # @param error_message text
+ # @param helper_text text
+
+ def text(label: 'Label', placeholder: '', error_message: '', helper_text: '')
+ render Input::TextInputComponent.new(label: label, name: 'name', placeholder: placeholder,
+ error_message: error_message, helper_text: helper_text)
+ end
+
+ # This is a textarea field:
+ # - To use it without a label: don't give a value to the param label or leave it empty.
+ # - To give it a hint (placeholder): define the param hint with the hind you want to be displayed.
+ # - To put it in error state: define the param error_message with the error message you want to be displayed.
+ # - To give it a helper text (a text displayed under the input field): define the param helper_text with the helper text you want to be displayed.
+
+ # @param label text
+ # @param placeholder text
+ # @param error_message text
+ # @param helper_text text
+ # @param rows number
+
+ def text_area(label: 'Label', placeholder: '', error_message: '', helper_text: '', rows: 5)
+ render Input::TextAreaComponent.new(label: label, name: 'name', value: '', placeholder: placeholder,
+ error_message: error_message, helper_text: helper_text, rows: rows)
+ end
+
+ def language_input
+ render Input::LanguageSelectorComponent.new(languages: { fr: 'French', en: 'English' })
+ end
end
end
diff --git a/test/components/previews/input/nested_form_input_component_preview.rb b/test/components/previews/input/nested_form_input_component_preview.rb
index ec9329466c..6e367650af 100644
--- a/test/components/previews/input/nested_form_input_component_preview.rb
+++ b/test/components/previews/input/nested_form_input_component_preview.rb
@@ -1,18 +1,21 @@
-class Input::NestedFormInputComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::FormTagHelper
+module Input
+ class NestedFormInputComponentPreview < ViewComponent::Preview
+ include ActionView::Helpers::TagHelper
+ include ActionView::Helpers::FormTagHelper
- # @param object_name text
- def default(object_name: 'contact')
- render NestedFormInputsComponent.new(object_name: object_name) do |c|
- c.header do
- content_tag(:div, 'Contact name', class: 'w-50 mx-1') + content_tag(:div, 'Contact email', class: 'w-50 mx-1')
- end
+ # @param object_name text
+ def default(object_name: 'contact')
+ render NestedFormInputsComponent.new(object_name: object_name) do |c|
+ c.header do
+ content_tag(:div, 'Contact name', class: 'w-50 mx-1') + content_tag(:div, 'Contact email', class: 'w-50 mx-1')
+ end
- c.template do
- raw "
".html_safe
+ c.template do
+ raw "
".html_safe
+ end
end
end
end
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/input/select_component_preview.rb b/test/components/previews/input/select_component_preview.rb
index 851712b2df..564c567091 100644
--- a/test/components/previews/input/select_component_preview.rb
+++ b/test/components/previews/input/select_component_preview.rb
@@ -1,27 +1,34 @@
# frozen_string_literal: true
-class Input::SelectComponentPreview < ViewComponent::Preview
- layout 'component_preview_not_centred'
+module Input
+ class SelectComponentPreview < ViewComponent::Preview
+ layout 'component_preview_not_centred'
- def default(id: "", name: "", values: ["choices 1", "choices 2", "choices 3"], selected: "choices 2", multiple: false, open_to_add_values: false)
- render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple, open_to_add_values: open_to_add_values)
- end
+ def default(id: '', name: '', values: ['choices 1', 'choices 2', 'choices 3'], selected: 'choices 2',
+ multiple: false, open_to_add_values: false)
+ render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple,
+ open_to_add_values: open_to_add_values)
+ end
- def multiple(id: "", name: "", values: ["choices 1", "choices 2", "choices 3"], selected: "choices 2", multiple: true, open_to_add_values: false)
- render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple, open_to_add_values: open_to_add_values)
- end
+ def multiple(id: '', name: '', values: ['choices 1', 'choices 2', 'choices 3'], selected: 'choices 2',
+ multiple: true, open_to_add_values: false)
+ render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple,
+ open_to_add_values: open_to_add_values)
+ end
- def open_to_add(id: "", name: "", values: ["choices 1", "choices 2", "choices 3"], selected: "choices 2", multiple: true, open_to_add_values: true)
- render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple, open_to_add_values: open_to_add_values)
- end
+ def open_to_add(id: '', name: '', values: ['choices 1', 'choices 2', 'choices 3'], selected: 'choices 2',
+ multiple: true, open_to_add_values: true)
+ render Input::SelectComponent.new(id: id, name: name, value: values, selected: selected, multiple: multiple,
+ open_to_add_values: open_to_add_values)
+ end
- def with_icon
- values = [
- ['', ''],
- ["FR ", 'fr'],
- ["EN ", 'en']
- ]
- render SelectInputComponent.new(id: 'id', name: 'name', values: values, placeholder: 'Choose a language')
+ def with_icon
+ values = [
+ ['', ''],
+ ["FR ", 'fr'],
+ ["EN ", 'en']
+ ]
+ render SelectInputComponent.new(id: 'id', name: 'name', values: values, placeholder: 'Choose a language')
+ end
end
-
end
diff --git a/test/components/previews/input/switch_input_component_preview.rb b/test/components/previews/input/switch_input_component_preview.rb
index fd40bd6aeb..014949fbec 100644
--- a/test/components/previews/input/switch_input_component_preview.rb
+++ b/test/components/previews/input/switch_input_component_preview.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
-class Input::SwitchInputComponentPreview < ViewComponent::Preview
-
- # @param label text
- def default(label: 'Label')
- render SwitchInputComponent.new(id: 'id', name: 'selected_metadata[]', value: '', label: label)
+module Input
+ class SwitchInputComponentPreview < ViewComponent::Preview
+ # @param label text
+ def default(label: 'Label')
+ render SwitchInputComponent.new(id: 'id', name: 'selected_metadata[]', value: '', label: label)
+ end
end
end
diff --git a/test/components/previews/layout/card_component_preview.rb b/test/components/previews/layout/card_component_preview.rb
index 23f07a2d87..be081d97f1 100644
--- a/test/components/previews/layout/card_component_preview.rb
+++ b/test/components/previews/layout/card_component_preview.rb
@@ -1,10 +1,12 @@
# frozen_string_literal: true
-class Layout::CardComponentPreview < ViewComponent::Preview
- # @param text textarea
- def default(text: 'text here')
- render Layout::CardComponent.new do
- text.html_safe
+module Layout
+ class CardComponentPreview < ViewComponent::Preview
+ # @param text textarea
+ def default(text: 'text here')
+ render Layout::CardComponent.new do
+ text.html_safe
+ end
end
end
end
diff --git a/test/components/previews/layout/card_message_component_preview.rb b/test/components/previews/layout/card_message_component_preview.rb
index 4b28bf40ff..a27128cd97 100644
--- a/test/components/previews/layout/card_message_component_preview.rb
+++ b/test/components/previews/layout/card_message_component_preview.rb
@@ -1,30 +1,35 @@
-class Layout::CardMessageComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+module Layout
+ class CardMessageComponentPreview < ViewComponent::Preview
# @param message text
# @param button_text text
# @param button_link text
- def default(message: "Here we can type a success or failure message to the user", button_text: "Do action", button_link: "/" )
- render(CardMessageComponent.new(message: message, button_text: button_text, type: "success", button_link: button_link))
+ def default(message: 'Here we can type a success or failure message to the user', button_text: 'Do action',
+ button_link: '/')
+ render(CardMessageComponent.new(message: message, button_text: button_text, type: 'success',
+ button_link: button_link))
end
-
-
+
# @param message text
# @param button_text text
# @param button_link text
- def warning(message: "Here we can type a success or failure message to the user", button_text: "Do action", button_link: "/" )
- render(CardMessageComponent.new(message: message, button_text: button_text, type: "warning", button_link: button_link))
+ def warning(message: 'Here we can type a success or failure message to the user', button_text: 'Do action',
+ button_link: '/')
+ render(CardMessageComponent.new(message: message, button_text: button_text, type: 'warning',
+ button_link: button_link))
end
-
# @param message text
# @param button_text text
# @param button_link text
- def failure(message: "Here we can type a success or failure message to the user", button_text: "Do action", button_link: "/" )
- render(CardMessageComponent.new(message: message, button_text: button_text, type: "failure", button_link: button_link))
+ def failure(message: 'Here we can type a success or failure message to the user', button_text: 'Do action',
+ button_link: '/')
+ render(CardMessageComponent.new(message: message, button_text: button_text, type: 'failure',
+ button_link: button_link))
end
-
-
-end
\ No newline at end of file
+ end
+end
diff --git a/test/components/previews/layout/dropdown_container_component_preview.rb b/test/components/previews/layout/dropdown_container_component_preview.rb
index 7d66eb5dfc..1763802e35 100644
--- a/test/components/previews/layout/dropdown_container_component_preview.rb
+++ b/test/components/previews/layout/dropdown_container_component_preview.rb
@@ -1,15 +1,16 @@
# frozen_string_literal: true
-class Layout::DropdownContainerComponentPreview < ViewComponent::Preview
- layout 'component_preview_not_centred'
+module Layout
+ class DropdownContainerComponentPreview < ViewComponent::Preview
+ layout 'component_preview_not_centred'
- # @param title text
- # @param content textarea
+ # @param title text
+ # @param content textarea
- def default(title: 'title', content: 'content')
- render DropdownContainerComponent.new(id: 'id' , title: title) do
- content.html_safe
+ def default(title: 'title', content: 'content')
+ render DropdownContainerComponent.new(id: 'id', title: title) do
+ content.html_safe
+ end
end
end
-
end
diff --git a/test/components/previews/layout/list_component_preview.rb b/test/components/previews/layout/list_component_preview.rb
index ea57e58368..aa602d8067 100644
--- a/test/components/previews/layout/list_component_preview.rb
+++ b/test/components/previews/layout/list_component_preview.rb
@@ -1,18 +1,20 @@
# frozen_string_literal: true
-class Layout::ListComponentPreview < ViewComponent::Preview
- def vertical
- render Layout::ListComponent.new do |l|
- 4.times.each do |i|
- l.row {content_tag(:div , "element #{i}", class: 'p-1 border')}
+module Layout
+ class ListComponentPreview < ViewComponent::Preview
+ def vertical
+ render Layout::ListComponent.new do |l|
+ 4.times.each do |i|
+ l.row { content_tag(:div, "element #{i}", class: 'p-1 border') }
+ end
end
end
- end
- def horizontal
- render Layout::HorizontalListComponent.new do |l|
- 4.times.each do |i|
- l.element {content_tag(:div , "element #{i}", class: 'p-1 border')}
+ def horizontal
+ render Layout::HorizontalListComponent.new do |l|
+ 4.times.each do |i|
+ l.element { content_tag(:div, "element #{i}", class: 'p-1 border') }
+ end
end
end
end
diff --git a/test/components/previews/layout/progress_pages_component_preview.rb b/test/components/previews/layout/progress_pages_component_preview.rb
index afb6596de1..ae1b9df281 100644
--- a/test/components/previews/layout/progress_pages_component_preview.rb
+++ b/test/components/previews/layout/progress_pages_component_preview.rb
@@ -1,11 +1,16 @@
# frozen_string_literal: true
-class Layout::ProgressPagesComponentPreview < ViewComponent::Preview
-
- # @param pages_count number
- def default(pages_count: 5)
- render Layout::ProgressPagesComponent.new(pages_title: (pages_count || 0).times.map { |x| "page #{x}" }) do |c|
- 5.times.each { |i| c.page { content_tag(:div, "page #{i}", class: "p-5 mx-5 text-center", style: 'width: 500px') } }
+module Layout
+ class ProgressPagesComponentPreview < ViewComponent::Preview
+ # @param pages_count number
+ def default(pages_count: 5)
+ render Layout::ProgressPagesComponent.new(pages_title: (pages_count || 0).times.map { |x| "page #{x}" }) do |c|
+ 5.times.each do |i|
+ c.page do
+ content_tag(:div, "page #{i}", class: 'p-5 mx-5 text-center', style: 'width: 500px')
+ end
+ end
+ end
end
end
end
diff --git a/test/components/previews/layout/summary_section_component_preview.rb b/test/components/previews/layout/summary_section_component_preview.rb
index 626770b14a..55bf257c61 100644
--- a/test/components/previews/layout/summary_section_component_preview.rb
+++ b/test/components/previews/layout/summary_section_component_preview.rb
@@ -1,14 +1,17 @@
-class Layout::SummarySectionComponentPreview < ViewComponent::Preview
- layout 'component_preview_not_centred'
- # @param title text
- # @param content textarea
- # @param link url
- # @param link_title text
- # @param show_card toggle
- def default(title: 'title' , link: nil, link_title: nil, show_card: true, content: 'here is the content')
- render SummarySectionComponent.new(title: title , link: link, link_title: link_title, show_card: show_card) do
- content.html_safe
+# frozen_string_literal: true
+
+module Layout
+ class SummarySectionComponentPreview < ViewComponent::Preview
+ layout 'component_preview_not_centred'
+ # @param title text
+ # @param content textarea
+ # @param link url
+ # @param link_title text
+ # @param show_card toggle
+ def default(title: 'title', link: nil, link_title: nil, show_card: true, content: 'here is the content')
+ render SummarySectionComponent.new(title: title, link: link, link_title: link_title, show_card: show_card) do
+ content.html_safe
+ end
end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/layout/table_component_preview.rb b/test/components/previews/layout/table_component_preview.rb
index b38a7cd0fc..4c86b33f1c 100644
--- a/test/components/previews/layout/table_component_preview.rb
+++ b/test/components/previews/layout/table_component_preview.rb
@@ -1,45 +1,45 @@
# frozen_string_literal: true
-class Layout::TableComponentPreview < ViewComponent::Preview
+module Layout
+ class TableComponentPreview < ViewComponent::Preview
+ include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::UrlHelper
-
- def default
- render TableComponent.new do |t|
- table_content(t)
+ def default
+ render TableComponent.new do |t|
+ table_content(t)
+ end
end
- end
- def stripped
- render TableComponent.new(stripped: true) do |t|
- table_content(t)
+ def stripped
+ render TableComponent.new(stripped: true) do |t|
+ table_content(t)
+ end
end
- end
- private
+ private
- def table_content(t)
- headers = 5.times.map { |i| "header #{i}" }
- rows = 6.times.map { |row| 5.times.map { |i| "line #{row} :#{i} " } }
+ def table_content(t)
+ headers = 5.times.map { |i| "header #{i}" }
+ rows = 6.times.map { |row| 5.times.map { |i| "line #{row} :#{i} " } }
- t.header do |h|
- headers.each do |header|
- h.th { header }
+ t.header do |h|
+ headers.each do |header|
+ h.th { header }
+ end
+ h.th { 'Action' }
end
- h.th { 'Action' }
- end
- rows.each do |row|
- t.row do |r|
- row.each do |col|
- r.td { col }
- end
+ rows.each do |row|
+ t.row do |r|
+ row.each do |col|
+ r.td { col }
+ end
- r.td do
- link_to('Edit', '', class: 'mr-3') + link_to('Delete', '')
+ r.td do
+ link_to('Edit', '', class: 'mr-3') + link_to('Delete', '')
+ end
end
end
end
-
end
end
diff --git a/test/components/previews/layout/tabs_container_component_preview.rb b/test/components/previews/layout/tabs_container_component_preview.rb
index b82e09f32a..2f1500d9ca 100644
--- a/test/components/previews/layout/tabs_container_component_preview.rb
+++ b/test/components/previews/layout/tabs_container_component_preview.rb
@@ -1,78 +1,76 @@
-class Layout::TabsContainerComponentPreview < ViewComponent::Preview
-
-
- def default
- render TabsContainerComponent.new do |c|
- sections = ['section 1', 'section 2', 'section 3', 'section 4']
-
- sections.each do |section_title|
- c.item(title: section_title,
- path: "#{section_title}path",
- selected: section_title.eql?('section 2'),
- page_name: "#{section_title}path")
-
- c.item_content do
- section_title
+# frozen_string_literal: true
+
+module Layout
+ class TabsContainerComponentPreview < ViewComponent::Preview
+ def default
+ render TabsContainerComponent.new do |c|
+ sections = ['section 1', 'section 2', 'section 3', 'section 4']
+
+ sections.each do |section_title|
+ c.item(title: section_title,
+ path: "#{section_title}path",
+ selected: section_title.eql?('section 2'),
+ page_name: "#{section_title}path")
+
+ c.item_content do
+ section_title
+ end
end
end
-
end
- end
- def pill
- render TabsContainerComponent.new(type: 'pill') do |c|
- sections = ['section 1', 'section 2', 'section 3', 'section 4']
+ def pill
+ render TabsContainerComponent.new(type: 'pill') do |c|
+ sections = ['section 1', 'section 2', 'section 3', 'section 4']
- sections.each do |section_title|
- c.item(title: section_title,
- path: "#{section_title}path",
- selected: section_title.eql?('section 2'),
- page_name: "#{section_title}path")
+ sections.each do |section_title|
+ c.item(title: section_title,
+ path: "#{section_title}path",
+ selected: section_title.eql?('section 2'),
+ page_name: "#{section_title}path")
- c.item_content do
- section_title
+ c.item_content do
+ section_title
+ end
end
end
-
end
- end
- def outline
- render TabsContainerComponent.new(type: 'outline') do |c|
- sections = ['section 1', 'section 2', 'section 3', 'section 4']
+ def outline
+ render TabsContainerComponent.new(type: 'outline') do |c|
+ sections = ['section 1', 'section 2', 'section 3', 'section 4']
- sections.each do |section_title|
- c.item(title: section_title,
- path: "#{section_title}path",
- selected: section_title.eql?('section 2'),
- page_name: "#{section_title}path")
+ sections.each do |section_title|
+ c.item(title: section_title,
+ path: "#{section_title}path",
+ selected: section_title.eql?('section 2'),
+ page_name: "#{section_title}path")
- c.item_content do
- section_title
+ c.item_content do
+ section_title
+ end
end
end
-
end
- end
- def with_action_links
- render TabsContainerComponent.new do |c|
- sections = ['section 1', 'section 2', 'section 3', 'section 4']
+ def with_action_links
+ render TabsContainerComponent.new do |c|
+ sections = ['section 1', 'section 2', 'section 3', 'section 4']
- sections.each do |section_title|
- c.item(title: section_title,
- path: "#{section_title}path",
- selected: section_title.eql?('section 2'),
- page_name: "#{section_title}path")
+ sections.each do |section_title|
+ c.item(title: section_title,
+ path: "#{section_title}path",
+ selected: section_title.eql?('section 2'),
+ page_name: "#{section_title}path")
- c.item_content do
- section_title
+ c.item_content do
+ section_title
+ end
+ end
+ c.pinned_right do
+ RoundedButtonComponent.new(icon: 'check.svg').render_in(c) + ' '.html_safe + RoundedButtonComponent.new.render_in(c)
end
- end
- c.pinned_right do
- RoundedButtonComponent.new(icon: 'check.svg').render_in(c) + ' '.html_safe + RoundedButtonComponent.new.render_in(c)
end
end
end
-
-end
\ No newline at end of file
+end
diff --git a/test/components/previews/layout/turbo_modal_component_preview.rb b/test/components/previews/layout/turbo_modal_component_preview.rb
index bf976326d8..0924c082f9 100644
--- a/test/components/previews/layout/turbo_modal_component_preview.rb
+++ b/test/components/previews/layout/turbo_modal_component_preview.rb
@@ -1,16 +1,18 @@
# frozen_string_literal: true
-class Layout::TurboModalComponentPreview < ViewComponent::Preview
- layout 'component_preview_not_centred'
+module Layout
+ class TurboModalComponentPreview < ViewComponent::Preview
+ layout 'component_preview_not_centred'
- include ActionView::Helpers::TagHelper
- include ActionView::Context
+ include ActionView::Helpers::TagHelper
+ include ActionView::Context
- # @param title text
- # @param message text
- def default(message: 'hello you !', title: 'title')
- render TurboModalComponent.new(title: title, show: true) do
- content_tag(:div, message, class: 'p-5')
+ # @param title text
+ # @param message text
+ def default(message: 'hello you !', title: 'title')
+ render TurboModalComponent.new(title: title, show: true) do
+ content_tag(:div, message, class: 'p-5')
+ end
end
end
end
diff --git a/test/components/previews/loader_component_preview.rb b/test/components/previews/loader_component_preview.rb
index 78e55ca336..b847cdf360 100644
--- a/test/components/previews/loader_component_preview.rb
+++ b/test/components/previews/loader_component_preview.rb
@@ -8,5 +8,4 @@ def default
def small
render LoaderComponent.new(small: true)
end
-
end
diff --git a/test/components/previews/notification_component_preview.rb b/test/components/previews/notification_component_preview.rb
index 407c0d947c..07e91c2cc6 100644
--- a/test/components/previews/notification_component_preview.rb
+++ b/test/components/previews/notification_component_preview.rb
@@ -1,12 +1,13 @@
-class NotificationComponentPreview < ViewComponent::Preview
+# frozen_string_literal: true
+class NotificationComponentPreview < ViewComponent::Preview
# @param title text
# @param message text
# @param type select [success, alert, error]
# @param auto_remove toggle
- def default(title: "Notification message", message: "Here we can type a success or failure message to the user", type: 'success', auto_remove: false)
+ def default(title: 'Notification message', message: 'Here we can type a success or failure message to the user',
+ type: 'success', auto_remove: false)
render NotificationComponent.new(title: title, comment: message, type: type, auto_remove: auto_remove)
end
-
-end
\ No newline at end of file
+end
diff --git a/test/controllers/application_controller_test.rb b/test/controllers/application_controller_test.rb
new file mode 100644
index 0000000000..a7fa870d91
--- /dev/null
+++ b/test/controllers/application_controller_test.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class ApplicationControllerTest < ActionDispatch::IntegrationTest
+ test 'should show home page' do
+ get ''
+ assert_response :success
+ end
+
+ test 'should show projects page' do
+ get '/projects'
+ assert_response :success
+ end
+end
diff --git a/test/controllers/landscape_controller_test.rb b/test/controllers/landscape_controller_test.rb
index 31a32b842a..619c82dc9f 100644
--- a/test/controllers/landscape_controller_test.rb
+++ b/test/controllers/landscape_controller_test.rb
@@ -1,9 +1,11 @@
+# frozen_string_literal: true
+
require 'test_helper'
class LandscapeControllerTest < ActionController::TestCase
- test "should get index" do
+ test 'should get index' do
+ skip('take too much time')
get :index
assert_response :success
end
-
end
diff --git a/test/controllers/ontologies_controller_test.rb b/test/controllers/ontologies_controller_test.rb
new file mode 100644
index 0000000000..ed96305cae
--- /dev/null
+++ b/test/controllers/ontologies_controller_test.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class OntologiesControllerTest < ActionDispatch::IntegrationTest
+ ONTOLOGIES = LinkedData::Client::Models::Ontology.all(include: 'acronym')
+ PAGES = %w[summary classes properties notes mappings schemes collections widgets].freeze
+
+ test 'should return all the ontologies' do
+ get ontologies_path
+ assert_response :success
+ end
+
+ ONTOLOGIES.sample(5).flat_map { |ont| PAGES.map { |page| [ont, page] } }.each do |ont, page|
+ test "should get page #{page} of #{ont.acronym} ontology" do
+ path = "#{ontologies_path}/#{ont.acronym}?p=#{page}"
+ get path
+ assert_response :success, "GET #{path} returned #{response.status}"
+ end
+ end
+end
diff --git a/test/models/virtual_appliance_user_test.rb b/test/models/virtual_appliance_user_test.rb
index 0ee6a3cea6..62e4a71227 100644
--- a/test/models/virtual_appliance_user_test.rb
+++ b/test/models/virtual_appliance_user_test.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
require 'test_helper'
class VirtualApplianceUserTest < ActiveSupport::TestCase
# Replace this with your real tests.
- test "the truth" do
+ test 'the truth' do
assert true
end
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index a21ff22160..9e1c9120e2 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,13 +1,17 @@
+# frozen_string_literal: true
+
ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'
-class ActiveSupport::TestCase
- # Run tests in parallel with specified workers
- parallelize(workers: 1)
+module ActiveSupport
+ class TestCase
+ # Run tests in parallel with specified workers
+ parallelize(workers: 1)
- # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
- fixtures :all
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
+ fixtures :all
- # Add more helper methods to be used by all tests here...
-end
\ No newline at end of file
+ # Add more helper methods to be used by all tests here...
+ end
+end
diff --git a/yarn.lock b/yarn.lock
index 6ef2719673..7d7a9bb108 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
# yarn lockfile v1
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
"@babel/runtime@^7.21.0":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
@@ -14,6 +19,38 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
+"@eslint/eslintrc@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
+ integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.52.0":
+ version "8.52.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c"
+ integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==
+
"@hotwired/stimulus@^3.0.0", "@hotwired/stimulus@^3.0.1":
version "3.2.1"
resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.1.tgz#e3de23623b0c52c247aba4cd5d530d257008676b"
@@ -32,6 +69,46 @@
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.3.0.tgz#2226000fff1aabda9fd9587474565c9929dbf15d"
integrity sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==
+"@humanwhocodes/config-array@^0.11.13":
+ version "0.11.13"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
+ integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.1"
+ debug "^4.1.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
+ integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@orchidjs/sifter@^1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@orchidjs/sifter/-/sifter-1.0.3.tgz#43f42519472282eb632d0a1589184f044d64129b"
@@ -54,6 +131,207 @@
resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.5.tgz#bbc11203e0d3d5084002abfcf01d621fdf5f3a9d"
integrity sha512-SOBA2heB9lTw0VYIx8M/ed7inSf4I9sR8OIlJprhgkfQ3WJtrxPJ6DDATR1Z3RYaIR7HlT2Olj08v1lfGIGuHA==
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.9.0:
+ version "8.11.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
+ integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-buffer-byte-length@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
+ integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+ dependencies:
+ call-bind "^1.0.2"
+ is-array-buffer "^3.0.1"
+
+array-includes@^3.1.6, array-includes@^3.1.7:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda"
+ integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+ is-string "^1.0.7"
+
+array.prototype.findlastindex@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207"
+ integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.2.1"
+
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
+ integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
+ integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.tosorted@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd"
+ integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.2.1"
+
+arraybuffer.prototype.slice@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
+ integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
+ dependencies:
+ array-buffer-byte-length "^1.0.0"
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+ is-array-buffer "^3.0.2"
+ is-shared-array-buffer "^1.0.2"
+
+asynciterator.prototype@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62"
+ integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==
+ dependencies:
+ has-symbols "^1.0.3"
+
+available-typed-arrays@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+ integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+builtins@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
+ integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==
+ dependencies:
+ semver "^7.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
+ integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
+ dependencies:
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.1"
+ set-function-length "^1.1.1"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
date-fns@^2.29.3:
version "2.30.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
@@ -66,6 +344,154 @@ debounce@^1.2.1:
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.1, debug@^4.3.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-data-property@^1.0.1, define-data-property@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
+ integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
+ dependencies:
+ get-intrinsic "^1.2.1"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
+
+define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.22.1:
+ version "1.22.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
+ integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
+ dependencies:
+ array-buffer-byte-length "^1.0.0"
+ arraybuffer.prototype.slice "^1.0.2"
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.5"
+ es-set-tostringtag "^2.0.1"
+ es-to-primitive "^1.2.1"
+ function.prototype.name "^1.1.6"
+ get-intrinsic "^1.2.2"
+ get-symbol-description "^1.0.0"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ hasown "^2.0.0"
+ internal-slot "^1.0.5"
+ is-array-buffer "^3.0.2"
+ is-callable "^1.2.7"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.12"
+ is-weakref "^1.0.2"
+ object-inspect "^1.13.1"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.5.1"
+ safe-array-concat "^1.0.1"
+ safe-regex-test "^1.0.0"
+ string.prototype.trim "^1.2.8"
+ string.prototype.trimend "^1.0.7"
+ string.prototype.trimstart "^1.0.7"
+ typed-array-buffer "^1.0.0"
+ typed-array-byte-length "^1.0.0"
+ typed-array-byte-offset "^1.0.0"
+ typed-array-length "^1.0.4"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.13"
+
+es-iterator-helpers@^1.0.12:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40"
+ integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==
+ dependencies:
+ asynciterator.prototype "^1.0.0"
+ call-bind "^1.0.2"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.1"
+ es-set-tostringtag "^2.0.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.2.1"
+ globalthis "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.5"
+ iterator.prototype "^1.1.2"
+ safe-array-concat "^1.0.1"
+
+es-set-tostringtag@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9"
+ integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==
+ dependencies:
+ get-intrinsic "^1.2.2"
+ has-tostringtag "^1.0.0"
+ hasown "^2.0.0"
+
+es-shim-unscopables@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
+ integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
+ dependencies:
+ hasown "^2.0.0"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
esbuild-android-64@0.14.54:
version "0.14.54"
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
@@ -193,21 +619,1196 @@ esbuild@^0.14.41:
esbuild-windows-64 "0.14.54"
esbuild-windows-arm64 "0.14.54"
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-standard-jsx@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz#70852d395731a96704a592be5b0bfaccfeded239"
+ integrity sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==
+
+eslint-config-standard@17.1.0, eslint-config-standard@^17.1.0:
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975"
+ integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==
+
+eslint-import-resolver-node@^0.3.9:
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.13.0"
+ resolve "^1.22.4"
+
+eslint-module-utils@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
+ integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-es@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
+ integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
+ dependencies:
+ eslint-utils "^2.0.0"
+ regexpp "^3.0.0"
+
+eslint-plugin-es@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9"
+ integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==
+ dependencies:
+ eslint-utils "^2.0.0"
+ regexpp "^3.0.0"
+
+eslint-plugin-import@^2.27.5, eslint-plugin-import@^2.29.0:
+ version "2.29.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155"
+ integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==
+ dependencies:
+ array-includes "^3.1.7"
+ array.prototype.findlastindex "^1.2.3"
+ array.prototype.flat "^1.3.2"
+ array.prototype.flatmap "^1.3.2"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.8.0"
+ hasown "^2.0.0"
+ is-core-module "^2.13.1"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.fromentries "^2.0.7"
+ object.groupby "^1.0.1"
+ object.values "^1.1.7"
+ semver "^6.3.1"
+ tsconfig-paths "^3.14.2"
+
+eslint-plugin-n@^15.7.0:
+ version "15.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90"
+ integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==
+ dependencies:
+ builtins "^5.0.1"
+ eslint-plugin-es "^4.1.0"
+ eslint-utils "^3.0.0"
+ ignore "^5.1.1"
+ is-core-module "^2.11.0"
+ minimatch "^3.1.2"
+ resolve "^1.22.1"
+ semver "^7.3.8"
+
+eslint-plugin-node@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
+ integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
+ dependencies:
+ eslint-plugin-es "^3.0.0"
+ eslint-utils "^2.0.0"
+ ignore "^5.1.1"
+ minimatch "^3.0.4"
+ resolve "^1.10.1"
+ semver "^6.1.0"
+
+eslint-plugin-promise@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816"
+ integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==
+
+eslint-plugin-react@^7.32.2:
+ version "7.33.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608"
+ integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ array.prototype.tosorted "^1.1.1"
+ doctrine "^2.1.0"
+ es-iterator-helpers "^1.0.12"
+ estraverse "^5.3.0"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.1.2"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ object.hasown "^1.1.2"
+ object.values "^1.1.6"
+ prop-types "^15.8.1"
+ resolve "^2.0.0-next.4"
+ semver "^6.3.1"
+ string.prototype.matchall "^4.0.8"
+
+eslint-plugin-standard@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4"
+ integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg==
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-utils@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint@^8.41.0, eslint@^8.52.0:
+ version "8.52.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc"
+ integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.2"
+ "@eslint/js" "8.52.0"
+ "@humanwhocodes/config-array" "^0.11.13"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b"
+ integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
flatpickr@^4.6.13:
version "4.6.13"
resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94"
integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==
+flatted@^3.2.9:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+function-bind@^1.1.1, function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
+ integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ functions-have-names "^1.2.3"
+
+functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
+ integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
+ dependencies:
+ function-bind "^1.1.2"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ hasown "^2.0.0"
+
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^13.19.0:
+ version "13.23.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02"
+ integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==
+ dependencies:
+ type-fest "^0.20.2"
+
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+graceful-fs@^4.1.15:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
+ integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
+ dependencies:
+ get-intrinsic "^1.2.2"
+
+has-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
+hasown@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
+ integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
+ dependencies:
+ function-bind "^1.1.2"
+
+ignore@^5.1.1, ignore@^5.2.0:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+internal-slot@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
+ integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==
+ dependencies:
+ get-intrinsic "^1.2.2"
+ hasown "^2.0.0"
+ side-channel "^1.0.4"
+
+is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+ integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.0"
+ is-typed-array "^1.1.10"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-async-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
+ integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-date-object@^1.0.1, is-date-object@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6"
+ integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-generator-function@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
+ integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-glob@^4.0.0, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+ integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-set@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+ integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
+is-shared-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
+ integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
+ dependencies:
+ which-typed-array "^1.1.11"
+
+is-weakmap@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+ integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-weakset@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
+ integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iterator.prototype@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
+ integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==
+ dependencies:
+ define-properties "^1.2.1"
+ get-intrinsic "^1.2.1"
+ has-symbols "^1.0.3"
+ reflect.getprototypeof "^1.0.4"
+ set-function-name "^2.0.1"
+
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+load-json-file@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ parse-json "^4.0.0"
+ pify "^4.0.1"
+ strip-bom "^3.0.0"
+ type-fest "^0.3.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-inspect@^1.13.1, object-inspect@^1.9.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+ integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+ integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131"
+ integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+object.fromentries@^2.0.6, object.fromentries@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
+ integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+object.groupby@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee"
+ integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+
+object.hasown@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae"
+ integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==
+ dependencies:
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+object.values@^1.1.6, object.values@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a"
+ integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+
+p-limit@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pkg-conf@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae"
+ integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==
+ dependencies:
+ find-up "^3.0.0"
+ load-json-file "^5.2.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-is@^16.13.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+reflect.getprototypeof@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3"
+ integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+ globalthis "^1.0.3"
+ which-builtin-type "^1.1.3"
+
regenerator-runtime@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
+ integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ set-function-name "^2.0.0"
+
+regexpp@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.10.1, resolve@^1.22.1, resolve@^1.22.4:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.4:
+ version "2.0.0-next.5"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
+ integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-array-concat@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
+ integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.1"
+ has-symbols "^1.0.3"
+ isarray "^2.0.5"
+
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
+
+semver@^6.1.0, semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.0.0, semver@^7.3.8:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+ dependencies:
+ lru-cache "^6.0.0"
+
+set-function-length@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
+ integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+ dependencies:
+ define-data-property "^1.1.1"
+ get-intrinsic "^1.2.1"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
+
+set-function-name@^2.0.0, set-function-name@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
+ integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==
+ dependencies:
+ define-data-property "^1.0.1"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
split.js@^1.6.5:
version "1.6.5"
resolved "https://registry.yarnpkg.com/split.js/-/split.js-1.6.5.tgz#f7f61da1044c9984cb42947df4de4fadb5a3f300"
integrity sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==
+standard-engine@^15.0.0:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-15.1.0.tgz#717409a002edd13cd57f6554fdd3464d9a22a774"
+ integrity sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==
+ dependencies:
+ get-stdin "^8.0.0"
+ minimist "^1.2.6"
+ pkg-conf "^3.1.0"
+ xdg-basedir "^4.0.0"
+
+standard@^17.1.0:
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-17.1.0.tgz#829eeeb3139ad50714294d3531592d60ad1286af"
+ integrity sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g==
+ dependencies:
+ eslint "^8.41.0"
+ eslint-config-standard "17.1.0"
+ eslint-config-standard-jsx "^11.0.0"
+ eslint-plugin-import "^2.27.5"
+ eslint-plugin-n "^15.7.0"
+ eslint-plugin-promise "^6.1.1"
+ eslint-plugin-react "^7.32.2"
+ standard-engine "^15.0.0"
+ version-guard "^1.1.1"
+
stimulus-flatpickr@^3.0.0-0:
version "3.0.0-0"
resolved "https://registry.yarnpkg.com/stimulus-flatpickr/-/stimulus-flatpickr-3.0.0-0.tgz#af9bfa70bd1b74654312580101387c9d13ee32f2"
@@ -237,6 +1838,82 @@ stimulus-timeago@^4.1.0:
dependencies:
date-fns "^2.29.3"
+string.prototype.matchall@^4.0.8:
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100"
+ integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.5"
+ regexp.prototype.flags "^1.5.0"
+ set-function-name "^2.0.0"
+ side-channel "^1.0.4"
+
+string.prototype.trim@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
+ integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+string.prototype.trimend@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e"
+ integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+string.prototype.trimstart@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298"
+ integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
tippy.js@^6.3.7:
version "6.3.7"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c"
@@ -252,6 +1929,94 @@ tom-select@^2.2.2:
"@orchidjs/sifter" "^1.0.3"
"@orchidjs/unicode-variants" "^1.0.4"
+tsconfig-paths@^3.14.2:
+ version "3.14.2"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
+ integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+typed-array-buffer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
+ integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.1"
+ is-typed-array "^1.1.10"
+
+typed-array-byte-length@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
+ integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ has-proto "^1.0.1"
+ is-typed-array "^1.1.10"
+
+typed-array-byte-offset@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
+ integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ has-proto "^1.0.1"
+ is-typed-array "^1.1.10"
+
+typed-array-length@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+ integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ is-typed-array "^1.1.9"
+
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+version-guard@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/version-guard/-/version-guard-1.1.1.tgz#7a6e87a1babff1b43d6a7b0fd239731e278262fa"
+ integrity sha512-MGQLX89UxmYHgDvcXyjBI0cbmoW+t/dANDppNPrno64rYr8nH4SHSuElQuSYdXGEs0mUzdQe1BY+FhVPNsAmJQ==
+
vis-data@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-7.1.6.tgz#81dcf4d024d23183cacb680ad605e644cdd6ee6c"
@@ -266,3 +2031,80 @@ vis-util@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/vis-util/-/vis-util-5.0.3.tgz#6a9d67c6ed92f2bfa67e50c20166bb5f59ac07bf"
integrity sha512-Wf9STUcFrDzK4/Zr7B6epW2Kvm3ORNWF+WiwEz2dpf5RdWkLUXFSbLcuB88n1W6tCdFwVN+v3V4/Xmn9PeL39g==
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-builtin-type@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b"
+ integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==
+ dependencies:
+ function.prototype.name "^1.1.5"
+ has-tostringtag "^1.0.0"
+ is-async-function "^2.0.0"
+ is-date-object "^1.0.5"
+ is-finalizationregistry "^1.0.2"
+ is-generator-function "^1.0.10"
+ is-regex "^1.1.4"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.9"
+
+which-collection@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+ integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ dependencies:
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-weakmap "^2.0.1"
+ is-weakset "^2.0.1"
+
+which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
+ integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.4"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==