PrintCuro Connector - Third-Party Software Notices
===================================================

PrintCuro Connector is proprietary software. It includes or distributes the
third-party components listed below. Those components remain governed by their
respective licenses; those licenses do not change the license of PrintCuro's
original proprietary code except where their own terms expressly require it.

1. EWR (Epson Waste Reset)
--------------------------
Upstream: RxNaison/Epson-Waste-Reset
Pinned release: v1.3.1
License: Apache License, Version 2.0

PrintCuroProtocol.exe is based on the upstream EWR v1.3.1 ewr_core USB/session
engine. PrintCuro modifies the freshly downloaded v1.3.1 Windows transport at
build time in src/usb_windows.cpp: once a complete IEEE 1284.4/D4 frame burst
is provably present from the frame length fields, the generic follow-up settle
wait ends immediately. Partial, prefixed or ambiguous data retains upstream
waiting behavior. The modified source file carries a PrintCuro modification
notice and the corresponding source is included in the Open Source Compliance
archive installed with PrintCuro.

v0.3.88 also modifies device binding, D4 recovery lifecycle and printer-status
validation. Windows and Linux apply the same reviewed source overlay listed in
build/ewr_helper/safety_overlay.json to the same exact EWR commit. Modified
source files are identified with a PrintCuro modification notice.

v0.3.90 additionally validates EEPROM readback tokens/address echoes and applies
the existing held-handle binding to status-only reads.

No EWR model database is distributed or loaded by PrintCuro at runtime.
Printer model support, EEPROM parameters, counter formulas and reset values are
supplied only through signed PrintCuro server profiles/grants.

The Apache License 2.0 text is provided in EWR_APACHE-2.0.txt.
PrintCuro is not affiliated with or endorsed by the EWR project or its authors.

2. JSON for Modern C++ (nlohmann/json)
--------------------------------------
Copyright (c) 2013-2026 Niels Lohmann and contributors
License: MIT (with Hedley portions under CC0-1.0 as marked upstream)

nlohmann/json is included transitively by the EWR-derived native helper.
The bundled license notice is provided in NLOHMANN_JSON_MIT.txt.

3. libusb
---------
Upstream: libusb/libusb
License: GNU Lesser General Public License v2.1 or later

EWR v1.3.1 fetches and statically links libusb on Windows for vendor-specific
USB interfaces that usbprint.sys cannot expose on some composite printers.
The LGPL-2.1 text is provided in LIBUSB_LGPL-2.1.txt.

Because the distributed native helper contains a static libusb link, PrintCuro
also installs PrintCuro-Open-Source-Compliance-0.3.90.zip. That archive contains
the exact patched EWR source used for the native helper, the exact libusb source
material produced by the pinned EWR build, the PrintCuroProtocol adapter source
and build/relink instructions. It is provided so a recipient can rebuild and
relink the native helper with a modified libusb as required by the LGPL.

Notwithstanding any contrary general PrintCuro product term, recipients are
permitted to modify/relink the separate PrintCuroProtocol native helper for
their own use and to reverse engineer that helper solely as necessary to debug
modifications to the LGPL-covered libusb component. This permission does not
extend to PrintCuro server credentials, services, or unrelated proprietary code.

4. Python runtime components
----------------------------
The frozen PrintCuroConnector.exe includes these pinned Python dependencies:

- pywin32 306 - Python Software Foundation / project license terms
- WMI 1.5.1 - MIT License
- Pillow 10.4.0 - HPND/MIT-CMU-style permissive license terms
- cryptography 43.0.3 - Apache-2.0 OR BSD-3-Clause

The Windows build copies the exact license/copyright files shipped inside the
installed pinned distributions to:
  licenses/python-runtime/<distribution>/

WMI 1.5.1 is a documented exception: its published PyPI wheel declares the
MIT license but does not carry a standalone license file. For that exact pinned
version only, the build uses the reviewed upstream MIT notice bundled as
WMI_MIT.txt and copies it to licenses/python-runtime/WMI/. The fallback is
rejected if the installed WMI version changes or its package metadata no longer
declares MIT. All other missing runtime license files still fail the release.

5. CPython and Tcl/Tk runtime
----------------------------
PrintCuroConnector.exe is frozen with the CPython runtime and uses tkinter,
which causes the matching Tcl/Tk runtime to be bundled with the GUI. The release
build copies the exact CPython LICENSE file and Tcl/Tk license.terms files from
the Python installation used to build the customer executable into:
  licenses/python-runtime/CPython/
  licenses/python-runtime/Tcl-Tk/
The build fails closed if those runtime notices cannot be found.

6. PyInstaller
--------------
Pinned build tool: PyInstaller 6.10.0
License: GPL-2.0-or-later with the PyInstaller Bootloader Exception

PyInstaller is used to build the Windows executable. PyInstaller's own project
code is not imported by the running PrintCuro application. The executable
contains its bootloader, whose exception permits distribution of the resulting
application under PrintCuro's own license. The build also copies PyInstaller's
actual license/copyright files from the pinned installation into the
python-runtime license directory.

7. Inno Setup
-------------
Inno Setup 6 is used only to compile the Windows setup program. The release
build copies the LICENSE.TXT belonging to the actual installed Inno Setup
compiler into licenses/build-tools/Inno-Setup/ before compiling the installer.
Inno Setup is not a runtime dependency of PrintCuroConnector.exe.

Trademark notice
----------------
Epson is a trademark of Seiko Epson Corporation. PrintCuro is an independent
product and is not affiliated with, sponsored by, endorsed by, or approved by
Seiko Epson Corporation.
