Apache IoTDB
Copyright 2018-2026 The Apache Software Foundation.

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

============================================================================

IoTDB project uses 4 Chinese Patents:
* 201711384490X
* 201810111712.9
* 201711322631.5
* 201711319331.1

According to the Apache 2.0 License. The owner of the patents, Tsinghua University,
grant the users the right to the use of patent under the requirement of Apache 2.0 License.

============================================================================

This product includes source code derived from the DataDog/toto project:

  Toto – Timeseries-Optimized Transformer for Observability
  Copyright 2025 Datadog, Inc.
  Licensed under the Apache License, Version 2.0
  https://github.com/DataDog/toto

============================================================================

Apache Commons Collections
Copyright 2001-2019 The Apache Software Foundation

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