
                                 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.

----------------------------------------------------------------------------------------------------

pulsar-common/src/main/java/org/apache/pulsar/common/util/protobuf/ByteBufCoded{Input,Output}Stream.java

Copyright 2014, Google Inc.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it.  This code is not
standalone and requires a support library to be linked with it.  This
support library is itself covered by the above license.

----------------------------------------------------------------------------------------------------

pulsar-client-cpp/lib/lz4/lz4.{h,c}

LZ4 - Fast LZ compression algorithm
Copyright (C) 2011-2015, Yann Collet.

BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.

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.

You can contact the author at :
- LZ4 source repository : https://github.com/Cyan4973/lz4
- LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c

----------------------------------------------------------------------------------------------------

pulsar-client-cpp/lib/checksum/crc32c_sw.cc

/* crc32c.c -- compute CRC-32C using the Intel crc32 instruction
 * Copyright (C) 2013 Mark Adler
 * Version 1.1  1 Aug 2013  Mark Adler
 */

/*
 This software is provided 'as-is', without any express or implied
 warranty.  In no event will the author 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.

 Mark Adler
 madler@alumni.caltech.edu
 */

----------------------------------------------------------------------------------------------------

This projects includes binary packages with the following licenses:

The Apache Software License, Version 2.0
 * JCommander -- com.beust-jcommander-1.78.jar
 * High Performance Primitive Collections for Java -- com.carrotsearch-hppc-0.7.3.jar
 * Jackson
     - com.fasterxml.jackson.core-jackson-annotations-2.12.3.jar
     - com.fasterxml.jackson.core-jackson-core-2.12.3.jar
     - com.fasterxml.jackson.core-jackson-databind-2.12.3.jar
     - com.fasterxml.jackson.dataformat-jackson-dataformat-yaml-2.12.3.jar
     - com.fasterxml.jackson.jaxrs-jackson-jaxrs-base-2.12.3.jar
     - com.fasterxml.jackson.jaxrs-jackson-jaxrs-json-provider-2.12.3.jar
     - com.fasterxml.jackson.module-jackson-module-jaxb-annotations-2.12.3.jar
     - com.fasterxml.jackson.module-jackson-module-jsonSchema-2.12.3.jar
 * Caffeine -- com.github.ben-manes.caffeine-caffeine-2.9.1.jar
 * Conscrypt -- org.conscrypt-conscrypt-openjdk-uber-2.5.2.jar
 * Proto Google Common Protos -- com.google.api.grpc-proto-google-common-protos-1.17.0.jar
 * Bitbucket -- org.bitbucket.b_c-jose4j-0.7.6.jar
 * Gson
    - com.google.code.gson-gson-2.8.6.jar
    - io.gsonfire-gson-fire-1.8.5.jar
 * Guava
    - com.google.guava-guava-30.1-jre.jar
    - com.google.guava-failureaccess-1.0.1.jar
    - com.google.guava-listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
 * J2ObjC Annotations -- com.google.j2objc-j2objc-annotations-1.3.jar
 * Netty Reactive Streams -- com.typesafe.netty-netty-reactive-streams-2.0.4.jar
 * Swagger
    - io.swagger-swagger-annotations-1.6.2.jar
    - io.swagger-swagger-core-1.6.2.jar
    - io.swagger-swagger-models-1.6.2.jar
 * DataSketches
    - com.yahoo.datasketches-memory-0.8.3.jar
    - com.yahoo.datasketches-sketches-core-0.8.3.jar
 * Apache Commons
    - commons-cli-commons-cli-1.2.jar
    - commons-codec-commons-codec-1.15.jar
    - commons-collections-commons-collections-3.2.2.jar
    - commons-configuration-commons-configuration-1.10.jar
    - commons-io-commons-io-2.8.0.jar
    - commons-lang-commons-lang-2.6.jar
    - commons-logging-commons-logging-1.1.1.jar
    - org.apache.commons-commons-collections4-4.1.jar
    - org.apache.commons-commons-compress-1.21.jar
    - org.apache.commons-commons-lang3-3.11.jar
 * Netty
    - io.netty-netty-buffer-4.1.72.Final.jar
    - io.netty-netty-codec-4.1.72.Final.jar
    - io.netty-netty-codec-dns-4.1.72.Final.jar
    - io.netty-netty-codec-http-4.1.72.Final.jar
    - io.netty-netty-codec-http2-4.1.72.Final.jar
    - io.netty-netty-codec-socks-4.1.72.Final.jar
    - io.netty-netty-codec-haproxy-4.1.72.Final.jar
    - io.netty-netty-common-4.1.72.Final.jar
    - io.netty-netty-handler-4.1.72.Final.jar
    - io.netty-netty-handler-proxy-4.1.72.Final.jar
    - io.netty-netty-resolver-4.1.72.Final.jar
    - io.netty-netty-resolver-dns-4.1.72.Final.jar
    - io.netty-netty-transport-4.1.72.Final.jar
    - io.netty-netty-transport-classes-epoll-4.1.72.Final.jar
    - io.netty-netty-transport-native-epoll-4.1.72.Final-linux-x86_64.jar
    - io.netty-netty-transport-native-epoll-4.1.72.Final.jar
    - io.netty-netty-transport-native-unix-common-4.1.72.Final.jar
    - io.netty-netty-transport-native-unix-common-4.1.72.Final-linux-x86_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.46.Final.jar
    - io.netty-netty-tcnative-classes-2.0.46.Final.jar
 * Prometheus client
    - io.prometheus-simpleclient-0.5.0.jar
    - io.prometheus-simpleclient_common-0.5.0.jar
    - io.prometheus-simpleclient_hotspot-0.5.0.jar
    - io.prometheus-simpleclient_servlet-0.5.0.jar
    - io.prometheus-simpleclient_log4j2-0.5.0.jar
    - io.prometheus-simpleclient_jetty-0.5.0.jar
    - io.prometheus.jmx-collector-0.14.0.jar
    - io.prometheus-simpleclient_caffeine-0.5.0.jar
 * Jakarta Bean Validation API
    - jakarta.validation-jakarta.validation-api-2.0.2.jar
    - javax.validation-validation-api-1.1.0.Final.jar
 * Log4J
    - org.apache.logging.log4j-log4j-api-2.16.0.jar
    - org.apache.logging.log4j-log4j-core-2.16.0.jar
    - org.apache.logging.log4j-log4j-slf4j-impl-2.16.0.jar
    - org.apache.logging.log4j-log4j-web-2.16.0.jar
    - org.apache.logging.log4j-log4j-1.2-api-2.16.0.jar
 * Java Native Access JNA -- net.java.dev.jna-jna-4.2.0.jar
 * BookKeeper
    - org.apache.bookkeeper-bookkeeper-common-4.14.2.jar
    - org.apache.bookkeeper-bookkeeper-common-allocator-4.14.2.jar
    - org.apache.bookkeeper-bookkeeper-proto-4.14.2.jar
    - org.apache.bookkeeper-bookkeeper-server-4.14.2.jar
    - org.apache.bookkeeper-bookkeeper-tools-framework-4.14.2.jar
    - org.apache.bookkeeper-circe-checksum-4.14.2.jar
    - org.apache.bookkeeper-cpu-affinity-4.14.2.jar
    - org.apache.bookkeeper-statelib-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-api-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-common-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-java-client-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-java-client-base-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-proto-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-server-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-service-api-4.14.2.jar
    - org.apache.bookkeeper-stream-storage-service-impl-4.14.2.jar
    - org.apache.bookkeeper.http-http-server-4.14.2.jar
    - org.apache.bookkeeper.http-vertx-http-server-4.14.2.jar
    - org.apache.bookkeeper.stats-bookkeeper-stats-api-4.14.2.jar
    - org.apache.bookkeeper.stats-prometheus-metrics-provider-4.14.2.jar
    - org.apache.distributedlog-distributedlog-common-4.14.2.jar
    - org.apache.distributedlog-distributedlog-core-4.14.2-tests.jar
    - org.apache.distributedlog-distributedlog-core-4.14.2.jar
    - org.apache.distributedlog-distributedlog-protocol-4.14.2.jar
    - org.apache.bookkeeper.stats-codahale-metrics-provider-4.14.2.jar
  * Apache HTTP Client
    - org.apache.httpcomponents-httpclient-4.5.13.jar
    - org.apache.httpcomponents-httpcore-4.4.13.jar
 * AirCompressor
    - io.airlift-aircompressor-0.20.jar
 * AsyncHttpClient
    - org.asynchttpclient-async-http-client-2.12.1.jar
    - org.asynchttpclient-async-http-client-netty-utils-2.12.1.jar
 * Jetty
    - org.eclipse.jetty-jetty-client-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-continuation-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-http-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-io-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-proxy-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-security-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-server-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-servlet-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-servlets-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-util-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-util-ajax-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-javax-websocket-client-impl-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-websocket-api-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-websocket-client-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-websocket-common-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-websocket-server-9.4.43.v20210629.jar
    - org.eclipse.jetty.websocket-websocket-servlet-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-alpn-conscrypt-server-9.4.43.v20210629.jar
    - org.eclipse.jetty-jetty-alpn-server-9.4.43.v20210629.jar
 * SnakeYaml -- org.yaml-snakeyaml-1.27.jar
 * RocksDB - org.rocksdb-rocksdbjni-6.10.2.jar
 * Google Error Prone Annotations - com.google.errorprone-error_prone_annotations-2.5.1.jar
 * Apache Thrift - org.apache.thrift-libthrift-0.14.2.jar
 * OkHttp3
     - com.squareup.okhttp3-logging-interceptor-4.9.3.jar
     - com.squareup.okhttp3-okhttp-4.9.3.jar
 * Okio - com.squareup.okio-okio-2.8.0.jar
 * Javassist -- org.javassist-javassist-3.25.0-GA.jar
 * Kotlin Standard Lib
     - org.jetbrains.kotlin-kotlin-stdlib-1.4.32.jar
     - org.jetbrains.kotlin-kotlin-stdlib-common-1.4.32.jar
     - org.jetbrains.kotlin-kotlin-stdlib-jdk7-1.4.32.jar
     - org.jetbrains.kotlin-kotlin-stdlib-jdk8-1.4.32.jar
     - org.jetbrains-annotations-13.0.jar
 * gRPC
    - io.grpc-grpc-all-1.33.0.jar
    - io.grpc-grpc-auth-1.33.0.jar
    - io.grpc-grpc-context-1.33.0.jar
    - io.grpc-grpc-core-1.33.0.jar
    - io.grpc-grpc-netty-1.33.0.jar
    - io.grpc-grpc-protobuf-1.33.0.jar
    - io.grpc-grpc-protobuf-lite-1.33.0.jar
    - io.grpc-grpc-stub-1.33.0.jar
    - io.grpc-grpc-alts-1.33.0.jar
    - io.grpc-grpc-api-1.33.0.jar
    - io.grpc-grpc-grpclb-1.33.0.jar
    - io.grpc-grpc-netty-shaded-1.33.0.jar
    - io.grpc-grpc-services-1.33.0.jar
    - io.grpc-grpc-xds-1.33.0.jar
  * Perfmark
    - io.perfmark-perfmark-api-0.19.0.jar
  * OpenCensus
    - io.opencensus-opencensus-api-0.18.0.jar
    - io.opencensus-opencensus-contrib-http-util-0.24.0.jar
    - io.opencensus-opencensus-proto-0.2.0.jar
  * Jodah
    - net.jodah-typetools-0.5.0.jar
  * Apache Avro
    - org.apache.avro-avro-1.10.2.jar
    - org.apache.avro-avro-protobuf-1.10.2.jar
  * Apache Curator
    - org.apache.curator-curator-client-5.1.0.jar
    - org.apache.curator-curator-framework-5.1.0.jar
    - org.apache.curator-curator-recipes-5.1.0.jar
  * Apache Yetus
    - org.apache.yetus-audience-annotations-0.5.0.jar
  * Kubernetes Client
    - io.kubernetes-client-java-12.0.1.jar
    - io.kubernetes-client-java-api-12.0.1.jar
    - io.kubernetes-client-java-proto-12.0.1.jar
  * Dropwizard
    - io.dropwizard.metrics-metrics-core-3.2.5.jar
    - io.dropwizard.metrics-metrics-graphite-3.2.5.jar
    - io.dropwizard.metrics-metrics-jvm-3.2.5.jar
  * Prometheus
    - io.prometheus-simpleclient_httpserver-0.5.0.jar
  * Java JSON WebTokens
    - io.jsonwebtoken-jjwt-api-0.11.1.jar
    - io.jsonwebtoken-jjwt-impl-0.11.1.jar
    - io.jsonwebtoken-jjwt-jackson-0.11.1.jar
  * JCTools - Java Concurrency Tools for the JVM
    - org.jctools-jctools-core-2.1.2.jar
  * Vertx
    - io.vertx-vertx-auth-common-3.9.8.jar
    - io.vertx-vertx-bridge-common-3.9.8.jar
    - io.vertx-vertx-core-3.9.8.jar
    - io.vertx-vertx-web-3.9.8.jar
    - io.vertx-vertx-web-common-3.9.8.jar
  * Apache ZooKeeper
    - org.apache.zookeeper-zookeeper-3.6.3.jar
    - org.apache.zookeeper-zookeeper-jute-3.6.3.jar
    - org.apache.zookeeper-zookeeper-prometheus-metrics-3.6.3.jar
  * Snappy Java
    - org.xerial.snappy-snappy-java-1.1.7.jar
  * Google HTTP Client
    - com.google.http-client-google-http-client-jackson2-1.34.0.jar
    - com.google.http-client-google-http-client-1.34.0.jar
    - com.google.auto.value-auto-value-annotations-1.7.jar
    - com.google.re2j-re2j-1.2.jar

BSD 3-clause "New" or "Revised" License
 * Google auth library
    - com.google.auth-google-auth-library-credentials-0.20.0.jar -- licenses/LICENSE-google-auth-library.txt
    - com.google.auth-google-auth-library-oauth2-http-0.20.0.jar -- licenses/LICENSE-google-auth-library.txt
 * LevelDB -- (included in org.rocksdb.*.jar) -- licenses/LICENSE-LevelDB.txt
 * JSR305 -- com.google.code.findbugs-jsr305-3.0.2.jar -- licenses/LICENSE-JSR305.txt
 * JLine -- jline-jline-2.14.6.jar -- licenses/LICENSE-JLine.txt

BSD 2-Clause License
 * HdrHistogram -- org.hdrhistogram-HdrHistogram-2.1.9.jar -- licenses/LICENSE-HdrHistogram.txt

MIT License
 * Java SemVer -- com.github.zafarkhaja-java-semver-0.9.0.jar -- licenses/LICENSE-SemVer.txt
 * SLF4J -- licenses/LICENSE-SLF4J.txt
    - org.slf4j-jul-to-slf4j-1.7.25.jar
    - org.slf4j-slf4j-api-1.7.25.jar
    - org.slf4j-jcl-over-slf4j-1.7.25.jar
 * The Checker Framework
    - org.checkerframework-checker-qual-3.5.0.jar

Protocol Buffers License
 * Protocol Buffers
   - com.google.protobuf-protobuf-java-3.11.4.jar -- licenses/LICENSE-protobuf.txt
   - com.google.protobuf-protobuf-java-util-3.11.4.jar -- licenses/LICENSE-protobuf.txt

CDDL-1.1 -- licenses/LICENSE-CDDL-1.1.txt
 * Java Annotations API
    - javax.annotation-javax.annotation-api-1.3.2.jar
    - com.sun.activation-javax.activation-1.2.0.jar
    - javax.xml.bind-jaxb-api-2.3.1.jar
 * Java Servlet API -- javax.servlet-javax.servlet-api-3.1.0.jar
 * WebSocket Server API -- javax.websocket-javax.websocket-client-api-1.0.jar
 * Java Web Service REST API -- javax.ws.rs-javax.ws.rs-api-2.1.jar
 * HK2 - Dependency Injection Kernel
    - org.glassfish.hk2-hk2-api-2.6.1.jar
    - org.glassfish.hk2-hk2-locator-2.6.1.jar
    - org.glassfish.hk2-hk2-utils-2.6.1.jar
    - org.glassfish.hk2-osgi-resource-locator-1.0.3.jar
    - org.glassfish.hk2.external-aopalliance-repackaged-2.6.1.jar
 * Jersey
    - org.glassfish.jersey.containers-jersey-container-servlet-2.34.jar
    - org.glassfish.jersey.containers-jersey-container-servlet-core-2.34.jar
    - org.glassfish.jersey.core-jersey-client-2.34.jar
    - org.glassfish.jersey.core-jersey-common-2.34.jar
    - org.glassfish.jersey.core-jersey-server-2.34.jar
    - org.glassfish.jersey.ext-jersey-entity-filtering-2.34.jar
    - org.glassfish.jersey.media-jersey-media-json-jackson-2.34.jar
    - org.glassfish.jersey.media-jersey-media-multipart-2.34.jar
    - org.glassfish.jersey.inject-jersey-hk2-2.34.jar
 * Mimepull -- org.jvnet.mimepull-mimepull-1.9.13.jar

Eclipse Distribution License 1.0 -- licenses/LICENSE-EDL-1.0.txt
 * Jakarta Activation
    - jakarta.activation-jakarta.activation-api-1.2.2.jar
 * Jakarta XML Binding -- jakarta.xml.bind-jakarta.xml.bind-api-2.3.3.jar

Eclipse Public License - v2.0 -- licenses/LICENSE-EPL-2.0.txt
 * Jakarta Annotations API -- jakarta.annotation-jakarta.annotation-api-1.3.5.jar
 * Jakarta RESTful Web Services -- jakarta.ws.rs-jakarta.ws.rs-api-2.1.6.jar
 * Jakarta Injection -- org.glassfish.hk2.external-jakarta.inject-2.6.1.jar

Public Domain (CC0) -- licenses/LICENSE-CC0.txt
 * Reactive Streams -- org.reactivestreams-reactive-streams-1.0.3.jar

Creative Commons Attribution License
 * Jcip -- licenses/LICENSE-jcip.txt
    - net.jcip-jcip-annotations-1.0.jar

Bouncy Castle License
 * Bouncy Castle -- licenses/LICENSE-bouncycastle.txt
    - org.bouncycastle-bcpkix-jdk15on-1.69.jar
    - org.bouncycastle-bcprov-ext-jdk15on-1.69.jar
    - org.bouncycastle-bcprov-jdk15on-1.69.jar
    - org.bouncycastle-bcutil-jdk15on-1.69.jar

------------------------

Additionaly, Netty includes code with the following licenses:

Contains a modified portion of 'Webbit', an event based WebSocket and HTTP server, which can be obtained at:

 * LICENSE:
   * licenses/LICENSE-Webbit.txt (BSD License)
 * HOMEPAGE:
   * https://github.com/joewalnes/webbit

Contains a modified portion of 'SLF4J', a simple logging facade for Java, which can be obtained at:

 * LICENSE:
   * licenses/LICENSE-SLF4J.txt (MIT License)
 * HOMEPAGE:
   * http://www.slf4j.org/

Contains a modified portion of 'jbzip2', a Java bzip2 compression and decompression library written
by Matthew J. Francis. It can be obtained at:

 * LICENSE:
   * licenses/LICENSE-jbzip2.txt (MIT License)
 * HOMEPAGE:
   * https://code.google.com/p/jbzip2/

Contains a modified portion of 'libdivsufsort', a C API library to construct
the suffix array and the Burrows-Wheeler transformed string for any input string of
a constant-size alphabet written by Yuta Mori. It can be obtained at:

 * LICENSE:
   * licenses/LICENSE-libdivsufsort.txt (MIT License)
 * HOMEPAGE:
   * https://github.com/y-256/libdivsufsort

Contains a modified portion of 'jfastlz', a Java port of FastLZ compression
and decompression library written by William Kinney. It can be obtained at:

 * LICENSE:
   * licenses/LICENSE-jfastlz.txt (MIT License)
 * HOMEPAGE:
   * https://code.google.com/p/jfastlz/

Contains a modified portion of and optionally depends on 'Protocol Buffers', Google's data
interchange format, which can be obtained at:

 * LICENSE:
   * licenses/LICENSE-protobuf.txt (New BSD License)
 * HOMEPAGE:
* https://github.com/google/protobuf
