                                 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.

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

This projects includes binary packages with the following licenses:

The Apache Software License, Version 2.0

  * Jackson
    - jackson-annotations-2.13.2.jar
    - jackson-core-2.13.2.jar
    - jackson-databind-2.13.2.1.jar
    - jackson-dataformat-smile-2.13.2.jar
    - jackson-datatype-guava-2.13.2.jar
    - jackson-datatype-jdk8-2.13.2.jar
    - jackson-datatype-joda-2.13.2.jar
    - jackson-datatype-jsr310-2.13.2.jar
    - jackson-dataformat-yaml-2.13.2.jar
    - jackson-jaxrs-base-2.13.2.jar
    - jackson-jaxrs-json-provider-2.13.2.jar
    - jackson-module-jaxb-annotations-2.13.2.jar
    - jackson-module-jsonSchema-2.13.2.jar
 * Guava
    - guava-31.0.1-jre.jar
    - listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
    - failureaccess-1.0.1.jar
 * Google Guice
    - guice-5.1.0.jar
 * Apache Commons
    - commons-math3-3.6.1.jar
    - commons-compress-1.21.jar
    - commons-lang3-3.11.jar
 * Netty
    - netty-3.10.6.Final.jar
    - netty-buffer-4.1.77.Final.jar
    - netty-codec-4.1.77.Final.jar
    - netty-codec-dns-4.1.77.Final.jar
    - netty-codec-http-4.1.77.Final.jar
    - netty-codec-haproxy-4.1.77.Final.jar
    - netty-codec-socks-4.1.77.Final.jar
    - netty-handler-proxy-4.1.77.Final.jar
    - netty-common-4.1.77.Final.jar
    - netty-handler-4.1.77.Final.jar
    - netty-reactive-streams-2.0.6.jar
    - netty-resolver-4.1.77.Final.jar
    - netty-resolver-dns-4.1.77.Final.jar
    - netty-tcnative-boringssl-static-2.0.52.Final.jar
    - netty-tcnative-boringssl-static-2.0.52.Final-linux-aarch_64.jar
    - netty-tcnative-boringssl-static-2.0.52.Final-linux-x86_64.jar
    - netty-tcnative-boringssl-static-2.0.52.Final-osx-aarch_64.jar
    - netty-tcnative-boringssl-static-2.0.52.Final-osx-x86_64.jar
    - netty-tcnative-boringssl-static-2.0.52.Final-windows-x86_64.jar
    - netty-tcnative-classes-2.0.52.Final.jar
    - netty-transport-4.1.77.Final.jar
    - netty-transport-classes-epoll-4.1.77.Final.jar
    - netty-transport-native-epoll-4.1.77.Final-linux-x86_64.jar
    - netty-transport-native-unix-common-4.1.77.Final.jar
    - netty-transport-native-unix-common-4.1.77.Final-linux-x86_64.jar
    - netty-codec-http2-4.1.77.Final.jar
 * GRPC
    - grpc-api-1.45.1.jar
    - grpc-context-1.45.1.jar
    - grpc-core-1.45.1.jar
    - grpc-grpclb-1.45.1.jar
    - grpc-netty-1.45.1.jar
    - grpc-protobuf-1.45.1.jar
    - grpc-protobuf-lite-1.45.1.jar
    - grpc-stub-1.45.1.jar
  * JEtcd
    - jetcd-common-0.5.11.jar
    - jetcd-core-0.5.11.jar

 * Joda Time
    - joda-time-2.10.5.jar
    - failsafe-2.4.4.jar
  * Jetty
    - http2-client-9.4.44.v20210927.jar
    - http2-common-9.4.44.v20210927.jar
    - http2-hpack-9.4.44.v20210927.jar
    - http2-http-client-transport-9.4.44.v20210927.jar
    - jetty-alpn-client-9.4.44.v20210927.jar
    - http2-server-9.4.44.v20210927.jar
    - jetty-alpn-java-client-9.4.44.v20210927.jar
    - jetty-client-9.4.44.v20210927.jar
    - jetty-http-9.4.44.v20210927.jar
    - jetty-io-9.4.44.v20210927.jar
    - jetty-jmx-9.4.44.v20210927.jar
    - jetty-security-9.4.44.v20210927.jar
    - jetty-server-9.4.44.v20210927.jar
    - jetty-servlet-9.4.44.v20210927.jar
    - jetty-util-9.4.44.v20210927.jar
    - jetty-util-ajax-9.4.44.v20210927.jar
  * Apache BVal
    - bval-jsr-2.0.0.jar
  * Bytecode
    - bytecode-1.2.jar
  * CGLIB Nodep
    - cglib-nodep-3.3.0.jar
  * Airlift
    - aircompressor-0.20.jar
    - airline-0.8.jar
    - bootstrap-0.199.jar
    - bootstrap-0.195.jar
    - concurrent-0.195.jar
    - configuration-0.199.jar
    - configuration-0.195.jar
    - discovery-0.195.jar
    - discovery-server-1.29.jar
    - event-0.195.jar
    - http-client-0.195.jar
    - http-server-0.195.jar
    - jmx-0.195.jar
    - jmx-http-0.195.jar
    - jmx-http-rpc-0.159.jar
    - joni-2.1.5.3.jar
    - json-0.199.jar
    - json-0.195.jar
    - log-0.199.jar
    - log-0.195.jar
    - log-manager-0.199.jar
    - log-manager-0.195.jar
    - node-0.195.jar
    - parameternames-1.4.jar
    - resolver-1.5.jar
    - security-0.195.jar
    - slice-0.38.jar
    - stats-0.195.jar
    - trace-token-0.195.jar
    - units-1.6.jar
   * Apache HTTP Client
    - httpclient-4.5.13.jar
    - httpcore-4.4.13.jar
  * Error Prone Annotations
    - error_prone_annotations-2.5.1.jar
  * Esri Geometry API For Java
    - esri-geometry-api-2.2.2.jar
  * Failsafe
    - failsafe-2.0.1.jar
  * Fastutil
    - fastutil-8.3.0.jar
  * J2ObjC Annotations
    - j2objc-annotations-1.3.jar
  * JSON Web Token Support For The JVM
    - jjwt-0.9.0.jar
  * Jmxutils
    - jmxutils-1.21.jar
  * LevelDB
    - leveldb-0.10.jar
    - leveldb-api-0.10.jar
  * Log4j implemented over SLF4J
    - log4j-over-slf4j-1.7.32.jar
  * Lucene Common Analyzers
    - lucene-analyzers-common-8.4.1.jar
    - lucene-core-8.4.1.jar
  * Maven
    - maven-aether-provider-3.0.5.jar
    - maven-artifact-3.0.5.jar
    - maven-core-3.0.5.jar
    - maven-compat-3.0.5.jar
    - maven-embedder-3.0.5.jar
    - maven-model-3.0.5.jar
    - maven-model-builder-3.0.5.jar
    - maven-plugin-api-3.0.5.jar
    - maven-repository-metadata-3.0.5.jar
    - maven-settings-3.0.5.jar
    - maven-settings-builder-3.0.5.jar
	- wagon-provider-api-2.4.jar
  * OkHttp
    - okhttp-3.14.9.jar
    - okhttp-urlconnection-3.14.9.jar
  * OpenCSV
    - opencsv-2.3.jar
  * Plexus
    - plexus-cipher-1.7.jar
    - plexus-classworlds-2.4.jar
    - plexus-component-annotations-1.5.5.jar
    - plexus-container-default-1.5.5.jar
    - plexus-interpolation-1.14.jar
    - plexus-sec-dispatcher-1.3.jar
    - plexus-utils-2.0.6.jar
  * Apache XBean :: Reflect
    - xbean-reflect-3.4.jar
  * Avro
    - avro-1.10.2.jar
    - avro-protobuf-1.10.2.jar
  * Caffeine
    - caffeine-2.9.1.jar
  * Javax
    - javax.inject-1.jar
    - javax.servlet-api-3.1.0.jar
    - javax.servlet-api-4.0.1.jar
    - javax.ws.rs-api-2.1.jar
  * JCommander
    - jcommander-1.78.jar
  * FindBugs JSR305
    - jsr305-3.0.2.jar
  * Objenesis
    - objenesis-2.6.jar
  * Okio
    - okio-1.17.2.jar
  * Presto
    - presto-array-332.jar
    - presto-cli-332.jar
    - presto-client-332.jar
    - presto-geospatial-toolkit-332.jar
    - presto-main-332.jar
    - presto-matching-332.jar
    - presto-memory-context-332.jar
    - presto-parser-332.jar
    - presto-plugin-toolkit-332.jar
    - presto-spi-332.jar
    - presto-record-decoder-332.jar
  * RocksDB JNI
    - rocksdbjni-6.10.2.jar
  * SnakeYAML
    - snakeyaml-1.30.jar
  * Bean Validation API
    - validation-api-2.0.1.Final.jar
  * Objectsize
    - objectsize-0.0.12.jar
  * Dropwizard Metrics
    - metrics-core-3.2.5.jar
    - metrics-graphite-3.2.5.jar
    - metrics-jvm-3.2.5.jar
  * Prometheus
    - simpleclient-0.5.0.jar
    - simpleclient_common-0.5.0.jar
    - simpleclient_hotspot-0.5.0.jar
    - simpleclient_servlet-0.5.0.jar
  * JCTools
    - jctools-core-2.1.2.jar
  * Asynchronous Http Client
    - async-http-client-1.6.5.jar
    - async-http-client-2.12.1.jar
    - async-http-client-netty-utils-2.12.1.jar
  * Apache Bookkeeper
    - bookkeeper-common-4.14.5.jar
    - bookkeeper-common-allocator-4.14.5.jar
    - bookkeeper-proto-4.14.5.jar
    - bookkeeper-server-4.14.5.jar
    - bookkeeper-stats-api-4.14.5.jar
    - bookkeeper-tools-framework-4.14.5.jar
    - circe-checksum-4.14.5.jar
    - codahale-metrics-provider-4.14.5.jar
    - cpu-affinity-4.14.5.jar
    - http-server-4.14.5.jar
    - prometheus-metrics-provider-4.14.5.jar
    - codahale-metrics-provider-4.14.5.jar
  * Apache Commons
    - commons-cli-1.5.0.jar
    - commons-codec-1.15.jar
    - commons-collections4-4.1.jar
    - commons-configuration-1.10.jar
    - commons-io-2.8.0.jar
    - commons-lang-2.6.jar
    - commons-logging-1.2.jar
  * GSON
    - gson-2.8.9.jar
  * Snappy
    - snappy-java-1.1.7.jar
  * Jackson
    - jackson-module-parameter-names-2.13.2.jar
  * Java Assist
    - javassist-3.25.0-GA.jar
  * Java Native Access
    - jna-4.2.0.jar
  * Java Object Layout: Core
    - jol-core-0.2.jar
  * Yahoo Datasketches
    - memory-0.8.3.jar
    - sketches-core-0.8.3.jar
  * Apache Zookeeper
    - zookeeper-3.6.3.jar
    - zookeeper-jute-3.6.3.jar
  * Apache Yetus Audience Annotations
    - audience-annotations-0.5.0.jar
  * Swagger
    - swagger-annotations-1.6.2.jar
  * Perfmark
    - perfmark-api-0.19.0.jar
  * Annotations
    - auto-service-annotations-1.0.jar

Protocol Buffers License
 * Protocol Buffers
   - protobuf-java-3.19.2.jar
   - protobuf-java-util-3.19.2.jar
   - proto-google-common-protos-2.0.1.jar

BSD 3-clause "New" or "Revised" License
  *  RE2J TD -- re2j-td-1.4.jar
  *  DSL Platform JSON
    - dsl-json-1.8.4.jar

BSD License
 * ANTLR 4 Runtime -- antlr4-runtime-4.7.1.jar
 * ASM, a very small and fast Java bytecode manipulation framework
    - asm-6.2.1.jar
    - asm-analysis-6.2.1.jar
    - asm-tree-6.2.1.jar
    - asm-util-6.2.1.jar
 * JLine
   - jline-reader-3.12.1.jar
   - jline-terminal-3.12.1.jar
   - jline-terminal-jna-3.12.1.jar

MIT License
 * PCollections
   - pcollections-2.1.2.jar
 * SLF4J
   - slf4j-api-1.7.32.jar
   - slf4j-jdk14-1.7.32.jar
 * JCL 1.2 Implemented Over SLF4J
   - jcl-over-slf4j-1.7.32.jar
 * JUL to SLF4J Bridge
   - jul-to-slf4j-1.7.32.jar
 * Checker Qual
   - checker-qual-3.12.0.jar 
 * Annotations
   - animal-sniffer-annotations-1.19.jar
   - annotations-4.1.1.4.jar

CDDL - 1.0
 * OSGi Resource Locator
    - osgi-resource-locator-1.0.3.jar

CDDL-1.1 -- licenses/LICENSE-CDDL-1.1.txt
 * Java Annotations API
   - javax.activation-1.2.0.jar
   - javax.activation-api-1.2.0.jar
 * HK2 - Dependency Injection Kernel
   - hk2-api-2.6.1.jar
   - hk2-locator-2.6.1.jar
   - hk2-utils-2.6.1.jar
   - aopalliance-repackaged-2.6.1.jar
 * Jersey
    - jaxrs-0.195.jar
    - jersey-client-2.34.jar
    - jersey-container-servlet-2.34.jar
    - jersey-container-servlet-core-2.34.jar
    - jersey-entity-filtering-2.34.jar
    - jersey-hk2-2.34.jar
    - jersey-media-json-jackson-2.34.jar
    - jersey-media-multipart-2.34.jar
    - jersey-server-2.34.jar
    - jersey-common-2.34.jar
 * JAXB
    - jaxb-api-2.3.1.jar

 Eclipse Public License 1.0 -- licenses/LICENSE-AspectJ.txt
  * Aether
     - aether-api-1.13.1.jar
     - aether-connector-asynchttpclient-1.13.1.jar
     - aether-connector-file-1.13.1.jar
     - aether-impl-1.13.1.jar
     - aether-spi-1.13.1.jar
     - aether-util-1.13.1.jar
  * JTS Core
     - jts-core-1.16.1.jar
  *JGraphT Core
     - jgrapht-core-0.9.0.jar
  * Logback Core Module
    - logback-core-1.2.3.jar
  * MIME Streaming Extension
    - mimepull-1.9.13.jar

Eclipse Public License - v2.0 -- licenses/LICENSE-EPL-2.0.txt
 * jakarta.annotation-api-1.3.5.jar
 * jakarta.inject-2.6.1.jar
 * jakarta.validation-api-2.0.2.jar
 * jakarta.ws.rs-api-2.1.6.jar
 * jakarta.activation-api-1.2.2.jar
 * jakarta.xml.bind-api-2.3.3.jar

Public Domain (CC0) -- licenses/LICENSE-CC0.txt
 * HdrHistogram
   - HdrHistogram-2.1.9.jar
 * AOP Alliance
   - aopalliance-1.0.jar
 * Reactive Streams
    - reactive-streams-1.0.3.jar

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

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