You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2019/08/27 13:57:49 UTC

[plc4x] 01/44: initial import of logstash plugin

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit d62583bf9dde5a85e4652caf9ab365eae5291c29
Author: Stefan Herrmann <st...@codecentric.de>
AuthorDate: Wed Aug 14 14:46:40 2019 +0200

    initial import of logstash plugin
---
 plc4j/integrations/logstash-plugin/.gitignore      |   79 +
 .../.gradle/4.8/fileChanges/last-build.bin         |  Bin 0 -> 1 bytes
 .../4.8/fileContent/annotation-processors.bin      |  Bin 0 -> 18654 bytes
 .../.gradle/4.8/fileContent/fileContent.lock       |  Bin 0 -> 17 bytes
 .../.gradle/4.8/fileHashes/fileHashes.bin          |  Bin 0 -> 134733 bytes
 .../.gradle/4.8/fileHashes/fileHashes.lock         |  Bin 0 -> 17 bytes
 .../.gradle/4.8/fileHashes/resourceHashesCache.bin |  Bin 0 -> 18769 bytes
 .../.gradle/4.8/taskHistory/taskHistory.bin        |  Bin 0 -> 485069 bytes
 .../.gradle/4.8/taskHistory/taskHistory.lock       |  Bin 0 -> 17 bytes
 .../buildOutputCleanup/buildOutputCleanup.lock     |  Bin 0 -> 17 bytes
 .../.gradle/buildOutputCleanup/cache.properties    |    2 +
 .../.gradle/buildOutputCleanup/outputFiles.bin     |  Bin 0 -> 18839 bytes
 .../.gradle/vcsWorkingDirs/gc.properties           |    0
 plc4j/integrations/logstash-plugin/Gemfile         |   12 +
 plc4j/integrations/logstash-plugin/README.md       |    9 +
 plc4j/integrations/logstash-plugin/VERSION         |    1 +
 plc4j/integrations/logstash-plugin/build.gradle    |  107 +
 .../logstash-plugin/docs/index.asciidoc            |  117 +
 .../integrations/logstash-plugin/gradle.properties |    1 +
 .../gradle/wrapper/gradle-wrapper.properties       |    6 +
 plc4j/integrations/logstash-plugin/gradlew         |  172 +
 plc4j/integrations/logstash-plugin/gradlew.bat     |   84 +
 .../lib/logstash-input-plc4x_input_jars.rb         |    5 +
 .../lib/logstash/inputs/plc4x_input.rb             |   12 +
 .../logstash-input-java_input_example.gemspec      |   22 +
 .../logstash-input-plc4x_input.gemspec             |   22 +
 plc4j/integrations/logstash-plugin/pom.xml         |   72 +
 .../java/org/apache/plc4x/logstash/Plc4xInput.java |   86 +
 .../plc4x/logstash/JavaInputExampleTest.java       |   53 +
 .../integrations/logstash-plugin/vendor/jruby/BSDL |   22 +
 .../logstash-plugin/vendor/jruby/COPYING           | 2475 ++++++++++
 .../logstash-plugin/vendor/jruby/LEGAL             |    3 +
 .../logstash-plugin/vendor/jruby/LICENSE.RUBY      |   59 +
 .../logstash-plugin/vendor/jruby/bin/ast           |  250 +
 .../logstash-plugin/vendor/jruby/bin/ast.bat       |    2 +
 .../logstash-plugin/vendor/jruby/bin/gem           |    4 +
 .../logstash-plugin/vendor/jruby/bin/gem.bat       |    2 +
 .../logstash-plugin/vendor/jruby/bin/irb           |   21 +
 .../logstash-plugin/vendor/jruby/bin/irb.bat       |    2 +
 .../logstash-plugin/vendor/jruby/bin/jgem          |   25 +
 .../logstash-plugin/vendor/jruby/bin/jgem.bat      |    2 +
 .../logstash-plugin/vendor/jruby/bin/jirb          |   21 +
 .../logstash-plugin/vendor/jruby/bin/jirb.bat      |    2 +
 .../logstash-plugin/vendor/jruby/bin/jirb_swing    |   73 +
 .../vendor/jruby/bin/jirb_swing.bat                |    2 +
 .../logstash-plugin/vendor/jruby/bin/jruby         |  441 ++
 .../logstash-plugin/vendor/jruby/bin/jruby.bash    |  441 ++
 .../logstash-plugin/vendor/jruby/bin/jruby.bat     |    6 +
 .../logstash-plugin/vendor/jruby/bin/jruby.dll     |  Bin 0 -> 1024512 bytes
 .../logstash-plugin/vendor/jruby/bin/jruby.exe     |  Bin 0 -> 959488 bytes
 .../logstash-plugin/vendor/jruby/bin/jruby.sh      |  321 ++
 .../logstash-plugin/vendor/jruby/bin/jruby200.sh   |    5 +
 .../logstash-plugin/vendor/jruby/bin/jrubyc        |   10 +
 .../logstash-plugin/vendor/jruby/bin/jrubyc.bat    |    2 +
 .../logstash-plugin/vendor/jruby/bin/jrubyd.bat    |    9 +
 .../logstash-plugin/vendor/jruby/bin/jrubyw.exe    |  Bin 0 -> 961536 bytes
 .../logstash-plugin/vendor/jruby/bin/rake          |   27 +
 .../logstash-plugin/vendor/jruby/bin/rake.bat      |    2 +
 .../logstash-plugin/vendor/jruby/bin/rdoc          |   27 +
 .../logstash-plugin/vendor/jruby/bin/rdoc.bat      |    2 +
 .../logstash-plugin/vendor/jruby/bin/ri            |   27 +
 .../logstash-plugin/vendor/jruby/bin/ri.bat        |    2 +
 .../logstash-plugin/vendor/jruby/bin/testrb        |    5 +
 .../logstash-plugin/vendor/jruby/bin/testrb.bat    |    2 +
 .../vendor/jruby/lib/jni/Darwin/libjffi-1.2.jnilib |  Bin 0 -> 148624 bytes
 .../jruby/lib/jni/aarch64-Linux/libjffi-1.2.so     |  Bin 0 -> 94386 bytes
 .../vendor/jruby/lib/jni/arm-Linux/libjffi-1.2.so  |  Bin 0 -> 91704 bytes
 .../vendor/jruby/lib/jni/i386-Linux/libjffi-1.2.so |  Bin 0 -> 80909 bytes
 .../vendor/jruby/lib/jni/i386-SunOS/libjffi-1.2.so |  Bin 0 -> 55724 bytes
 .../vendor/jruby/lib/jni/i386-Windows/jffi-1.2.dll |  Bin 0 -> 116997 bytes
 .../vendor/jruby/lib/jni/ppc-AIX/libjffi-1.2.a     |  Bin 0 -> 146475 bytes
 .../vendor/jruby/lib/jni/ppc64-AIX/libjffi-1.2.a   |  Bin 0 -> 169145 bytes
 .../jruby/lib/jni/ppc64-Linux/libjffi-1.2.so       |  Bin 0 -> 132742 bytes
 .../jruby/lib/jni/ppc64le-Linux/libjffi-1.2.so     |  Bin 0 -> 116541 bytes
 .../jruby/lib/jni/sparcv9-Linux/libjffi-1.2.so     |  Bin 0 -> 92947 bytes
 .../jruby/lib/jni/sparcv9-SunOS/libjffi-1.2.so     |  Bin 0 -> 63184 bytes
 .../jruby/lib/jni/x86_64-FreeBSD/libjffi-1.2.so    |  Bin 0 -> 83762 bytes
 .../jruby/lib/jni/x86_64-Linux/libjffi-1.2.so      |  Bin 0 -> 90382 bytes
 .../jruby/lib/jni/x86_64-OpenBSD/libjffi-1.2.so    |  Bin 0 -> 509169 bytes
 .../jruby/lib/jni/x86_64-SunOS/libjffi-1.2.so      |  Bin 0 -> 138344 bytes
 .../jruby/lib/jni/x86_64-Windows/jffi-1.2.dll      |  Bin 0 -> 141178 bytes
 .../shared/gems/did_you_mean-1.2.0/.ruby-version   |    1 +
 .../shared/gems/did_you_mean-1.2.0/.travis.yml     |   14 +
 .../shared/gems/did_you_mean-1.2.0/CHANGELOG.md    |  397 ++
 .../gems/shared/gems/did_you_mean-1.2.0/Gemfile    |    8 +
 .../shared/gems/did_you_mean-1.2.0/LICENSE.txt     |   22 +
 .../gems/shared/gems/did_you_mean-1.2.0/README.md  |  122 +
 .../gems/shared/gems/did_you_mean-1.2.0/Rakefile   |   47 +
 .../benchmark/jaro_winkler/memory_usage.rb         |   12 +
 .../benchmark/jaro_winkler/speed.rb                |   14 +
 .../benchmark/levenshtein/memory_usage.rb          |   12 +
 .../benchmark/levenshtein/speed.rb                 |   17 +
 .../did_you_mean-1.2.0/benchmark/memory_usage.rb   |   16 +
 .../gems/did_you_mean-1.2.0/did_you_mean.gemspec   |   25 +
 .../gems/did_you_mean-1.2.0/doc/CHANGELOG.md.erb   |    8 +
 .../did_you_mean-1.2.0/doc/changelog_generator.rb  |   34 +
 .../did_you_mean-1.2.0/evaluation/calculator.rb    |  105 +
 .../evaluation/dictionary_generator.rb             |   37 +
 .../evaluation/incorrect_words.yaml                | 1161 +++++
 .../gems/did_you_mean-1.2.0/lib/did_you_mean.rb    |   53 +
 .../lib/did_you_mean/core_ext/name_error.rb        |   27 +
 .../lib/did_you_mean/experimental.rb               |    2 +
 .../experimental/initializer_name_correction.rb    |   20 +
 .../experimental/ivar_name_correction.rb           |   74 +
 .../lib/did_you_mean/formatters/plain_formatter.rb |    9 +
 .../did_you_mean/formatters/verbose_formatter.rb   |   13 +
 .../lib/did_you_mean/jaro_winkler.rb               |   87 +
 .../lib/did_you_mean/levenshtein.rb                |   57 +
 .../lib/did_you_mean/spell_checker.rb              |   52 +
 .../spell_checkers/key_error_checker.rb            |   14 +
 .../spell_checkers/method_name_checker.rb          |   27 +
 .../spell_checkers/name_error_checkers.rb          |   20 +
 .../name_error_checkers/class_name_checker.rb      |   46 +
 .../name_error_checkers/variable_name_checker.rb   |   30 +
 .../did_you_mean/spell_checkers/null_checker.rb    |    6 +
 .../did_you_mean-1.2.0/lib/did_you_mean/verbose.rb |    4 +
 .../lib/did_you_mean/verbose_formatter.rb          |    7 +
 .../did_you_mean-1.2.0/lib/did_you_mean/version.rb |    3 +
 .../test/core_ext/name_error_extension_test.rb     |   47 +
 .../test/edit_distance/jaro_winkler_test.rb        |   37 +
 .../initializer_name_correction_test.rb            |   15 +
 .../test/experimental/method_name_checker_test.rb  |   13 +
 .../did_you_mean-1.2.0/test/spell_checker_test.rb  |   77 +
 .../test/spell_checking/class_name_check_test.rb   |   65 +
 .../test/spell_checking/key_name_check_test.rb     |   44 +
 .../test/spell_checking/method_name_check_test.rb  |  119 +
 .../uncorrectable_name_check_test.rb               |   15 +
 .../spell_checking/variable_name_check_test.rb     |  122 +
 .../gems/did_you_mean-1.2.0/test/test_helper.rb    |   13 +
 .../test/verbose_formatter_test.rb                 |   23 +
 .../gems/shared/gems/fileutils-1.1.0/bin/console   |   14 +
 .../gems/shared/gems/fileutils-1.1.0/bin/setup     |    8 +
 .../gems/jar-dependencies-0.4.0/bin/lock_jars      |   49 +
 .../gems/shared/gems/minitest-5.10.3/.autotest     |   34 +
 .../gems/shared/gems/minitest-5.10.3/History.rdoc  | 1241 +++++
 .../gems/shared/gems/minitest-5.10.3/Manifest.txt  |   26 +
 .../gems/shared/gems/minitest-5.10.3/README.rdoc   |  730 +++
 .../ruby/gems/shared/gems/minitest-5.10.3/Rakefile |   86 +
 .../gems/minitest-5.10.3/design_rationale.rb       |   52 +
 .../gems/minitest-5.10.3/lib/hoe/minitest.rb       |   32 +
 .../shared/gems/minitest-5.10.3/lib/minitest.rb    |  859 ++++
 .../minitest-5.10.3/lib/minitest/assertions.rb     |  693 +++
 .../gems/minitest-5.10.3/lib/minitest/autorun.rb   |   13 +
 .../gems/minitest-5.10.3/lib/minitest/benchmark.rb |  424 ++
 .../minitest-5.10.3/lib/minitest/expectations.rb   |  284 ++
 .../gems/minitest-5.10.3/lib/minitest/hell.rb      |   11 +
 .../gems/minitest-5.10.3/lib/minitest/mock.rb      |  243 +
 .../gems/minitest-5.10.3/lib/minitest/parallel.rb  |   70 +
 .../gems/minitest-5.10.3/lib/minitest/pride.rb     |    4 +
 .../minitest-5.10.3/lib/minitest/pride_plugin.rb   |  142 +
 .../gems/minitest-5.10.3/lib/minitest/spec.rb      |  331 ++
 .../gems/minitest-5.10.3/lib/minitest/test.rb      |  284 ++
 .../gems/minitest-5.10.3/lib/minitest/unit.rb      |   45 +
 .../minitest-5.10.3/test/minitest/metametameta.rb  |  101 +
 .../test/minitest/test_minitest_benchmark.rb       |  137 +
 .../test/minitest/test_minitest_mock.rb            |  512 ++
 .../test/minitest/test_minitest_reporter.rb        |  287 ++
 .../test/minitest/test_minitest_spec.rb            |  985 ++++
 .../test/minitest/test_minitest_test.rb            | 2110 ++++++++
 .../gems/shared/gems/net-telnet-0.1.1/.travis.yml  |    4 +
 .../ruby/gems/shared/gems/net-telnet-0.1.1/Gemfile |    4 +
 .../gems/shared/gems/net-telnet-0.1.1/LICENSE.txt  |   56 +
 .../gems/shared/gems/net-telnet-0.1.1/README.md    |   60 +
 .../gems/shared/gems/net-telnet-0.1.1/Rakefile     |    9 +
 .../gems/shared/gems/net-telnet-0.1.1/bin/console  |   14 +
 .../gems/shared/gems/net-telnet-0.1.1/bin/setup    |    7 +
 .../shared/gems/net-telnet-0.1.1/lib/net-telnet.rb |    1 +
 .../shared/gems/net-telnet-0.1.1/lib/net/telnet.rb |  763 +++
 .../net-telnet-0.1.1/lib/net/telnet/version.rb     |    5 +
 .../gems/net-telnet-0.1.1/net-telnet.gemspec       |   23 +
 .../shared/gems/power_assert-1.1.3/.travis.yml     |   23 +
 .../ruby/gems/shared/gems/power_assert-1.1.3/BSDL  |   22 +
 .../gems/shared/gems/power_assert-1.1.3/COPYING    |   57 +
 .../gems/shared/gems/power_assert-1.1.3/Gemfile    |    9 +
 .../ruby/gems/shared/gems/power_assert-1.1.3/LEGAL |    4 +
 .../shared/gems/power_assert-1.1.3/README.rdoc     |   81 +
 .../gems/shared/gems/power_assert-1.1.3/Rakefile   |   59 +
 .../shared/gems/power_assert-1.1.3/bin/console     |   12 +
 .../gems/shared/gems/power_assert-1.1.3/bin/setup  |    6 +
 .../gems/power_assert-1.1.3/lib/power_assert.rb    |   98 +
 .../lib/power_assert/colorize.rb                   |    9 +
 .../lib/power_assert/configuration.rb              |   46 +
 .../power_assert-1.1.3/lib/power_assert/context.rb |  235 +
 .../lib/power_assert/enable_tracepoint_events.rb   |   91 +
 .../lib/power_assert/inspector.rb                  |   61 +
 .../power_assert-1.1.3/lib/power_assert/parser.rb  |  244 +
 .../power_assert-1.1.3/lib/power_assert/version.rb |    3 +
 .../gems/power_assert-1.1.3/power_assert.gemspec   |   31 +
 .../gems/shared/gems/rake-12.3.0/CONTRIBUTING.rdoc |   36 +
 .../lib/ruby/gems/shared/gems/rake-12.3.0/Gemfile  |    3 +
 .../ruby/gems/shared/gems/rake-12.3.0/History.rdoc | 2299 +++++++++
 .../ruby/gems/shared/gems/rake-12.3.0/MIT-LICENSE  |   21 +
 .../ruby/gems/shared/gems/rake-12.3.0/README.rdoc  |  156 +
 .../lib/ruby/gems/shared/gems/rake-12.3.0/Rakefile |   38 +
 .../ruby/gems/shared/gems/rake-12.3.0/bin/console  |    7 +
 .../ruby/gems/shared/gems/rake-12.3.0/bin/setup    |    6 +
 .../gems/rake-12.3.0/doc/command_line_usage.rdoc   |  158 +
 .../shared/gems/rake-12.3.0/doc/example/Rakefile1  |   38 +
 .../shared/gems/rake-12.3.0/doc/example/Rakefile2  |   35 +
 .../gems/shared/gems/rake-12.3.0/doc/example/a.c   |    6 +
 .../gems/shared/gems/rake-12.3.0/doc/example/b.c   |    6 +
 .../shared/gems/rake-12.3.0/doc/example/main.c     |   11 +
 .../gems/shared/gems/rake-12.3.0/doc/glossary.rdoc |   42 +
 .../ruby/gems/shared/gems/rake-12.3.0/doc/jamis.rb |  592 +++
 .../shared/gems/rake-12.3.0/doc/proto_rake.rdoc    |  127 +
 .../ruby/gems/shared/gems/rake-12.3.0/doc/rake.1   |  156 +
 .../gems/shared/gems/rake-12.3.0/doc/rakefile.rdoc |  622 +++
 .../gems/shared/gems/rake-12.3.0/doc/rational.rdoc |  151 +
 .../lib/ruby/gems/shared/gems/rake-12.3.0/exe/rake |   27 +
 .../ruby/gems/shared/gems/rake-12.3.0/lib/rake.rb  |   71 +
 .../gems/rake-12.3.0/lib/rake/application.rb       |  824 ++++
 .../shared/gems/rake-12.3.0/lib/rake/backtrace.rb  |   24 +
 .../gems/shared/gems/rake-12.3.0/lib/rake/clean.rb |   78 +
 .../shared/gems/rake-12.3.0/lib/rake/cloneable.rb  |   17 +
 .../gems/rake-12.3.0/lib/rake/cpu_counter.rb       |  107 +
 .../gems/rake-12.3.0/lib/rake/default_loader.rb    |   15 +
 .../gems/rake-12.3.0/lib/rake/dsl_definition.rb    |  195 +
 .../shared/gems/rake-12.3.0/lib/rake/early_time.rb |   22 +
 .../shared/gems/rake-12.3.0/lib/rake/ext/core.rb   |   26 +
 .../shared/gems/rake-12.3.0/lib/rake/ext/string.rb |  176 +
 .../rake-12.3.0/lib/rake/file_creation_task.rb     |   25 +
 .../shared/gems/rake-12.3.0/lib/rake/file_list.rb  |  435 ++
 .../shared/gems/rake-12.3.0/lib/rake/file_task.rb  |   54 +
 .../shared/gems/rake-12.3.0/lib/rake/file_utils.rb |  137 +
 .../gems/rake-12.3.0/lib/rake/file_utils_ext.rb    |  145 +
 .../gems/rake-12.3.0/lib/rake/invocation_chain.rb  |   57 +
 .../lib/rake/invocation_exception_mixin.rb         |   17 +
 .../shared/gems/rake-12.3.0/lib/rake/late_time.rb  |   18 +
 .../gems/rake-12.3.0/lib/rake/linked_list.rb       |  112 +
 .../gems/rake-12.3.0/lib/rake/loaders/makefile.rb  |   54 +
 .../shared/gems/rake-12.3.0/lib/rake/multi_task.rb |   50 +
 .../shared/gems/rake-12.3.0/lib/rake/name_space.rb |   38 +
 .../gems/rake-12.3.0/lib/rake/packagetask.rb       |  211 +
 .../gems/shared/gems/rake-12.3.0/lib/rake/phony.rb |   16 +
 .../gems/rake-12.3.0/lib/rake/private_reader.rb    |   21 +
 .../shared/gems/rake-12.3.0/lib/rake/promise.rb    |  100 +
 .../gems/rake-12.3.0/lib/rake/pseudo_status.rb     |   30 +
 .../gems/rake-12.3.0/lib/rake/rake_module.rb       |   67 +
 .../gems/rake-12.3.0/lib/rake/rake_test_loader.rb  |   26 +
 .../lib/rake/rule_recursion_overflow_error.rb      |   20 +
 .../gems/shared/gems/rake-12.3.0/lib/rake/scope.rb |   43 +
 .../gems/shared/gems/rake-12.3.0/lib/rake/task.rb  |  391 ++
 .../rake-12.3.0/lib/rake/task_argument_error.rb    |    8 +
 .../gems/rake-12.3.0/lib/rake/task_arguments.rb    |  109 +
 .../gems/rake-12.3.0/lib/rake/task_manager.rb      |  319 ++
 .../shared/gems/rake-12.3.0/lib/rake/tasklib.rb    |   12 +
 .../shared/gems/rake-12.3.0/lib/rake/testtask.rb   |  224 +
 .../rake-12.3.0/lib/rake/thread_history_display.rb |   49 +
 .../gems/rake-12.3.0/lib/rake/thread_pool.rb       |  163 +
 .../gems/rake-12.3.0/lib/rake/trace_output.rb      |   23 +
 .../shared/gems/rake-12.3.0/lib/rake/version.rb    |   10 +
 .../gems/shared/gems/rake-12.3.0/lib/rake/win32.rb |   51 +
 .../ruby/gems/shared/gems/rake-12.3.0/rake.gemspec |   43 +
 .../lib/ruby/gems/shared/gems/rdoc-6.0.1/exe/rdoc  |   44 +
 .../lib/ruby/gems/shared/gems/rdoc-6.0.1/exe/ri    |   12 +
 .../ruby/gems/shared/gems/test-unit-3.2.8/COPYING  |   67 +
 .../lib/ruby/gems/shared/gems/test-unit-3.2.8/GPL  |  339 ++
 .../lib/ruby/gems/shared/gems/test-unit-3.2.8/LGPL |  502 ++
 .../lib/ruby/gems/shared/gems/test-unit-3.2.8/PSFL |  271 +
 .../gems/shared/gems/test-unit-3.2.8/README.md     |  101 +
 .../ruby/gems/shared/gems/test-unit-3.2.8/Rakefile |   80 +
 .../test-unit-3.2.8/doc/text/getting-started.md    |  246 +
 .../shared/gems/test-unit-3.2.8/doc/text/how-to.md |   90 +
 .../shared/gems/test-unit-3.2.8/doc/text/news.md   | 1303 +++++
 .../shared/gems/test-unit-3.2.8/lib/test-unit.rb   |   34 +
 .../shared/gems/test-unit-3.2.8/lib/test/unit.rb   |  505 ++
 .../lib/test/unit/assertion-failed-error.rb        |   25 +
 .../test-unit-3.2.8/lib/test/unit/assertions.rb    | 2249 +++++++++
 .../lib/test/unit/attribute-matcher.rb             |   26 +
 .../test-unit-3.2.8/lib/test/unit/attribute.rb     |  222 +
 .../lib/test/unit/auto-runner-loader.rb            |   17 +
 .../test-unit-3.2.8/lib/test/unit/autorunner.rb    |  533 ++
 .../lib/test/unit/code-snippet-fetcher.rb          |   58 +
 .../test-unit-3.2.8/lib/test/unit/collector.rb     |   73 +
 .../lib/test/unit/collector/descendant.rb          |   19 +
 .../test-unit-3.2.8/lib/test/unit/collector/dir.rb |  108 +
 .../lib/test/unit/collector/load.rb                |  199 +
 .../lib/test/unit/collector/objectspace.rb         |   34 +
 .../test-unit-3.2.8/lib/test/unit/collector/xml.rb |  249 +
 .../test-unit-3.2.8/lib/test/unit/color-scheme.rb  |  198 +
 .../gems/test-unit-3.2.8/lib/test/unit/color.rb    |  134 +
 .../gems/test-unit-3.2.8/lib/test/unit/data.rb     |  262 +
 .../gems/test-unit-3.2.8/lib/test/unit/diff.rb     |  746 +++
 .../gems/test-unit-3.2.8/lib/test/unit/error.rb    |  158 +
 .../lib/test/unit/exception-handler.rb             |   82 +
 .../gems/test-unit-3.2.8/lib/test/unit/failure.rb  |  169 +
 .../lib/test/unit/fault-location-detector.rb       |  100 +
 .../gems/test-unit-3.2.8/lib/test/unit/fixture.rb  |  298 ++
 .../test-unit-3.2.8/lib/test/unit/notification.rb  |  136 +
 .../gems/test-unit-3.2.8/lib/test/unit/omission.rb |  195 +
 .../gems/test-unit-3.2.8/lib/test/unit/pending.rb  |  154 +
 .../gems/test-unit-3.2.8/lib/test/unit/priority.rb |  192 +
 .../lib/test/unit/runner/console.rb                |   84 +
 .../test-unit-3.2.8/lib/test/unit/runner/emacs.rb  |    8 +
 .../test-unit-3.2.8/lib/test/unit/runner/xml.rb    |   15 +
 .../lib/test/unit/test-suite-creator.rb            |   89 +
 .../gems/test-unit-3.2.8/lib/test/unit/testcase.rb |  860 ++++
 .../test-unit-3.2.8/lib/test/unit/testresult.rb    |  132 +
 .../test-unit-3.2.8/lib/test/unit/testsuite.rb     |  175 +
 .../lib/test/unit/ui/console/outputlevel.rb        |   15 +
 .../lib/test/unit/ui/console/testrunner.rb         |  750 +++
 .../lib/test/unit/ui/emacs/testrunner.rb           |   49 +
 .../test-unit-3.2.8/lib/test/unit/ui/testrunner.rb |   53 +
 .../lib/test/unit/ui/testrunnermediator.rb         |  114 +
 .../lib/test/unit/ui/testrunnerutilities.rb        |   41 +
 .../lib/test/unit/ui/xml/testrunner.rb             |  224 +
 .../lib/test/unit/util/backtracefilter.rb          |   59 +
 .../lib/test/unit/util/method-owner-finder.rb      |   28 +
 .../lib/test/unit/util/observable.rb               |   90 +
 .../test-unit-3.2.8/lib/test/unit/util/output.rb   |   31 +
 .../lib/test/unit/util/procwrapper.rb              |   48 +
 .../gems/test-unit-3.2.8/lib/test/unit/version.rb  |    5 +
 .../shared/gems/test-unit-3.2.8/sample/adder.rb    |   13 +
 .../gems/test-unit-3.2.8/sample/subtracter.rb      |   12 +
 .../gems/test-unit-3.2.8/sample/test_adder.rb      |   20 +
 .../gems/test-unit-3.2.8/sample/test_subtracter.rb |   20 +
 .../gems/test-unit-3.2.8/sample/test_user.rb       |   23 +
 .../test/collector/test-descendant.rb              |  182 +
 .../test-unit-3.2.8/test/collector/test-load.rb    |  442 ++
 .../test-unit-3.2.8/test/collector/test_dir.rb     |  407 ++
 .../test/collector/test_objectspace.rb             |  102 +
 .../test-unit-3.2.8/test/fixtures/header-label.csv |    3 +
 .../test-unit-3.2.8/test/fixtures/header-label.tsv |    3 +
 .../gems/test-unit-3.2.8/test/fixtures/header.csv  |    3 +
 .../gems/test-unit-3.2.8/test/fixtures/header.tsv  |    3 +
 .../test-unit-3.2.8/test/fixtures/no-header.csv    |    2 +
 .../test-unit-3.2.8/test/fixtures/no-header.tsv    |    2 +
 .../gems/test-unit-3.2.8/test/fixtures/plus.csv    |    3 +
 .../shared/gems/test-unit-3.2.8/test/run-test.rb   |   22 +
 .../gems/test-unit-3.2.8/test/test-assertions.rb   | 2180 +++++++++
 .../test-unit-3.2.8/test/test-attribute-matcher.rb |   38 +
 .../gems/test-unit-3.2.8/test/test-attribute.rb    |  123 +
 .../gems/test-unit-3.2.8/test/test-code-snippet.rb |   37 +
 .../gems/test-unit-3.2.8/test/test-color-scheme.rb |   82 +
 .../shared/gems/test-unit-3.2.8/test/test-color.rb |   47 +
 .../shared/gems/test-unit-3.2.8/test/test-data.rb  |  303 ++
 .../shared/gems/test-unit-3.2.8/test/test-diff.rb  |  518 ++
 .../gems/test-unit-3.2.8/test/test-emacs-runner.rb |   60 +
 .../shared/gems/test-unit-3.2.8/test/test-error.rb |   26 +
 .../gems/test-unit-3.2.8/test/test-failure.rb      |   33 +
 .../test/test-fault-location-detector.rb           |  163 +
 .../gems/test-unit-3.2.8/test/test-fixture.rb      |  713 +++
 .../gems/test-unit-3.2.8/test/test-notification.rb |   33 +
 .../gems/test-unit-3.2.8/test/test-omission.rb     |   81 +
 .../gems/test-unit-3.2.8/test/test-pending.rb      |   70 +
 .../gems/test-unit-3.2.8/test/test-priority.rb     |  173 +
 .../gems/test-unit-3.2.8/test/test-test-case.rb    | 1278 +++++
 .../gems/test-unit-3.2.8/test/test-test-result.rb  |  113 +
 .../test/test-test-suite-creator.rb                |   97 +
 .../gems/test-unit-3.2.8/test/test-test-suite.rb   |  151 +
 .../test-unit-3.2.8/test/testunit-test-util.rb     |   31 +
 .../test/ui/test_testrunmediator.rb                |   20 +
 .../test/util/test-method-owner-finder.rb          |   38 +
 .../gems/test-unit-3.2.8/test/util/test-output.rb  |   11 +
 .../test/util/test_backtracefilter.rb              |   52 +
 .../test-unit-3.2.8/test/util/test_observable.rb   |  102 +
 .../test-unit-3.2.8/test/util/test_procwrapper.rb  |   36 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/.travis.yml |    6 +
 .../lib/ruby/gems/shared/gems/xmlrpc-0.3.0/Gemfile |    3 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/LICENSE.txt |   56 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/README.md   |   60 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/Rakefile    |   10 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/bin/console |   14 +
 .../ruby/gems/shared/gems/xmlrpc-0.3.0/bin/setup   |    8 +
 .../gems/shared/gems/xmlrpc-0.3.0/lib/xmlrpc.rb    |  293 ++
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/base64.rb  |   63 +
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/client.rb  |  629 +++
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/config.rb  |   39 +
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/create.rb  |  287 ++
 .../gems/xmlrpc-0.3.0/lib/xmlrpc/datetime.rb       |  124 +
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/marshal.rb |   67 +
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/parser.rb  |  642 +++
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/server.rb  |  708 +++
 .../shared/gems/xmlrpc-0.3.0/lib/xmlrpc/utils.rb   |  172 +
 .../gems/shared/gems/xmlrpc-0.3.0/xmlrpc.gemspec   |   26 +
 .../specifications/default/cmath-1.0.0.gemspec     |   36 +
 .../specifications/default/csv-1.0.0.gemspec       |   35 +
 .../specifications/default/fileutils-1.1.0.gemspec |   33 +
 .../specifications/default/ipaddr-1.2.0.gemspec    |   37 +
 .../default/jar-dependencies-0.4.0.gemspec         |   42 +
 .../default/jruby-openssl-0.10.2-java.gemspec      |   40 +
 .../default/jruby-readline-1.3.7-java.gemspec      |   22 +
 .../specifications/default/json-2.2.0-java.gemspec |   36 +
 .../default/psych-3.1.0-java.gemspec               |   45 +
 .../specifications/default/rake-ant-1.0.4.gemspec  |   33 +
 .../specifications/default/rdoc-6.0.1.gemspec      |   48 +
 .../specifications/default/scanf-1.0.0.gemspec     |   39 +
 .../specifications/default/webrick-1.4.2.gemspec   |   33 +
 .../specifications/did_you_mean-1.2.0.gemspec      |   39 +
 .../shared/specifications/minitest-5.10.3.gemspec  |   39 +
 .../shared/specifications/net-telnet-0.1.1.gemspec |   35 +
 .../specifications/power_assert-1.1.3.gemspec      |   54 +
 .../gems/shared/specifications/rake-12.3.0.gemspec |   49 +
 .../shared/specifications/test-unit-3.2.8.gemspec  |   48 +
 .../shared/specifications/xmlrpc-0.3.0.gemspec     |   40 +
 .../vendor/jruby/lib/ruby/include/ruby.h           |    1 +
 .../vendor/jruby/lib/ruby/stdlib/English.rb        |  188 +
 .../vendor/jruby/lib/ruby/stdlib/Win32API.rb       |  102 +
 .../vendor/jruby/lib/ruby/stdlib/abbrev.rb         |  132 +
 .../vendor/jruby/lib/ruby/stdlib/ant.rb            |    1 +
 .../vendor/jruby/lib/ruby/stdlib/base64.rb         |  107 +
 .../vendor/jruby/lib/ruby/stdlib/benchmark.rb      |  562 +++
 .../vendor/jruby/lib/ruby/stdlib/bigdecimal.rb     |    2 +
 .../jruby/lib/ruby/stdlib/bigdecimal/jacobian.rb   |   88 +
 .../jruby/lib/ruby/stdlib/bigdecimal/ludcmp.rb     |   89 +
 .../jruby/lib/ruby/stdlib/bigdecimal/math.rb       |  246 +
 .../jruby/lib/ruby/stdlib/bigdecimal/newton.rb     |   80 +
 .../jruby/lib/ruby/stdlib/bigdecimal/util.rb       |  134 +
 .../vendor/jruby/lib/ruby/stdlib/cgi.rb            |  296 ++
 .../vendor/jruby/lib/ruby/stdlib/cgi/cookie.rb     |  188 +
 .../vendor/jruby/lib/ruby/stdlib/cgi/core.rb       |  888 ++++
 .../vendor/jruby/lib/ruby/stdlib/cgi/escape.rb     |    2 +
 .../vendor/jruby/lib/ruby/stdlib/cgi/html.rb       | 1035 ++++
 .../vendor/jruby/lib/ruby/stdlib/cgi/session.rb    |  534 ++
 .../jruby/lib/ruby/stdlib/cgi/session/pstore.rb    |  101 +
 .../vendor/jruby/lib/ruby/stdlib/cgi/util.rb       |  223 +
 .../vendor/jruby/lib/ruby/stdlib/cmath.rb          |  435 ++
 .../vendor/jruby/lib/ruby/stdlib/complex.rb        |    2 +
 .../vendor/jruby/lib/ruby/stdlib/continuation.rb   |   40 +
 .../vendor/jruby/lib/ruby/stdlib/coverage.rb       |    2 +
 .../vendor/jruby/lib/ruby/stdlib/csv.rb            | 2355 +++++++++
 .../vendor/jruby/lib/ruby/stdlib/date.rb           |  778 +++
 .../vendor/jruby/lib/ruby/stdlib/date/delta.rb     |  431 ++
 .../jruby/lib/ruby/stdlib/date/delta/parser.rb     |  301 ++
 .../jruby/lib/ruby/stdlib/date/delta/parser.ry     |   84 +
 .../vendor/jruby/lib/ruby/stdlib/date/format.rb    |  619 +++
 .../vendor/jruby/lib/ruby/stdlib/debug.rb          | 1117 +++++
 .../vendor/jruby/lib/ruby/stdlib/delegate.rb       |  414 ++
 .../vendor/jruby/lib/ruby/stdlib/digest.rb         |  112 +
 .../jruby/lib/ruby/stdlib/digest/bubblebabble.rb   |    2 +
 .../vendor/jruby/lib/ruby/stdlib/digest/md5.rb     |    2 +
 .../vendor/jruby/lib/ruby/stdlib/digest/rmd160.rb  |    2 +
 .../vendor/jruby/lib/ruby/stdlib/digest/sha1.rb    |    2 +
 .../vendor/jruby/lib/ruby/stdlib/digest/sha2.rb    |  144 +
 .../vendor/jruby/lib/ruby/stdlib/drb.rb            |    3 +
 .../vendor/jruby/lib/ruby/stdlib/drb/acl.rb        |  239 +
 .../vendor/jruby/lib/ruby/stdlib/drb/drb.rb        | 1920 ++++++++
 .../vendor/jruby/lib/ruby/stdlib/drb/eq.rb         |   15 +
 .../vendor/jruby/lib/ruby/stdlib/drb/extserv.rb    |   44 +
 .../vendor/jruby/lib/ruby/stdlib/drb/extservm.rb   |   93 +
 .../vendor/jruby/lib/ruby/stdlib/drb/gw.rb         |  161 +
 .../jruby/lib/ruby/stdlib/drb/invokemethod.rb      |   35 +
 .../vendor/jruby/lib/ruby/stdlib/drb/observer.rb   |   26 +
 .../vendor/jruby/lib/ruby/stdlib/drb/ssl.rb        |  346 ++
 .../jruby/lib/ruby/stdlib/drb/timeridconv.rb       |   97 +
 .../vendor/jruby/lib/ruby/stdlib/drb/unix.rb       |  118 +
 .../vendor/jruby/lib/ruby/stdlib/e2mmap.rb         |  177 +
 .../vendor/jruby/lib/ruby/stdlib/enumerator.rb     |    2 +
 .../vendor/jruby/lib/ruby/stdlib/erb.rb            | 1051 ++++
 .../vendor/jruby/lib/ruby/stdlib/etc.rb            |    2 +
 .../vendor/jruby/lib/ruby/stdlib/expect.rb         |   71 +
 .../vendor/jruby/lib/ruby/stdlib/fcntl.rb          |    2 +
 .../vendor/jruby/lib/ruby/stdlib/ffi.rb            |    1 +
 .../jruby/lib/ruby/stdlib/ffi/autopointer.rb       |   37 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/buffer.rb     |    1 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/enum.rb       |    1 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/errno.rb      |   35 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/ffi.rb        |  144 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/io.rb         |   44 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/library.rb    |  499 ++
 .../jruby/lib/ruby/stdlib/ffi/managedstruct.rb     |   81 +
 .../jruby/lib/ruby/stdlib/ffi/memorypointer.rb     |    1 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/platform.rb   |   12 +
 .../stdlib/ffi/platform/aarch64-linux/types.conf   |  104 +
 .../ruby/stdlib/ffi/platform/arm-linux/types.conf  |  104 +
 .../lib/ruby/stdlib/ffi/platform/errno.rb.ffi      |   71 +
 .../jruby/lib/ruby/stdlib/ffi/platform/etc.rb.ffi  |   31 +
 .../ruby/stdlib/ffi/platform/fcntl-flock.rb.ffi    |   17 +
 .../lib/ruby/stdlib/ffi/platform/fcntl.rb.ffi      |   32 +
 .../stdlib/ffi/platform/i386-cygwin/types.conf     |    3 +
 .../ruby/stdlib/ffi/platform/i386-darwin/errno.rb  |   72 +
 .../ruby/stdlib/ffi/platform/i386-darwin/etc.rb    |   31 +
 .../ruby/stdlib/ffi/platform/i386-darwin/fcntl.rb  |   33 +
 .../stdlib/ffi/platform/i386-darwin/platform.conf  |  539 ++
 .../ruby/stdlib/ffi/platform/i386-darwin/socket.rb |  198 +
 .../ruby/stdlib/ffi/platform/i386-darwin/stat.rb   |   53 +
 .../stdlib/ffi/platform/i386-darwin/sysconf.rb     |  140 +
 .../ruby/stdlib/ffi/platform/i386-darwin/syslog.rb |   48 +
 .../stdlib/ffi/platform/i386-darwin/types.conf     |  100 +
 .../ruby/stdlib/ffi/platform/i386-darwin/zlib.rb   | 1465 ++++++
 .../stdlib/ffi/platform/i386-freebsd/types.conf    |  152 +
 .../ruby/stdlib/ffi/platform/i386-gnu/types.conf   |  107 +
 .../ruby/stdlib/ffi/platform/i386-linux/errno.rb   |   72 +
 .../lib/ruby/stdlib/ffi/platform/i386-linux/etc.rb |   31 +
 .../ruby/stdlib/ffi/platform/i386-linux/fcntl.rb   |   33 +
 .../stdlib/ffi/platform/i386-linux/platform.conf   |  539 ++
 .../ruby/stdlib/ffi/platform/i386-linux/socket.rb  |  198 +
 .../ruby/stdlib/ffi/platform/i386-linux/stat.rb    |   53 +
 .../ruby/stdlib/ffi/platform/i386-linux/sysconf.rb |  140 +
 .../ruby/stdlib/ffi/platform/i386-linux/syslog.rb  |   48 +
 .../ruby/stdlib/ffi/platform/i386-linux/types.conf |  103 +
 .../ruby/stdlib/ffi/platform/i386-linux/zlib.rb    | 1465 ++++++
 .../stdlib/ffi/platform/i386-netbsd/types.conf     |  126 +
 .../ruby/stdlib/ffi/platform/i386-openbsd/errno.rb |   72 +
 .../ruby/stdlib/ffi/platform/i386-openbsd/etc.rb   |   31 +
 .../ruby/stdlib/ffi/platform/i386-openbsd/fcntl.rb |   33 +
 .../stdlib/ffi/platform/i386-openbsd/platform.conf |  565 +++
 .../stdlib/ffi/platform/i386-openbsd/socket.rb     |  198 +
 .../ruby/stdlib/ffi/platform/i386-openbsd/stat.rb  |   53 +
 .../stdlib/ffi/platform/i386-openbsd/sysconf.rb    |  140 +
 .../stdlib/ffi/platform/i386-openbsd/syslog.rb     |   48 +
 .../stdlib/ffi/platform/i386-openbsd/types.conf    |  128 +
 .../ruby/stdlib/ffi/platform/i386-openbsd/zlib.rb  | 1465 ++++++
 .../ruby/stdlib/ffi/platform/i386-solaris/errno.rb |   72 +
 .../ruby/stdlib/ffi/platform/i386-solaris/etc.rb   |   31 +
 .../ruby/stdlib/ffi/platform/i386-solaris/fcntl.rb |   33 +
 .../stdlib/ffi/platform/i386-solaris/platform.conf |  561 +++
 .../stdlib/ffi/platform/i386-solaris/socket.rb     |  198 +
 .../ruby/stdlib/ffi/platform/i386-solaris/stat.rb  |   53 +
 .../stdlib/ffi/platform/i386-solaris/sysconf.rb    |  140 +
 .../stdlib/ffi/platform/i386-solaris/syslog.rb     |   48 +
 .../stdlib/ffi/platform/i386-solaris/types.conf    |  122 +
 .../ruby/stdlib/ffi/platform/i386-solaris/zlib.rb  | 1465 ++++++
 .../ruby/stdlib/ffi/platform/i386-windows/errno.rb |   72 +
 .../ruby/stdlib/ffi/platform/i386-windows/etc.rb   |   31 +
 .../ruby/stdlib/ffi/platform/i386-windows/fcntl.rb |   33 +
 .../stdlib/ffi/platform/i386-windows/platform.conf |  516 ++
 .../stdlib/ffi/platform/i386-windows/types.conf    |  105 +
 .../ruby/stdlib/ffi/platform/i386-windows/zlib.rb  | 1465 ++++++
 .../ruby/stdlib/ffi/platform/i486-gnu/types.conf   |  107 +
 .../ruby/stdlib/ffi/platform/ia64-linux/types.conf |  104 +
 .../ruby/stdlib/ffi/platform/mips-linux/types.conf |  102 +
 .../stdlib/ffi/platform/mips64el-linux/types.conf  |  104 +
 .../stdlib/ffi/platform/mipsel-linux/types.conf    |  102 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/errno.rb  |   72 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/etc.rb    |   31 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/fcntl.rb  |   33 +
 .../stdlib/ffi/platform/powerpc-aix/platform.conf  |  619 +++
 .../ruby/stdlib/ffi/platform/powerpc-aix/socket.rb |  198 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/stat.rb   |   53 +
 .../stdlib/ffi/platform/powerpc-aix/sysconf.rb     |  140 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/syslog.rb |   48 +
 .../stdlib/ffi/platform/powerpc-aix/types.conf     |  180 +
 .../ruby/stdlib/ffi/platform/powerpc-aix/zlib.rb   | 1465 ++++++
 .../stdlib/ffi/platform/powerpc-darwin/errno.rb    |   72 +
 .../ruby/stdlib/ffi/platform/powerpc-darwin/etc.rb |   31 +
 .../stdlib/ffi/platform/powerpc-darwin/fcntl.rb    |   33 +
 .../ffi/platform/powerpc-darwin/platform.conf      |  539 ++
 .../stdlib/ffi/platform/powerpc-darwin/socket.rb   |  198 +
 .../stdlib/ffi/platform/powerpc-darwin/stat.rb     |   53 +
 .../stdlib/ffi/platform/powerpc-darwin/sysconf.rb  |  140 +
 .../stdlib/ffi/platform/powerpc-darwin/syslog.rb   |   48 +
 .../stdlib/ffi/platform/powerpc-darwin/types.conf  |  100 +
 .../stdlib/ffi/platform/powerpc-darwin/zlib.rb     | 1465 ++++++
 .../stdlib/ffi/platform/powerpc-linux/types.conf   |  100 +
 .../stdlib/ffi/platform/powerpc64-linux/types.conf |  104 +
 .../ffi/platform/powerpc64le-linux/types.conf      |  100 +
 .../ruby/stdlib/ffi/platform/s390-linux/types.conf |  102 +
 .../stdlib/ffi/platform/s390x-linux/types.conf     |  102 +
 .../lib/ruby/stdlib/ffi/platform/socket.rb.ffi     |  197 +
 .../stdlib/ffi/platform/sparc-linux/types.conf     |  102 +
 .../stdlib/ffi/platform/sparc-solaris/errno.rb     |   72 +
 .../ruby/stdlib/ffi/platform/sparc-solaris/etc.rb  |   31 +
 .../stdlib/ffi/platform/sparc-solaris/fcntl.rb     |   33 +
 .../ffi/platform/sparc-solaris/platform.conf       |  567 +++
 .../stdlib/ffi/platform/sparc-solaris/socket.rb    |  198 +
 .../ruby/stdlib/ffi/platform/sparc-solaris/stat.rb |   53 +
 .../stdlib/ffi/platform/sparc-solaris/sysconf.rb   |  140 +
 .../stdlib/ffi/platform/sparc-solaris/syslog.rb    |   48 +
 .../stdlib/ffi/platform/sparc-solaris/types.conf   |  128 +
 .../ruby/stdlib/ffi/platform/sparc-solaris/zlib.rb | 1465 ++++++
 .../stdlib/ffi/platform/sparcv9-solaris/errno.rb   |   72 +
 .../stdlib/ffi/platform/sparcv9-solaris/etc.rb     |   31 +
 .../ffi/platform/sparcv9-solaris/fcntl-flock.rb    |   18 +
 .../stdlib/ffi/platform/sparcv9-solaris/fcntl.rb   |   33 +
 .../ffi/platform/sparcv9-solaris/platform.conf     |  568 +++
 .../stdlib/ffi/platform/sparcv9-solaris/socket.rb  |  198 +
 .../stdlib/ffi/platform/sparcv9-solaris/stat.rb    |   53 +
 .../stdlib/ffi/platform/sparcv9-solaris/sysconf.rb |  140 +
 .../stdlib/ffi/platform/sparcv9-solaris/syslog.rb  |   48 +
 .../stdlib/ffi/platform/sparcv9-solaris/types.conf |  129 +
 .../stdlib/ffi/platform/sparcv9-solaris/zlib.rb    | 1465 ++++++
 .../jruby/lib/ruby/stdlib/ffi/platform/stat.rb.ffi |   53 +
 .../lib/ruby/stdlib/ffi/platform/sysconf.rb.ffi    |  139 +
 .../lib/ruby/stdlib/ffi/platform/syslog.rb.ffi     |   47 +
 .../stdlib/ffi/platform/x86_64-cygwin/types.conf   |    3 +
 .../stdlib/ffi/platform/x86_64-darwin/errno.rb     |   72 +
 .../ruby/stdlib/ffi/platform/x86_64-darwin/etc.rb  |   31 +
 .../stdlib/ffi/platform/x86_64-darwin/fcntl.rb     |   33 +
 .../ffi/platform/x86_64-darwin/platform.conf       |  539 ++
 .../stdlib/ffi/platform/x86_64-darwin/socket.rb    |  198 +
 .../ruby/stdlib/ffi/platform/x86_64-darwin/stat.rb |   53 +
 .../stdlib/ffi/platform/x86_64-darwin/sysconf.rb   |  140 +
 .../stdlib/ffi/platform/x86_64-darwin/syslog.rb    |   48 +
 .../stdlib/ffi/platform/x86_64-darwin/types.conf   |  126 +
 .../ruby/stdlib/ffi/platform/x86_64-darwin/zlib.rb | 1465 ++++++
 .../stdlib/ffi/platform/x86_64-freebsd/syslog.rb   |   43 +
 .../stdlib/ffi/platform/x86_64-freebsd/types.conf  |  128 +
 .../ruby/stdlib/ffi/platform/x86_64-linux/errno.rb |   72 +
 .../ruby/stdlib/ffi/platform/x86_64-linux/etc.rb   |   31 +
 .../ruby/stdlib/ffi/platform/x86_64-linux/fcntl.rb |   33 +
 .../stdlib/ffi/platform/x86_64-linux/platform.conf |  539 ++
 .../stdlib/ffi/platform/x86_64-linux/socket.rb     |  198 +
 .../ruby/stdlib/ffi/platform/x86_64-linux/stat.rb  |   53 +
 .../stdlib/ffi/platform/x86_64-linux/sysconf.rb    |  140 +
 .../stdlib/ffi/platform/x86_64-linux/syslog.rb     |   48 +
 .../stdlib/ffi/platform/x86_64-linux/types.conf    |  102 +
 .../ruby/stdlib/ffi/platform/x86_64-linux/zlib.rb  | 1465 ++++++
 .../stdlib/ffi/platform/x86_64-netbsd/types.conf   |  128 +
 .../stdlib/ffi/platform/x86_64-openbsd/errno.rb    |   72 +
 .../ruby/stdlib/ffi/platform/x86_64-openbsd/etc.rb |   31 +
 .../stdlib/ffi/platform/x86_64-openbsd/fcntl.rb    |   33 +
 .../ffi/platform/x86_64-openbsd/platform.conf      |  565 +++
 .../stdlib/ffi/platform/x86_64-openbsd/socket.rb   |  198 +
 .../stdlib/ffi/platform/x86_64-openbsd/stat.rb     |   53 +
 .../stdlib/ffi/platform/x86_64-openbsd/sysconf.rb  |  140 +
 .../stdlib/ffi/platform/x86_64-openbsd/syslog.rb   |   48 +
 .../stdlib/ffi/platform/x86_64-openbsd/types.conf  |  128 +
 .../stdlib/ffi/platform/x86_64-openbsd/zlib.rb     | 1465 ++++++
 .../stdlib/ffi/platform/x86_64-solaris/errno.rb    |   72 +
 .../ruby/stdlib/ffi/platform/x86_64-solaris/etc.rb |   31 +
 .../ffi/platform/x86_64-solaris/fcntl-flock.rb     |   16 +
 .../stdlib/ffi/platform/x86_64-solaris/fcntl.rb    |   33 +
 .../ffi/platform/x86_64-solaris/platform.conf      |  561 +++
 .../stdlib/ffi/platform/x86_64-solaris/socket.rb   |  198 +
 .../stdlib/ffi/platform/x86_64-solaris/stat.rb     |   53 +
 .../stdlib/ffi/platform/x86_64-solaris/sysconf.rb  |  140 +
 .../stdlib/ffi/platform/x86_64-solaris/syslog.rb   |   48 +
 .../stdlib/ffi/platform/x86_64-solaris/types.conf  |  122 +
 .../stdlib/ffi/platform/x86_64-solaris/zlib.rb     | 1465 ++++++
 .../ffi/platform/x86_64-windows/platform.conf      |  520 ++
 .../stdlib/ffi/platform/x86_64-windows/types.conf  |   27 +
 .../jruby/lib/ruby/stdlib/ffi/platform/zlib.rb.ffi | 1467 ++++++
 .../vendor/jruby/lib/ruby/stdlib/ffi/pointer.rb    |    1 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/rbx.rb        |    1 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/struct.rb     |  189 +
 .../lib/ruby/stdlib/ffi/struct_layout_builder.rb   |  167 +
 .../jruby/lib/ruby/stdlib/ffi/tools/Rakefile       |   58 +
 .../lib/ruby/stdlib/ffi/tools/const_generator.rb   |  178 +
 .../jruby/lib/ruby/stdlib/ffi/tools/generator.rb   |   58 +
 .../lib/ruby/stdlib/ffi/tools/generator_task.rb    |   35 +
 .../jruby/lib/ruby/stdlib/ffi/tools/platform.rake  |  554 +++
 .../lib/ruby/stdlib/ffi/tools/struct_generator.rb  |  196 +
 .../lib/ruby/stdlib/ffi/tools/types_generator.rb   |  123 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/types.rb      |  164 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/union.rb      |   66 +
 .../vendor/jruby/lib/ruby/stdlib/ffi/variadic.rb   |   73 +
 .../vendor/jruby/lib/ruby/stdlib/fiber.rb          |   12 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle.rb         |   77 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/closure.rb |   49 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/cparser.rb |  197 +
 .../jruby/lib/ruby/stdlib/fiddle/function.rb       |   18 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/import.rb  |  318 ++
 .../vendor/jruby/lib/ruby/stdlib/fiddle/jruby.rb   |  306 ++
 .../vendor/jruby/lib/ruby/stdlib/fiddle/pack.rb    |  129 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/struct.rb  |  244 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/types.rb   |   72 +
 .../vendor/jruby/lib/ruby/stdlib/fiddle/value.rb   |  113 +
 .../vendor/jruby/lib/ruby/stdlib/fileutils.rb      | 1735 +++++++
 .../vendor/jruby/lib/ruby/stdlib/find.rb           |   88 +
 .../vendor/jruby/lib/ruby/stdlib/forwardable.rb    |  308 ++
 .../jruby/lib/ruby/stdlib/forwardable/impl.rb      |   24 +
 .../vendor/jruby/lib/ruby/stdlib/getoptlong.rb     |  613 +++
 .../vendor/jruby/lib/ruby/stdlib/io/console.rb     |   67 +
 .../lib/ruby/stdlib/io/console/bsd_console.rb      |  166 +
 .../jruby/lib/ruby/stdlib/io/console/common.rb     |   35 +
 .../lib/ruby/stdlib/io/console/linux_console.rb    |  200 +
 .../lib/ruby/stdlib/io/console/native_console.rb   |  153 +
 .../jruby/lib/ruby/stdlib/io/console/size.rb       |   23 +
 .../lib/ruby/stdlib/io/console/stty_console.rb     |   82 +
 .../lib/ruby/stdlib/io/console/stub_console.rb     |   45 +
 .../vendor/jruby/lib/ruby/stdlib/io/nonblock.rb    |   22 +
 .../vendor/jruby/lib/ruby/stdlib/io/wait.rb        |    2 +
 .../vendor/jruby/lib/ruby/stdlib/ipaddr.rb         |  748 +++
 .../vendor/jruby/lib/ruby/stdlib/irb.rb            |  718 +++
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/chws.rb   |   34 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/fork.rb   |   39 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/help.rb   |   42 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/load.rb   |   67 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/nop.rb    |   39 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/pushws.rb |   41 +
 .../vendor/jruby/lib/ruby/stdlib/irb/cmd/subirb.rb |   43 +
 .../vendor/jruby/lib/ruby/stdlib/irb/completion.rb |  231 +
 .../vendor/jruby/lib/ruby/stdlib/irb/context.rb    |  420 ++
 .../jruby/lib/ruby/stdlib/irb/ext/change-ws.rb     |   46 +
 .../jruby/lib/ruby/stdlib/irb/ext/history.rb       |  119 +
 .../vendor/jruby/lib/ruby/stdlib/irb/ext/loader.rb |  129 +
 .../jruby/lib/ruby/stdlib/irb/ext/math-mode.rb     |   48 +
 .../jruby/lib/ruby/stdlib/irb/ext/multi-irb.rb     |  265 +
 .../jruby/lib/ruby/stdlib/irb/ext/save-history.rb  |  105 +
 .../vendor/jruby/lib/ruby/stdlib/irb/ext/tracer.rb |   72 +
 .../jruby/lib/ruby/stdlib/irb/ext/use-loader.rb    |   74 +
 .../jruby/lib/ruby/stdlib/irb/ext/workspaces.rb    |   67 +
 .../jruby/lib/ruby/stdlib/irb/extend-command.rb    |  306 ++
 .../vendor/jruby/lib/ruby/stdlib/irb/frame.rb      |   81 +
 .../vendor/jruby/lib/ruby/stdlib/irb/help.rb       |   37 +
 .../vendor/jruby/lib/ruby/stdlib/irb/init.rb       |  302 ++
 .../jruby/lib/ruby/stdlib/irb/input-method.rb      |  192 +
 .../vendor/jruby/lib/ruby/stdlib/irb/inspector.rb  |  132 +
 .../vendor/jruby/lib/ruby/stdlib/irb/lc/error.rb   |   32 +
 .../jruby/lib/ruby/stdlib/irb/lc/help-message      |   49 +
 .../lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb  |   11 +
 .../jruby/lib/ruby/stdlib/irb/lc/ja/error.rb       |   31 +
 .../jruby/lib/ruby/stdlib/irb/lc/ja/help-message   |   52 +
 .../vendor/jruby/lib/ruby/stdlib/irb/locale.rb     |  182 +
 .../vendor/jruby/lib/ruby/stdlib/irb/magic-file.rb |   42 +
 .../vendor/jruby/lib/ruby/stdlib/irb/notifier.rb   |  232 +
 .../jruby/lib/ruby/stdlib/irb/output-method.rb     |   92 +
 .../vendor/jruby/lib/ruby/stdlib/irb/ruby-lex.rb   | 1180 +++++
 .../vendor/jruby/lib/ruby/stdlib/irb/ruby-token.rb |  267 +
 .../vendor/jruby/lib/ruby/stdlib/irb/slex.rb       |  282 ++
 .../jruby/lib/ruby/stdlib/irb/src_encoding.rb      |    7 +
 .../vendor/jruby/lib/ruby/stdlib/irb/version.rb    |   16 +
 .../vendor/jruby/lib/ruby/stdlib/irb/workspace.rb  |  135 +
 .../jruby/lib/ruby/stdlib/irb/ws-for-case-2.rb     |   15 +
 .../vendor/jruby/lib/ruby/stdlib/irb/xmp.rb        |  170 +
 .../jruby/lib/ruby/stdlib/jar-dependencies.rb      |   22 +
 .../jruby/lib/ruby/stdlib/jar_dependencies.rb      |  372 ++
 .../ruby/stdlib/jar_install_post_install_hook.rb   |   21 +
 .../vendor/jruby/lib/ruby/stdlib/jar_installer.rb  |    1 +
 .../jruby/lib/ruby/stdlib/jars/attach_jars_pom.rb  |   24 +
 .../vendor/jruby/lib/ruby/stdlib/jars/classpath.rb |   94 +
 .../lib/ruby/stdlib/jars/gemspec_artifacts.rb      |  214 +
 .../jruby/lib/ruby/stdlib/jars/gemspec_pom.rb      |    5 +
 .../vendor/jruby/lib/ruby/stdlib/jars/installer.rb |  242 +
 .../vendor/jruby/lib/ruby/stdlib/jars/lock.rb      |   74 +
 .../vendor/jruby/lib/ruby/stdlib/jars/lock_down.rb |  109 +
 .../jruby/lib/ruby/stdlib/jars/lock_down_pom.rb    |   30 +
 .../jruby/lib/ruby/stdlib/jars/maven_exec.rb       |   82 +
 .../jruby/lib/ruby/stdlib/jars/maven_factory.rb    |  133 +
 .../jruby/lib/ruby/stdlib/jars/maven_settings.rb   |  135 +
 .../jruby/lib/ruby/stdlib/jars/output_jars_pom.rb  |    8 +
 .../lib/ruby/stdlib/jars/post_install_hook.rb      |   31 +
 .../vendor/jruby/lib/ruby/stdlib/jars/settings.xml |   20 +
 .../vendor/jruby/lib/ruby/stdlib/jars/setup.rb     |    7 +
 .../vendor/jruby/lib/ruby/stdlib/jars/version.rb   |    5 +
 .../vendor/jruby/lib/ruby/stdlib/java.rb           |    1 +
 .../vendor/jruby/lib/ruby/stdlib/java/inspect.rb   |   22 +
 .../stdlib/jline/jline/maven-metadata-local.xml    |   19 +
 .../jruby/lib/ruby/stdlib/jopenssl/_compat23.rb    |   71 +
 .../vendor/jruby/lib/ruby/stdlib/jopenssl/load.rb  |   50 +
 .../jruby/lib/ruby/stdlib/jopenssl/version.rb      |    9 +
 .../jruby/lib/ruby/stdlib/jopenssl19/openssl.rb    |   22 +
 .../jruby/lib/ruby/stdlib/jopenssl19/openssl/bn.rb |   29 +
 .../ruby/stdlib/jopenssl19/openssl/buffering.rb    |  449 ++
 .../lib/ruby/stdlib/jopenssl19/openssl/cipher.rb   |   28 +
 .../lib/ruby/stdlib/jopenssl19/openssl/config.rb   |  472 ++
 .../lib/ruby/stdlib/jopenssl19/openssl/digest.rb   |   32 +
 .../ruby/stdlib/jopenssl19/openssl/ssl-internal.rb |  223 +
 .../lib/ruby/stdlib/jopenssl19/openssl/ssl.rb      |    2 +
 .../stdlib/jopenssl19/openssl/x509-internal.rb     |  115 +
 .../lib/ruby/stdlib/jopenssl19/openssl/x509.rb     |    2 +
 .../jruby/lib/ruby/stdlib/jopenssl21/openssl.rb    |   22 +
 .../jruby/lib/ruby/stdlib/jopenssl21/openssl/bn.rb |   28 +
 .../ruby/stdlib/jopenssl21/openssl/buffering.rb    |    1 +
 .../lib/ruby/stdlib/jopenssl21/openssl/cipher.rb   |    1 +
 .../lib/ruby/stdlib/jopenssl21/openssl/config.rb   |    1 +
 .../lib/ruby/stdlib/jopenssl21/openssl/digest.rb   |    1 +
 .../lib/ruby/stdlib/jopenssl21/openssl/ssl.rb      |    1 +
 .../lib/ruby/stdlib/jopenssl21/openssl/x509.rb     |  119 +
 .../jruby/lib/ruby/stdlib/jopenssl22/openssl.rb    |   22 +
 .../jruby/lib/ruby/stdlib/jopenssl22/openssl/bn.rb |   39 +
 .../ruby/stdlib/jopenssl22/openssl/buffering.rb    |  456 ++
 .../lib/ruby/stdlib/jopenssl22/openssl/cipher.rb   |   28 +
 .../lib/ruby/stdlib/jopenssl22/openssl/config.rb   |  313 ++
 .../lib/ruby/stdlib/jopenssl22/openssl/digest.rb   |   54 +
 .../lib/ruby/stdlib/jopenssl22/openssl/ssl.rb      |  330 ++
 .../lib/ruby/stdlib/jopenssl22/openssl/x509.rb     |  139 +
 .../jruby/lib/ruby/stdlib/jopenssl23/openssl.rb    |   19 +
 .../jruby/lib/ruby/stdlib/jopenssl23/openssl/bn.rb |   38 +
 .../ruby/stdlib/jopenssl23/openssl/buffering.rb    |  455 ++
 .../lib/ruby/stdlib/jopenssl23/openssl/cipher.rb   |   25 +
 .../lib/ruby/stdlib/jopenssl23/openssl/config.rb   |  474 ++
 .../lib/ruby/stdlib/jopenssl23/openssl/digest.rb   |   43 +
 .../lib/ruby/stdlib/jopenssl23/openssl/pkey.rb     |   25 +
 .../lib/ruby/stdlib/jopenssl23/openssl/ssl.rb      |  508 ++
 .../lib/ruby/stdlib/jopenssl23/openssl/x509.rb     |  208 +
 .../vendor/jruby/lib/ruby/stdlib/jruby.rb          |    1 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/compiler.rb |  301 ++
 .../lib/ruby/stdlib/jruby/compiler/extending.rb    |  243 +
 .../lib/ruby/stdlib/jruby/compiler/java_class.rb   |  752 +++
 .../ruby/stdlib/jruby/compiler/java_signature.rb   |  119 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/core_ext.rb |    3 +
 .../jruby/lib/ruby/stdlib/jruby/core_ext/class.rb  |  186 +
 .../jruby/lib/ruby/stdlib/jruby/core_ext/string.rb |   23 +
 .../jruby/lib/ruby/stdlib/jruby/core_ext/thread.rb |   19 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/ext.rb      |   43 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/jrubyc.rb   |    4 +
 .../jruby/lib/ruby/stdlib/jruby/open3_windows.rb   |  731 +++
 .../vendor/jruby/lib/ruby/stdlib/jruby/profiler.rb |   57 +
 .../ruby/stdlib/jruby/profiler/shutdown_hook.rb    |   11 +
 .../jruby/lib/ruby/stdlib/jruby/serialization.rb   |    2 +
 .../jruby/lib/ruby/stdlib/jruby/synchronized.rb    |   24 +
 .../jruby/lib/ruby/stdlib/jruby/thread_dump.rb     |   47 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/util.rb     |    2 +
 .../vendor/jruby/lib/ruby/stdlib/jruby/vm.rb       |  192 +
 .../jruby/lib/ruby/stdlib/jruby/win32ole/stub.rb   |   16 +
 .../vendor/jruby/lib/ruby/stdlib/json.rb           |   63 +
 .../jruby/lib/ruby/stdlib/json/add/bigdecimal.rb   |   29 +
 .../jruby/lib/ruby/stdlib/json/add/complex.rb      |   29 +
 .../vendor/jruby/lib/ruby/stdlib/json/add/core.rb  |   12 +
 .../vendor/jruby/lib/ruby/stdlib/json/add/date.rb  |   34 +
 .../jruby/lib/ruby/stdlib/json/add/date_time.rb    |   50 +
 .../jruby/lib/ruby/stdlib/json/add/exception.rb    |   31 +
 .../jruby/lib/ruby/stdlib/json/add/ostruct.rb      |   31 +
 .../vendor/jruby/lib/ruby/stdlib/json/add/range.rb |   29 +
 .../jruby/lib/ruby/stdlib/json/add/rational.rb     |   28 +
 .../jruby/lib/ruby/stdlib/json/add/regexp.rb       |   30 +
 .../vendor/jruby/lib/ruby/stdlib/json/add/set.rb   |   29 +
 .../jruby/lib/ruby/stdlib/json/add/struct.rb       |   30 +
 .../jruby/lib/ruby/stdlib/json/add/symbol.rb       |   25 +
 .../vendor/jruby/lib/ruby/stdlib/json/add/time.rb  |   38 +
 .../vendor/jruby/lib/ruby/stdlib/json/common.rb    |  456 ++
 .../vendor/jruby/lib/ruby/stdlib/json/ext.rb       |   15 +
 .../jruby/lib/ruby/stdlib/json/generic_object.rb   |   71 +
 .../vendor/jruby/lib/ruby/stdlib/json/pure.rb      |   15 +
 .../jruby/lib/ruby/stdlib/json/pure/generator.rb   |  458 ++
 .../jruby/lib/ruby/stdlib/json/pure/parser.rb      |  311 ++
 .../vendor/jruby/lib/ruby/stdlib/json/version.rb   |    9 +
 .../vendor/jruby/lib/ruby/stdlib/kconv.rb          |  283 ++
 .../vendor/jruby/lib/ruby/stdlib/logger.rb         |  855 ++++
 .../vendor/jruby/lib/ruby/stdlib/matrix.rb         | 2148 ++++++++
 .../ruby/stdlib/matrix/eigenvalue_decomposition.rb |  883 ++++
 .../lib/ruby/stdlib/matrix/lup_decomposition.rb    |  219 +
 .../vendor/jruby/lib/ruby/stdlib/mkmf.rb           | 2722 +++++++++++
 .../vendor/jruby/lib/ruby/stdlib/monitor.rb        |  315 ++
 .../vendor/jruby/lib/ruby/stdlib/mutex_m.rb        |  109 +
 .../vendor/jruby/lib/ruby/stdlib/net/ftp.rb        | 1490 ++++++
 .../vendor/jruby/lib/ruby/stdlib/net/http.rb       | 1653 +++++++
 .../jruby/lib/ruby/stdlib/net/http/backward.rb     |   26 +
 .../jruby/lib/ruby/stdlib/net/http/exceptions.rb   |   26 +
 .../lib/ruby/stdlib/net/http/generic_request.rb    |  338 ++
 .../jruby/lib/ruby/stdlib/net/http/header.rb       |  494 ++
 .../jruby/lib/ruby/stdlib/net/http/proxy_delta.rb  |   17 +
 .../jruby/lib/ruby/stdlib/net/http/request.rb      |   21 +
 .../jruby/lib/ruby/stdlib/net/http/requests.rb     |  123 +
 .../jruby/lib/ruby/stdlib/net/http/response.rb     |  419 ++
 .../jruby/lib/ruby/stdlib/net/http/responses.rb    |  299 ++
 .../jruby/lib/ruby/stdlib/net/http/status.rb       |   83 +
 .../vendor/jruby/lib/ruby/stdlib/net/https.rb      |   23 +
 .../vendor/jruby/lib/ruby/stdlib/net/imap.rb       | 3724 ++++++++++++++
 .../vendor/jruby/lib/ruby/stdlib/net/pop.rb        | 1022 ++++
 .../vendor/jruby/lib/ruby/stdlib/net/protocol.rb   |  442 ++
 .../vendor/jruby/lib/ruby/stdlib/net/smtp.rb       | 1078 ++++
 .../vendor/jruby/lib/ruby/stdlib/nkf.rb            |    2 +
 .../vendor/jruby/lib/ruby/stdlib/objspace.rb       |   17 +
 .../vendor/jruby/lib/ruby/stdlib/observer.rb       |  204 +
 .../vendor/jruby/lib/ruby/stdlib/open-uri.rb       |  820 ++++
 .../vendor/jruby/lib/ruby/stdlib/open3.rb          |  684 +++
 .../vendor/jruby/lib/ruby/stdlib/openssl.rb        |    1 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/bn.rb     |    9 +
 .../jruby/lib/ruby/stdlib/openssl/buffering.rb     |    9 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/cipher.rb |    9 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/config.rb |   17 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/digest.rb |    9 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/pkcs12.rb |  101 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/pkcs5.rb  |   22 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/pkey.rb   |    5 +
 .../jruby/lib/ruby/stdlib/openssl/ssl-internal.rb  |    5 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/ssl.rb    |    9 +
 .../jruby/lib/ruby/stdlib/openssl/x509-internal.rb |    5 +
 .../vendor/jruby/lib/ruby/stdlib/openssl/x509.rb   |    9 +
 .../vendor/jruby/lib/ruby/stdlib/optionparser.rb   |    2 +
 .../vendor/jruby/lib/ruby/stdlib/optparse.rb       | 2161 ++++++++
 .../vendor/jruby/lib/ruby/stdlib/optparse/ac.rb    |   51 +
 .../vendor/jruby/lib/ruby/stdlib/optparse/date.rb  |   18 +
 .../jruby/lib/ruby/stdlib/optparse/kwargs.rb       |   17 +
 .../jruby/lib/ruby/stdlib/optparse/shellwords.rb   |    7 +
 .../vendor/jruby/lib/ruby/stdlib/optparse/time.rb  |   11 +
 .../vendor/jruby/lib/ruby/stdlib/optparse/uri.rb   |    7 +
 .../jruby/lib/ruby/stdlib/optparse/version.rb      |   71 +
 .../org/yaml/snakeyaml/maven-metadata-local.xml    |   12 +
 .../vendor/jruby/lib/ruby/stdlib/ostruct.rb        |  368 ++
 .../vendor/jruby/lib/ruby/stdlib/pathname.rb       |  594 +++
 .../vendor/jruby/lib/ruby/stdlib/pp.rb             |  559 +++
 .../vendor/jruby/lib/ruby/stdlib/prettyprint.rb    |  556 +++
 .../vendor/jruby/lib/ruby/stdlib/prime.rb          |  467 ++
 .../vendor/jruby/lib/ruby/stdlib/profile.rb        |   13 +
 .../vendor/jruby/lib/ruby/stdlib/profiler.rb       |  149 +
 .../vendor/jruby/lib/ruby/stdlib/pstore.rb         |  491 ++
 .../vendor/jruby/lib/ruby/stdlib/psych.rb          |  641 +++
 .../jruby/lib/ruby/stdlib/psych/class_loader.rb    |  102 +
 .../vendor/jruby/lib/ruby/stdlib/psych/coder.rb    |   95 +
 .../vendor/jruby/lib/ruby/stdlib/psych/core_ext.rb |   19 +
 .../jruby/lib/ruby/stdlib/psych/exception.rb       |   14 +
 .../vendor/jruby/lib/ruby/stdlib/psych/handler.rb  |  255 +
 .../ruby/stdlib/psych/handlers/document_stream.rb  |   23 +
 .../lib/ruby/stdlib/psych/handlers/recorder.rb     |   40 +
 .../lib/ruby/stdlib/psych/json/ruby_events.rb      |   20 +
 .../jruby/lib/ruby/stdlib/psych/json/stream.rb     |   17 +
 .../lib/ruby/stdlib/psych/json/tree_builder.rb     |   13 +
 .../lib/ruby/stdlib/psych/json/yaml_events.rb      |   30 +
 .../vendor/jruby/lib/ruby/stdlib/psych/nodes.rb    |   78 +
 .../jruby/lib/ruby/stdlib/psych/nodes/alias.rb     |   21 +
 .../jruby/lib/ruby/stdlib/psych/nodes/document.rb  |   63 +
 .../jruby/lib/ruby/stdlib/psych/nodes/mapping.rb   |   59 +
 .../jruby/lib/ruby/stdlib/psych/nodes/node.rb      |   75 +
 .../jruby/lib/ruby/stdlib/psych/nodes/scalar.rb    |   70 +
 .../jruby/lib/ruby/stdlib/psych/nodes/sequence.rb  |   84 +
 .../jruby/lib/ruby/stdlib/psych/nodes/stream.rb    |   40 +
 .../vendor/jruby/lib/ruby/stdlib/psych/omap.rb     |    5 +
 .../vendor/jruby/lib/ruby/stdlib/psych/parser.rb   |   52 +
 .../jruby/lib/ruby/stdlib/psych/scalar_scanner.rb  |  149 +
 .../vendor/jruby/lib/ruby/stdlib/psych/set.rb      |    5 +
 .../vendor/jruby/lib/ruby/stdlib/psych/stream.rb   |   38 +
 .../jruby/lib/ruby/stdlib/psych/streaming.rb       |   28 +
 .../jruby/lib/ruby/stdlib/psych/syntax_error.rb    |   22 +
 .../jruby/lib/ruby/stdlib/psych/tree_builder.rb    |  137 +
 .../vendor/jruby/lib/ruby/stdlib/psych/versions.rb |   10 +
 .../vendor/jruby/lib/ruby/stdlib/psych/visitors.rb |    7 +
 .../lib/ruby/stdlib/psych/visitors/depth_first.rb  |   27 +
 .../lib/ruby/stdlib/psych/visitors/emitter.rb      |   52 +
 .../lib/ruby/stdlib/psych/visitors/json_tree.rb    |   25 +
 .../lib/ruby/stdlib/psych/visitors/to_ruby.rb      |  401 ++
 .../lib/ruby/stdlib/psych/visitors/visitor.rb      |   20 +
 .../lib/ruby/stdlib/psych/visitors/yaml_tree.rb    |  551 +++
 .../vendor/jruby/lib/ruby/stdlib/psych/y.rb        |   10 +
 .../vendor/jruby/lib/ruby/stdlib/psych_jars.rb     |    5 +
 .../vendor/jruby/lib/ruby/stdlib/pty.rb            |  146 +
 .../vendor/jruby/lib/ruby/stdlib/racc/parser.rb    |  628 +++
 .../lib/ruby/stdlib/racc/rdoc/grammar.en.rdoc      |  219 +
 .../vendor/jruby/lib/ruby/stdlib/rake/ant.rb       |   71 +
 .../vendor/jruby/lib/ruby/stdlib/rake/ant/ant.rb   |  225 +
 .../jruby/lib/ruby/stdlib/rake/ant/element.rb      |  101 +
 .../lib/ruby/stdlib/rake/ant/project_converter.rb  |  100 +
 .../vendor/jruby/lib/ruby/stdlib/rake/ant/rake.rb  |   11 +
 .../jruby/lib/ruby/stdlib/rake/ant/target.rb       |  119 +
 .../lib/ruby/stdlib/rake/ant/tasks/raketasks.rb    |   29 +
 .../jruby/lib/ruby/stdlib/rake/ant/version.rb      |    5 +
 .../vendor/jruby/lib/ruby/stdlib/rational.rb       |    2 +
 .../vendor/jruby/lib/ruby/stdlib/rbconfig.rb       |    2 +
 .../jruby/lib/ruby/stdlib/rbconfig/sizeof.rb       |   20 +
 .../vendor/jruby/lib/ruby/stdlib/rdoc.rb           |  186 +
 .../vendor/jruby/lib/ruby/stdlib/readline.rb       |   17 +
 .../jruby/lib/ruby/stdlib/readline/version.rb      |    6 +
 .../vendor/jruby/lib/ruby/stdlib/resolv-replace.rb |   76 +
 .../vendor/jruby/lib/ruby/stdlib/resolv.rb         | 2897 +++++++++++
 .../jruby/lib/ruby/stdlib/rexml/attlistdecl.rb     |   63 +
 .../jruby/lib/ruby/stdlib/rexml/attribute.rb       |  192 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/cdata.rb    |   68 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/child.rb    |   97 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/comment.rb  |   80 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/doctype.rb  |  270 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/document.rb |  291 ++
 .../jruby/lib/ruby/stdlib/rexml/dtd/attlistdecl.rb |   11 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/dtd/dtd.rb  |   47 +
 .../jruby/lib/ruby/stdlib/rexml/dtd/elementdecl.rb |   18 +
 .../jruby/lib/ruby/stdlib/rexml/dtd/entitydecl.rb  |   57 +
 .../lib/ruby/stdlib/rexml/dtd/notationdecl.rb      |   40 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/element.rb  | 1265 +++++
 .../vendor/jruby/lib/ruby/stdlib/rexml/encoding.rb |   51 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/entity.rb   |  171 +
 .../lib/ruby/stdlib/rexml/formatters/default.rb    |  112 +
 .../lib/ruby/stdlib/rexml/formatters/pretty.rb     |  142 +
 .../lib/ruby/stdlib/rexml/formatters/transitive.rb |   58 +
 .../jruby/lib/ruby/stdlib/rexml/functions.rb       |  421 ++
 .../jruby/lib/ruby/stdlib/rexml/instruction.rb     |   71 +
 .../jruby/lib/ruby/stdlib/rexml/light/node.rb      |  196 +
 .../jruby/lib/ruby/stdlib/rexml/namespace.rb       |   48 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/node.rb     |   76 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/output.rb   |   30 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/parent.rb   |  166 +
 .../jruby/lib/ruby/stdlib/rexml/parseexception.rb  |   52 +
 .../lib/ruby/stdlib/rexml/parsers/baseparser.rb    |  533 ++
 .../lib/ruby/stdlib/rexml/parsers/lightparser.rb   |   59 +
 .../lib/ruby/stdlib/rexml/parsers/pullparser.rb    |  197 +
 .../lib/ruby/stdlib/rexml/parsers/sax2parser.rb    |  273 ++
 .../lib/ruby/stdlib/rexml/parsers/streamparser.rb  |   61 +
 .../lib/ruby/stdlib/rexml/parsers/treeparser.rb    |  101 +
 .../ruby/stdlib/rexml/parsers/ultralightparser.rb  |   57 +
 .../lib/ruby/stdlib/rexml/parsers/xpathparser.rb   |  657 +++
 .../jruby/lib/ruby/stdlib/rexml/quickpath.rb       |  266 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/rexml.rb    |   32 +
 .../jruby/lib/ruby/stdlib/rexml/sax2listener.rb    |   98 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/security.rb |   28 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/source.rb   |  297 ++
 .../jruby/lib/ruby/stdlib/rexml/streamlistener.rb  |   93 +
 .../jruby/lib/ruby/stdlib/rexml/syncenumerator.rb  |   33 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/text.rb     |  426 ++
 .../stdlib/rexml/undefinednamespaceexception.rb    |    9 +
 .../lib/ruby/stdlib/rexml/validation/relaxng.rb    |  539 ++
 .../lib/ruby/stdlib/rexml/validation/validation.rb |  144 +
 .../stdlib/rexml/validation/validationexception.rb |   10 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/xmldecl.rb  |  116 +
 .../jruby/lib/ruby/stdlib/rexml/xmltokens.rb       |   85 +
 .../vendor/jruby/lib/ruby/stdlib/rexml/xpath.rb    |   81 +
 .../jruby/lib/ruby/stdlib/rexml/xpath_parser.rb    |  704 +++
 .../vendor/jruby/lib/ruby/stdlib/rinda/rinda.rb    |  327 ++
 .../vendor/jruby/lib/ruby/stdlib/rinda/ring.rb     |  484 ++
 .../jruby/lib/ruby/stdlib/rinda/tuplespace.rb      |  641 +++
 .../vendor/jruby/lib/ruby/stdlib/ripper.rb         |   74 +
 .../vendor/jruby/lib/ruby/stdlib/ripper/core.rb    |   77 +
 .../vendor/jruby/lib/ruby/stdlib/ripper/filter.rb  |   86 +
 .../vendor/jruby/lib/ruby/stdlib/ripper/lexer.rb   |  250 +
 .../vendor/jruby/lib/ruby/stdlib/ripper/sexp.rb    |  158 +
 .../vendor/jruby/lib/ruby/stdlib/rss.rb            |   92 +
 .../vendor/jruby/lib/ruby/stdlib/rss/0.9.rb        |  462 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/1.0.rb        |  485 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/2.0.rb        |  143 +
 .../vendor/jruby/lib/ruby/stdlib/rss/atom.rb       | 1025 ++++
 .../vendor/jruby/lib/ruby/stdlib/rss/content.rb    |   34 +
 .../jruby/lib/ruby/stdlib/rss/content/1.0.rb       |   10 +
 .../jruby/lib/ruby/stdlib/rss/content/2.0.rb       |   12 +
 .../vendor/jruby/lib/ruby/stdlib/rss/converter.rb  |  171 +
 .../vendor/jruby/lib/ruby/stdlib/rss/dublincore.rb |  164 +
 .../jruby/lib/ruby/stdlib/rss/dublincore/1.0.rb    |   13 +
 .../jruby/lib/ruby/stdlib/rss/dublincore/2.0.rb    |   13 +
 .../jruby/lib/ruby/stdlib/rss/dublincore/atom.rb   |   17 +
 .../vendor/jruby/lib/ruby/stdlib/rss/image.rb      |  198 +
 .../vendor/jruby/lib/ruby/stdlib/rss/itunes.rb     |  413 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/maker.rb      |   79 +
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/0.9.rb  |  509 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/1.0.rb  |  436 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/2.0.rb  |  224 +
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/atom.rb |  173 +
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/base.rb |  945 ++++
 .../jruby/lib/ruby/stdlib/rss/maker/content.rb     |   22 +
 .../jruby/lib/ruby/stdlib/rss/maker/dublincore.rb  |  122 +
 .../jruby/lib/ruby/stdlib/rss/maker/entry.rb       |  164 +
 .../vendor/jruby/lib/ruby/stdlib/rss/maker/feed.rb |  427 ++
 .../jruby/lib/ruby/stdlib/rss/maker/image.rb       |  112 +
 .../jruby/lib/ruby/stdlib/rss/maker/itunes.rb      |  243 +
 .../jruby/lib/ruby/stdlib/rss/maker/slash.rb       |   34 +
 .../jruby/lib/ruby/stdlib/rss/maker/syndication.rb |   19 +
 .../jruby/lib/ruby/stdlib/rss/maker/taxonomy.rb    |  119 +
 .../jruby/lib/ruby/stdlib/rss/maker/trackback.rb   |   62 +
 .../vendor/jruby/lib/ruby/stdlib/rss/parser.rb     |  571 +++
 .../jruby/lib/ruby/stdlib/rss/rexmlparser.rb       |   50 +
 .../vendor/jruby/lib/ruby/stdlib/rss/rss.rb        | 1346 +++++
 .../vendor/jruby/lib/ruby/stdlib/rss/slash.rb      |   52 +
 .../jruby/lib/ruby/stdlib/rss/syndication.rb       |   69 +
 .../vendor/jruby/lib/ruby/stdlib/rss/taxonomy.rb   |  148 +
 .../vendor/jruby/lib/ruby/stdlib/rss/trackback.rb  |  291 ++
 .../vendor/jruby/lib/ruby/stdlib/rss/utils.rb      |  200 +
 .../jruby/lib/ruby/stdlib/rss/xml-stylesheet.rb    |  106 +
 .../vendor/jruby/lib/ruby/stdlib/rss/xml.rb        |   72 +
 .../vendor/jruby/lib/ruby/stdlib/rss/xmlparser.rb  |   95 +
 .../vendor/jruby/lib/ruby/stdlib/rss/xmlscanner.rb |  122 +
 .../vendor/jruby/lib/ruby/stdlib/rubygems.rb       | 1428 ++++++
 .../lib/ruby/stdlib/rubygems/available_set.rb      |  165 +
 .../ruby/stdlib/rubygems/basic_specification.rb    |  332 ++
 .../ruby/stdlib/rubygems/bundler_version_finder.rb |  116 +
 .../jruby/lib/ruby/stdlib/rubygems/command.rb      |  602 +++
 .../lib/ruby/stdlib/rubygems/command_manager.rb    |  223 +
 .../ruby/stdlib/rubygems/commands/build_command.rb |   65 +
 .../ruby/stdlib/rubygems/commands/cert_command.rb  |  302 ++
 .../ruby/stdlib/rubygems/commands/check_command.rb |   94 +
 .../stdlib/rubygems/commands/cleanup_command.rb    |  178 +
 .../stdlib/rubygems/commands/contents_command.rb   |  191 +
 .../stdlib/rubygems/commands/dependency_command.rb |  218 +
 .../rubygems/commands/environment_command.rb       |  160 +
 .../ruby/stdlib/rubygems/commands/fetch_command.rb |   78 +
 .../rubygems/commands/generate_index_command.rb    |   85 +
 .../ruby/stdlib/rubygems/commands/help_command.rb  |  375 ++
 .../stdlib/rubygems/commands/install_command.rb    |  310 ++
 .../ruby/stdlib/rubygems/commands/list_command.rb  |   41 +
 .../ruby/stdlib/rubygems/commands/lock_command.rb  |  111 +
 .../stdlib/rubygems/commands/mirror_command.rb     |   26 +
 .../ruby/stdlib/rubygems/commands/open_command.rb  |   81 +
 .../stdlib/rubygems/commands/outdated_command.rb   |   33 +
 .../ruby/stdlib/rubygems/commands/owner_command.rb |  104 +
 .../stdlib/rubygems/commands/pristine_command.rb   |  179 +
 .../ruby/stdlib/rubygems/commands/push_command.rb  |  137 +
 .../ruby/stdlib/rubygems/commands/query_command.rb |  359 ++
 .../ruby/stdlib/rubygems/commands/rdoc_command.rb  |   97 +
 .../stdlib/rubygems/commands/search_command.rb     |   41 +
 .../stdlib/rubygems/commands/server_command.rb     |   87 +
 .../ruby/stdlib/rubygems/commands/setup_command.rb |  589 +++
 .../stdlib/rubygems/commands/signin_command.rb     |   33 +
 .../stdlib/rubygems/commands/signout_command.rb    |   33 +
 .../stdlib/rubygems/commands/sources_command.rb    |  211 +
 .../rubygems/commands/specification_command.rb     |  146 +
 .../ruby/stdlib/rubygems/commands/stale_command.rb |   39 +
 .../stdlib/rubygems/commands/uninstall_command.rb  |  166 +
 .../stdlib/rubygems/commands/unpack_command.rb     |  195 +
 .../stdlib/rubygems/commands/update_command.rb     |  279 ++
 .../ruby/stdlib/rubygems/commands/which_command.rb |   91 +
 .../ruby/stdlib/rubygems/commands/yank_command.rb  |   96 +
 .../lib/ruby/stdlib/rubygems/compatibility.rb      |   60 +
 .../jruby/lib/ruby/stdlib/rubygems/config_file.rb  |  487 ++
 .../ruby/stdlib/rubygems/core_ext/kernel_gem.rb    |   74 +
 .../stdlib/rubygems/core_ext/kernel_require.rb     |  137 +
 .../jruby/lib/ruby/stdlib/rubygems/defaults.rb     |  196 +
 .../lib/ruby/stdlib/rubygems/defaults/jruby.rb     |  130 +
 .../stdlib/rubygems/defaults/operating_system.rb   |    4 +
 .../jruby/lib/ruby/stdlib/rubygems/dependency.rb   |  336 ++
 .../ruby/stdlib/rubygems/dependency_installer.rb   |  497 ++
 .../lib/ruby/stdlib/rubygems/dependency_list.rb    |  244 +
 .../jruby/lib/ruby/stdlib/rubygems/deprecate.rb    |   71 +
 .../jruby/lib/ruby/stdlib/rubygems/doctor.rb       |  132 +
 .../jruby/lib/ruby/stdlib/rubygems/errors.rb       |  185 +
 .../jruby/lib/ruby/stdlib/rubygems/exceptions.rb   |  280 ++
 .../vendor/jruby/lib/ruby/stdlib/rubygems/ext.rb   |   19 +
 .../lib/ruby/stdlib/rubygems/ext/build_error.rb    |    7 +
 .../jruby/lib/ruby/stdlib/rubygems/ext/builder.rb  |  221 +
 .../lib/ruby/stdlib/rubygems/ext/cmake_builder.rb  |   17 +
 .../ruby/stdlib/rubygems/ext/configure_builder.rb  |   24 +
 .../ruby/stdlib/rubygems/ext/ext_conf_builder.rb   |   94 +
 .../lib/ruby/stdlib/rubygems/ext/rake_builder.rb   |   37 +
 .../jruby/lib/ruby/stdlib/rubygems/gem_runner.rb   |   86 +
 .../ruby/stdlib/rubygems/gemcutter_utilities.rb    |  171 +
 .../jruby/lib/ruby/stdlib/rubygems/indexer.rb      |  435 ++
 .../stdlib/rubygems/install_default_message.rb     |   13 +
 .../lib/ruby/stdlib/rubygems/install_message.rb    |   13 +
 .../ruby/stdlib/rubygems/install_update_options.rb |  216 +
 .../jruby/lib/ruby/stdlib/rubygems/installer.rb    |  909 ++++
 .../ruby/stdlib/rubygems/installer_test_case.rb    |  199 +
 .../ruby/stdlib/rubygems/local_remote_options.rb   |  149 +
 .../jruby/lib/ruby/stdlib/rubygems/mock_gem_ui.rb  |   89 +
 .../jruby/lib/ruby/stdlib/rubygems/name_tuple.rb   |  124 +
 .../jruby/lib/ruby/stdlib/rubygems/package.rb      |  676 +++
 .../lib/ruby/stdlib/rubygems/package/digest_io.rb  |   65 +
 .../ruby/stdlib/rubygems/package/file_source.rb    |   34 +
 .../lib/ruby/stdlib/rubygems/package/io_source.rb  |   46 +
 .../jruby/lib/ruby/stdlib/rubygems/package/old.rb  |  178 +
 .../lib/ruby/stdlib/rubygems/package/source.rb     |    4 +
 .../lib/ruby/stdlib/rubygems/package/tar_header.rb |  236 +
 .../lib/ruby/stdlib/rubygems/package/tar_reader.rb |  123 +
 .../stdlib/rubygems/package/tar_reader/entry.rb    |  154 +
 .../ruby/stdlib/rubygems/package/tar_test_case.rb  |  147 +
 .../lib/ruby/stdlib/rubygems/package/tar_writer.rb |  340 ++
 .../jruby/lib/ruby/stdlib/rubygems/package_task.rb |  129 +
 .../jruby/lib/ruby/stdlib/rubygems/path_support.rb |   80 +
 .../jruby/lib/ruby/stdlib/rubygems/platform.rb     |  206 +
 .../lib/ruby/stdlib/rubygems/psych_additions.rb    |   10 +
 .../jruby/lib/ruby/stdlib/rubygems/psych_tree.rb   |   32 +
 .../vendor/jruby/lib/ruby/stdlib/rubygems/rdoc.rb  |  335 ++
 .../lib/ruby/stdlib/rubygems/remote_fetcher.rb     |  419 ++
 .../jruby/lib/ruby/stdlib/rubygems/request.rb      |  294 ++
 .../stdlib/rubygems/request/connection_pools.rb    |   88 +
 .../lib/ruby/stdlib/rubygems/request/http_pool.rb  |   48 +
 .../lib/ruby/stdlib/rubygems/request/https_pool.rb |   11 +
 .../jruby/lib/ruby/stdlib/rubygems/request_set.rb  |  452 ++
 .../rubygems/request_set/gem_dependency_api.rb     |  849 ++++
 .../ruby/stdlib/rubygems/request_set/lockfile.rb   |  238 +
 .../stdlib/rubygems/request_set/lockfile/parser.rb |  354 ++
 .../rubygems/request_set/lockfile/tokenizer.rb     |  112 +
 .../jruby/lib/ruby/stdlib/rubygems/requirement.rb  |  300 ++
 .../jruby/lib/ruby/stdlib/rubygems/resolver.rb     |  348 ++
 .../stdlib/rubygems/resolver/activation_request.rb |  186 +
 .../lib/ruby/stdlib/rubygems/resolver/api_set.rb   |  126 +
 .../stdlib/rubygems/resolver/api_specification.rb  |   91 +
 .../lib/ruby/stdlib/rubygems/resolver/best_set.rb  |   79 +
 .../ruby/stdlib/rubygems/resolver/composed_set.rb  |   67 +
 .../lib/ruby/stdlib/rubygems/resolver/conflict.rb  |  160 +
 .../ruby/stdlib/rubygems/resolver/current_set.rb   |   14 +
 .../stdlib/rubygems/resolver/dependency_request.rb |  120 +
 .../lib/ruby/stdlib/rubygems/resolver/git_set.rb   |  123 +
 .../stdlib/rubygems/resolver/git_specification.rb  |   59 +
 .../lib/ruby/stdlib/rubygems/resolver/index_set.rb |   81 +
 .../rubygems/resolver/index_specification.rb       |   70 +
 .../rubygems/resolver/installed_specification.rb   |   59 +
 .../ruby/stdlib/rubygems/resolver/installer_set.rb |  227 +
 .../rubygems/resolver/local_specification.rb       |   42 +
 .../lib/ruby/stdlib/rubygems/resolver/lock_set.rb  |   83 +
 .../stdlib/rubygems/resolver/lock_specification.rb |   88 +
 .../lib/ruby/stdlib/rubygems/resolver/molinillo.rb |    2 +
 .../rubygems/resolver/molinillo/lib/molinillo.rb   |   10 +
 .../lib/molinillo/delegates/resolution_state.rb    |   50 +
 .../molinillo/delegates/specification_provider.rb  |   80 +
 .../molinillo/lib/molinillo/dependency_graph.rb    |  222 +
 .../lib/molinillo/dependency_graph/action.rb       |   35 +
 .../dependency_graph/add_edge_no_circular.rb       |   65 +
 .../lib/molinillo/dependency_graph/add_vertex.rb   |   61 +
 .../lib/molinillo/dependency_graph/delete_edge.rb  |   62 +
 .../dependency_graph/detach_vertex_named.rb        |   60 +
 .../lib/molinillo/dependency_graph/log.rb          |  125 +
 .../lib/molinillo/dependency_graph/set_payload.rb  |   45 +
 .../lib/molinillo/dependency_graph/tag.rb          |   35 +
 .../lib/molinillo/dependency_graph/vertex.rb       |  125 +
 .../resolver/molinillo/lib/molinillo/errors.rb     |   75 +
 .../molinillo/lib/molinillo/gem_metadata.rb        |    5 +
 .../molinillo/modules/specification_provider.rb    |  100 +
 .../resolver/molinillo/lib/molinillo/modules/ui.rb |   65 +
 .../resolver/molinillo/lib/molinillo/resolution.rb |  494 ++
 .../resolver/molinillo/lib/molinillo/resolver.rb   |   45 +
 .../resolver/molinillo/lib/molinillo/state.rb      |   54 +
 .../stdlib/rubygems/resolver/requirement_list.rb   |   82 +
 .../jruby/lib/ruby/stdlib/rubygems/resolver/set.rb |   57 +
 .../ruby/stdlib/rubygems/resolver/source_set.rb    |   48 +
 .../stdlib/rubygems/resolver/spec_specification.rb |   57 +
 .../ruby/stdlib/rubygems/resolver/specification.rb |  111 +
 .../lib/ruby/stdlib/rubygems/resolver/stats.rb     |   45 +
 .../ruby/stdlib/rubygems/resolver/vendor_set.rb    |   88 +
 .../rubygems/resolver/vendor_specification.rb      |   25 +
 .../jruby/lib/ruby/stdlib/rubygems/safe_yaml.rb    |   51 +
 .../jruby/lib/ruby/stdlib/rubygems/security.rb     |  608 +++
 .../lib/ruby/stdlib/rubygems/security/policies.rb  |  116 +
 .../lib/ruby/stdlib/rubygems/security/policy.rb    |  295 ++
 .../lib/ruby/stdlib/rubygems/security/signer.rb    |  157 +
 .../lib/ruby/stdlib/rubygems/security/trust_dir.rb |  119 +
 .../lib/ruby/stdlib/rubygems/security_option.rb    |   43 +
 .../jruby/lib/ruby/stdlib/rubygems/server.rb       |  878 ++++
 .../jruby/lib/ruby/stdlib/rubygems/source.rb       |  238 +
 .../jruby/lib/ruby/stdlib/rubygems/source/git.rb   |  242 +
 .../lib/ruby/stdlib/rubygems/source/installed.rb   |   41 +
 .../jruby/lib/ruby/stdlib/rubygems/source/local.rb |  133 +
 .../jruby/lib/ruby/stdlib/rubygems/source/lock.rb  |   52 +
 .../ruby/stdlib/rubygems/source/specific_file.rb   |   73 +
 .../lib/ruby/stdlib/rubygems/source/vendor.rb      |   28 +
 .../jruby/lib/ruby/stdlib/rubygems/source_list.rb  |  150 +
 .../jruby/lib/ruby/stdlib/rubygems/source_local.rb |    8 +
 .../ruby/stdlib/rubygems/source_specific_file.rb   |    6 +
 .../jruby/lib/ruby/stdlib/rubygems/spec_fetcher.rb |  274 ++
 .../lib/ruby/stdlib/rubygems/specification.rb      | 3087 ++++++++++++
 .../index.rubygems.org/GlobalSignRootCA.pem        |   21 +
 .../DigiCertHighAssuranceEVRootCA.pem              |   23 +
 .../rubygems.org/AddTrustExternalCARoot.pem        |   25 +
 .../lib/ruby/stdlib/rubygems/stub_specification.rb |  218 +
 .../jruby/lib/ruby/stdlib/rubygems/syck_hack.rb    |   77 +
 .../jruby/lib/ruby/stdlib/rubygems/test_case.rb    | 1556 ++++++
 .../lib/ruby/stdlib/rubygems/test_utilities.rb     |  384 ++
 .../vendor/jruby/lib/ruby/stdlib/rubygems/text.rb  |   86 +
 .../jruby/lib/ruby/stdlib/rubygems/uninstaller.rb  |  346 ++
 .../lib/ruby/stdlib/rubygems/uri_formatter.rb      |   50 +
 .../lib/ruby/stdlib/rubygems/user_interaction.rb   |  709 +++
 .../vendor/jruby/lib/ruby/stdlib/rubygems/util.rb  |  125 +
 .../lib/ruby/stdlib/rubygems/util/licenses.rb      |  411 ++
 .../jruby/lib/ruby/stdlib/rubygems/util/list.rb    |   37 +
 .../jruby/lib/ruby/stdlib/rubygems/validator.rb    |  166 +
 .../jruby/lib/ruby/stdlib/rubygems/version.rb      |  398 ++
 .../lib/ruby/stdlib/rubygems/version_option.rb     |   77 +
 .../vendor/jruby/lib/ruby/stdlib/scanf.rb          |  776 +++
 .../vendor/jruby/lib/ruby/stdlib/securerandom.rb   |  237 +
 .../vendor/jruby/lib/ruby/stdlib/set.rb            |    2 +
 .../vendor/jruby/lib/ruby/stdlib/shell.rb          |  461 ++
 .../jruby/lib/ruby/stdlib/shell/builtin-command.rb |  147 +
 .../lib/ruby/stdlib/shell/command-processor.rb     |  668 +++
 .../vendor/jruby/lib/ruby/stdlib/shell/error.rb    |   26 +
 .../vendor/jruby/lib/ruby/stdlib/shell/filter.rb   |  138 +
 .../lib/ruby/stdlib/shell/process-controller.rb    |  309 ++
 .../jruby/lib/ruby/stdlib/shell/system-command.rb  |  159 +
 .../vendor/jruby/lib/ruby/stdlib/shell/version.rb  |   16 +
 .../vendor/jruby/lib/ruby/stdlib/shellwords.rb     |  231 +
 .../vendor/jruby/lib/ruby/stdlib/singleton.rb      |  172 +
 .../vendor/jruby/lib/ruby/stdlib/socket.rb         | 1363 ++++++
 .../vendor/jruby/lib/ruby/stdlib/stringio.rb       |    2 +
 .../vendor/jruby/lib/ruby/stdlib/strscan.rb        |    2 +
 .../vendor/jruby/lib/ruby/stdlib/sync.rb           |  329 ++
 .../vendor/jruby/lib/ruby/stdlib/syslog.rb         |  230 +
 .../vendor/jruby/lib/ruby/stdlib/syslog/logger.rb  |  209 +
 .../vendor/jruby/lib/ruby/stdlib/tempfile.rb       |   63 +
 .../vendor/jruby/lib/ruby/stdlib/thread.rb         |    2 +
 .../vendor/jruby/lib/ruby/stdlib/thwait.rb         |  140 +
 .../vendor/jruby/lib/ruby/stdlib/time.rb           |  688 +++
 .../vendor/jruby/lib/ruby/stdlib/timeout.rb        |   69 +
 .../vendor/jruby/lib/ruby/stdlib/tmpdir.rb         |  140 +
 .../vendor/jruby/lib/ruby/stdlib/tracer.rb         |  286 ++
 .../vendor/jruby/lib/ruby/stdlib/tsort.rb          |  452 ++
 .../vendor/jruby/lib/ruby/stdlib/ubygems.rb        |   14 +
 .../vendor/jruby/lib/ruby/stdlib/un.rb             |  391 ++
 .../jruby/lib/ruby/stdlib/unicode_normalize.rb     |   81 +
 .../lib/ruby/stdlib/unicode_normalize/normalize.rb |  175 +
 .../lib/ruby/stdlib/unicode_normalize/tables.rb    | 1170 +++++
 .../vendor/jruby/lib/ruby/stdlib/uri.rb            |  112 +
 .../vendor/jruby/lib/ruby/stdlib/uri/common.rb     |  750 +++
 .../vendor/jruby/lib/ruby/stdlib/uri/ftp.rb        |  267 +
 .../vendor/jruby/lib/ruby/stdlib/uri/generic.rb    | 1573 ++++++
 .../vendor/jruby/lib/ruby/stdlib/uri/http.rb       |   88 +
 .../vendor/jruby/lib/ruby/stdlib/uri/https.rb      |   23 +
 .../vendor/jruby/lib/ruby/stdlib/uri/ldap.rb       |  261 +
 .../vendor/jruby/lib/ruby/stdlib/uri/ldaps.rb      |   21 +
 .../vendor/jruby/lib/ruby/stdlib/uri/mailto.rb     |  294 ++
 .../jruby/lib/ruby/stdlib/uri/rfc2396_parser.rb    |  544 +++
 .../jruby/lib/ruby/stdlib/uri/rfc3986_parser.rb    |  125 +
 .../vendor/jruby/lib/ruby/stdlib/weakref.rb        |   60 +
 .../vendor/jruby/lib/ruby/stdlib/webrick.rb        |  227 +
 .../jruby/lib/ruby/stdlib/webrick/accesslog.rb     |  159 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/cgi.rb    |  309 ++
 .../vendor/jruby/lib/ruby/stdlib/webrick/compat.rb |   36 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/config.rb |  158 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/cookie.rb |  172 +
 .../jruby/lib/ruby/stdlib/webrick/htmlutils.rb     |   30 +
 .../jruby/lib/ruby/stdlib/webrick/httpauth.rb      |   96 +
 .../ruby/stdlib/webrick/httpauth/authenticator.rb  |  117 +
 .../lib/ruby/stdlib/webrick/httpauth/basicauth.rb  |  108 +
 .../lib/ruby/stdlib/webrick/httpauth/digestauth.rb |  408 ++
 .../lib/ruby/stdlib/webrick/httpauth/htdigest.rb   |  132 +
 .../lib/ruby/stdlib/webrick/httpauth/htgroup.rb    |   94 +
 .../lib/ruby/stdlib/webrick/httpauth/htpasswd.rb   |  125 +
 .../lib/ruby/stdlib/webrick/httpauth/userdb.rb     |   53 +
 .../jruby/lib/ruby/stdlib/webrick/httpproxy.rb     |  338 ++
 .../jruby/lib/ruby/stdlib/webrick/httprequest.rb   |  587 +++
 .../jruby/lib/ruby/stdlib/webrick/httpresponse.rb  |  505 ++
 .../vendor/jruby/lib/ruby/stdlib/webrick/https.rb  |  152 +
 .../jruby/lib/ruby/stdlib/webrick/httpserver.rb    |  280 ++
 .../jruby/lib/ruby/stdlib/webrick/httpservlet.rb   |   23 +
 .../ruby/stdlib/webrick/httpservlet/abstract.rb    |  152 +
 .../ruby/stdlib/webrick/httpservlet/cgi_runner.rb  |   47 +
 .../ruby/stdlib/webrick/httpservlet/cgihandler.rb  |  122 +
 .../ruby/stdlib/webrick/httpservlet/erbhandler.rb  |   88 +
 .../ruby/stdlib/webrick/httpservlet/filehandler.rb |  522 ++
 .../ruby/stdlib/webrick/httpservlet/prochandler.rb |   47 +
 .../jruby/lib/ruby/stdlib/webrick/httpstatus.rb    |  194 +
 .../jruby/lib/ruby/stdlib/webrick/httputils.rb     |  513 ++
 .../jruby/lib/ruby/stdlib/webrick/httpversion.rb   |   76 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/log.rb    |  156 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/server.rb |  378 ++
 .../vendor/jruby/lib/ruby/stdlib/webrick/ssl.rb    |  215 +
 .../vendor/jruby/lib/ruby/stdlib/webrick/utils.rb  |  270 +
 .../jruby/lib/ruby/stdlib/webrick/version.rb       |   18 +
 .../vendor/jruby/lib/ruby/stdlib/win32/importer.rb |    9 +
 .../vendor/jruby/lib/ruby/stdlib/win32/registry.rb |  913 ++++
 .../vendor/jruby/lib/ruby/stdlib/win32/resolv.rb   |  221 +
 .../vendor/jruby/lib/ruby/stdlib/win32/resolv9x.rb |  253 +
 .../vendor/jruby/lib/ruby/stdlib/win32/sspi.rb     |  331 ++
 .../vendor/jruby/lib/ruby/stdlib/win32ole.rb       |    1 +
 .../vendor/jruby/lib/ruby/stdlib/yaml.rb           |   60 +
 .../vendor/jruby/lib/ruby/stdlib/yaml/dbm.rb       |  280 ++
 .../vendor/jruby/lib/ruby/stdlib/yaml/store.rb     |   86 +
 .../vendor/jruby/lib/ruby/stdlib/zlib.rb           |   26 +
 .../logstash-plugin/vendor/jruby/samples/error.rb  |   10 +
 .../vendor/jruby/samples/ext/extconf.rb            |   12 +
 .../vendor/jruby/samples/ext/mytest.c              |   24 +
 .../vendor/jruby/samples/ffi/ffi.rb                |   12 +
 .../vendor/jruby/samples/ffi/gettimeofday.rb       |   21 +
 .../vendor/jruby/samples/ffi/pty.rb                |   82 +
 .../vendor/jruby/samples/ffi/qsort.rb              |   18 +
 .../vendor/jruby/samples/ffi/win32api.rb           |   78 +
 .../vendor/jruby/samples/irb-applet.html           |   10 +
 .../logstash-plugin/vendor/jruby/samples/java2.rb  |   18 +
 .../logstash-plugin/vendor/jruby/samples/jirb.jnlp |   21 +
 .../vendor/jruby/samples/jnlp/README               |   59 +
 .../vendor/jruby/samples/jnlp/build.properties     |    4 +
 .../vendor/jruby/samples/jnlp/build.xml            |   64 +
 .../vendor/jruby/samples/jnlp/jirb.jnlp            |   15 +
 .../vendor/jruby/samples/jnlp/signed-jirb.jnlp     |   18 +
 .../jruby/samples/jrubyc_java/MyObjectTest.java    |    7 +
 .../jruby/samples/jrubyc_java/MyObjectTest2.java   |   13 +
 .../vendor/jruby/samples/jrubyc_java/annotated.rb  |   33 +
 .../jruby/samples/jrubyc_java/my_runnable.rb       |   35 +
 .../vendor/jruby/samples/jrubyc_java/overloads.rb  |   57 +
 .../jruby/samples/jrubyc_java/simple_class.rb      |   23 +
 .../jruby/samples/jrubyc_java/simple_class2.rb     |   13 +
 .../jruby/samples/jrubyc_java/simple_junit.rb      |   59 +
 .../logstash-plugin/vendor/jruby/samples/mvm.rb    |   31 +
 .../vendor/jruby/samples/mvm_subvm.rb              |   25 +
 .../logstash-plugin/vendor/jruby/samples/swing2.rb |   21 +
 .../logstash-plugin/vendor/jruby/samples/thread.rb |    5 +
 .../logstash-plugin/vendor/jruby/samples/xslt.rb   |   49 +
 .../vendor/jruby/tool/nailgun/Makefile.in          |   23 +
 .../vendor/jruby/tool/nailgun/README.txt           |   11 +
 .../vendor/jruby/tool/nailgun/configure            | 5150 ++++++++++++++++++++
 .../vendor/jruby/tool/nailgun/ng.exe               |  Bin 0 -> 18432 bytes
 .../vendor/jruby/tool/nailgun/src/c/ng.c           |  730 +++
 1335 files changed, 256327 insertions(+)

diff --git a/plc4j/integrations/logstash-plugin/.gitignore b/plc4j/integrations/logstash-plugin/.gitignore
new file mode 100644
index 0000000..5077334
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/.gitignore
@@ -0,0 +1,79 @@
+*.gem
+*.rbc
+/.config
+/coverage/
+/InstalledFiles
+/pkg/
+/spec/reports/
+/spec/examples.txt
+/test/tmp/
+/test/version_tmp/
+/tmp/
+
+# Used by dotenv library to load environment variables.
+# .env
+
+# Ignore Byebug command history file.
+.byebug_history
+
+## Specific to RubyMotion:
+.dat*
+.repl_history
+build/
+*.bridgesupport
+build-iPhoneOS/
+build-iPhoneSimulator/
+
+## Specific to RubyMotion (use of CocoaPods):
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# vendor/Pods/
+
+## Documentation cache and generated files:
+/.yardoc/
+/_yardoc/
+/doc/
+/rdoc/
+
+## Environment normalization:
+/.bundle/
+/vendor/bundle
+/lib/bundler/man/
+
+# for a library or gem, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# Gemfile.lock
+# .ruby-version
+# .ruby-gemset
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+.idea
\ No newline at end of file
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileChanges/last-build.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileChanges/last-build.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/annotation-processors.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/annotation-processors.bin
new file mode 100644
index 0000000..539e690
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/annotation-processors.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/fileContent.lock b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/fileContent.lock
new file mode 100644
index 0000000..274a342
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileContent/fileContent.lock differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..abbbace
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..640e180
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/resourceHashesCache.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000..f93e2f5
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/resourceHashesCache.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.bin
new file mode 100644
index 0000000..539ae4d
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.lock b/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.lock
new file mode 100644
index 0000000..3de619a
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/4.8/taskHistory/taskHistory.lock differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000..50c4592
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/cache.properties b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000..fd57068
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Wed Aug 14 13:47:01 CEST 2019
+gradle.version=4.8
diff --git a/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/outputFiles.bin b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000..4658d8f
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/plc4j/integrations/logstash-plugin/.gradle/vcsWorkingDirs/gc.properties b/plc4j/integrations/logstash-plugin/.gradle/vcsWorkingDirs/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/plc4j/integrations/logstash-plugin/Gemfile b/plc4j/integrations/logstash-plugin/Gemfile
new file mode 100644
index 0000000..ea0d321
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/Gemfile
@@ -0,0 +1,12 @@
+# AUTOGENERATED BY THE GRADLE SCRIPT. EDITS WILL BE OVERWRITTEN.
+source 'https://rubygems.org'
+
+gemspec
+
+logstash_path = ENV["LOGSTASH_PATH"] || "../../logstash"
+use_logstash_source = ENV["LOGSTASH_SOURCE"] && ENV["LOGSTASH_SOURCE"].to_s == "1"
+
+if Dir.exist?(logstash_path) && use_logstash_source
+  gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
+  gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
+end
diff --git a/plc4j/integrations/logstash-plugin/README.md b/plc4j/integrations/logstash-plugin/README.md
new file mode 100644
index 0000000..1050718
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/README.md
@@ -0,0 +1,9 @@
+# Logstash Java Plugin
+
+[![Travis Build Status](https://travis-ci.org/logstash-plugins/logstash-filter-java_filter_example.svg)](https://travis-ci.org/logstash-plugins/logstash-filter-java_filter_example)
+
+This is a Java plugin for [Logstash](https://github.com/elastic/logstash).
+
+It is fully free and fully open source. The license is Apache 2.0, meaning you are free to use it however you want.
+
+The documentation for Logstash Java plugins is available [here](https://www.elastic.co/guide/en/logstash/6.7/contributing-java-plugin.html).
diff --git a/plc4j/integrations/logstash-plugin/VERSION b/plc4j/integrations/logstash-plugin/VERSION
new file mode 100644
index 0000000..3eefcb9
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/VERSION
@@ -0,0 +1 @@
+1.0.0
diff --git a/plc4j/integrations/logstash-plugin/build.gradle b/plc4j/integrations/logstash-plugin/build.gradle
new file mode 100644
index 0000000..aad839a
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/build.gradle
@@ -0,0 +1,107 @@
+import java.nio.file.Files
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING
+
+apply plugin: 'java'
+apply from: LOGSTASH_CORE_PATH + "/../rubyUtils.gradle"
+
+// ===========================================================================
+// plugin info
+// ===========================================================================
+group                      'org.apache.plc4x.logstash' // must match the package of the main plugin class
+version                    "${file("VERSION").text.trim()}" // read from required VERSION file
+description                = "Apache PLC4x Logstash Integration"
+pluginInfo.licenses        = ['Apache-2.0'] // list of SPDX license IDs
+pluginInfo.longDescription = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using \$LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
+pluginInfo.authors         = ['Till Voß', 'Stefan Herrmann']
+pluginInfo.email           = ['stefan.herrmann@codecentric.de', 'till.voß@codecentric.de']
+pluginInfo.homepage        = "https://plc4x.apache.org"
+pluginInfo.pluginType      = "input"
+pluginInfo.pluginClass     = "Plc4xInput"
+pluginInfo.pluginName      = "plc4x_input" // must match the @LogstashPlugin annotation in the main plugin class
+// ===========================================================================
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+buildscript {
+    repositories {
+        mavenCentral()
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
+    }
+}
+
+repositories {
+    mavenCentral()
+}
+
+task wrapper(type: Wrapper) {
+    gradleVersion = '4.0'
+}
+
+apply plugin: 'com.github.johnrengelman.shadow'
+
+shadowJar {
+    classifier = null
+}
+
+dependencies {
+    compile 'org.apache.commons:commons-lang3:3.7'
+    compile 'org.apache.logging.log4j:log4j-api:2.9.1'
+    compile 'org.apache.logging.log4j:log4j-core:2.9.1'
+    compile fileTree(dir: LOGSTASH_CORE_PATH, include: "**/logstash-core-?.?.?.jar")
+
+    testCompile 'junit:junit:4.12'
+    testCompile 'org.jruby:jruby-complete:9.1.13.0'
+}
+
+clean {
+    delete "${projectDir}/Gemfile"
+    delete "${projectDir}/" + pluginInfo.pluginFullName() + ".gemspec"
+    delete "${projectDir}/lib/"
+    delete "${projectDir}/vendor/"
+    new FileNameFinder().getFileNames(projectDir.toString(), pluginInfo.pluginFullName() + "-?.?.?.gem").each { filename ->
+        delete filename
+    }
+}
+
+tasks.withType(JavaCompile) {
+    options.encoding = 'UTF-8'
+}
+
+task vendor(dependsOn: shadowJar) {
+    doLast {
+        String vendorPathPrefix = "vendor/jar-dependencies"
+        String projectGroupPath = project.group.replaceAll('\\.', '/')
+        File projectJarFile = file("${vendorPathPrefix}/${projectGroupPath}/${pluginInfo.pluginFullName()}/${project.version}/${pluginInfo.pluginFullName()}-${project.version}.jar")
+        projectJarFile.mkdirs()
+        Files.copy(file("$buildDir/libs/${project.name}-${project.version}.jar").toPath(), projectJarFile.toPath(), REPLACE_EXISTING)
+        validatePluginJar(projectJarFile, project.group)
+    }
+}
+
+task generateRubySupportFiles() {
+    doLast {
+        generateRubySupportFilesForPlugin(project.description, project.group, version)
+    }
+}
+
+task removeObsoleteJars() {
+    doLast {
+        new FileNameFinder().getFileNames(
+            projectDir.toString(),
+            "vendor/**/" + pluginInfo.pluginFullName() + "*.jar",
+            "vendor/**/" + pluginInfo.pluginFullName() + "-" + version + ".jar").each { f ->
+            delete f
+        }
+    }
+}
+
+task gem(dependsOn: [downloadAndInstallJRuby, removeObsoleteJars, vendor, generateRubySupportFiles]) {
+    doLast {
+        buildGem(projectDir, buildDir, pluginInfo.pluginFullName() + ".gemspec")
+    }
+}
diff --git a/plc4j/integrations/logstash-plugin/docs/index.asciidoc b/plc4j/integrations/logstash-plugin/docs/index.asciidoc
new file mode 100644
index 0000000..cc47ac1
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/docs/index.asciidoc
@@ -0,0 +1,117 @@
+:plugin: example
+:type: input
+:default_codec: plain
+// Update header with plugin name and default codec
+
+///////////////////////////////////////////
+START - GENERATED VARIABLES, DO NOT EDIT!
+///////////////////////////////////////////
+:version: %VERSION%
+:release_date: %RELEASE_DATE%
+:changelog_url: %CHANGELOG_URL%
+:include_path: ../../../../logstash/docs/include
+///////////////////////////////////////////
+END - GENERATED VARIABLES, DO NOT EDIT!
+///////////////////////////////////////////
+
+[id="plugins-{type}s-{plugin}"]
+
+=== Example input plugin
+
+include::{include_path}/plugin_header.asciidoc[]
+
+==== Description
+
+Add plugin description here
+
+// Format anchors and links to support generated ids for versioning
+// Sample anchor: [id="plugins-{type}s-{plugin}-setting_name"]
+// Sample link: <<plugins-{type}s-{plugin}-setting_name>>
+
+[id="plugins-{type}s-{plugin}-options"]
+==== Example Input Configuration Options
+
+[cols="<,<,<",options="header",]
+|=======================================================================
+|Setting |Input type|Required
+| <<plugins-{type}s-{plugin}-a_setting_name>> |<<boolean,boolean>>|No
+| <<plugins-{type}s-{plugin}-another_setting_name>> |<<hash,hash>>|No
+| <<plugins-{type}s-{plugin}-setting_name_3>> |<<string,string>>|No
+| <<plugins-{type}s-{plugin}-setting_name_4>> |<<number,number>>|No
+| <<plugins-{type}s-{plugin}-setting_name_5>> |<<array,array>>|No
+| <<plugins-{type}s-{plugin}-setting_name_6>> |<<bytes,bytes>>|No
+| <<plugins-{type}s-{plugin}-setting_name_7>> |<<path,path>>|No
+| <<plugins-{type}s-{plugin}-setting_name_8>> |<<password,password>>|No
+|=======================================================================
+
+[id="plugins-{type}s-{plugin}-a_setting_name"]
+===== `a_setting_name` 
+
+  * Value type is <<boolean,boolean>>
+  * Default value is `true`
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-another_setting_name"]
+===== `another_setting_name` 
+
+  * Value type is <<hash,hash>>
+  * Default value is `{}`
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_3"]
+===== `setting_name_3` 
+
+  * Value type is <<string,string>>
+  * Default value is `{}`
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_4"]
+===== `setting_name_4` 
+
+  * Value type is <<number,number>>
+  * Default value is `0`
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_5"]
+===== `setting_name_5` 
+
+  * Value type is <<array,array>>
+  * Default value is {}
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_6"]
+===== `setting_name_6` 
+
+  * Value type is <<bytes,bytes>>
+  * Default value is {}
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_7"]
+===== `setting_name_7` 
+
+  * Value type is <<path,path>>
+  * Default value is {}
+
+Add description here
+
+[id="plugins-{type}s-{plugin}-setting_name_8"]
+===== `setting_name_8` 
+
+  * Value type is <<password,password>>
+  * Default value is {}
+
+Add description here
+
+// The full list of Value Types is here: 
+// https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
+
+[id="plugins-{type}s-{plugin}-common-options"]
+include::{include_path}/{type}.asciidoc[]
+
+:default_codec!:
diff --git a/plc4j/integrations/logstash-plugin/gradle.properties b/plc4j/integrations/logstash-plugin/gradle.properties
new file mode 100644
index 0000000..a373e1d
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/gradle.properties
@@ -0,0 +1 @@
+LOGSTASH_CORE_PATH=/Users/sherrmann/git/github/logstash/logstash-core
diff --git a/plc4j/integrations/logstash-plugin/gradle/wrapper/gradle-wrapper.properties b/plc4j/integrations/logstash-plugin/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e7657b1
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Aug 14 14:02:50 CEST 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip
diff --git a/plc4j/integrations/logstash-plugin/gradlew b/plc4j/integrations/logstash-plugin/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/plc4j/integrations/logstash-plugin/gradlew.bat b/plc4j/integrations/logstash-plugin/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/plc4j/integrations/logstash-plugin/lib/logstash-input-plc4x_input_jars.rb b/plc4j/integrations/logstash-plugin/lib/logstash-input-plc4x_input_jars.rb
new file mode 100644
index 0000000..8dd23f4
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/lib/logstash-input-plc4x_input_jars.rb
@@ -0,0 +1,5 @@
+# AUTOGENERATED BY THE GRADLE SCRIPT. EDITS WILL BE OVERWRITTEN.
+# encoding: utf-8
+
+require 'jar_dependencies'
+require_jar('org.apache.plc4x.logstash', 'logstash-input-plc4x_input', '1.0.0')
diff --git a/plc4j/integrations/logstash-plugin/lib/logstash/inputs/plc4x_input.rb b/plc4j/integrations/logstash-plugin/lib/logstash/inputs/plc4x_input.rb
new file mode 100644
index 0000000..ebe29e8
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/lib/logstash/inputs/plc4x_input.rb
@@ -0,0 +1,12 @@
+# AUTOGENERATED BY THE GRADLE SCRIPT. EDITS WILL BE OVERWRITTEN.
+# encoding: utf-8
+require "logstash/inputs/base"
+require "logstash/namespace"
+require "logstash-input-plc4x_input_jars"
+require "java"
+
+class LogStash::Inputs::Plc4xInput < LogStash::Inputs::Base
+  config_name "plc4x_input"
+
+  def self.javaClass() Java::org.apache.plc4x.logstash.Plc4xInput.java_class; end
+end
diff --git a/plc4j/integrations/logstash-plugin/logstash-input-java_input_example.gemspec b/plc4j/integrations/logstash-plugin/logstash-input-java_input_example.gemspec
new file mode 100644
index 0000000..8fba6d8
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/logstash-input-java_input_example.gemspec
@@ -0,0 +1,22 @@
+# AUTOGENERATED BY THE GRADLE SCRIPT. EDITS WILL BE OVERWRITTEN.
+Gem::Specification.new do |s|
+  s.name            = 'logstash-input-java_input_example'
+  s.version         = ::File.read('VERSION').split('\n').first
+  s.licenses        = ['Apache-2.0']
+  s.summary         = 'Example Java input implementation'
+  s.description     = 'This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program'
+  s.authors         = ['Elasticsearch']
+  s.email           = ['info@elastic.co']
+  s.homepage        = 'http://www.elastic.co/guide/en/logstash/current/index.html'
+  s.require_paths = ['lib', 'vendor/jar-dependencies']
+
+  s.files = Dir["lib/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
+
+  # Special flag to let us know this is actually a logstash plugin
+  s.metadata = { 'logstash_plugin' => 'true', 'logstash_group' => 'input', 'java_plugin' => 'true'}
+
+  # Gem dependencies
+  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
+  s.add_runtime_dependency 'jar-dependencies'
+  s.add_development_dependency 'logstash-devutils'
+end
diff --git a/plc4j/integrations/logstash-plugin/logstash-input-plc4x_input.gemspec b/plc4j/integrations/logstash-plugin/logstash-input-plc4x_input.gemspec
new file mode 100644
index 0000000..dc0910a
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/logstash-input-plc4x_input.gemspec
@@ -0,0 +1,22 @@
+# AUTOGENERATED BY THE GRADLE SCRIPT. EDITS WILL BE OVERWRITTEN.
+Gem::Specification.new do |s|
+  s.name            = 'logstash-input-plc4x_input'
+  s.version         = ::File.read('VERSION').split('\n').first
+  s.licenses        = ['Apache-2.0']
+  s.summary         = 'Apache PLC4x Logstash Integration'
+  s.description     = 'This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program'
+  s.authors         = ['Till Voß', 'Stefan Herrmann']
+  s.email           = ['stefan.herrmann@codecentric.de', 'till.voß@codecentric.de']
+  s.homepage        = 'https://plc4x.apache.org'
+  s.require_paths = ['lib', 'vendor/jar-dependencies']
+
+  s.files = Dir["lib/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
+
+  # Special flag to let us know this is actually a logstash plugin
+  s.metadata = { 'logstash_plugin' => 'true', 'logstash_group' => 'input', 'java_plugin' => 'true'}
+
+  # Gem dependencies
+  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
+  s.add_runtime_dependency 'jar-dependencies'
+  s.add_development_dependency 'logstash-devutils'
+end
diff --git a/plc4j/integrations/logstash-plugin/pom.xml b/plc4j/integrations/logstash-plugin/pom.xml
new file mode 100644
index 0000000..dd83ec1
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-integrations</artifactId>
+    <version>0.5.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-logstash</artifactId>
+
+  <name>PLC4J: Integrations: Logstash Plugin</name>
+  <description>Integration module for integrating PLC4X into Logstash</description>
+
+  <properties>
+    <logstash.version>7.3.0</logstash.version>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.fortasoft</groupId>
+        <artifactId>gradle-maven-plugin</artifactId>
+        <version>1.0.8</version>
+        <configuration>
+          <tasks>
+            <!-- this would effectively call "gradle doSomething" -->
+            <task>gem</task>
+          </tasks>
+        </configuration>
+        <executions>
+          <execution>
+            <!-- You can bind this to any phase you like -->
+            <phase>compile</phase>
+            <goals>
+              <!-- goal must be "invoke" -->
+              <goal>invoke</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/*.java</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java b/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java
new file mode 100644
index 0000000..67adf14
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java
@@ -0,0 +1,86 @@
+package org.apache.plc4x.logstash;
+
+import co.elastic.logstash.api.Configuration;
+import co.elastic.logstash.api.Context;
+import co.elastic.logstash.api.Input;
+import co.elastic.logstash.api.LogstashPlugin;
+import co.elastic.logstash.api.PluginConfigSpec;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.function.Consumer;
+
+// class name must match plugin name
+@LogstashPlugin(name="plc4x_input")
+public class Plc4xInput implements Input {
+
+    public static final PluginConfigSpec<Long> EVENT_COUNT_CONFIG =
+            PluginConfigSpec.numSetting("count", 3);
+
+    public static final PluginConfigSpec<String> PREFIX_CONFIG =
+            PluginConfigSpec.stringSetting("prefix", "message");
+
+    private String id;
+    private long count;
+    private String prefix;
+    private final CountDownLatch done = new CountDownLatch(1);
+    private volatile boolean stopped;
+
+    // all plugins must provide a constructor that accepts id, Configuration, and Context
+    public Plc4xInput(String id, Configuration config, Context context) {
+        // constructors should validate configuration options
+        this.id = id;
+        count = config.get(EVENT_COUNT_CONFIG);
+        prefix = config.get(PREFIX_CONFIG);
+    }
+
+    @Override
+    public void start(Consumer<Map<String, Object>> consumer) {
+
+        // The start method should push Map<String, Object> instances to the supplied QueueWriter
+        // instance. Those will be converted to Event instances later in the Logstash event
+        // processing pipeline.
+        //
+        // Inputs that operate on unbounded streams of data or that poll indefinitely for new
+        // events should loop indefinitely until they receive a stop request. Inputs that produce
+        // a finite sequence of events should loop until that sequence is exhausted or until they
+        // receive a stop request, whichever comes first.
+
+        int eventCount = 0;
+        try {
+            while (!stopped && eventCount < count) {
+                eventCount++;
+                consumer.accept(Collections.singletonMap("message",
+                        prefix + " " + StringUtils.center(eventCount + " of " + count, 20)));
+            }
+        } finally {
+            stopped = true;
+            done.countDown();
+        }
+    }
+
+    @Override
+    public void stop() {
+        stopped = true; // set flag to request cooperative stop of input
+    }
+
+    @Override
+    public void awaitStop() throws InterruptedException {
+        done.await(); // blocks until input has stopped
+    }
+
+    @Override
+    public Collection<PluginConfigSpec<?>> configSchema() {
+        // should return a list of all configuration options for this plugin
+        return Arrays.asList(EVENT_COUNT_CONFIG, PREFIX_CONFIG);
+    }
+
+    @Override
+    public String getId() {
+        return this.id;
+    }
+}
diff --git a/plc4j/integrations/logstash-plugin/src/test/java/org/apache/plc4x/logstash/JavaInputExampleTest.java b/plc4j/integrations/logstash-plugin/src/test/java/org/apache/plc4x/logstash/JavaInputExampleTest.java
new file mode 100644
index 0000000..19597e3
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/src/test/java/org/apache/plc4x/logstash/JavaInputExampleTest.java
@@ -0,0 +1,53 @@
+package org.apache.plc4x.logstash;
+
+import co.elastic.logstash.api.Configuration;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.logstash.plugins.ConfigurationImpl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+public class JavaInputExampleTest {
+
+    @Test
+    public void testJavaInputExample() {
+        String prefix = "This is message";
+        long eventCount = 5;
+        Map<String, Object> configValues = new HashMap<>();
+        configValues.put(Plc4xInput.PREFIX_CONFIG.name(), prefix);
+        configValues.put(Plc4xInput.EVENT_COUNT_CONFIG.name(), eventCount);
+        Configuration config = new ConfigurationImpl(configValues);
+        Plc4xInput input = new Plc4xInput("test-id", config, null);
+        TestConsumer testConsumer = new TestConsumer();
+        input.start(testConsumer);
+
+        List<Map<String, Object>> events = testConsumer.getEvents();
+        Assert.assertEquals(eventCount, events.size());
+        for (int k = 1; k <= events.size(); k++) {
+            Assert.assertEquals(prefix + " " + StringUtils.center(k + " of " + eventCount, 20),
+                    events.get(k - 1).get("message"));
+        }
+    }
+
+    private static class TestConsumer implements Consumer<Map<String, Object>> {
+
+        private List<Map<String, Object>> events = new ArrayList<>();
+
+        @Override
+        public void accept(Map<String, Object> event) {
+            synchronized (this) {
+                events.add(event);
+            }
+        }
+
+        public List<Map<String, Object>> getEvents() {
+            return events;
+        }
+    }
+
+}
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/BSDL b/plc4j/integrations/logstash-plugin/vendor/jruby/BSDL
new file mode 100644
index 0000000..a009cae
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/BSDL
@@ -0,0 +1,22 @@
+Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/COPYING b/plc4j/integrations/logstash-plugin/vendor/jruby/COPYING
new file mode 100644
index 0000000..f148ed2
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/COPYING
@@ -0,0 +1,2475 @@
+JRuby is Copyright (c) 2007-2018 The JRuby project, and is released
+under a tri EPL/GPL/LGPL license. You can use it, redistribute it
+and/or modify it under the terms of the:
+
+  Eclipse Public License version 2.0
+    OR
+  GNU General Public License version 2
+    OR
+  GNU Lesser General Public License version 2.1
+
+bytelist (http://github.com/jruby/bytelist),
+jnr-posix (https://github.com/jnr/jnr-posix),
+jruby-openssl (https://github.com/jruby/jruby-openssl),
+jruby-readline (https://github.com/jruby/jruby-readline),
+psych (https://github.com/ruby/psych),
+yydebug (https://github.com/jruby/jay-yydebug/)
+are released under the same copyright/license.
+
+Some additional libraries distributed with JRuby are not covered by
+JRuby's licence. Most of these libraries and their licenses are listed 
+below. Also see LICENSE.RUBY for most files found in lib/ruby/stdlib.
+
+ bench/rails/public/javascripts/* are distributed under the MIT
+ license, and have the following copyrights:
+
+   controls.js is Copyright:
+   (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+   (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+   (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
+
+   dragdrop.js is Copyright:
+   (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+   (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
+
+   effect.js is Copyright (c) 2005-2008 Thomas Fuchs.
+
+   prototype.js is Copyright (c) 2005-2007 Sam Stephenson.
+
+ asm (http://asm.objectweb.org) is distributed under the BSD license and is
+
+   Copyright (c) 2000-2011 INRIA, France Telecom
+   All rights reserved.
+
+ jline2 (https://github.com/jline/jline2) is distributed under the BSD license:
+
+   Copyright (c) 2002-2012, the original author or authors.
+   All rights reserved.
+
+ jzlib (http://www.jcraft.com/jzlib/) is distributed under the BSD license:
+
+   Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
+
+ The "rake" library (https://github.com/ruby/rake) is distributed under
+ the MIT license, and has the following copyright:
+   
+   Copyright (c) 2003, 2004 Jim Weirich
+
+ jcodings (http://github.com/jruby/jcodings) and
+ joni (http://github.com/jruby/joni) are distributed
+ under the MIT license without copyright.
+
+ Bouncycastle is released under the MIT license:
+
+   Copyright (c) 2000 - 2006 The Legion Of The Bouncy Castle.
+
+ jnr-x86asm (https://github.com/jnr/jnr-x86asm) is distributed under the MIT
+ license with the following copyright:
+
+   Copyright (C) 2010 Wayne Meissner
+   Copyright (c) 2008-2009, Petr Kobalicek <ko...@gmail.com>
+
+ The following libraries are redistributed under the Apache Software
+ License v2.0, available below.
+   invokebinder (https://github.com/headius/invokebinder)
+   jffi (https://github.com/jnr/jffi)
+   jitescript (https://github.com/qmx/jitescript)
+   jnr-constants (http://github.com/jnr/jnr-constants)
+   jnr-enxio (https://github.com/jnr/jnr-enxio)
+   jnr-ffi (https://github.com/jnr/jnr-jffi)
+   jnr-netdb (http://github.com/jnr/jnr-netdb)
+   jnr-unixsocket (https://github.com/jnr/jnr-unixsocket)
+   joda-time (http://joda-time.sourceforge.net)
+   maven (http://maven.apache.org/)
+   nailgun (http://martiansoftware.com/nailgun)
+   options (https://github.com/headius/options)
+   snakeyaml (https://github.com/asomov/snakeyaml)
+   unsafe-fences (https://github.com/headius/unsafe-fences)
+
+ racc (runtime only, https://github.com/tenderlove/racc) is
+   distributed under the same license terms as the Ruby standard
+   library. This includes all files under lib/ruby/stdlib/racc.
+   See LICENSE.RUBY.
+
+ json-generator and json-parser (https://github.com/flori/json) native
+   extenstions under the same license terms as the Ruby standard library.
+   See LICENSE.RUBY
+
+The complete text of the Eclipse Public License is as follows:
+
+  Eclipse Public License - v 2.0
+
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+  1. DEFINITIONS
+
+  "Contribution" means:
+
+    a) in the case of the initial Contributor, the initial content
+       Distributed under this Agreement, and
+
+    b) in the case of each subsequent Contributor:
+       i) changes to the Program, and
+       ii) additions to the Program;
+    where such changes and/or additions to the Program originate from
+    and are Distributed by that particular Contributor. A Contribution
+    "originates" from a Contributor if it was added to the Program by
+    such Contributor itself or anyone acting on such Contributor's behalf.
+    Contributions do not include changes or additions to the Program that
+    are not Modified Works.
+
+  "Contributor" means any person or entity that Distributes the Program.
+
+  "Licensed Patents" mean patent claims licensable by a Contributor which
+  are necessarily infringed by the use or sale of its Contribution alone
+  or when combined with the Program.
+
+  "Program" means the Contributions Distributed in accordance with this
+  Agreement.
+
+  "Recipient" means anyone who receives the Program under this Agreement
+  or any Secondary License (as applicable), including Contributors.
+
+  "Derivative Works" shall mean any work, whether in Source Code or other
+  form, that is based on (or derived from) the Program and for which the
+  editorial revisions, annotations, elaborations, or other modifications
+  represent, as a whole, an original work of authorship.
+
+  "Modified Works" shall mean any work in Source Code or other form that
+  results from an addition to, deletion from, or modification of the
+  contents of the Program, including, for purposes of clarity any new file
+  in Source Code form that contains any contents of the Program. Modified
+  Works shall not include works that contain only declarations,
+  interfaces, types, classes, structures, or files of the Program solely
+  in each case in order to link to, bind by name, or subclass the Program
+  or Modified Works thereof.
+
+  "Distribute" means the acts of a) distributing or b) making available
+  in any manner that enables the transfer of a copy.
+
+  "Source Code" means the form of a Program preferred for making
+  modifications, including but not limited to software source code,
+  documentation source, and configuration files.
+
+  "Secondary License" means either the GNU General Public License,
+  Version 2.0, or any later versions of that license, including any
+  exceptions or additional permissions as identified by the initial
+  Contributor.
+
+  2. GRANT OF RIGHTS
+
+    a) Subject to the terms of this Agreement, each Contributor hereby
+    grants Recipient a non-exclusive, worldwide, royalty-free copyright
+    license to reproduce, prepare Derivative Works of, publicly display,
+    publicly perform, Distribute and sublicense the Contribution of such
+    Contributor, if any, and such Derivative Works.
+
+    b) Subject to the terms of this Agreement, each Contributor hereby
+    grants Recipient a non-exclusive, worldwide, royalty-free patent
+    license under Licensed Patents to make, use, sell, offer to sell,
+    import and otherwise transfer the Contribution of such Contributor,
+    if any, in Source Code or other form. This patent license shall
+    apply to the combination of the Contribution and the Program if, at
+    the time the Contribution is added by the Contributor, such addition
+    of the Contribution causes such combination to be covered by the
+    Licensed Patents. The patent license shall not apply to any other
+    combinations which include the Contribution. No hardware per se is
+    licensed hereunder.
+
+    c) Recipient understands that although each Contributor grants the
+    licenses to its Contributions set forth herein, no assurances are
+    provided by any Contributor that the Program does not infringe the
+    patent or other intellectual property rights of any other entity.
+    Each Contributor disclaims any liability to Recipient for claims
+    brought by any other entity based on infringement of intellectual
+    property rights or otherwise. As a condition to exercising the
+    rights and licenses granted hereunder, each Recipient hereby
+    assumes sole responsibility to secure any other intellectual
+    property rights needed, if any. For example, if a third party
+    patent license is required to allow Recipient to Distribute the
+    Program, it is Recipient's responsibility to acquire that license
+    before distributing the Program.
+
+    d) Each Contributor represents that to its knowledge it has
+    sufficient copyright rights in its Contribution, if any, to grant
+    the copyright license set forth in this Agreement.
+
+    e) Notwithstanding the terms of any Secondary License, no
+    Contributor makes additional grants to any Recipient (other than
+    those set forth in this Agreement) as a result of such Recipient's
+    receipt of the Program under the terms of a Secondary License
+    (if permitted under the terms of Section 3).
+
+  3. REQUIREMENTS
+
+  3.1 If a Contributor Distributes the Program in any form, then:
+
+    a) the Program must also be made available as Source Code, in
+    accordance with section 3.2, and the Contributor must accompany
+    the Program with a statement that the Source Code for the Program
+    is available under this Agreement, and informs Recipients how to
+    obtain it in a reasonable manner on or through a medium customarily
+    used for software exchange; and
+
+    b) the Contributor may Distribute the Program under a license
+    different than this Agreement, provided that such license:
+       i) effectively disclaims on behalf of all other Contributors all
+       warranties and conditions, express and implied, including
+       warranties or conditions of title and non-infringement, and
+       implied warranties or conditions of merchantability and fitness
+       for a particular purpose;
+
+       ii) effectively excludes on behalf of all other Contributors all
+       liability for damages, including direct, indirect, special,
+       incidental and consequential damages, such as lost profits;
+
+       iii) does not attempt to limit or alter the recipients' rights
+       in the Source Code under section 3.2; and
+
+       iv) requires any subsequent distribution of the Program by any
+       party to be under a license that satisfies the requirements
+       of this section 3.
+
+  3.2 When the Program is Distributed as Source Code:
+
+    a) it must be made available under this Agreement, or if the
+    Program (i) is combined with other material in a separate file or
+    files made available under a Secondary License, and (ii) the initial
+    Contributor attached to the Source Code the notice described in
+    Exhibit A of this Agreement, then the Program may be made available
+    under the terms of such Secondary Licenses, and
+
+    b) a copy of this Agreement must be included with each copy of
+    the Program.
+
+  3.3 Contributors may not remove or alter any copyright, patent,
+  trademark, attribution notices, disclaimers of warranty, or limitations
+  of liability ("notices") contained within the Program from any copy of
+  the Program which they Distribute, provided that Contributors may add
+  their own appropriate notices.
+
+  4. COMMERCIAL DISTRIBUTION
+
+  Commercial distributors of software may accept certain responsibilities
+  with respect to end users, business partners and the like. While this
+  license is intended to facilitate the commercial use of the Program,
+  the Contributor who includes the Program in a commercial product
+  offering should do so in a manner which does not create potential
+  liability for other Contributors. Therefore, if a Contributor includes
+  the Program in a commercial product offering, such Contributor
+  ("Commercial Contributor") hereby agrees to defend and indemnify every
+  other Contributor ("Indemnified Contributor") against any losses,
+  damages and costs (collectively "Losses") arising from claims, lawsuits
+  and other legal actions brought by a third party against the Indemnified
+  Contributor to the extent caused by the acts or omissions of such
+  Commercial Contributor in connection with its distribution of the Program
+  in a commercial product offering. The obligations in this section do not
+  apply to any claims or Losses relating to any actual or alleged
+  intellectual property infringement. In order to qualify, an Indemnified
+  Contributor must: a) promptly notify the Commercial Contributor in
+  writing of such claim, and b) allow the Commercial Contributor to control,
+  and cooperate with the Commercial Contributor in, the defense and any
+  related settlement negotiations. The Indemnified Contributor may
+  participate in any such claim at its own expense.
+
+  For example, a Contributor might include the Program in a commercial
+  product offering, Product X. That Contributor is then a Commercial
+  Contributor. If that Commercial Contributor then makes performance
+  claims, or offers warranties related to Product X, those performance
+  claims and warranties are such Commercial Contributor's responsibility
+  alone. Under this section, the Commercial Contributor would have to
+  defend claims against the other Contributors related to those performance
+  claims and warranties, and if a court requires any other Contributor to
+  pay any damages as a result, the Commercial Contributor must pay
+  those damages.
+
+  5. NO WARRANTY
+
+  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+  PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+  IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+  TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+  PURPOSE. Each Recipient is solely responsible for determining the
+  appropriateness of using and distributing the Program and assumes all
+  risks associated with its exercise of rights under this Agreement,
+  including but not limited to the risks and costs of program errors,
+  compliance with applicable laws, damage to or loss of data, programs
+  or equipment, and unavailability or interruption of operations.
+
+  6. DISCLAIMER OF LIABILITY
+
+  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+  PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+  SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+  PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+  EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGES.
+
+  7. GENERAL
+
+  If any provision of this Agreement is invalid or unenforceable under
+  applicable law, it shall not affect the validity or enforceability of
+  the remainder of the terms of this Agreement, and without further
+  action by the parties hereto, such provision shall be reformed to the
+  minimum extent necessary to make such provision valid and enforceable.
+
+  If Recipient institutes patent litigation against any entity
+  (including a cross-claim or counterclaim in a lawsuit) alleging that the
+  Program itself (excluding combinations of the Program with other software
+  or hardware) infringes such Recipient's patent(s), then such Recipient's
+  rights granted under Section 2(b) shall terminate as of the date such
+  litigation is filed.
+
+  All Recipient's rights under this Agreement shall terminate if it
+  fails to comply with any of the material terms or conditions of this
+  Agreement and does not cure such failure in a reasonable period of
+  time after becoming aware of such noncompliance. If all Recipient's
+  rights under this Agreement terminate, Recipient agrees to cease use
+  and distribution of the Program as soon as reasonably practicable.
+  However, Recipient's obligations under this Agreement and any licenses
+  granted by Recipient relating to the Program shall continue and survive.
+
+  Everyone is permitted to copy and distribute copies of this Agreement,
+  but in order to avoid inconsistency the Agreement is copyrighted and
+  may only be modified in the following manner. The Agreement Steward
+  reserves the right to publish new versions (including revisions) of
+  this Agreement from time to time. No one other than the Agreement
+  Steward has the right to modify this Agreement. The Eclipse Foundation
+  is the initial Agreement Steward. The Eclipse Foundation may assign the
+  responsibility to serve as the Agreement Steward to a suitable separate
+  entity. Each new version of the Agreement will be given a distinguishing
+  version number. The Program (including Contributions) may always be
+  Distributed subject to the version of the Agreement under which it was
+  received. In addition, after a new version of the Agreement is published,
+  Contributor may elect to Distribute the Program (including its
+  Contributions) under the new version.
+
+  Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+  receives no rights or licenses to the intellectual property of any
+  Contributor under this Agreement, whether expressly, by implication,
+  estoppel or otherwise. All rights in the Program not expressly granted
+  under this Agreement are reserved. Nothing in this Agreement is intended
+  to be enforceable by any entity that is not a Contributor or Recipient.
+  No third-party beneficiary rights are created under this Agreement.
+
+  Exhibit A - Form of Secondary Licenses Notice
+
+  "This Source Code may also be made available under the following
+  Secondary Licenses when the conditions for such availability set forth
+  in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+  version(s), and exceptions or additional permissions here}."
+
+    Simply including a copy of this Agreement, including this Exhibit A
+    is not sufficient to license the Source Code under Secondary Licenses.
+
+    If it is not possible or desirable to put the notice in a particular
+    file, then You may include the notice in a location (such as a LICENSE
+    file in a relevant directory) where a recipient would be likely to
+    look for such a notice.
+
+    You may add additional accurate notices of copyright ownership.
+
+The complete text of the GNU General Public License v2 is as follows:
+
+          GNU GENERAL PUBLIC LICENSE
+             Version 2, June 1991
+
+   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                         59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   Everyone is permitted to copy and distribute verbatim copies
+   of this license document, but changing it is not allowed.
+
+            Preamble
+
+    The licenses for most software are designed to take away your
+  freedom to share and change it.  By contrast, the GNU General Public
+  License is intended to guarantee your freedom to share and change free
+  software--to make sure the software is free for all its users.  This
+  General Public License applies to most of the Free Software
+  Foundation's software and to any other program whose authors commit to
+  using it.  (Some other Free Software Foundation software is covered by
+  the GNU Library General Public License instead.)  You can apply it to
+  your programs, too.
+
+    When we speak of free software, we are referring to freedom, not
+  price.  Our General Public Licenses are designed to make sure that you
+  have the freedom to distribute copies of free software (and charge for
+  this service if you wish), that you receive source code or can get it
+  if you want it, that you can change the software or use pieces of it
+  in new free programs; and that you know you can do these things.
+
+    To protect your rights, we need to make restrictions that forbid
+  anyone to deny you these rights or to ask you to surrender the rights.
+  These restrictions translate to certain responsibilities for you if you
+  distribute copies of the software, or if you modify it.
+
+    For example, if you distribute copies of such a program, whether
+  gratis or for a fee, you must give the recipients all the rights that
+  you have.  You must make sure that they, too, receive or can get the
+  source code.  And you must show them these terms so they know their
+  rights.
+
+    We protect your rights with two steps: (1) copyright the software, and
+  (2) offer you this license which gives you legal permission to copy,
+  distribute and/or modify the software.
+
+    Also, for each author's protection and ours, we want to make certain
+  that everyone understands that there is no warranty for this free
+  software.  If the software is modified by someone else and passed on, we
+  want its recipients to know that what they have is not the original, so
+  that any problems introduced by others will not reflect on the original
+  authors' reputations.
+
+    Finally, any free program is threatened constantly by software
+  patents.  We wish to avoid the danger that redistributors of a free
+  program will individually obtain patent licenses, in effect making the
+  program proprietary.  To prevent this, we have made it clear that any
+  patent must be licensed for everyone's free use or not licensed at all.
+
+    The precise terms and conditions for copying, distribution and
+  modification follow.
+
+          GNU GENERAL PUBLIC LICENSE
+     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+    0. This License applies to any program or other work which contains
+  a notice placed by the copyright holder saying it may be distributed
+  under the terms of this General Public License.  The "Program", below,
+  refers to any such program or work, and a "work based on the Program"
+  means either the Program or any derivative work under copyright law:
+  that is to say, a work containing the Program or a portion of it,
+  either verbatim or with modifications and/or translated into another
+  language.  (Hereinafter, translation is included without limitation in
+  the term "modification".)  Each licensee is addressed as "you".
+
+  Activities other than copying, distribution and modification are not
+  covered by this License; they are outside its scope.  The act of
+  running the Program is not restricted, and the output from the Program
+  is covered only if its contents constitute a work based on the
+  Program (independent of having been made by running the Program).
+  Whether that is true depends on what the Program does.
+
+    1. You may copy and distribute verbatim copies of the Program's
+  source code as you receive it, in any medium, provided that you
+  conspicuously and appropriately publish on each copy an appropriate
+  copyright notice and disclaimer of warranty; keep intact all the
+  notices that refer to this License and to the absence of any warranty;
+  and give any other recipients of the Program a copy of this License
+  along with the Program.
+
+  You may charge a fee for the physical act of transferring a copy, and
+  you may at your option offer warranty protection in exchange for a fee.
+
+    2. You may modify your copy or copies of the Program or any portion
+  of it, thus forming a work based on the Program, and copy and
+  distribute such modifications or work under the terms of Section 1
+  above, provided that you also meet all of these conditions:
+
+      a) You must cause the modified files to carry prominent notices
+      stating that you changed the files and the date of any change.
+
+      b) You must cause any work that you distribute or publish, that in
+      whole or in part contains or is derived from the Program or any
+      part thereof, to be licensed as a whole at no charge to all third
+      parties under the terms of this License.
+
+      c) If the modified program normally reads commands interactively
+      when run, you must cause it, when started running for such
+      interactive use in the most ordinary way, to print or display an
+      announcement including an appropriate copyright notice and a
+      notice that there is no warranty (or else, saying that you provide
+      a warranty) and that users may redistribute the program under
+      these conditions, and telling the user how to view a copy of this
+      License.  (Exception: if the Program itself is interactive but
+      does not normally print such an announcement, your work based on
+      the Program is not required to print an announcement.)
+
+  These requirements apply to the modified work as a whole.  If
+  identifiable sections of that work are not derived from the Program,
+  and can be reasonably considered independent and separate works in
+  themselves, then this License, and its terms, do not apply to those
+  sections when you distribute them as separate works.  But when you
+  distribute the same sections as part of a whole which is a work based
+  on the Program, the distribution of the whole must be on the terms of
+  this License, whose permissions for other licensees extend to the
+  entire whole, and thus to each and every part regardless of who wrote it.
+
+  Thus, it is not the intent of this section to claim rights or contest
+  your rights to work written entirely by you; rather, the intent is to
+  exercise the right to control the distribution of derivative or
+  collective works based on the Program.
+
+  In addition, mere aggregation of another work not based on the Program
+  with the Program (or with a work based on the Program) on a volume of
+  a storage or distribution medium does not bring the other work under
+  the scope of this License.
+
+    3. You may copy and distribute the Program (or a work based on it,
+  under Section 2) in object code or executable form under the terms of
+  Sections 1 and 2 above provided that you also do one of the following:
+
+      a) Accompany it with the complete corresponding machine-readable
+      source code, which must be distributed under the terms of Sections
+      1 and 2 above on a medium customarily used for software interchange; or,
+
+      b) Accompany it with a written offer, valid for at least three
+      years, to give any third party, for a charge no more than your
+      cost of physically performing source distribution, a complete
+      machine-readable copy of the corresponding source code, to be
+      distributed under the terms of Sections 1 and 2 above on a medium
+      customarily used for software interchange; or,
+
+      c) Accompany it with the information you received as to the offer
+      to distribute corresponding source code.  (This alternative is
+      allowed only for noncommercial distribution and only if you
+      received the program in object code or executable form with such
+      an offer, in accord with Subsection b above.)
+
+  The source code for a work means the preferred form of the work for
+  making modifications to it.  For an executable work, complete source
+  code means all the source code for all modules it contains, plus any
+  associated interface definition files, plus the scripts used to
+  control compilation and installation of the executable.  However, as a
+  special exception, the source code distributed need not include
+  anything that is normally distributed (in either source or binary
+  form) with the major components (compiler, kernel, and so on) of the
+  operating system on which the executable runs, unless that component
+  itself accompanies the executable.
+
+  If distribution of executable or object code is made by offering
+  access to copy from a designated place, then offering equivalent
+  access to copy the source code from the same place counts as
+  distribution of the source code, even though third parties are not
+  compelled to copy the source along with the object code.
+
+    4. You may not copy, modify, sublicense, or distribute the Program
+  except as expressly provided under this License.  Any attempt
+  otherwise to copy, modify, sublicense or distribute the Program is
+  void, and will automatically terminate your rights under this License.
+  However, parties who have received copies, or rights, from you under
+  this License will not have their licenses terminated so long as such
+  parties remain in full compliance.
+
+    5. You are not required to accept this License, since you have not
+  signed it.  However, nothing else grants you permission to modify or
+  distribute the Program or its derivative works.  These actions are
+  prohibited by law if you do not accept this License.  Therefore, by
+  modifying or distributing the Program (or any work based on the
+  Program), you indicate your acceptance of this License to do so, and
+  all its terms and conditions for copying, distributing or modifying
+  the Program or works based on it.
+
+    6. Each time you redistribute the Program (or any work based on the
+  Program), the recipient automatically receives a license from the
+  original licensor to copy, distribute or modify the Program subject to
+  these terms and conditions.  You may not impose any further
+  restrictions on the recipients' exercise of the rights granted herein.
+  You are not responsible for enforcing compliance by third parties to
+  this License.
+
+    7. If, as a consequence of a court judgment or allegation of patent
+  infringement or for any other reason (not limited to patent issues),
+  conditions are imposed on you (whether by court order, agreement or
+  otherwise) that contradict the conditions of this License, they do not
+  excuse you from the conditions of this License.  If you cannot
+  distribute so as to satisfy simultaneously your obligations under this
+  License and any other pertinent obligations, then as a consequence you
+  may not distribute the Program at all.  For example, if a patent
+  license would not permit royalty-free redistribution of the Program by
+  all those who receive copies directly or indirectly through you, then
+  the only way you could satisfy both it and this License would be to
+  refrain entirely from distribution of the Program.
+
+  If any portion of this section is held invalid or unenforceable under
+  any particular circumstance, the balance of the section is intended to
+  apply and the section as a whole is intended to apply in other
+  circumstances.
+
+  It is not the purpose of this section to induce you to infringe any
+  patents or other property right claims or to contest validity of any
+  such claims; this section has the sole purpose of protecting the
+  integrity of the free software distribution system, which is
+  implemented by public license practices.  Many people have made
+  generous contributions to the wide range of software distributed
+  through that system in reliance on consistent application of that
+  system; it is up to the author/donor to decide if he or she is willing
+  to distribute software through any other system and a licensee cannot
+  impose that choice.
+
+  This section is intended to make thoroughly clear what is believed to
+  be a consequence of the rest of this License.
+
+    8. If the distribution and/or use of the Program is restricted in
+  certain countries either by patents or by copyrighted interfaces, the
+  original copyright holder who places the Program under this License
+  may add an explicit geographical distribution limitation excluding
+  those countries, so that distribution is permitted only in or among
+  countries not thus excluded.  In such case, this License incorporates
+  the limitation as if written in the body of this License.
+
+    9. The Free Software Foundation may publish revised and/or new versions
+  of the General Public License from time to time.  Such new versions will
+  be similar in spirit to the present version, but may differ in detail to
+  address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the Program
+  specifies a version number of this License which applies to it and "any
+  later version", you have the option of following the terms and conditions
+  either of that version or of any later version published by the Free
+  Software Foundation.  If the Program does not specify a version number of
+  this License, you may choose any version ever published by the Free Software
+  Foundation.
+
+    10. If you wish to incorporate parts of the Program into other free
+  programs whose distribution conditions are different, write to the author
+  to ask for permission.  For software which is copyrighted by the Free
+  Software Foundation, write to the Free Software Foundation; we sometimes
+  make exceptions for this.  Our decision will be guided by the two goals
+  of preserving the free status of all derivatives of our free software and
+  of promoting the sharing and reuse of software generally.
+
+            NO WARRANTY
+
+    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+  REPAIR OR CORRECTION.
+
+    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGES.
+
+           END OF TERMS AND CONDITIONS
+
+The complete text of the GNU Lesser General Public License 2.1 is as follows:
+
+        GNU LESSER GENERAL PUBLIC LICENSE
+             Version 2.1, February 1999
+
+   Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   Everyone is permitted to copy and distribute verbatim copies
+   of this license document, but changing it is not allowed.
+
+  [This is the first released version of the Lesser GPL.  It also counts
+   as the successor of the GNU Library Public License, version 2, hence
+   the version number 2.1.]
+
+            Preamble
+
+    The licenses for most software are designed to take away your
+  freedom to share and change it.  By contrast, the GNU General Public
+  Licenses are intended to guarantee your freedom to share and change
+  free software--to make sure the software is free for all its users.
+
+    This license, the Lesser General Public License, applies to some
+  specially designated software packages--typically libraries--of the
+  Free Software Foundation and other authors who decide to use it.  You
+  can use it too, but we suggest you first think carefully about whether
+  this license or the ordinary General Public License is the better
+  strategy to use in any particular case, based on the explanations below.
+
+    When we speak of free software, we are referring to freedom of use,
+  not price.  Our General Public Licenses are designed to make sure that
+  you have the freedom to distribute copies of free software (and charge
+  for this service if you wish); that you receive source code or can get
+  it if you want it; that you can change the software and use pieces of
+  it in new free programs; and that you are informed that you can do
+  these things.
+
+    To protect your rights, we need to make restrictions that forbid
+  distributors to deny you these rights or to ask you to surrender these
+  rights.  These restrictions translate to certain responsibilities for
+  you if you distribute copies of the library or if you modify it.
+
+    For example, if you distribute copies of the library, whether gratis
+  or for a fee, you must give the recipients all the rights that we gave
+  you.  You must make sure that they, too, receive or can get the source
+  code.  If you link other code with the library, you must provide
+  complete object files to the recipients, so that they can relink them
+  with the library after making changes to the library and recompiling
+  it.  And you must show them these terms so they know their rights.
+
+    We protect your rights with a two-step method: (1) we copyright the
+  library, and (2) we offer you this license, which gives you legal
+  permission to copy, distribute and/or modify the library.
+
+    To protect each distributor, we want to make it very clear that
+  there is no warranty for the free library.  Also, if the library is
+  modified by someone else and passed on, the recipients should know
+  that what they have is not the original version, so that the original
+  author's reputation will not be affected by problems that might be
+  introduced by others.
+
+    Finally, software patents pose a constant threat to the existence of
+  any free program.  We wish to make sure that a company cannot
+  effectively restrict the users of a free program by obtaining a
+  restrictive license from a patent holder.  Therefore, we insist that
+  any patent license obtained for a version of the library must be
+  consistent with the full freedom of use specified in this license.
+
+    Most GNU software, including some libraries, is covered by the
+  ordinary GNU General Public License.  This license, the GNU Lesser
+  General Public License, applies to certain designated libraries, and
+  is quite different from the ordinary General Public License.  We use
+  this license for certain libraries in order to permit linking those
+  libraries into non-free programs.
+
+    When a program is linked with a library, whether statically or using
+  a shared library, the combination of the two is legally speaking a
+  combined work, a derivative of the original library.  The ordinary
+  General Public License therefore permits such linking only if the
+  entire combination fits its criteria of freedom.  The Lesser General
+  Public License permits more lax criteria for linking other code with
+  the library.
+
+    We call this license the "Lesser" General Public License because it
+  does Less to protect the user's freedom than the ordinary General
+  Public License.  It also provides other free software developers Less
+  of an advantage over competing non-free programs.  These disadvantages
+  are the reason we use the ordinary General Public License for many
+  libraries.  However, the Lesser license provides advantages in certain
+  special circumstances.
+
+    For example, on rare occasions, there may be a special need to
+  encourage the widest possible use of a certain library, so that it becomes
+  a de-facto standard.  To achieve this, non-free programs must be
+  allowed to use the library.  A more frequent case is that a free
+  library does the same job as widely used non-free libraries.  In this
+  case, there is little to gain by limiting the free library to free
+  software only, so we use the Lesser General Public License.
+
+    In other cases, permission to use a particular library in non-free
+  programs enables a greater number of people to use a large body of
+  free software.  For example, permission to use the GNU C Library in
+  non-free programs enables many more people to use the whole GNU
+  operating system, as well as its variant, the GNU/Linux operating
+  system.
+
+    Although the Lesser General Public License is Less protective of the
+  users' freedom, it does ensure that the user of a program that is
+  linked with the Library has the freedom and the wherewithal to run
+  that program using a modified version of the Library.
+
+    The precise terms and conditions for copying, distribution and
+  modification follow.  Pay close attention to the difference between a
+  "work based on the library" and a "work that uses the library".  The
+  former contains code derived from the library, whereas the latter must
+  be combined with the library in order to run.
+
+        GNU LESSER GENERAL PUBLIC LICENSE
+     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+    0. This License Agreement applies to any software library or other
+  program which contains a notice placed by the copyright holder or
+  other authorized party saying it may be distributed under the terms of
+  this Lesser General Public License (also called "this License").
+  Each licensee is addressed as "you".
+
+    A "library" means a collection of software functions and/or data
+  prepared so as to be conveniently linked with application programs
+  (which use some of those functions and data) to form executables.
+
+    The "Library", below, refers to any such software library or work
+  which has been distributed under these terms.  A "work based on the
+  Library" means either the Library or any derivative work under
+  copyright law: that is to say, a work containing the Library or a
+  portion of it, either verbatim or with modifications and/or translated
+  straightforwardly into another language.  (Hereinafter, translation is
+  included without limitation in the term "modification".)
+
+    "Source code" for a work means the preferred form of the work for
+  making modifications to it.  For a library, complete source code means
+  all the source code for all modules it contains, plus any associated
+  interface definition files, plus the scripts used to control compilation
+  and installation of the library.
+
+    Activities other than copying, distribution and modification are not
+  covered by this License; they are outside its scope.  The act of
+  running a program using the Library is not restricted, and output from
+  such a program is covered only if its contents constitute a work based
+  on the Library (independent of the use of the Library in a tool for
+  writing it).  Whether that is true depends on what the Library does
+  and what the program that uses the Library does.
+  
+    1. You may copy and distribute verbatim copies of the Library's
+  complete source code as you receive it, in any medium, provided that
+  you conspicuously and appropriately publish on each copy an
+  appropriate copyright notice and disclaimer of warranty; keep intact
+  all the notices that refer to this License and to the absence of any
+  warranty; and distribute a copy of this License along with the
+  Library.
+
+    You may charge a fee for the physical act of transferring a copy,
+  and you may at your option offer warranty protection in exchange for a
+  fee.
+
+    2. You may modify your copy or copies of the Library or any portion
+  of it, thus forming a work based on the Library, and copy and
+  distribute such modifications or work under the terms of Section 1
+  above, provided that you also meet all of these conditions:
+
+      a) The modified work must itself be a software library.
+
+      b) You must cause the files modified to carry prominent notices
+      stating that you changed the files and the date of any change.
+
+      c) You must cause the whole of the work to be licensed at no
+      charge to all third parties under the terms of this License.
+
+      d) If a facility in the modified Library refers to a function or a
+      table of data to be supplied by an application program that uses
+      the facility, other than as an argument passed when the facility
+      is invoked, then you must make a good faith effort to ensure that,
+      in the event an application does not supply such function or
+      table, the facility still operates, and performs whatever part of
+      its purpose remains meaningful.
+
+      (For example, a function in a library to compute square roots has
+      a purpose that is entirely well-defined independent of the
+      application.  Therefore, Subsection 2d requires that any
+      application-supplied function or table used by this function must
+      be optional: if the application does not supply it, the square
+      root function must still compute square roots.)
+
+  These requirements apply to the modified work as a whole.  If
+  identifiable sections of that work are not derived from the Library,
+  and can be reasonably considered independent and separate works in
+  themselves, then this License, and its terms, do not apply to those
+  sections when you distribute them as separate works.  But when you
+  distribute the same sections as part of a whole which is a work based
+  on the Library, the distribution of the whole must be on the terms of
+  this License, whose permissions for other licensees extend to the
+  entire whole, and thus to each and every part regardless of who wrote
+  it.
+
+  Thus, it is not the intent of this section to claim rights or contest
+  your rights to work written entirely by you; rather, the intent is to
+  exercise the right to control the distribution of derivative or
+  collective works based on the Library.
+
+  In addition, mere aggregation of another work not based on the Library
+  with the Library (or with a work based on the Library) on a volume of
+  a storage or distribution medium does not bring the other work under
+  the scope of this License.
+
+    3. You may opt to apply the terms of the ordinary GNU General Public
+  License instead of this License to a given copy of the Library.  To do
+  this, you must alter all the notices that refer to this License, so
+  that they refer to the ordinary GNU General Public License, version 2,
+  instead of to this License.  (If a newer version than version 2 of the
+  ordinary GNU General Public License has appeared, then you can specify
+  that version instead if you wish.)  Do not make any other change in
+  these notices.
+
+    Once this change is made in a given copy, it is irreversible for
+  that copy, so the ordinary GNU General Public License applies to all
+  subsequent copies and derivative works made from that copy.
+
+    This option is useful when you wish to copy part of the code of
+  the Library into a program that is not a library.
+
+    4. You may copy and distribute the Library (or a portion or
+  derivative of it, under Section 2) in object code or executable form
+  under the terms of Sections 1 and 2 above provided that you accompany
+  it with the complete corresponding machine-readable source code, which
+  must be distributed under the terms of Sections 1 and 2 above on a
+  medium customarily used for software interchange.
+
+    If distribution of object code is made by offering access to copy
+  from a designated place, then offering equivalent access to copy the
+  source code from the same place satisfies the requirement to
+  distribute the source code, even though third parties are not
+  compelled to copy the source along with the object code.
+
+    5. A program that contains no derivative of any portion of the
+  Library, but is designed to work with the Library by being compiled or
+  linked with it, is called a "work that uses the Library".  Such a
+  work, in isolation, is not a derivative work of the Library, and
+  therefore falls outside the scope of this License.
+
+    However, linking a "work that uses the Library" with the Library
+  creates an executable that is a derivative of the Library (because it
+  contains portions of the Library), rather than a "work that uses the
+  library".  The executable is therefore covered by this License.
+  Section 6 states terms for distribution of such executables.
+
+    When a "work that uses the Library" uses material from a header file
+  that is part of the Library, the object code for the work may be a
+  derivative work of the Library even though the source code is not.
+  Whether this is true is especially significant if the work can be
+  linked without the Library, or if the work is itself a library.  The
+  threshold for this to be true is not precisely defined by law.
+
+    If such an object file uses only numerical parameters, data
+  structure layouts and accessors, and small macros and small inline
+  functions (ten lines or less in length), then the use of the object
+  file is unrestricted, regardless of whether it is legally a derivative
+  work.  (Executables containing this object code plus portions of the
+  Library will still fall under Section 6.)
+
+    Otherwise, if the work is a derivative of the Library, you may
+  distribute the object code for the work under the terms of Section 6.
+  Any executables containing that work also fall under Section 6,
+  whether or not they are linked directly with the Library itself.
+
+    6. As an exception to the Sections above, you may also combine or
+  link a "work that uses the Library" with the Library to produce a
+  work containing portions of the Library, and distribute that work
+  under terms of your choice, provided that the terms permit
+  modification of the work for the customer's own use and reverse
+  engineering for debugging such modifications.
+
+    You must give prominent notice with each copy of the work that the
+  Library is used in it and that the Library and its use are covered by
+  this License.  You must supply a copy of this License.  If the work
+  during execution displays copyright notices, you must include the
+  copyright notice for the Library among them, as well as a reference
+  directing the user to the copy of this License.  Also, you must do one
+  of these things:
+
+      a) Accompany the work with the complete corresponding
+      machine-readable source code for the Library including whatever
+      changes were used in the work (which must be distributed under
+      Sections 1 and 2 above); and, if the work is an executable linked
+      with the Library, with the complete machine-readable "work that
+      uses the Library", as object code and/or source code, so that the
+      user can modify the Library and then relink to produce a modified
+      executable containing the modified Library.  (It is understood
+      that the user who changes the contents of definitions files in the
+      Library will not necessarily be able to recompile the application
+      to use the modified definitions.)
+
+      b) Use a suitable shared library mechanism for linking with the
+      Library.  A suitable mechanism is one that (1) uses at run time a
+      copy of the library already present on the user's computer system,
+      rather than copying library functions into the executable, and (2)
+      will operate properly with a modified version of the library, if
+      the user installs one, as long as the modified version is
+      interface-compatible with the version that the work was made with.
+
+      c) Accompany the work with a written offer, valid for at
+      least three years, to give the same user the materials
+      specified in Subsection 6a, above, for a charge no more
+      than the cost of performing this distribution.
+
+      d) If distribution of the work is made by offering access to copy
+      from a designated place, offer equivalent access to copy the above
+      specified materials from the same place.
+
+      e) Verify that the user has already received a copy of these
+      materials or that you have already sent this user a copy.
+
+    For an executable, the required form of the "work that uses the
+  Library" must include any data and utility programs needed for
+  reproducing the executable from it.  However, as a special exception,
+  the materials to be distributed need not include anything that is
+  normally distributed (in either source or binary form) with the major
+  components (compiler, kernel, and so on) of the operating system on
+  which the executable runs, unless that component itself accompanies
+  the executable.
+
+    It may happen that this requirement contradicts the license
+  restrictions of other proprietary libraries that do not normally
+  accompany the operating system.  Such a contradiction means you cannot
+  use both them and the Library together in an executable that you
+  distribute.
+
+    7. You may place library facilities that are a work based on the
+  Library side-by-side in a single library together with other library
+  facilities not covered by this License, and distribute such a combined
+  library, provided that the separate distribution of the work based on
+  the Library and of the other library facilities is otherwise
+  permitted, and provided that you do these two things:
+
+      a) Accompany the combined library with a copy of the same work
+      based on the Library, uncombined with any other library
+      facilities.  This must be distributed under the terms of the
+      Sections above.
+
+      b) Give prominent notice with the combined library of the fact
+      that part of it is a work based on the Library, and explaining
+      where to find the accompanying uncombined form of the same work.
+
+    8. You may not copy, modify, sublicense, link with, or distribute
+  the Library except as expressly provided under this License.  Any
+  attempt otherwise to copy, modify, sublicense, link with, or
+  distribute the Library is void, and will automatically terminate your
+  rights under this License.  However, parties who have received copies,
+  or rights, from you under this License will not have their licenses
+  terminated so long as such parties remain in full compliance.
+
+    9. You are not required to accept this License, since you have not
+  signed it.  However, nothing else grants you permission to modify or
+  distribute the Library or its derivative works.  These actions are
+  prohibited by law if you do not accept this License.  Therefore, by
+  modifying or distributing the Library (or any work based on the
+  Library), you indicate your acceptance of this License to do so, and
+  all its terms and conditions for copying, distributing or modifying
+  the Library or works based on it.
+
+    10. Each time you redistribute the Library (or any work based on the
+  Library), the recipient automatically receives a license from the
+  original licensor to copy, distribute, link with or modify the Library
+  subject to these terms and conditions.  You may not impose any further
+  restrictions on the recipients' exercise of the rights granted herein.
+  You are not responsible for enforcing compliance by third parties with
+  this License.
+
+    11. If, as a consequence of a court judgment or allegation of patent
+  infringement or for any other reason (not limited to patent issues),
+  conditions are imposed on you (whether by court order, agreement or
+  otherwise) that contradict the conditions of this License, they do not
+  excuse you from the conditions of this License.  If you cannot
+  distribute so as to satisfy simultaneously your obligations under this
+  License and any other pertinent obligations, then as a consequence you
+  may not distribute the Library at all.  For example, if a patent
+  license would not permit royalty-free redistribution of the Library by
+  all those who receive copies directly or indirectly through you, then
+  the only way you could satisfy both it and this License would be to
+  refrain entirely from distribution of the Library.
+
+  If any portion of this section is held invalid or unenforceable under any
+  particular circumstance, the balance of the section is intended to apply,
+  and the section as a whole is intended to apply in other circumstances.
+
+  It is not the purpose of this section to induce you to infringe any
+  patents or other property right claims or to contest validity of any
+  such claims; this section has the sole purpose of protecting the
+  integrity of the free software distribution system which is
+  implemented by public license practices.  Many people have made
+  generous contributions to the wide range of software distributed
+  through that system in reliance on consistent application of that
+  system; it is up to the author/donor to decide if he or she is willing
+  to distribute software through any other system and a licensee cannot
+  impose that choice.
+
+  This section is intended to make thoroughly clear what is believed to
+  be a consequence of the rest of this License.
+
+    12. If the distribution and/or use of the Library is restricted in
+  certain countries either by patents or by copyrighted interfaces, the
+  original copyright holder who places the Library under this License may add
+  an explicit geographical distribution limitation excluding those countries,
+  so that distribution is permitted only in or among countries not thus
+  excluded.  In such case, this License incorporates the limitation as if
+  written in the body of this License.
+
+    13. The Free Software Foundation may publish revised and/or new
+  versions of the Lesser General Public License from time to time.
+  Such new versions will be similar in spirit to the present version,
+  but may differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the Library
+  specifies a version number of this License which applies to it and
+  "any later version", you have the option of following the terms and
+  conditions either of that version or of any later version published by
+  the Free Software Foundation.  If the Library does not specify a
+  license version number, you may choose any version ever published by
+  the Free Software Foundation.
+
+    14. If you wish to incorporate parts of the Library into other free
+  programs whose distribution conditions are incompatible with these,
+  write to the author to ask for permission.  For software which is
+  copyrighted by the Free Software Foundation, write to the Free
+  Software Foundation; we sometimes make exceptions for this.  Our
+  decision will be guided by the two goals of preserving the free status
+  of all derivatives of our free software and of promoting the sharing
+  and reuse of software generally.
+
+            NO WARRANTY
+
+    15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+  WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+  OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+  PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+  LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+  THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+    16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+  WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+  AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+  FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+  CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+  LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+  RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+  FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+  SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGES.
+
+           END OF TERMS AND CONDITIONS
+
+             How to Apply These Terms to Your New Libraries
+
+    If you develop a new library, and you want it to be of the greatest
+  possible use to the public, we recommend making it free software that
+  everyone can redistribute and change.  You can do so by permitting
+  redistribution under these terms (or, alternatively, under the terms of the
+  ordinary General Public License).
+
+    To apply these terms, attach the following notices to the library.  It is
+  safest to attach them to the start of each source file to most effectively
+  convey the exclusion of warranty; and each file should have at least the
+  "copyright" line and a pointer to where the full notice is found.
+
+      <one line to give the library's name and a brief idea of what it does.>
+      Copyright (C) <year>  <name of author>
+
+      This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.
+
+      This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.
+
+      You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+  Also add information on how to contact you by electronic and paper mail.
+
+  You should also get your employer (if you work as a programmer) or your
+  school, if any, to sign a "copyright disclaimer" for the library, if
+  necessary.  Here is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the
+    library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+    <signature of Ty Coon>, 1 April 1990
+    Ty Coon, President of Vice
+
+  That's all there is to it!
+
+The following licenses cover code other than JRuby which is included with JRuby.
+
+Licenses listed below include:
+
+* GNU General Public License version 3
+* Apache 2.0 License
+* BSD License
+* MIT License
+
+The complete text of the GNU General Public License version 3 is as follows:
+
+          GNU GENERAL PUBLIC LICENSE
+             Version 3, 29 June 2007
+
+   Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+   Everyone is permitted to copy and distribute verbatim copies
+   of this license document, but changing it is not allowed.
+
+            Preamble
+
+    The GNU General Public License is a free, copyleft license for
+  software and other kinds of works.
+
+    The licenses for most software and other practical works are designed
+  to take away your freedom to share and change the works.  By contrast,
+  the GNU General Public License is intended to guarantee your freedom to
+  share and change all versions of a program--to make sure it remains free
+  software for all its users.  We, the Free Software Foundation, use the
+  GNU General Public License for most of our software; it applies also to
+  any other work released this way by its authors.  You can apply it to
+  your programs, too.
+
+    When we speak of free software, we are referring to freedom, not
+  price.  Our General Public Licenses are designed to make sure that you
+  have the freedom to distribute copies of free software (and charge for
+  them if you wish), that you receive source code or can get it if you
+  want it, that you can change the software or use pieces of it in new
+  free programs, and that you know you can do these things.
+
+    To protect your rights, we need to prevent others from denying you
+  these rights or asking you to surrender the rights.  Therefore, you have
+  certain responsibilities if you distribute copies of the software, or if
+  you modify it: responsibilities to respect the freedom of others.
+
+    For example, if you distribute copies of such a program, whether
+  gratis or for a fee, you must pass on to the recipients the same
+  freedoms that you received.  You must make sure that they, too, receive
+  or can get the source code.  And you must show them these terms so they
+  know their rights.
+
+    Developers that use the GNU GPL protect your rights with two steps:
+  (1) assert copyright on the software, and (2) offer you this License
+  giving you legal permission to copy, distribute and/or modify it.
+
+    For the developers' and authors' protection, the GPL clearly explains
+  that there is no warranty for this free software.  For both users' and
+  authors' sake, the GPL requires that modified versions be marked as
+  changed, so that their problems will not be attributed erroneously to
+  authors of previous versions.
+
+    Some devices are designed to deny users access to install or run
+  modified versions of the software inside them, although the manufacturer
+  can do so.  This is fundamentally incompatible with the aim of
+  protecting users' freedom to change the software.  The systematic
+  pattern of such abuse occurs in the area of products for individuals to
+  use, which is precisely where it is most unacceptable.  Therefore, we
+  have designed this version of the GPL to prohibit the practice for those
+  products.  If such problems arise substantially in other domains, we
+  stand ready to extend this provision to those domains in future versions
+  of the GPL, as needed to protect the freedom of users.
+
+    Finally, every program is threatened constantly by software patents.
+  States should not allow patents to restrict development and use of
+  software on general-purpose computers, but in those that do, we wish to
+  avoid the special danger that patents applied to a free program could
+  make it effectively proprietary.  To prevent this, the GPL assures that
+  patents cannot be used to render the program non-free.
+
+    The precise terms and conditions for copying, distribution and
+  modification follow.
+
+             TERMS AND CONDITIONS
+
+    0. Definitions.
+
+    "This License" refers to version 3 of the GNU General Public License.
+
+    "Copyright" also means copyright-like laws that apply to other kinds of
+  works, such as semiconductor masks.
+ 
+    "The Program" refers to any copyrightable work licensed under this
+  License.  Each licensee is addressed as "you".  "Licensees" and
+  "recipients" may be individuals or organizations.
+
+    To "modify" a work means to copy from or adapt all or part of the work
+  in a fashion requiring copyright permission, other than the making of an
+  exact copy.  The resulting work is called a "modified version" of the
+  earlier work or a work "based on" the earlier work.
+
+    A "covered work" means either the unmodified Program or a work based
+  on the Program.
+
+    To "propagate" a work means to do anything with it that, without
+  permission, would make you directly or secondarily liable for
+  infringement under applicable copyright law, except executing it on a
+  computer or modifying a private copy.  Propagation includes copying,
+  distribution (with or without modification), making available to the
+  public, and in some countries other activities as well.
+
+    To "convey" a work means any kind of propagation that enables other
+  parties to make or receive copies.  Mere interaction with a user through
+  a computer network, with no transfer of a copy, is not conveying.
+
+    An interactive user interface displays "Appropriate Legal Notices"
+  to the extent that it includes a convenient and prominently visible
+  feature that (1) displays an appropriate copyright notice, and (2)
+  tells the user that there is no warranty for the work (except to the
+  extent that warranties are provided), that licensees may convey the
+  work under this License, and how to view a copy of this License.  If
+  the interface presents a list of user commands or options, such as a
+  menu, a prominent item in the list meets this criterion.
+
+    1. Source Code.
+
+    The "source code" for a work means the preferred form of the work
+  for making modifications to it.  "Object code" means any non-source
+  form of a work.
+
+    A "Standard Interface" means an interface that either is an official
+  standard defined by a recognized standards body, or, in the case of
+  interfaces specified for a particular programming language, one that
+  is widely used among developers working in that language.
+
+    The "System Libraries" of an executable work include anything, other
+  than the work as a whole, that (a) is included in the normal form of
+  packaging a Major Component, but which is not part of that Major
+  Component, and (b) serves only to enable use of the work with that
+  Major Component, or to implement a Standard Interface for which an
+  implementation is available to the public in source code form.  A
+  "Major Component", in this context, means a major essential component
+  (kernel, window system, and so on) of the specific operating system
+  (if any) on which the executable work runs, or a compiler used to
+  produce the work, or an object code interpreter used to run it.
+
+    The "Corresponding Source" for a work in object code form means all
+  the source code needed to generate, install, and (for an executable
+  work) run the object code and to modify the work, including scripts to
+  control those activities.  However, it does not include the work's
+  System Libraries, or general-purpose tools or generally available free
+  programs which are used unmodified in performing those activities but
+  which are not part of the work.  For example, Corresponding Source
+  includes interface definition files associated with source files for
+  the work, and the source code for shared libraries and dynamically
+  linked subprograms that the work is specifically designed to require,
+  such as by intimate data communication or control flow between those
+  subprograms and other parts of the work.
+
+    The Corresponding Source need not include anything that users
+  can regenerate automatically from other parts of the Corresponding
+  Source.
+
+    The Corresponding Source for a work in source code form is that
+  same work.
+
+    2. Basic Permissions.
+
+    All rights granted under this License are granted for the term of
+  copyright on the Program, and are irrevocable provided the stated
+  conditions are met.  This License explicitly affirms your unlimited
+  permission to run the unmodified Program.  The output from running a
+  covered work is covered by this License only if the output, given its
+  content, constitutes a covered work.  This License acknowledges your
+  rights of fair use or other equivalent, as provided by copyright law.
+
+    You may make, run and propagate covered works that you do not
+  convey, without conditions so long as your license otherwise remains
+  in force.  You may convey covered works to others for the sole purpose
+  of having them make modifications exclusively for you, or provide you
+  with facilities for running those works, provided that you comply with
+  the terms of this License in conveying all material for which you do
+  not control copyright.  Those thus making or running the covered works
+  for you must do so exclusively on your behalf, under your direction
+  and control, on terms that prohibit them from making any copies of
+  your copyrighted material outside their relationship with you.
+
+    Conveying under any other circumstances is permitted solely under
+  the conditions stated below.  Sublicensing is not allowed; section 10
+  makes it unnecessary.
+
+    3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+    No covered work shall be deemed part of an effective technological
+  measure under any applicable law fulfilling obligations under article
+  11 of the WIPO copyright treaty adopted on 20 December 1996, or
+  similar laws prohibiting or restricting circumvention of such
+  measures.
+
+    When you convey a covered work, you waive any legal power to forbid
+  circumvention of technological measures to the extent such circumvention
+  is effected by exercising rights under this License with respect to
+  the covered work, and you disclaim any intention to limit operation or
+  modification of the work as a means of enforcing, against the work's
+  users, your or third parties' legal rights to forbid circumvention of
+  technological measures.
+
+    4. Conveying Verbatim Copies.
+
+    You may convey verbatim copies of the Program's source code as you
+  receive it, in any medium, provided that you conspicuously and
+  appropriately publish on each copy an appropriate copyright notice;
+  keep intact all notices stating that this License and any
+  non-permissive terms added in accord with section 7 apply to the code;
+  keep intact all notices of the absence of any warranty; and give all
+  recipients a copy of this License along with the Program.
+
+    You may charge any price or no price for each copy that you convey,
+  and you may offer support or warranty protection for a fee.
+
+    5. Conveying Modified Source Versions.
+
+    You may convey a work based on the Program, or the modifications to
+  produce it from the Program, in the form of source code under the
+  terms of section 4, provided that you also meet all of these conditions:
+
+      a) The work must carry prominent notices stating that you modified
+      it, and giving a relevant date.
+
+      b) The work must carry prominent notices stating that it is
+      released under this License and any conditions added under section
+      7.  This requirement modifies the requirement in section 4 to
+      "keep intact all notices".
+
+      c) You must license the entire work, as a whole, under this
+      License to anyone who comes into possession of a copy.  This
+      License will therefore apply, along with any applicable section 7
+      additional terms, to the whole of the work, and all its parts,
+      regardless of how they are packaged.  This License gives no
+      permission to license the work in any other way, but it does not
+      invalidate such permission if you have separately received it.
+
+      d) If the work has interactive user interfaces, each must display
+      Appropriate Legal Notices; however, if the Program has interactive
+      interfaces that do not display Appropriate Legal Notices, your
+      work need not make them do so.
+
+    A compilation of a covered work with other separate and independent
+  works, which are not by their nature extensions of the covered work,
+  and which are not combined with it such as to form a larger program,
+  in or on a volume of a storage or distribution medium, is called an
+  "aggregate" if the compilation and its resulting copyright are not
+  used to limit the access or legal rights of the compilation's users
+  beyond what the individual works permit.  Inclusion of a covered work
+  in an aggregate does not cause this License to apply to the other
+  parts of the aggregate.
+
+    6. Conveying Non-Source Forms.
+
+    You may convey a covered work in object code form under the terms
+  of sections 4 and 5, provided that you also convey the
+  machine-readable Corresponding Source under the terms of this License,
+  in one of these ways:
+
+      a) Convey the object code in, or embodied in, a physical product
+      (including a physical distribution medium), accompanied by the
+      Corresponding Source fixed on a durable physical medium
+      customarily used for software interchange.
+
+      b) Convey the object code in, or embodied in, a physical product
+      (including a physical distribution medium), accompanied by a
+      written offer, valid for at least three years and valid for as
+      long as you offer spare parts or customer support for that product
+      model, to give anyone who possesses the object code either (1) a
+      copy of the Corresponding Source for all the software in the
+      product that is covered by this License, on a durable physical
+      medium customarily used for software interchange, for a price no
+      more than your reasonable cost of physically performing this
+      conveying of source, or (2) access to copy the
+      Corresponding Source from a network server at no charge.
+
+      c) Convey individual copies of the object code with a copy of the
+      written offer to provide the Corresponding Source.  This
+      alternative is allowed only occasionally and noncommercially, and
+      only if you received the object code with such an offer, in accord
+      with subsection 6b.
+
+      d) Convey the object code by offering access from a designated
+      place (gratis or for a charge), and offer equivalent access to the
+      Corresponding Source in the same way through the same place at no
+      further charge.  You need not require recipients to copy the
+      Corresponding Source along with the object code.  If the place to
+      copy the object code is a network server, the Corresponding Source
+      may be on a different server (operated by you or a third party)
+      that supports equivalent copying facilities, provided you maintain
+      clear directions next to the object code saying where to find the
+      Corresponding Source.  Regardless of what server hosts the
+      Corresponding Source, you remain obligated to ensure that it is
+      available for as long as needed to satisfy these requirements.
+
+      e) Convey the object code using peer-to-peer transmission, provided
+      you inform other peers where the object code and Corresponding
+      Source of the work are being offered to the general public at no
+      charge under subsection 6d.
+
+    A separable portion of the object code, whose source code is excluded
+  from the Corresponding Source as a System Library, need not be
+  included in conveying the object code work.
+
+    A "User Product" is either (1) a "consumer product", which means any
+  tangible personal property which is normally used for personal, family,
+  or household purposes, or (2) anything designed or sold for incorporation
+  into a dwelling.  In determining whether a product is a consumer product,
+  doubtful cases shall be resolved in favor of coverage.  For a particular
+  product received by a particular user, "normally used" refers to a
+  typical or common use of that class of product, regardless of the status
+  of the particular user or of the way in which the particular user
+  actually uses, or expects or is expected to use, the product.  A product
+  is a consumer product regardless of whether the product has substantial
+  commercial, industrial or non-consumer uses, unless such uses represent
+  the only significant mode of use of the product.
+
+    "Installation Information" for a User Product means any methods,
+  procedures, authorization keys, or other information required to install
+  and execute modified versions of a covered work in that User Product from
+  a modified version of its Corresponding Source.  The information must
+  suffice to ensure that the continued functioning of the modified object
+  code is in no case prevented or interfered with solely because
+  modification has been made.
+
+    If you convey an object code work under this section in, or with, or
+  specifically for use in, a User Product, and the conveying occurs as
+  part of a transaction in which the right of possession and use of the
+  User Product is transferred to the recipient in perpetuity or for a
+  fixed term (regardless of how the transaction is characterized), the
+  Corresponding Source conveyed under this section must be accompanied
+  by the Installation Information.  But this requirement does not apply
+  if neither you nor any third party retains the ability to install
+  modified object code on the User Product (for example, the work has
+  been installed in ROM).
+
+    The requirement to provide Installation Information does not include a
+  requirement to continue to provide support service, warranty, or updates
+  for a work that has been modified or installed by the recipient, or for
+  the User Product in which it has been modified or installed.  Access to a
+  network may be denied when the modification itself materially and
+  adversely affects the operation of the network or violates the rules and
+  protocols for communication across the network.
+
+    Corresponding Source conveyed, and Installation Information provided,
+  in accord with this section must be in a format that is publicly
+  documented (and with an implementation available to the public in
+  source code form), and must require no special password or key for
+  unpacking, reading or copying.
+
+    7. Additional Terms.
+
+    "Additional permissions" are terms that supplement the terms of this
+  License by making exceptions from one or more of its conditions.
+  Additional permissions that are applicable to the entire Program shall
+  be treated as though they were included in this License, to the extent
+  that they are valid under applicable law.  If additional permissions
+  apply only to part of the Program, that part may be used separately
+  under those permissions, but the entire Program remains governed by
+  this License without regard to the additional permissions.
+
+    When you convey a copy of a covered work, you may at your option
+  remove any additional permissions from that copy, or from any part of
+  it.  (Additional permissions may be written to require their own
+  removal in certain cases when you modify the work.)  You may place
+  additional permissions on material, added by you to a covered work,
+  for which you have or can give appropriate copyright permission.
+
+    Notwithstanding any other provision of this License, for material you
+  add to a covered work, you may (if authorized by the copyright holders of
+  that material) supplement the terms of this License with terms:
+
+      a) Disclaiming warranty or limiting liability differently from the
+      terms of sections 15 and 16 of this License; or
+
+      b) Requiring preservation of specified reasonable legal notices or
+      author attributions in that material or in the Appropriate Legal
+      Notices displayed by works containing it; or
+
+      c) Prohibiting misrepresentation of the origin of that material, or
+      requiring that modified versions of such material be marked in
+      reasonable ways as different from the original version; or
+
+      d) Limiting the use for publicity purposes of names of licensors or
+      authors of the material; or
+
+      e) Declining to grant rights under trademark law for use of some
+      trade names, trademarks, or service marks; or
+
+      f) Requiring indemnification of licensors and authors of that
+      material by anyone who conveys the material (or modified versions of
+      it) with contractual assumptions of liability to the recipient, for
+      any liability that these contractual assumptions directly impose on
+      those licensors and authors.
+
+    All other non-permissive additional terms are considered "further
+  restrictions" within the meaning of section 10.  If the Program as you
+  received it, or any part of it, contains a notice stating that it is
+  governed by this License along with a term that is a further
+  restriction, you may remove that term.  If a license document contains
+  a further restriction but permits relicensing or conveying under this
+  License, you may add to a covered work material governed by the terms
+  of that license document, provided that the further restriction does
+  not survive such relicensing or conveying.
+
+    If you add terms to a covered work in accord with this section, you
+  must place, in the relevant source files, a statement of the
+  additional terms that apply to those files, or a notice indicating
+  where to find the applicable terms.
+
+    Additional terms, permissive or non-permissive, may be stated in the
+  form of a separately written license, or stated as exceptions;
+  the above requirements apply either way.
+
+    8. Termination.
+
+    You may not propagate or modify a covered work except as expressly
+  provided under this License.  Any attempt otherwise to propagate or
+  modify it is void, and will automatically terminate your rights under
+  this License (including any patent licenses granted under the third
+  paragraph of section 11).
+
+    However, if you cease all violation of this License, then your
+  license from a particular copyright holder is reinstated (a)
+  provisionally, unless and until the copyright holder explicitly and
+  finally terminates your license, and (b) permanently, if the copyright
+  holder fails to notify you of the violation by some reasonable means
+  prior to 60 days after the cessation.
+
+    Moreover, your license from a particular copyright holder is
+  reinstated permanently if the copyright holder notifies you of the
+  violation by some reasonable means, this is the first time you have
+  received notice of violation of this License (for any work) from that
+  copyright holder, and you cure the violation prior to 30 days after
+  your receipt of the notice.
+
+    Termination of your rights under this section does not terminate the
+  licenses of parties who have received copies or rights from you under
+  this License.  If your rights have been terminated and not permanently
+  reinstated, you do not qualify to receive new licenses for the same
+  material under section 10.
+
+    9. Acceptance Not Required for Having Copies.
+
+    You are not required to accept this License in order to receive or
+  run a copy of the Program.  Ancillary propagation of a covered work
+  occurring solely as a consequence of using peer-to-peer transmission
+  to receive a copy likewise does not require acceptance.  However,
+  nothing other than this License grants you permission to propagate or
+  modify any covered work.  These actions infringe copyright if you do
+  not accept this License.  Therefore, by modifying or propagating a
+  covered work, you indicate your acceptance of this License to do so.
+
+    10. Automatic Licensing of Downstream Recipients.
+
+    Each time you convey a covered work, the recipient automatically
+  receives a license from the original licensors, to run, modify and
+  propagate that work, subject to this License.  You are not responsible
+  for enforcing compliance by third parties with this License.
+
+    An "entity transaction" is a transaction transferring control of an
+  organization, or substantially all assets of one, or subdividing an
+  organization, or merging organizations.  If propagation of a covered
+  work results from an entity transaction, each party to that
+  transaction who receives a copy of the work also receives whatever
+  licenses to the work the party's predecessor in interest had or could
+  give under the previous paragraph, plus a right to possession of the
+  Corresponding Source of the work from the predecessor in interest, if
+  the predecessor has it or can get it with reasonable efforts.
+
+    You may not impose any further restrictions on the exercise of the
+  rights granted or affirmed under this License.  For example, you may
+  not impose a license fee, royalty, or other charge for exercise of
+  rights granted under this License, and you may not initiate litigation
+  (including a cross-claim or counterclaim in a lawsuit) alleging that
+  any patent claim is infringed by making, using, selling, offering for
+  sale, or importing the Program or any portion of it.
+
+    11. Patents.
+
+    A "contributor" is a copyright holder who authorizes use under this
+  License of the Program or a work on which the Program is based.  The
+  work thus licensed is called the contributor's "contributor version".
+
+    A contributor's "essential patent claims" are all patent claims
+  owned or controlled by the contributor, whether already acquired or
+  hereafter acquired, that would be infringed by some manner, permitted
+  by this License, of making, using, or selling its contributor version,
+  but do not include claims that would be infringed only as a
+  consequence of further modification of the contributor version.  For
+  purposes of this definition, "control" includes the right to grant
+  patent sublicenses in a manner consistent with the requirements of
+  this License.
+
+    Each contributor grants you a non-exclusive, worldwide, royalty-free
+  patent license under the contributor's essential patent claims, to
+  make, use, sell, offer for sale, import and otherwise run, modify and
+  propagate the contents of its contributor version.
+
+    In the following three paragraphs, a "patent license" is any express
+  agreement or commitment, however denominated, not to enforce a patent
+  (such as an express permission to practice a patent or covenant not to
+  sue for patent infringement).  To "grant" such a patent license to a
+  party means to make such an agreement or commitment not to enforce a
+  patent against the party.
+
+    If you convey a covered work, knowingly relying on a patent license,
+  and the Corresponding Source of the work is not available for anyone
+  to copy, free of charge and under the terms of this License, through a
+  publicly available network server or other readily accessible means,
+  then you must either (1) cause the Corresponding Source to be so
+  available, or (2) arrange to deprive yourself of the benefit of the
+  patent license for this particular work, or (3) arrange, in a manner
+  consistent with the requirements of this License, to extend the patent
+  license to downstream recipients.  "Knowingly relying" means you have
+  actual knowledge that, but for the patent license, your conveying the
+  covered work in a country, or your recipient's use of the covered work
+  in a country, would infringe one or more identifiable patents in that
+  country that you have reason to believe are valid.
+  
+    If, pursuant to or in connection with a single transaction or
+  arrangement, you convey, or propagate by procuring conveyance of, a
+  covered work, and grant a patent license to some of the parties
+  receiving the covered work authorizing them to use, propagate, modify
+  or convey a specific copy of the covered work, then the patent license
+  you grant is automatically extended to all recipients of the covered
+  work and works based on it.
+
+    A patent license is "discriminatory" if it does not include within
+  the scope of its coverage, prohibits the exercise of, or is
+  conditioned on the non-exercise of one or more of the rights that are
+  specifically granted under this License.  You may not convey a covered
+  work if you are a party to an arrangement with a third party that is
+  in the business of distributing software, under which you make payment
+  to the third party based on the extent of your activity of conveying
+  the work, and under which the third party grants, to any of the
+  parties who would receive the covered work from you, a discriminatory
+  patent license (a) in connection with copies of the covered work
+  conveyed by you (or copies made from those copies), or (b) primarily
+  for and in connection with specific products or compilations that
+  contain the covered work, unless you entered into that arrangement,
+  or that patent license was granted, prior to 28 March 2007.
+
+    Nothing in this License shall be construed as excluding or limiting
+  any implied license or other defenses to infringement that may
+  otherwise be available to you under applicable patent law.
+
+    12. No Surrender of Others' Freedom.
+
+    If conditions are imposed on you (whether by court order, agreement or
+  otherwise) that contradict the conditions of this License, they do not
+  excuse you from the conditions of this License.  If you cannot convey a
+  covered work so as to satisfy simultaneously your obligations under this
+  License and any other pertinent obligations, then as a consequence you may
+  not convey it at all.  For example, if you agree to terms that obligate you
+  to collect a royalty for further conveying from those to whom you convey
+  the Program, the only way you could satisfy both those terms and this
+  License would be to refrain entirely from conveying the Program.
+
+    13. Use with the GNU Affero General Public License.
+
+    Notwithstanding any other provision of this License, you have
+  permission to link or combine any covered work with a work licensed
+  under version 3 of the GNU Affero General Public License into a single
+  combined work, and to convey the resulting work.  The terms of this
+  License will continue to apply to the part which is the covered work,
+  but the special requirements of the GNU Affero General Public License,
+  section 13, concerning interaction through a network will apply to the
+  combination as such.
+
+    14. Revised Versions of this License.
+
+    The Free Software Foundation may publish revised and/or new versions of
+  the GNU General Public License from time to time.  Such new versions will
+  be similar in spirit to the present version, but may differ in detail to
+  address new problems or concerns.
+
+    Each version is given a distinguishing version number.  If the
+  Program specifies that a certain numbered version of the GNU General
+  Public License "or any later version" applies to it, you have the
+  option of following the terms and conditions either of that numbered
+  version or of any later version published by the Free Software
+  Foundation.  If the Program does not specify a version number of the
+  GNU General Public License, you may choose any version ever published
+  by the Free Software Foundation.
+
+    If the Program specifies that a proxy can decide which future
+  versions of the GNU General Public License can be used, that proxy's
+  public statement of acceptance of a version permanently authorizes you
+  to choose that version for the Program.
+
+    Later license versions may give you additional or different
+  permissions.  However, no additional obligations are imposed on any
+  author or copyright holder as a result of your choosing to follow a
+  later version.
+
+    15. Disclaimer of Warranty.
+
+    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+  APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+  HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+  OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+  PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+  IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+  ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+    16. Limitation of Liability.
+
+    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+  THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+  GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+  USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+  DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+  PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+  EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGES.
+
+    17. Interpretation of Sections 15 and 16.
+
+    If the disclaimer of warranty and limitation of liability provided
+  above cannot be given local legal effect according to their terms,
+  reviewing courts shall apply local law that most closely approximates
+  an absolute waiver of all civil liability in connection with the
+  Program, unless a warranty or assumption of liability accompanies a
+  copy of the Program in return for a fee.
+
+           END OF TERMS AND CONDITIONS
+
+        How to Apply These Terms to Your New Programs
+
+    If you develop a new program, and you want it to be of the greatest
+  possible use to the public, the best way to achieve this is to make it
+  free software which everyone can redistribute and change under these terms.
+
+    To do so, attach the following notices to the program.  It is safest
+  to attach them to the start of each source file to most effectively
+  state the exclusion of warranty; and each file should have at least
+  the "copyright" line and a pointer to where the full notice is found.
+
+      <one line to give the program's name and a brief idea of what it does.>
+      Copyright (C) <year>  <name of author>
+
+      This program is free software: you can redistribute it and/or modify
+      it under the terms of the GNU General Public License as published by
+      the Free Software Foundation, either version 3 of the License, or
+      (at your option) any later version.
+
+      This program is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      GNU General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  Also add information on how to contact you by electronic and paper mail.
+
+    If the program does terminal interaction, make it output a short
+  notice like this when it starts in an interactive mode:
+
+      <program>  Copyright (C) <year>  <name of author>
+      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+      This is free software, and you are welcome to redistribute it
+      under certain conditions; type `show c' for details.
+
+  The hypothetical commands `show w' and `show c' should show the appropriate
+  parts of the General Public License.  Of course, your program's commands
+  might be different; for a GUI interface, you would use an "about box".
+
+    You should also get your employer (if you work as a programmer) or school,
+  if any, to sign a "copyright disclaimer" for the program, if necessary.
+  For more information on this, and how to apply and follow the GNU GPL, see
+  <http://www.gnu.org/licenses/>.
+
+    The GNU General Public License does not permit incorporating your program
+  into proprietary programs.  If your program is a subroutine library, you
+  may consider it more useful to permit linking proprietary applications with
+  the library.  If this is what you want to do, use the GNU Lesser General
+  Public License instead of this License.  But first, please read
+  <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+The complete text of the Apache 2.0 License is as follows:
+
+                                Apache License
+                          Version 2.0, January 2004
+                       http://www.apache.org/licenses/
+
+  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+  1. Definitions.
+
+     "License" shall mean the terms and conditions for use, reproduction,
+     and distribution as defined by Sections 1 through 9 of this document.
+
+     "Licensor" shall mean the copyright owner or entity authorized by
+     the copyright owner that is granting the License.
+
+     "Legal Entity" shall mean the union of the acting entity and all
+     other entities that control, are controlled by, or are under common
+     control with that entity. For the purposes of this definition,
+     "control" means (i) the power, direct or indirect, to cause the
+     direction or management of such entity, whether by contract or
+     otherwise, or (ii) ownership of fifty percent (50%) or more of the
+     outstanding shares, or (iii) beneficial ownership of such entity.
+
+     "You" (or "Your") shall mean an individual or Legal Entity
+     exercising permissions granted by this License.
+
+     "Source" form shall mean the preferred form for making modifications,
+     including but not limited to software source code, documentation
+     source, and configuration files.
+
+     "Object" form shall mean any form resulting from mechanical
+     transformation or translation of a Source form, including but
+     not limited to compiled object code, generated documentation,
+     and conversions to other media types.
+
+     "Work" shall mean the work of authorship, whether in Source or
+     Object form, made available under the License, as indicated by a
+     copyright notice that is included in or attached to the work
+     (an example is provided in the Appendix below).
+
+     "Derivative Works" shall mean any work, whether in Source or Object
+     form, that is based on (or derived from) the Work and for which the
+     editorial revisions, annotations, elaborations, or other modifications
+     represent, as a whole, an original work of authorship. For the purposes
+     of this License, Derivative Works shall not include works that remain
+     separable from, or merely link (or bind by name) to the interfaces of,
+     the Work and Derivative Works thereof.
+
+     "Contribution" shall mean any work of authorship, including
+     the original version of the Work and any modifications or additions
+     to that Work or Derivative Works thereof, that is intentionally
+     submitted to Licensor for inclusion in the Work by the copyright owner
+     or by an individual or Legal Entity authorized to submit on behalf of
+     the copyright owner. For the purposes of this definition, "submitted"
+     means any form of electronic, verbal, or written communication sent
+     to the Licensor or its representatives, including but not limited to
+     communication on electronic mailing lists, source code control systems,
+     and issue tracking systems that are managed by, or on behalf of, the
+     Licensor for the purpose of discussing and improving the Work, but
+     excluding communication that is conspicuously marked or otherwise
+     designated in writing by the copyright owner as "Not a Contribution."
+
+     "Contributor" shall mean Licensor and any individual or Legal Entity
+     on behalf of whom a Contribution has been received by Licensor and
+     subsequently incorporated within the Work.
+
+  2. Grant of Copyright License. Subject to the terms and conditions of
+     this License, each Contributor hereby grants to You a perpetual,
+     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+     copyright license to reproduce, prepare Derivative Works of,
+     publicly display, publicly perform, sublicense, and distribute the
+     Work and such Derivative Works in Source or Object form.
+
+  3. Grant of Patent License. Subject to the terms and conditions of
+     this License, each Contributor hereby grants to You a perpetual,
+     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+     (except as stated in this section) patent license to make, have made,
+     use, offer to sell, sell, import, and otherwise transfer the Work,
+     where such license applies only to those patent claims licensable
+     by such Contributor that are necessarily infringed by their
+     Contribution(s) alone or by combination of their Contribution(s)
+     with the Work to which such Contribution(s) was submitted. If You
+     institute patent litigation against any entity (including a
+     cross-claim or counterclaim in a lawsuit) alleging that the Work
+     or a Contribution incorporated within the Work constitutes direct
+     or contributory patent infringement, then any patent licenses
+     granted to You under this License for that Work shall terminate
+     as of the date such litigation is filed.
+
+  4. Redistribution. You may reproduce and distribute copies of the
+     Work or Derivative Works thereof in any medium, with or without
+     modifications, and in Source or Object form, provided that You
+     meet the following conditions:
+
+     (a) You must give any other recipients of the Work or
+         Derivative Works a copy of this License; and
+
+     (b) You must cause any modified files to carry prominent notices
+         stating that You changed the files; and
+
+     (c) You must retain, in the Source form of any Derivative Works
+         that You distribute, all copyright, patent, trademark, and
+         attribution notices from the Source form of the Work,
+         excluding those notices that do not pertain to any part of
+         the Derivative Works; and
+
+     (d) If the Work includes a "NOTICE" text file as part of its
+         distribution, then any Derivative Works that You distribute must
+         include a readable copy of the attribution notices contained
+         within such NOTICE file, excluding those notices that do not
+         pertain to any part of the Derivative Works, in at least one
+         of the following places: within a NOTICE text file distributed
+         as part of the Derivative Works; within the Source form or
+         documentation, if provided along with the Derivative Works; or,
+         within a display generated by the Derivative Works, if and
+         wherever such third-party notices normally appear. The contents
+         of the NOTICE file are for informational purposes only and
+         do not modify the License. You may add Your own attribution
+         notices within Derivative Works that You distribute, alongside
+         or as an addendum to the NOTICE text from the Work, provided
+         that such additional attribution notices cannot be construed
+         as modifying the License.
+
+     You may add Your own copyright statement to Your modifications and
+     may provide additional or different license terms and conditions
+     for use, reproduction, or distribution of Your modifications, or
+     for any such Derivative Works as a whole, provided Your use,
+     reproduction, and distribution of the Work otherwise complies with
+     the conditions stated in this License.
+
+  5. Submission of Contributions. Unless You explicitly state otherwise,
+     any Contribution intentionally submitted for inclusion in the Work
+     by You to the Licensor shall be under the terms and conditions of
+     this License, without any additional terms or conditions.
+     Notwithstanding the above, nothing herein shall supersede or modify
+     the terms of any separate license agreement you may have executed
+     with Licensor regarding such Contributions.
+
+  6. Trademarks. This License does not grant permission to use the trade
+     names, trademarks, service marks, or product names of the Licensor,
+     except as required for reasonable and customary use in describing the
+     origin of the Work and reproducing the content of the NOTICE file.
+
+  7. Disclaimer of Warranty. Unless required by applicable law or
+     agreed to in writing, Licensor provides the Work (and each
+     Contributor provides its Contributions) on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+     implied, including, without limitation, any warranties or conditions
+     of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+     PARTICULAR PURPOSE. You are solely responsible for determining the
+     appropriateness of using or redistributing the Work and assume any
+     risks associated with Your exercise of permissions under this License.
+
+  8. Limitation of Liability. In no event and under no legal theory,
+     whether in tort (including negligence), contract, or otherwise,
+     unless required by applicable law (such as deliberate and grossly
+     negligent acts) or agreed to in writing, shall any Contributor be
+     liable to You for damages, including any direct, indirect, special,
+     incidental, or consequential damages of any character arising as a
+     result of this License or out of the use or inability to use the
+     Work (including but not limited to damages for loss of goodwill,
+     work stoppage, computer failure or malfunction, or any and all
+     other commercial damages or losses), even if such Contributor
+     has been advised of the possibility of such damages.
+
+  9. Accepting Warranty or Additional Liability. While redistributing
+     the Work or Derivative Works thereof, You may choose to offer,
+     and charge a fee for, acceptance of support, warranty, indemnity,
+     or other liability obligations and/or rights consistent with this
+     License. However, in accepting such obligations, You may act only
+     on Your own behalf and on Your sole responsibility, not on behalf
+     of any other Contributor, and only if You agree to indemnify,
+     defend, and hold each Contributor harmless for any liability
+     incurred by, or claims asserted against, such Contributor by reason
+     of your accepting any such warranty or additional liability.
+
+  END OF TERMS AND CONDITIONS
+
+  APPENDIX: How to apply the Apache License to your work.
+
+     To apply the Apache License to your work, attach the following
+     boilerplate notice, with the fields enclosed by brackets "[]"
+     replaced with your own identifying information. (Don't include
+     the brackets!)  The text should be enclosed in the appropriate
+     comment syntax for the file format. We also recommend that a
+     file or class name and description of purpose be included on the
+     same "printed page" as the copyright notice for easier
+     identification within third-party archives.
+
+  Copyright [yyyy] [name of copyright owner]
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+The complete text of the BSD license can be is as follows:
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+  3. Neither the name of the University nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+
+The complete text of the MIT license is as follows:
+
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation
+  files (the “Software”), to deal in the Software without
+  restriction, including without limitation the rights to use,
+  copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the
+  Software is furnished to do so, subject to the following
+  conditions:
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+  OTHER DEALINGS IN THE SOFTWARE.
+
+The complete text of the GPL v2, and classpath exception:
+
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+    more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 59
+    Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
+
+The full text of the zlib licence:
+
+Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
+Jean-loup Gailly        Mark Adler
+jloup@gzip.org          madler@alumni.caltech.edu
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/LEGAL b/plc4j/integrations/logstash-plugin/vendor/jruby/LEGAL
new file mode 100644
index 0000000..d1463cf
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/LEGAL
@@ -0,0 +1,3 @@
+In Ruby's source distribution, this would describe a number of C source files
+that have different licenses than Ruby itself. None of those apply to JRuby,
+so we have this file here as a placeholder because Ola said so.
\ No newline at end of file
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/LICENSE.RUBY b/plc4j/integrations/logstash-plugin/vendor/jruby/LICENSE.RUBY
new file mode 100644
index 0000000..4156b7c
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/LICENSE.RUBY
@@ -0,0 +1,59 @@
+JRuby distributes some ruby modules which are distributed under Ruby
+license:
+
+Ruby is copyrighted free software by Yukihiro Matsumoto <ma...@netlab.jp>.
+You can redistribute it and/or modify it under either the terms of the
+2-clause BSDL (see the file BSDL), or the conditions below:
+
+  1. You may make and give away verbatim copies of the source form of the
+     software without restriction, provided that you duplicate all of the
+     original copyright notices and associated disclaimers.
+
+  2. You may modify your copy of the software in any way, provided that
+     you do at least ONE of the following:
+
+       a) place your modifications in the Public Domain or otherwise
+          make them Freely Available, such as by posting said
+	  modifications to Usenet or an equivalent medium, or by allowing
+	  the author to include your modifications in the software.
+
+       b) use the modified software only within your corporation or
+          organization.
+
+       c) give non-standard binaries non-standard names, with
+          instructions on where to get the original software distribution.
+
+       d) make other distribution arrangements with the author.
+
+  3. You may distribute the software in object code or binary form,
+     provided that you do at least ONE of the following:
+
+       a) distribute the binaries and library files of the software,
+	  together with instructions (in the manual page or equivalent)
+	  on where to get the original distribution.
+
+       b) accompany the distribution with the machine-readable source of
+	  the software.
+
+       c) give non-standard binaries non-standard names, with
+          instructions on where to get the original software distribution.
+
+       d) make other distribution arrangements with the author.
+
+  4. You may modify and include the part of the software into any other
+     software (possibly commercial).  But some files in the distribution
+     are not written by the author, so that they are not under these terms.
+
+     For the list of those files and their copying conditions, see the
+     file LEGAL.
+
+  5. The scripts and library files supplied as input to or produced as
+     output from the software do not automatically fall under the
+     copyright of the software, but belong to whomever generated them,
+     and may be sold commercially, and may be aggregated with this
+     software.
+
+  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+     PURPOSE.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast
new file mode 100755
index 0000000..9b4cf8d
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast
@@ -0,0 +1,250 @@
+#!/usr/bin/env jruby
+
+require 'optparse'
+require 'jruby'
+
+opts = {}
+options = {
+  :print_source => false,
+  :print_sexp   => false,
+  :print_ast    => true,
+  :print_ir     => false,
+  :print_pass   => nil,
+  :pretty_ir    => false,
+  :dot_format   => false
+}
+
+OptionParser.new do |opts|
+  opts.banner = "Usage: #{$0} [options]"
+
+  opts.on('-d', '--dot', 'Display as dot data') do |h|
+    options[:dot_format] = true
+  end
+  
+  opts.on('-h', '--help', 'Display this help') do |h|
+    puts opts
+    exit true
+  end
+
+  opts.on('-i', '--ir', 'Dump all IR passes without executing') do |h|
+    options[:print_ir] = true
+  end
+
+  opts.on('-p', '--pass passes_list', 'Dump IR after running a pass') do |pass|
+    options[:print_pass] = pass
+  end
+
+  opts.on('-f', '--formatted-ir', 'Pretty printer for IR (without CFG)') do |f|
+    options[:pretty_ir] = f
+  end
+  
+  opts.on('-s', '--sexp', 'Display the S-Expression for the AST') do |t|
+    options[:print_sexp] = true
+  end
+  
+  opts.on('--source', 'Display the source') do |s|
+    options[:print_source] = true
+  end
+  
+  opts.on('--no-ast', 'Do not print out the AST for this (only useful with -s)') do |a|
+    options[:print_ast] = false
+  end
+  
+  opts.on('-e exp', '--expression') do |e|
+    options[:expression] = e
+  end
+  
+end.parse!
+
+if ARGV.length > 1
+  abort "You may only specify one script (see --help)"
+elsif ARGV.length == 1
+  if options[:expression]
+    abort "-e and a script is not a valid combination (see --help)"
+  end
+  options[:expression] = File.read(ARGV.shift)
+elsif ! options.has_key?(:expression)
+  abort "No script specified (see --help)"
+end
+
+if options[:print_ir] && options[:print_pass]
+  abort "-p and -i is not valid. Use only one of them (see --help)"
+end
+
+$indent_string = "  "
+
+def indexes(string, lindex, rindex)
+  lindex = string.index("(", lindex) if lindex != nil
+  rindex = string.index(")", rindex) if rindex != nil
+  return lindex, rindex
+end
+
+def indent(string)
+  depth = -1
+
+  lindex, rindex = indexes(string, 0, 0)
+
+  while (lindex != nil || rindex != nil)
+    if (lindex != nil && lindex < rindex)
+      depth += 1
+      string[lindex, 1] = "\n#{$indent_string * depth}"
+    else
+      depth -= 1
+      string[rindex, 1] = "\n"
+    end
+
+    lindex, rindex = indexes(string, lindex, rindex)
+  end
+  string.gsub(/,\s*$/, '').squeeze("\n")
+end
+
+if options[:print_source]
+  puts "Source:"
+  puts options[:expression]
+  puts
+end
+
+module DotGraph
+  def self.dot_label(node)
+    extra = case node
+            when org.jruby.ast.StrNode then
+              ": '#{node.value}'"
+            when org.jruby.ast.FixnumNode then
+              ": #{node.value}"
+            when org.jruby.ast.FloatNode then
+              ": #{node.value}"
+            when org.jruby.ast.types.INameNode then
+              ": #{node.name}"
+            else
+              ""
+            end
+
+    "#{short_name(node)}#{extra}"
+  end
+
+  def self.short_name(node)
+    node.class.name.split("::")[-1].gsub("Node", "")
+  end
+
+  def self.dot_node_def(node)
+    %Q{#{node.hash} [label="#{dot_label(node)}"];\n}
+  end
+
+  def self.dot(defs, parent)
+    defs[parent.hash] = dot_node_def(parent)
+
+    "".tap do |str|
+      parent.child_nodes.each do |child|
+        str << "#{parent.hash} -> #{child.hash};\n"
+        str << dot(defs, child)
+      end
+    end
+  end
+
+  def self.print_graph(root_node)
+    defs = {}
+    graph_section = DotGraph.dot(defs, root_node)
+    puts "digraph AST {"
+    puts defs.values.join('')
+    puts graph_section
+    puts "}"
+  end
+end
+
+root = JRuby.parse(options[:expression])
+
+if options[:print_ast]
+  if options[:dot_format]
+    DotGraph.print_graph(root)
+  else
+    print "AST:"
+    puts indent(root.to_string) 
+    puts
+  end
+end
+
+def print_passes_on(scope, passes)
+  if !scope.kind_of? org.jruby.ir.IRClosure
+    passes.each { |pass| pass.run(scope) } 
+  end
+
+  scope.lexical_scopes.each do |child_scope|
+    child_scope.prepare_for_compilation
+    print_passes_on(child_scope, passes)
+  end
+end
+
+def print_pass_on(scope, pass)
+  if !scope.kind_of? org.jruby.ir.IRClosure
+    pass.run(scope)
+  end
+  
+  scope.lexical_scopes.each do |child_scope|
+    print_pass_on(child_scope, pass)
+  end
+end
+
+def ir_setup(root)
+  runtime = JRuby::runtime
+  manager = runtime.ir_manager
+
+  manager.dry_run = true
+  JRuby::IR.compiler_debug = true
+
+
+  builder = org.jruby.ir.IRBuilder
+
+  scope = builder.build_root(manager, root).scope
+  scope.prepare_for_compilation
+  passes = manager.get_compiler_passes(scope)
+  [scope, passes]
+end
+
+module IRPrettyPrinter
+  def self.pretty_ir(scope, indent="")
+    i = 0
+    pretty_str = scope.instrs.map do |instr|
+      f_str = "%s%3i\s\s%s" % [indent, i, instr]
+      i += 1
+      f_str 
+    end
+    pretty_str = [indent + scope.to_s] + pretty_str
+    scope.lexical_scopes.each do |lex_scope|
+      pretty_str += pretty_ir(lex_scope, indent + "\s" * 4)
+    end
+    pretty_str
+  end
+
+  def self.print_ir(scope)
+    instrs = pretty_ir(scope)
+    instrs.each do |instr|
+      puts instr
+    end
+  end
+end
+
+if options[:pretty_ir]
+  scope, passes = ir_setup(root)
+  puts "IR:"
+  IRPrettyPrinter.print_ir(scope)
+end
+
+if options[:print_pass]
+  scope, passes = ir_setup(root)
+  pass_name = options[:print_pass]
+  pass = passes.find do |p|
+    p.java_class.to_s.include?(pass_name.to_s)
+  end
+  print_pass_on(scope, pass)
+end
+
+if options[:print_ir]
+  scope, passes = ir_setup(root)
+
+  print_passes_on(scope, passes)
+end
+
+if options[:print_sexp]
+  puts "SEXP:"
+  puts org.jruby.ast.util.SexpMaker.create(root) 
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast.bat
new file mode 100644
index 0000000..faf08b3
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ast.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S ast %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem
new file mode 100755
index 0000000..37772c8
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem
@@ -0,0 +1,4 @@
+#!/usr/bin/env jruby
+
+# Just load jgem, since that's what RubyGems updates.
+load File.join(File.dirname(__FILE__), 'jgem')
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem.bat
new file mode 100644
index 0000000..8558a89
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/gem.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S gem %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb
new file mode 100755
index 0000000..3ca09a8
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb
@@ -0,0 +1,21 @@
+#!/usr/bin/env jruby
+#
+#   irb.rb - intaractive ruby
+#   	$Release Version: 0.7.3 $
+#   	$Revision$
+#   	$Date$
+#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
+#
+
+require "irb"
+
+if __FILE__ == $0
+  IRB.start(__FILE__)
+else
+  # check -e option
+  if /^-e$/ =~ $0
+    IRB.start(__FILE__)
+  else
+    IRB.setup(__FILE__)
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb.bat
new file mode 100644
index 0000000..4579d73
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/irb.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S irb %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem
new file mode 100755
index 0000000..f781460
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem
@@ -0,0 +1,25 @@
+#!/usr/bin/env jruby
+#--
+# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
+# All rights reserved.
+# See LICENSE.txt for permissions.
+#++
+
+require 'rubygems'
+require 'rubygems/gem_runner'
+require 'rubygems/exceptions'
+
+required_version = Gem::Requirement.new ">= 1.8.7"
+
+unless required_version.satisfied_by? Gem.ruby_version then
+  abort "Expected Ruby version #{required_version}, is #{Gem.ruby_version}"
+end
+
+args = ARGV.clone
+
+begin
+  Gem::GemRunner.new.run args
+rescue Gem::SystemExitException => e
+  exit e.exit_code
+end
+
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem.bat
new file mode 100644
index 0000000..051a28c
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jgem.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S jgem %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb
new file mode 100755
index 0000000..681da21
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb
@@ -0,0 +1,21 @@
+#!/usr/bin/env jruby
+#
+#   irb.rb - intaractive ruby
+#   	$Release Version: 0.7.3 $
+#   	$Revision$
+#   	$Date$
+#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
+#
+
+require "irb"
+
+if __FILE__.sub(/file:/, '').gsub(/ /,'%20') == $0.gsub(/file:/, '').gsub(/ /,'%20')
+  IRB.start(__FILE__)
+else
+  # check -e option
+  if /^-e$/ =~ $0
+    IRB.start(__FILE__)
+  else
+    IRB.setup(__FILE__)
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb.bat
new file mode 100644
index 0000000..eeb0808
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S jirb %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing
new file mode 100755
index 0000000..e221c8c
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing
@@ -0,0 +1,73 @@
+#!/usr/bin/env jruby
+#
+# IRB in swing
+#
+# Damian Steer (pldms@mac.com)
+
+require 'jruby'
+require 'irb'
+require 'irb/completion'
+
+java_import java.awt.Color
+java_import java.awt.Font
+java_import javax.swing.JFrame
+
+# default options, esp. useful for jrubyw
+ARGV << '--readline' << '--prompt' << 'inf-ruby' if ARGV.empty?
+
+DEFAULT_FONT = ['Monospaced', Font::PLAIN, 14, 'Monaco', 'Andale Mono']
+HEADER = " Welcome to the JRuby IRB Console [#{JRUBY_VERSION} (#{RUBY_VERSION})]\n\n"
+FRAME_TITLE = 'JRuby IRB Console (tab will autocomplete)'
+
+# Try to find preferred font family, use otherwise -- err --  otherwise
+def find_font(otherwise, style, size, *families)
+  avail_families = java.awt.GraphicsEnvironment.local_graphics_environment.available_font_family_names
+  fontname = families.find(proc {otherwise}) { |name| avail_families.include? name }
+  Font.new(fontname, style, size)
+end
+
+frame = JFrame.new(FRAME_TITLE).tap do |frame|
+  frame.default_close_operation = JFrame::EXIT_ON_CLOSE
+  frame.set_size(700, 600)
+  frame.content_pane.add(javax.swing.JScrollPane.new.tap do |pane|
+    pane.viewport_view = javax.swing.JTextPane.new.tap do |text|
+      text.font = find_font *DEFAULT_FONT
+      text.margin = java.awt.Insets.new(8,8,8,8)
+      text.caret_color = Color.new(0xa4, 0x00, 0x00)
+      text.background = Color.new(0xf2, 0xf2, 0xf2)
+      text.foreground = Color.new(0xa4, 0x00, 0x00)
+
+      tar = org.jruby.demo.readline.TextAreaReadline.new(text, HEADER)
+      tar.hook_into_runtime_with_streams(JRuby.runtime)
+
+      # Ruby does not like redefining constants but we do not want the warnings
+      # readline reads constants and not the globals so we need to reassign
+      # the globals.
+      saved_verbose = $VERBOSE
+      $VERBOSE = nil
+      STDIN = $stdin
+      STDOUT = $stdout
+      STDERR = $stderr
+      $VERBOSE = saved_verbose
+    end
+  end)
+  
+  # We need to show the frame on EDT to avoid deadlocks.
+  java.awt.EventQueue.invoke_later {  frame.visible = true }
+end
+
+JRuby.objectspace = true # useful for code completion
+
+# From vanilla IRB
+if __FILE__.sub(/file:/, '') == $0.sub(/file:/, '')
+  IRB.start(__FILE__)
+else
+  # check -e option
+  if /^-e$/ =~ $0
+    IRB.start(__FILE__)
+  else
+    IRB.setup(__FILE__)
+  end
+end
+
+frame.dispose
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing.bat
new file mode 100644
index 0000000..b1eed9a
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jirb_swing.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S jirb_swing %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby
new file mode 100755
index 0000000..4e50cb0
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby
@@ -0,0 +1,441 @@
+#!/usr/bin/env bash
+# -----------------------------------------------------------------------------
+# jruby.bash - Start Script for the JRuby interpreter
+#
+# Environment Variable Prequisites
+#
+#   JRUBY_OPTS    (Optional) Default JRuby command line args
+#   JRUBY_SHELL   Where/What is system shell
+#
+#   JAVA_HOME     Must point at your Java Development Kit installation.
+#
+# -----------------------------------------------------------------------------
+
+# ----- Set some default conditions for how we'll eventually run --------------
+cygwin=false
+use_exec=true
+
+# ----- Identify OS we are running under --------------------------------------
+case "`uname`" in
+  CYGWIN*) cygwin=true;;
+  Darwin) darwin=true;;
+  MINGW*) jruby.exe "$@"; exit $?;;
+esac
+
+# ----- Determine how to call expr (jruby/jruby#5091) -------------------------
+# On Alpine linux, expr takes no -- arguments, and 'expr --' echoes '--'.
+_expr_dashed=$(expr -- 2>/dev/null)
+if [ "$_expr_dashed" != '--' ] ; then
+  alias expr="expr --"
+fi
+unset _expr_dashed
+
+# ----- Verify and Set Required Environment Variables -------------------------
+if [ -z "$JAVA_VM" ]; then
+  JAVA_VM=-client
+fi
+
+# get the absolute path of the executable
+SELF_PATH=$(builtin cd -P -- "$(dirname -- "$0")" >/dev/null && pwd -P) && SELF_PATH=$SELF_PATH/$(basename -- "$0")
+
+# resolve symlinks
+while [ -h "$SELF_PATH" ]; do
+    # 1) cd to directory of the symlink
+    # 2) cd to the directory of where the symlink points
+    # 3) get the pwd
+    # 4) append the basename
+    DIR=$(dirname -- "$SELF_PATH")
+    SYM=$(readlink "$SELF_PATH")
+    SELF_PATH=$(cd "$DIR" && cd $(dirname -- "$SYM") && pwd)/$(basename -- "$SYM")
+done
+
+PRG=$SELF_PATH
+
+JRUBY_HOME_1=`dirname "$PRG"`           # the ./bin dir
+if [ "$JRUBY_HOME_1" = '.' ] ; then
+  cwd=`pwd`
+  JRUBY_HOME=`dirname $cwd` # JRUBY-2699
+else
+  JRUBY_HOME=`dirname "$JRUBY_HOME_1"`  # the . dir
+fi
+
+if [ -z "$JRUBY_OPTS" ] ; then
+  JRUBY_OPTS=""
+fi
+
+JRUBY_OPTS_SPECIAL="--ng" # space-separated list of special flags
+unset JRUBY_OPTS_TEMP
+function process_special_opts {
+    case $1 in
+        --ng) nailgun_client=true;;
+        *) break;;
+    esac
+}
+for opt in ${JRUBY_OPTS[@]}; do
+    for special in ${JRUBY_OPTS_SPECIAL[@]}; do
+        if [ $opt != $special ]; then
+            JRUBY_OPTS_TEMP="${JRUBY_OPTS_TEMP} $opt"
+        else
+            # make sure flags listed in JRUBY_OPTS_SPECIAL are processed
+            case "$opt" in
+            --ng)
+                process_special_opts $opt;;
+            esac
+        fi
+    done
+    if [ $opt == "-server" ]; then # JRUBY-4204
+        JAVA_VM="-server"
+    fi
+done
+JRUBY_OPTS=${JRUBY_OPTS_TEMP}
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -z "$JAVA_HOME" ] ; then
+    JAVACMD='java'
+  else
+    if $cygwin; then
+      JAVACMD="`cygpath -u "$JAVA_HOME"`/bin/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  fi
+fi
+
+if [ -z "$JAVA_STACK" ] ; then
+  JAVA_STACK=-Xss2048k
+fi
+
+# process JAVA_OPTS
+unset JAVA_OPTS_TEMP
+JAVA_OPTS_TEMP=""
+for opt in ${JAVA_OPTS[@]}; do
+  case $opt in
+    -server)
+      JAVA_VM="-server";;
+    -Xmx*)
+      JAVA_MEM=$opt;;
+    -Xms*)
+      JAVA_MEM_MIN=$opt;;
+    -Xss*)
+      JAVA_STACK=$opt;;
+    *)
+      JAVA_OPTS_TEMP="${JAVA_OPTS_TEMP} $opt";;
+  esac
+done
+
+JAVA_OPTS=$JAVA_OPTS_TEMP
+
+
+# If you're seeing odd exceptions, you may have a bad JVM install.
+# Uncomment this and report the version to the JRuby team along with error.
+#$JAVACMD -version
+
+JRUBY_SHELL=/bin/sh
+
+# ----- Set Up The Boot Classpath -------------------------------------------
+
+CP_DELIMITER=":"
+
+# add main jruby jar to the bootclasspath
+for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do
+    if [ ! -e "$j" ]; then
+      continue
+    fi
+    if [ "$JRUBY_CP" ]; then
+        JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"
+        else
+        JRUBY_CP="$j"
+    fi
+    if [ $JRUBY_ALREADY_ADDED ]; then
+        echo "WARNING: more than one JRuby JAR found in lib directory"
+    fi
+    JRUBY_ALREADY_ADDED=true
+done
+
+if $cygwin; then
+    JRUBY_CP=`cygpath -p -w "$JRUBY_CP"`
+fi
+
+# ----- Set Up The System Classpath -------------------------------------------
+
+if [ "$JRUBY_PARENT_CLASSPATH" != "" ]; then
+    # Use same classpath propagated from parent jruby
+    CP=$JRUBY_PARENT_CLASSPATH
+else
+    # add other jars in lib to CP for command-line execution
+    for j in "$JRUBY_HOME"/lib/*.jar; do
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby.jar ]; then
+          continue
+        fi
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby-complete.jar ]; then
+          continue
+        fi
+        if [ "$CP" ]; then
+            CP="$CP$CP_DELIMITER$j"
+            else
+            CP="$j"
+        fi
+    done
+
+    if [ "$CP" != "" ] && $cygwin; then
+        CP=`cygpath -p -w "$CP"`
+    fi
+fi
+
+if $cygwin; then
+    # switch delimiter only after building Unix style classpaths
+    CP_DELIMITER=";"
+fi
+
+# ----- Execute The Requested Command -----------------------------------------
+JAVA_ENCODING=""
+
+if [ -r "/dev/urandom" ]; then
+  # OpenJDK tries really hard to prevent you from using urandom.
+  # See https://bugs.openjdk.java.net/browse/JDK-6202721
+  # Non-file URL causes fallback to slow threaded SeedGenerator.
+  # See https://bz.apache.org/bugzilla/show_bug.cgi?id=56139
+  JAVA_SECURITY_EGD="file:/dev/urandom"
+fi
+
+declare -a java_args
+declare -a ruby_args
+mode=""
+
+JAVA_CLASS_JRUBY_MAIN=org.jruby.Main
+java_class=$JAVA_CLASS_JRUBY_MAIN
+JAVA_CLASS_NGSERVER=org.jruby.main.NailServerMain
+
+# Split out any -J argument for passing to the JVM.
+# Scanning for args is aborted by '--'.
+set -- $JRUBY_OPTS "$@"
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    # Stuff after '-J' in this argument goes to JVM
+    -J*)
+        val=${1:2}
+        if [ "${val:0:4}" = "-Xmx" ]; then
+            JAVA_MEM=$val
+        elif [ "${val:0:4}" = "-Xms" ]; then
+            JAVA_MEM_MIN=$val
+        elif [ "${val:0:4}" = "-Xss" ]; then
+            JAVA_STACK=$val
+        elif [ "${val}" = "" ]; then
+            $JAVACMD -help
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-X" ]; then
+            $JAVACMD -X
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-classpath" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        elif [ "${val}" = "-cp" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        else
+            if [ "${val:0:3}" = "-ea" ]; then
+                VERIFY_JRUBY="yes"
+            elif [ "${val:0:16}" = "-Dfile.encoding=" ]; then
+                JAVA_ENCODING=${val:16}
+            elif [ "${val:0:20}" = "-Djava.security.egd=" ]; then
+                JAVA_SECURITY_EGD=${val:20}
+            else
+                java_args=("${java_args[@]}" "${1:2}")
+            fi
+        fi
+        ;;
+     # Pass -X... and -X? search options through
+     -X*\.\.\.|-X*\?)
+        ruby_args=("${ruby_args[@]}" "$1") ;;
+     # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option
+     -X*)
+        val=${1:2}
+        if expr "$val" : '.*[.]' > /dev/null; then
+          java_args=("${java_args[@]}" "-Djruby.${val}")
+        else
+          ruby_args=("${ruby_args[@]}" "-X${val}")
+        fi
+        ;;
+     # Match switches that take an argument
+     -C|-e|-I|-S) ruby_args=("${ruby_args[@]}" "$1" "$2"); shift ;;
+     # Match same switches with argument stuck together
+     -e*|-I*|-S*) ruby_args=("${ruby_args[@]}" "$1" ) ;;
+     # Run with JMX management enabled
+     --manage)
+        java_args=("${java_args[@]}" "-Dcom.sun.management.jmxremote")
+        java_args=("${java_args[@]}" "-Djruby.management.enabled=true") ;;
+     # Don't launch a GUI window, no matter what
+     --headless)
+        java_args=("${java_args[@]}" "-Djava.awt.headless=true") ;;
+     # Run under JDB
+     --jdb)
+        if [ -z "$JAVA_HOME" ] ; then
+          JAVACMD='jdb'
+        else
+          if $cygwin; then
+            JAVACMD="`cygpath -u "$JAVA_HOME"`/bin/jdb"
+          else
+            JAVACMD="$JAVA_HOME/bin/jdb"
+          fi
+        fi 
+        JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
+        java_args=("${java_args[@]}" "-sourcepath" "$JDB_SOURCEPATH")
+        JRUBY_OPTS=("${JRUBY_OPTS[@]}" "-X+C") ;;
+     --client)
+        JAVA_VM=-client ;;
+     --server)
+        JAVA_VM=-server ;;
+     --dev)
+        JAVA_VM=-client
+        JAVA_OPTS="$JAVA_OPTS -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Djruby.compile.mode=OFF -Djruby.compile.invokedynamic=false" ;;
+     --noclient)         # JRUBY-4296
+        unset JAVA_VM ;; # For IBM JVM, neither '-client' nor '-server' is applicable
+     --sample)
+        java_args=("${java_args[@]}" "-Xprof") ;;
+     --record)
+        java_args=("${java_args[@]}" "-XX:+FlightRecorder" "-XX:StartFlightRecording=dumponexit=true") ;;
+     --ng-server)
+        # Start up as Nailgun server
+        java_class=$JAVA_CLASS_NGSERVER
+        VERIFY_JRUBY=true ;;
+     --no-bootclasspath)
+        NO_BOOTCLASSPATH=true ;;
+     --ng)
+        # Use native Nailgun client to toss commands to server
+        process_special_opts "--ng" ;;
+     # warn but ignore
+     --1.8) echo "warning: --1.8 ignored" ;;
+     # warn but ignore
+     --1.9) echo "warning: --1.9 ignored" ;;
+     # warn but ignore
+     --2.0) echo "warning: --1.9 ignored" ;;
+     # Abort processing on the double dash
+     --) break ;;
+     # Other opts go to ruby
+     -*) ruby_args=("${ruby_args[@]}" "$1") ;;
+     # Abort processing on first non-opt arg
+     *) break ;;
+    esac
+    shift
+done
+
+# Force file.encoding to UTF-8 when on Mac, since Apple JDK defaults to MacRoman (JRUBY-3576)
+if [[ $darwin && -z "$JAVA_ENCODING" ]]; then
+  java_args=("${java_args[@]}" "-Dfile.encoding=UTF-8")
+elif [[ -n "$JAVA_ENCODING" ]]; then
+  java_args=("${java_args[@]}" "-Dfile.encoding=$JAVA_ENCODING")
+fi
+
+# Force OpenJDK-based JVMs to use /dev/urandom for random number generation
+# See https://github.com/jruby/jruby/issues/4685 among others.
+if [[ -n "$JAVA_SECURITY_EGD" ]]; then
+  java_args=("${java_args[@]}" "-Djava.security.egd=$JAVA_SECURITY_EGD")
+fi
+
+# Append the rest of the arguments
+ruby_args=("${ruby_args[@]}" "$@")
+
+# Put the ruby_args back into the position arguments $1, $2 etc
+set -- "${ruby_args[@]}"
+
+JAVA_OPTS="$JAVA_OPTS $JAVA_MEM $JAVA_MEM_MIN $JAVA_STACK"
+
+JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
+
+if $cygwin; then
+  use_exec=false
+  JRUBY_HOME=`cygpath --mixed "$JRUBY_HOME"`
+  JRUBY_SHELL=`cygpath --mixed "$JRUBY_SHELL"`
+
+  if [[ ( "${1:0:1}" = "/" ) && ( ( -f "$1" ) || ( -d "$1" )) ]]; then
+    win_arg=`cygpath -w "$1"`
+    shift
+    win_args=("$win_arg" "$@")
+    set -- "${win_args[@]}"
+  fi
+
+  # fix JLine to use UnixTerminal
+  stty -icanon min 1 -echo > /dev/null 2>&1
+  if [ $? = 0 ]; then
+    JAVA_OPTS="$JAVA_OPTS -Djline.terminal=jline.UnixTerminal"
+  fi
+
+fi
+
+# Allow overriding default JSA file location
+if [ "$JRUBY_JSA" == "" ]; then
+  JRUBY_JSA=${JRUBY_HOME}/lib/jruby.jsa
+fi
+
+# Determine whether to pass module-related flags
+classmod_flag="-classpath"
+if [ -d $JAVA_HOME/jmods ]; then
+  # Use module path instead of classpath
+  classmod_flag="--module-path"
+
+  # Switch to non-boot path since we can't use bootclasspath on 9+
+  NO_BOOTCLASSPATH=1
+
+  # If we have a jruby.jsa file, enable AppCDS
+  if [ -f $JRUBY_JSA ]; then
+    JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:SharedArchiveFile=$JRUBY_JSA"
+  fi
+
+  # Add base opens we need for Ruby compatibility
+  JAVA_OPTS="$JAVA_OPTS --add-opens java.base/java.io=org.jruby.dist --add-opens java.base/java.nio.channels=org.jruby.dist --add-opens java.base/sun.nio.ch=org.jruby.dist"
+fi
+
+# Run JRuby!
+if [ "$nailgun_client" != "" ]; then
+
+  if [ -f $JRUBY_HOME/tool/nailgun/ng ]; then
+    exec $JRUBY_HOME/tool/nailgun/ng org.jruby.util.NailMain $mode "$@"
+  else
+    echo "error: ng executable not found; run 'make' in ${JRUBY_HOME}/tool/nailgun"
+    exit 1
+  fi
+
+elif [[ "$NO_BOOTCLASSPATH" != "" || "$VERIFY_JRUBY" != "" ]]; then
+
+  if [[ "${java_class:-}" == "${JAVA_CLASS_NGSERVER:-}" && -n "${JRUBY_OPTS:-}" ]]; then
+    echo "warning: starting a nailgun server; discarding JRUBY_OPTS: ${JRUBY_OPTS}"
+    use_exec=false
+    JRUBY_OPTS=''
+  fi
+
+  jvm_command=("$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" ${classmod_flag} "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH" \
+    "-Djruby.home=$JRUBY_HOME" \
+    "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
+    "-Djruby.shell=$JRUBY_SHELL" \
+    $java_class $mode "$@")
+
+else
+
+  jvm_command=("$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP$CP_DELIMITER$CLASSPATH" \
+    "-Djruby.home=$JRUBY_HOME" \
+    "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
+    "-Djruby.shell=$JRUBY_SHELL" \
+    $java_class $mode "$@")
+
+fi
+
+# Run JRuby!
+if $use_exec; then
+  exec "${jvm_command[@]}"
+else
+  "${jvm_command[@]}"
+
+  # Record the exit status immediately, or it will be overridden.
+  JRUBY_STATUS=$?
+
+  if $cygwin; then
+    stty icanon echo > /dev/null 2>&1
+  fi
+
+  exit $JRUBY_STATUS
+fi
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bash b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bash
new file mode 100755
index 0000000..4e50cb0
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bash
@@ -0,0 +1,441 @@
+#!/usr/bin/env bash
+# -----------------------------------------------------------------------------
+# jruby.bash - Start Script for the JRuby interpreter
+#
+# Environment Variable Prequisites
+#
+#   JRUBY_OPTS    (Optional) Default JRuby command line args
+#   JRUBY_SHELL   Where/What is system shell
+#
+#   JAVA_HOME     Must point at your Java Development Kit installation.
+#
+# -----------------------------------------------------------------------------
+
+# ----- Set some default conditions for how we'll eventually run --------------
+cygwin=false
+use_exec=true
+
+# ----- Identify OS we are running under --------------------------------------
+case "`uname`" in
+  CYGWIN*) cygwin=true;;
+  Darwin) darwin=true;;
+  MINGW*) jruby.exe "$@"; exit $?;;
+esac
+
+# ----- Determine how to call expr (jruby/jruby#5091) -------------------------
+# On Alpine linux, expr takes no -- arguments, and 'expr --' echoes '--'.
+_expr_dashed=$(expr -- 2>/dev/null)
+if [ "$_expr_dashed" != '--' ] ; then
+  alias expr="expr --"
+fi
+unset _expr_dashed
+
+# ----- Verify and Set Required Environment Variables -------------------------
+if [ -z "$JAVA_VM" ]; then
+  JAVA_VM=-client
+fi
+
+# get the absolute path of the executable
+SELF_PATH=$(builtin cd -P -- "$(dirname -- "$0")" >/dev/null && pwd -P) && SELF_PATH=$SELF_PATH/$(basename -- "$0")
+
+# resolve symlinks
+while [ -h "$SELF_PATH" ]; do
+    # 1) cd to directory of the symlink
+    # 2) cd to the directory of where the symlink points
+    # 3) get the pwd
+    # 4) append the basename
+    DIR=$(dirname -- "$SELF_PATH")
+    SYM=$(readlink "$SELF_PATH")
+    SELF_PATH=$(cd "$DIR" && cd $(dirname -- "$SYM") && pwd)/$(basename -- "$SYM")
+done
+
+PRG=$SELF_PATH
+
+JRUBY_HOME_1=`dirname "$PRG"`           # the ./bin dir
+if [ "$JRUBY_HOME_1" = '.' ] ; then
+  cwd=`pwd`
+  JRUBY_HOME=`dirname $cwd` # JRUBY-2699
+else
+  JRUBY_HOME=`dirname "$JRUBY_HOME_1"`  # the . dir
+fi
+
+if [ -z "$JRUBY_OPTS" ] ; then
+  JRUBY_OPTS=""
+fi
+
+JRUBY_OPTS_SPECIAL="--ng" # space-separated list of special flags
+unset JRUBY_OPTS_TEMP
+function process_special_opts {
+    case $1 in
+        --ng) nailgun_client=true;;
+        *) break;;
+    esac
+}
+for opt in ${JRUBY_OPTS[@]}; do
+    for special in ${JRUBY_OPTS_SPECIAL[@]}; do
+        if [ $opt != $special ]; then
+            JRUBY_OPTS_TEMP="${JRUBY_OPTS_TEMP} $opt"
+        else
+            # make sure flags listed in JRUBY_OPTS_SPECIAL are processed
+            case "$opt" in
+            --ng)
+                process_special_opts $opt;;
+            esac
+        fi
+    done
+    if [ $opt == "-server" ]; then # JRUBY-4204
+        JAVA_VM="-server"
+    fi
+done
+JRUBY_OPTS=${JRUBY_OPTS_TEMP}
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -z "$JAVA_HOME" ] ; then
+    JAVACMD='java'
+  else
+    if $cygwin; then
+      JAVACMD="`cygpath -u "$JAVA_HOME"`/bin/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  fi
+fi
+
+if [ -z "$JAVA_STACK" ] ; then
+  JAVA_STACK=-Xss2048k
+fi
+
+# process JAVA_OPTS
+unset JAVA_OPTS_TEMP
+JAVA_OPTS_TEMP=""
+for opt in ${JAVA_OPTS[@]}; do
+  case $opt in
+    -server)
+      JAVA_VM="-server";;
+    -Xmx*)
+      JAVA_MEM=$opt;;
+    -Xms*)
+      JAVA_MEM_MIN=$opt;;
+    -Xss*)
+      JAVA_STACK=$opt;;
+    *)
+      JAVA_OPTS_TEMP="${JAVA_OPTS_TEMP} $opt";;
+  esac
+done
+
+JAVA_OPTS=$JAVA_OPTS_TEMP
+
+
+# If you're seeing odd exceptions, you may have a bad JVM install.
+# Uncomment this and report the version to the JRuby team along with error.
+#$JAVACMD -version
+
+JRUBY_SHELL=/bin/sh
+
+# ----- Set Up The Boot Classpath -------------------------------------------
+
+CP_DELIMITER=":"
+
+# add main jruby jar to the bootclasspath
+for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do
+    if [ ! -e "$j" ]; then
+      continue
+    fi
+    if [ "$JRUBY_CP" ]; then
+        JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"
+        else
+        JRUBY_CP="$j"
+    fi
+    if [ $JRUBY_ALREADY_ADDED ]; then
+        echo "WARNING: more than one JRuby JAR found in lib directory"
+    fi
+    JRUBY_ALREADY_ADDED=true
+done
+
+if $cygwin; then
+    JRUBY_CP=`cygpath -p -w "$JRUBY_CP"`
+fi
+
+# ----- Set Up The System Classpath -------------------------------------------
+
+if [ "$JRUBY_PARENT_CLASSPATH" != "" ]; then
+    # Use same classpath propagated from parent jruby
+    CP=$JRUBY_PARENT_CLASSPATH
+else
+    # add other jars in lib to CP for command-line execution
+    for j in "$JRUBY_HOME"/lib/*.jar; do
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby.jar ]; then
+          continue
+        fi
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby-complete.jar ]; then
+          continue
+        fi
+        if [ "$CP" ]; then
+            CP="$CP$CP_DELIMITER$j"
+            else
+            CP="$j"
+        fi
+    done
+
+    if [ "$CP" != "" ] && $cygwin; then
+        CP=`cygpath -p -w "$CP"`
+    fi
+fi
+
+if $cygwin; then
+    # switch delimiter only after building Unix style classpaths
+    CP_DELIMITER=";"
+fi
+
+# ----- Execute The Requested Command -----------------------------------------
+JAVA_ENCODING=""
+
+if [ -r "/dev/urandom" ]; then
+  # OpenJDK tries really hard to prevent you from using urandom.
+  # See https://bugs.openjdk.java.net/browse/JDK-6202721
+  # Non-file URL causes fallback to slow threaded SeedGenerator.
+  # See https://bz.apache.org/bugzilla/show_bug.cgi?id=56139
+  JAVA_SECURITY_EGD="file:/dev/urandom"
+fi
+
+declare -a java_args
+declare -a ruby_args
+mode=""
+
+JAVA_CLASS_JRUBY_MAIN=org.jruby.Main
+java_class=$JAVA_CLASS_JRUBY_MAIN
+JAVA_CLASS_NGSERVER=org.jruby.main.NailServerMain
+
+# Split out any -J argument for passing to the JVM.
+# Scanning for args is aborted by '--'.
+set -- $JRUBY_OPTS "$@"
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    # Stuff after '-J' in this argument goes to JVM
+    -J*)
+        val=${1:2}
+        if [ "${val:0:4}" = "-Xmx" ]; then
+            JAVA_MEM=$val
+        elif [ "${val:0:4}" = "-Xms" ]; then
+            JAVA_MEM_MIN=$val
+        elif [ "${val:0:4}" = "-Xss" ]; then
+            JAVA_STACK=$val
+        elif [ "${val}" = "" ]; then
+            $JAVACMD -help
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-X" ]; then
+            $JAVACMD -X
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-classpath" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        elif [ "${val}" = "-cp" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        else
+            if [ "${val:0:3}" = "-ea" ]; then
+                VERIFY_JRUBY="yes"
+            elif [ "${val:0:16}" = "-Dfile.encoding=" ]; then
+                JAVA_ENCODING=${val:16}
+            elif [ "${val:0:20}" = "-Djava.security.egd=" ]; then
+                JAVA_SECURITY_EGD=${val:20}
+            else
+                java_args=("${java_args[@]}" "${1:2}")
+            fi
+        fi
+        ;;
+     # Pass -X... and -X? search options through
+     -X*\.\.\.|-X*\?)
+        ruby_args=("${ruby_args[@]}" "$1") ;;
+     # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option
+     -X*)
+        val=${1:2}
+        if expr "$val" : '.*[.]' > /dev/null; then
+          java_args=("${java_args[@]}" "-Djruby.${val}")
+        else
+          ruby_args=("${ruby_args[@]}" "-X${val}")
+        fi
+        ;;
+     # Match switches that take an argument
+     -C|-e|-I|-S) ruby_args=("${ruby_args[@]}" "$1" "$2"); shift ;;
+     # Match same switches with argument stuck together
+     -e*|-I*|-S*) ruby_args=("${ruby_args[@]}" "$1" ) ;;
+     # Run with JMX management enabled
+     --manage)
+        java_args=("${java_args[@]}" "-Dcom.sun.management.jmxremote")
+        java_args=("${java_args[@]}" "-Djruby.management.enabled=true") ;;
+     # Don't launch a GUI window, no matter what
+     --headless)
+        java_args=("${java_args[@]}" "-Djava.awt.headless=true") ;;
+     # Run under JDB
+     --jdb)
+        if [ -z "$JAVA_HOME" ] ; then
+          JAVACMD='jdb'
+        else
+          if $cygwin; then
+            JAVACMD="`cygpath -u "$JAVA_HOME"`/bin/jdb"
+          else
+            JAVACMD="$JAVA_HOME/bin/jdb"
+          fi
+        fi 
+        JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
+        java_args=("${java_args[@]}" "-sourcepath" "$JDB_SOURCEPATH")
+        JRUBY_OPTS=("${JRUBY_OPTS[@]}" "-X+C") ;;
+     --client)
+        JAVA_VM=-client ;;
+     --server)
+        JAVA_VM=-server ;;
+     --dev)
+        JAVA_VM=-client
+        JAVA_OPTS="$JAVA_OPTS -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Djruby.compile.mode=OFF -Djruby.compile.invokedynamic=false" ;;
+     --noclient)         # JRUBY-4296
+        unset JAVA_VM ;; # For IBM JVM, neither '-client' nor '-server' is applicable
+     --sample)
+        java_args=("${java_args[@]}" "-Xprof") ;;
+     --record)
+        java_args=("${java_args[@]}" "-XX:+FlightRecorder" "-XX:StartFlightRecording=dumponexit=true") ;;
+     --ng-server)
+        # Start up as Nailgun server
+        java_class=$JAVA_CLASS_NGSERVER
+        VERIFY_JRUBY=true ;;
+     --no-bootclasspath)
+        NO_BOOTCLASSPATH=true ;;
+     --ng)
+        # Use native Nailgun client to toss commands to server
+        process_special_opts "--ng" ;;
+     # warn but ignore
+     --1.8) echo "warning: --1.8 ignored" ;;
+     # warn but ignore
+     --1.9) echo "warning: --1.9 ignored" ;;
+     # warn but ignore
+     --2.0) echo "warning: --1.9 ignored" ;;
+     # Abort processing on the double dash
+     --) break ;;
+     # Other opts go to ruby
+     -*) ruby_args=("${ruby_args[@]}" "$1") ;;
+     # Abort processing on first non-opt arg
+     *) break ;;
+    esac
+    shift
+done
+
+# Force file.encoding to UTF-8 when on Mac, since Apple JDK defaults to MacRoman (JRUBY-3576)
+if [[ $darwin && -z "$JAVA_ENCODING" ]]; then
+  java_args=("${java_args[@]}" "-Dfile.encoding=UTF-8")
+elif [[ -n "$JAVA_ENCODING" ]]; then
+  java_args=("${java_args[@]}" "-Dfile.encoding=$JAVA_ENCODING")
+fi
+
+# Force OpenJDK-based JVMs to use /dev/urandom for random number generation
+# See https://github.com/jruby/jruby/issues/4685 among others.
+if [[ -n "$JAVA_SECURITY_EGD" ]]; then
+  java_args=("${java_args[@]}" "-Djava.security.egd=$JAVA_SECURITY_EGD")
+fi
+
+# Append the rest of the arguments
+ruby_args=("${ruby_args[@]}" "$@")
+
+# Put the ruby_args back into the position arguments $1, $2 etc
+set -- "${ruby_args[@]}"
+
+JAVA_OPTS="$JAVA_OPTS $JAVA_MEM $JAVA_MEM_MIN $JAVA_STACK"
+
+JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
+
+if $cygwin; then
+  use_exec=false
+  JRUBY_HOME=`cygpath --mixed "$JRUBY_HOME"`
+  JRUBY_SHELL=`cygpath --mixed "$JRUBY_SHELL"`
+
+  if [[ ( "${1:0:1}" = "/" ) && ( ( -f "$1" ) || ( -d "$1" )) ]]; then
+    win_arg=`cygpath -w "$1"`
+    shift
+    win_args=("$win_arg" "$@")
+    set -- "${win_args[@]}"
+  fi
+
+  # fix JLine to use UnixTerminal
+  stty -icanon min 1 -echo > /dev/null 2>&1
+  if [ $? = 0 ]; then
+    JAVA_OPTS="$JAVA_OPTS -Djline.terminal=jline.UnixTerminal"
+  fi
+
+fi
+
+# Allow overriding default JSA file location
+if [ "$JRUBY_JSA" == "" ]; then
+  JRUBY_JSA=${JRUBY_HOME}/lib/jruby.jsa
+fi
+
+# Determine whether to pass module-related flags
+classmod_flag="-classpath"
+if [ -d $JAVA_HOME/jmods ]; then
+  # Use module path instead of classpath
+  classmod_flag="--module-path"
+
+  # Switch to non-boot path since we can't use bootclasspath on 9+
+  NO_BOOTCLASSPATH=1
+
+  # If we have a jruby.jsa file, enable AppCDS
+  if [ -f $JRUBY_JSA ]; then
+    JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:SharedArchiveFile=$JRUBY_JSA"
+  fi
+
+  # Add base opens we need for Ruby compatibility
+  JAVA_OPTS="$JAVA_OPTS --add-opens java.base/java.io=org.jruby.dist --add-opens java.base/java.nio.channels=org.jruby.dist --add-opens java.base/sun.nio.ch=org.jruby.dist"
+fi
+
+# Run JRuby!
+if [ "$nailgun_client" != "" ]; then
+
+  if [ -f $JRUBY_HOME/tool/nailgun/ng ]; then
+    exec $JRUBY_HOME/tool/nailgun/ng org.jruby.util.NailMain $mode "$@"
+  else
+    echo "error: ng executable not found; run 'make' in ${JRUBY_HOME}/tool/nailgun"
+    exit 1
+  fi
+
+elif [[ "$NO_BOOTCLASSPATH" != "" || "$VERIFY_JRUBY" != "" ]]; then
+
+  if [[ "${java_class:-}" == "${JAVA_CLASS_NGSERVER:-}" && -n "${JRUBY_OPTS:-}" ]]; then
+    echo "warning: starting a nailgun server; discarding JRUBY_OPTS: ${JRUBY_OPTS}"
+    use_exec=false
+    JRUBY_OPTS=''
+  fi
+
+  jvm_command=("$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" ${classmod_flag} "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH" \
+    "-Djruby.home=$JRUBY_HOME" \
+    "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
+    "-Djruby.shell=$JRUBY_SHELL" \
+    $java_class $mode "$@")
+
+else
+
+  jvm_command=("$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP$CP_DELIMITER$CLASSPATH" \
+    "-Djruby.home=$JRUBY_HOME" \
+    "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
+    "-Djruby.shell=$JRUBY_SHELL" \
+    $java_class $mode "$@")
+
+fi
+
+# Run JRuby!
+if $use_exec; then
+  exec "${jvm_command[@]}"
+else
+  "${jvm_command[@]}"
+
+  # Record the exit status immediately, or it will be overridden.
+  JRUBY_STATUS=$?
+
+  if $cygwin; then
+    stty icanon echo > /dev/null 2>&1
+  fi
+
+  exit $JRUBY_STATUS
+fi
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bat
new file mode 100644
index 0000000..1450ae0
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.bat
@@ -0,0 +1,6 @@
+@ECHO OFF
+IF NOT "%~f0" == "~f0" GOTO :WinNT
+@"jruby.exe" %1 %2 %3 %4 %5 %6 %7 %8 %9
+GOTO :EOF
+:WinNT
+@"%~dpn0.exe" %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.dll b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.dll
new file mode 100644
index 0000000..8f21e10
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.dll differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.exe b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.exe
new file mode 100644
index 0000000..2616a6f
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.exe differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.sh b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.sh
new file mode 100755
index 0000000..e3e43c3
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby.sh
@@ -0,0 +1,321 @@
+#! /bin/sh
+# -----------------------------------------------------------------------------
+# jruby.sh - Start Script for the JRuby interpreter
+#
+# Environment Variable Prequisites
+#
+#   JRUBY_OPTS    (Optional) Default JRuby command line args
+#   JRUBY_SHELL   Where/What is system shell
+#
+#   JAVA_HOME     Must point at your Java Development Kit installation.
+#
+# -----------------------------------------------------------------------------
+
+# ********************************** NOTE *************************************
+# This script is provided as a convenience for users on systems that do not
+# have the "bash" shell available. It does not support all the flags the bash
+# and native executables do, but should be complete enough for most users.
+# Improvements are welcome.
+# *****************************************************************************
+
+# ----- Verify and Set Required Environment Variables -------------------------
+
+## resolve links - $0 may be a link to  home
+PRG=$0
+progname=`basename "$0"`
+
+while [ -h "$PRG" ] ; do
+  ls=`ls -ld "$PRG"`
+  link=`expr -- "$ls" : '.*-> \(.*\)$'`
+  if expr -- "$link" : '.*/.*' > /dev/null; then
+    if expr -- "$link" : '/' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname ${PRG}`/${link}"
+    fi
+  else
+    PRG="`dirname $PRG`/$link"
+  fi
+done
+
+JRUBY_HOME_1=`dirname "$PRG"`           # the ./bin dir
+if [ "$JRUBY_HOME_1" = '.' ] ; then
+  cwd=`pwd`
+  JRUBY_HOME=`dirname $cwd` # JRUBY-2699
+else
+  JRUBY_HOME=`dirname "$JRUBY_HOME_1"`  # the . dir
+fi
+
+if [ -z "$JRUBY_OPTS" ] ; then
+  JRUBY_OPTS=""
+fi
+
+JRUBY_OPTS_SPECIAL="--ng" # space-separated list of special flags
+unset JRUBY_OPTS_TEMP
+process_special_opts() {
+    case $1 in
+        --ng) nailgun_client=true;;
+        *) break;;
+    esac
+}
+for opt in ${JRUBY_OPTS}; do
+    for special in ${JRUBY_OPTS_SPECIAL}; do
+        if [ $opt != $special ]; then
+            JRUBY_OPTS_TEMP="${JRUBY_OPTS_TEMP} $opt"
+        else
+            # make sure flags listed in JRUBY_OPTS_SPECIAL are processed
+            case "$opt" in
+            --ng)
+                process_special_opts $opt;;
+            esac
+        fi
+    done
+done
+JRUBY_OPTS=${JRUBY_OPTS_TEMP}
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -z "$JAVA_HOME" ] ; then
+    JAVACMD='java'
+  else
+    JAVACMD="$JAVA_HOME/bin/java"
+  fi
+fi
+
+# If you're seeing odd exceptions, you may have a bad JVM install.
+# Uncomment this and report the version to the JRuby team along with error.
+#$JAVACMD -version
+
+JRUBY_SHELL=/bin/sh
+
+# ----- Set Up The Boot Classpath -------------------------------------------
+
+CP_DELIMITER=":"
+
+# add main jruby jar to the bootclasspath
+for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do
+    if [ ! -e "$j" ]; then
+      continue
+    fi
+    if [ "$JRUBY_CP" ]; then
+        JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"
+        else
+        JRUBY_CP="$j"
+    fi
+    if [ $JRUBY_ALREADY_ADDED ]; then
+        echo "WARNING: more than one JRuby JAR found in lib directory"
+    fi
+    JRUBY_ALREADY_ADDED=true
+done
+
+# ----- Set Up The System Classpath -------------------------------------------
+
+if [ "$JRUBY_PARENT_CLASSPATH" != "" ]; then
+    # Use same classpath propagated from parent jruby
+    CP=$JRUBY_PARENT_CLASSPATH
+else
+    # add other jars in lib to CP for command-line execution
+    for j in "$JRUBY_HOME"/lib/*.jar; do
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby.jar ]; then
+          continue
+        fi
+        if [ "$j" == "$JRUBY_HOME"/lib/jruby-complete.jar ]; then
+          continue
+        fi
+        if [ "$CP" ]; then
+            CP="$CP$CP_DELIMITER$j"
+            else
+            CP="$j"
+        fi
+    done
+
+fi
+
+
+# ----- Execute The Requested Command -----------------------------------------
+
+if [ -z "$JAVA_MEM" ] ; then
+  JAVA_MEM=-Xmx500m
+fi
+
+if [ -z "$JAVA_STACK" ] ; then
+  JAVA_STACK=-Xss2048k
+fi
+
+if [ -z "$JAVA_VM" ]; then
+  JAVA_VM=-client
+fi
+JAVA_ENCODING=""
+
+#declare -a java_args
+#declare -a ruby_args
+
+JAVA_CLASS_JRUBY_MAIN=org.jruby.Main
+java_class=$JAVA_CLASS_JRUBY_MAIN
+JAVA_CLASS_NGSERVER=com.martiansoftware.nailgun.NGServer
+
+# Split out any -J argument for passing to the JVM.
+# Scanning for args is aborted by '--'.
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    # Stuff after '-J' in this argument goes to JVM
+    -J*)
+        val=${1:2}
+        if [ "${val:0:4}" = "-Xmx" ]; then
+            JAVA_MEM=$val
+        elif [ "${val:0:4}" = "-Xss" ]; then
+            JAVA_STACK=$val
+        elif [ "${val}" = "" ]; then
+            $JAVACMD -help
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-X" ]; then
+            $JAVACMD -X
+            echo "(Prepend -J in front of these options when using 'jruby' command)" 
+            exit
+        elif [ "${val}" = "-classpath" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        elif [ "${val}" = "-cp" ]; then
+            CP="$CP$CP_DELIMITER$2"
+            CLASSPATH=""
+            shift
+        else
+            if [ "${val:0:3}" = "-ea" ]; then
+                VERIFY_JRUBY="yes"
+            elif [ "${val:0:16}" = "-Dfile.encoding=" ]; then
+                JAVA_ENCODING=$val
+            fi
+            java_args="${java_args} ${1:2}"
+        fi
+        ;;
+     # Pass -X... and -X? search options through
+     -X*\.\.\.|-X*\?)
+        ruby_args="${ruby_args} $1" ;;
+     -X+T)
+      echo "error: -X+T isn't supported in the shell launcher"
+      exit 1
+      ;;
+     -Xclassic)
+      ;;
+     # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option
+     -X*)
+     val=${1:2}
+     if expr -- "$val" : '.*[.]' > /dev/null; then
+       java_args="${java_args} -Djruby.${val}"
+     else
+       ruby_args="${ruby_args} -X${val}"
+     fi
+     ;;
+     # Match switches that take an argument
+     -C|-e|-I|-S) ruby_args="${ruby_args} $1 $2"; shift ;;
+     # Match same switches with argument stuck together
+     -e*|-I*|-S*) ruby_args="${ruby_args} $1" ;;
+     # Run with JMX management enabled
+     --manage)
+        java_args="${java_args} -Dcom.sun.management.jmxremote"
+        java_args="${java_args} -Djruby.management.enabled=true" ;;
+     # Don't launch a GUI window, no matter what
+     --headless)
+        java_args="${java_args} -Djava.awt.headless=true" ;;
+     # Run under JDB
+     --jdb)
+        if [ -z "$JAVA_HOME" ] ; then
+          JAVACMD='jdb'
+        else
+          JAVACMD="$JAVA_HOME/bin/jdb"
+        fi 
+        JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
+        java_args="${java_args} -sourcepath ${JDB_SOURCEPATH}"
+        JRUBY_OPTS="${JRUBY_OPTS} -X+C" ;;
+     --client)
+        JAVA_VM=-client ;;
+     --server)
+        JAVA_VM=-server ;;
+     --noclient)         # JRUBY-4296
+        unset JAVA_VM ;; # For IBM JVM, neither '-client' nor '-server' is applicable
+     --sample)
+        java_args="${java_args} -Xprof" ;;
+     --ng-server)
+        # Start up as Nailgun server
+        java_class=$JAVA_CLASS_NGSERVER
+        VERIFY_JRUBY=true ;;
+     --no-bootclasspath)
+        NO_BOOTCLASSPATH=true ;;
+     --ng)
+        # Use native Nailgun client to toss commands to server
+        process_special_opts "--ng" ;;
+     # Abort processing on the double dash
+     --) break ;;
+     # Other opts go to ruby
+     -*) ruby_args="${ruby_args} $1" ;;
+     # Abort processing on first non-opt arg
+     *) break ;;
+    esac
+    shift
+done
+
+# Force file.encoding to UTF-8 when on Mac, since Apple JDK defaults to MacRoman (JRUBY-3576)
+if [[ -z "$JAVA_ENCODING" ]]; then
+  java_args="${java_args} -Dfile.encoding=UTF-8"
+fi
+
+# Append the rest of the arguments
+ruby_args="${ruby_args} $@"
+
+# Put the ruby_args back into the position arguments $1, $2 etc
+set -- "${ruby_args}"
+
+JAVA_OPTS="$JAVA_OPTS $JAVA_VM $JAVA_MEM $JAVA_STACK"
+
+JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
+
+
+if [ "$nailgun_client" != "" ]; then
+  if [ -f $JRUBY_HOME/tool/nailgun/ng ]; then
+    exec $JRUBY_HOME/tool/nailgun/ng org.jruby.util.NailMain $JRUBY_OPTS "$@"
+  else
+    echo "error: ng executable not found; run 'make' in ${JRUBY_HOME}/tool/nailgun"
+    exit 1
+  fi
+else
+if [[ "$NO_BOOTCLASSPATH" != "" || ( "$VERIFY_JRUBY" != "" ) ]]; then
+  if [ "$PROFILE_ARGS" != "" ]; then
+      echo "Running with instrumented profiler"
+  fi
+
+  if [ $java_class = $JAVA_CLASS_NGSERVER -a -n "${JRUBY_OPTS}" ]; then
+    echo "warning: starting a nailgun server; discarding JRUBY_OPTS: ${JRUBY_OPTS}"
+    JRUBY_OPTS=''
+  fi
+
+
+  "$JAVACMD" $PROFILE_ARGS $JAVA_OPTS "$JFFI_OPTS" ${java_args} -classpath "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH" \
+    "-Djruby.home=$JRUBY_HOME" \
+    "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
+    "-Djruby.shell=$JRUBY_SHELL" \
+    $java_class $JRUBY_OPTS $@
+
+  # Record the exit status immediately, or it will be overridden.
+  JRUBY_STATUS=$?
+
+  if [ "$PROFILE_ARGS" != "" ]; then
+      echo "Profiling results:"
+      cat profile.txt
+      rm profile.txt
+  fi
+
+
+  exit $JRUBY_STATUS
+else
+  exec $JAVACMD $JAVA_OPTS $JFFI_OPTS ${java_args} -Xbootclasspath/a:$JRUBY_CP -classpath $CP$CP_DELIMITER$CLASSPATH \
+      -Djruby.home=$JRUBY_HOME \
+      -Djruby.lib=$JRUBY_HOME/lib -Djruby.script=jruby \
+      -Djruby.shell=$JRUBY_SHELL \
+      $java_class $JRUBY_OPTS $@
+fi
+fi
+
+# Be careful adding code down here, you might override the exit
+# status of the jruby invocation.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby200.sh b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby200.sh
new file mode 100755
index 0000000..acc3efb
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jruby200.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+find . -name '*.pack.gz' | sed 's/\(.*\).pack.gz/\1.pack.gz \1.jar/' | xargs -L1 unpack200 --remove-pack-file
+cp bin/jruby.bash bin/jruby 
+bin/jruby.bash $@
+exit
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc
new file mode 100755
index 0000000..68025f2
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc
@@ -0,0 +1,10 @@
+#!/usr/bin/env jruby
+
+require 'jruby/jrubyc'
+
+status =  JRuby::Compiler::compile_argv(ARGV)
+
+if (status != 0)
+  puts "Compilation FAILED: #{status} error(s) encountered"
+  exit status
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc.bat
new file mode 100644
index 0000000..f790466
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyc.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S jrubyc %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyd.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyd.bat
new file mode 100644
index 0000000..fa3298b
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyd.bat
@@ -0,0 +1,9 @@
+@ECHO OFF
+
+@set debug_args=-J-Xdebug -J-Xrunjdwp:transport=dt_shmem,server=y,suspend=y
+
+IF NOT "%~f0" == "~f0" GOTO :WinNT
+@"jruby.exe" %debug_args% %1 %2 %3 %4 %5 %6 %7 %8 %9
+GOTO :EOF
+:WinNT
+@"%~dp0jruby.exe" %debug_args% "%~dpn0" %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyw.exe b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyw.exe
new file mode 100644
index 0000000..d153504
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/jrubyw.exe differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake
new file mode 100755
index 0000000..bb5b395
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake
@@ -0,0 +1,27 @@
+#!/usr/bin/env jruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rake' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+version = ">= 0.a"
+
+if ARGV.first
+  str = ARGV.first
+  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
+  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
+    version = $1
+    ARGV.shift
+  end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rake', 'rake', version)
+else
+gem "rake", version
+load Gem.bin_path("rake", "rake", version)
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake.bat
new file mode 100644
index 0000000..fa628f7
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rake.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S rake %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc
new file mode 100755
index 0000000..0061654
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc
@@ -0,0 +1,27 @@
+#!/usr/bin/env jruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rdoc' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+version = ">= 0.a"
+
+if ARGV.first
+  str = ARGV.first
+  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
+  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
+    version = $1
+    ARGV.shift
+  end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rdoc', 'rdoc', version)
+else
+gem "rdoc", version
+load Gem.bin_path("rdoc", "rdoc", version)
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc.bat
new file mode 100644
index 0000000..def9400
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/rdoc.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S rdoc %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri
new file mode 100755
index 0000000..cd86865
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri
@@ -0,0 +1,27 @@
+#!/usr/bin/env jruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rdoc' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+version = ">= 0.a"
+
+if ARGV.first
+  str = ARGV.first
+  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
+  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
+    version = $1
+    ARGV.shift
+  end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rdoc', 'ri', version)
+else
+gem "rdoc", version
+load Gem.bin_path("rdoc", "ri", version)
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri.bat
new file mode 100644
index 0000000..be1322f
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/ri.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S ri %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb
new file mode 100755
index 0000000..dbcbb08
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb
@@ -0,0 +1,5 @@
+#!/usr/bin/env jruby
+require 'test/unit'
+(r = Test::Unit::AutoRunner.new(true)).process_args(ARGV) or
+  abort r.options.banner + " tests..."
+exit r.run
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb.bat b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb.bat
new file mode 100644
index 0000000..4b5ddde
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/bin/testrb.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+@"%~dp0jruby.exe" -S testrb %*
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/Darwin/libjffi-1.2.jnilib b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/Darwin/libjffi-1.2.jnilib
new file mode 100644
index 0000000..cf5d356
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/Darwin/libjffi-1.2.jnilib differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/aarch64-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/aarch64-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..14890d7
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/aarch64-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/arm-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/arm-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..81aa9b1
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/arm-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..bec3189
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-SunOS/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-SunOS/libjffi-1.2.so
new file mode 100644
index 0000000..70a45a3
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-SunOS/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Windows/jffi-1.2.dll b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Windows/jffi-1.2.dll
new file mode 100644
index 0000000..1795623
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/i386-Windows/jffi-1.2.dll differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc-AIX/libjffi-1.2.a b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc-AIX/libjffi-1.2.a
new file mode 100644
index 0000000..0eb4dd2
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc-AIX/libjffi-1.2.a differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-AIX/libjffi-1.2.a b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-AIX/libjffi-1.2.a
new file mode 100644
index 0000000..e9dbd4e
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-AIX/libjffi-1.2.a differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..e2f6598
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64le-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64le-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..4dd2190
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/ppc64le-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..bc53eac
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-SunOS/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-SunOS/libjffi-1.2.so
new file mode 100644
index 0000000..4e0f92a
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/sparcv9-SunOS/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-FreeBSD/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-FreeBSD/libjffi-1.2.so
new file mode 100644
index 0000000..516acb0
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-FreeBSD/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Linux/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Linux/libjffi-1.2.so
new file mode 100644
index 0000000..c61095c
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Linux/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-OpenBSD/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-OpenBSD/libjffi-1.2.so
new file mode 100644
index 0000000..f15bae4
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-OpenBSD/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-SunOS/libjffi-1.2.so b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-SunOS/libjffi-1.2.so
new file mode 100644
index 0000000..48477ea
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-SunOS/libjffi-1.2.so differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Windows/jffi-1.2.dll b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Windows/jffi-1.2.dll
new file mode 100644
index 0000000..9316aac
Binary files /dev/null and b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/jni/x86_64-Windows/jffi-1.2.dll differ
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.ruby-version b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.ruby-version
new file mode 100644
index 0000000..69fa968
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.ruby-version
@@ -0,0 +1 @@
+2.5.0-dev
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.travis.yml b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.travis.yml
new file mode 100644
index 0000000..a3c6261
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/.travis.yml
@@ -0,0 +1,14 @@
+language: ruby
+script:   bundle exec rake
+cache:    bundler
+sudo:     false
+
+before_install:
+  - gem install bundler
+
+after_success:
+  - bundle exec rake test:accuracy
+  - bundle exec rake benchmark:memory
+
+rvm:
+  - ruby-head
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/CHANGELOG.md b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/CHANGELOG.md
new file mode 100644
index 0000000..2970cdd
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/CHANGELOG.md
@@ -0,0 +1,397 @@
+## [v1.1.2](https://github.com/yuki24/did_you_mean/tree/v1.1.2)
+
+_<sup>released at 2017-09-24 07:28:48 UTC</sup>_
+
+**This version is compatible with Ruby 2.4 and older**
+
+#### Bug Fixes
+
+- Fixed a bug where `did_you_mean` shows duplicate suggestions when the exception is raised multiple times ([#84](https://github.com/yuki24/did_you_mean/pull/84), [<tt>c2e4008</tt>](https://github.com/yuki24/did_you_mean/commit/c2e40083cef604c00ccd10efc6d7a5036ad9eb5b))
+
+## [v1.1.1](https://github.com/yuki24/did_you_mean/tree/v1.1.1)
+
+_<sup>released at 2017-09-24 07:24:02 UTC</sup>_
+
+### This version has been yanked from Rubygems.org and is not available.
+
+## [v1.1.0](https://github.com/yuki24/did_you_mean/tree/v1.1.0)
+
+_<sup>released at 2016-12-19 23:19:06 UTC</sup>_
+
+The version `1.1.0` only has support for Ruby 2.4.0 and later. Also, all patch releasess under `1.1.*` will only be compatible with Ruby 2.4.0 and later as well. Versions under `1.0.*` will still be maintained until Ruby 2.3 is deprecated. Any other versions below `1.0` will no longer be maintained.
+
+#### New Features
+
+- Suggest a method name on a NameError from the `Struct#[]` or `Struct#[]=` method ([#73](https://github.com/yuki24/did_you_mean/pull/73)):
+
+    ```ruby
+    Struct.new(:foo).new[:fooo]
+    # => NameError: no member 'fooo' in struct
+    # Did you mean? foo
+    # foo=
+    ```
+
+- Added a public interface for the gem's spell checker:
+
+    ```ruby
+    DidYouMean::SpellChecker.new(dictionary: ['email', 'fail', 'eval']).correct('meail')
+    # => ['email']
+    ```
+
+- Methods defined on `nil` by default are no longer suggested. Note that methods, defined after the gem is loaded, will still be suggested (e.g. ActiveSupport).
+
+#### Bug Fixes
+
+- Fixed a bug where private method names were added to the dictionary when an argument was passed in to a public method. Use the `NoMethodError#private_call?` method instead ([<tt>0a1b761</tt>](https://github.com/yuki24/did_you_mean/commit/0a1b7612252055e583a373b473932f789381ca0f))
+
+## [v1.0.3](https://github.com/yuki24/did_you_mean/tree/v1.0.3)
+
+_<sup>released at 2017-09-24 07:22:07 UTC</sup>_
+
+**This version is compatible with Ruby 2.3 and older**
+
+#### Bug Fixes
+
+- Fixed a bug where `did_you_mean` shows duplicate suggestions when the exception is raised multiple times ([#84](https://github.com/yuki24/did_you_mean/pull/84), [<tt>c2e4008</tt>](https://github.com/yuki24/did_you_mean/commit/c2e40083cef604c00ccd10efc6d7a5036ad9eb5b))
+
+## [v1.0.2](https://github.com/yuki24/did_you_mean/tree/v1.0.2)
+
+_<sup>released at 2016-11-20 18:03:07 UTC</sup>_
+
+**This version is compatible with Ruby 2.3 and older**
+
+#### Features
+
+- Experimental features are officially available through `require 'did_you_mean/experimental'`
+
+#### Deprecations
+
+- `require 'did_you_mean/extra_features'` is now deprecated in favor of `require 'did_you_mean/experimental'`
+
+#### Internal Changes
+
+- Replaced the `DidYouMean::SpellCheckable` module with the `DidYouMean::SpellChecker` class. This is a slower implementation but close to the model explained in [this talk](https://speakerdeck.com/yuki24/saving-people-from-typos), more reusable and possibly makes it easier to expose the class as a public interface.
+
+## [v1.0.1](https://github.com/yuki24/did_you_mean/tree/v1.0.1)
+
+_<sup>released at 2016-05-15 05:17:22 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where the gem suggests what is actually typed by the user: [<tt>1c52c88</tt>](https://github.com/yuki24/did_you_mean/commit/1c52c887c62b0921e799f94bcc4a846dc7cbc057)
+- Fixed features that didn't work on JRuby 9.1.0.0: [<tt>dc48dde</tt>](https://github.com/yuki24/did_you_mean/commit/dc48dde1b2a8f05aab1fcf897e1cb3075a206f53), [<tt>4de23f8</tt>](https://github.com/yuki24/did_you_mean/commit/4de23f880502c80c5f321371d39c08bb0fa34040), [<tt>00e3059</tt>](https://github.com/yuki24/did_you_mean/commit/00e305971060d150fae4817b5e895d6478b37579). The local variable name correction is still disabled. Also see: [jruby/jruby#3480](https://github.com/jruby/jruby/is [...]
+
+## [v1.0.0](https://github.com/yuki24/did_you_mean/tree/v1.0.0)
+
+_<sup>released at 2015-12-25 05:13:04 UTC</sup>_
+
+#### Features
+
+- Introduced a [verbose formatter](https://github.com/yuki24/did_you_mean#verbose-formatter)
+- Introduced an easy way to enabling [experimental features](https://github.com/yuki24/did_you_mean#experimental-features)
+
+#### Bug Fixes
+
+- Fixed a bug where the Jaro-Winkler implementation returns the wrong distance when 2 identical strings are given. fixes [#58](https://github.com/yuki24/did_you_mean/pull/58)
+
+#### Internal Changes
+
+- Slightly changed the spell checking algorithm. Take a look at [<tt>e2f5b24</tt>](https://github.com/yuki24/did_you_mean/commit/e2f5b2437f967565e4830eab6077f73ae166e0a7) for more details. fixes [#60](https://github.com/yuki24/did_you_mean/issues/60)
+
+## [v1.0.0.rc1](https://github.com/yuki24/did_you_mean/tree/v1.0.0.rc1)
+
+_<sup>released at 2015-12-25 05:02:25 UTC</sup>_
+
+#### Internal Chagens
+
+- No longer uses `TracePoint` API by default. fixes [#55](https://github.com/yuki24/did_you_mean/issues/55) and [#56](https://github.com/yuki24/did_you_mean/issues/56)
+
+## [v1.0.0.beta3](https://github.com/yuki24/did_you_mean/tree/v1.0.0.beta3)
+
+_<sup>released at 2015-12-25 04:56:13 UTC</sup>_
+
+#### Internal Changes
+
+- Use the `frozen-string-literal` pragma rather than calling `.freeze` everywhere
+- Use the `NameError#receiver` method in `DidYouMean:: ClassNameChecker` to know the namespace where the constant call is made
+- Refactored the `SpellCheckerTest`
+
+## [v1.0.0.beta2](https://github.com/yuki24/did_you_mean/tree/v1.0.0.beta2)
+
+_<sup>released at 2015-12-25 04:50:36 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where the gem doesn't install properly on Ruby 2.3.0dev
+
+## [v1.0.0.beta1](https://github.com/yuki24/did_you_mean/tree/v1.0.0.beta1)
+
+_<sup>released at 2015-12-25 05:27:53 UTC</sup>_
+
+#### Breaking Changes
+
+- Dropped support for MRIs older than 2.3, JRuby and Rubinus
+
+#### Internal Changes
+
+- The C extension has been removed since the `NameError#receiver` method has become part of the MRI 2.3
+- The interception gem has been removed from the dependencies
+- Removed code that was needed to support multiple Ruby implementations
+
+## [v0.10.0](https://github.com/yuki24/did_you_mean/tree/v0.10.0)
+
+_<sup>released at 2015-08-21 06:44:11 UTC</sup>_
+
+#### Features
+
+- Now it corrects an instance variable name if the ivar name is mistyped and `NoMethodError` is raised:
+
+```ruby
+@number = 1
+@nubmer.zero?
+# => NoMethodError: undefined method `zero?' for nil:NilClass
+#
+#     Did you mean? @number
+#
+```
+
+- Support for JRuby 9.0.0.0
+- Prefix-based correction ( [@tjohn](https://github.com/tjohn), [#50](https://github.com/yuki24/did_you_mean/issues/50 "Match start of method name"), [#49](https://github.com/yuki24/did_you_mean/issues/49 "Use Jaro distance instead of Jaro-Winkler distance"))
+- Correction search is about 75% faster than 0.9.10
+
+#### Breaking Changes
+
+- The ActiveRecord integration has been removed
+
+## [v0.9.10](https://github.com/yuki24/did_you_mean/tree/v0.9.10)
+
+_<sup>released at 2015-05-14 03:04:47 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where a duplicate "did you mean?" message was appended each time `#to_s` is called ( [@danfinnie](https://github.com/danfinnie), [#51](https://github.com/yuki24/did_you_mean/issues/51 "Duplicate output for constants in separate gem"))
+
+## [v0.9.9](https://github.com/yuki24/did_you_mean/tree/v0.9.9)
+
+_<sup>released at 2015-05-13 03:48:19 UTC</sup>_
+
+#### Features
+
+- Order word suggestions based on Levenshtein distance ( [@tleish](https://github.com/tleish), [#31](https://github.com/yuki24/did_you_mean/pull/31))
+
+#### Internal Changes
+
+- Reduce memory allocation by about 40%
+- Speed up Levenshtein distance calculation by about 40%
+- The Java extension has been replaced with a pure JRuby implementation
+
+## [v0.9.8](https://github.com/yuki24/did_you_mean/tree/v0.9.8)
+
+_<sup>released at 2015-04-12 01:55:27 UTC</sup>_
+
+#### Internal Changes
+
+- Speed up Levenshtein by 50% and reduce 97% of memory usage
+
+## [v0.9.7](https://github.com/yuki24/did_you_mean/tree/v0.9.7)
+
+_<sup>released at 2015-04-02 04:20:26 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed an issue where _did\_you\_mean_ doesn't install on JRuby properly.
+
+## [v0.9.6](https://github.com/yuki24/did_you_mean/tree/v0.9.6)
+
+_<sup>released at 2015-01-24 23:19:27 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean incorrectly suggests protected methods when it just isn't callable ( [@glittershark](https://github.com/glittershark), [#34](https://github.com/yuki24/did_you_mean/issues/34 "Did\_you\_mean incorrectly called when attempting to call protected/private method"))
+
+## [v0.9.5](https://github.com/yuki24/did_you_mean/tree/v0.9.5)
+
+_<sup>released at 2015-01-07 12:41:23 UTC</sup>_
+
+#### Bug Fixes
+
+- Whitelist `#safe_constantize` method from `ActiveSupport::Inflector` to avoid significant performance slowdown ( [@tleish](https://github.com/tleish), [#19](https://github.com/yuki24/did_you_mean/issues/19 "Significant Slowdown when Using Debugger"), [#20](https://github.com/yuki24/did_you_mean/pull/20 "Whitelisting safe\_constantize (ActiveSupport::Inflector) method"))
+
+## [v0.9.4](https://github.com/yuki24/did_you_mean/tree/v0.9.4)
+
+_<sup>released at 2014-11-19 20:00:00 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where no suggestions will be made on JRuby
+
+## [v0.9.3](https://github.com/yuki24/did_you_mean/tree/v0.9.3)
+
+_<sup>released at 2014-11-18 03:50:11 UTC</sup>_
+
+**This version has been yanked from rubygems.org as it doesn't work with jRuby at all. Please upgrade to 0.9.4 or higher as soon as possible.**
+
+#### Internal Changes
+
+- Replaced the crazy C extension with a so much better one (thanks to [@nobu](https://github.com/nobu)!)
+
+## [v0.9.2](https://github.com/yuki24/did_you_mean/tree/v0.9.2)
+
+_<sup>released at 2014-11-17 15:32:33 UTC</sup>_
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean doesn't compile on Ruby 2.1.2/2.1.5 ( [#16](https://github.com/yuki24/did_you_mean/issues/16 "Gem building failed on Debian 6.0.10 x86\_64"))
+
+## [v0.9.1](https://github.com/yuki24/did_you_mean/tree/v0.9.1)
+
+_<sup>released at 2014-11-16 18:54:24 UTC</sup>_
+
+**This version has been yanked from rubygems.org as it doesn't compile on Ruby 2.1.2 and 2.1.5. Please upgrade to 0.9.4 or higher as soon as possible.**
+
+#### Internal Changes
+
+- Shrink the gem size by removing unneeded ruby header files.
+- Now it forces everyone to upgrade the gem when they upgrade Ruby to a new version. This avoids introducing a bug like [#14](https://github.com/yuki24/did_you_mean/issues/14 "Compatibility with `letter\_opener` gem").
+
+## [v0.9.0](https://github.com/yuki24/did_you_mean/tree/v0.9.0)
+
+_<sup>released at 2014-11-09 01:26:31 UTC</sup>_
+
+#### Features
+
+- did\_you\_mean now suggests instance variable names if `@` is missing ( [#12](https://github.com/yuki24/did_you_mean/issues/12 "Suggest instance- and class-vars"), [<tt>39d1e2b</tt>](https://github.com/yuki24/did_you_mean/commit/39d1e2bd66d6ff8acbc4dd5da922fc7e5fcefb20))
+
+```ruby
+@full_name = "Yuki Nishijima"
+first_name, last_name = full_name.split(" ")
+# => NameError: undefined local variable or method `full_name' for main:Object
+#
+#     Did you mean? @full_name
+#
+```
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean changes some behaviours of Ruby 2.1.3/2.1.4 installed on Max OS X ( [#14](https://github.com/yuki24/did_you_mean/issues/14 "Compatibility with `letter\_opener` gem"), [<tt>44c451f</tt>](https://github.com/yuki24/did_you_mean/commit/44c451f8c38b11763ba28ddf1ceb9696707ccea0), [<tt>9ebde21</tt>](https://github.com/yuki24/did_you_mean/commit/9ebde211e92eac8494e704f627c62fea7fdbee16))
+- Fixed a bug where sometimes `NoMethodError` suggests duplicate method names ( [<tt>9865cc5</tt>](https://github.com/yuki24/did_you_mean/commit/9865cc5a9ce926dd9ad4c20d575b710e5f257a4b))
+
+## [v0.8.0](https://github.com/yuki24/did_you_mean/tree/v0.8.0)
+
+_<sup>released at 2014-10-27 02:03:13 UTC</sup>_
+
+**This version has been yanked from rubygems.org as it has a serious bug with Ruby 2.1.3 and 2.1.4 installed on Max OS X. Please upgrade to 0.9.4 or higher as soon as possible.**
+
+#### Features
+
+- JRuby support!
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean unexpectedly disables [better\_errors](https://github.com/charliesome/better_errors)'s REPL
+- Replaced [binding\_of\_caller](https://github.com/banister/binding_of_caller) dependency with [interception](https://github.com/ConradIrwin/interception)
+- Fixed the wrong implementation of Levenshtein algorithm ( [#2](https://github.com/yuki24/did_you_mean/pull/2 "Fix bug of DidYouMean::Levenshtein#min3."), [@fortissimo1997](https://github.com/fortissimo1997))
+
+## [v0.7.0](https://github.com/yuki24/did_you_mean/tree/v0.7.0)
+
+_<sup>released at 2014-09-26 03:37:18 UTC</sup>_
+
+**This version has been yanked from rubygems.org as it has a serious bug with Ruby 2.1.3 and 2.1.4 installed on Max OS X. Please upgrade to 0.9.4 or higher as soon as possible.**
+
+#### Features
+
+- Added support for Ruby 2.1.3, 2.2.0-preview1 and ruby-head
+- Added support for ActiveRecord 4.2.0.beta1
+- Word searching is now about 40% faster than v0.6.0
+- Removed `text` gem dependency
+- Better output on pry and Rspec
+
+#### Internal Changes
+
+- A lot of internal refactoring
+
+## [v0.6.0](https://github.com/yuki24/did_you_mean/tree/v0.6.0)
+
+_<sup>released at 2014-05-18 00:23:24 UTC</sup>_
+
+**This version has been yanked from rubygems.org as it has a serious bug with Ruby 2.1.3 and 2.1.4 installed on Max OS X. Please upgrade to 0.9.4 or higher as soon as possible.**
+
+#### Features
+
+- Added basic support for constants. Now you'll see class name suggestions when you misspelled a class names/module names:
+
+```ruby
+> Ocject
+# => NameError: uninitialized constant Ocject
+#
+#     Did you mean? Object
+#
+```
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean segfaults on Ruby head(2.2.0dev)
+
+## [v0.5.0](https://github.com/yuki24/did_you_mean/tree/v0.5.0)
+
+_<sup>released at 2014-05-10 17:59:54 UTC</sup>_
+
+#### Features
+
+- Added support for Ruby 2.1.2
+
+## [v0.4.0](https://github.com/yuki24/did_you_mean/tree/v0.4.0)
+
+_<sup>released at 2014-04-20 02:10:31 UTC</sup>_
+
+#### Features
+
+- did\_you\_mean now suggests a similar attribute name when you misspelled it.
+
+```ruby
+User.new(flrst_name: "wrong flrst name")
+# => ActiveRecord::UnknownAttributeError: unknown attribute: flrst_name
+#
+#     Did you mean? first_name: string
+#
+```
+
+#### Bug Fixes
+
+- Fixed a bug where did\_you\_mean doesn't work with `ActiveRecord::UnknownAttributeError`
+
+## [v0.3.1](https://github.com/yuki24/did_you_mean/tree/v0.3.1)
+
+_<sup>released at 2014-03-20 23:16:20 UTC</sup>_
+
+#### Features
+
+- Changed output for readability.
+- Made the spell checking algorithm slight better to find the correct method.
+
+## [v0.3.0](https://github.com/yuki24/did_you_mean/tree/v0.3.0)
+
+_<sup>released at 2014-03-20 23:13:13 UTC</sup>_
+
+#### Features
+
+- Added support for Ruby 2.1.1 and 2.2.0(head).
+
+## [v0.2.0](https://github.com/yuki24/did_you_mean/tree/v0.2.0)
+
+_<sup>released on 2014-03-20 23:12:13 UTC</sup>_
+
+#### Features
+
+- did\_you\_mean no longer makes Ruby slow.
+
+#### Breaking Changes
+
+- dropped support for JRuby and Rubbinious.
+
+## [v0.1.0: First Release](https://github.com/yuki24/did_you_mean/tree/v0.1.0)
+
+_<sup>released on 2014-03-20 23:11:14 UTC</sup>_
+
+- Now you will have "did you mean?" experience in Ruby!
+- but still very experimental since this gem makes Ruby a lot slower.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Gemfile b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Gemfile
new file mode 100644
index 0000000..e8f0cd6
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Gemfile
@@ -0,0 +1,8 @@
+source 'https://rubygems.org'
+
+# Specify your gem's dependencies in did_you_mean.gemspec
+gemspec
+
+gem 'benchmark-ips'
+gem 'memory_profiler'
+gem 'jaro_winkler', '>= 1.4.0'
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/LICENSE.txt b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/LICENSE.txt
new file mode 100644
index 0000000..eb5808c
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2014-2016 Yuki Nishijima
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/README.md b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/README.md
new file mode 100644
index 0000000..e360478
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/README.md
@@ -0,0 +1,122 @@
+# did_you_mean [![Gem Version](https://badge.fury.io/rb/did_you_mean.svg)](https://rubygems.org/gems/did_you_mean) [![Build Status](https://travis-ci.org/yuki24/did_you_mean.svg?branch=master)](https://travis-ci.org/yuki24/did_you_mean)
+
+## Installation
+
+Ruby 2.3 and later ships with this gem and it will automatically be `require`d when a Ruby process starts up. No special setup is required.
+
+## Examples
+
+### NameError
+
+#### Correcting a Misspelled Method Name
+
+```ruby
+methosd
+# => NameError: undefined local variable or method `methosd' for main:Object
+#    Did you mean?  methods
+#                   method
+```
+
+#### Correcting a Misspelled Class Name
+
+```ruby
+OBject
+# => NameError: uninitialized constant OBject
+#    Did you mean?  Object
+```
+
+#### Suggesting an Instance Variable Name
+
+```ruby
+@full_name = "Yuki Nishijima"
+first_name, last_name = full_name.split(" ")
+# => NameError: undefined local variable or method `full_name' for main:Object
+#    Did you mean?  @full_name
+```
+
+#### Correcting a Class Variable Name
+
+```ruby
+@@full_name = "Yuki Nishijima"
+@@full_anme
+# => NameError: uninitialized class variable @@full_anme in Object
+#    Did you mean?  @@full_name
+```
+
+### NoMethodError
+
+```ruby
+full_name = "Yuki Nishijima"
+full_name.starts_with?("Y")
+# => NoMethodError: undefined method `starts_with?' for "Yuki Nishijima":String
+#    Did you mean?  start_with?
+```
+
+### KeyError
+
+```ruby
+hash = {foo: 1, bar: 2, baz: 3}
+hash.fetch(:fooo)
+# => KeyError: key not found: :fooo
+#    Did you mean?  :foo
+```
+
+## Experimental Features
+
+Aside from the basic features above, the `did_you_mean` gem comes with experimental features. They can be enabled by calling `require 'did_you_mean/experimental'`.
+
+Note that **these experimental features should never be enabled in production as they would impact Ruby's performance and use some unstable Ruby APIs.**
+
+### Correcting an Instance Variable When It's Incorrectly Spelled
+
+```ruby
+require 'did_you_mean/experimental'
+
+@full_name = "Yuki Nishijima"
+@full_anme.split(" ")
+# => NoMethodError: undefined method `split' for nil:NilClass
+#    Did you mean?  @full_name
+```
+
+### Displaying a Warning When `initialize` is Incorrectly Spelled
+
+```ruby
+require 'did_you_mean/experimental'
+
+class Person
+  def intialize
+    ...
+  end
+end
+# => warning: intialize might be misspelled, perhaps you meant initialize?
+```
+
+## Verbose Formatter
+
+This verbose formatter changes the error message format to take more lines/spaces so it'll be slightly easier to read the suggestions. This formatter can totally be used in any environment including production.
+
+```ruby
+OBject
+# => NameError: uninitialized constant OBject
+#    Did you mean?  Object
+
+require 'did_you_mean/verbose'
+OBject
+# => NameError: uninitialized constant OBject
+#
+#        Did you mean? Object
+#
+```
+
+## Contributing
+
+1. Fork it (http://github.com/yuki24/did_you_mean/fork)
+2. Create your feature branch (`git checkout -b my-new-feature`)
+3. Commit your changes (`git commit -am 'Add some feature'`)
+4. Make sure all tests pass (`bundle exec rake`)
+5. Push to the branch (`git push origin my-new-feature`)
+6. Create new Pull Request
+
+## License
+
+Copyright (c) 2014-16 Yuki Nishijima. See MIT-LICENSE for further details.
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Rakefile b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Rakefile
new file mode 100644
index 0000000..4afcc5f
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/Rakefile
@@ -0,0 +1,47 @@
+require 'bundler/gem_tasks'
+require 'rake/testtask'
+
+Rake::TestTask.new do |task|
+  task.libs << "test"
+
+  task.test_files = Dir['test/**/*_test.rb'].reject {|path| /(experimental)/ =~ path }
+  task.verbose    = true
+  task.warning    = true
+end
+
+Rake::TestTask.new("test:experimental") do |task|
+  task.libs << "test"
+  task.pattern = 'test/experimental/**/*_test.rb'
+  task.verbose = true
+  task.warning = true
+  task.ruby_opts << "-rdid_you_mean/experimental"
+end
+
+task default: %i(test test:experimental)
+
+namespace :test do
+  namespace :accuracy do
+    desc "Download Wiktionary's Simple English data and save it as a dictionary"
+    task :prepare do
+      sh 'ruby evaluation/dictionary_generator.rb'
+    end
+  end
+
+  desc "Calculate accuracy of the gems' spell checker"
+  task :accuracy do
+    if !File.exist?("evaluation/dictionary.yml")
+      puts 'Generating dictionary for evaluation:'
+      Rake::Task["test:accuracy:prepare"].execute
+      puts "\n"
+    end
+
+    sh 'ruby evaluation/calculator.rb'
+  end
+end
+
+namespace :benchmark do
+  desc "Measure memory usage by the did_you_mean gem"
+  task :memory do
+    sh 'ruby benchmark/memory_usage.rb'
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/memory_usage.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/memory_usage.rb
new file mode 100644
index 0000000..9f50199
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/memory_usage.rb
@@ -0,0 +1,12 @@
+require 'memory_profiler'
+require 'did_you_mean/jaro_winkler'
+
+str1, str2 = "user_signed_in?", "user_logged_in?"
+
+report = MemoryProfiler.report do
+  80.times do
+    DidYouMean::Jaro.distance str1, str2
+  end
+end
+
+report.pretty_print
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/speed.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/speed.rb
new file mode 100644
index 0000000..d674944
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/jaro_winkler/speed.rb
@@ -0,0 +1,14 @@
+require 'benchmark/ips'
+require 'did_you_mean'
+
+Benchmark.ips do |x|
+  x.report "before" do
+    DidYouMean::Jaro.before_distance "user_signed_in?", "user_logged_in?"
+  end
+
+  x.report "after" do
+    DidYouMean::Jaro.after_distance "user_signed_in?", "user_logged_in?"
+  end
+
+  x.compare!
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/memory_usage.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/memory_usage.rb
new file mode 100644
index 0000000..8980242
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/memory_usage.rb
@@ -0,0 +1,12 @@
+require 'memory_profiler'
+require 'did_you_mean/levenshtein'
+
+str1, str2 = "user_signed_in?", "user_logged_in?"
+
+report = MemoryProfiler.report do
+  80.times do
+    DidYouMean::Levenshtein.distance str1, str2
+  end
+end
+
+report.pretty_print
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/speed.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/speed.rb
new file mode 100644
index 0000000..0217588
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/levenshtein/speed.rb
@@ -0,0 +1,17 @@
+require 'benchmark/ips'
+require 'did_you_mean'
+require 'did_you_mean/levenshtein'
+
+STR1, STR2 = "user_signed_in?", "user_logged_in?"
+
+Benchmark.ips do |x|
+  x.report "enumerable" do
+    DidYouMean::Levenshtein.before_distance STR1, STR2
+  end
+
+  x.report "while" do
+    DidYouMean::Levenshtein.after_distance STR1, STR2
+  end
+
+  x.compare!
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/memory_usage.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/memory_usage.rb
new file mode 100644
index 0000000..a7e1f70
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/benchmark/memory_usage.rb
@@ -0,0 +1,16 @@
+# frozen-string-literal: true
+
+require 'memory_profiler'
+require 'did_you_mean'
+
+# public def foo; end
+# error      = (self.fooo rescue $!)
+# executable = -> { error.to_s }
+
+METHODS    = ''.methods
+INPUT      = 'start_with?'
+collection = DidYouMean::SpellChecker.new(dictionary: METHODS)
+executable = proc { collection.correct(INPUT) }
+
+GC.disable
+MemoryProfiler.report { 100.times(&executable) }.pretty_print
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/did_you_mean.gemspec b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/did_you_mean.gemspec
new file mode 100644
index 0000000..d54bf14
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/did_you_mean.gemspec
@@ -0,0 +1,25 @@
+# coding: utf-8
+lib = File.expand_path('../lib', __FILE__)
+$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
+require 'did_you_mean/version'
+
+Gem::Specification.new do |spec|
+  spec.name          = "did_you_mean"
+  spec.version       = DidYouMean::VERSION
+  spec.authors       = ["Yuki Nishijima"]
+  spec.email         = ["mail@yukinishijima.net"]
+  spec.summary       = '"Did you mean?" experience in Ruby'
+  spec.description   = 'The gem that has been saving people from typos since 2014.'
+  spec.homepage      = "https://github.com/yuki24/did_you_mean"
+  spec.license       = "MIT"
+
+  spec.files         = `git ls-files`.split($/)
+  spec.test_files    = spec.files.grep(%r{^(test)/})
+  spec.require_paths = ["lib"]
+
+  spec.required_ruby_version = '>= 2.5.0dev'
+
+  spec.add_development_dependency "bundler"
+  spec.add_development_dependency "rake"
+  spec.add_development_dependency "minitest"
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/CHANGELOG.md.erb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/CHANGELOG.md.erb
new file mode 100644
index 0000000..ae04580
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/CHANGELOG.md.erb
@@ -0,0 +1,8 @@
+<% releases.each do |release| %>
+## [<%= release.name %>](https://github.com/<%= repository %>/tree/<%= release.tag_name %>)
+
+_<sup>released at <%= release.published_at %></sup>_
+
+<%= release.body.gsub(/\r\n/, "\n") %>
+
+<% end %>
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/changelog_generator.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/changelog_generator.rb
new file mode 100644
index 0000000..3e7e8d1
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/doc/changelog_generator.rb
@@ -0,0 +1,34 @@
+require 'octokit'
+require 'reverse_markdown'
+require 'erb'
+
+class ChangeLogGenerator
+  attr :repository, :template_path, :changelog_path
+
+  def initialize(repository, template_path: "CHANGELOG.md.erb", changelog_path: "CHANGELOG.md")
+    @repository     = repository
+    @template_path  = template_path
+    @changelog_path = changelog_path
+  end
+
+  def generate_and_save!
+    changelog_in_md   = ERB.new(template).result(binding)
+    changelog_in_html = Octokit.markdown(changelog_in_md, context: repository, mode: "gfm")
+
+    File.open(changelog_path, 'w') do |file|
+      file.write ReverseMarkdown.convert(changelog_in_html, github_flavored: true)
+    end
+  end
+
+  private
+
+  def template
+    open("#{__dir__}/#{template_path}").read
+  end
+
+  def releases
+    @releases ||= Octokit.releases(repository)
+  end
+end
+
+ChangeLogGenerator.new("yuki24/did_you_mean").generate_and_save!
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/calculator.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/calculator.rb
new file mode 100644
index 0000000..e987821
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/calculator.rb
@@ -0,0 +1,105 @@
+# frozen-string-literal: true
+
+require 'benchmark'
+require 'did_you_mean'
+
+def report(message, &block)
+  time = 1000 * Benchmark.realtime(&block)
+
+  if (time / 1000 / 60) >= 1
+    minutes = (time / 1000 / 60).floor
+    seconds = (time % (60 * 1000)) / 1000
+
+    puts " \e[36m%2dm%.3fs:\e[0m %s" % [minutes, seconds, message]
+  elsif (time / 1000) >= 1
+    seconds = (time % (60 * 1000)) / 1000
+
+    puts " \e[36m%9.3fs:\e[0m %s" % [seconds, message]
+  else
+    puts " \e[36m%8.1fms:\e[0m %s" % [time, message]
+  end
+
+  time
+end
+
+puts "did_you_mean version: #{DidYouMean::VERSION}\n\n"
+
+report "loading program" do
+  require 'yaml'
+  require 'set'
+
+  begin
+    require 'jaro_winkler'
+    DidYouMean::JaroWinkler.module_eval do
+      module_function
+      def distance(str1, str2)
+        ::JaroWinkler.distance(str1, str2)
+      end if RUBY_ENGINE != 'jruby'
+    end
+  rescue LoadError, NameError => e
+    puts "couldn't load the jaro_winkler gem: #{e.message}\n\n"
+  end
+end
+
+report "loading dictionary" do
+  yaml = open("evaluation/dictionary.yml").read
+  yaml = YAML.load(yaml).map{|word| word.downcase.tr(" ", "_") }
+
+  DICTIONARY = Set.new(yaml)
+end
+
+report "loading correct/incorrect words" do
+  SPELL_CHECKER   = DidYouMean::SpellChecker.new(dictionary: DICTIONARY)
+  INCORRECT_WORDS = YAML.load(open("evaluation/incorrect_words.yaml").read)
+end
+
+total_count         = 0
+correct_count       = 0
+words_not_corrected = []
+filename            = "log/words_not_corrected_#{Time.now.to_i}.yml"
+
+puts <<-MSG
+
+ Total number of test data: #{INCORRECT_WORDS.size}
+
+MSG
+
+report "calculating accuracy" do
+  INCORRECT_WORDS.each_with_index do |(expected, user_input), index|
+    if DICTIONARY.include?(expected)
+      total_count += 1
+
+      corrections = SPELL_CHECKER.correct(user_input)
+      if corrections.first == expected
+        correct_count += 1
+      else
+        words_not_corrected << {
+          'input'    => user_input,
+          'expected' => expected,
+          'actual'   => corrections
+        }
+      end
+    end
+
+    puts "processed #{index} items" if index % 100 == 0
+  end
+
+  puts "\n"
+end
+
+puts <<-MSG
+
+Evaulation result
+
+  Total count  : #{total_count}
+  Correct count: #{correct_count}
+  Accuracy     : #{correct_count.to_f / total_count}
+
+MSG
+
+Dir.mkdir('log') unless File.exist?('log')
+File.open(filename, 'w') do |file|
+  file.write(words_not_corrected.to_yaml)
+end
+
+puts "Incorrect corrections were logged to #{filename}."
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/dictionary_generator.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/dictionary_generator.rb
new file mode 100644
index 0000000..f7ec9e3
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/dictionary_generator.rb
@@ -0,0 +1,37 @@
+require 'open-uri'
+require 'cgi'
+require 'json'
+
+per_page = 500
+base_url = "https://simple.wiktionary.org/w/api.php?action=query&aplimit=#{per_page}&list=allpages&format=json"
+filename = "evaluation/dictionary.yml"
+apfrom   = ""
+num      = 0
+titles   = []
+
+loop do
+  url = base_url + "&apfrom=#{apfrom}"
+
+  puts "downloading page %2d: #{url}" % num
+
+  body   = open(url).read
+  json   = JSON.load(body)
+  count  = json["query"]["allpages"].size
+  apfrom = CGI.escape(json["query"]["allpages"].last['title']) if count > 0
+
+  titles += json["query"]["allpages"].map {|hash| hash["title"] }
+  num    += 1
+
+  break if count != per_page
+end
+
+require 'yaml'
+
+File.open(filename, 'w') do |file|
+  file.write(titles.uniq.to_yaml)
+end
+
+puts "
+Number of titles: #{titles.uniq.size}
+Dictionary saved: #{filename}
+"
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/incorrect_words.yaml b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/incorrect_words.yaml
new file mode 100644
index 0000000..8d86083
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/evaluation/incorrect_words.yaml
@@ -0,0 +1,1161 @@
+# This data is based on Birkbeck Spelling Error Corpus: http://ota.ox.ac.uk/headers/0643.xml
+# More specifically, this is a yaml version of the data in FAWTHROP1DAT.643 and FAWTHROP2DAT.643.
+# released under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
+# https://creativecommons.org/licenses/by-nc-sa/3.0/
+---
+abattoir: abbatoir
+abhorrence: abhorence
+absence: absense
+absorbent: absorbant
+absorption: absorbtion
+accede: acceed
+accelerate: acellerate
+accessible: accesible
+accidentally: accidently
+accommodate: accomodate
+accommodation: accomodation
+accommodations: accomodations
+accompaniment: accompanimen
+accompanying: acompaning
+accomplice: acomplice
+accrued: acrued
+accumulated: acumulated
+accustom: acustom
+achievement: acheivement
+acknowledgment: acknowledgement
+acquaintance: acquantance
+acquiesce: aquiese
+acquiescence: acquiesence
+acquire: aquire
+actually: actualy
+adaptability: adaptibility
+addition: additon
+address: adress
+adequately: adequattly
+adjacent: ajacent
+adjourned: adjorned
+administration: adminstration
+admissible: admissable
+admitting: admiting
+advantageous: advantageos
+advice: advise
+affidavit: afidavit
+aggravated: agravated
+aghast: agast
+agreeable: agreable
+allotted: alloted
+also: allso
+alumnae: alumni
+alumni: alumnae
+amateur: amatuer
+amiable: aimiable
+ammonia: amonia
+analogous: analagous
+analysis: analsis
+analyze: analize
+angel: angell
+anniversary: anniversery
+announcement: anouncement
+annoyance: anoyance
+answer: anwser
+antarctic: antartic
+any: anye
+anything: anythin
+apollo: appolo
+apology: appology
+apparent: apparant
+appearance: appearence
+appearing: appearin
+appetite: appitite
+appetites: appatites
+appropriate: apropriate
+appropriation: apropriation
+approximate: aproximate
+approximately: aproximatly
+archaeological: archeological
+ascertain: assertain
+asinine: assinine
+asking: askin
+asleep: asleeep
+assassinate: assasinate
+assessment: assesment
+assiduous: assidious
+assistance: assistence
+attorneys: attornies
+authoritative: authorative
+auxiliary: auxillary
+available: availble
+awkward: aukward
+bachelor: batchelor
+balloon: baloon
+banana: bananna
+bankruptcy: bankrupcy
+bargaining: baragining
+battalion: batallion
+beam: beame
+before: befor
+beginning: begining
+believe: belive
+belligerent: beligerant
+beneficent: beneficient
+beneficial: benificial
+bitch: bich
+brake: brakke
+brethren: bretheren
+brief: brif
+britain: britian
+britannia: britania
+brown: broun
+bungalow: bungalo
+buoyancy: bouyancy
+buoyant: bouyant
+buried: burried
+bushel: bushell
+business: busness
+buying: buyin
+cancellation: cancelation
+calling: callin
+cantaloupe: cantaloube
+caribbean: carribean
+catalogues: catologues
+category: catagorey
+cemetery: cemetary
+chauffeur: chauffuer
+chemistry: chemestry
+chimneys: chimnies
+cincinnati: cincinatti
+clever: cleva
+coalesced: coalesed
+coherent: coherant
+coliseum: colosium
+collateral: calateral
+colossal: collosal
+colossus: collosus
+commanded: commaunded
+commission: commision
+commitment: committment
+committee: committe
+communicate: comunicate
+comparative: comparitive
+comparatively: comparitively
+compendium: conpendium
+competent: compitent
+concede: consede
+conceive: concieve
+conceived: concieved
+conditions: condicions
+confectionery: confectionary
+confirmation: confermation
+confusing: confusin
+connoisseurs: connoiseurs
+conscience: concience
+conscientious: conscientous
+consensus: concensus
+considering: consderin
+consistent: consistant
+conspired: conpired
+consumer: comsumer
+contemptible: contempible
+continuous: continous
+controllable: controlable
+controversy: controversey
+conveniently: conviently
+coolly: cooly
+corduroy: corderoy
+correspondence: correspondanc
+corrugated: corrigated
+could: coud
+counting: countin
+countryman: countriman
+craftsman: craftman
+curiosity: curiousity
+curriculum: curicculum
+customary: customery
+cynical: synical
+darling: darlin
+decidedly: dicidely
+deem: deam
+definitely: definatly
+delinquent: delinquint
+delirious: dilirious
+delving: delvin
+denying: denyin
+dependant: dependent
+depreciation: depeciation
+descendant: descendent
+description: desacription
+despair: dispair
+deuce: duece
+develop: develope
+development: developement
+dictionary: dictionery
+dignitary: dignatary
+dilapidated: dilapadated
+diminish: diminsh
+dining: dinning
+diphtheria: diptheria
+disappoint: dissappoint
+disappointment: dissappointment
+disastrous: disasterous
+discipline: disiplin
+discrete: discite
+dispel: dispell
+dissipate: disippate
+divine: devine
+doctor: docter
+doctors: docters
+dormitory: dormatory
+doubt: doupt
+drastically: drasticly
+drawing: drawin
+dreaming: dreamin
+drew: drewe
+dropped: droped
+drunkenness: drunkeness
+duchess: dutchess
+duly: duely
+during: durin
+earnest: ernest
+ecstasy: ecstacy
+effecting: effectinge
+effeminate: affeminate
+effervescent: effervesent
+efficiency: effeciency
+eisenhower: eisenhhower
+eligible: elegable
+eliminate: illiminate
+embarrass: embarass
+embarrassment: embarrasment
+encyclopedia: encylopedia
+endorsement: endorsment
+enemy: emeny
+engineers: egnineers
+enlarged: enlargd
+entertained: enterteyned
+equipped: equipt
+equivalent: equivelant
+esteemed: estimed
+every: evrey
+exaggerate: exagerate
+exaggeration: exageration
+examination: eximination
+examining: examinin
+excellence: excelence
+exercises: excercises
+exhilarating: exhilirating
+exhorted: exorted
+existence: existance
+exorbitant: exhorbitant
+experience: experiance
+explicitly: explisitly
+exquisite: exqusite
+eyeing: eying
+facilitate: facilatate
+fascinating: facinating
+fatiguing: fatiging
+fear: feare
+february: febuary
+fictitious: fictitous
+fielder: fiedler
+fiery: firey
+fighting: fieghting
+filipinos: philipinoes
+filthiness: filthness
+finally: finaly
+flammable: flamable
+flourished: florished
+foreign: forien
+forthright: fortright
+forty: fourty
+fox: foxx
+frescos: frescoes
+friend: freind
+fulfill: fullfil
+fundamental: fundemental
+fundamentally: fundementally
+gardener: gardner
+gauge: guage
+generosity: generousity
+genius: genious
+ghastly: gastly
+gnawing: knawing
+gone: gonne
+government: goverment
+grabbing: grabbin
+grammar: grammer
+gramophone: grammophon
+grandeur: granduer
+grateful: greatful
+grievous: grievious
+grill: grille
+guarantee: gaurantee
+guaranteed: guarenteed
+guardian: guardien
+guttural: gutteral
+hammarskjold: hammerskjold
+hand: hande
+handkerchief: hankerchief
+handsome: hansome
+harass: harrass
+having: haveing
+heartrending: heartrendering
+height: heighth
+heinous: hienous
+hemorrhage: hemorrage
+heyday: heydey
+himself: himselfe
+hindrance: hinderence
+humbly: humly
+hurricane: huricane
+hygiene: hygeine
+identified: indentified
+idiosyncrasy: idiocyncracy
+imagination: imagnation
+imitation: immitation
+immediately: imidatly
+immensely: immensly
+impedance: impedence
+impresario: impressario
+incense: insense
+incessant: incesant
+incidentally: incidently
+incompatibility: incompatability
+inconvenience: inconvience
+incorrigible: incorigible
+incredible: incredable
+indefinite: indefinate
+independence: independance
+indictment: inditement
+indispensable: indispensible
+inevitable: inevitible
+infallible: infalable
+infinite: infinate
+ingratitude: ingratitoode
+innocuous: inocuous
+inoculate: innoculate
+insistence: insistance
+instantaneous: instantanous
+instead: insted
+intercede: intersede
+interfered: interferred
+interference: intereference
+interrupted: interupted
+invariably: invarably
+irrelevant: irrelavent
+irreparable: irrepairable
+irresistible: irristible
+itemized: itimized
+jackknife: jacknife
+jaguar: jagaur
+japanese: japaneze
+jaundice: jaundise
+jealousy: jelousy
+jeopardize: jeprodise
+judgment: judgement
+kaleidoscope: kaliedoscope
+kapok: kapock
+khaki: kahki
+kimono: kimona
+kindergarten: kindergarden
+kitchen: kitchin
+knickknacks: knicknacks
+labeled: labelled
+laboratory: labratory
+language: langauge
+leeway: leaway
+leisure: liesure
+leveled: levelled
+library: libray
+license: lisence
+lieutenant: leutenant
+linoleum: linolium
+liquefied: liquified
+liquefy: liquify
+livelihood: livelyhood
+lodestone: loadstone
+lodgment: lodgement
+lonely: lonley
+magnificent: magnigicient
+maintenance: maintainance
+mammoth: mamoth
+management: managment
+maneuver: manuveur
+manufactories: manufacturies
+masterpiece: masterpice
+material: materiel
+mathematics: mathmatics
+mattress: mattres
+maudlin: mauldin
+meant: ment
+medicine: medecine
+meeting: meetin
+mercenary: mercanery
+merchandise: merchandize
+merchantmen: merchantment
+meteorological: meterological
+metropolitan: metropolitian
+millionaire: millionnaire
+miniature: minature
+miscellaneous: miscelaneous
+mischievous: mischievious
+moccasins: mocassins
+momentous: momentus
+mortgage: morgage
+mortgaged: mortgauged
+murmurs: murmers
+mustnt: musnt
+mutilate: mutalate
+mythical: mithical
+nadir: nadar
+naphtha: naptha
+narrative: narative
+naturally: naturaly
+navigating: navagating
+necessarily: necessarilly
+necessary: nessisary
+niagara: niagra
+nickel: nickle
+niggardly: nigardly
+ninetieth: nintieth
+ninetyninth: nintynineth
+nocturnal: nocternal
+nonsense: nonsence
+notwithstanding: nothwithstanding
+nowadays: nowdays
+obbligato: obliggato
+obdurate: obdirate
+occasion: ocassion
+occasionally: occasionaly
+occurred: occureed
+occurrence: occurence
+octopus: octapus
+odyssey: oddysey
+ominous: omenous
+omission: ommision
+onerous: onirous
+opportunities: oppotunities
+opposition: oposition
+oppressor: oppresser
+optician: optitian
+oratorio: orotario
+orchestra: ochestra
+ordinarily: ordinarilly
+origin: origen
+originally: origionally
+own: owne
+pain: paine
+pamphlet: phamplet
+pamphlets: phamplets
+parallel: parellel
+paralysis: parallysis
+paraphernalia: parephernalia
+parenthesis: parenthasis
+participle: participal
+pastime: pasttime
+pastor: paster
+paternity: paternaty
+pavilion: pavillion
+peasant: peasent
+peculiar: pecular
+penance: pennance
+pendulum: pendelum
+penguins: pengiuns
+peninsula: peninsular
+penitentiary: penitentary
+perceive: percieve
+perforation: preforation
+permissible: permissable
+perseverance: perseverence
+personalty: personality
+perspiration: persperation
+persuade: pursuade
+persuaded: pursuaded
+persuasion: persausion
+pertaining: pertaning
+pervaded: prevaded
+pharaohs: pharoahs
+phase: faze
+phenomenal: phenominal
+phenomenon: phenonenon
+philippines: phillipines
+physician: physican
+pickerel: pickeral
+picnicking: picnicing
+pittsburgh: pittsburg
+plagiarism: plaigarism
+plaque: placque
+playwright: playwrite
+pleasant: plesent
+poetry: poetrie
+poisonous: poisenous
+ponderous: pondorous
+possess: posess
+possession: possesion
+possibilities: possablities
+prairie: prarie
+preceding: preceeding
+precipice: presipice
+preferable: preferrable
+preference: preferance
+preferred: prefered
+prejudice: prejedice
+preparation: preperation
+preserved: perserved
+presumptuous: presumptous
+prevalent: prevelant
+preventive: preventative
+prisoner: prisner
+privilege: priviledge
+probably: probabley
+procedure: proceduer
+professor: proffesor
+proffer: profer
+prominent: prominant
+promontory: promonotory
+pronunciation: pronounciation
+propeller: propellor
+prophecy: prophesy
+provisions: provisons
+pseudonym: pseudynom
+psychological: psycological
+public: publick
+publicly: publically
+pumpkin: pumkin
+pursue: persue
+pursuer: persuer
+pursuit: persuit
+qualified: qualafied
+quandary: quandry
+quantities: quanties
+quarantine: quarrantine
+quarreled: quarelled
+quarter: quater
+questionnaire: questionare
+quiescent: quiscent
+quorum: quorem
+radiant: radient
+radiator: radiater
+raise: raize
+rating: rateing
+really: realy
+rebuttal: rebutal
+receded: receeded
+receipt: reciept
+receipts: reciepts
+receive: recieve
+receiver: reciever
+receptacle: receptacel
+recipient: resipient
+reciprocal: reciprocel
+reckon: recon
+reclamation: reclaimation
+recommend: recomend
+recommendation: recomendation
+recommendations: reccomendations
+recommended: recommend
+recommending: recomending
+recompense: recompence
+redundant: redundent
+reference: refference
+referred: refered
+referring: refering
+refrigerator: refrigerater
+regretted: regreted
+rehabilitate: rehabilatate
+relevant: relevaant
+religious: religous
+remembrance: rememberance
+rendezvous: rendevous
+renegade: renagade
+renown: renoun
+reparation: repairation
+repel: repell
+repetition: repitition
+representatives: representitives
+rescinded: resinded
+reservoir: resevoir
+responsibility: responsiblity
+restaurant: restuarant
+restaurateur: restauranteur
+rhapsody: raphsody
+rheumatism: rhuematism
+rhododendron: rhododrendon
+rhubarb: ruhbarb
+rhythm: rythm
+ridiculous: rediculous
+romantic: romantick
+rummage: rumage
+running: runing
+sabbath: sabath
+sacrament: sacrement
+sacrilegious: sacreligious
+safety: safty
+sagacious: sagatious
+sailor: sailer
+sandwich: sanwich
+sanitary: sanatary
+satisfactory: satisfactary
+scarcity: scarsity
+scissors: sissers
+seize: sieze
+seized: siezed
+self: selfe
+sell: selle
+semesters: semisters
+seminary: seminery
+separate: seporate
+sergeant: sergant
+sheep: sheepe
+shepherd: sheperd
+silhouette: silhuette
+shipping: shippin
+shoulder: shouldda
+shoulders: sholders
+showing: showin
+shrubbery: shrubery
+siege: seige
+significant: significent
+silk: silke
+similar: similiar
+simultaneous: similtanous
+sincerity: sincerety
+slimmest: slimest
+smiling: smilin
+sociable: socable
+social: socal
+solemn: solomn
+sophomore: sophmore
+sorority: sororiety
+sought: saught
+source: sorce
+souvenir: souviner
+sovereignty: sovreignty
+sparsely: sparcely
+spear: speer
+specifically: specificly
+specimen: speciment
+specimens: specimans
+spirituous: spiritous
+sprinkle: sprinkel
+starting: startin
+stationary: stationery
+statue: statu
+stirring: stirrin
+stirrups: stirups
+stomach: stomack
+straining: strainin
+straitjacket: straightjacket
+stratagem: strategem
+strategy: stratagy
+strenuous: strenous
+stretched: streched
+stubbornness: stubborness
+suburban: sububan
+success: sucess
+sufficient: suficient
+suffrage: sufferage
+sugar: suger
+suing: sueing
+superficial: superfical
+superintendent: supertendent
+supersede: supercede
+supplement: suplement
+suppress: supress
+surprise: suprise
+surreptitious: sureptitous
+surrounded: surounded
+swearing: swearinge
+syllables: sylables
+symmetry: symetry
+synonymous: synonomous
+systematically: systemetically
+tacit: tasit
+taking: takin
+technically: technecally
+television: televison
+temperament: temperment
+temporarily: temporarly
+temporary: tempory
+tendency: tendancy
+terrestrial: terestial
+terrors: terrours
+that: thatt
+therefore: therefor
+thief: theaf
+think: thinke
+thinking: thinkin
+thorough: thourough
+thoroughly: throughly
+tobacco: tobbaco
+tobogganing: tobboganing
+tonnage: tonage
+tragedy: tradgedy
+tranquility: tranquillity
+tranquillity: tranquility
+transferable: transferrable
+transferred: transfred
+truculent: trucculent
+truly: truley
+tying: tieing
+tyrannical: tyranical
+undoubtedly: undoubtly
+unequaled: unequalled
+unfortunately: unfortunatly
+university: unversity
+unmistakable: unmistakeable
+unparalleled: unparalelled
+until: untill
+usage: useage
+usually: usualy
+usurious: usurous
+utterance: utterence
+vacancy: vancancy
+vaccination: vacinnation
+vacillate: vaccilate
+various: vairious
+vegetable: vegatable
+vengeance: vengance
+vertical: verticle
+vice: vise
+victuals: vituals
+vilify: villify
+villain: villian
+violence: violance
+violin: vioiln
+visible: visable
+vitamins: vitamines
+voucher: vouture
+wagging: waggin
+waggish: wagish
+wednesday: wensday
+weed: weede
+weight: weigth
+weird: wierd
+whether: wether
+which: whitch
+who: whoe
+withhold: withold
+worshiping: worshipping
+yacht: yaht
+yearned: yerned
+yeoman: yoman
+yield: yeild
+zealous: zelous
+zenith: zeenith
+ability: ablity
+academically: academicly
+accept: acept
+accepted: acepted
+access: acess
+accessibility: accessability
+accessing: accesing
+according: acording
+account: acount
+accounts: acounts
+acquaintances: aquantences
+adaptable: adabtable
+addressable: addresable
+adequate: adiquate
+adjournment: adjurnment
+advise: advice
+again: agiin
+agencies: agences
+aggravating: agravating
+allow: alow
+although: athough
+analyse: analiss
+analysed: analised
+analysing: aalysing
+and: anf
+announcing: anouncing
+annoying: anoying
+annual: anual
+anomalies: anomolies
+apologies: appologies
+apologised: appologised
+appeal: apeal
+appendix: apendix
+applicable: aplicable
+applied: upplied
+applying: applieing
+appointment: appoitment
+appointments: apointments
+appreciated: apreciated
+appreciation: apreciation
+approach: aproach
+approached: aproached
+are: arte
+arguing: aurguing
+arranged: arrainged
+arrangeing: aranging
+arrangement: arrangment
+arrangements: araingements
+articles: articals
+assessing: accesing
+associated: assosiated
+atmosphere: atmospher
+auguments: aurgument
+availability: avaiblity
+base: basse
+benefit: benifit
+benefits: benifits
+between: beetween
+bicycle: bicycal
+bingley: bingly
+bonus: bonas
+build: biuld
+building: biulding
+busy: buisy
+career: carrer
+careers: currers
+categories: catagoris
+centrally: centraly
+certain: cirtain
+challenges: chalenges
+challenge: chalange
+choice: choise
+choices: choises
+choose: chose
+choosing: chosing
+clerical: clearical
+clerk: clerck
+collate: colate
+combine: comibine
+commercial: comersial
+comments: coments
+commit: comit
+committees: commitees
+compare: compair
+compared: comppared
+comparison: comparrison
+completely: completly
+component: componant
+composed: compossed
+conditioning: conditining
+conference: conferance
+consider: concider
+considerable: conciderable
+consist: consisit
+consisting: consisiting
+consists: consisits
+contained: contasined
+containing: contasining
+continually: contually
+continued: contuned
+controlled: controled
+conversely: conversly
+corporate: corparate
+credit: creadit
+criticism: citisum
+currently: curruntly
+data: dsata
+dealt: delt
+decide: descide
+decided: descided
+decides: descides
+decision: descisions
+decisions: descisions
+declarations: declaratrions
+definition: defenition
+definitions: defenitions
+demands: diemands
+dependence: dependance
+described: discribed
+desirable: disiable
+desperately: despratly
+diagrammatically: diagrammatica
+different: diffrent
+difficult: dificult
+difficulty: dificulty
+disaggregate: disaggreagte
+disappointing: dissapoiting
+discretion: discresion
+dissension: desention
+dragged: draged
+earlier: earlyer
+earliest: earlyest
+easier: easer
+easily: easyly
+econometric: economtric
+edition: ediition
+eliminated: elimiated
+embellishing: embelishing
+employed: emploied
+employees: emploies
+employment: empolyment
+encompassing: encompasing
+encourage: encorage
+enormously: enomosly
+entirely: entierly
+equalled: equaled
+erroneous: errounous
+especially: especaily
+essential: esential
+eventually: eventully
+evident: evedent
+exact: exsact
+exactly: exsactly
+examine: examin
+excellent: exerlant
+except: excxept
+excessively: exessively
+executed: executted
+expansion: expanion
+expense: expence
+expensive: expencive
+experiences: experances
+explaining: explaning
+exponentially: exponentualy
+extremely: extreemly
+facilities: facilitys
+fails: failes
+'false': faulse
+familiar: familer
+families: familys
+favourable: faverable
+favourably: favorably
+feeling: fealing
+female: femail
+figure: figuar
+figures: figuars
+financial: finatical
+financially: financialy
+flexible: flexable
+forbidden: forbiden
+forecast: forcast
+fourth: forth
+functionally: functionaly
+functions: functuions
+further: futher
+gaining: ganing
+generated: generataed
+geneva: geniva
+geographically: goegraphicaly
+graphically: graphicaly
+guidelines: guidlines
+handle: handel
+hierarchal: hierachial
+hierarchy: hierchy
+however: howeverr
+humour: humor
+ideally: idealy
+immediate: imediate
+inconceivable: inconcievable
+indeed: indead
+independent: independant
+inefficient: ineffiect
+initial: intital
+input: inut
+inquiries: equiries
+insight: insite
+intelligence: inteligence
+interest: intrest
+interesting: intresting
+interpretation: interpritatio
+interrogating: interogationg
+investigated: investegated
+journalism: journaism
+knowledge: knowlege
+largely: largly
+later: latter
+length: lengh
+level: leval
+levels: levals
+lieu: liew
+literature: litriture
+loans: lones
+locally: localy
+luckily: luckeley
+majority: majorty
+manually: manualy
+many: mony
+mathematically: mathematicaly
+matrix: matriiix
+mean: meen
+means: meens
+minutes: muiuets
+misleading: missleading
+monitoring: monitering
+months: monthes
+moving: moveing
+nationally: nationaly
+nature: natior
+necessitates: nessisitates
+necessity: nessesity
+negligible: negligable
+neither: niether
+night: nite
+normally: normaly
+now: noe
+numbers: numbuers
+obtaining: optaning
+occur: occure
+operations: operatins
+operator: opertor
+operators: oprators
+opinion: oppinion
+opportunity: oppotunity
+ordinary: ordenary
+organization: oranisation
+organized: oranised
+orientated: orentated
+output: oputput
+overall: overal
+paid: payed
+parameters: perametres
+partially: partialy
+particular: particulaur
+particularly: particulary
+patterns: pattarns
+per: pere
+perhaps: perhapse
+permanent: perminant
+permanently: perminantly
+personnel: personel
+pivoting: pivting
+politics: polatics
+position: possition
+possible: possable
+prepared: prepaired
+primarily: pimarily
+prior: piror
+proceeding: proceding
+profession: preffeson
+profit: proffit
+profits: proffits
+progresses: progressess
+progression: progresion
+projects: projeccts
+proportions: proprtions
+provide: provid
+provisionally: provisionaly
+proviso: provisoe
+qualities: quaties
+queries: quies
+reaching: reching
+readjusted: reajusted
+received: recived
+receives: recives
+receiving: reciving
+recently: reciently
+refered: reffered
+regained: regined
+register: rgister
+relatively: relitivly
+repetitive: repetative
+representative: representitiv
+requested: rquested
+required: reequired
+research: reserch
+resolved: resoved
+responsibilities: responsibliti
+responsible: responcible
+resulting: reulting
+retirement: retirment
+routine: rouint
+safeguard: safegaurd
+salaries: salarys
+scheme: scheem
+scrutinized: scrutiniesed
+search: serch
+searching: serching
+secretaries: secutaries
+security: seurity
+seen: seeen
+segment: segemnt
+senior: sienior
+sense: sence
+sensible: sensable
+separated: seperated
+separation: seperation
+session: sesion
+set: et
+sheets: sheertes
+shortened: shortend
+shown: hown
+sign: eign
+simular: similar
+singular: singulaur
+someone: somone
+sources: sorces
+speaking: speeking
+standardizing: stanerdizing
+stopped: stoped
+students: studens
+studying: studing
+subsequent: subsiquent
+subtract: subtrcat
+successful: sucssuful
+successive: sucsesive
+such: shuch
+suffering: suufering
+suggested: sugested
+suggestion: sugestion
+suggests: sugests
+suited: suted
+summarys: sumarys
+supervision: supervison
+supplementary: suplementary
+supplements: suplements
+supposedly: supposidly
+surrounding: serounding
+surroundings: suroundings
+surveys: servays
+surveying: servaying
+system: sysem
+table: tasble
+technique: tecnique
+techniques: tecniques
+the: thw
+their: thier
+there: thear
+thermawear: thermawhere
+these: thess
+they: thay
+thoughts: thorts
+through: throut
+throughout: throuout
+timing: timeing
+titles: tittles
+to: ro
+together: togehter
+totally: totaly
+traditionally: traditionaly
+transactions: trasactions
+transportability: transportibil
+triangular: triangulaur
+umbrella: umberalla
+unavailable: unavailble
+understandable: understadable
+unequalled: unequaled
+unequivocally: unequivocaly
+union: unioun
+unique: uneque
+universally: universaly
+unnecessarily: unessasarily
+unnecessary: unessessay
+unresolved: unresloved
+used: usedf
+useful: usful
+user: uers
+utilized: utalised
+valuable: valuble
+variable: varible
+variant: vairiant
+variety: variatry
+virtually: vertually
+visitor: vistor
+visitors: vistors
+voluntary: volantry
+voting: voteing
+weapons: wepons
+weighted: wagted
+were: where
+when: whn
+whereas: wheras
+widely: widly
+will: wil
+within: withing
+would: whould
+written: writen
+years: yesars
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
new file mode 100644
index 0000000..e0a8053
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
@@ -0,0 +1,53 @@
+require "did_you_mean/version"
+require "did_you_mean/core_ext/name_error"
+
+require "did_you_mean/spell_checker"
+require 'did_you_mean/spell_checkers/name_error_checkers'
+require 'did_you_mean/spell_checkers/method_name_checker'
+require 'did_you_mean/spell_checkers/key_error_checker'
+require 'did_you_mean/spell_checkers/null_checker'
+
+require "did_you_mean/formatters/plain_formatter"
+
+module DidYouMean
+  class DeprecatedIgnoredCallers < Array
+    %i(
+      +
+      <<
+      []=
+      insert
+      unshift
+      push
+    ).each do |method_name|
+      eval <<-RUBY, nil, __FILE__, __LINE__ + 1
+        def #{method_name}(*)
+          warn "IGNORED_CALLERS has been deprecated and has no effect."
+
+          super
+        end
+      RUBY
+    end
+  end
+
+  IGNORED_CALLERS = DeprecatedIgnoredCallers.new
+
+  SPELL_CHECKERS = Hash.new(NullChecker)
+  SPELL_CHECKERS.merge!({
+    "NameError"     => NameErrorCheckers,
+    "NoMethodError" => MethodNameChecker,
+    "KeyError"      => KeyErrorChecker
+  })
+
+  NameError.prepend DidYouMean::Correctable
+  KeyError.prepend DidYouMean::Correctable
+
+  def self.formatter
+    @@formatter
+  end
+
+  def self.formatter=(formatter)
+    @@formatter = formatter
+  end
+
+  self.formatter = PlainFormatter.new
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
new file mode 100644
index 0000000..9241557
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
@@ -0,0 +1,27 @@
+module DidYouMean
+  module Correctable
+    def original_message
+      method(:to_s).super_method.call
+    end
+
+    def to_s
+      msg = super.dup
+
+      if !cause.respond_to?(:corrections) || cause.corrections.empty?
+        msg << DidYouMean.formatter.message_for(corrections)
+      end
+
+      msg
+    rescue
+      super
+    end
+
+    def corrections
+      spell_checker.corrections
+    end
+
+    def spell_checker
+      @spell_checker ||= SPELL_CHECKERS[self.class.to_s].new(self)
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental.rb
new file mode 100644
index 0000000..80a9466
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental.rb
@@ -0,0 +1,2 @@
+require 'did_you_mean/experimental/initializer_name_correction'
+require 'did_you_mean/experimental/ivar_name_correction'
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/initializer_name_correction.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/initializer_name_correction.rb
new file mode 100644
index 0000000..4c4ee68
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/initializer_name_correction.rb
@@ -0,0 +1,20 @@
+# frozen-string-literal: true
+
+require 'did_you_mean/levenshtein'
+
+module DidYouMean
+  module Experimental
+    module InitializerNameCorrection
+      def method_added(name)
+        super
+
+        distance = Levenshtein.distance(name.to_s, 'initialize')
+        if distance != 0 && distance <= 2
+          warn "warning: #{name} might be misspelled, perhaps you meant initialize?"
+        end
+      end
+    end
+
+    ::Class.prepend(InitializerNameCorrection)
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/ivar_name_correction.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/ivar_name_correction.rb
new file mode 100644
index 0000000..d035bff
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/experimental/ivar_name_correction.rb
@@ -0,0 +1,74 @@
+# frozen-string-literal: true
+
+require 'did_you_mean'
+
+module DidYouMean
+  module Experimental #:nodoc:
+    class IvarNameCheckerBuilder #:nodoc:
+      attr_reader :original_checker
+
+      def initialize(original_checker) #:nodoc:
+        @original_checker = original_checker
+      end
+
+      def new(no_method_error) #:nodoc:
+        IvarNameChecker.new(no_method_error, original_checker: @original_checker)
+      end
+    end
+
+    class IvarNameChecker #:nodoc:
+      REPLS = {
+        "(irb)" => -> { Readline::HISTORY.to_a.last }
+      }
+
+      TRACE = TracePoint.trace(:raise) do |tp|
+        e = tp.raised_exception
+
+        if SPELL_CHECKERS.include?(e.class.to_s) && !e.instance_variable_defined?(:@frame_binding)
+          e.instance_variable_set(:@frame_binding, tp.binding)
+        end
+      end
+
+      attr_reader :original_checker
+
+      def initialize(no_method_error, original_checker: )
+        @original_checker = original_checker.new(no_method_error)
+
+        @location   = no_method_error.backtrace_locations.first
+        @ivar_names = no_method_error.frame_binding.receiver.instance_variables
+      end
+
+      def corrections
+        original_checker.corrections + ivar_name_corrections
+      end
+
+      def ivar_name_corrections
+        @ivar_name_corrections ||= SpellChecker.new(dictionary: @ivar_names).correct(receiver_name.to_s)
+      end
+
+      private
+
+      def receiver_name
+        return unless @original_checker.receiver.nil?
+
+        abs_path = @location.absolute_path
+        lineno   = @location.lineno
+
+        /@(\w+)*\.#{@original_checker.method_name}/ =~ line(abs_path, lineno).to_s && $1
+      end
+
+      def line(abs_path, lineno)
+        if REPLS[abs_path]
+          REPLS[abs_path].call
+        elsif File.exist?(abs_path)
+          File.open(abs_path) do |file|
+            file.detect { file.lineno == lineno }
+          end
+        end
+      end
+    end
+  end
+
+  NameError.send(:attr, :frame_binding)
+  SPELL_CHECKERS['NoMethodError'] = Experimental::IvarNameCheckerBuilder.new(SPELL_CHECKERS['NoMethodError'])
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
new file mode 100644
index 0000000..a959b67
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
@@ -0,0 +1,9 @@
+# frozen-string-literal: true
+
+module DidYouMean
+  class PlainFormatter
+    def message_for(corrections)
+      corrections.empty? ? "" : "\nDid you mean?  #{corrections.join("\n               ")}"
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/verbose_formatter.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/verbose_formatter.rb
new file mode 100644
index 0000000..a42dc10
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/verbose_formatter.rb
@@ -0,0 +1,13 @@
+# frozen-string-literal: true
+
+module DidYouMean
+  class VerboseFormatter
+    def message_for(corrections)
+      return "" if corrections.empty?
+
+      output = "\n\n    Did you mean? ".dup
+      output << corrections.join("\n                  ")
+      output << "\n "
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
new file mode 100644
index 0000000..56db130
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
@@ -0,0 +1,87 @@
+module DidYouMean
+  module Jaro
+    module_function
+
+    def distance(str1, str2)
+      str1, str2 = str2, str1 if str1.length > str2.length
+      length1, length2 = str1.length, str2.length
+
+      m          = 0.0
+      t          = 0.0
+      range      = (length2 / 2).floor - 1
+      range      = 0 if range < 0
+      flags1     = 0
+      flags2     = 0
+
+      # Avoid duplicating enumerable objects
+      str1_codepoints = str1.codepoints
+      str2_codepoints = str2.codepoints
+
+      i = 0
+      while i < length1
+        last = i + range
+        j    = (i >= range) ? i - range : 0
+
+        while j <= last
+          if flags2[j] == 0 && str1_codepoints[i] == str2_codepoints[j]
+            flags2 |= (1 << j)
+            flags1 |= (1 << i)
+            m += 1
+            break
+          end
+
+          j += 1
+        end
+
+        i += 1
+      end
+
+      k = i = 0
+      while i < length1
+        if flags1[i] != 0
+          j = index = k
+
+          k = while j < length2
+            index = j
+            break(j + 1) if flags2[j] != 0
+
+            j += 1
+          end
+
+          t += 1 if str1_codepoints[i] != str2_codepoints[index]
+        end
+
+        i += 1
+      end
+      t = (t / 2).floor
+
+      m == 0 ? 0 : (m / length1 + m / length2 + (m - t) / m) / 3
+    end
+  end
+
+  module JaroWinkler
+    WEIGHT    = 0.1
+    THRESHOLD = 0.7
+
+    module_function
+
+    def distance(str1, str2)
+      jaro_distance = Jaro.distance(str1, str2)
+
+      if jaro_distance > THRESHOLD
+        codepoints2  = str2.codepoints
+        prefix_bonus = 0
+
+        i = 0
+        str1.each_codepoint do |char1|
+          char1 == codepoints2[i] && i < 4 ? prefix_bonus += 1 : break
+          i += 1
+        end
+
+        jaro_distance + (prefix_bonus * WEIGHT * (1 - jaro_distance))
+      else
+        jaro_distance
+      end
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
new file mode 100644
index 0000000..97d3906
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
@@ -0,0 +1,57 @@
+module DidYouMean
+  module Levenshtein # :nodoc:
+    # This code is based directly on the Text gem implementation
+    # Copyright (c) 2006-2013 Paul Battley, Michael Neumann, Tim Fletcher.
+    #
+    # Returns a value representing the "cost" of transforming str1 into str2
+    def distance(str1, str2)
+      n = str1.length
+      m = str2.length
+      return m if n.zero?
+      return n if m.zero?
+
+      d = (0..m).to_a
+      x = nil
+
+      # to avoid duplicating an enumerable object, create it outside of the loop
+      str2_codepoints = str2.codepoints
+
+      str1.each_codepoint.with_index(1) do |char1, i|
+        j = 0
+        while j < m
+          cost = (char1 == str2_codepoints[j]) ? 0 : 1
+          x = min3(
+            d[j+1] + 1, # insertion
+            i + 1,      # deletion
+            d[j] + cost # substitution
+          )
+          d[j] = i
+          i = x
+
+          j += 1
+        end
+        d[m] = x
+      end
+
+      x
+    end
+    module_function :distance
+
+    private
+
+    # detects the minimum value out of three arguments. This method is
+    # faster than `[a, b, c].min` and puts less GC pressure.
+    # See https://github.com/yuki24/did_you_mean/pull/1 for a performance
+    # benchmark.
+    def min3(a, b, c)
+      if a < b && a < c
+        a
+      elsif b < c
+        b
+      else
+        c
+      end
+    end
+    module_function :min3
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
new file mode 100644
index 0000000..48665ad
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
@@ -0,0 +1,52 @@
+# frozen-string-literal: true
+
+require "did_you_mean/levenshtein"
+require "did_you_mean/jaro_winkler"
+
+module DidYouMean
+  class SpellChecker
+    def initialize(dictionary: )
+      @dictionary = dictionary
+    end
+
+    def correct(input)
+      input     = normalize(input)
+      threshold = input.length > 3 ? 0.834 : 0.77
+
+      words = @dictionary.select {|word| JaroWinkler.distance(normalize(word), input) >= threshold }
+      words.reject! {|word| input == word.to_s }
+      words.sort_by! {|word| JaroWinkler.distance(word.to_s, input) }
+      words.reverse!
+
+      # Correct mistypes
+      threshold   = (input.length * 0.25).ceil
+      corrections = words.select {|c| Levenshtein.distance(normalize(c), input) <= threshold }
+
+      # Correct misspells
+      if corrections.empty?
+        corrections = words.select do |word|
+          word   = normalize(word)
+          length = input.length < word.length ? input.length : word.length
+
+          Levenshtein.distance(word, input) < length
+        end.first(1)
+      end
+
+      corrections
+    end
+
+    private
+
+    def normalize(str_or_symbol) #:nodoc:
+      str = if str_or_symbol.is_a?(String)
+              str_or_symbol.dup
+            else
+              str_or_symbol.to_s
+            end
+
+      str.downcase!
+      str.tr!("@", "")
+      str
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
new file mode 100644
index 0000000..0398a47
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
@@ -0,0 +1,14 @@
+require "did_you_mean/spell_checker"
+
+module DidYouMean
+  class KeyErrorChecker
+    def initialize(key_error)
+      @key = key_error.key
+      @keys = key_error.receiver.keys
+    end
+
+    def corrections
+      @corrections ||= SpellChecker.new(dictionary: @keys).correct(@key).map(&:inspect)
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
new file mode 100644
index 0000000..65a5667
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
@@ -0,0 +1,27 @@
+require "did_you_mean/spell_checker"
+
+module DidYouMean
+  class MethodNameChecker
+    attr_reader :method_name, :receiver
+
+    NAMES_TO_EXCLUDE = { NilClass => nil.methods }
+    NAMES_TO_EXCLUDE.default = []
+
+    def initialize(exception)
+      @method_name  = exception.name
+      @receiver     = exception.receiver
+      @private_call = exception.respond_to?(:private_call?) ? exception.private_call? : false
+    end
+
+    def corrections
+      @corrections ||= SpellChecker.new(dictionary: method_names).correct(method_name) - NAMES_TO_EXCLUDE[@receiver.class]
+    end
+
+    def method_names
+      method_names = receiver.methods + receiver.singleton_methods
+      method_names += receiver.private_methods if @private_call
+      method_names.uniq!
+      method_names
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
new file mode 100644
index 0000000..37220c0
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
@@ -0,0 +1,20 @@
+require 'did_you_mean/spell_checkers/name_error_checkers/class_name_checker'
+require 'did_you_mean/spell_checkers/name_error_checkers/variable_name_checker'
+
+module DidYouMean
+  class << (NameErrorCheckers = Object.new)
+    def new(exception)
+      case exception.original_message
+      when /uninitialized constant/
+        ClassNameChecker
+      when /undefined local variable or method/,
+           /undefined method/,
+           /uninitialized class variable/,
+           /no member '.*' in struct/
+        VariableNameChecker
+      else
+        NullChecker
+      end.new(exception)
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
new file mode 100644
index 0000000..ef95269
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
@@ -0,0 +1,46 @@
+# frozen-string-literal: true
+require 'delegate'
+require "did_you_mean/spell_checker"
+
+module DidYouMean
+  class ClassNameChecker
+    attr_reader :class_name
+
+    def initialize(exception)
+      @class_name, @receiver = exception.name, exception.receiver
+    end
+
+    def corrections
+      @corrections ||= SpellChecker.new(dictionary: class_names).correct(class_name).map(&:full_name)
+    end
+
+    def class_names
+      scopes.flat_map do |scope|
+        scope.constants.map do |c|
+          ClassName.new(c, scope == Object ? "" : "#{scope}::")
+        end
+      end
+    end
+
+    def scopes
+      @scopes ||= @receiver.to_s.split("::").inject([Object]) do |_scopes, scope|
+        _scopes << _scopes.last.const_get(scope)
+      end.uniq
+    end
+
+    class ClassName < SimpleDelegator
+      attr :namespace
+
+      def initialize(name, namespace = '')
+        super(name)
+        @namespace = namespace
+      end
+
+      def full_name
+        self.class.new("#{namespace}#{__getobj__}")
+      end
+    end
+
+    private_constant :ClassName
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
new file mode 100644
index 0000000..f6f3fc1
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
@@ -0,0 +1,30 @@
+# frozen-string-literal: true
+
+require "did_you_mean/spell_checker"
+
+module DidYouMean
+  class VariableNameChecker
+    attr_reader :name, :method_names, :lvar_names, :ivar_names, :cvar_names
+
+    NAMES_TO_EXCLUDE = { 'foo' => [:fork] }
+    NAMES_TO_EXCLUDE.default = []
+    RB_PREDEFINED_OBJECTS = [:false, :true, :nil]
+
+    def initialize(exception)
+      @name       = exception.name.to_s.tr("@", "")
+      @lvar_names = exception.respond_to?(:local_variables) ? exception.local_variables : []
+      receiver    = exception.receiver
+
+      @method_names = receiver.methods + receiver.private_methods
+      @ivar_names   = receiver.instance_variables
+      @cvar_names   = receiver.class.class_variables
+      @cvar_names  += receiver.class_variables if receiver.kind_of?(Module)
+    end
+
+    def corrections
+      @corrections ||= SpellChecker
+                     .new(dictionary: (RB_PREDEFINED_OBJECTS + lvar_names + method_names + ivar_names + cvar_names))
+                     .correct(name) - NAMES_TO_EXCLUDE[@name]
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
new file mode 100644
index 0000000..1306f69
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
@@ -0,0 +1,6 @@
+module DidYouMean
+  class NullChecker
+    def initialize(*);  end
+    def corrections; [] end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose.rb
new file mode 100644
index 0000000..a63c903
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose.rb
@@ -0,0 +1,4 @@
+require 'did_you_mean'
+require 'did_you_mean/formatters/verbose_formatter'
+
+DidYouMean.formatter = DidYouMean::VerboseFormatter.new
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose_formatter.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose_formatter.rb
new file mode 100644
index 0000000..8140826
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/verbose_formatter.rb
@@ -0,0 +1,7 @@
+require 'did_you_mean'
+require 'did_you_mean/formatters/verbose_formatter'
+
+DidYouMean.formatter = DidYouMean::VerboseFormatter.new
+
+warn '`require "did_you_mean/verbose_formatter"\' has been deprecated and will be removed' \
+     " in the next major Ruby version. Please require 'did_you_mean/verbose' instead."
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
new file mode 100644
index 0000000..7aa652f
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
@@ -0,0 +1,3 @@
+module DidYouMean
+  VERSION = "1.2.0"
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/core_ext/name_error_extension_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/core_ext/name_error_extension_test.rb
new file mode 100644
index 0000000..5420e88
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/core_ext/name_error_extension_test.rb
@@ -0,0 +1,47 @@
+require 'test_helper'
+
+class NameErrorExtensionTest < Minitest::Test
+  SPELL_CHECKERS = DidYouMean::SPELL_CHECKERS
+
+  class TestSpellChecker
+    def initialize(*); end
+    def corrections; ["does_exist"]; end
+  end
+
+  def setup
+    @org, SPELL_CHECKERS['NameError'] = SPELL_CHECKERS['NameError'], TestSpellChecker
+
+    @error = assert_raises(NameError){ doesnt_exist }
+  end
+
+  def teardown
+    SPELL_CHECKERS['NameError'] = @org
+  end
+
+  def test_message
+    message = <<~MESSAGE.chomp
+      undefined local variable or method `doesnt_exist' for #{method(:to_s).super_method.call}
+      Did you mean?  does_exist
+    MESSAGE
+
+    assert_equal message, @error.to_s
+    assert_equal message, @error.message
+  end
+
+  def test_to_s_does_not_make_disruptive_changes_to_error_message
+    error = assert_raises(NameError) do
+      raise NameError, "uninitialized constant Object"
+    end
+
+    error.to_s
+    assert_equal 1, error.to_s.scan("Did you mean?").count
+  end
+end
+
+class DeprecatedIgnoreCallersTest < Minitest::Test
+  def test_ignore
+    assert_output nil, "IGNORED_CALLERS has been deprecated and has no effect.\n" do
+      DidYouMean::IGNORED_CALLERS << /( |`)do_not_correct_typo'/
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/edit_distance/jaro_winkler_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/edit_distance/jaro_winkler_test.rb
new file mode 100644
index 0000000..12f8a3b
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/edit_distance/jaro_winkler_test.rb
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+require 'test_helper'
+
+# These tests were originally written by Jian Weihang (簡煒航) as part of his work
+# on the jaro_winkler gem. The original code could be found here:
+#   https://github.com/tonytonyjan/jaro_winkler/blob/9bd12421/spec/jaro_winkler_spec.rb
+#
+# Copyright (c) 2014 Jian Weihang
+
+class JaroWinklerTest < Minitest::Test
+  def test_jaro_winkler_distance
+    assert_distance 0.9667, 'henka',      'henkan'
+    assert_distance 1.0,    'al',         'al'
+    assert_distance 0.9611, 'martha',     'marhta'
+    assert_distance 0.8324, 'jones',      'johnson'
+    assert_distance 0.9167, 'abcvwxyz',   'zabcvwxy'
+    assert_distance 0.9583, 'abcvwxyz',   'cabvwxyz'
+    assert_distance 0.84,   'dwayne',     'duane'
+    assert_distance 0.8133, 'dixon',      'dicksonx'
+    assert_distance 0.0,    'fvie',       'ten'
+    assert_distance 0.9067, 'does_exist', 'doesnt_exist'
+    assert_distance 1.0, 'x', 'x'
+  end
+
+  def test_jarowinkler_distance_with_utf8_strings
+    assert_distance 0.9818, '變形金剛4:絕跡重生', '變形金剛4: 絕跡重生'
+    assert_distance 0.8222, '連勝文',             '連勝丼'
+    assert_distance 0.8222, '馬英九',             '馬英丸'
+    assert_distance 0.6667, '良い',               'いい'
+  end
+
+  private
+
+  def assert_distance(score, str1, str2)
+    assert_equal score, DidYouMean::JaroWinkler.distance(str1, str2).round(4)
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/initializer_name_correction_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/initializer_name_correction_test.rb
new file mode 100644
index 0000000..964c42f
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/initializer_name_correction_test.rb
@@ -0,0 +1,15 @@
+require 'test_helper'
+
+class InitializerNameCorrectionTest < Minitest::Test
+  def test_corrects_wrong_initializer_name
+    assert_output nil, "warning: intialize might be misspelled, perhaps you meant initialize?\n" do
+      Class.new { def intialize; end }
+    end
+  end
+
+  def test_does_not_correct_correct_initializer_name
+    assert_output nil, "" do
+      Class.new { def initialize; end }
+    end
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/method_name_checker_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/method_name_checker_test.rb
new file mode 100644
index 0000000..95e6ac3
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/experimental/method_name_checker_test.rb
@@ -0,0 +1,13 @@
+require 'test_helper'
+
+class ExperimentalMethodNameCorrectionTest < Minitest::Test
+  def test_corrects_incorrect_ivar_name
+    @number = 1
+    @nubmer = nil
+    error = assert_raises(NoMethodError) { @nubmer.zero? }
+    remove_instance_variable :@nubmer
+
+    assert_correction :@number, error.corrections
+    assert_match "Did you mean?  @number", error.to_s
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checker_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checker_test.rb
new file mode 100644
index 0000000..72a5297
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checker_test.rb
@@ -0,0 +1,77 @@
+require 'test_helper'
+
+class SpellCheckerTest < Minitest::Test
+  def test_spell_checker_corrects_mistypes
+    assert_spell 'foo',   input: 'doo',   dictionary: ['foo', 'fork']
+    assert_spell 'email', input: 'meail', dictionary: ['email', 'fail', 'eval']
+    assert_spell 'fail',  input: 'fial',  dictionary: ['email', 'fail', 'eval']
+    assert_spell 'fail',  input: 'afil',  dictionary: ['email', 'fail', 'eval']
+    assert_spell 'eval',  input: 'eavl',  dictionary: ['email', 'fail', 'eval']
+    assert_spell 'eval',  input: 'veal',  dictionary: ['email', 'fail', 'eval']
+    assert_spell 'sub!',  input: 'suv!',  dictionary: ['sub', 'gsub', 'sub!']
+    assert_spell 'sub',   input: 'suv',   dictionary: ['sub', 'gsub', 'sub!']
+
+    assert_spell %w(gsub! gsub),     input: 'gsuv!', dictionary: %w(sub gsub gsub!)
+    assert_spell %w(sub! sub gsub!), input: 'ssub!', dictionary: %w(sub sub! gsub gsub!)
+
+    group_methods = %w(groups group_url groups_url group_path)
+    assert_spell 'groups', input: 'group',  dictionary: group_methods
+
+    group_classes = %w(
+      GroupMembership
+      GroupMembershipPolicy
+      GroupMembershipDecorator
+      GroupMembershipSerializer
+      GroupHelper
+      Group
+      GroupMailer
+      NullGroupMembership
+    )
+
+    assert_spell 'GroupMembership',          dictionary: group_classes, input: 'GroupMemberhip'
+    assert_spell 'GroupMembershipDecorator', dictionary: group_classes, input: 'GroupMemberhipDecorator'
+
+    names = %w(first_name_change first_name_changed? first_name_will_change!)
+    assert_spell names, input: 'first_name_change!', dictionary: names
+
+    assert_empty DidYouMean::SpellChecker.new(dictionary: ['proc']).correct('product_path')
+    assert_empty DidYouMean::SpellChecker.new(dictionary: ['fork']).correct('fooo')
+  end
+
+  def test_spell_checker_corrects_misspells
+    assert_spell 'descendants',      input: 'dependents', dictionary: ['descendants']
+    assert_spell 'drag_to',          input: 'drag',       dictionary: ['drag_to']
+    assert_spell 'set_result_count', input: 'set_result', dictionary: ['set_result_count']
+  end
+
+  def test_spell_checker_sorts_results_by_simiarity
+    expected = %w(
+      name12345
+      name1234
+      name123
+    )
+
+    actual = DidYouMean::SpellChecker.new(dictionary: %w(
+      name12
+      name123
+      name1234
+      name12345
+      name123456
+    )).correct('name123456')
+
+    assert_equal expected, actual
+  end
+
+  def test_spell_checker_excludes_input_from_dictionary
+    assert_empty DidYouMean::SpellChecker.new(dictionary: ['input']).correct('input')
+    assert_empty DidYouMean::SpellChecker.new(dictionary: [:input]).correct('input')
+    assert_empty DidYouMean::SpellChecker.new(dictionary: ['input']).correct(:input)
+  end
+
+  private
+
+  def assert_spell(expected, input: , dictionary: )
+    corrections = DidYouMean::SpellChecker.new(dictionary: dictionary).correct(input)
+    assert_equal Array(expected), corrections, "Expected to suggest #{expected}, but got #{corrections.inspect}"
+  end
+end
diff --git a/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checking/class_name_check_test.rb b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checking/class_name_check_test.rb
new file mode 100644
index 0000000..a207e1f
--- /dev/null
+++ b/plc4j/integrations/logstash-plugin/vendor/jruby/lib/ruby/gems/shared/gems/did_you_mean-1.2.0/test/spell_checking/class_name_check_test.rb
@@ -0,0 +1,65 @@
+require 'test_helper'
+
+module ACRONYM
+end
+
+class Project
+  def self.bo0k
+    Bo0k
+  end
+end
+
+class Book
+  class TableOfContents; end
+
+  def tableof_contents
+    TableofContents
+  end
+
+  class Page
+    def tableof_contents
+      TableofContents
+    end
+
+    def self.tableof_contents
+      TableofContents
... 255675 lines suppressed ...