nifi-cdc-mysql-nar
Copyright 2014-2021 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

===========================================
Apache Software License v2
===========================================

  (ASLv2) Jackson JSON processor
    The following NOTICE information applies:
      # Jackson JSON processor

      Jackson is a high-performance, Free/Open Source JSON processing library.
      It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
      been in development since 2007.
      It is currently developed by a community of developers, as well as supported
      commercially by FasterXML.com.

      ## Licensing

      Jackson core and extension components may licensed under different licenses.
      To find the details that apply to this artifact see the accompanying LICENSE file.
      For more information, including possible other licensing options, contact
      FasterXML.com (http://fasterxml.com).

      ## Credits

      A list of contributors may be found from CREDITS file, which is included
      in some artifacts (usually source distributions); but is always available
      from the source code management (SCM) system project uses.