Apache NiFi MiNiFi C++
Copyright 2026 The Apache Software Foundation

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

This includes derived works from the Apache NiFi (ALv2 Licensed) project (https://github.com/apache/nifi):
Copyright 2026 The Apache Software Foundation
The derived and original works are listed below:
    SFTPTestServer extends and is based on SSHTestServer

This includes derived works from the cURL (MIT/X-style licensed) project (https://github.com/curl/curl):
Copyright (c) 1996 - 2022, Daniel Stenberg, <daniel@haxx.se>, and many contributors, see the THANKS file.
The derived work is adapted from
  CMake/FindLibSSH2.cmake and can be found in cmake/libssh2/sys/FindLibSSH2.cmake

This includes derived works from the CMake (BSD 3-Clause licensed) project (https://github.com/Kitware/CMake):
Copyright 2000-2022 Kitware, Inc. and Contributors
The derived work is adapted from
  Modules/FindPatch.cmake
and can be found in cmake/FindPatch.cmake

This includes derived works from the 'POCO C++ Libraries' (BSL-1.0 licensed) project (https://github.com/pocoproject/poco):
The derived work is adapted from
  cmake/PocoMacros.cmake and can be found in cmake/FindMessageCompiler.cmake

This bundles the 'AWS SDK for C++' (ALv2 licensed) project (https://github.com/aws/aws-sdk-cpp/), which includes the following NOTICE:
AWS SDK for C++
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

This product includes software developed by
Amazon Technologies, Inc (http://www.amazon.com/).

This bundles the 'Azure SDK for C++' (MIT licensed) project (https://github.com/Azure/azure-sdk-for-cpp), which includes the following NOTICE:
Copyright (c) Microsoft Corporation.

This includes CodeCoverage.cmake from the bilke/cmake-modules project (https://github.com/bilke/cmake-modules)
Copyright (c) 2012 - 2017, Lars Bilke

**********************
THIRD PARTY COMPONENTS
**********************
This software includes third party software subject to the following copyrights:
- Very fast, header-only/compiled, C++ logging library from spdlog - Copyright (c) 2016 Gabi Melman
- An open-source formatting library for C++ from fmt - Copyright (c) 2012 - present, Victor Zverovich
- JSON parsing and utility functions from JsonCpp - Copyright (c) 2007-2010 Baptiste Lepilleur
- OpenSSL build files for cmake used for Android Builds - Copyright (C) 2007-2012 LuaDist and Copyright (C) 2013 Brian Sidebotham
- Android tool chain cmake build files - Copyright (c) 2010-2011, Ethan Rublee and Copyright (c) 2011-2014, Andrey Kamaev
- gsl-lite - Copyright (c) 2015-2019 Martin Moene, Copyright (c) 2019-2021 Moritz Beutel and Copyright (c) 2015-2018 Microsoft Corporation. All rights reserved.
- libsodium - Copyright (c) 2013 - 2022 Frank Denis under the ISC software license
- IANA timezone database - public domain
- date (HowardHinnant/date) - notices below
- range-v3 - Eric Niebler and other contributors
- expected-lite - Copyright (C) 2016-2020 Martin Moene.
- asio - Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
- TartanLlama/expected - public domain, thanks to Sy Brand
- libyaml - Copyright (c) 2006-2016 Kirill Simonov, Copyright (c) 2017-2020 Ingy döt Net
- libwebsockets - Copyright (C) 2010 - 2022 Andy Green <andy@warmcat.com>
- kubernetes-client/c - Brendan Burns, Hui Yu and other contributors
- nlohmann json - Copyright (c) 2013-2022 Niels Lohmann
- abseil-cpp - Google Inc.
- crc32c - Google Inc., Fangming Fang, Vadim Skipin, Rodrigo Tobar, Harry Mallon
- prometheus-cpp - Copyright (c) 2016-2021 Jupp Mueller, Copyright (c) 2017-2022 Gregor Jasny
- Zstandard - Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
- LZ4 Library - Copyright (c) 2011-2020, Yann Collet
- OpenSSL - Copyright (c) 1998-2022 The OpenSSL Project, Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.
- bitwizeshift.github.io - Copyright (c) 2020 Matthew Rodusek
- magic_enum - Copyright (c) 2019 - 2023 Daniil Goncharov
- argparse - Copyright (c) 2018 Pranav Srinivas Kumar <pranav.srinivas.kumar@gmail.com>
- gRPC - Copyright 2014 gRPC authors.
- protbuf - Copyright 2008 Google Inc.  All rights reserved.
- RE2 - Copyright (c) 2009 The RE2 Authors. All rights reserved.
- c-ares - Copyright (c) 1998 Massachusetts Institute of Technology Copyright (c) 2007 - 2023 Daniel Stenberg with many contributors, see AUTHORS file.
- lua - Copyright (c) 1994–2023 Lua.org, PUC-Rio.
- couchbase-cxx-client - Copyright 2023-Present Couchbase, Inc.
- snappy - Copyright 2011, Google Inc.
- llhttp - Copyright Fedor Indutny, 2018.
- benchmark - Copyright 2015 Google Inc.
- llama.cpp - Copyright (c) 2023-2024 The ggml authors
- pugixml - Copyright (C) 2003, by Kristen Wegner (kristen@tima.net)
- jsoncons - Copyright Daniel Parker 2013 - 2020.

The licenses for these third party components are included in LICENSE.txt

Copyright notices of the date project:
// Copyright (c) 2015, 2016, 2017 Howard Hinnant
// Copyright (c) 2015 Ville Voutilainen
// Copyright (c) 2016, 2017, 2019 Jiangang Zhuang
// Copyright (c) 2016 Adrian Colomitchi
// Copyright (c) 2016 Alexander Kormanovsky
// Copyright (c) 2017 Aaron Bishop
// Copyright (c) 2017 Florian Dang
// Copyright (c) 2017 Nicolas Veloz Savino
// Copyright (c) 2017 Paul Thompson
// Copyright (c) 2017, 2018, 2019 Tomasz Kamiński
// Copyright (c) 2019 Asad. Gharighi

range-v3:
(C) Copyright Kevlin Henney and Dave Abrahams 1999.
Copyright 2005 - 2007 Adobe Systems Incorporated
Copyright 2019-present Christopher Di Bella
Copyright Andrew Sutton 2014
Copyright Andrey Diduh 2019
Copyright Barry Revzin 2019-present
Copyright (c) 1994 Hewlett-Packard Company
Copyright (c) 1996 Silicon Graphics Computer Systems, Inc.
Copyright (c) 2009 Alexander Stepanov and Paul McJones
Copyright (c) 2013 GitHub, Inc.
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
Copyright (c) 2018-present, Facebook, Inc.
Copyright (c) 2020-present, Google LLC.
Copyright Casey Carter 2015-present
Copyright Eric Niebler 2004,2013-present
Copyright Filip Matner 2015,2017
Copyright Gonzalo Brito Gadeschi 2014-2017
Copyright Google LLC 2020-present
Copyright Jeff Garland 2017
Copyright Johel Guerrero 2019
Copyright Louis Dionne 2013-2017
Copyright Luis Martinez de Bartolome Izquierdo 2016
Copyright Michel Morin 2014
Copyright MikeGitb 2018-present
Copyright Mitsutaka Takeda 2018-present
Copyright Rostislav Khlebnikov 2017
Copyright Tobias Mayer 2016
Copyright Tomislav Ivek 2015-2016
